8l: emit DWARF in ELF.

R=rsc, r, ken2
CC=golang-dev
https://golang.org/cl/2004046
This commit is contained in:
Luuk van Dijk 2010-08-30 22:20:38 +02:00
parent 5c603dbb75
commit b433552ebc
7 changed files with 481 additions and 416 deletions

View file

@ -641,8 +641,7 @@ asmb(void)
dwarfemitdebugsections();
}
} else
if(dlm){
} else if(dlm){
seek(cout, HEADR+textsize+datsize, 0);
asmdyn();
cflush();

View file

@ -394,9 +394,9 @@ Prog* brchain(Prog*);
Prog* brloop(Prog*);
void buildop(void);
void cflush(void);
vlong cpos(void);
void ckoff(Sym*, int32);
Prog* copyp(Prog*);
vlong cpos(void);
double cputime(void);
void datblk(int32, int32);
void deadcode(void);

View file

@ -9,8 +9,10 @@ TARG=8l
OFILES=\
asm.$O\
dwarf.$O\
elf.$O\
enam.$O\
go.$O\
lib.$O\
list.$O\
macho.$O\
@ -19,11 +21,12 @@ OFILES=\
pass.$O\
pe.$O\
span.$O\
go.$O\
HFILES=\
l.h\
../8l/8.out.h\
../ld/dwarf.h\
../ld/elf.h\
../ld/macho.h\
../ld/pe.h\

View file

@ -31,6 +31,7 @@
#include "l.h"
#include "../ld/lib.h"
#include "../ld/elf.h"
#include "../ld/dwarf.h"
#include "../ld/macho.h"
#include "../ld/pe.h"
@ -293,6 +294,7 @@ doelf(void)
elfstr[ElfStrGosymcounts] = addstring(shstrtab, ".gosymcounts");
elfstr[ElfStrGosymtab] = addstring(shstrtab, ".gosymtab");
elfstr[ElfStrGopclntab] = addstring(shstrtab, ".gopclntab");
dwarfaddshstrings(shstrtab);
}
elfstr[ElfStrShstrtab] = addstring(shstrtab, ".shstrtab");
@ -649,8 +651,13 @@ asmb(void)
lputl(symsize);
lputl(lcsize);
cflush();
}
else if(dlm){
if(!debug['s']) {
seek(cout, symo+8+symsize+lcsize, 0);
if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime());
dwarfemitdebugsections();
}
} else if(dlm){
seek(cout, HEADR+textsize+datsize, 0);
asmdyn();
cflush();
@ -1042,6 +1049,8 @@ asmb(void)
sh->size = w;
sh->addralign = 1;
sh->addr = symdatva + 8 + symsize;
dwarfaddheaders();
}
sh = newElfShstrtab(elfstr[ElfStrShstrtab]);
@ -1118,6 +1127,13 @@ cflush(void)
cbc = sizeof(buf.cbuf);
}
/* Current position in file */
vlong
cpos(void)
{
return seek(cout, 0, 1) + sizeof(buf.cbuf) - cbc;
}
void
datblk(int32 s, int32 n)
{

View file

@ -345,6 +345,7 @@ Prog* brloop(Prog*);
void cflush(void);
void ckoff(Sym*, int32);
Prog* copyp(Prog*);
vlong cpos(void);
double cputime(void);
void datblk(int32, int32);
void diag(char*, ...);

View file

@ -33,6 +33,7 @@
#include "../ld/lib.h"
#include "../ld/elf.h"
#include "../ld/macho.h"
#include "../ld/dwarf.h"
#include "../ld/pe.h"
#include <ar.h>
@ -604,6 +605,7 @@ loop:
histfrogp++;
} else
collapsefrog(s);
dwarfaddfrag(s->value, s->name);
}
goto loop;
}

File diff suppressed because it is too large Load diff