[PATCH] D21555: [ELF] - Do not allow duplicate global symbols version.
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 21 06:11:47 PDT 2016
grimar created this revision.
grimar added reviewers: ruiu, rafael.
grimar added subscribers: llvm-commits, grimar.
Herald added a subscriber: emaste.
For next version script:
```
VER1{
global:
a;
};
VER2{
global:
a;
};
```
gold would produce warning like:
"warning: using 'VER1' as version for 'a' which is also named in version 'VER1' in script."
Documentation also says we do not want this duplications (https://people.freebsd.org/~deischen/symver/library_versioning.txt):
"Note that you do not want to duplicate symbols in the map file. The .symver directives are all that is required to add compatibility
symbols into old versions."
So I suggest to error out such cases.
http://reviews.llvm.org/D21555
Files:
ELF/SymbolTable.cpp
test/ELF/version-script.s
Index: test/ELF/version-script.s
===================================================================
--- test/ELF/version-script.s
+++ test/ELF/version-script.s
@@ -47,6 +47,16 @@
# RUN: not ld.lld --version-script %t5.script -shared %t.o %t2.so -o %t5.so 2>&1 | \
# RUN: FileCheck -check-prefix=ERR %s
+# RUN: echo "VERSION_1.0{ \
+# RUN: global: foo1; \
+# RUN: local: *; }; \
+# RUN: VERSION_2.0 { \
+# RUN: global: foo1; \
+# RUN: local: *; }; " > %t6.script
+# RUN: not ld.lld --version-script %t6.script -shared %t.o %t2.so -o %t6.so 2>&1 | \
+# RUN: FileCheck -check-prefix=ERR2 %s
+# ERR2: duplicate symbol foo1 in version script
+
# RUN: ld.lld --version-script %t.script --dynamic-list %t.list %t.o %t2.so -o %t2
# RUN: llvm-readobj %t2 > /dev/null
Index: ELF/SymbolTable.cpp
===================================================================
--- ELF/SymbolTable.cpp
+++ ELF/SymbolTable.cpp
@@ -531,8 +531,11 @@
size_t I = 2;
for (Version &V : Config->SymbolVersions) {
for (StringRef Name : V.Globals)
- if (SymbolBody *B = find(Name))
+ if (SymbolBody *B = find(Name)) {
+ if (B->symbol()->VersionId > VER_NDX_GLOBAL)
+ error("duplicate symbol " + Name + " in version script");
B->symbol()->VersionId = I;
+ }
++I;
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21555.61362.patch
Type: text/x-patch
Size: 1354 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160621/4cc05ded/attachment.bin>
More information about the llvm-commits
mailing list