[llvm] 2b17366 - [Object] Refine isData/isBSS criteria

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 5 10:05:57 PDT 2024


Author: Fangrui Song
Date: 2024-08-05T10:05:54-07:00
New Revision: 2b17366207f4906616e9e46a17f675ec7ac93bcd

URL: https://github.com/llvm/llvm-project/commit/2b17366207f4906616e9e46a17f675ec7ac93bcd
DIFF: https://github.com/llvm/llvm-project/commit/2b17366207f4906616e9e46a17f675ec7ac93bcd.diff

LOG: [Object] Refine isData/isBSS criteria

In GNU, DATA applies to not only SHT_PROGBITS, but also other non-NOBITS
types. BSS doesn't require the SHF_WRITE flag.

Pull Request: https://github.com/llvm/llvm-project/pull/101290

Added: 
    

Modified: 
    llvm/include/llvm/Object/ELFObjectFile.h
    llvm/test/tools/llvm-nm/data.test
    llvm/test/tools/llvm-nm/readonly.test
    llvm/test/tools/llvm-objdump/section-headers.test

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h
index 811943dcd7088..60c72062a3f6a 100644
--- a/llvm/include/llvm/Object/ELFObjectFile.h
+++ b/llvm/include/llvm/Object/ELFObjectFile.h
@@ -949,16 +949,15 @@ bool ELFObjectFile<ELFT>::isSectionText(DataRefImpl Sec) const {
 template <class ELFT>
 bool ELFObjectFile<ELFT>::isSectionData(DataRefImpl Sec) const {
   const Elf_Shdr *EShdr = getSection(Sec);
-  return EShdr->sh_type == ELF::SHT_PROGBITS &&
-         EShdr->sh_flags & ELF::SHF_ALLOC &&
-         !(EShdr->sh_flags & ELF::SHF_EXECINSTR);
+  return (EShdr->sh_flags & ELF::SHF_ALLOC) &&
+         !(EShdr->sh_flags & ELF::SHF_EXECINSTR) &&
+         EShdr->sh_type != ELF::SHT_NOBITS;
 }
 
 template <class ELFT>
 bool ELFObjectFile<ELFT>::isSectionBSS(DataRefImpl Sec) const {
   const Elf_Shdr *EShdr = getSection(Sec);
-  return EShdr->sh_flags & (ELF::SHF_ALLOC | ELF::SHF_WRITE) &&
-         EShdr->sh_type == ELF::SHT_NOBITS;
+  return EShdr->sh_flags & ELF::SHF_ALLOC && EShdr->sh_type == ELF::SHT_NOBITS;
 }
 
 template <class ELFT>

diff  --git a/llvm/test/tools/llvm-nm/data.test b/llvm/test/tools/llvm-nm/data.test
index c86f284e5f89d..f2c61502c39a9 100644
--- a/llvm/test/tools/llvm-nm/data.test
+++ b/llvm/test/tools/llvm-nm/data.test
@@ -2,7 +2,9 @@
 # RUN: llvm-nm --no-sort %t | FileCheck %s
 
 # CHECK:      b mybss_local
+# CHECK-NEXT: b mybss2_local
 # CHECK-NEXT: d mydata_local
+# CHECK-NEXT: d mydata2_local
 # CHECK-NEXT: d mytdata_local
 # CHECK-NEXT: B mybss_global
 # CHECK-NEXT: D mydata_global
@@ -18,17 +20,27 @@ Sections:
   - Name: mybss
     Type: SHT_NOBITS
     Flags: [ SHF_ALLOC, SHF_WRITE ]
+  - Name: mybss2
+    Type: SHT_NOBITS
+    Flags: [ SHF_ALLOC ]
   - Name: mydata
     Type: SHT_PROGBITS
     Flags: [ SHF_ALLOC, SHF_WRITE ]
+  - Name: mydata2
+    Type: 0x1000
+    Flags: [ SHF_ALLOC, SHF_WRITE ]
   - Name: mytdata
     Type: SHT_PROGBITS
     Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ]
 Symbols:
   - Name:    mybss_local
     Section: mybss
+  - Name:    mybss2_local
+    Section: mybss2
   - Name:    mydata_local
     Section: mydata
+  - Name:    mydata2_local
+    Section: mydata2
   - Name:    mytdata_local
     Section: mytdata
 

