summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsin-Yi Chen <hsinyichen@google.com>2024-04-05 01:22:16 +0800
committerHsin-Yi Chen <hsinyichen@google.com>2024-04-11 18:44:32 +0800
commitb35ab566dc27eac059b29a7c2ce90b082c47928f (patch)
tree063df29e5f8baee12d59abb2cf3b3e34804af471
parent8471b71856b7b015c89df8b470023aea685f7753 (diff)
downloaddevelopment-b35ab566dc27eac059b29a7c2ce90b082c47928f.tar.gz
Simplify the constructor of HeaderAbiLinker
VersionScriptParser is initialized outside of HeaderAbiLinker so that the constructor of HeaderAbiLinker takes fewer parameters. Test: ./test.py Bug: 314010764 Change-Id: Ifca216875a7311fab98be70457fa92b906a976a7
-rw-r--r--vndk/tools/header-checker/src/linker/header_abi_linker.cpp107
1 files changed, 53 insertions, 54 deletions
diff --git a/vndk/tools/header-checker/src/linker/header_abi_linker.cpp b/vndk/tools/header-checker/src/linker/header_abi_linker.cpp
index 98e6226c2..657504ecc 100644
--- a/vndk/tools/header-checker/src/linker/header_abi_linker.cpp
+++ b/vndk/tools/header-checker/src/linker/header_abi_linker.cpp
@@ -128,23 +128,17 @@ static llvm::cl::opt<std::size_t> sources_per_thread(
class HeaderAbiLinker {
public:
- HeaderAbiLinker(
- const std::vector<std::string> &dump_files,
- const std::vector<std::string> &exported_header_dirs,
- const std::string &version_script,
- const std::string &so_file,
- const std::string &linked_dump,
- const std::string &arch,
- const std::string &api,
- const utils::ApiLevelMap &api_level_map,
- const std::vector<std::string> &excluded_symbol_versions,
- const std::vector<std::string> &excluded_symbol_tags)
- : dump_files_(dump_files), exported_header_dirs_(exported_header_dirs),
- version_script_(version_script), so_file_(so_file),
- out_dump_name_(linked_dump),
- arch_(arch), api_(api), api_level_map_(api_level_map),
- excluded_symbol_versions_(excluded_symbol_versions),
- excluded_symbol_tags_(excluded_symbol_tags) {}
+ HeaderAbiLinker(const std::vector<std::string> &dump_files,
+ const std::vector<std::string> &exported_header_dirs,
+ repr::VersionScriptParser &version_script_parser,
+ const std::string &version_script, const std::string &so_file,
+ const std::string &linked_dump)
+ : dump_files_(dump_files),
+ exported_header_dirs_(exported_header_dirs),
+ version_script_parser_(version_script_parser),
+ version_script_(version_script),
+ so_file_(so_file),
+ out_dump_name_(linked_dump) {}
bool LinkAndDump();
@@ -187,14 +181,10 @@ class HeaderAbiLinker {
private:
const std::vector<std::string> &dump_files_;
const std::vector<std::string> &exported_header_dirs_;
+ repr::VersionScriptParser &version_script_parser_;
const std::string &version_script_;
const std::string &so_file_;
const std::string &out_dump_name_;
- const std::string &arch_;
- const std::string &api_;
- const utils::ApiLevelMap &api_level_map_;
- const std::vector<std::string> &excluded_symbol_versions_;
- const std::vector<std::string> &excluded_symbol_tags_;
std::set<std::string> exported_headers_;
@@ -429,30 +419,13 @@ bool HeaderAbiLinker::ReadExportedSymbols() {
}
bool HeaderAbiLinker::ReadExportedSymbolsFromVersionScript() {
- std::optional<utils::ApiLevel> api_level = api_level_map_.Parse(api_);
- if (!api_level) {
- llvm::errs() << "-api must be either \"current\" or an integer (e.g. 21)\n";
- return false;
- }
-
std::ifstream stream(version_script_, std::ios_base::in);
if (!stream) {
llvm::errs() << "Failed to open version script file\n";
return false;
}
- repr::VersionScriptParser parser;
- parser.SetArch(arch_);
- parser.SetApiLevel(api_level.value());
- parser.SetApiLevelMap(api_level_map_);
- for (auto &&version : excluded_symbol_versions_) {
- parser.AddExcludedSymbolVersion(version);
- }
- for (auto &&tag : excluded_symbol_tags_) {
- parser.AddExcludedSymbolTag(tag);
- }
-
- version_script_symbols_ = parser.Parse(stream);
+ version_script_symbols_ = version_script_parser_.Parse(stream);
if (!version_script_symbols_) {
llvm::errs() << "Failed to parse version script file\n";
return false;
@@ -477,35 +450,61 @@ bool HeaderAbiLinker::ReadExportedSymbolsFromSharedObjectFile() {
return true;
}
-int main(int argc, const char **argv) {
- HideIrrelevantCommandLineOptions(header_linker_category);
- llvm::cl::ParseCommandLineOptions(argc, argv, "header-linker");
-
- if (so_file.empty() && version_script.empty()) {
- llvm::errs() << "One of -so or -v needs to be specified\n";
- return -1;
- }
-
+static bool InitializeVersionScriptParser(repr::VersionScriptParser &parser) {
utils::ApiLevelMap api_level_map;
if (!api_map.empty()) {
std::ifstream stream(api_map);
if (!stream) {
llvm::errs() << "Failed to open " << api_map << "\n";
- return -1;
+ return false;
}
if (!api_level_map.Load(stream)) {
llvm::errs() << "Failed to load " << api_map << "\n";
- return -1;
+ return false;
}
}
+ std::optional<utils::ApiLevel> api_level = api_level_map.Parse(api);
+ if (!api_level) {
+ llvm::errs() << "-api must be \"current\", an integer, or a codename in "
+ "-api-map\n";
+ return false;
+ }
+
+ parser.SetArch(arch);
+ parser.SetApiLevel(api_level.value());
+ parser.SetApiLevelMap(api_level_map);
+ for (auto &&version : excluded_symbol_versions) {
+ parser.AddExcludedSymbolVersion(version);
+ }
+ for (auto &&tag : excluded_symbol_tags) {
+ parser.AddExcludedSymbolTag(tag);
+ }
+
+ return true;
+}
+
+int main(int argc, const char **argv) {
+ HideIrrelevantCommandLineOptions(header_linker_category);
+ llvm::cl::ParseCommandLineOptions(argc, argv, "header-linker");
+
+ if (so_file.empty() && version_script.empty()) {
+ llvm::errs() << "One of -so or -v needs to be specified\n";
+ return -1;
+ }
+
+ repr::VersionScriptParser version_script_parser;
+ if (!InitializeVersionScriptParser(version_script_parser)) {
+ return -1;
+ }
+
if (no_filter) {
static_cast<std::vector<std::string> &>(exported_header_dirs).clear();
}
- HeaderAbiLinker Linker(dump_files, exported_header_dirs, version_script,
- so_file, linked_dump, arch, api, api_level_map,
- excluded_symbol_versions, excluded_symbol_tags);
+ HeaderAbiLinker Linker(dump_files, exported_header_dirs,
+ version_script_parser, version_script, so_file,
+ linked_dump);
if (!Linker.LinkAndDump()) {
llvm::errs() << "Failed to link and dump elements\n";