]> Cypherpunks repositories - gostls13.git/commitdiff
6l/8l: emit DWARF in macho.
authorLuuk van Dijk <lvd@golang.org>
Wed, 1 Sep 2010 19:54:28 +0000 (21:54 +0200)
committerLuuk van Dijk <lvd@golang.org>
Wed, 1 Sep 2010 19:54:28 +0000 (21:54 +0200)
R=rsc, r, ken2
CC=golang-dev
https://golang.org/cl/2128041

src/cmd/6l/asm.c
src/cmd/8l/asm.c
src/cmd/ld/dwarf.c
src/cmd/ld/dwarf.h
src/cmd/ld/macho.c

index af615e693864e98efb8bd3562e4b6530acb58186..256213fe2f4877bdd7a2e5aa9912f831ce409fdc 100644 (file)
@@ -929,7 +929,7 @@ asmb(void)
                         sh->size = elfstrsize;
                         sh->addralign = 1;
 
-                        dwarfaddheaders();
+                        dwarfaddelfheaders();
                }
 
                sh = newElfShstrtab(elfstr[ElfStrShstrtab]);
index 277fba37abb121c61d5b326adf8e6958ca3b649e..f110f6017675c2087bccc9f49ea382bffc8a9285 100644 (file)
@@ -1050,7 +1050,7 @@ asmb(void)
                        sh->addralign = 1;
                        sh->addr = symdatva + 8 + symsize;
 
-                        dwarfaddheaders();
+                        dwarfaddelfheaders();
                }
 
                sh = newElfShstrtab(elfstr[ElfStrShstrtab]);
index e889ef739becc82fa637c8304df1a2ec455be8a8..c321728dd2e09a071fa672b728f3d4ffdd64e144 100644 (file)
@@ -7,6 +7,7 @@
 #include       "../ld/dwarf.h"
 #include       "../ld/dwarf_defs.h"
 #include       "../ld/elf.h"
+#include       "../ld/macho.h"
 
 /*
  * Offsets and sizes of the .debug_* sections in the cout file.
@@ -835,7 +836,7 @@ dwarfemitdebugsections(void)
 }
 
 void
-dwarfaddheaders(void)
+dwarfaddelfheaders(void)
 {
        ElfShdr *sh;
 
@@ -857,3 +858,32 @@ dwarfaddheaders(void)
        sh->size = infosize;
        sh->addralign = 1;
 }
+
+void
+dwarfaddmachoheaders(void)
+{
+       MachoSect *msect;
+       MachoSeg *ms;
+
+       vlong fakestart;
+
+        // Zero vsize segments won't be loaded in memory, even so they
+        // have to be page aligned in the file.
+       fakestart = abbrevo & ~0xfff;
+
+        ms = newMachoSeg("__DWARF", 3);
+       ms->fileoffset = fakestart;
+       ms->filesize = abbrevo-fakestart + abbrevsize+linesize+infosize;
+
+       msect = newMachoSect(ms, "__debug_abbrev");
+       msect->off = abbrevo;
+       msect->size = abbrevsize;
+
+       msect = newMachoSect(ms, "__debug_line");
+       msect->off = lineo;
+       msect->size = linesize;
+
+       msect = newMachoSect(ms, "__debug_info");
+       msect->off = infoo;
+       msect->size = infosize;
+}
index fae38af0ac507c5818ac4e8c496ef3c119709f13..928aedd413640d85493381be7a2c1517e078c96f 100644 (file)
@@ -22,7 +22,8 @@ void dwarfaddshstrings(Sym *shstrtab);
 void dwarfemitdebugsections(void);
 
 /*
- * Add ELF section headers pointing to the sections emitted in
+ * Add section headers pointing to the sections emitted in
  * dwarfemitdebugsections.
  */
-void dwarfaddheaders(void);
+void dwarfaddelfheaders(void);
+void dwarfaddmachoheaders(void);
index 24400cf14c248127c98057d6216ce4f739806736..e081053c155d9f411354e5eae101094128ad37ca 100644 (file)
@@ -6,6 +6,7 @@
 // http://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html
 
 #include "l.h"
+#include "../ld/dwarf.h"
 #include "../ld/lib.h"
 #include "../ld/macho.h"
 
@@ -129,7 +130,7 @@ machowrite(void)
        MachoDebug *d;
        MachoLoad *l;
 
-       o1 = Boffset(&bso);
+       o1 = cpos();
 
        loadsize = 4*4*ndebug;
        for(i=0; i<nload; i++)
@@ -229,7 +230,7 @@ machowrite(void)
                LPUT(d->filesize);
        }
 
-       return Boffset(&bso) - o1;
+       return cpos() - o1;
 }
 
 static void*
@@ -617,6 +618,8 @@ asmbmacho(vlong symdatva, vlong symo)
                md = newMachoDebug();
                md->fileoffset = symo+8+symsize;
                md->filesize = lcsize;
+
+                dwarfaddmachoheaders();
        }
 
        a = machowrite();