summaryrefslogtreecommitdiff
path: root/src/cmd/6l/asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6l/asm.c')
-rw-r--r--src/cmd/6l/asm.c43
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;