summary refs log tree commit diff
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin@c9x.me>2022-09-09 17:54:06 +0200
committerQuentin Carbonneaux <quentin@c9x.me>2022-10-08 21:48:47 +0200
commit2e38c86af6c91bfb23dfb06b517a00c11fd4c1b3 (patch)
treee92c3e9ca07bcf794db0d44fd3159b132857314b
parent00a30954aca97004cb6f586bdeeabb488f1e3c3f (diff)
downloadroux-2e38c86af6c91bfb23dfb06b517a00c11fd4c1b3.tar.gz
do not drop relocation kind in alias analysis
-rw-r--r--alias.c1
-rw-r--r--all.h1
-rw-r--r--load.c2
3 files changed, 3 insertions, 1 deletions
diff --git a/alias.c b/alias.c
index aa3846e..f4d7f91 100644
--- a/alias.c
+++ b/alias.c
@@ -19,6 +19,7 @@ getalias(Alias *a, Ref r, Fn *fn)
 		if (c->type == CAddr) {
 			a->type = ASym;
 			a->label = c->label;
+			a->rel = c->rel;
 		} else
 			a->type = ACon;
 		a->offset = c->bits.i;
diff --git a/all.h b/all.h
index 14ebf68..8303c62 100644
--- a/all.h
+++ b/all.h
@@ -282,6 +282,7 @@ struct Alias {
 	Ref base;
 	uint32_t label;
 	int64_t offset;
+	int rel;
 	Alias *slot;
 };
 
diff --git a/load.c b/load.c
index cca8400..7146ce8 100644
--- a/load.c
+++ b/load.c
@@ -155,7 +155,7 @@ load(Slice sl, bits msk, Loc *l)
 			c.type = CAddr;
 			c.label = a->label;
 			c.bits.i = a->offset;
-			c.rel = RelDef;
+			c.rel = a->rel;
 			r = newcon(&c, curf);
 			break;
 		}