Skip to content

Commit 2b17366

Browse files
authored
[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: #101290
1 parent 1fdc553 commit 2b17366

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

llvm/include/llvm/Object/ELFObjectFile.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -949,16 +949,15 @@ bool ELFObjectFile<ELFT>::isSectionText(DataRefImpl Sec) const {
949949
template <class ELFT>
950950
bool ELFObjectFile<ELFT>::isSectionData(DataRefImpl Sec) const {
951951
const Elf_Shdr *EShdr = getSection(Sec);
952-
return EShdr->sh_type == ELF::SHT_PROGBITS &&
953-
EShdr->sh_flags & ELF::SHF_ALLOC &&
954-
!(EShdr->sh_flags & ELF::SHF_EXECINSTR);
952+
return (EShdr->sh_flags & ELF::SHF_ALLOC) &&
953+
!(EShdr->sh_flags & ELF::SHF_EXECINSTR) &&
954+
EShdr->sh_type != ELF::SHT_NOBITS;
955955
}
956956

957957
template <class ELFT>
958958
bool ELFObjectFile<ELFT>::isSectionBSS(DataRefImpl Sec) const {
959959
const Elf_Shdr *EShdr = getSection(Sec);
960-
return EShdr->sh_flags & (ELF::SHF_ALLOC | ELF::SHF_WRITE) &&
961-
EShdr->sh_type == ELF::SHT_NOBITS;
960+
return EShdr->sh_flags & ELF::SHF_ALLOC && EShdr->sh_type == ELF::SHT_NOBITS;
962961
}
963962

964963
template <class ELFT>

llvm/test/tools/llvm-nm/data.test

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
# RUN: llvm-nm --no-sort %t | FileCheck %s
33

44
# CHECK: b mybss_local
5+
# CHECK-NEXT: b mybss2_local
56
# CHECK-NEXT: d mydata_local
7+
# CHECK-NEXT: d mydata2_local
68
# CHECK-NEXT: d mytdata_local
79
# CHECK-NEXT: B mybss_global
810
# CHECK-NEXT: D mydata_global
@@ -18,17 +20,27 @@ Sections:
1820
- Name: mybss
1921
Type: SHT_NOBITS
2022
Flags: [ SHF_ALLOC, SHF_WRITE ]
23+
- Name: mybss2
24+
Type: SHT_NOBITS
25+
Flags: [ SHF_ALLOC ]
2126
- Name: mydata
2227
Type: SHT_PROGBITS
2328
Flags: [ SHF_ALLOC, SHF_WRITE ]
29+
- Name: mydata2
30+
Type: 0x1000
31+
Flags: [ SHF_ALLOC, SHF_WRITE ]
2432
- Name: mytdata
2533
Type: SHT_PROGBITS
2634
Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ]
2735
Symbols:
2836
- Name: mybss_local
2937
Section: mybss
38+
- Name: mybss2_local
39+
Section: mybss2
3040
- Name: mydata_local
3141
Section: mydata
42+
- Name: mydata2_local
43+
Section: mydata2
3244
- Name: mytdata_local
3345
Section: mytdata
3446

llvm/test/tools/llvm-nm/readonly.test

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
# CHECK: r myrodata0_local
55
# CHECK-NEXT: r myrodata1_local
66
# CHECK-NEXT: r myrodata2_local
7+
# CHECK-NEXT: r myrodata3_local
78
# CHECK-NEXT: R myrodata0_global
89
# CHECK-NEXT: R myrodata1_global
910
# CHECK-NEXT: R myrodata2_global
11+
# CHECK-NEXT: R myrodata3_global
1012

1113
!ELF
1214
FileHeader:
@@ -24,13 +26,18 @@ Sections:
2426
- Name: myrodata2
2527
Type: SHT_PROGBITS
2628
Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
29+
- Name: myrodata3
30+
Type: 0x1000
31+
Flags: [ SHF_ALLOC ]
2732
Symbols:
2833
- Name: myrodata0_local
2934
Section: myrodata0
3035
- Name: myrodata1_local
3136
Section: myrodata1
3237
- Name: myrodata2_local
3338
Section: myrodata2
39+
- Name: myrodata3_local
40+
Section: myrodata3
3441

3542
- Name: myrodata0_global
3643
Binding: STB_GLOBAL
@@ -41,3 +48,6 @@ Symbols:
4148
- Name: myrodata2_global
4249
Binding: STB_GLOBAL
4350
Section: myrodata2
51+
- Name: myrodata3_global
52+
Binding: STB_GLOBAL
53+
Section: myrodata3

llvm/test/tools/llvm-objdump/section-headers.test

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
# WHITESPACE-NEXT: {{^}} 4 .other 00000000 0000000000000000 0000000000000000 {{$}}
1818
# WHITESPACE-NEXT: {{^}} 5 .debug_abbrev 00000000 0000000000000000 0000000000000000 DEBUG{{$}}
1919
# WHITESPACE-NEXT: {{^}} 6 .debug_info 00000000 0000000000000000 0000000000000000 DATA, DEBUG{{$}}
20+
# WHITESPACE-NEXT: {{^}} 7 .mydata 00000000 0000000000000000 0000000000000000 DATA{{$}}
21+
# WHITESPACE-NEXT: {{^}} 8 .bss1 00000000 0000000000000000 0000000000000000 BSS{{$}}
22+
# WHITESPACE-NEXT: {{^}} 9 .nonalloc.bss 00000000 0000000000000000 0000000000000000 {{$}}
2023

2124
# WHITESPACE-NO-LMA: {{^}}Sections:{{$}}
2225
# WHITESPACE-NO-LMA-NEXT: {{^}}Idx Name Size VMA Type{{$}}
@@ -27,6 +30,9 @@
2730
# WHITESPACE-NO-LMA-NEXT: {{^}} 4 .other 00000000 0000000000000000 {{$}}
2831
# WHITESPACE-NO-LMA-NEXT: {{^}} 5 .debug_abbrev 00000000 0000000000000000 DEBUG{{$}}
2932
# WHITESPACE-NO-LMA-NEXT: {{^}} 6 .debug_info 00000000 0000000000000000 DATA, DEBUG{{$}}
33+
# WHITESPACE-NO-LMA-NEXT: {{^}} 7 .mydata 00000000 0000000000000000 DATA{{$}}
34+
# WHITESPACE-NO-LMA-NEXT: {{^}} 8 .bss1 00000000 0000000000000000 BSS{{$}}
35+
# WHITESPACE-NO-LMA-NEXT: {{^}} 9 .nonalloc.bss 00000000 0000000000000000 {{$}}
3036

3137
--- !ELF
3238
FileHeader:
@@ -51,6 +57,14 @@ Sections:
5157
- Name: .debug_info
5258
Type: SHT_PROGBITS
5359
Flags: [ SHF_WRITE, SHF_ALLOC ]
60+
- Name: .mydata
61+
Type: 0x70000000
62+
Flags: [ SHF_ALLOC ]
63+
- Name: .bss1
64+
Type: SHT_NOBITS
65+
Flags: [SHF_ALLOC]
66+
- Name: .nonalloc.bss
67+
Type: SHT_NOBITS
5468

5569
## Check that --section-headers and --headers are aliases for -h.
5670
# RUN: llvm-objdump --section-headers --show-lma %t-whitespace.o \

0 commit comments

Comments
 (0)