forked from OSchip/llvm-project
[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:
parent
6f7bbf349f
commit
c551522d25
|
@ -91,6 +91,8 @@ struct WasmLocalDecl {
|
|||
struct WasmFunction {
|
||||
std::vector<WasmLocalDecl> Locals;
|
||||
ArrayRef<uint8_t> Body;
|
||||
size_t CodeSectionOffset;
|
||||
size_t Size;
|
||||
};
|
||||
|
||||
struct WasmDataSegment {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue