diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-05-12 22:04:30 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-05-12 22:04:30 +0200 |
commit | ecdf3f921e2a2ec768807bb09e0e7da995612565 (patch) | |
tree | 0b9b0a2b009a4d60d3e80b6a04e267e1819cbd6f /sys/src | |
parent | 73f38fc5460cb68662dd237022bda636ad734045 (diff) |
?l: remove direct hunk manipulation from linkers, just call malloc()
as with recent changes, cc's malloc() could make the hunk pointer
misaligned. in the the compilers, the hunk pointer is used directly
by the lexer with no effort to to keep the hunk pointer aligned.
alloc/malloc still return aligned pointers, but hunk itself can
be on a odd address after allocation of a odd sized amount of bytes.
however, in the linkers, this assumption appears to be differnet. as
most allocations mostly allocate padded structures. however, symbol
lookup allocates strings on byte-size ganularity and the cc's malloc
would misalign the hunk pointer after the malloc() call. while the
rest of the code assumed hunk pointer was always aligned.
this change removes all the hunk pointer fiddling from the linker,
and we just call malloc() (which will use the fast implmenentation
of cc, and should not really make much of a performance difference).
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/1l/obj.c | 30 | ||||
-rw-r--r-- | sys/src/cmd/2l/obj.c | 30 | ||||
-rw-r--r-- | sys/src/cmd/5l/obj.c | 44 | ||||
-rw-r--r-- | sys/src/cmd/6l/obj.c | 30 | ||||
-rw-r--r-- | sys/src/cmd/7l/l.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/7l/obj.c | 38 | ||||
-rw-r--r-- | sys/src/cmd/8l/obj.c | 30 | ||||
-rw-r--r-- | sys/src/cmd/kl/obj.c | 26 | ||||
-rw-r--r-- | sys/src/cmd/ql/obj.c | 26 | ||||
-rw-r--r-- | sys/src/cmd/vl/obj.c | 44 |
10 files changed, 40 insertions, 259 deletions
diff --git a/sys/src/cmd/1l/obj.c b/sys/src/cmd/1l/obj.c index 094e17101..0b555a100 100644 --- a/sys/src/cmd/1l/obj.c +++ b/sys/src/cmd/1l/obj.c @@ -498,12 +498,7 @@ dosym: } } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -760,12 +755,7 @@ loop: goto loop; } - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->line = bloc[2] | (bloc[3] << 8) | (bloc[4] << 16) | (bloc[5] << 24); p->back = 2; @@ -1025,12 +1015,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -1046,14 +1031,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = (Prog*)malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/2l/obj.c b/sys/src/cmd/2l/obj.c index aa050520b..e6bc78ab5 100644 --- a/sys/src/cmd/2l/obj.c +++ b/sys/src/cmd/2l/obj.c @@ -513,12 +513,7 @@ dosym: } } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -775,12 +770,7 @@ loop: goto loop; } - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->line = bloc[2] | (bloc[3] << 8) | (bloc[4] << 16) | (bloc[5] << 24); p->back = 2; @@ -1049,12 +1039,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -1070,14 +1055,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/5l/obj.c b/sys/src/cmd/5l/obj.c index 9aabb6d7e..4d520b7a2 100644 --- a/sys/src/cmd/5l/obj.c +++ b/sys/src/cmd/5l/obj.c @@ -484,23 +484,13 @@ zaddr(uchar *p, Adr *a, Sym *h[]) break; case D_SCONST: - while(nhunk < NSNAME) - gethunk(); - a->sval = (char*)hunk; - nhunk -= NSNAME; - hunk += NSNAME; - + a->sval = malloc(NSNAME); memmove(a->sval, p+4, NSNAME); c += NSNAME; break; case D_FCONST: - while(nhunk < sizeof(Ieee)) - gethunk(); - a->ieee = (Ieee*)hunk; - nhunk -= NSNAME; - hunk += NSNAME; - + a->ieee = malloc(sizeof(Ieee)); a->ieee->l = p[4] | (p[5]<<8) | (p[6]<<16) | (p[7]<<24); a->ieee->h = p[8] | (p[9]<<8) | @@ -524,12 +514,7 @@ zaddr(uchar *p, Adr *a, Sym *h[]) return c; } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -814,12 +799,7 @@ loop: goto loop; } - if(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->scond = bloc[1]; p->reg = bloc[2]; @@ -1101,12 +1081,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l); memmove(s->name, symb, l); @@ -1123,14 +1098,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/6l/obj.c b/sys/src/cmd/6l/obj.c index 71824398d..ba8984773 100644 --- a/sys/src/cmd/6l/obj.c +++ b/sys/src/cmd/6l/obj.c @@ -560,12 +560,7 @@ zaddr(uchar *p, Adr *a, Sym *h[]) } } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -856,12 +851,7 @@ loop: goto loop; } - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->line = bloc[2] | (bloc[3] << 8) | (bloc[4] << 16) | (bloc[5] << 24); p->back = 2; @@ -1147,12 +1137,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -1170,14 +1155,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/7l/l.h b/sys/src/cmd/7l/l.h index c72202b8a..55ff29b8d 100644 --- a/sys/src/cmd/7l/l.h +++ b/sys/src/cmd/7l/l.h @@ -373,7 +373,6 @@ void errorexit(void); void export(void); void follow(void); void histtoauto(void); -void* halloc(usize); int isnop(Prog*); double ieeedtod(Ieee*); long ieeedtof(Ieee*); diff --git a/sys/src/cmd/7l/obj.c b/sys/src/cmd/7l/obj.c index 985d2e0c2..35dfc5766 100644 --- a/sys/src/cmd/7l/obj.c +++ b/sys/src/cmd/7l/obj.c @@ -460,13 +460,13 @@ zaddr(uchar *p, Adr *a, Sym *h[]) break; case D_SCONST: - a->sval = halloc(NSNAME); + a->sval = malloc(NSNAME); memmove(a->sval, p+4, NSNAME); c += NSNAME; break; case D_FCONST: - a->ieee = halloc(sizeof(Ieee)); + a->ieee = malloc(sizeof(Ieee)); a->ieee->l = p[4] | (p[5]<<8) | (p[6]<<16) | (p[7]<<24); a->ieee->h = p[8] | (p[9]<<8) | @@ -490,7 +490,7 @@ zaddr(uchar *p, Adr *a, Sym *h[]) return c; } - u = halloc(sizeof(Auto)); + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -785,7 +785,7 @@ loop: goto loop; } - p = halloc(sizeof(Prog)); + p = malloc(sizeof(Prog)); p->as = o; p->reg = bloc[2] & 0x3F; if(bloc[2] & 0x80) @@ -1113,12 +1113,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l); memmove(s->name, symb, l); @@ -1135,32 +1130,11 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Sym)); *p = zprg; return p; } -void* -halloc(usize n) -{ - void *p; - - n = (n+7)&~7; - while(nhunk < n) - gethunk(); - p = hunk; - nhunk -= n; - hunk += n; - return p; -} - void doprof1(void) { diff --git a/sys/src/cmd/8l/obj.c b/sys/src/cmd/8l/obj.c index 530e6ea3b..1450ba44d 100644 --- a/sys/src/cmd/8l/obj.c +++ b/sys/src/cmd/8l/obj.c @@ -548,12 +548,7 @@ zaddr(uchar *p, Adr *a, Sym *h[]) } } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -843,12 +838,7 @@ loop: goto loop; } - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->line = bloc[2] | (bloc[3] << 8) | (bloc[4] << 16) | (bloc[5] << 24); p->back = 2; @@ -1122,12 +1112,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -1145,14 +1130,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/kl/obj.c b/sys/src/cmd/kl/obj.c index dd324dfb3..39511e1d3 100644 --- a/sys/src/cmd/kl/obj.c +++ b/sys/src/cmd/kl/obj.c @@ -683,12 +683,7 @@ loop: goto loop; } - if(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->reg = bloc[1] & 0x7f; if(bloc[1] & 0x80) @@ -940,12 +935,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -961,17 +951,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - int n; - - n = (sizeof(Prog) + 3) & ~3; - while(nhunk < n) - gethunk(); - - p = (Prog*)hunk; - nhunk -= n; - hunk += n; - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/ql/obj.c b/sys/src/cmd/ql/obj.c index cfa8c335f..f6108ab6e 100644 --- a/sys/src/cmd/ql/obj.c +++ b/sys/src/cmd/ql/obj.c @@ -791,12 +791,7 @@ loop: goto loop; } - if(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->reg = bloc[2] & 0x3f; if(bloc[2] & 0x80) @@ -1073,12 +1068,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l + 1); memmove(s->name, symb, l); @@ -1095,17 +1085,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - int n; - - n = (sizeof(Prog) + 3) & ~3; - while(nhunk < n) - gethunk(); - - p = (Prog*)hunk; - nhunk -= n; - hunk += n; - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } diff --git a/sys/src/cmd/vl/obj.c b/sys/src/cmd/vl/obj.c index 82cff0f22..9d3f9fc29 100644 --- a/sys/src/cmd/vl/obj.c +++ b/sys/src/cmd/vl/obj.c @@ -439,23 +439,13 @@ zaddr(uchar *p, Adr *a, Sym *h[]) break; case D_SCONST: - while(nhunk < NSNAME) - gethunk(); - a->sval = (char*)hunk; - nhunk -= NSNAME; - hunk += NSNAME; - + a->sval = malloc(NSNAME); memmove(a->sval, p+4, NSNAME); c += NSNAME; break; case D_FCONST: - while(nhunk < sizeof(Ieee)) - gethunk(); - a->ieee = (Ieee*)hunk; - nhunk -= NSNAME; - hunk += NSNAME; - + a->ieee = malloc(sizeof(Ieee)); a->ieee->l = p[4] | (p[5]<<8) | (p[6]<<16) | (p[7]<<24); a->ieee->h = p[8] | (p[9]<<8) | @@ -479,12 +469,7 @@ zaddr(uchar *p, Adr *a, Sym *h[]) return c; } - while(nhunk < sizeof(Auto)) - gethunk(); - u = (Auto*)hunk; - nhunk -= sizeof(Auto); - hunk += sizeof(Auto); - + u = malloc(sizeof(Auto)); u->link = curauto; curauto = u; u->asym = s; @@ -748,12 +733,7 @@ loop: goto loop; } - if(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + p = malloc(sizeof(Prog)); p->as = o; p->reg = bloc[1] & 0x7f; if(bloc[1] & 0x80) @@ -1025,12 +1005,7 @@ lookup(char *symb, int v) if(memcmp(s->name, symb, l) == 0) return s; - while(nhunk < sizeof(Sym)) - gethunk(); - s = (Sym*)hunk; - nhunk -= sizeof(Sym); - hunk += sizeof(Sym); - + s = malloc(sizeof(Sym)); s->name = malloc(l); memmove(s->name, symb, l); @@ -1046,14 +1021,7 @@ lookup(char *symb, int v) Prog* prg(void) { - Prog *p; - - while(nhunk < sizeof(Prog)) - gethunk(); - p = (Prog*)hunk; - nhunk -= sizeof(Prog); - hunk += sizeof(Prog); - + Prog *p = malloc(sizeof(Prog)); *p = zprg; return p; } |