diff --git a/llvm/test/tools/llvm-readobj/ELF/json-relocations.test b/llvm/test/tools/llvm-readobj/ELF/json-relocations.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/ELF/json-relocations.test @@ -0,0 +1,34 @@ +## Check llvm-readobj is able to dump relocations that +## do not use symbols. + +# RUN: yaml2obj %s -o %t +# RUN: llvm-readobj -r --expand-relocs --elf-output-style=JSON --pretty-print %t | FileCheck %s + +# CHECK: "Section (1) .rela.text": { +# CHECK-NEXT: "Relocation": { +# CHECK-NEXT: "Offset": 0, +# CHECK-NEXT: "Type": { +# CHECK-NEXT: "Value": "R_X86_64_PC32", +# CHECK-NEXT: "RawValue": 2 +# CHECK-NEXT: }, +# CHECK-NEXT: "Symbol": { +# CHECK-NEXT: "Value": "-", +# CHECK-NEXT: "RawValue": 0 +# CHECK-NEXT: }, +# CHECK-NEXT: "Addend": 18446744073709551612 +# CHECK-NEXT: } + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +Sections: + - Name: .rela.text + Type: SHT_RELA + Flags: [ SHF_INFO_LINK ] + Relocations: + - Offset: 0x0 + Type: R_X86_64_PC32 + Addend: 0xFFFFFFFFFFFFFFFC diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -67,6 +67,7 @@ #include #include #include +#include #include #include #include @@ -6636,11 +6637,10 @@ StringRef Name = this->getPrintableSectionName(Sec); unsigned SecNdx = &Sec - &cantFail(this->Obj.sections()).front(); - W.startLine() << "Section (" << SecNdx << ") " << Name << " {\n"; - W.indent(); + std::stringstream DictName; + DictName << "Section (" << std::to_string(SecNdx) << ") " << Name.str(); + DictScope D(W, DictName.str()); this->printRelocationsHelper(Sec); - W.unindent(); - W.startLine() << "}\n"; } }