diff options
-rw-r--r-- | src/binary-reader-objdump.cc | 18 | ||||
-rw-r--r-- | src/common.h | 6 | ||||
-rw-r--r-- | test/binary/linking_section.txt | 14 |
3 files changed, 32 insertions, 6 deletions
diff --git a/src/binary-reader-objdump.cc b/src/binary-reader-objdump.cc index 836bf7fa..5fe39adb 100644 --- a/src/binary-reader-objdump.cc +++ b/src/binary-reader-objdump.cc @@ -1072,8 +1072,22 @@ Result BinaryReaderObjdump::OnSymbolInfoCount(Index count) { } Result BinaryReaderObjdump::OnSymbolInfo(string_view name, uint32_t flags) { - PrintDetails(" - <" PRIstringview "> flags=0x%x\n", - WABT_PRINTF_STRING_VIEW_ARG(name), flags); + const char* binding_name = nullptr; + SymbolBinding binding = static_cast<SymbolBinding>(flags & 0x3); + switch (binding) { + case SymbolBinding::Global: + binding_name = "GLOBAL"; + break; + case SymbolBinding::Local: + binding_name = "LOCAL "; + break; + case SymbolBinding::Weak: + binding_name = "WEAK "; + break; + } + + PrintDetails(" - %s <" PRIstringview ">\n", binding_name, + WABT_PRINTF_STRING_VIEW_ARG(name)); return Result::Ok; } diff --git a/src/common.h b/src/common.h index 78fe710f..2b14c242 100644 --- a/src/common.h +++ b/src/common.h @@ -227,6 +227,12 @@ enum class LinkingEntryType { SymbolInfo = 2, }; +enum class SymbolBinding { + Global = 0, + Weak = 1, + Local = 2, +}; + /* matches binary format, do not change */ enum class ExternalKind { Func = 0, diff --git a/test/binary/linking_section.txt b/test/binary/linking_section.txt index 699c9c58..aaa0e6f6 100644 --- a/test/binary/linking_section.txt +++ b/test/binary/linking_section.txt @@ -7,10 +7,14 @@ section("linking") { length[1] stack_global[3] subsection[2] - length[6] - num_symbols[1] + length[16] + num_symbols[3] str("foo") flags[1] + str("bar") + flags[2] + str("baz") + flags[0] } (;; STDOUT ;;; @@ -21,6 +25,8 @@ Section Details: Custom: - name: "linking" - stack pointer global: 3 - - symbol info [count=1] - - <foo> flags=0x1 + - symbol info [count=3] + - WEAK <foo> + - LOCAL <bar> + - GLOBAL <baz> ;;; STDOUT ;;) |