<div dir="ltr">Hey, I was just looking at that, you are fast!<div>Thanks for the fix.</div><div>uint64_t should be fine.</div><div><br></div><div>@sbc:<br>I guess technically even for wasm32 the section size could still be > 32-bits because the encoding is LEB, right? It's a corner case but makes sense for this bit to be uint64.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jan 30, 2017 at 4:13 PM Vedant Kumar <<a href="mailto:vsk@apple.com">vsk@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Derek,<br class="gmail_msg">
<br class="gmail_msg">
I saw a build error after this, and tried to address it in r293573. PTAL and<br class="gmail_msg">
let me know if it's OK.<br class="gmail_msg">
<br class="gmail_msg">
thanks<br class="gmail_msg">
vedant<br class="gmail_msg">
<br class="gmail_msg">
> On Jan 30, 2017, at 3:30 PM, Derek Schuff via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg cremed" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
> Author: dschuff<br class="gmail_msg">
> Date: Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> New Revision: 293569<br class="gmail_msg">
><br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=293569&view=rev" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project?rev=293569&view=rev</a><br class="gmail_msg">
> Log:<br class="gmail_msg">
> [WebAssembly] Add wasm support for llvm-readobj<br class="gmail_msg">
><br class="gmail_msg">
> Create a WasmDumper subclass of ObjDumper to support Webassembly binary<br class="gmail_msg">
> files.<br class="gmail_msg">
><br class="gmail_msg">
> Patch by Sam Clegg<br class="gmail_msg">
><br class="gmail_msg">
> Differential Revision: <a href="https://reviews.llvm.org/D27355" rel="noreferrer" class="gmail_msg cremed" target="_blank">https://reviews.llvm.org/D27355</a><br class="gmail_msg">
><br class="gmail_msg">
> Added:<br class="gmail_msg">
> llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm<br class="gmail_msg">
> llvm/trunk/tools/llvm-readobj/WasmDumper.cpp<br class="gmail_msg">
> Modified:<br class="gmail_msg">
> llvm/trunk/include/llvm/Object/Wasm.h<br class="gmail_msg">
> llvm/trunk/include/llvm/Support/Wasm.h<br class="gmail_msg">
> llvm/trunk/lib/Object/WasmObjectFile.cpp<br class="gmail_msg">
> llvm/trunk/test/tools/llvm-readobj/file-headers.test<br class="gmail_msg">
> llvm/trunk/test/tools/llvm-readobj/sections.test<br class="gmail_msg">
> llvm/trunk/tools/llvm-readobj/CMakeLists.txt<br class="gmail_msg">
> llvm/trunk/tools/llvm-readobj/ObjDumper.h<br class="gmail_msg">
> llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/Object/Wasm.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Wasm.h?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Wasm.h?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/Object/Wasm.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/Object/Wasm.h Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -87,8 +87,8 @@ protected:<br class="gmail_msg">
><br class="gmail_msg">
> private:<br class="gmail_msg">
> const uint8_t *getPtr(size_t Offset) const;<br class="gmail_msg">
> - Error parseUserSection(wasm::WasmSection &Sec, const uint8_t *Ptr,<br class="gmail_msg">
> - size_t Length);<br class="gmail_msg">
> + Error parseCustomSection(wasm::WasmSection &Sec, const uint8_t *Ptr,<br class="gmail_msg">
> + size_t Length);<br class="gmail_msg">
><br class="gmail_msg">
> wasm::WasmObjectHeader Header;<br class="gmail_msg">
> std::vector<wasm::WasmSection> Sections;<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/include/llvm/Support/Wasm.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Wasm.h?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Wasm.h?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/include/llvm/Support/Wasm.h (original)<br class="gmail_msg">
> +++ llvm/trunk/include/llvm/Support/Wasm.h Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -38,7 +38,7 @@ struct WasmSection {<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
> enum : unsigned {<br class="gmail_msg">
> - WASM_SEC_USER = 0, // User-defined section<br class="gmail_msg">
> + WASM_SEC_CUSTOM = 0, // Custom / User-defined section<br class="gmail_msg">
> WASM_SEC_TYPE = 1, // Function signature declarations<br class="gmail_msg">
> WASM_SEC_IMPORT = 2, // Import declarations<br class="gmail_msg">
> WASM_SEC_FUNCTION = 3, // Function declarations<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/lib/Object/WasmObjectFile.cpp<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WasmObjectFile.cpp?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WasmObjectFile.cpp?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/lib/Object/WasmObjectFile.cpp (original)<br class="gmail_msg">
> +++ llvm/trunk/lib/Object/WasmObjectFile.cpp Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -83,16 +83,17 @@ WasmObjectFile::WasmObjectFile(MemoryBuf<br class="gmail_msg">
> while (Ptr < Eof) {<br class="gmail_msg">
> if ((Err = readSection(Sec, Ptr, getPtr(0))))<br class="gmail_msg">
> return;<br class="gmail_msg">
> - if (Sec.Type == wasm::WASM_SEC_USER) {<br class="gmail_msg">
> - if ((Err = parseUserSection(Sec, Sec.Content.data(), Sec.Content.size())))<br class="gmail_msg">
> + if (Sec.Type == wasm::WASM_SEC_CUSTOM) {<br class="gmail_msg">
> + if ((Err =<br class="gmail_msg">
> + parseCustomSection(Sec, Sec.Content.data(), Sec.Content.size())))<br class="gmail_msg">
> return;<br class="gmail_msg">
> }<br class="gmail_msg">
> Sections.push_back(Sec);<br class="gmail_msg">
> }<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> -Error WasmObjectFile::parseUserSection(wasm::WasmSection &Sec,<br class="gmail_msg">
> - const uint8_t *Ptr, size_t Length) {<br class="gmail_msg">
> +Error WasmObjectFile::parseCustomSection(wasm::WasmSection &Sec,<br class="gmail_msg">
> + const uint8_t *Ptr, size_t Length) {<br class="gmail_msg">
> Sec.Name = readString(Ptr);<br class="gmail_msg">
> return Error::success();<br class="gmail_msg">
> }<br class="gmail_msg">
> @@ -186,7 +187,7 @@ std::error_code WasmObjectFile::getSecti<br class="gmail_msg">
> ECase(ELEM);<br class="gmail_msg">
> ECase(CODE);<br class="gmail_msg">
> ECase(DATA);<br class="gmail_msg">
> - case wasm::WASM_SEC_USER:<br class="gmail_msg">
> + case wasm::WASM_SEC_CUSTOM:<br class="gmail_msg">
> Res = S.Name;<br class="gmail_msg">
> break;<br class="gmail_msg">
> default:<br class="gmail_msg">
><br class="gmail_msg">
> Added: llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm?rev=293569&view=auto" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm?rev=293569&view=auto</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> Binary files llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm (added) and llvm/trunk/test/tools/llvm-readobj/Inputs/trivial.obj.wasm Mon Jan 30 17:30:52 2017 differ<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/test/tools/llvm-readobj/file-headers.test<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/file-headers.test?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/file-headers.test?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/test/tools/llvm-readobj/file-headers.test (original)<br class="gmail_msg">
> +++ llvm/trunk/test/tools/llvm-readobj/file-headers.test Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -26,6 +26,12 @@ RUN: llvm-readobj -h %p/Inputs/magic.cof<br class="gmail_msg">
> RUN: | FileCheck %s -check-prefix COFF-IMPORTLIB<br class="gmail_msg">
> RUN: llvm-readobj -h %p/Inputs/trivial.obj.elf-lanai \<br class="gmail_msg">
> RUN: | FileCheck %s -check-prefix ELF-LANAI<br class="gmail_msg">
> +# trivial.obj.wasm was generated using wast2wasm which is part of the wabt<br class="gmail_msg">
> +# project (<a href="https://github.com/WebAssembly/wabt" rel="noreferrer" class="gmail_msg cremed" target="_blank">https://github.com/WebAssembly/wabt</a>) using the following command:<br class="gmail_msg">
> +# $ wast2wasm --debug-names ./test/roundtrip/generate-some-names.txt -o \<br class="gmail_msg">
> +# trivial.obj.wasm<br class="gmail_msg">
> +RUN: llvm-readobj -h %p/Inputs/trivial.obj.wasm \<br class="gmail_msg">
> +RUN: | FileCheck %s -check-prefix WASM<br class="gmail_msg">
><br class="gmail_msg">
> COFF-ARM: File: {{(.*[/\\])?}}trivial.obj.coff-arm<br class="gmail_msg">
> COFF-ARM-NEXT: Format: COFF-ARM<br class="gmail_msg">
> @@ -367,3 +373,8 @@ ELF-LANAI-NEXT: SectionHeaderEntrySize<br class="gmail_msg">
> ELF-LANAI-NEXT: SectionHeaderCount: 8<br class="gmail_msg">
> ELF-LANAI-NEXT: StringTableSectionIndex: 1<br class="gmail_msg">
> ELF-LANAI-NEXT: }<br class="gmail_msg">
> +<br class="gmail_msg">
> +WASM: Format: WASM<br class="gmail_msg">
> +WASM-NEXT: Arch: wasm32<br class="gmail_msg">
> +WASM-NEXT: AddressSize: 32bit<br class="gmail_msg">
> +WASM-NEXT: Version: 0xD<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/test/tools/llvm-readobj/sections.test<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/sections.test?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/sections.test?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/test/tools/llvm-readobj/sections.test (original)<br class="gmail_msg">
> +++ llvm/trunk/test/tools/llvm-readobj/sections.test Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -14,6 +14,8 @@ RUN: llvm-readobj -s %p/Inputs/trivial.o<br class="gmail_msg">
> RUN: | FileCheck %s -check-prefix MACHO-PPC64<br class="gmail_msg">
> RUN: llvm-readobj -s %p/Inputs/trivial.obj.macho-arm \<br class="gmail_msg">
> RUN: | FileCheck %s -check-prefix MACHO-ARM<br class="gmail_msg">
> +RUN: llvm-readobj -s %p/Inputs/trivial.obj.wasm \<br class="gmail_msg">
> +RUN: | FileCheck %s -check-prefix WASM<br class="gmail_msg">
><br class="gmail_msg">
> COFF: Sections [<br class="gmail_msg">
> COFF-NEXT: Section {<br class="gmail_msg">
> @@ -490,3 +492,47 @@ MACHO-ARM-NEXT: Reserved1: 0x0<br class="gmail_msg">
> MACHO-ARM-NEXT: Reserved2: 0x0<br class="gmail_msg">
> MACHO-ARM-NEXT: }<br class="gmail_msg">
> MACHO-ARM-NEXT:]<br class="gmail_msg">
> +<br class="gmail_msg">
> +WASM: Sections [<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: TYPE (0x1)<br class="gmail_msg">
> +WASM-NEXT: Size: 15<br class="gmail_msg">
> +WASM-NEXT: Offset: 8<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: IMPORT (0x2)<br class="gmail_msg">
> +WASM-NEXT: Size: 11<br class="gmail_msg">
> +WASM-NEXT: Offset: 25<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: FUNCTION (0x3)<br class="gmail_msg">
> +WASM-NEXT: Size: 3<br class="gmail_msg">
> +WASM-NEXT: Offset: 38<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: TABLE (0x4)<br class="gmail_msg">
> +WASM-NEXT: Size: 5<br class="gmail_msg">
> +WASM-NEXT: Offset: 43<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: EXPORT (0x7)<br class="gmail_msg">
> +WASM-NEXT: Size: 14<br class="gmail_msg">
> +WASM-NEXT: Offset: 50<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: ELEM (0x9)<br class="gmail_msg">
> +WASM-NEXT: Size: 7<br class="gmail_msg">
> +WASM-NEXT: Offset: 66<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: CODE (0xA)<br class="gmail_msg">
> +WASM-NEXT: Size: 42<br class="gmail_msg">
> +WASM-NEXT: Offset: 75<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: Section {<br class="gmail_msg">
> +WASM-NEXT: Type: CUSTOM (0x0)<br class="gmail_msg">
> +WASM-NEXT: Size: 44<br class="gmail_msg">
> +WASM-NEXT: Offset: 119<br class="gmail_msg">
> +WASM-NEXT: Name: name<br class="gmail_msg">
> +WASM-NEXT: }<br class="gmail_msg">
> +WASM-NEXT: ]<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/tools/llvm-readobj/CMakeLists.txt<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/CMakeLists.txt?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/CMakeLists.txt?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/tools/llvm-readobj/CMakeLists.txt (original)<br class="gmail_msg">
> +++ llvm/trunk/tools/llvm-readobj/CMakeLists.txt Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -15,5 +15,6 @@ add_llvm_tool(llvm-readobj<br class="gmail_msg">
> llvm-readobj.cpp<br class="gmail_msg">
> MachODumper.cpp<br class="gmail_msg">
> ObjDumper.cpp<br class="gmail_msg">
> + WasmDumper.cpp<br class="gmail_msg">
> Win64EHDumper.cpp<br class="gmail_msg">
> )<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/tools/llvm-readobj/ObjDumper.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.h?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.h?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/tools/llvm-readobj/ObjDumper.h (original)<br class="gmail_msg">
> +++ llvm/trunk/tools/llvm-readobj/ObjDumper.h Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -96,6 +96,10 @@ std::error_code createMachODumper(const<br class="gmail_msg">
> ScopedPrinter &Writer,<br class="gmail_msg">
> std::unique_ptr<ObjDumper> &Result);<br class="gmail_msg">
><br class="gmail_msg">
> +std::error_code createWasmDumper(const object::ObjectFile *Obj,<br class="gmail_msg">
> + ScopedPrinter &Writer,<br class="gmail_msg">
> + std::unique_ptr<ObjDumper> &Result);<br class="gmail_msg">
> +<br class="gmail_msg">
> void dumpCOFFImportFile(const object::COFFImportFile *File);<br class="gmail_msg">
><br class="gmail_msg">
> void dumpCodeViewMergedTypes(ScopedPrinter &Writer,<br class="gmail_msg">
><br class="gmail_msg">
> Added: llvm/trunk/tools/llvm-readobj/WasmDumper.cpp<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/WasmDumper.cpp?rev=293569&view=auto" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/WasmDumper.cpp?rev=293569&view=auto</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/tools/llvm-readobj/WasmDumper.cpp (added)<br class="gmail_msg">
> +++ llvm/trunk/tools/llvm-readobj/WasmDumper.cpp Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -0,0 +1,92 @@<br class="gmail_msg">
> +//===-- WasmDumper.cpp - Wasm-specific object file dumper -----------------===//<br class="gmail_msg">
> +//<br class="gmail_msg">
> +// The LLVM Compiler Infrastructure<br class="gmail_msg">
> +//<br class="gmail_msg">
> +// This file is distributed under the University of Illinois Open Source<br class="gmail_msg">
> +// License. See LICENSE.TXT for details.<br class="gmail_msg">
> +//<br class="gmail_msg">
> +//===----------------------------------------------------------------------===//<br class="gmail_msg">
> +//<br class="gmail_msg">
> +// This file implements the Wasm-specific dumper for llvm-readobj.<br class="gmail_msg">
> +//<br class="gmail_msg">
> +//===----------------------------------------------------------------------===//<br class="gmail_msg">
> +<br class="gmail_msg">
> +#include "Error.h"<br class="gmail_msg">
> +#include "ObjDumper.h"<br class="gmail_msg">
> +#include "llvm/Object/Wasm.h"<br class="gmail_msg">
> +#include "llvm/Support/ScopedPrinter.h"<br class="gmail_msg">
> +<br class="gmail_msg">
> +using namespace llvm;<br class="gmail_msg">
> +using namespace object;<br class="gmail_msg">
> +<br class="gmail_msg">
> +namespace {<br class="gmail_msg">
> +<br class="gmail_msg">
> +const char *wasmSectionTypeToString(uint32_t Type) {<br class="gmail_msg">
> +#define ECase(X) \<br class="gmail_msg">
> + case wasm::WASM_SEC_##X: \<br class="gmail_msg">
> + return #X;<br class="gmail_msg">
> + switch (Type) {<br class="gmail_msg">
> + ECase(CUSTOM);<br class="gmail_msg">
> + ECase(TYPE);<br class="gmail_msg">
> + ECase(IMPORT);<br class="gmail_msg">
> + ECase(FUNCTION);<br class="gmail_msg">
> + ECase(TABLE);<br class="gmail_msg">
> + ECase(MEMORY);<br class="gmail_msg">
> + ECase(GLOBAL);<br class="gmail_msg">
> + ECase(EXPORT);<br class="gmail_msg">
> + ECase(START);<br class="gmail_msg">
> + ECase(ELEM);<br class="gmail_msg">
> + ECase(CODE);<br class="gmail_msg">
> + ECase(DATA);<br class="gmail_msg">
> + }<br class="gmail_msg">
> +#undef ECase<br class="gmail_msg">
> + return "";<br class="gmail_msg">
> +}<br class="gmail_msg">
> +<br class="gmail_msg">
> +class WasmDumper : public ObjDumper {<br class="gmail_msg">
> +public:<br class="gmail_msg">
> + WasmDumper(const WasmObjectFile *Obj, ScopedPrinter &Writer)<br class="gmail_msg">
> + : ObjDumper(Writer), Obj(Obj) {}<br class="gmail_msg">
> +<br class="gmail_msg">
> + void printFileHeaders() override {<br class="gmail_msg">
> + W.printHex("Version", Obj->getHeader().Version);<br class="gmail_msg">
> + }<br class="gmail_msg">
> +<br class="gmail_msg">
> + void printSections() override {<br class="gmail_msg">
> + ListScope Group(W, "Sections");<br class="gmail_msg">
> + for (const SectionRef &Section : Obj->sections()) {<br class="gmail_msg">
> + const wasm::WasmSection *WasmSec = Obj->getWasmSection(Section);<br class="gmail_msg">
> + DictScope SectionD(W, "Section");<br class="gmail_msg">
> + const char *Type = wasmSectionTypeToString(WasmSec->Type);<br class="gmail_msg">
> + W.printHex("Type", Type, WasmSec->Type);<br class="gmail_msg">
> + W.printNumber("Size", WasmSec->Content.size());<br class="gmail_msg">
> + W.printNumber("Offset", WasmSec->Offset);<br class="gmail_msg">
> + if (WasmSec->Type == wasm::WASM_SEC_CUSTOM) {<br class="gmail_msg">
> + W.printString("Name", WasmSec->Name);<br class="gmail_msg">
> + }<br class="gmail_msg">
> + }<br class="gmail_msg">
> + }<br class="gmail_msg">
> + void printRelocations() override { llvm_unreachable("unimplemented"); }<br class="gmail_msg">
> + void printSymbols() override { llvm_unreachable("unimplemented"); }<br class="gmail_msg">
> + void printDynamicSymbols() override { llvm_unreachable("unimplemented"); }<br class="gmail_msg">
> + void printUnwindInfo() override { llvm_unreachable("unimplemented"); }<br class="gmail_msg">
> + void printStackMap() const override { llvm_unreachable("unimplemented"); }<br class="gmail_msg">
> +<br class="gmail_msg">
> +private:<br class="gmail_msg">
> + const WasmObjectFile *Obj;<br class="gmail_msg">
> +};<br class="gmail_msg">
> +}<br class="gmail_msg">
> +<br class="gmail_msg">
> +namespace llvm {<br class="gmail_msg">
> +<br class="gmail_msg">
> +std::error_code createWasmDumper(const object::ObjectFile *Obj,<br class="gmail_msg">
> + ScopedPrinter &Writer,<br class="gmail_msg">
> + std::unique_ptr<ObjDumper> &Result) {<br class="gmail_msg">
> + const WasmObjectFile *WasmObj = dyn_cast<WasmObjectFile>(Obj);<br class="gmail_msg">
> + assert(WasmObj && "createWasmDumper called with non-wasm object");<br class="gmail_msg">
> +<br class="gmail_msg">
> + Result.reset(new WasmDumper(WasmObj, Writer));<br class="gmail_msg">
> + return readobj_error::success;<br class="gmail_msg">
> +}<br class="gmail_msg">
> +<br class="gmail_msg">
> +} // namespace llvm<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=293569&r1=293568&r2=293569&view=diff" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp?rev=293569&r1=293568&r2=293569&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp (original)<br class="gmail_msg">
> +++ llvm/trunk/tools/llvm-readobj/llvm-readobj.cpp Mon Jan 30 17:30:52 2017<br class="gmail_msg">
> @@ -358,6 +358,8 @@ static std::error_code createDumper(cons<br class="gmail_msg">
> return createELFDumper(Obj, Writer, Result);<br class="gmail_msg">
> if (Obj->isMachO())<br class="gmail_msg">
> return createMachODumper(Obj, Writer, Result);<br class="gmail_msg">
> + if (Obj->isWasm())<br class="gmail_msg">
> + return createWasmDumper(Obj, Writer, Result);<br class="gmail_msg">
><br class="gmail_msg">
> return readobj_error::unsupported_obj_file_format;<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> _______________________________________________<br class="gmail_msg">
> llvm-commits mailing list<br class="gmail_msg">
> <a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg cremed" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg cremed" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>