diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gold/gold-plugin.cpp | 7 | ||||
-rw-r--r-- | tools/llvm-lto/llvm-lto.cpp | 8 | ||||
-rw-r--r-- | tools/lto/lto.cpp | 4 |
3 files changed, 18 insertions, 1 deletions
diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index bd11d1b..119631c 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -197,7 +197,7 @@ ld_plugin_status onload(ld_plugin_tv *tv) { case LDPT_ADD_SYMBOLS: add_symbols = tv->tv_u.tv_add_symbols; break; - case LDPT_GET_SYMBOLS: + case LDPT_GET_SYMBOLS_V2: get_symbols = tv->tv_u.tv_get_symbols; break; case LDPT_ADD_INPUT_FILE: @@ -386,6 +386,11 @@ static ld_plugin_status all_symbols_read_hook(void) { if (options::generate_api_file) api_file << I->syms[i].name << "\n"; + } else if (I->syms[i].resolution == LDPR_PREVAILING_DEF_IRONLY_EXP) { + lto_codegen_add_dso_symbol(code_gen, I->syms[i].name); + + if (options::generate_api_file) + api_file << I->syms[i].name << " dso only\n"; } } } diff --git a/tools/llvm-lto/llvm-lto.cpp b/tools/llvm-lto/llvm-lto.cpp index 3ecd13f..1d03fa6 100644 --- a/tools/llvm-lto/llvm-lto.cpp +++ b/tools/llvm-lto/llvm-lto.cpp @@ -50,6 +50,10 @@ ExportedSymbols("exported-symbol", cl::desc("Symbol to export from the resulting object file"), cl::ZeroOrMore); +static cl::list<std::string> +DSOSymbols("dso-symbol", + cl::desc("Symbol to put in the symtab in the resulting dso"), + cl::ZeroOrMore); int main(int argc, char **argv) { // Print a stack trace if we signal out. @@ -117,6 +121,10 @@ int main(int argc, char **argv) { for (unsigned i = 0; i < ExportedSymbols.size(); ++i) CodeGen.addMustPreserveSymbol(ExportedSymbols[i].c_str()); + // Add all the dso symbols to the table of symbols to expose. + for (unsigned i = 0; i < DSOSymbols.size(); ++i) + CodeGen.addDSOSymbol(DSOSymbols[i].c_str()); + if (!OutputFilename.empty()) { size_t len = 0; std::string ErrorInfo; diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index 7bfddcd..a3acd4c 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -260,6 +260,10 @@ void lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, cg->addMustPreserveSymbol(symbol); } +void lto_codegen_add_dso_symbol(lto_code_gen_t cg, const char *symbol) { + cg->addDSOSymbol(symbol); +} + /// lto_codegen_write_merged_modules - Writes a new file at the specified path /// that contains the merged contents of all modules added so far. Returns true /// on error (check lto_get_error_message() for details). |