mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[TextAPI][elfabi] Make SoName optional
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. Tests have been updated to check for correct behavior of an optional soname. Differential Revision: https://reviews.llvm.org/D55533 llvm-svn: 348817
This commit is contained in:
parent
24418123e0
commit
08f3004e2a
@ -54,7 +54,7 @@ class ELFStub {
|
||||
// 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;
|
||||
|
@ -132,7 +132,7 @@ template <> struct MappingTraits<ELFStub> {
|
||||
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);
|
||||
|
@ -37,7 +37,6 @@ void compareByLine(StringRef LHS, StringRef RHS) {
|
||||
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 @@ TEST(ElfYamlTextAPI, YAMLReadableTBE) {
|
||||
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 @@ TEST(ElfYamlTextAPI, YAMLReadsTBESymbols) {
|
||||
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 @@ TEST(ElfYamlTextAPI, YAMLWritesTBESymbols) {
|
||||
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 @@ TEST(ElfYamlTextAPI, YAMLWritesTBESymbols) {
|
||||
"...\n";
|
||||
ELFStub Stub;
|
||||
Stub.TbeVersion = VersionTuple(1, 0);
|
||||
Stub.SoName = "test.so";
|
||||
Stub.Arch = ELF::EM_AARCH64;
|
||||
|
||||
ELFSymbol SymFoo("foo");
|
||||
|
Loading…
Reference in New Issue
Block a user