diff --git a/llvm/docs/ReleaseNotes.rst b/llvm/docs/ReleaseNotes.rst index 84320461fa9e13..7c676a3b5d87e7 100644 --- a/llvm/docs/ReleaseNotes.rst +++ b/llvm/docs/ReleaseNotes.rst @@ -238,6 +238,10 @@ Changes to the LLVM tools documented in `--help` output and the command guide. (`#90474 `) +* llvm-readobj's LLVM output has changed format for ELF core files. The + NT_FILE note now has a map for the mapped files + (`https://github.com/llvm/llvm-project/pull/92835`_). + Changes to LLDB --------------------------------- diff --git a/llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test b/llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test index 752cb723cd2215..f4957b42a87788 100644 --- a/llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test +++ b/llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test @@ -3,6 +3,7 @@ # RUN: yaml2obj %s -o %t.o # RUN: llvm-readelf --notes %t.o | FileCheck %s --check-prefix=GNU # RUN: llvm-readobj --notes %t.o | FileCheck %s --check-prefix=LLVM +# RUN: llvm-readobj --elf-output-style=JSON --pretty-print --notes %t.o | FileCheck %s --check-prefix=JSON ## llvm-mc doesn't support generating ET_CORE files; the 'Content' field was ## generated with the following steps: @@ -72,24 +73,62 @@ ProgramHeaders: # LLVM-NEXT: Data size: 0x80 # LLVM-NEXT: Type: NT_FILE (mapped files) # LLVM-NEXT: Page Size: 4096 -# LLVM-NEXT: Mapping [ +# LLVM-NEXT: Mappings [ +# LLVM-NEXT: { # LLVM-NEXT: Start: 0x1000 # LLVM-NEXT: End: 0x2000 # LLVM-NEXT: Offset: 0x3000 # LLVM-NEXT: Filename: /path/to/a.out -# LLVM-NEXT: ] -# LLVM-NEXT: Mapping [ +# LLVM-NEXT: } +# LLVM-NEXT: { # LLVM-NEXT: Start: 0x4000 # LLVM-NEXT: End: 0x5000 # LLVM-NEXT: Offset: 0x6000 # LLVM-NEXT: Filename: /path/to/libc.so -# LLVM-NEXT: ] -# LLVM-NEXT: Mapping [ +# LLVM-NEXT: } +# LLVM-NEXT: { # LLVM-NEXT: Start: 0x7000 # LLVM-NEXT: End: 0x8000 # LLVM-NEXT: Offset: 0x9000 # LLVM-NEXT: Filename: [stack] -# LLVM-NEXT: ] -# LLVM-NEXT: } +# LLVM-NEXT: } +# LLVM-NEXT: ] # LLVM-NEXT: } +# LLVM-NEXT: } # LLVM-NEXT: ] + +# JSON: "Notes": [ +# JSON-NEXT: { +# JSON-NEXT: "NoteSection": { +# JSON-NEXT: "Name": "", +# JSON-NEXT: "Offset": 120, +# JSON-NEXT: "Size": 148, +# JSON-NEXT: "Note": { +# JSON-NEXT: "Owner": "CORE", +# JSON-NEXT: "Data size": 128, +# JSON-NEXT: "Type": "NT_FILE (mapped files)", +# JSON-NEXT: "Page Size": 4096, +# JSON-NEXT: "Mappings": [ +# JSON-NEXT: { +# JSON-NEXT: "Start": 4096, +# JSON-NEXT: "End": 8192, +# JSON-NEXT: "Offset": 12288, +# JSON-NEXT: "Filename": "/path/to/a.out" +# JSON-NEXT: }, +# JSON-NEXT: { +# JSON-NEXT: "Start": 16384, +# JSON-NEXT: "End": 20480, +# JSON-NEXT: "Offset": 24576, +# JSON-NEXT: "Filename": "/path/to/libc.so" +# JSON-NEXT: }, +# JSON-NEXT: { +# JSON-NEXT: "Start": 28672, +# JSON-NEXT: "End": 32768, +# JSON-NEXT: "Offset": 36864, +# JSON-NEXT: "Filename": "[stack]" +# JSON-NEXT: } +# JSON-NEXT: ] +# JSON-NEXT: } +# JSON-NEXT: } +# JSON-NEXT: } +# JSON-NEXT: ] diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index a752cc4015293f..966531ef560995 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -7840,8 +7840,9 @@ static bool printLLVMOMPOFFLOADNoteLLVMStyle(uint32_t NoteType, static void printCoreNoteLLVMStyle(const CoreNote &Note, ScopedPrinter &W) { W.printNumber("Page Size", Note.PageSize); + ListScope D(W, "Mappings"); for (const CoreFileMapping &Mapping : Note.Mappings) { - ListScope D(W, "Mapping"); + DictScope D(W); W.printHex("Start", Mapping.Start); W.printHex("End", Mapping.End); W.printHex("Offset", Mapping.Offset);