[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