goos goarch
SVN=121348
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index 55dcaac..0e5dafe 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -32,15 +32,11 @@
#include "l.h"
#include <ar.h>
-#ifndef DEFAULT
-#define DEFAULT '9'
-#endif
-
char *noname = "<none>";
char symname[] = SYMDEF;
char thechar = '6';
-char *thestring = "amd64";
-char *paramspace = "FP";
+char* thestring = "amd64";
+char* paramspace = "FP";
/*
* -H2 -T4136 -R4096 is plan9 64-bit format
@@ -90,7 +86,7 @@
INITDAT = -1;
INITRND = -1;
INITENTRY = 0;
-HEADTYPE = 6; // botch
+
ARGBEGIN {
default:
c = ARGC();
@@ -142,14 +138,22 @@
diag("usage: 6l [-options] objects");
errorexit();
}
- if(!debug['9'] && !debug['U'] && !debug['B'])
- debug[DEFAULT] = 1;
+
+ mywhatsys(); // get goroot, goarch, goos
+ if(strcmp(goarch, thestring) != 0)
+ print("goarch is not known: %s\n", goarch);
+
if(HEADTYPE == -1) {
- if(debug['B'])
- HEADTYPE = 2;
- if(debug['9'])
- HEADTYPE = 2;
+ HEADTYPE = 2;
+ if(strcmp(goos, "linux") == 0)
+ HEADTYPE = 7;
+ else
+ if(strcmp(goos, "darwin") == 0)
+ HEADTYPE = 6;
+ else
+ print("goos is not known: %s\n", goos);
}
+
switch(HEADTYPE) {
default:
diag("unknown -H option");
@@ -190,6 +194,15 @@
if(INITRND == -1)
INITRND = 4096;
break;
+ case 7: /* elf64 executable */
+ HEADR = rnd(64L+2*56L, 16);
+ if(INITTEXT == -1)
+ INITTEXT = 0x400000L+HEADR;
+ if(INITDAT == -1)
+ INITDAT = 0;
+ if(INITRND == -1)
+ INITRND = 4096;
+ break;
}
if(INITDAT != 0 && INITRND != 0)
print("warning: -D0x%llux is ignored because of -R0x%lux\n",
@@ -300,7 +313,7 @@
if(i >= D_X0+8)
regrex[i] = Rxr | Rxx | Rxb;
}
- if(i >= D_CR+8 && i <= D_CR+15)
+ if(i >= D_CR+8 && i <= D_CR+15)
regrex[i] = Rxr;
}
@@ -333,14 +346,18 @@
firstp = prg();
lastp = firstp;
- if(INITENTRY == 0) {
- INITENTRY = "_main";
- if(debug['p'])
- INITENTRY = "_mainp";
- if(!debug['l'])
- lookup(INITENTRY, 0)->type = SXREF;
- } else if(!(*INITENTRY >= '0' && *INITENTRY <= '9'))
- lookup(INITENTRY, 0)->type = SXREF;
+ if(INITENTRY == nil) {
+ INITENTRY = "_rt0";
+ a = mal(strlen(INITENTRY)+strlen(goarch)+strlen(goos)+10);
+ strcpy(a, INITENTRY);
+ strcat(a, "_");
+ strcat(a, goarch);
+ strcat(a, "_");
+ strcat(a, goos);
+ INITENTRY = a;
+ }
+
+ lookup(INITENTRY, 0)->type = SXREF;
while(*argv)
objfile(*argv++);
@@ -349,6 +366,7 @@
firstp = firstp->link;
if(firstp == P)
errorexit();
+
if(doexp || dlm){
EXPTAB = "_exporttab";
zerosig(EXPTAB);
@@ -365,6 +383,7 @@
}
export();
}
+
patch();
follow();
dodata();
@@ -812,8 +831,8 @@
r = bsize - bloc;
if(r < 7)
goto eof;
- if(memcmp(bloc, "x86-64\n", 7) != 0) {
- diag("file not x86-64: %s\n", pn);
+ if(memcmp(bloc, thestring, strlen(thestring)) != 0) {
+ diag("file not %s\n", thestring);
return;
}