diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-06-10 10:59:18 +0200 |
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-06-10 10:59:18 +0200 |
| commit | c29cace1e8f3260389ea78fa4ef86d80cd5e5275 (patch) | |
| tree | 947e4435053998a194caacab99bf614d8fd5bc78 /src/cmd/6l/asm.c | |
| parent | 56135c623a865c501ab31cc940c0e22ece2673f4 (diff) | |
| download | golang-c29cace1e8f3260389ea78fa4ef86d80cd5e5275.tar.gz | |
Imported Upstream version 2011.06.09upstream-weekly/2011.06.09
Diffstat (limited to 'src/cmd/6l/asm.c')
| -rw-r--r-- | src/cmd/6l/asm.c | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/src/cmd/6l/asm.c b/src/cmd/6l/asm.c index 320f4c9e9..4c04112b7 100644 --- a/src/cmd/6l/asm.c +++ b/src/cmd/6l/asm.c @@ -698,7 +698,7 @@ asmb(void) { int32 magic; int a, dynsym; - vlong vl, startva, symo, elfsymo, elfstro, elfsymsize, machlink; + vlong vl, startva, symo, machlink; ElfEhdr *eh; ElfPhdr *ph, *pph; ElfShdr *sh; @@ -709,9 +709,6 @@ asmb(void) Bflush(&bso); elftextsh = 0; - elfsymsize = 0; - elfstro = 0; - elfsymo = 0; if(debug['v']) Bprint(&bso, "%5.2f codeblk\n", cputime()); @@ -790,36 +787,13 @@ asmb(void) symo = rnd(symo, PEFILEALIGN); break; } + seek(cout, symo, 0); switch(HEADTYPE) { default: if(iself) { - /* - * the symbol information is stored as - * 32-bit symbol table size - * 32-bit line number table size - * symbol table - * line number table - */ - seek(cout, symo+8, 0); - if(debug['v']) - Bprint(&bso, "%5.2f sp\n", cputime()); - Bflush(&bso); - if(debug['v']) - Bprint(&bso, "%5.2f pc\n", cputime()); - Bflush(&bso); - if(!debug['s']) - strnput("", INITRND-(8+symsize+lcsize)%INITRND); - cflush(); seek(cout, symo, 0); - lputl(symsize); - lputl(lcsize); + asmelfsym(); cflush(); - elfsymo = symo+8+symsize+lcsize; - seek(cout, elfsymo, 0); - asmelfsym64(); - cflush(); - elfstro = seek(cout, 0, 1); - elfsymsize = elfstro - elfsymo; ewrite(cout, elfstrdat, elfstrsize); if(debug['v']) @@ -830,7 +804,6 @@ asmb(void) break; case Hdarwin: case Hwindows: - seek(cout, symo, 0); if(debug['v']) Bprint(&bso, "%5.2f dwarf\n", cputime()); @@ -1054,15 +1027,15 @@ asmb(void) sh = newElfShdr(elfstr[ElfStrSymtab]); sh->type = SHT_SYMTAB; - sh->off = elfsymo; - sh->size = elfsymsize; + sh->off = symo; + sh->size = symsize; sh->addralign = 8; sh->entsize = 24; sh->link = eh->shnum; // link to strtab sh = newElfShdr(elfstr[ElfStrStrtab]); sh->type = SHT_STRTAB; - sh->off = elfstro; + sh->off = symo+symsize; sh->size = elfstrsize; sh->addralign = 1; @@ -1149,6 +1122,10 @@ genasmsym(void (*put)(Sym*, char*, int, vlong, vlong, int, Sym*)) Auto *a; Sym *s; + s = lookup("etext", 0); + if(s->type == STEXT) + put(s, s->name, 'T', s->value, s->size, s->version, 0); + for(s=allsym; s!=S; s=s->allsym) { if(s->hide) continue; |
