diff options
Diffstat (limited to 'src/cmd/8l/asm.c')
-rw-r--r-- | src/cmd/8l/asm.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c index 73ceeba6e..005634e42 100644 --- a/src/cmd/8l/asm.c +++ b/src/cmd/8l/asm.c @@ -275,7 +275,7 @@ doelf(void) Sym *s, *shstrtab, *dynamic, *dynstr, *d; int h, nsym, t; - if(HEADTYPE != 7 && HEADTYPE != 8 && HEADTYPE != 9) + if(!iself) return; /* predefine strings we need for section headers */ @@ -504,6 +504,8 @@ asmb(void) switch(HEADTYPE) { default: + if(iself) + goto Elfseek; diag("unknown header type %d", HEADTYPE); case 0: seek(cout, rnd(HEADR+textsize, 8192), 0); @@ -529,9 +531,7 @@ asmb(void) } cflush(); break; - case 7: - case 8: - case 9: + Elfseek: case 10: v = rnd(HEADR+textsize, INITRND); seek(cout, v, 0); @@ -570,6 +570,8 @@ asmb(void) Bflush(&bso); switch(HEADTYPE) { default: + if(iself) + goto Elfsym; case 0: seek(cout, rnd(HEADR+textsize, 8192)+datsize, 0); break; @@ -587,9 +589,7 @@ asmb(void) case 6: symo = rnd(HEADR+textsize, INITRND)+rnd(datsize, INITRND)+machlink; break; - case 7: - case 8: - case 9: + Elfsym: case 10: symo = rnd(HEADR+textsize, INITRND)+datsize; symo = rnd(symo, INITRND); @@ -627,6 +627,8 @@ asmb(void) seek(cout, 0L, 0); switch(HEADTYPE) { default: + if(iself) + goto Elfput; case 0: /* garbage */ lput(0x160L<<16); /* magic and sections */ lput(0L); /* time and date */ @@ -760,11 +762,9 @@ asmb(void) asmbmacho(symdatva, symo); break; - case 7: - case 8: - case 9: + Elfput: /* elf 386 */ - if(HEADTYPE == 8) + if(HEADTYPE == 8 || HEADTYPE == 11) debug['d'] = 1; eh = getElfEhdr(); @@ -833,7 +833,7 @@ asmb(void) ph->memsz = w+bsssize; ph->align = INITRND; - if(!debug['s'] && HEADTYPE != 8) { + if(!debug['s'] && HEADTYPE != 8 && HEADTYPE != 11) { ph = newElfPhdr(); ph->type = PT_LOAD; ph->flags = PF_W+PF_R; |