Skip to content

Commit

Permalink
[llvm-readobj] Fixes malformed json on JSON printed corefiles
Browse files Browse the repository at this point in the history
This patch fixes an issue where, when printing corefile notes with
llvm-readobj as json, the dumper generated llvm formatted output
which isn't valid json. This alters the dumper to, in the NT_FILE,
note use a JSON particular method and dump properly formatted json
data.
  • Loading branch information
feg208 committed May 21, 2024
1 parent 50be0b1 commit 0d2ce21
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 8 deletions.
4 changes: 4 additions & 0 deletions llvm/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,10 @@ Changes to the LLVM tools
documented in `--help` output and the command guide. (`#90474
<https://github.com/llvm/llvm-project/pull/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
---------------------------------

Expand Down
53 changes: 46 additions & 7 deletions llvm/test/tools/llvm-readobj/ELF/note-core-ntfile.test
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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: ]
3 changes: 2 additions & 1 deletion llvm/tools/llvm-readobj/ELFDumper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 0d2ce21

Please sign in to comment.