]> Cypherpunks repositories - gostls13.git/commitdiff
ld: re-add ELF symbol tables
authorRuss Cox <rsc@golang.org>
Wed, 8 Dec 2010 18:52:50 +0000 (13:52 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 8 Dec 2010 18:52:50 +0000 (13:52 -0500)
R=iant
CC=golang-dev
https://golang.org/cl/3506041

src/cmd/ld/symtab.c

index 184b7c52821f5ba436d79416161b97463e5341c4..26e4def648e0a8e592b83198d8511a0fbfddf59a 100644 (file)
@@ -61,7 +61,7 @@ putelfstr(char *s)
 }
 
 void
-putelfsymb(char *s, int t, vlong addr, vlong size, int ver, Sym *go)
+putelfsym64(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
 {
        int bind, type, shndx, stroff;
        
@@ -95,9 +95,48 @@ putelfsymb(char *s, int t, vlong addr, vlong size, int ver, Sym *go)
 void
 asmelfsym64(void)
 {
-//     genasmsym(putelfsymb64);
+       genasmsym(putelfsym64);
 }
 
+void
+putelfsym32(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
+{
+       int bind, type, shndx, stroff;
+       
+       bind = STB_GLOBAL;
+       switch(t) {
+       default:
+               return;
+       case 'T':
+               type = STT_FUNC;
+               shndx = elftextsh + 0;
+               break;
+       case 'D':
+               type = STT_OBJECT;
+               shndx = elftextsh + 1;
+               break;
+       case 'B':
+               type = STT_OBJECT;
+               shndx = elftextsh + 2;
+               break;
+       }
+       
+       stroff = putelfstr(s);
+       LPUT(stroff);   // string
+       LPUT(addr);
+       LPUT(size);
+       cput((bind<<4)|(type&0xF));
+       cput(0);
+       WPUT(shndx);
+}
+
+void
+asmelfsym32(void)
+{
+       genasmsym(putelfsym32);
+}
+
+
 static Sym *symt;
 
 static void