forked from OSchip/llvm-project
[WebAssembly] Add support for printing relocations with llvm-objdump
Differential Revision: https://reviews.llvm.org/D34658 llvm-svn: 306461
This commit is contained in:
parent
5805d9e9ac
commit
4df5d76477
|
@ -215,6 +215,7 @@ private:
|
|||
std::vector<WasmSymbol> Symbols;
|
||||
ArrayRef<uint8_t> CodeSection;
|
||||
uint32_t StartFunction = -1;
|
||||
bool HasLinkingSection = false;
|
||||
wasm::WasmLinkingData LinkingData;
|
||||
|
||||
StringMap<uint32_t> SymbolMap;
|
||||
|
|
|
@ -294,6 +294,7 @@ Error WasmObjectFile::parseNameSection(const uint8_t *Ptr, const uint8_t *End) {
|
|||
|
||||
Error WasmObjectFile::parseLinkingSection(const uint8_t *Ptr,
|
||||
const uint8_t *End) {
|
||||
HasLinkingSection = true;
|
||||
while (Ptr < End) {
|
||||
uint8_t Type = readVarint7(Ptr);
|
||||
uint32_t Size = readVaruint32(Ptr);
|
||||
|
@ -950,7 +951,9 @@ SubtargetFeatures WasmObjectFile::getFeatures() const {
|
|||
return SubtargetFeatures();
|
||||
}
|
||||
|
||||
bool WasmObjectFile::isRelocatableObject() const { return false; }
|
||||
bool WasmObjectFile::isRelocatableObject() const {
|
||||
return HasLinkingSection;
|
||||
}
|
||||
|
||||
const WasmSection &WasmObjectFile::getWasmSection(DataRefImpl Ref) const {
|
||||
assert(Ref.d.a < Sections.size());
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
; RUN: llc -mtriple=wasm32-unknown-unknown-wasm -filetype=obj %s -o - | llvm-objdump -r - | FileCheck %s
|
||||
|
||||
@foo1 = hidden global i32 1, align 4
|
||||
@foo2 = hidden global i32 1, align 4
|
||||
@bar = hidden global i32* @foo2, align 4
|
||||
|
||||
; CHECK: RELOCATION RECORDS FOR [DATA]:
|
||||
; CHECK-NEXT: 0000000e R_WEBASSEMBLY_GLOBAL_ADDR_I32 1+0
|
|
@ -41,6 +41,7 @@
|
|||
#include "llvm/Object/ELFObjectFile.h"
|
||||
#include "llvm/Object/MachO.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Object/Wasm.h"
|
||||
#include "llvm/Support/Casting.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
|
@ -886,6 +887,18 @@ static void printRelocationTargetName(const MachOObjectFile *O,
|
|||
fmt << S;
|
||||
}
|
||||
|
||||
static std::error_code getRelocationValueString(const WasmObjectFile *Obj,
|
||||
const RelocationRef &RelRef,
|
||||
SmallVectorImpl<char> &Result) {
|
||||
const wasm::WasmRelocation& Rel = Obj->getWasmRelocation(RelRef);
|
||||
std::string fmtbuf;
|
||||
raw_string_ostream fmt(fmtbuf);
|
||||
fmt << Rel.Index << (Rel.Addend < 0 ? "" : "+") << Rel.Addend;
|
||||
fmt.flush();
|
||||
Result.append(fmtbuf.begin(), fmtbuf.end());
|
||||
return std::error_code();
|
||||
}
|
||||
|
||||
static std::error_code getRelocationValueString(const MachOObjectFile *Obj,
|
||||
const RelocationRef &RelRef,
|
||||
SmallVectorImpl<char> &Result) {
|
||||
|
@ -1071,8 +1084,11 @@ static std::error_code getRelocationValueString(const RelocationRef &Rel,
|
|||
return getRelocationValueString(ELF, Rel, Result);
|
||||
if (auto *COFF = dyn_cast<COFFObjectFile>(Obj))
|
||||
return getRelocationValueString(COFF, Rel, Result);
|
||||
auto *MachO = cast<MachOObjectFile>(Obj);
|
||||
if (auto *Wasm = dyn_cast<WasmObjectFile>(Obj))
|
||||
return getRelocationValueString(Wasm, Rel, Result);
|
||||
if (auto *MachO = dyn_cast<MachOObjectFile>(Obj))
|
||||
return getRelocationValueString(MachO, Rel, Result);
|
||||
llvm_unreachable("unknown object file format");
|
||||
}
|
||||
|
||||
/// @brief Indicates whether this relocation should hidden when listing
|
||||
|
|
Loading…
Reference in New Issue