1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:14:41 -07:00

6l, 8l: emit macho dwarf info before linkedit section

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5272050
This commit is contained in:
Mikkel Krautz 2011-10-18 15:58:10 -04:00 committed by Russ Cox
parent c7cf56bec9
commit 4566868b41
4 changed files with 28 additions and 7 deletions

View File

@ -703,7 +703,7 @@ asmb(void)
{
int32 magic;
int a, dynsym;
vlong vl, startva, symo, machlink;
vlong vl, startva, symo, dwarfoff, machlink;
ElfEhdr *eh;
ElfPhdr *ph, *pph;
ElfShdr *sh;
@ -738,8 +738,19 @@ asmb(void)
datblk(segdata.vaddr, segdata.filelen);
machlink = 0;
if(HEADTYPE == Hdarwin)
if(HEADTYPE == Hdarwin) {
if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime());
dwarfoff = rnd(HEADR+segtext.len, INITRND) + rnd(segdata.filelen, INITRND);
cseek(dwarfoff);
segdwarf.fileoff = cpos();
dwarfemitdebugsections();
segdwarf.filelen = cpos() - segdwarf.fileoff;
machlink = domacholink();
}
switch(HEADTYPE) {
default:
@ -811,7 +822,6 @@ asmb(void)
dwarfemitdebugsections();
}
break;
case Hdarwin:
case Hwindows:
if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime());

View File

@ -660,7 +660,7 @@ asmb(void)
{
int32 v, magic;
int a, dynsym;
uint32 symo, startva, machlink;
uint32 symo, startva, dwarfoff, machlink;
ElfEhdr *eh;
ElfPhdr *ph, *pph;
ElfShdr *sh;
@ -691,8 +691,19 @@ asmb(void)
datblk(segdata.vaddr, segdata.filelen);
machlink = 0;
if(HEADTYPE == Hdarwin)
if(HEADTYPE == Hdarwin) {
if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime());
dwarfoff = rnd(HEADR+segtext.len, INITRND) + rnd(segdata.filelen, INITRND);
cseek(dwarfoff);
segdwarf.fileoff = cpos();
dwarfemitdebugsections();
segdwarf.filelen = cpos() - segdwarf.fileoff;
machlink = domacholink();
}
if(iself) {
/* index of elf text section; needed by asmelfsym, double-checked below */
@ -772,7 +783,6 @@ asmb(void)
cflush();
}
break;
case Hdarwin:
case Hwindows:
if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime());

View File

@ -129,6 +129,7 @@ EXTERN int havedynamic;
EXTERN Segment segtext;
EXTERN Segment segdata;
EXTERN Segment segsym;
EXTERN Segment segdwarf;
void addlib(char *src, char *obj);
void addlibpath(char *srcref, char *objref, char *file, char *pkg);

View File

@ -505,7 +505,7 @@ domacholink(void)
size = s1->size + s2->size + s3->size + s4->size;
if(size > 0) {
linkoff = rnd(HEADR+segtext.len, INITRND) + rnd(segdata.filelen, INITRND);
linkoff = rnd(HEADR+segtext.len, INITRND) + rnd(segdata.filelen, INITRND) + rnd(segdwarf.filelen, INITRND);
cseek(linkoff);
cwrite(s1->p, s1->size);