]> Cypherpunks repositories - gostls13.git/commitdiff
[68]l: expose genasmsym.
authorLuuk van Dijk <lvd@golang.org>
Tue, 19 Oct 2010 16:09:18 +0000 (18:09 +0200)
committerLuuk van Dijk <lvd@golang.org>
Tue, 19 Oct 2010 16:09:18 +0000 (18:09 +0200)
R=rsc
CC=golang-dev
https://golang.org/cl/2512042

src/cmd/6l/l.h
src/cmd/8l/l.h
src/cmd/8l/symtab.c

index e3f409e07832f893277aba38dd92615e827ab601..c79c6837d67da5a77ef178f9f5fc3386711f768c 100644 (file)
@@ -397,6 +397,7 @@ void        doprof2(void);
 void   dostkoff(void);
 vlong  entryvalue(void);
 void   follow(void);
+void   genasmsym(void (*put)(char*, int, vlong, vlong, int, Sym*));
 void   gethunk(void);
 void   gotypestrings(void);
 void   listinit(void);
index 53dc63c583838eee03f64c6f3cdbf4f02b83b6f2..72d2adcee4863f011238d14c7fb8228b1a8b2b25 100644 (file)
@@ -346,6 +346,7 @@ void        doprof2(void);
 void   dostkoff(void);
 int32  entryvalue(void);
 void   follow(void);
+void   genasmsym(void (*put)(char*, int, vlong, vlong, int, Sym*));
 void   instinit(void);
 void   listinit(void);
 Sym*   lookup(char*, int);
index be8636a2d5dfaac61d69b83af4ba29616df5a7ac..356dc6a7b92f0ef1d6638d519bfc57c3860ce3f1 100644 (file)
@@ -34,7 +34,7 @@
 #include       "../ld/lib.h"
 
 void
-putsymb(char *s, int t, int32 v, int ver, Sym *go)
+putsymb(char *s, int t, vlong v, vlong size, int ver, Sym *go)
 {
        int i, f;
        vlong gv;
@@ -89,7 +89,7 @@ putsymb(char *s, int t, int32 v, int ver, Sym *go)
 }
 
 void
-asmsym(void)
+genasmsym(void (*put)(char*, int, vlong, vlong, int, Sym*))
 {
        Auto *a;
        Sym *s;
@@ -97,10 +97,10 @@ asmsym(void)
 
        s = lookup("etext", 0);
        if(s->type == STEXT)
-               putsymb(s->name, 'T', s->value, s->version, 0);
+               put(s->name, 'T', s->value, s->size, s->version, 0);
 
-       for(h=0; h<NHASH; h++)
-               for(s=hash[h]; s!=S; s=s->hash)
+       for(h=0; h<NHASH; h++) {
+               for(s=hash[h]; s!=S; s=s->hash) {
                        switch(s->type) {
                        case SCONST:
                        case SRODATA:
@@ -108,52 +108,60 @@ asmsym(void)
                        case SELFDATA:
                                if(!s->reachable)
                                        continue;
-                               putsymb(s->name, 'D', symaddr(s), s->version, s->gotype);
+                               put(s->name, 'D', symaddr(s), s->size, s->version, s->gotype);
                                continue;
 
                        case SMACHO:
                                if(!s->reachable)
                                        continue;
-                               putsymb(s->name, 'D', s->value+INITDAT+segdata.filelen-dynptrsize, s->version, s->gotype);
+                               put(s->name, 'D', s->value+INITDAT+segdata.filelen-dynptrsize, s->size, s->version, s->gotype);
                                continue;
 
                        case SBSS:
                                if(!s->reachable)
                                        continue;
-                               putsymb(s->name, 'B', s->value+INITDAT, s->version, s->gotype);
+                               put(s->name, 'B', s->value+INITDAT, s->size, s->version, s->gotype);
                                continue;
 
                        case SFIXED:
-                               putsymb(s->name, 'B', s->value, s->version, s->gotype);
+                               put(s->name, 'B', s->value, s->size, s->version, s->gotype);
                                continue;
 
                        case SFILE:
-                               putsymb(s->name, 'f', s->value, s->version, 0);
+                               put(s->name, 'f', s->value, 0, s->version, 0);
                                continue;
                        }
+               }
+       }
 
        for(s = textp; s != nil; s = s->next) {
                /* filenames first */
                for(a=s->autom; a; a=a->link)
                        if(a->type == D_FILE)
-                               putsymb(a->asym->name, 'z', a->aoffset, 0, 0);
+                               put(a->asym->name, 'z', a->aoffset, 0, 0, 0);
                        else
                        if(a->type == D_FILE1)
-                               putsymb(a->asym->name, 'Z', a->aoffset, 0, 0);
+                               put(a->asym->name, 'Z', a->aoffset, 0, 0, 0);
 
-               putsymb(s->name, 'T', s->value, s->version, s->gotype);
+               put(s->name, 'T', s->value, s->size, s->version, s->gotype);
 
                /* frame, auto and param after */
-               putsymb(".frame", 'm', s->text->to.offset+4, 0, 0);
+               put(".frame", 'm', s->text->to.offset+4, 0, 0, 0);
 
                for(a=s->autom; a; a=a->link)
                        if(a->type == D_AUTO)
-                               putsymb(a->asym->name, 'a', -a->aoffset, 0, a->gotype);
+                               put(a->asym->name, 'a', -a->aoffset, 0, 0, a->gotype);
                        else
                        if(a->type == D_PARAM)
-                               putsymb(a->asym->name, 'p', a->aoffset, 0, a->gotype);
+                               put(a->asym->name, 'p', a->aoffset, 0, 0, a->gotype);
        }
        if(debug['v'] || debug['n'])
                Bprint(&bso, "symsize = %ud\n", symsize);
        Bflush(&bso);
 }
+
+void
+asmsym(void)
+{
+       genasmsym(putsymb);
+}