forked from OSchip/llvm-project
[WebAssembly] Update format of 'names' section.
This change updates to the format of the 'names' sectionin the generated wasm binary to match the latest changesto the design and 'wabt'. Differential Revision: https://reviews.llvm.org/D30950 Patch by Sam Clegg llvm-svn: 297877
This commit is contained in:
parent
06c70adcf0
commit
13f080fbeb
|
@ -81,6 +81,11 @@ enum : unsigned {
|
||||||
WASM_OPCODE_F64_CONST = 0x44,
|
WASM_OPCODE_F64_CONST = 0x44,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum : unsigned {
|
||||||
|
WASM_NAMES_FUNCTION = 0x1,
|
||||||
|
WASM_NAMES_LOCAL = 0x2,
|
||||||
|
};
|
||||||
|
|
||||||
// Subset of types that a value can have
|
// Subset of types that a value can have
|
||||||
enum class ValType {
|
enum class ValType {
|
||||||
I32 = WASM_TYPE_I32,
|
I32 = WASM_TYPE_I32,
|
||||||
|
|
|
@ -982,25 +982,30 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm,
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Name Section ==========================================================
|
// === Name Section ==========================================================
|
||||||
if (NumFuncImports != 0 || !Functions.empty()) {
|
uint32_t TotalFunctions = NumFuncImports + Functions.size();
|
||||||
|
if (TotalFunctions != 0) {
|
||||||
startSection(Section, wasm::WASM_SEC_CUSTOM, "name");
|
startSection(Section, wasm::WASM_SEC_CUSTOM, "name");
|
||||||
|
SectionBookkeeping SubSection;
|
||||||
|
startSection(SubSection, wasm::WASM_NAMES_FUNCTION);
|
||||||
|
|
||||||
encodeULEB128(NumFuncImports + Functions.size(), getStream());
|
encodeULEB128(TotalFunctions, getStream());
|
||||||
|
uint32_t Index = 0;
|
||||||
for (const WasmImport &Import : Imports) {
|
for (const WasmImport &Import : Imports) {
|
||||||
if (Import.Kind == wasm::WASM_EXTERNAL_FUNCTION) {
|
if (Import.Kind == wasm::WASM_EXTERNAL_FUNCTION) {
|
||||||
|
encodeULEB128(Index, getStream());
|
||||||
encodeULEB128(Import.FieldName.size(), getStream());
|
encodeULEB128(Import.FieldName.size(), getStream());
|
||||||
writeBytes(Import.FieldName);
|
writeBytes(Import.FieldName);
|
||||||
encodeULEB128(0, getStream()); // local count, meaningless for imports
|
++Index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const WasmFunction &Func : Functions) {
|
for (const WasmFunction &Func : Functions) {
|
||||||
|
encodeULEB128(Index, getStream());
|
||||||
encodeULEB128(Func.Sym->getName().size(), getStream());
|
encodeULEB128(Func.Sym->getName().size(), getStream());
|
||||||
writeBytes(Func.Sym->getName());
|
writeBytes(Func.Sym->getName());
|
||||||
|
++Index;
|
||||||
// TODO: Local names.
|
|
||||||
encodeULEB128(0, getStream()); // local count
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endSection(SubSection);
|
||||||
endSection(Section);
|
endSection(Section);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue