Don't create IBT .plt if there are no PLT entries. Cherry picked from
authorkettenis <kettenis@openbsd.org>
Sun, 23 Apr 2023 21:08:26 +0000 (21:08 +0000)
committerkettenis <kettenis@openbsd.org>
Sun, 23 Apr 2023 21:08:26 +0000 (21:08 +0000)
upstream.  Fixes several issues including problems with ld.bfd when it
sees such a .plt in an object file that is getting linked into a binary.

ok deraadt@

gnu/llvm/lld/ELF/SyntheticSections.cpp
gnu/llvm/lld/ELF/SyntheticSections.h

index 187b2ac..32248aa 100644 (file)
@@ -2729,6 +2729,8 @@ size_t IBTPltSection::getSize() const {
   return 16 + in.plt->getNumEntries() * target->pltEntrySize;
 }
 
+bool IBTPltSection::isNeeded() const { return in.plt->getNumEntries() > 0; }
+
 // The string hash function for .gdb_index.
 static uint32_t computeGdbHash(StringRef s) {
   uint32_t h = 0;
index bc24922..bc79fcd 100644 (file)
@@ -769,6 +769,7 @@ class IBTPltSection : public SyntheticSection {
 public:
   IBTPltSection();
   void writeTo(uint8_t *Buf) override;
+  bool isNeeded() const override;
   size_t getSize() const override;
 };