summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-05-17 19:08:10 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-05-17 19:08:10 +0200
commitb599dc0e5486923085f238e146d5a1750bc168a9 (patch)
tree96d54de7ccdd1ec18e30bb0ad604beb6fa9b8fe7
parentf860f25f054305a6430d2113bb5e6c4680b1a2f3 (diff)
7l: handle dupok flag in TEXT/GLOBL data
-rw-r--r--sys/src/cmd/7l/asm.c2
-rw-r--r--sys/src/cmd/7l/l.h1
-rw-r--r--sys/src/cmd/7l/obj.c4
3 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/cmd/7l/asm.c b/sys/src/cmd/7l/asm.c
index 0cc5a27ec..0b3b444fa 100644
--- a/sys/src/cmd/7l/asm.c
+++ b/sys/src/cmd/7l/asm.c
@@ -493,7 +493,7 @@ datblk(long s, long n, int str)
}
if(l >= n)
continue;
- if(p->as != AINIT && p->as != ADYNT) {
+ if(p->as != AINIT && p->as != ADYNT && !p->from.sym->dupok) {
for(j=l+(c-i)-1; j>=l; j--)
if(buf.dbuf[j]) {
print("%P\n", p);
diff --git a/sys/src/cmd/7l/l.h b/sys/src/cmd/7l/l.h
index 55ff29b8d..8d13a7914 100644
--- a/sys/src/cmd/7l/l.h
+++ b/sys/src/cmd/7l/l.h
@@ -81,6 +81,7 @@ struct Sym
short version;
short become;
short frame;
+ char dupok;
uchar subtype;
ushort file;
vlong value;
diff --git a/sys/src/cmd/7l/obj.c b/sys/src/cmd/7l/obj.c
index fc709843d..081e7ed0b 100644
--- a/sys/src/cmd/7l/obj.c
+++ b/sys/src/cmd/7l/obj.c
@@ -839,6 +839,8 @@ loop:
diag("GLOBL must have a name\n%P", p);
errorexit();
}
+ if(p->reg & DUPOK)
+ s->dupok = 1;
if(s->type == 0 || s->type == SXREF) {
s->type = SBSS;
s->value = 0;
@@ -1122,7 +1124,7 @@ lookup(char *symb, int v)
s->version = v;
s->value = 0;
s->sig = 0;
-// s->dupok = 0;
+ s->dupok = 0;
hash[h] = s;
return s;
}