diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 15ad405c6ac..13bc64e8354 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -42,6 +42,7 @@ namespace { ld_plugin_get_symbols get_symbols = NULL; ld_plugin_add_input_file add_input_file = NULL; ld_plugin_add_input_library add_input_library = NULL; + ld_plugin_set_extra_library_path set_extra_library_path = NULL; ld_plugin_message message = discard_message; int api_version = 0; @@ -66,6 +67,7 @@ namespace options { static std::string bc_path; static std::string as_path; static std::vector pass_through; + static std::string extra_library_path; // Additional options to pass into the code generator. // Note: This array will contain all plugin options which are not claimed // as plugin exclusive to pass to the code generator. @@ -88,6 +90,8 @@ namespace options { } else { as_path = opt.substr(strlen("as=")); } + } else if (opt.startswith("extra-library-path=")) { + extra_library_path = opt.substr(strlen("extra_library_path=")); } else if (opt.startswith("pass-through=")) { llvm::StringRef item = opt.substr(strlen("pass-through=")); pass_through.push_back(item.str()); @@ -198,6 +202,9 @@ ld_plugin_status onload(ld_plugin_tv *tv) { case LDPT_ADD_INPUT_LIBRARY: add_input_library = tv->tv_u.tv_add_input_file; break; + case LDPT_SET_EXTRA_LIBRARY_PATH: + set_extra_library_path = tv->tv_u.tv_set_extra_library_path; + break; case LDPT_MESSAGE: message = tv->tv_u.tv_message; break; @@ -445,6 +452,12 @@ static ld_plugin_status all_symbols_read_hook(void) { return LDPS_ERR; } + if (!options::extra_library_path.empty() && + set_extra_library_path(options::extra_library_path.c_str()) != LDPS_OK) { + (*message)(LDPL_ERROR, "Unable to set the extra library path."); + return LDPS_ERR; + } + for (std::vector::iterator i = options::pass_through.begin(), e = options::pass_through.end(); i != e; ++i) {