[lld] r283731 - [ELF] - Do not crash on absolute local symbol starting from ".L".

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 10 02:59:36 PDT 2016


Author: grimar
Date: Mon Oct 10 04:59:34 2016
New Revision: 283731

URL: http://llvm.org/viewvc/llvm-project?rev=283731&view=rev
Log:
[ELF] - Do not crash on absolute local symbol starting from ".L".

Absolute local symbols with name staring from ".L" were reason of crash.
The same could happen when using some broken inputs found by AFL.

Patch fixes that.

Differential revision: https://reviews.llvm.org/D25365

Modified:
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/ELF/local.s

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=283731&r1=283730&r2=283731&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Mon Oct 10 04:59:34 2016
@@ -337,7 +337,7 @@ static bool shouldKeepInSymtab(InputSect
   if (Config->Discard == DiscardPolicy::Locals)
     return false;
 
-  return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE);
+  return !Sec || !(Sec->getSectionHdr()->sh_flags & SHF_MERGE);
 }
 
 template <class ELFT> static bool includeInSymtab(const SymbolBody &B) {

Modified: lld/trunk/test/ELF/local.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/local.s?rev=283731&r1=283730&r2=283731&view=diff
==============================================================================
--- lld/trunk/test/ELF/local.s (original)
+++ lld/trunk/test/ELF/local.s Mon Oct 10 04:59:34 2016
@@ -1,5 +1,5 @@
 // Check that symbol table is correctly populated with local symbols.
-// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -save-temp-labels -filetype=obj -triple=x86_64-pc-linux %s -o %t
 // RUN: ld.lld %t -o %t1
 // RUN: llvm-readobj -t -s %t1 | FileCheck %s
 // REQUIRES: x86
@@ -14,7 +14,7 @@
 // CHECK-NEXT:     Offset:
 // CHECK-NEXT:     Size:
 // CHECK-NEXT:     Link:
-// CHECK-NEXT:     Info: 5
+// CHECK-NEXT:     Info: 6
 
 // CHECK: Symbols [
 // CHECK-NEXT:   Symbol {
@@ -27,6 +27,15 @@
 // CHECK-NEXT:     Section: Undefined
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
+// CHECK-NEXT:     Name: .Labs
+// CHECK-NEXT:     Value: 0x2B
+// CHECK-NEXT:     Size: 0
+// CHECK-NEXT:     Binding: Local
+// CHECK-NEXT:     Type: None
+// CHECK-NEXT:     Other: 0
+// CHECK-NEXT:     Section: Absolute
+// CHECK-NEXT:   }
+// CHECK-NEXT:   Symbol {
 // CHECK-NEXT:     Name: abs
 // CHECK-NEXT:     Value: 0x2A
 // CHECK-NEXT:     Size: 0
@@ -80,3 +89,4 @@ blah:
 foo:
 goo:
 abs = 42
+.Labs = 43




More information about the llvm-commits mailing list