summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-12-08 17:26:53 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-12-08 17:26:53 +0000
commit7e71415cb3f810e0d91537fe0997535a818236ac (patch)
tree6feccbcc062be4eb81e82778587de86c2ac79d67
parentdc09119776454a9dabbe87150b3ca04140fb65fb (diff)
downloadbcm5719-llvm-7e71415cb3f810e0d91537fe0997535a818236ac.tar.gz
bcm5719-llvm-7e71415cb3f810e0d91537fe0997535a818236ac.zip
Add support for 'extern "C"'.
It is used by Qt. llvm-svn: 289074
-rw-r--r--lld/ELF/LinkerScript.cpp7
-rw-r--r--lld/test/ELF/version-script-extern.s2
2 files changed, 6 insertions, 3 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 8a0c39d60ec..f62cdcea12c 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -1929,14 +1929,17 @@ std::vector<SymbolVersion> ScriptParser::readSymbols() {
// Reads an "extern C++" directive, e.g.,
// "extern "C++" { ns::*; "f(int, double)"; };"
std::vector<SymbolVersion> ScriptParser::readVersionExtern() {
- expect("\"C++\"");
+ StringRef Tok = next();
+ bool IsCXX = Tok == "\"C++\"";
+ if (!IsCXX && Tok != "\"C\"")
+ setError("Unknown Language");
expect("{");
std::vector<SymbolVersion> Ret;
while (!Error && peek() != "}") {
StringRef Tok = next();
bool HasWildcard = !Tok.startswith("\"") && hasWildcard(Tok);
- Ret.push_back({unquote(Tok), true, HasWildcard});
+ Ret.push_back({unquote(Tok), IsCXX, HasWildcard});
expect(";");
}
diff --git a/lld/test/ELF/version-script-extern.s b/lld/test/ELF/version-script-extern.s
index 5703bcaf6fc..2b89839c369 100644
--- a/lld/test/ELF/version-script-extern.s
+++ b/lld/test/ELF/version-script-extern.s
@@ -5,7 +5,7 @@
# RUN: echo ' extern "C++" { "foo(int)"; "zed(int)"; "abc::abc()"; };' >> %t.script
# RUN: echo "};" >> %t.script
# RUN: echo "LIBSAMPLE_2.0 { global:" >> %t.script
-# RUN: echo ' extern "C++" { "bar(int)"; };' >> %t.script
+# RUN: echo ' extern "C" { _Z3bari; };' >> %t.script
# RUN: echo "};" >> %t.script
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
# RUN: llvm-readobj -V -dyn-symbols %t.so | FileCheck --check-prefix=DSO %s
OpenPOWER on IntegriCloud