[PATCH] D55533: [TextAPI][elfabi] Make SoName optional
Armando Montanez via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 10 16:30:50 PST 2018
amontanez created this revision.
amontanez added reviewers: jakehehrlich, phosek, mcgrathr.
Herald added subscribers: llvm-commits, hiraditya, arichardson, emaste.
Herald added a reviewer: espindola.
This change makes DT_SONAME treated as an optional trait for ELF TextAPI stubs. This change accounts for the fact that shared objects aren't guaranteed to have a DT_SONAME entry.
Repository:
rL LLVM
https://reviews.llvm.org/D55533
Files:
llvm/include/llvm/TextAPI/ELF/ELFStub.h
llvm/lib/TextAPI/ELF/TBEHandler.cpp
llvm/unittests/TextAPI/ELFYAMLTest.cpp
Index: llvm/unittests/TextAPI/ELFYAMLTest.cpp
===================================================================
--- llvm/unittests/TextAPI/ELFYAMLTest.cpp
+++ llvm/unittests/TextAPI/ELFYAMLTest.cpp
@@ -37,7 +37,6 @@
TEST(ElfYamlTextAPI, YAMLReadableTBE) {
const char Data[] = "--- !tapi-tbe\n"
"TbeVersion: 1.0\n"
- "SoName: test.so\n"
"Arch: x86_64\n"
"NeededLibs: [libc.so, libfoo.so, libbar.so]\n"
"Symbols:\n"
@@ -47,8 +46,8 @@
ASSERT_THAT_ERROR(StubOrErr.takeError(), Succeeded());
std::unique_ptr<ELFStub> Stub = std::move(StubOrErr.get());
EXPECT_NE(Stub.get(), nullptr);
+ EXPECT_FALSE(Stub->SoName.hasValue());
EXPECT_EQ(Stub->Arch, (uint16_t)llvm::ELF::EM_X86_64);
- EXPECT_STREQ(Stub->SoName.c_str(), "test.so");
EXPECT_EQ(Stub->NeededLibs.size(), 3u);
EXPECT_STREQ(Stub->NeededLibs[0].c_str(), "libc.so");
EXPECT_STREQ(Stub->NeededLibs[1].c_str(), "libfoo.so");
@@ -72,6 +71,8 @@
ASSERT_THAT_ERROR(StubOrErr.takeError(), Succeeded());
std::unique_ptr<ELFStub> Stub = std::move(StubOrErr.get());
EXPECT_NE(Stub.get(), nullptr);
+ EXPECT_TRUE(Stub->SoName.hasValue());
+ EXPECT_STREQ(Stub->SoName->c_str(), "test.so");
EXPECT_EQ(Stub->Symbols.size(), 5u);
auto Iterator = Stub->Symbols.begin();
@@ -143,7 +144,6 @@
const char Expected[] =
"--- !tapi-tbe\n"
"TbeVersion: 1.0\n"
- "SoName: test.so\n"
"Arch: AArch64\n"
"Symbols: \n"
" foo: { Type: NoType, Size: 99, Warning: Does nothing }\n"
@@ -152,7 +152,6 @@
"...\n";
ELFStub Stub;
Stub.TbeVersion = VersionTuple(1, 0);
- Stub.SoName = "test.so";
Stub.Arch = ELF::EM_AARCH64;
ELFSymbol SymFoo("foo");
Index: llvm/lib/TextAPI/ELF/TBEHandler.cpp
===================================================================
--- llvm/lib/TextAPI/ELF/TBEHandler.cpp
+++ llvm/lib/TextAPI/ELF/TBEHandler.cpp
@@ -132,7 +132,7 @@
if (!IO.mapTag("!tapi-tbe", true))
IO.setError("Not a .tbe YAML file.");
IO.mapRequired("TbeVersion", Stub.TbeVersion);
- IO.mapRequired("SoName", Stub.SoName);
+ IO.mapOptional("SoName", Stub.SoName);
IO.mapRequired("Arch", (ELFArchMapper &)Stub.Arch);
IO.mapOptional("NeededLibs", Stub.NeededLibs);
IO.mapRequired("Symbols", Stub.Symbols);
Index: llvm/include/llvm/TextAPI/ELF/ELFStub.h
===================================================================
--- llvm/include/llvm/TextAPI/ELF/ELFStub.h
+++ llvm/include/llvm/TextAPI/ELF/ELFStub.h
@@ -54,7 +54,7 @@
// TODO: Add support for symbol versioning.
public:
VersionTuple TbeVersion;
- std::string SoName;
+ Optional<std::string> SoName;
ELFArch Arch;
std::vector<std::string> NeededLibs;
std::set<ELFSymbol> Symbols;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55533.177615.patch
Type: text/x-patch
Size: 2874 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181211/a2979a6e/attachment.bin>
More information about the llvm-commits
mailing list