diff  --git a/llvm/test/tools/llvm-nm/readonly.test b/llvm/test/tools/llvm-nm/readonly.test
index 853f9f2b3d171..28c4b2c3c8b82 100644
--- a/llvm/test/tools/llvm-nm/readonly.test
+++ b/llvm/test/tools/llvm-nm/readonly.test
@@ -4,9 +4,11 @@
 # CHECK:      r myrodata0_local
 # CHECK-NEXT: r myrodata1_local
 # CHECK-NEXT: r myrodata2_local
+# CHECK-NEXT: r myrodata3_local
 # CHECK-NEXT: R myrodata0_global
 # CHECK-NEXT: R myrodata1_global
 # CHECK-NEXT: R myrodata2_global
+# CHECK-NEXT: R myrodata3_global
 
 !ELF
 FileHeader:
@@ -24,6 +26,9 @@ Sections:
   - Name: myrodata2
     Type: SHT_PROGBITS
     Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+  - Name: myrodata3
+    Type: 0x1000
+    Flags: [ SHF_ALLOC ]
 Symbols:
   - Name:    myrodata0_local
     Section: myrodata0
@@ -31,6 +36,8 @@ Symbols:
     Section: myrodata1
   - Name:    myrodata2_local
     Section: myrodata2
+  - Name:    myrodata3_local
+    Section: myrodata3
 
   - Name:    myrodata0_global
     Binding: STB_GLOBAL
@@ -41,3 +48,6 @@ Symbols:
   - Name:    myrodata2_global
     Binding: STB_GLOBAL
     Section: myrodata2
+  - Name:    myrodata3_global
+    Binding: STB_GLOBAL
+    Section: myrodata3

diff  --git a/llvm/test/tools/llvm-objdump/section-headers.test b/llvm/test/tools/llvm-objdump/section-headers.test
index c850e3a3cb3f5..b1032f39d5bd5 100644
--- a/llvm/test/tools/llvm-objdump/section-headers.test
+++ b/llvm/test/tools/llvm-objdump/section-headers.test
@@ -17,6 +17,9 @@
 # WHITESPACE-NEXT: {{^}}  4 .other        00000000 0000000000000000 0000000000000000 {{$}}
 # WHITESPACE-NEXT: {{^}}  5 .debug_abbrev 00000000 0000000000000000 0000000000000000 DEBUG{{$}}
 # WHITESPACE-NEXT: {{^}}  6 .debug_info   00000000 0000000000000000 0000000000000000 DATA, DEBUG{{$}}
+# WHITESPACE-NEXT: {{^}}  7 .mydata       00000000 0000000000000000 0000000000000000 DATA{{$}}
+# WHITESPACE-NEXT: {{^}}  8 .bss1         00000000 0000000000000000 0000000000000000 BSS{{$}}
+# WHITESPACE-NEXT: {{^}}  9 .nonalloc.bss 00000000 0000000000000000 0000000000000000 {{$}}
 
 # WHITESPACE-NO-LMA:      {{^}}Sections:{{$}}
 # WHITESPACE-NO-LMA-NEXT: {{^}}Idx Name          Size     VMA              Type{{$}}
@@ -27,6 +30,9 @@
 # WHITESPACE-NO-LMA-NEXT: {{^}}  4 .other        00000000 0000000000000000 {{$}}
 # WHITESPACE-NO-LMA-NEXT: {{^}}  5 .debug_abbrev 00000000 0000000000000000 DEBUG{{$}}
 # WHITESPACE-NO-LMA-NEXT: {{^}}  6 .debug_info   00000000 0000000000000000 DATA, DEBUG{{$}}
+# WHITESPACE-NO-LMA-NEXT: {{^}}  7 .mydata       00000000 0000000000000000 DATA{{$}}
+# WHITESPACE-NO-LMA-NEXT: {{^}}  8 .bss1         00000000 0000000000000000 BSS{{$}}
+# WHITESPACE-NO-LMA-NEXT: {{^}}  9 .nonalloc.bss 00000000 0000000000000000 {{$}}
 
 --- !ELF
 FileHeader:
@@ -51,6 +57,14 @@ Sections:
   - Name:  .debug_info
     Type:  SHT_PROGBITS
     Flags: [ SHF_WRITE, SHF_ALLOC ]
+  - Name:  .mydata
+    Type:  0x70000000
+    Flags: [ SHF_ALLOC ]
+  - Name:  .bss1
+    Type:  SHT_NOBITS
+    Flags: [SHF_ALLOC]
+  - Name:  .nonalloc.bss
+    Type:  SHT_NOBITS
  
 ## Check that --section-headers and --headers are aliases for -h.
 # RUN: llvm-objdump --section-headers --show-lma %t-whitespace.o \


        


More information about the llvm-commits mailing list