summaryrefslogtreecommitdiff
path: root/src/cmd/ld/lib.c
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
commitf3d2f3eb13763301d160f24a024ecd3250ceafd8 (patch)
tree7df11cafd4d2bf11cabf9e9866d3abd0cd1de42f /src/cmd/ld/lib.c
parent44ef2dd81d436072a9813451a58cf64e61bef2ad (diff)
downloadgolang-f3d2f3eb13763301d160f24a024ecd3250ceafd8.tar.gz
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 http://codereview.appspot.com/201042
Diffstat (limited to 'src/cmd/ld/lib.c')
-rw-r--r--src/cmd/ld/lib.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index df0b1a748..a11ab9038 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;