diff options
author | Ian Lance Taylor <iant@golang.org> | 2014-04-16 20:28:53 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2014-04-16 20:28:53 -0700 |
commit | 827aab07b80cd8ad26548a6fa234b7d038537d33 (patch) | |
tree | 5e150c4c9824eec4aa0e829c260948f801318884 | |
parent | 32dffef0980eb810b97f48eb9dfabb33602a0472 (diff) | |
download | go-827aab07b80cd8ad26548a6fa234b7d038537d33.tar.gz go-827aab07b80cd8ad26548a6fa234b7d038537d33.zip |
cmd/ld: don't pass -rdynamic to external linker if -static is used
Fixes #7800.
LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/87790051
-rw-r--r-- | src/cmd/ld/lib.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c index 78b8cf2bad..29de54e3cf 100644 --- a/src/cmd/ld/lib.c +++ b/src/cmd/ld/lib.c @@ -654,6 +654,20 @@ hostlink(void) if(*p == '\0') break; argv[argc++] = p; + + // clang, unlike GCC, passes -rdynamic to the linker + // even when linking with -static, causing a linker + // error when using GNU ld. So take out -rdynamic if + // we added it. We do it in this order, rather than + // only adding -rdynamic later, so that -extldflags + // can override -rdynamic without using -static. + if(iself && strncmp(p, "-static", 7) == 0 && (p[7]==' ' || p[7]=='\0')) { + for(i=0; i<argc; i++) { + if(strcmp(argv[i], "-rdynamic") == 0) + argv[i] = "-static"; + } + } + p = strchr(p + 1, ' '); } |