[llvm] e110928 - [llvm-readobj][ELF] Prints hex format values in lower-case mode (#156683)

via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 5 06:11:19 PDT 2025


Author: Ádám Kallai
Date: 2025-09-05T14:11:13+01:00
New Revision: e11092824b1210fb2f0b632bee5dade2d9bde9d0

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

LOG: [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.

Added: 
    

Modified: 
    lld/test/ELF/emulation-hexagon.s
    llvm/docs/ReleaseNotes.md
    llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test
    llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test
    llvm/test/tools/llvm-readobj/ELF/file-types.test
    llvm/test/tools/llvm-readobj/ELF/note-freebsd.test
    llvm/test/tools/llvm-readobj/ELF/section-types.test
    llvm/tools/llvm-readobj/ELFDumper.cpp

Removed: 
    


################################################################################
diff  --git a/lld/test/ELF/emulation-hexagon.s b/lld/test/ELF/emulation-hexagon.s
index 5bdd88941c269..df692ef99ef5f 100644
--- a/lld/test/ELF/emulation-hexagon.s
+++ b/lld/test/ELF/emulation-hexagon.s
@@ -23,7 +23,7 @@
 # CHECK-NEXT:    Type:                              EXEC (Executable file)
 # CHECK-NEXT:    Machine:                           Qualcomm Hexagon
 # CHECK-NEXT:    Version:                           0x1
-# CHECK-NEXT:    Entry point address:               0x200B4
+# CHECK-NEXT:    Entry point address:               0x200b4
 # CHECK-NEXT:    Start of program headers:          52 (bytes into file)
 # CHECK-NEXT:    Start of section headers:
 # CHECK-NEXT:    Flags:                             0x73

diff  --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index ff92d7390ecfd..5640c72c1d7a0 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -151,6 +151,8 @@ Changes to the Debug Info
 Changes to the LLVM tools
 ---------------------------------
 
+* `llvm-readelf` now dumps all hex format values in lower-case mode.
+
 Changes to LLDB
 ---------------------------------
 

diff  --git a/llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test b/llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test
index 213eeed9f3a0a..b5223ec0433fc 100644
--- a/llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test
+++ b/llvm/test/tools/llvm-readobj/ELF/AArch64/memtag.test
@@ -195,13 +195,13 @@
 ##      - ULEB-encoded value: 0x01
 
 # LLVM-OK:      Memtag Global Descriptors: [
-# LLVM-OK-NEXT:    0xDEAD0000: 0x10
-# LLVM-OK-NEXT:    0xDEAD0010: 0x20
-# LLVM-OK-NEXT:    0xDEAD0100: 0x40
-# LLVM-OK-NEXT:    0xDEADF000: 0x1000
-# LLVM-OK-NEXT:    0xDEAE0000: 0x10
-# LLVM-OK-NEXT:    0xDEAE0010: 0x10
-# LLVM-OK-NEXT:    0xDEAE0020: 0x10
+# LLVM-OK-NEXT:    0xdead0000: 0x10
+# LLVM-OK-NEXT:    0xdead0010: 0x20
+# LLVM-OK-NEXT:    0xdead0100: 0x40
+# LLVM-OK-NEXT:    0xdeadf000: 0x1000
+# LLVM-OK-NEXT:    0xdeae0000: 0x10
+# LLVM-OK-NEXT:    0xdeae0010: 0x10
+# LLVM-OK-NEXT:    0xdeae0020: 0x10
 # LLVM-OK-NEXT: ]
 # GNU-OK:       Memtag Global Descriptors:
 # GNU-OK-NEXT:     0xdead0000: 0x10

diff  --git a/llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test b/llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test
index c05cd76640ed3..68f5a66e54440 100644
--- a/llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test
+++ b/llvm/test/tools/llvm-readobj/ELF/Sparc/elf-headers.test
@@ -27,7 +27,7 @@
 # RUN:   -DFLAG0_NAME=EF_SPARC_32PLUS -DFLAG1_NAME=EF_SPARC_HAL_R1 \
 # RUN:   -DFLAG2_NAME=EF_SPARC_SUN_US1 -DFLAG3_NAME=EF_SPARC_SUN_US3
 # RUN: llvm-readelf -h %t | FileCheck %s --match-full-lines --check-prefix=GNU \
-# RUN:   -DFLAG_VALUE=0xF00 \
+# RUN:   -DFLAG_VALUE=0xf00 \
 # RUN:   -DGNU_FLAG_NAME=", V8+ ABI, Sun UltraSPARC I extensions, HAL/Fujitsu R1 extensions, Sun UltraSPARC III extensions"
 
 # RUN: yaml2obj %s -o %t -DCLASS_NAME="ELFCLASS64" -DMACHINE_NAME="EM_SPARCV9" -DFLAG_NAME=""
@@ -57,7 +57,7 @@
 # RUN:   -DFLAG0_NAME=EF_SPARCV9_PSO -DFLAG1_NAME=EF_SPARC_HAL_R1 \
 # RUN:   -DFLAG2_NAME=EF_SPARC_SUN_US1 -DFLAG3_NAME=EF_SPARC_SUN_US3
 # RUN: llvm-readelf -h %t | FileCheck %s --match-full-lines --check-prefix=GNU \
-# RUN:   -DFLAG_VALUE=0xE01\
+# RUN:   -DFLAG_VALUE=0xe01\
 # RUN:   -DGNU_FLAG_NAME=", Sun UltraSPARC I extensions, HAL/Fujitsu R1 extensions, Sun UltraSPARC III extensions, Partial Store Ordering"
 
 --- !ELF

diff  --git a/llvm/test/tools/llvm-readobj/ELF/file-types.test b/llvm/test/tools/llvm-readobj/ELF/file-types.test
index f06f302b86423..42835d360ee16 100644
--- a/llvm/test/tools/llvm-readobj/ELF/file-types.test
+++ b/llvm/test/tools/llvm-readobj/ELF/file-types.test
@@ -62,7 +62,7 @@ FileHeader:
 # RUN: llvm-readelf -h %t.unknown | FileCheck %s --match-full-lines --check-prefix GNU-UNNKNOWN
 
 # LLVM-UNNKNOWN: ElfHeader {
-# LLVM-UNNKNOWN:   Type: Unknown (0xFDFF)
+# LLVM-UNNKNOWN:   Type: Unknown (0xfdff)
 
 # GNU-UNNKNOWN: ELF Header:
 # GNU-UNNKNOWN:   Type: <unknown>: fdff
@@ -72,7 +72,7 @@ FileHeader:
 # RUN: llvm-readelf -h %t6 | FileCheck %s --match-full-lines --check-prefix GNU-LOOS
 
 # LLVM-LOOS: ElfHeader {
-# LLVM-LOOS:   Type: OS Specific (0xFE00)
+# LLVM-LOOS:   Type: OS Specific (0xfe00)
 
 # GNU-LOOS: ELF Header:
 # GNU-LOOS:   Type: OS Specific: (fe00)
@@ -82,7 +82,7 @@ FileHeader:
 # RUN: llvm-readelf -h %t7 | FileCheck %s --match-full-lines --check-prefix GNU-HIOS
 
 # LLVM-HIOS: ElfHeader {
-# LLVM-HIOS:   Type: OS Specific (0xFEFF)
+# LLVM-HIOS:   Type: OS Specific (0xfeff)
 
 # GNU-HIOS: ELF Header:
 # GNU-HIOS:   Type: OS Specific: (feff)
@@ -92,7 +92,7 @@ FileHeader:
 # RUN: llvm-readelf -h %t8 | FileCheck %s --match-full-lines --check-prefix GNU-LOPROC
 
 # LLVM-LOPROC: ElfHeader {
-# LLVM-LOPROC:   Type: Processor Specific (0xFF00)
+# LLVM-LOPROC:   Type: Processor Specific (0xff00)
 
 # GNU-LOPROC: ELF Header:
 # GNU-LOPROC:   Type: Processor Specific: (ff00)
@@ -102,7 +102,7 @@ FileHeader:
 # RUN: llvm-readelf -h %t9 | FileCheck %s --match-full-lines --check-prefix GNU-HIPROC
 
 # LLVM-HIPROC: ElfHeader {
-# LLVM-HIPROC:   Type: Processor Specific (0xFFFF)
+# LLVM-HIPROC:   Type: Processor Specific (0xffff)
 
 # GNU-HIPROC: ELF Header:
 # GNU-HIPROC:   Type: Processor Specific: (ffff)

diff  --git a/llvm/test/tools/llvm-readobj/ELF/note-freebsd.test b/llvm/test/tools/llvm-readobj/ELF/note-freebsd.test
index f079ac8b4c387..a892034abd895 100644
--- a/llvm/test/tools/llvm-readobj/ELF/note-freebsd.test
+++ b/llvm/test/tools/llvm-readobj/ELF/note-freebsd.test
@@ -48,7 +48,7 @@ Sections:
 # GNU-NEXT: FreeBSD              0x00000007	NT_FREEBSD_ARCH_TAG (architecture tag)
 # GNU-NEXT:   Arch tag: aarch64
 # GNU-NEXT: FreeBSD              0x00000004	NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
-# GNU-NEXT:   Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xFFFFFFFF)
+# GNU-NEXT:   Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xffffffff)
 # GNU-NEXT: FreeBSD              0x00000001	NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
 # GNU-NEXT:   description data: 00
 # GNU-NEXT: FreeBSD              0x00000004	NT_FREEBSD_NOINIT_TAG (no .init tag)
@@ -91,7 +91,7 @@ Sections:
 # LLVM-NEXT:            Owner: FreeBSD
 # LLVM-NEXT:            Data size: 0x4
 # LLVM-NEXT:            Type: NT_FREEBSD_FEATURE_CTL (FreeBSD feature control)
-# LLVM-NEXT:            Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xFFFFFFFF)
+# LLVM-NEXT:            Feature flags: ASLR_DISABLE PROTMAX_DISABLE STKGAP_DISABLE WXNEEDED LA48 ASG_DISABLE (0xffffffff)
 # LLVM-NEXT:        }
 # LLVM-NEXT:        {
 # LLVM-NEXT:            Owner: FreeBSD

diff  --git a/llvm/test/tools/llvm-readobj/ELF/section-types.test b/llvm/test/tools/llvm-readobj/ELF/section-types.test
index e3a66832fa0d2..904892a1b4a0b 100644
--- a/llvm/test/tools/llvm-readobj/ELF/section-types.test
+++ b/llvm/test/tools/llvm-readobj/ELF/section-types.test
@@ -134,14 +134,14 @@
 # GNU-NEXT: gnu_verneed             VERNEED
 # GNU-NEXT: unknown                 0x1000: <unknown>
 # GNU-NEXT: loos                    LOOS+0x0
-# GNU-NEXT: fooos                   LOOS+0xF00
+# GNU-NEXT: fooos                   LOOS+0xf00
 # GNU-NEXT: hios                    VERSYM
 # GNU-NEXT: loproc                  LOPROC+0x0
-# GNU-NEXT: fooproc                 LOPROC+0xF00
-# GNU-NEXT: hiproc                  LOPROC+0xFFFFFFF
+# GNU-NEXT: fooproc                 LOPROC+0xf00
+# GNU-NEXT: hiproc                  LOPROC+0xfffffff
 # GNU-NEXT: louser                  LOUSER+0x0
-# GNU-NEXT: foouser                 LOUSER+0xF00
-# GNU-NEXT: hiuser                  LOUSER+0x7FFFFFFF
+# GNU-NEXT: foouser                 LOUSER+0xf00
+# GNU-NEXT: hiuser                  LOUSER+0x7fffffff
 # GNU-NEXT: .symtab                 SYMTAB
 # GNU-NEXT: .strtab                 STRTAB
 

diff  --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index a440bad130f4c..7d75f29623ea9 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -3601,7 +3601,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
   OS.PadToColumn(2u);
   OS << "Version:";
   OS.PadToColumn(37u);
-  OS << utohexstr(e.e_ident[ELF::EI_VERSION]);
+  OS << utohexstr(e.e_ident[ELF::EI_VERSION], /*LowerCase=*/true);
   if (e.e_version == ELF::EV_CURRENT)
     OS << " (current)";
   OS << "\n";
@@ -3638,9 +3638,9 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
 
   Str = enumToString(e.e_machine, ArrayRef(ElfMachineType));
   printFields(OS, "Machine:", Str);
-  Str = "0x" + utohexstr(e.e_version);
+  Str = "0x" + utohexstr(e.e_version, /*LowerCase=*/true);
   printFields(OS, "Version:", Str);
-  Str = "0x" + utohexstr(e.e_entry);
+  Str = "0x" + utohexstr(e.e_entry, /*LowerCase=*/true);
   printFields(OS, "Entry point address:", Str);
   Str = to_string(e.e_phoff) + " (bytes into file)";
   printFields(OS, "Start of program headers:", Str);
@@ -3711,7 +3711,7 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
     } break;
     }
   }
