aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Cheney <dave@cheney.net>2014-03-07 15:33:44 +1100
committerDave Cheney <dave@cheney.net>2014-03-07 15:33:44 +1100
commite31a1ce109e0ddd0efba95fc724a8b424a27824d (patch)
tree9c7d4dbcc9c2b29c98e41926d47d4895c9b8a6d6 /src
parent22c668a810ac31b83d70e9f430000a94627215b2 (diff)
downloadgo-e31a1ce109e0ddd0efba95fc724a8b424a27824d.tar.xz
cmd/gc, cmd/5g, cmd/6g, cmd/8g: introduce linkarchinit and add amd64p32 support
Replaces CL 70000043. Introduce linkarchinit() from cmd/ld. For cmd/6g, switch to the amd64p32 linker model if we are building under nacl/amd64p32. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/71330045
Diffstat (limited to 'src')
-rw-r--r--src/cmd/5g/galign.c5
-rw-r--r--src/cmd/6g/galign.c7
-rw-r--r--src/cmd/8g/galign.c5
-rw-r--r--src/cmd/gc/go.h1
-rw-r--r--src/cmd/gc/lex.c14
5 files changed, 25 insertions, 7 deletions
diff --git a/src/cmd/5g/galign.c b/src/cmd/5g/galign.c
index 14d323fa7e..a62102ef84 100644
--- a/src/cmd/5g/galign.c
+++ b/src/cmd/5g/galign.c
@@ -10,6 +10,11 @@ int thechar = '5';
char* thestring = "arm";
LinkArch* thelinkarch = &linkarm;
+void
+linkarchinit(void)
+{
+}
+
vlong MAXWIDTH = (1LL<<32) - 1;
/*
diff --git a/src/cmd/6g/galign.c b/src/cmd/6g/galign.c
index ec37ceb233..d0727fe57c 100644
--- a/src/cmd/6g/galign.c
+++ b/src/cmd/6g/galign.c
@@ -10,6 +10,13 @@ int thechar = '6';
char* thestring = "amd64";
LinkArch* thelinkarch = &linkamd64;
+void
+linkarchinit(void)
+{
+ if(strcmp(getgoarch(), "amd64p32") == 0)
+ thelinkarch = &linkamd64p32;
+}
+
vlong MAXWIDTH = 1LL<<50;
int addptr = AADDQ;
diff --git a/src/cmd/8g/galign.c b/src/cmd/8g/galign.c
index 439e741553..fbd2e9ad35 100644
--- a/src/cmd/8g/galign.c
+++ b/src/cmd/8g/galign.c
@@ -10,6 +10,11 @@ int thechar = '8';
char* thestring = "386";
LinkArch* thelinkarch = &link386;
+void
+linkarchinit(void)
+{
+}
+
vlong MAXWIDTH = (1LL<<32) - 1;
/*
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 3750413a81..151032eb90 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -1505,6 +1505,7 @@ Prog* gjmp(Prog*);
void gused(Node*);
void movelarge(NodeList*);
int isfat(Type*);
+void linkarchinit(void);
void liveness(Node*, Prog*, Sym*, Sym*, Sym*);
void markautoused(Prog*);
Plist* newplist(void);
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index 430abae5b1..aeeac68a15 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -212,7 +212,14 @@ main(int argc, char *argv[])
#ifdef PLAN9
notify(catcher);
#endif
+ // Allow GOARCH=thestring or GOARCH=thestringsuffix,
+ // but not other values.
+ p = getgoarch();
+ if(strncmp(p, thestring, strlen(thestring)) != 0)
+ fatal("cannot use %cg with GOARCH=%s", thechar, p);
+ goarch = p;
+ linkarchinit();
ctxt = linknew(thelinkarch);
ctxt->diag = yyerror;
ctxt->bso = &bstdout;
@@ -259,13 +266,6 @@ main(int argc, char *argv[])
goroot = getgoroot();
goos = getgoos();
- // Allow GOARCH=thestring or GOARCH=thestringsuffix,
- // but not other values.
- p = getgoarch();
- if(strncmp(p, thestring, strlen(thestring)) != 0)
- fatal("cannot use %cg with GOARCH=%s", thechar, p);
- goarch = p;
-
nacl = strcmp(goos, "nacl") == 0;
if(nacl)
flag_largemodel = 1;