aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-02-03 16:30:45 -0800
committerRuss Cox <rsc@golang.org>2010-02-03 16:30:45 -0800
commit00f4c6a1b5bc9ed76529d596ac28ecdaf890fb52 (patch)
treebef856d02112c4d4f537874e02c7750c4b4f8a98
parent4a9a0056c1684b47f7986b0224b308e45e94af6e (diff)
downloadgo-00f4c6a1b5bc9ed76529d596ac28ecdaf890fb52.tar.gz
go-00f4c6a1b5bc9ed76529d596ac28ecdaf890fb52.zip
ld: include main and runtime in the library loop
Fixes #585. R=r CC=golang-dev https://golang.org/cl/195075
-rw-r--r--src/cmd/5l/obj.c2
-rw-r--r--src/cmd/6l/obj.c2
-rw-r--r--src/cmd/8l/obj.c2
-rw-r--r--src/cmd/ld/lib.c46
-rw-r--r--src/cmd/ld/lib.h1
5 files changed, 36 insertions, 17 deletions
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c
index 292a0df7a6..caa13ae713 100644
--- a/src/cmd/5l/obj.c
+++ b/src/cmd/5l/obj.c
@@ -258,7 +258,7 @@ main(int argc, char *argv[])
firstp = prg();
lastp = firstp;
- objfile(argv[0], "main");
+ addlibpath("command line", "command line", argv[0], "main");
if(!debug['l'])
loadlib();
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index cbb20616a7..edae1c618c 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -346,7 +346,7 @@ main(int argc, char *argv[])
firstp = prg();
lastp = firstp;
- objfile(argv[0], "main");
+ addlibpath("command line", "command line", argv[0], "main");
if(!debug['l'])
loadlib();
diff --git a/src/cmd/8l/obj.c b/src/cmd/8l/obj.c
index bcdc548dfc..7b8e7f2eca 100644
--- a/src/cmd/8l/obj.c
+++ b/src/cmd/8l/obj.c
@@ -384,7 +384,7 @@ main(int argc, char *argv[])
firstp = prg();
lastp = firstp;
- objfile(argv[0], "main");
+ addlibpath("command line", "command line", argv[0], "main");
if(!debug['l'])
loadlib();
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index 550cce3209..df0b1a7487 100644
--- a/src/cmd/ld/lib.c
+++ b/src/cmd/ld/lib.c
@@ -94,7 +94,6 @@ addlib(char *src, char *obj)
{
char name[1024], pname[1024], comp[256], *p;
int i, search;
- Library *l;
if(histfrogp <= 0)
return;
@@ -160,9 +159,26 @@ addlib(char *src, char *obj)
if(debug['v'])
Bprint(&bso, "%5.2f addlib: %s %s pulls in %s\n", cputime(), obj, src, pname);
+
+ addlibpath(src, obj, pname, name);
+}
+
+/*
+ * add library to library list.
+ * srcref: src file referring to package
+ * objref: object file referring to package
+ * file: object file, e.g., /home/rsc/go/pkg/container/vector.a
+ * pkg: package import path, e.g. container/vector
+ */
+void
+addlibpath(char *srcref, char *objref, char *file, char *pkg)
+{
+ int i;
+ Library *l;
+ char *p;
for(i=0; i<libraryp; i++)
- if(strcmp(pname, library[i].file) == 0)
+ if(strcmp(file, library[i].file) == 0)
return;
if(libraryp == nlibrary){
nlibrary = 50 + 2*libraryp;
@@ -171,20 +187,20 @@ addlib(char *src, char *obj)
l = &library[libraryp++];
- p = mal(strlen(obj) + 1);
- strcpy(p, obj);
+ p = mal(strlen(objref) + 1);
+ strcpy(p, objref);
l->objref = p;
- p = mal(strlen(src) + 1);
- strcpy(p, src);
+ p = mal(strlen(srcref) + 1);
+ strcpy(p, srcref);
l->srcref = p;
- p = mal(strlen(pname) + 1);
- strcpy(p, pname);
+ p = mal(strlen(file) + 1);
+ strcpy(p, file);
l->file = p;
- p = mal(strlen(name) + 1);
- strcpy(p, name);
+ p = mal(strlen(pkg) + 1);
+ strcpy(p, pkg);
l->pkg = p;
}
@@ -196,6 +212,11 @@ loadlib(void)
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");
+
loop:
xrefresolv = 0;
for(i=0; i<libraryp; i++) {
@@ -203,16 +224,13 @@ loop:
Bprint(&bso, "%5.2f autolib: %s (from %s)\n", cputime(), library[i].file, library[i].objref);
objfile(library[i].file, library[i].pkg);
}
+
if(xrefresolv)
for(h=0; h<nelem(hash); h++)
for(s = hash[h]; s != S; s = s->link)
if(s->type == SXREF)
goto loop;
- i = strlen(goroot)+strlen(goarch)+strlen(goos)+20;
- a = mal(i);
- snprint(a, i, "%s/pkg/%s_%s/runtime.a", goroot, goos, goarch);
- objfile(a, "runtime");
}
void
diff --git a/src/cmd/ld/lib.h b/src/cmd/ld/lib.h
index 8943b05aa6..7b08705af7 100644
--- a/src/cmd/ld/lib.h
+++ b/src/cmd/ld/lib.h
@@ -63,6 +63,7 @@ EXTERN int32 nsymbol;
EXTERN char* thestring;
void addlib(char *src, char *obj);
+void addlibpath(char *srcref, char *objref, char *file, char *pkg);
void copyhistfrog(char *buf, int nbuf);
void addhist(int32 line, int type);
void histtoauto(void);