summaryrefslogtreecommitdiff
path: root/src/cmd/6l/span.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6l/span.c')
-rw-r--r--src/cmd/6l/span.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/src/cmd/6l/span.c b/src/cmd/6l/span.c
index acb8f071d..8ac0543a8 100644
--- a/src/cmd/6l/span.c
+++ b/src/cmd/6l/span.c
@@ -150,9 +150,9 @@ xdefine(char *p, int t, vlong v)
}
void
-putsymb(char *s, int t, vlong v, int ver)
+putsymb(char *s, int t, vlong v, int ver, char *go)
{
- int i, f, l;
+ int i, j, f, l;
if(t == 'f')
s++;
@@ -181,7 +181,13 @@ putsymb(char *s, int t, vlong v, int ver)
cput(s[i]);
cput(0);
}
- symsize += l + 1 + i + 1;
+ j = 0;
+ if(go) {
+ for(j=0; go[j]; j++)
+ cput(go[j]);
+ }
+ cput(0);
+ symsize += l + 1 + i + 1 + j + 1;
if(debug['n']) {
if(t == 'z' || t == 'Z') {
@@ -194,9 +200,9 @@ putsymb(char *s, int t, vlong v, int ver)
return;
}
if(ver)
- Bprint(&bso, "%c %.8llux %s<%d>\n", t, v, s, ver);
+ Bprint(&bso, "%c %.8llux %s<%d> %s\n", t, v, s, ver, go);
else
- Bprint(&bso, "%c %.8llux %s\n", t, v, s);
+ Bprint(&bso, "%c %.8llux %s %s\n", t, v, s, go);
}
}
@@ -210,25 +216,25 @@ asmsym(void)
s = lookup("etext", 0);
if(s->type == STEXT)
- putsymb(s->name, 'T', s->value, s->version);
+ putsymb(s->name, 'T', s->value, s->version, nil);
for(h=0; h<NHASH; h++)
for(s=hash[h]; s!=S; s=s->link)
switch(s->type) {
case SCONST:
- putsymb(s->name, 'D', s->value, s->version);
+ putsymb(s->name, 'D', s->value, s->version, gotypefor(s->name));
continue;
case SDATA:
- putsymb(s->name, 'D', s->value+INITDAT, s->version);
+ putsymb(s->name, 'D', s->value+INITDAT, s->version, gotypefor(s->name));
continue;
case SBSS:
- putsymb(s->name, 'B', s->value+INITDAT, s->version);
+ putsymb(s->name, 'B', s->value+INITDAT, s->version, gotypefor(s->name));
continue;
case SFILE:
- putsymb(s->name, 'f', s->value, s->version);
+ putsymb(s->name, 'f', s->value, s->version, nil);
continue;
}
@@ -240,22 +246,23 @@ asmsym(void)
/* filenames first */
for(a=p->to.autom; a; a=a->link)
if(a->type == D_FILE)
- putsymb(a->asym->name, 'z', a->aoffset, 0);
+ putsymb(a->asym->name, 'z', a->aoffset, 0, nil);
else
if(a->type == D_FILE1)
- putsymb(a->asym->name, 'Z', a->aoffset, 0);
+ putsymb(a->asym->name, 'Z', a->aoffset, 0, nil);
- putsymb(s->name, 'T', s->value, s->version);
+ putsymb(s->name, 'T', s->value, s->version, gotypefor(s->name));
/* frame, auto and param after */
- putsymb(".frame", 'm', p->to.offset+8, 0);
+ putsymb(".frame", 'm', p->to.offset+8, 0, nil);
+ /* TODO(rsc): Add types for D_AUTO and D_PARAM */
for(a=p->to.autom; a; a=a->link)
if(a->type == D_AUTO)
- putsymb(a->asym->name, 'a', -a->aoffset, 0);
+ putsymb(a->asym->name, 'a', -a->aoffset, 0, nil);
else
if(a->type == D_PARAM)
- putsymb(a->asym->name, 'p', a->aoffset, 0);
+ putsymb(a->asym->name, 'p', a->aoffset, 0, nil);
}
if(debug['v'] || debug['n'])
Bprint(&bso, "symsize = %lud\n", symsize);