[llvm] r348817 - [TextAPI][elfabi] Make SoName optional

Armando Montanez via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 10 17:00:16 PST 2018


Author: amontanez
Date: Mon Dec 10 17:00:16 2018
New Revision: 348817

URL: http://llvm.org/viewvc/llvm-project?rev=348817&view=rev
Log:
[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

Modified:
    llvm/trunk/include/llvm/TextAPI/ELF/ELFStub.h
    llvm/trunk/lib/TextAPI/ELF/TBEHandler.cpp
    llvm/trunk/unittests/TextAPI/ELFYAMLTest.cpp

Modified: llvm/trunk/include/llvm/TextAPI/ELF/ELFStub.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TextAPI/ELF/ELFStub.h?rev=348817&r1=348816&r2=348817&view=diff
==============================================================================
--- llvm/trunk/include/llvm/TextAPI/ELF/ELFStub.h (original)
+++ llvm/trunk/include/llvm/TextAPI/ELF/ELFStub.h Mon Dec 10 17:00:16 2018
@@ -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;

Modified: llvm/trunk/lib/TextAPI/ELF/TBEHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/TextAPI/ELF/TBEHandler.cpp?rev=348817&r1=348816&r2=348817&view=diff
==============================================================================
--- llvm/trunk/lib/TextAPI/ELF/TBEHandler.cpp (original)
+++ llvm/trunk/lib/TextAPI/ELF/TBEHandler.cpp Mon Dec 10 17:00:16 2018
@@ -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);

Modified: llvm/trunk/unittests/TextAPI/ELFYAMLTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/TextAPI/ELFYAMLTest.cpp?rev=348817&r1=348816&r2=348817&view=diff
==============================================================================
--- llvm/trunk/unittests/TextAPI/ELFYAMLTest.cpp (original)
+++ llvm/trunk/unittests/TextAPI/ELFYAMLTest.cpp Mon Dec 10 17:00:16 2018
@@ -37,7 +37,6 @@ void compareByLine(StringRef LHS, String
 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, YAMLWritesTBESymbol
   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, YAMLWritesTBESymbol
       "...\n";
   ELFStub Stub;
   Stub.TbeVersion = VersionTuple(1, 0);
-  Stub.SoName = "test.so";
   Stub.Arch = ELF::EM_AARCH64;
 
   ELFSymbol SymFoo("foo");




More information about the llvm-commits mailing list