Merge "Parse tags attached to version blocks" into main am: d82a1cfd3e
Original change: https://android-review.googlesource.com/c/platform/development/+/2759037 Change-Id: If4afae5b7e15335984e30419d309aa329566fb3a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -280,7 +280,8 @@ std::unique_ptr<ExportedSymbolSet> VersionScriptParser::Parse(
|
||||
bool exclude_symbol_version = utils::HasMatchingGlobPattern(
|
||||
excluded_symbol_versions_, version.c_str());
|
||||
|
||||
if (!ParseVersionBlock(exclude_symbol_version)) {
|
||||
ParsedTags tags = ParseSymbolTags(line);
|
||||
if (!ParseVersionBlock(exclude_symbol_version || !IsSymbolExported(tags))) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,15 +165,34 @@ TEST(VersionScriptParserTest, VisibilityLabels) {
|
||||
|
||||
TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
static const char testdata[] = R"TESTDATA(
|
||||
LIBEX_1.0 {
|
||||
LIBEX_1.0 { # introduced=18
|
||||
global:
|
||||
test1; # introduced=19
|
||||
test2; # introduced=19 introduced-arm64=20
|
||||
test3; # introduced-arm64=20 introduced=19
|
||||
test4; # future
|
||||
test5; # introduced=17
|
||||
};
|
||||
)TESTDATA";
|
||||
|
||||
{
|
||||
VersionScriptParser parser;
|
||||
parser.SetArch("arm64");
|
||||
parser.SetApiLevel(17);
|
||||
|
||||
std::istringstream stream(testdata);
|
||||
std::unique_ptr<ExportedSymbolSet> result(parser.Parse(stream));
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
|
||||
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test1"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
|
||||
{
|
||||
VersionScriptParser parser;
|
||||
parser.SetArch("arm64");
|
||||
@@ -189,6 +208,7 @@ TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -206,6 +226,7 @@ TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -223,6 +244,7 @@ TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
EXPECT_NE(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -240,6 +262,7 @@ TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
EXPECT_NE(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -257,6 +280,7 @@ TEST(VersionScriptParserTest, ParseSymbolTagsIntroduced) {
|
||||
EXPECT_NE(funcs.end(), funcs.find("test2"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test3"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test4"));
|
||||
EXPECT_NE(funcs.end(), funcs.find("test5"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,10 +348,10 @@ TEST(VersionScriptParserTest, ParseSymbolTagsArch) {
|
||||
|
||||
TEST(VersionScriptParserTest, ExcludeSymbolTags) {
|
||||
static const char testdata[] = R"TESTDATA(
|
||||
LIBEX_1.0 {
|
||||
LIBEX_1.0 { # exclude-tag-1
|
||||
global:
|
||||
test1;
|
||||
test2; # exclude-tag
|
||||
test2; # exclude-tag-2
|
||||
};
|
||||
)TESTDATA";
|
||||
|
||||
@@ -345,10 +369,23 @@ TEST(VersionScriptParserTest, ExcludeSymbolTags) {
|
||||
EXPECT_NE(funcs.end(), funcs.find("test2"));
|
||||
}
|
||||
|
||||
// exclude_symbol_tags = {"exclude-tag"}
|
||||
{
|
||||
VersionScriptParser parser;
|
||||
parser.AddExcludedSymbolTag("exclude-tag");
|
||||
parser.AddExcludedSymbolTag("exclude-tag-1");
|
||||
|
||||
std::istringstream stream(testdata);
|
||||
std::unique_ptr<ExportedSymbolSet> result(parser.Parse(stream));
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
const ExportedSymbolSet::FunctionMap &funcs = result->GetFunctions();
|
||||
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test1"));
|
||||
EXPECT_EQ(funcs.end(), funcs.find("test2"));
|
||||
}
|
||||
|
||||
{
|
||||
VersionScriptParser parser;
|
||||
parser.AddExcludedSymbolTag("exclude-tag-2");
|
||||
|
||||
std::istringstream stream(testdata);
|
||||
std::unique_ptr<ExportedSymbolSet> result(parser.Parse(stream));
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
LIBVERSION_SCRIPT_EXAMPLE_1.0 {
|
||||
global:
|
||||
test1;
|
||||
extern "C++" {
|
||||
Test3::*; # mytag
|
||||
};
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
||||
LIBVERSION_SCRIPT_EXAMPLE_PRIVATE { # mytag
|
||||
global:
|
||||
test2;
|
||||
extern "C++" {
|
||||
Test4::*;
|
||||
};
|
||||
} LIBVERSION_SCRIPT_EXAMPLE_1.0;
|
||||
@@ -533,7 +533,7 @@ TEST_MODULES = [
|
||||
srcs=[
|
||||
'integration/version_script_example/example.cpp',
|
||||
],
|
||||
version_script='integration/version_script_example/example.map.txt',
|
||||
version_script='integration/version_script_example/map.txt',
|
||||
export_include_dirs=['integration/version_script_example'],
|
||||
dumper_flags=['-output-format', 'Json'],
|
||||
linker_flags=[
|
||||
@@ -552,7 +552,7 @@ TEST_MODULES = [
|
||||
srcs=[
|
||||
'integration/version_script_example/example.cpp',
|
||||
],
|
||||
version_script='integration/version_script_example/example.map.txt',
|
||||
version_script='integration/version_script_example/map.txt',
|
||||
export_include_dirs=['integration/version_script_example'],
|
||||
dumper_flags=['-output-format', 'Json'],
|
||||
linker_flags=[
|
||||
@@ -572,7 +572,7 @@ TEST_MODULES = [
|
||||
srcs=[
|
||||
'integration/version_script_example/example.cpp',
|
||||
],
|
||||
version_script='integration/version_script_example/example.map.txt',
|
||||
version_script='integration/version_script_example/map.txt',
|
||||
export_include_dirs=['integration/version_script_example'],
|
||||
dumper_flags=['-output-format', 'Json'],
|
||||
linker_flags=[
|
||||
|
||||
@@ -12,10 +12,7 @@
|
||||
"elf_functions" :
|
||||
[
|
||||
{
|
||||
"name" : "_ZN5Test44testEv"
|
||||
},
|
||||
{
|
||||
"name" : "test2"
|
||||
"name" : "test1"
|
||||
}
|
||||
],
|
||||
"elf_objects" : [],
|
||||
@@ -24,21 +21,8 @@
|
||||
"functions" :
|
||||
[
|
||||
{
|
||||
"function_name" : "Test4::test",
|
||||
"linker_set_key" : "_ZN5Test44testEv",
|
||||
"parameters" :
|
||||
[
|
||||
{
|
||||
"is_this_ptr" : true,
|
||||
"referenced_type" : "_ZTIP5Test4"
|
||||
}
|
||||
],
|
||||
"return_type" : "_ZTIv",
|
||||
"source_file" : "development/vndk/tools/header-checker/tests/integration/version_script_example/example.h"
|
||||
},
|
||||
{
|
||||
"function_name" : "test2",
|
||||
"linker_set_key" : "test2",
|
||||
"function_name" : "test1",
|
||||
"linker_set_key" : "test1",
|
||||
"return_type" : "_ZTIv",
|
||||
"source_file" : "development/vndk/tools/header-checker/tests/integration/version_script_example/example.h"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user