Go to the documentation of this file.
18 #include "absl/strings/substitute.h"
30 const char* limit =
ptr +
data->size();
32 while (
ptr < limit && shift < maxshift) {
36 if ((
byte & 0x80) == 0) {
38 if (is_signed && shift <
size && (
byte & 0x40)) {
45 THROW(
"corrupt wasm data, unterminated LEB128");
66 THROW(
"premature EOF reading variable-length DWARF data");
74 const uint32_t wasm_magic = 0x6d736100;
77 if (
magic != wasm_magic) {
103 size_t header_size =
ret.contents.data() - section_data.
data();
109 }
else if (
ret.id <= 13) {
112 THROWF(
"Unknown section id: $0",
ret.id);
164 template <
class Func>
169 while (!
data.empty()) {
177 sink->AddFileRange(
"wasm_sections", section.name, section.data);
185 enum class NameType {
193 while (!
data.empty()) {
198 if (
static_cast<NameType
>(
type) == NameType::kFunction) {
206 sink->AddFileRange(
"wasm_funcname",
name, entry);
255 auto kind = ReadFixed<uint8_t>(&
data);
272 THROWF(
"Unrecognized import kind: $0", kind);
306 std::unordered_map<int, std::string> func_names;
311 if (section.name ==
"name") {
312 ReadFunctionNames(section, &func_names, sink);
318 [&func_names, &num_imports,
sink](
const Section&
section) {
319 if (section.id == Section::kImport) {
320 num_imports = GetNumFunctionImports(section);
322 ReadCodeSection(section, func_names, num_imports, sink);
330 std::string(
"[section ") + std::string(section.name) + std::string(
"]");
331 sink->AddFileRange(
"wasm_overhead", name2, section.data);
333 sink->AddFileRange(
"wasm_overhead",
"[WASM Header]",
347 void ProcessFile(
const std::vector<RangeSink*>& sinks)
const override {
348 for (
auto sink : sinks) {
349 switch (
sink->data_source()) {
350 case DataSource::kSegments:
351 case DataSource::kSections:
354 case DataSource::kSymbols:
355 case DataSource::kRawSymbols:
356 case DataSource::kShortSymbols:
357 case DataSource::kFullSymbols:
360 case DataSource::kArchiveMembers:
361 case DataSource::kCompileUnits:
362 case DataSource::kInlines:
364 THROW(
"WebAssembly doesn't support this data source");
373 WARN(
"WebAssembly files do not support disassembly yet");
381 std::unique_ptr<InputFile>&
file) {
384 return std::unique_ptr<ObjectFile>(
void ForEachSection(string_view file, Func &§ion_func)
int ReadValueType(string_view *data)
bool ReadMagic(string_view *data)
bool ReadVarUInt1(string_view *data)
string_view ReadPiece(size_t bytes, string_view *data)
void ReadFunctionNames(const Section §ion, FuncNames *names, RangeSink *sink)
OPENSSL_EXPORT const char * section
const grpc_generator::File * file
void ReadCodeSection(const Section §ion, const FuncNames &names, uint32_t num_imports, RangeSink *sink)
void AddWebAssemblyFallback(RangeSink *sink)
std::string GetBuildId() const override
int ReadElemType(string_view *data)
void ProcessFile(const std::vector< RangeSink * > &sinks) const override
void ReadMemoryType(string_view *data)
void ParseSymbols(RangeSink *sink)
uint8_t ReadVarUInt7(string_view *data)
static const char * names[]
std::string ItaniumDemangle(string_view symbol, DataSource source)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
FuncOutput(*)(const void *, FuncInput) Func
uint32_t GetNumFunctionImports(const Section §ion)
unsigned __int64 uint64_t
void ReadResizableLimits(string_view *data)
void ReadTableType(string_view *data)
std::unique_ptr< ObjectFile > TryOpenWebAssemblyFile(std::unique_ptr< InputFile > &file)
bool GetDisassemblyInfo(absl::string_view, DataSource, DisassemblyInfo *) const override
UniquePtr< SSL_SESSION > ret
absl::string_view string_view
void ParseSections(RangeSink *sink)
std::unordered_map< int, std::string > FuncNames
static Section Read(string_view *data_param)
uint32_t ReadVarUInt32(string_view *data)
WebAssemblyObjectFile(std::unique_ptr< InputFile > file_data)
int8_t ReadVarint7(string_view *data)
uint64_t ReadLEB128Internal(bool is_signed, size_t size, string_view *data)
void ReadGlobalType(string_view *data)
constexpr const_pointer data() const noexcept
static bool to_string(zval *from)
absl::string_view StrictSubstr(absl::string_view data, size_t off, size_t n)
if(p->owned &&p->wrapped !=NULL)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:51