diff options
author | Jacob Gravelle <jgravelle@google.com> | 2018-02-14 10:30:16 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-14 10:30:16 -0800 |
commit | ee78bc9bccb02bb2b63fbb881fd2893a5fca0044 (patch) | |
tree | f757a2b8d0baed7d73628905038894217ab4bdee /src/tools/wasm-link-metadata.cpp | |
parent | e97d485bb1f1818e2c2118d28507d49cb61ea57b (diff) | |
download | binaryen-ee78bc9bccb02bb2b63fbb881fd2893a5fca0044.tar.gz binaryen-ee78bc9bccb02bb2b63fbb881fd2893a5fca0044.tar.bz2 binaryen-ee78bc9bccb02bb2b63fbb881fd2893a5fca0044.zip |
Fold wasm-link-metadata into wasm-emscripten-finalize (#1408)
* wasm-link-metadata: Use `__data_end` symbol.
* Add --global-base param to emscripten-wasm-finalize to compute staticBump properly
* Let ModuleWriter write to a provided Output object
Diffstat (limited to 'src/tools/wasm-link-metadata.cpp')
-rw-r--r-- | src/tools/wasm-link-metadata.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/tools/wasm-link-metadata.cpp b/src/tools/wasm-link-metadata.cpp deleted file mode 100644 index 3af00fbbf..000000000 --- a/src/tools/wasm-link-metadata.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2017 WebAssembly Community Group participants - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// -// wasm-link-metadata console tool -// Reads wasm .o file and emits .json metadata -// - -#include <exception> - -#include "abi/wasm-object.h" -#include "ir/trapping.h" -#include "support/colors.h" -#include "support/command-line.h" -#include "support/file.h" -#include "wasm-binary.h" -#include "wasm-emscripten.h" -#include "wasm-io.h" -#include "wasm-linker.h" -#include "wasm-printing.h" -#include "wasm-validator.h" - -using namespace cashew; -using namespace wasm; - -void parseLinkingSection(std::vector<char> const& data, uint32_t &dataSize) { - unsigned idx = 0; - auto get = [&idx, &data](){ return data[idx++]; }; - auto readNext = [get](){ - U32LEB leb; - leb.read(get); - return leb.value; - }; - - while (idx < data.size()) { - ABI::LinkType type = static_cast<ABI::LinkType>(readNext()); - uint32_t size = readNext(); - uint32_t startIdx = idx; - - switch(type) { - case ABI::WASM_DATA_SIZE: { - dataSize = readNext(); - break; - } - default: { - break; - } - } - // Always go to the end of the subsection based on size, not contents. - idx = startIdx + size; - } -} - -int main(int argc, const char *argv[]) { - std::string infile; - std::string outfile; - unsigned numReservedFunctionPointers = 0; - Options options("wasm-link-metadata", - "Reads wasm .o file and emits .json metadata"); - options - .add("--output", "-o", "Output file", - Options::Arguments::One, - [&outfile](Options *o, const std::string& argument) { - outfile = argument; - Colors::disable(); - }) - .add("--emscripten-reserved-function-pointers", "", - "Number of reserved function pointers for emscripten addFunction " - "support", - Options::Arguments::One, - [&numReservedFunctionPointers](Options *o, - const std::string &argument) { - numReservedFunctionPointers = std::stoi(argument); - }) - .add_positional("INFILE", Options::Arguments::One, - [&infile](Options *o, const std::string& argument) { - infile = argument; - }); - options.parse(argc, argv); - - if (infile == "") { - Fatal() << "Need to specify an infile\n"; - } - - Module wasm; - try { - ModuleReader reader; - reader.readBinary(infile, wasm); - } catch (ParseException& p) { - p.dump(std::cerr); - Fatal() << "error in parsing wasm binary"; - } - - if (options.debug) { - WasmPrinter::printModule(&wasm, std::cerr); - } - - uint32_t dataSize = 0; - for (auto §ion : wasm.userSections) { - if (section.name == "linking") { - parseLinkingSection(section.data, dataSize); - } - } - - std::vector<Name> initializerFunctions; - initializerFunctions.push_back("__wasm_call_ctors"); - - EmscriptenGlueGenerator generator(wasm); - std::string metadata = generator.generateEmscriptenMetadata( - dataSize, initializerFunctions, numReservedFunctionPointers); - Output output(outfile, Flags::Text, Flags::Release); - output << metadata; - - return 0; -} |