summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaowei Wu <haowei@google.com>2022-01-11 14:45:57 -0800
committerHaowei Wu <haowei@google.com>2022-02-13 21:05:52 -0800
commita59bb21bf85ebf5fda18f331ea6ff433a4ad73aa (patch)
tree54fc7f952a2f18c7d12296c78c30021e1245927c
parent7f51a9e2730e32eec45ff2e91b3d7bae897893e4 (diff)
[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
-rw-r--r--llvm/lib/InterfaceStub/ELFObjHandler.cpp1
-rw-r--r--llvm/test/tools/llvm-ifs/write-stub.test3
2 files changed, 3 insertions, 1 deletions
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: ]