diff options
author | Andy Wingo <wingo@igalia.com> | 2020-10-01 17:30:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-01 08:30:58 -0700 |
commit | ee87440dedb4335d5ca8ec25e86b36c27a5b3368 (patch) | |
tree | 522ec9766d5da42fd8b8ba6efa0c6e74fc370748 /src/common.h | |
parent | cd63243c5b3b2fa938f365edab30139f74549b51 (diff) | |
download | wabt-ee87440dedb4335d5ca8ec25e86b36c27a5b3368.tar.gz wabt-ee87440dedb4335d5ca8ec25e86b36c27a5b3368.tar.bz2 wabt-ee87440dedb4335d5ca8ec25e86b36c27a5b3368.zip |
Add --relocatable support for tables (#1549) (#1549)
We add relocations for table numbers on each place where we reify a
table number (call_indirect, table.get, table.set...), but only if
reference types are enabled.
Also, fix symbol table generation with unnamed definitions, to allow for
relocating references to anonymous functions or tables.
As tests, add variants of the relocations and symbol-tables dump tests,
with and without all features enabled. Enabling reference types causes
relocs to be emitted. We also add --details to the relocations dump
tests, so that we can see the target symbols for the relocations.
Diffstat (limited to 'src/common.h')
-rw-r--r-- | src/common.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/common.h b/src/common.h index 40f79f49..d900619d 100644 --- a/src/common.h +++ b/src/common.h @@ -294,9 +294,10 @@ enum class RelocType { MemoryAddressRelSLEB64 = 17, // Memory64: Like MemoryAddressRelSLEB TableIndexSLEB64 = 18, // Memory64: Like TableIndexSLEB TableIndexI64 = 19, // Memory64: Like TableIndexI32 + TableNumberLEB = 20, // e.g. Immediate of table.get First = FuncIndexLEB, - Last = TableIndexI64, + Last = TableNumberLEB, }; static const int kRelocTypeCount = WABT_ENUM_COUNT(RelocType); @@ -322,6 +323,7 @@ enum class SymbolType { Global = 2, Section = 3, Event = 4, + Table = 5, }; enum class ComdatType { @@ -422,6 +424,8 @@ static WABT_INLINE const char* GetSymbolTypeName(SymbolType type) { return "section"; case SymbolType::Event: return "event"; + case SymbolType::Table: + return "table"; default: return "<error_symbol_type>"; } |