summaryrefslogtreecommitdiff
path: root/src/common.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@igalia.com>2020-10-01 17:30:58 +0200
committerGitHub <noreply@github.com>2020-10-01 08:30:58 -0700
commitee87440dedb4335d5ca8ec25e86b36c27a5b3368 (patch)
tree522ec9766d5da42fd8b8ba6efa0c6e74fc370748 /src/common.h
parentcd63243c5b3b2fa938f365edab30139f74549b51 (diff)
downloadwabt-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.h6
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>";
}