summaryrefslogtreecommitdiff
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;
}