[WebAssembly] Export some more info on wasm funtions

Summary:
These fields are useful for lld's gc-sections support

Also remove an unused field.

Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish

Differential Revision: https://reviews.llvm.org/D41320

llvm-svn: 320946
This commit is contained in:
Sam Clegg 2017-12-17 17:50:07 +00:00
parent 6f7bbf349f
commit c551522d25
3 changed files with 9 additions and 6 deletions

View File

@ -91,6 +91,8 @@ struct WasmLocalDecl {
struct WasmFunction {
std::vector<WasmLocalDecl> Locals;
ArrayRef<uint8_t> Body;
size_t CodeSectionOffset;
size_t Size;
};
struct WasmDataSegment {

View File

@ -140,7 +140,6 @@ public:
ArrayRef<wasm::WasmElemSegment> elements() const { return ElemSegments; }
ArrayRef<WasmSegment> dataSegments() const { return DataSegments; }
ArrayRef<wasm::WasmFunction> functions() const { return Functions; }
const ArrayRef<uint8_t>& code() const { return CodeSection; }
uint32_t startFunction() const { return StartFunction; }
void moveSymbolNext(DataRefImpl &Symb) const override;
@ -242,7 +241,6 @@ private:
std::vector<WasmSegment> DataSegments;
std::vector<wasm::WasmFunction> Functions;
std::vector<WasmSymbol> Symbols;
ArrayRef<uint8_t> CodeSection;
uint32_t StartFunction = -1;
bool HasLinkingSection = false;
wasm::WasmLinkingData LinkingData;

View File

@ -684,18 +684,21 @@ Error WasmObjectFile::parseStartSection(const uint8_t *Ptr, const uint8_t *End)
}
Error WasmObjectFile::parseCodeSection(const uint8_t *Ptr, const uint8_t *End) {
const uint8_t *CodeSectionStart = Ptr;
uint32_t FunctionCount = readVaruint32(Ptr);
if (FunctionCount != FunctionTypes.size()) {
return make_error<GenericBinaryError>("Invalid function count",
object_error::parse_failed);
}
CodeSection = ArrayRef<uint8_t>(Ptr, End - Ptr);
while (FunctionCount--) {
wasm::WasmFunction Function;
uint32_t FunctionSize = readVaruint32(Ptr);
const uint8_t *FunctionEnd = Ptr + FunctionSize;
const uint8_t *FunctionStart = Ptr;
uint32_t Size = readVaruint32(Ptr);
const uint8_t *FunctionEnd = Ptr + Size;
Function.CodeSectionOffset = FunctionStart - CodeSectionStart;
Function.Size = FunctionEnd - FunctionStart;
uint32_t NumLocalDecls = readVaruint32(Ptr);
Function.Locals.reserve(NumLocalDecls);