aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorAkshat Kumar <seed@mail.nanosouffle.net>2012-05-29 12:32:42 -0400
committerRuss Cox <rsc@golang.org>2012-05-29 12:32:42 -0400
commit154c84cdacd00a12da7ec44fa34a5c7d01823827 (patch)
treeadadef9ac17c5fbe9fcaa850439f42f432a149c6 /src/cmd/ld
parentfefae6eed1df88397b4a53ed932e3cf3b32345ad (diff)
downloadgo-154c84cdacd00a12da7ec44fa34a5c7d01823827.tar.xz
cmd/6l: Fixes for 64-bit Plan 9
Plan 9 versions for amd64 have 2 megabyte pages. This also fixes the logic for 32-bit vs 64-bit Plan 9, making 64-bit the default, and adds logic to generate a symbols table. R=golang-dev, rsc, rminnich, ality, 0intro CC=golang-dev, john https://golang.org/cl/6218046
Diffstat (limited to 'src/cmd/ld')
-rw-r--r--src/cmd/ld/data.c2
-rw-r--r--src/cmd/ld/symtab.c9
2 files changed, 8 insertions, 3 deletions
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c
index 4eff24024e..1f64a84708 100644
--- a/src/cmd/ld/data.c
+++ b/src/cmd/ld/data.c
@@ -1058,7 +1058,7 @@ address(void)
segdata.filelen = 0;
if(HEADTYPE == Hwindows)
segdata.fileoff = segtext.fileoff + rnd(segtext.len, PEFILEALIGN);
- if(HEADTYPE == Hplan9x32)
+ if(HEADTYPE == Hplan9x64 || HEADTYPE == Hplan9x32)
segdata.fileoff = segtext.fileoff + segtext.filelen;
data = nil;
noptr = nil;
diff --git a/src/cmd/ld/symtab.c b/src/cmd/ld/symtab.c
index 359a658e74..c43051a392 100644
--- a/src/cmd/ld/symtab.c
+++ b/src/cmd/ld/symtab.c
@@ -125,7 +125,7 @@ asmelfsym(void)
static void
putplan9sym(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
{
- int i;
+ int i, l;
USED(go);
USED(ver);
@@ -144,6 +144,11 @@ putplan9sym(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
case 'z':
case 'Z':
case 'm':
+ l = 4;
+ if(HEADTYPE == Hplan9x64 && !debug['8']) {
+ lputb(addr>>32);
+ l = 8;
+ }
lputb(addr);
cput(t+0x80); /* 0x80 is variable length */
@@ -164,7 +169,7 @@ putplan9sym(Sym *x, char *s, int t, vlong addr, vlong size, int ver, Sym *go)
cput(s[i]);
cput(0);
}
- symsize += 4 + 1 + i + 1;
+ symsize += l + 1 + i + 1;
break;
default:
return;