diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-12-08 17:26:53 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-12-08 17:26:53 +0000 |
commit | 7e71415cb3f810e0d91537fe0997535a818236ac (patch) | |
tree | 6feccbcc062be4eb81e82778587de86c2ac79d67 | |
parent | dc09119776454a9dabbe87150b3ca04140fb65fb (diff) | |
download | bcm5719-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.cpp | 7 | ||||
-rw-r--r-- | lld/test/ELF/version-script-extern.s | 2 |
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 |