1
0
mirror of https://github.com/golang/go synced 2024-11-25 09:07:58 -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; int32 magic;
int a, dynsym; int a, dynsym;
vlong vl, startva, symo, machlink; vlong vl, startva, symo, dwarfoff, machlink;
ElfEhdr *eh; ElfEhdr *eh;
ElfPhdr *ph, *pph; ElfPhdr *ph, *pph;
ElfShdr *sh; ElfShdr *sh;
@ -738,8 +738,19 @@ asmb(void)
datblk(segdata.vaddr, segdata.filelen); datblk(segdata.vaddr, segdata.filelen);
machlink = 0; 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(); machlink = domacholink();
}
switch(HEADTYPE) { switch(HEADTYPE) {
default: default:
@ -811,7 +822,6 @@ asmb(void)
dwarfemitdebugsections(); dwarfemitdebugsections();
} }
break; break;
case Hdarwin:
case Hwindows: case Hwindows:
if(debug['v']) if(debug['v'])
Bprint(&bso, "%5.2f dwarf\n", cputime()); Bprint(&bso, "%5.2f dwarf\n", cputime());

View File

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

View File

@ -129,6 +129,7 @@ EXTERN int havedynamic;
EXTERN Segment segtext; EXTERN Segment segtext;
EXTERN Segment segdata; EXTERN Segment segdata;
EXTERN Segment segsym; EXTERN Segment segsym;
EXTERN Segment segdwarf;
void addlib(char *src, char *obj); void addlib(char *src, char *obj);
void addlibpath(char *srcref, char *objref, char *file, char *pkg); 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; size = s1->size + s2->size + s3->size + s4->size;
if(size > 0) { 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); cseek(linkoff);
cwrite(s1->p, s1->size); cwrite(s1->p, s1->size);