[llvm] [Object] Refine isData/isBSS criteria (PR #101290)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 30 22:45:36 PDT 2024


https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/101290

>From 1a364fee21d358880279f0f82074d3620a8c1e20 Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Tue, 30 Jul 2024 22:38:43 -0700
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.5-bogner
---
 llvm/include/llvm/Object/ELFObjectFile.h          |  8 ++++----
 llvm/test/tools/llvm-nm/data.test                 | 12 ++++++++++++
 llvm/test/tools/llvm-nm/readonly.test             | 10 ++++++++++
 llvm/test/tools/llvm-objdump/section-headers.test | 14 ++++++++++++++
 4 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h
index 811943dcd7088..7186a53e0c389 100644
--- a/llvm/include/llvm/Object/ELFObjectFile.h
+++ b/llvm/include/llvm/Object/ELFObjectFile.h
@@ -949,15 +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) &&
+  return EShdr->sh_flags & ELF::SHF_ALLOC &&
          EShdr->sh_type == ELF::SHT_NOBITS;
 }
 
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 \

>From 690cbc3edde2ec42df0740783a3aff740176194d Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Tue, 30 Jul 2024 22:45:28 -0700
Subject: [PATCH 2/2] .

Created using spr 1.3.5-bogner
---
 llvm/include/llvm/Object/ELFObjectFile.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h
index 7186a53e0c389..60c72062a3f6a 100644
--- a/llvm/include/llvm/Object/ELFObjectFile.h
+++ b/llvm/include/llvm/Object/ELFObjectFile.h
@@ -957,8 +957,7 @@ bool ELFObjectFile<ELFT>::isSectionData(DataRefImpl Sec) const {
 template <class ELFT>
 bool ELFObjectFile<ELFT>::isSectionBSS(DataRefImpl Sec) const {
   const Elf_Shdr *EShdr = getSection(Sec);
-  return EShdr->sh_flags & ELF::SHF_ALLOC &&
-         EShdr->sh_type == ELF::SHT_NOBITS;
+  return EShdr->sh_flags & ELF::SHF_ALLOC && EShdr->sh_type == ELF::SHT_NOBITS;
 }
 
 template <class ELFT>



More information about the llvm-commits mailing list