forked from OSchip/llvm-project
[ELF] - Handle every global as unversioned export in versioned script.
Patch updates the version script parser to parse versioned files. In a simple way, just adding them to VersionScriptGlobals list. Differential revision: http://reviews.llvm.org/D21439 llvm-svn: 272934
This commit is contained in:
parent
dbd68dd09d
commit
95eeb7730d
|
@ -75,9 +75,12 @@ public:
|
|||
VersionScriptParser(StringRef S) : ScriptParserBase(S) {}
|
||||
|
||||
void run();
|
||||
|
||||
private:
|
||||
void parseVersion();
|
||||
};
|
||||
|
||||
void VersionScriptParser::run() {
|
||||
void VersionScriptParser::parseVersion() {
|
||||
expect("{");
|
||||
if (peek() == "global:") {
|
||||
next();
|
||||
|
@ -93,8 +96,25 @@ void VersionScriptParser::run() {
|
|||
expect(";");
|
||||
expect("}");
|
||||
expect(";");
|
||||
if (!atEOF())
|
||||
setError("expected EOF");
|
||||
}
|
||||
|
||||
void VersionScriptParser::run() {
|
||||
StringRef Msg = "anonymous version definition is used in "
|
||||
"combination with other version definitions";
|
||||
if (peek() == "{") {
|
||||
parseVersion();
|
||||
if (!atEOF())
|
||||
setError(Msg);
|
||||
return;
|
||||
}
|
||||
|
||||
while (!atEOF() && !Error) {
|
||||
if (next() == "{") {
|
||||
setError(Msg);
|
||||
return;
|
||||
}
|
||||
parseVersion();
|
||||
}
|
||||
}
|
||||
|
||||
void elf::parseVersionScript(MemoryBufferRef MB) {
|
||||
|
|
|
@ -19,6 +19,37 @@
|
|||
# RUN: ld.lld --version-script %t.script --dynamic-list %t.list %t.o %t2.so -o %t
|
||||
# RUN: llvm-readobj -dyn-symbols %t | FileCheck --check-prefix=EXE %s
|
||||
|
||||
# RUN: echo "VERSION_1.0{ \
|
||||
# RUN: global: foo1; \
|
||||
# RUN: local: *; }; \
|
||||
# RUN: VERSION_2.0{ \
|
||||
# RUN: global: foo3; \
|
||||
# RUN: local: *; }; " > %t4.script
|
||||
# RUN: ld.lld --version-script %t4.script -shared %t.o %t2.so -o %t4.so
|
||||
# RUN: llvm-readobj -dyn-symbols %t4.so | FileCheck --check-prefix=DSO %s
|
||||
|
||||
# RUN: echo "VERSION_1.0{ \
|
||||
# RUN: global: foo1; \
|
||||
# RUN: local: *; }; \
|
||||
# RUN: { \
|
||||
# RUN: global: foo3; \
|
||||
# RUN: local: *; }; " > %t5.script
|
||||
# RUN: not ld.lld --version-script %t5.script -shared %t.o %t2.so -o %t5.so 2>&1 | \
|
||||
# RUN: FileCheck -check-prefix=ERR %s
|
||||
# ERR: anonymous version definition is used in combination with other version definitions
|
||||
|
||||
# RUN: echo "{ \
|
||||
# RUN: global: foo1; \
|
||||
# RUN: local: *; }; \
|
||||
# RUN: VERSION_2.0 { \
|
||||
# RUN: global: foo3; \
|
||||
# RUN: local: *; }; " > %t5.script
|
||||
# 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: ld.lld --version-script %t.script --dynamic-list %t.list %t.o %t2.so -o %t2
|
||||
# RUN: llvm-readobj %t2 > /dev/null
|
||||
|
||||
# DSO: DynamicSymbols [
|
||||
# DSO-NEXT: Symbol {
|
||||
# DSO-NEXT: Name: @ (0)
|
||||
|
|
Loading…
Reference in New Issue