From a59bb21bf85ebf5fda18f331ea6ff433a4ad73aa Mon Sep 17 00:00:00 2001 From: Haowei Wu Date: Tue, 11 Jan 2022 14:45:57 -0800 Subject: [PATCH] [ifs] Added missing DT_STRSZ to the .dynamic section This patch adds DT_STRSZ into the dynamic section, which was absent previously. This was a bug and caused failures in other tools. Differential Revision: https://reviews.llvm.org/D117058 --- llvm/lib/InterfaceStub/ELFObjHandler.cpp | 1 + llvm/test/tools/llvm-ifs/write-stub.test | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/llvm/lib/InterfaceStub/ELFObjHandler.cpp b/llvm/lib/InterfaceStub/ELFObjHandler.cpp index cb72f57f7bde..d2a13428b02a 100644 --- a/llvm/lib/InterfaceStub/ELFObjHandler.cpp +++ b/llvm/lib/InterfaceStub/ELFObjHandler.cpp @@ -226,6 +226,7 @@ public: // Poplulate dynamic table. size_t DynSymIndex = DynTab.Content.addAddr(DT_SYMTAB, 0); size_t DynStrIndex = DynTab.Content.addAddr(DT_STRTAB, 0); + DynTab.Content.addValue(DT_STRSZ, DynSym.Size); for (const std::string &Lib : Stub.NeededLibs) DynTab.Content.addValue(DT_NEEDED, DynStr.Content.getOffset(Lib)); if (Stub.SoName) diff --git a/llvm/test/tools/llvm-ifs/write-stub.test b/llvm/test/tools/llvm-ifs/write-stub.test index 53b9cc7f325c..d0c0219d64b7 100644 --- a/llvm/test/tools/llvm-ifs/write-stub.test +++ b/llvm/test/tools/llvm-ifs/write-stub.test @@ -142,10 +142,11 @@ Symbols: # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: } -# CHECK: DynamicSection [ (4 entries) +# CHECK: DynamicSection [ (5 entries) # CHECK-NEXT: Tag Type Name/Value # CHECK-NEXT: 0x[[DYNTABZ]]0000006 SYMTAB # CHECK-NEXT: 0x[[DYNTABZ]]0000005 STRTAB +# CHECK-NEXT: 0x[[DYNTABZ]]000000A STRSZ # CHECK-NEXT: 0x[[DYNTABZ]]0000001 NEEDED Shared library: [libc.so.6] # CHECK-NEXT: 0x[[DYNTABZ]]0000000 NULL # CHECK-NEXT: ]