summaryrefslogtreecommitdiff
path: root/src/liblink/sym.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/liblink/sym.c')
-rw-r--r--src/liblink/sym.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/src/liblink/sym.c b/src/liblink/sym.c
index cba50e9c7..bd8551846 100644
--- a/src/liblink/sym.c
+++ b/src/liblink/sym.c
@@ -44,19 +44,20 @@ static struct {
char *name;
int val;
} headers[] = {
- "darwin", Hdarwin,
- "dragonfly", Hdragonfly,
- "elf", Helf,
- "freebsd", Hfreebsd,
- "linux", Hlinux,
- "nacl", Hnacl,
- "netbsd", Hnetbsd,
- "openbsd", Hopenbsd,
- "plan9", Hplan9,
- "solaris", Hsolaris,
- "windows", Hwindows,
- "windowsgui", Hwindows,
- 0, 0
+ {"android", Hlinux},
+ {"darwin", Hdarwin},
+ {"dragonfly", Hdragonfly},
+ {"elf", Helf},
+ {"freebsd", Hfreebsd},
+ {"linux", Hlinux},
+ {"nacl", Hnacl},
+ {"netbsd", Hnetbsd},
+ {"openbsd", Hopenbsd},
+ {"plan9", Hplan9},
+ {"solaris", Hsolaris},
+ {"windows", Hwindows},
+ {"windowsgui", Hwindows},
+ {0, 0},
};
int
@@ -90,7 +91,7 @@ linknew(LinkArch *arch)
char *p;
char buf[1024];
- nuxiinit();
+ nuxiinit(arch);
ctxt = emallocz(sizeof *ctxt);
ctxt->arch = arch;
@@ -127,8 +128,6 @@ linknew(LinkArch *arch)
default:
sysfatal("unknown thread-local storage offset for %s", headstr(ctxt->headtype));
case Hplan9:
- ctxt->tlsoffset = -2*ctxt->arch->ptrsize;
- break;
case Hwindows:
break;
case Hlinux:
@@ -155,13 +154,16 @@ linknew(LinkArch *arch)
case '8':
ctxt->tlsoffset = -8;
break;
+ case '5':
+ ctxt->tlsoffset = 0;
+ break;
}
break;
case Hdarwin:
/*
* OS X system constants - offset from 0(GS) to our TLS.
- * Explained in ../../pkg/runtime/cgo/gcc_darwin_*.c.
+ * Explained in ../../runtime/cgo/gcc_darwin_*.c.
*/
switch(ctxt->arch->thechar) {
default:
@@ -192,19 +194,14 @@ LSym*
linknewsym(Link *ctxt, char *symb, int v)
{
LSym *s;
- int l;
- l = strlen(symb) + 1;
s = malloc(sizeof(*s));
memset(s, 0, sizeof(*s));
s->dynid = -1;
s->plt = -1;
s->got = -1;
- s->name = malloc(l + 1);
- memmove(s->name, symb, l);
- s->name[l] = '\0';
-
+ s->name = estrdup(symb);
s->type = 0;
s->version = v;
s->value = 0;