Skip to content

Commit e110928

Browse files
authored
[llvm-readobj][ELF] Prints hex format values in lower-case mode (#156683)
Previously, llvm-readelf dumped hex format values in different ways. Some of them were printed in upper-case, while the others were in lower-case format. This change switches the format to lower-case in all cases. Why is this useful? As an example, FileCheck comparisons are case-sensitive by default. This change means it's easier to compare those values, because they have the same format.
1 parent 593f24c commit e110928

File tree

8 files changed

+37
-34
lines changed

8 files changed

+37
-34
lines changed

lld/test/ELF/emulation-hexagon.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
# CHECK-NEXT: Type: EXEC (Executable file)
2424
# CHECK-NEXT: Machine: Qualcomm Hexagon
2525
# CHECK-NEXT: Version: 0x1
26-
# CHECK-NEXT: Entry point address: 0x200B4
26+
# CHECK-NEXT: Entry point address: 0x200b4
2727
# CHECK-NEXT: Start of program headers: 52 (bytes into file)
2828
# CHECK-NEXT: Start of section headers:
2929
# CHECK-NEXT: Flags: 0x73

llvm/docs/ReleaseNotes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ Changes to the Debug Info
151151
Changes to the LLVM tools
152152
---------------------------------
153153

154+
* `llvm-readelf` now dumps all hex format values in lower-case mode.
155+
154156
Changes to LLDB
155157
---------------------------------
156158

llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,13 @@
195195
## - ULEB-encoded value: 0x01
196196

197197
# LLVM-OK: Memtag Global Descriptors: [
198-
# LLVM-OK-NEXT: 0xDEAD0000: 0x10
199-
# LLVM-OK-NEXT: 0xDEAD0010: 0x20
200-
# LLVM-OK-NEXT: 0xDEAD0100: 0x40
201-
# LLVM-OK-NEXT: 0xDEADF000: 0x1000
202-
# LLVM-OK-NEXT: 0xDEAE0000: 0x10
203-
# LLVM-OK-NEXT: 0xDEAE0010: 0x10
204-
# LLVM-OK-NEXT: 0xDEAE0020: 0x10
198+
# LLVM-OK-NEXT: 0xdead0000: 0x10
199+
# LLVM-OK-NEXT: 0xdead0010: 0x20
200+
# LLVM-OK-NEXT: 0xdead0100: 0x40
201+
# LLVM-OK-NEXT: 0xdeadf000: 0x1000
202+
# LLVM-OK-NEXT: 0xdeae0000: 0x10
203+
# LLVM-OK-NEXT: 0xdeae0010: 0x10
204+
# LLVM-OK-NEXT: 0xdeae0020: 0x10
205205
# LLVM-OK-NEXT: ]
206206
# GNU-OK: Memtag Global Descriptors:
207207
# GNU-OK-NEXT: 0xdead0000: 0x10

llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
# RUN: -DFLAG0_NAME=EF_SPARC_32PLUS -DFLAG1_NAME=EF_SPARC_HAL_R1 \
2828
# RUN: -DFLAG2_NAME=EF_SPARC_SUN_US1 -DFLAG3_NAME=EF_SPARC_SUN_US3
2929
# RUN: llvm-readelf -h %t | FileCheck %s --match-full-lines --check-prefix=GNU \
30-
# RUN: -DFLAG_VALUE=0xF00 \
30+
# RUN: -DFLAG_VALUE=0xf00 \
3131
# RUN: -DGNU_FLAG_NAME=", V8+ ABI, Sun UltraSPARC I extensions, HAL/Fujitsu R1 extensions, Sun UltraSPARC III extensions"
3232

3333
# RUN: yaml2obj %s -o %t -DCLASS_NAME="ELFCLASS64" -DMACHINE_NAME="EM_SPARCV9" -DFLAG_NAME=""
@@ -57,7 +57,7 @@
5757
# RUN: -DFLAG0_NAME=EF_SPARCV9_PSO -DFLAG1_NAME=EF_SPARC_HAL_R1 \
5858
# RUN: -DFLAG2_NAME=EF_SPARC_SUN_US1 -DFLAG3_NAME=EF_SPARC_SUN_US3
5959
# RUN: llvm-readelf -h %t | FileCheck %s --match-full-lines --check-prefix=GNU \
60-
# RUN: -DFLAG_VALUE=0xE01\
60+
# RUN: -DFLAG_VALUE=0xe01\
6161
# RUN: -DGNU_FLAG_NAME=", Sun UltraSPARC I extensions, HAL/Fujitsu R1 extensions, Sun UltraSPARC III extensions, Partial Store Ordering"
6262

6363
--- !ELF

llvm/test/tools/llvm-readobj/ELF/file-types.test

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ FileHeader:
6262
# RUN: llvm-readelf -h %t.unknown | FileCheck %s --match-full-lines --check-prefix GNU-UNNKNOWN
6363

6464
# LLVM-UNNKNOWN: ElfHeader {
65-
# LLVM-UNNKNOWN: Type: Unknown (0xFDFF)
65+
# LLVM-UNNKNOWN: Type: Unknown (0xfdff)
6666

6767
# GNU-UNNKNOWN: ELF Header:
6868
# GNU-UNNKNOWN: Type: <unknown>: fdff
@@ -72,7 +72,7 @@ FileHeader:
7272
# RUN: llvm-readelf -h %t6 | FileCheck %s --match-full-lines --check-prefix GNU-LOOS
7373

7474
# LLVM-LOOS: ElfHeader {
75-
# LLVM-LOOS: Type: OS Specific (0xFE00)
75+
# LLVM-LOOS: Type: OS Specific (0xfe00)
7676

7777
# GNU-LOOS: ELF Header:
7878
# GNU-LOOS: Type: OS Specific: (fe00)
@@ -82,7 +82,7 @@ FileHeader:
8282
# RUN: llvm-readelf -h %t7 | FileCheck %s --match-full-lines --check-prefix GNU-HIOS
8383

8484
# LLVM-HIOS: ElfHeader {
85-
# LLVM-HIOS: Type: OS Specific (0xFEFF)
85+
# LLVM-HIOS: Type: OS Specific (0xfeff)
8686

8787
# GNU-HIOS: ELF Header:
8888
# GNU-HIOS: Type: OS Specific: (feff)
@@ -92,7 +92,7 @@ FileHeader:
9292
# RUN: llvm-readelf -h %t8 | FileCheck %s --match-full-lines --check-prefix GNU-LOPROC
9393

9494
# LLVM-LOPROC: ElfHeader {
95-
# LLVM-LOPROC: Type: Processor Specific (0xFF00)
95+
# LLVM-LOPROC: Type: Processor Specific (0xff00)
9696

9797
# GNU-LOPROC: ELF Header:
9898
# GNU-LOPROC: Type: Processor Specific: (ff00)
@@ -102,7 +102,7 @@ FileHeader:
102102
# RUN: llvm-readelf -h %t9 | FileCheck %s --match-full-lines --check-prefix GNU-HIPROC
103103

104104
# LLVM-HIPROC: ElfHeader {
105-
# LLVM-HIPROC: Type: Processor Specific (0xFFFF)
105+
# LLVM-HIPROC: Type: Processor Specific (0xffff)
106106

107107
# GNU-HIPROC: ELF Header:
108108
# GNU-HIPROC: Type: Processor Specific: (ffff)

llvm/test/tools/llvm-readobj/ELF/note-freebsd.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Sections:
4848
# GNU-NEXT: FreeBSD 0x00000007 NT_FREEBSD_ARCH_TAG (architecture tag)
4949
# GNU-NEXT: Arch tag: aarch64
5050
# GNU-NEXT: FreeBSD 0x00000004 NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
51-
# GNU-NEXT: Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xFFFFFFFF)
51+
# GNU-NEXT: Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xffffffff)
5252
# GNU-NEXT: FreeBSD 0x00000001 NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
5353
# GNU-NEXT: description data: 00
5454
# GNU-NEXT: FreeBSD 0x00000004 NT_FREEBSD_NOINIT_TAG (no .init tag)
@@ -91,7 +91,7 @@ Sections:
9191
# LLVM-NEXT: Owner: FreeBSD
9292
# LLVM-NEXT: Data size: 0x4
9393
# LLVM-NEXT: Type: NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
94-
# LLVM-NEXT: Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xFFFFFFFF)
94+
# LLVM-NEXT: Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xffffffff)
9595
# LLVM-NEXT: }
9696
# LLVM-NEXT: {
9797
# LLVM-NEXT: Owner: FreeBSD

llvm/test/tools/llvm-readobj/ELF/section-types.test

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,14 @@
134134
# GNU-NEXT: gnu_verneed VERNEED
135135
# GNU-NEXT: unknown 0x1000: <unknown>
136136
# GNU-NEXT: loos LOOS+0x0
137-
# GNU-NEXT: fooos LOOS+0xF00
137+
# GNU-NEXT: fooos LOOS+0xf00
138138
# GNU-NEXT: hios VERSYM
139139
# GNU-NEXT: loproc LOPROC+0x0
140-
# GNU-NEXT: fooproc LOPROC+0xF00
141-
# GNU-NEXT: hiproc LOPROC+0xFFFFFFF
140+
# GNU-NEXT: fooproc LOPROC+0xf00
141+
# GNU-NEXT: hiproc LOPROC+0xfffffff
142142
# GNU-NEXT: louser LOUSER+0x0
143-
# GNU-NEXT: foouser LOUSER+0xF00
144-
# GNU-NEXT: hiuser LOUSER+0x7FFFFFFF
143+
# GNU-NEXT: foouser LOUSER+0xf00
144+
# GNU-NEXT: hiuser LOUSER+0x7fffffff
145145
# GNU-NEXT: .symtab SYMTAB
146146
# GNU-NEXT: .strtab STRTAB
147147

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3601,7 +3601,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
36013601
OS.PadToColumn(2u);
36023602
OS << "Version:";
36033603
OS.PadToColumn(37u);
3604-
OS << utohexstr(e.e_ident[ELF::EI_VERSION]);
3604+
OS << utohexstr(e.e_ident[ELF::EI_VERSION], /*LowerCase=*/true);
36053605
if (e.e_version == ELF::EV_CURRENT)
36063606
OS << " (current)";
36073607
OS << "\n";
@@ -3638,9 +3638,9 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
36383638

36393639
Str = enumToString(e.e_machine, ArrayRef(ElfMachineType));
36403640
printFields(OS, "Machine:", Str);
3641-
Str = "0x" + utohexstr(e.e_version);
3641+
Str = "0x" + utohexstr(e.e_version, /*LowerCase=*/true);
36423642
printFields(OS, "Version:", Str);
3643-
Str = "0x" + utohexstr(e.e_entry);
3643+
Str = "0x" + utohexstr(e.e_entry, /*LowerCase=*/true);
36443644
printFields(OS, "Entry point address:", Str);
36453645
Str = to_string(e.e_phoff) + " (bytes into file)";
36463646
printFields(OS, "Start of program headers:", Str);
@@ -3711,7 +3711,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
37113711
} break;
37123712
}
37133713
}
3714-
Str = "0x" + utohexstr(e.e_flags);
3714+
Str = "0x" + utohexstr(e.e_flags, /*LowerCase=*/true);
37153715
if (!ElfFlags.empty())
37163716
Str = Str + ", " + ElfFlags;
37173717
printFields(OS, "Flags:", Str);
@@ -4088,12 +4088,12 @@ template <class ELFT> void GNUELFDumper<ELFT>::printRelr(const Elf_Shdr &Sec) {
40884088
// returned as '<unknown>' followed by the type value.
40894089
static std::string getSectionTypeOffsetString(unsigned Type) {
40904090
if (Type >= SHT_LOOS && Type <= SHT_HIOS)
4091-
return "LOOS+0x" + utohexstr(Type - SHT_LOOS);
4091+
return "LOOS+0x" + utohexstr(Type - SHT_LOOS, /*LowerCase=*/true);
40924092
else if (Type >= SHT_LOPROC && Type <= SHT_HIPROC)
4093-
return "LOPROC+0x" + utohexstr(Type - SHT_LOPROC);
4093+
return "LOPROC+0x" + utohexstr(Type - SHT_LOPROC, /*LowerCase=*/true);
40944094
else if (Type >= SHT_LOUSER && Type <= SHT_HIUSER)
4095-
return "LOUSER+0x" + utohexstr(Type - SHT_LOUSER);
4096-
return "0x" + utohexstr(Type) + ": <unknown>";
4095+
return "LOUSER+0x" + utohexstr(Type - SHT_LOUSER, /*LowerCase=*/true);
4096+
return "0x" + utohexstr(Type, /*LowerCase=*/true) + ": <unknown>";
40974097
}
40984098

40994099
static std::string getSectionTypeString(unsigned Machine, unsigned Type) {
@@ -5722,9 +5722,9 @@ getFreeBSDNote(uint32_t NoteType, ArrayRef<uint8_t> Desc, bool IsCore) {
57225722
raw_string_ostream OS(FlagsStr);
57235723
printFlags(Value, ArrayRef(FreeBSDFeatureCtlFlags), OS);
57245724
if (FlagsStr.empty())
5725-
OS << "0x" << utohexstr(Value);
5725+
OS << "0x" << utohexstr(Value, /*LowerCase=*/true);
57265726
else
5727-
OS << "(0x" << utohexstr(Value) << ")";
5727+
OS << "(0x" << utohexstr(Value, /*LowerCase=*/true) << ")";
57285728
return FreeBSDNote{"Feature flags", FlagsStr};
57295729
}
57305730
default:
@@ -7349,7 +7349,8 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printFileHeaders() {
73497349
else
73507350
TypeStr = "Unknown";
73517351
}
7352-
W.printString("Type", TypeStr + " (0x" + utohexstr(E.e_type) + ")");
7352+
W.printString("Type", TypeStr + " (0x" +
7353+
utohexstr(E.e_type, /*LowerCase=*/true) + ")");
73537354

73547355
W.printEnum("Machine", E.e_machine, ArrayRef(ElfMachineType));
73557356
W.printNumber("Version", E.e_version);
@@ -8246,7 +8247,7 @@ void LLVMELFDumper<ELFT>::printMemtag(
82468247
{
82478248
ListScope L(W, "Memtag Global Descriptors:");
82488249
for (const auto &[Addr, BytesToTag] : Descriptors) {
8249-
W.printHex("0x" + utohexstr(Addr), BytesToTag);
8250+
W.printHex("0x" + utohexstr(Addr, /*LowerCase=*/true), BytesToTag);
82508251
}
82518252
}
82528253
}

0 commit comments

Comments
 (0)