-  Str = "0x" + utohexstr(e.e_flags);
+  Str = "0x" + utohexstr(e.e_flags, /*LowerCase=*/true);
   if (!ElfFlags.empty())
     Str = Str + ", " + ElfFlags;
   printFields(OS, "Flags:", Str);
@@ -4088,12 +4088,12 @@ template <class ELFT> void GNUELFDumper<ELFT>::printRelr(const Elf_Shdr &Sec) {
 // returned as '<unknown>' followed by the type value.
 static std::string getSectionTypeOffsetString(unsigned Type) {
   if (Type >= SHT_LOOS && Type <= SHT_HIOS)
-    return "LOOS+0x" + utohexstr(Type - SHT_LOOS);
+    return "LOOS+0x" + utohexstr(Type - SHT_LOOS, /*LowerCase=*/true);
   else if (Type >= SHT_LOPROC && Type <= SHT_HIPROC)
-    return "LOPROC+0x" + utohexstr(Type - SHT_LOPROC);
+    return "LOPROC+0x" + utohexstr(Type - SHT_LOPROC, /*LowerCase=*/true);
   else if (Type >= SHT_LOUSER && Type <= SHT_HIUSER)
-    return "LOUSER+0x" + utohexstr(Type - SHT_LOUSER);
-  return "0x" + utohexstr(Type) + ": <unknown>";
+    return "LOUSER+0x" + utohexstr(Type - SHT_LOUSER, /*LowerCase=*/true);
+  return "0x" + utohexstr(Type, /*LowerCase=*/true) + ": <unknown>";
 }
 
 static std::string getSectionTypeString(unsigned Machine, unsigned Type) {
@@ -5722,9 +5722,9 @@ getFreeBSDNote(uint32_t NoteType, ArrayRef<uint8_t> Desc, bool IsCore) {
     raw_string_ostream OS(FlagsStr);
     printFlags(Value, ArrayRef(FreeBSDFeatureCtlFlags), OS);
     if (FlagsStr.empty())
-      OS << "0x" << utohexstr(Value);
+      OS << "0x" << utohexstr(Value, /*LowerCase=*/true);
     else
-      OS << "(0x" << utohexstr(Value) << ")";
+      OS << "(0x" << utohexstr(Value, /*LowerCase=*/true) << ")";
     return FreeBSDNote{"Feature flags", FlagsStr};
   }
   default:
@@ -7349,7 +7349,8 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printFileHeaders() {
       else
         TypeStr = "Unknown";
     }
-    W.printString("Type", TypeStr + " (0x" + utohexstr(E.e_type) + ")");
+    W.printString("Type", TypeStr + " (0x" +
+                              utohexstr(E.e_type, /*LowerCase=*/true) + ")");
 
     W.printEnum("Machine", E.e_machine, ArrayRef(ElfMachineType));
     W.printNumber("Version", E.e_version);
@@ -8246,7 +8247,7 @@ void LLVMELFDumper<ELFT>::printMemtag(
   {
     ListScope L(W, "Memtag Global Descriptors:");
     for (const auto &[Addr, BytesToTag] : Descriptors) {
-      W.printHex("0x" + utohexstr(Addr), BytesToTag);
+      W.printHex("0x" + utohexstr(Addr, /*LowerCase=*/true), BytesToTag);
     }
   }
 }


        


More information about the llvm-commits mailing list