aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Backman <kaib@golang.org>2010-02-03 22:31:38 -0800
committerKai Backman <kaib@golang.org>2010-02-03 22:31:38 -0800
commit2f1a321d4faa1a229c0790c8328ab3d304347695 (patch)
tree4f57bfadf2ca72af08e0d3974b00adbd182fe5fa
parentc2cb0d70d5995fb10f2939c926a5100618af7c45 (diff)
downloadgo-2f1a321d4faa1a229c0790c8328ab3d304347695.tar.gz
go-2f1a321d4faa1a229c0790c8328ab3d304347695.zip
search for runtime.a in the package path instead of hardcoding
the location. remove last remnants of broken -l flag. R=rsc CC=golang-dev https://golang.org/cl/201042
-rw-r--r--src/cmd/5l/obj.c9
-rw-r--r--src/cmd/6l/obj.c9
-rw-r--r--src/cmd/8l/obj.c9
-rw-r--r--src/cmd/ld/lib.c28
4 files changed, 33 insertions, 22 deletions
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c
index caa13ae713..5dbd7655c5 100644
--- a/src/cmd/5l/obj.c
+++ b/src/cmd/5l/obj.c
@@ -104,7 +104,9 @@ main(int argc, char *argv[])
ARGBEGIN {
default:
c = ARGC();
- if(c >= 0 && c < sizeof(debug))
+ if(c == 'l')
+ usage();
+ if(c >= 0 && c < sizeof(debug))
debug[c]++;
break;
case 'o':
@@ -136,7 +138,6 @@ main(int argc, char *argv[])
break;
case 'u': /* produce dynamically loadable module */
dlm = 1;
- debug['l']++;
if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
readundefs(ARGF(), SIMPORT);
break;
@@ -259,9 +260,7 @@ main(int argc, char *argv[])
lastp = firstp;
addlibpath("command line", "command line", argv[0], "main");
-
- if(!debug['l'])
- loadlib();
+ loadlib();
// mark some functions that are only referenced after linker code editing
// TODO(kaib): this doesn't work, the prog can't be found in runtime
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index edae1c618c..537ef9e9aa 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -100,7 +100,9 @@ main(int argc, char *argv[])
ARGBEGIN {
default:
c = ARGC();
- if(c >= 0 && c < sizeof(debug))
+ if(c == 'l')
+ usage();
+ if(c >= 0 && c < sizeof(debug))
debug[c]++;
break;
case 'o': /* output to (next arg) */
@@ -131,7 +133,6 @@ main(int argc, char *argv[])
break;
case 'u': /* produce dynamically loadable module */
dlm = 1;
- debug['l']++;
if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
readundefs(ARGF(), SIMPORT);
break;
@@ -347,9 +348,7 @@ main(int argc, char *argv[])
lastp = firstp;
addlibpath("command line", "command line", argv[0], "main");
-
- if(!debug['l'])
- loadlib();
+ loadlib();
deadcode();
diff --git a/src/cmd/8l/obj.c b/src/cmd/8l/obj.c
index 7b8e7f2eca..6ab48622cd 100644
--- a/src/cmd/8l/obj.c
+++ b/src/cmd/8l/obj.c
@@ -105,7 +105,9 @@ main(int argc, char *argv[])
ARGBEGIN {
default:
c = ARGC();
- if(c >= 0 && c < sizeof(debug))
+ if(c == 'l')
+ usage();
+ if(c >= 0 && c < sizeof(debug))
debug[c]++;
break;
case 'o': /* output to (next arg) */
@@ -137,7 +139,6 @@ main(int argc, char *argv[])
break;
case 'u': /* produce dynamically loadable module */
dlm = 1;
- debug['l']++;
if(argv[1] != nil && argv[1][0] != '-' && !isobjfile(argv[1]))
readundefs(ARGF(), SIMPORT);
break;
@@ -385,9 +386,7 @@ main(int argc, char *argv[])
lastp = firstp;
addlibpath("command line", "command line", argv[0], "main");
-
- if(!debug['l'])
- loadlib();
+ loadlib();
deadcode();
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index df0b1a7487..a11ab90381 100644
--- a/src/cmd/ld/lib.c
+++ b/src/cmd/ld/lib.c
@@ -35,8 +35,8 @@
int iconv(Fmt*);
char symname[] = SYMDEF;
-char* libdir[16] = { "." };
-int nlibdir = 1;
+char* libdir[16];
+int nlibdir = 0;
int cout = -1;
char* goroot;
@@ -180,6 +180,11 @@ addlibpath(char *srcref, char *objref, char *file, char *pkg)
for(i=0; i<libraryp; i++)
if(strcmp(file, library[i].file) == 0)
return;
+
+ if(debug['v'])
+ Bprint(&bso, "%5.2f addlibpath: srcref: %s objref: %s file: %s pkg: %s\n",
+ cputime(), srcref, objref, file, pkg);
+
if(libraryp == nlibrary){
nlibrary = 50 + 2*libraryp;
library = realloc(library, sizeof library[0] * nlibrary);
@@ -207,15 +212,24 @@ addlibpath(char *srcref, char *objref, char *file, char *pkg)
void
loadlib(void)
{
- int i;
+ char pname[1024];
+ int i, found;
int32 h;
Sym *s;
char *a;
- i = strlen(goroot)+strlen(goarch)+strlen(goos)+20;
- a = mal(i);
- snprint(a, i, "%s/pkg/%s_%s/runtime.a", goroot, goos, goarch);
- addlibpath("internal", "internal", a, "runtime");
+ found = 0;
+ for(i=0; i<nlibdir; i++) {
+ snprint(pname, sizeof pname, "%s/runtime.a", libdir[i]);
+ if(debug['v'])
+ Bprint(&bso, "searching for runtime.a in %s\n", pname);
+ if(access(pname, AEXIST) >= 0) {
+ addlibpath("internal", "internal", pname, "runtime");
+ found = 1;
+ break;
+ }
+ }
+ if(!found) Bprint(&bso, "warning: unable to find runtime.a\n");
loop:
xrefresolv = 0;