summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/ld
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>1997-02-01 20:28:38 +0000
committerjdp <jdp@FreeBSD.org>1997-02-01 20:28:38 +0000
commit4aa42acf80675a1b9ad53e9baa49ebc3d94ad6fc (patch)
tree46a2c962129fca561544c702b10fee5dbb2ad461 /gnu/usr.bin/ld
parent1a26545f6f4bc7a817edd5002adb00b1f9738b84 (diff)
downloadFreeBSD-src-4aa42acf80675a1b9ad53e9baa49ebc3d94ad6fc.zip
FreeBSD-src-4aa42acf80675a1b9ad53e9baa49ebc3d94ad6fc.tar.gz
Fix a bug involving alias (N_INDR) symbols. When building a shared
library with a shared object dependency that contained alias symbols, the linker incorrectly counted the number of symbols that would be written, resulting in a fatal internal error. Since our libc now contains some alias symbols (in "net/res_stubs.c"), this was sufficient to tickle the bug: "ld -Bshareable foo.so -lc". To fix it, I moved the accounting of alias symbols to a later point in the processing, where it is possible to count only those symbols that will actually be written to the output file. This fix is well-confined to affect alias symbols only. I have tested it with a full "make world". I am going to merge it into -2.2 after a few more days of living with it in -current.
Diffstat (limited to 'gnu/usr.bin/ld')
-rw-r--r--gnu/usr.bin/ld/ld.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gnu/usr.bin/ld/ld.c b/gnu/usr.bin/ld/ld.c
index 900eb68..ce2b3a4 100644
--- a/gnu/usr.bin/ld/ld.c
+++ b/gnu/usr.bin/ld/ld.c
@@ -1373,8 +1373,6 @@ enter_global_ref(lsp, name, entry)
lsp->nzlist.nz_type = N_TEXT|N_EXT;
lsp->nzlist.nz_value = 0;
make_executable = 0;
- } else {
- global_alias_count++;
}
#if 0
if (sp->flags & GS_REFERENCED)
@@ -2382,6 +2380,14 @@ digest_pass2()
defined_global_sym_count++;
}
+ /*
+ * Count the aliases that will appear in the output.
+ */
+ if (sp->alias && !sp->so_defined && !sp->alias->so_defined &&
+ (sp->defined || relocatable_output ||
+ !building_shared_object))
+ global_alias_count++;
+
if ((sp->defined & N_TYPE) == N_SETV) {
/*
* Set length word at front of vector and zero byte
OpenPOWER on IntegriCloud