about summary refs log tree commit diff
path: root/pkgs/development/compilers/llvm/16/lld/add-table-base.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/llvm/16/lld/add-table-base.patch')
-rw-r--r--pkgs/development/compilers/llvm/16/lld/add-table-base.patch190
1 files changed, 0 insertions, 190 deletions
diff --git a/pkgs/development/compilers/llvm/16/lld/add-table-base.patch b/pkgs/development/compilers/llvm/16/lld/add-table-base.patch
deleted file mode 100644
index 15fc903a5e3f..000000000000
--- a/pkgs/development/compilers/llvm/16/lld/add-table-base.patch
+++ /dev/null
@@ -1,190 +0,0 @@
-From 93adcb770b99351b18553089c164fe3ef2119699 Mon Sep 17 00:00:00 2001
-From: Sam Clegg <sbc@chromium.org>
-Date: Fri, 25 Aug 2023 13:56:16 -0700
-Subject: [PATCH] [lld][WebAssembly] Add `--table-base` setting
-
-This is similar to `--global-base` but determines where to place the
-table segments rather than that data segments.
-
-See https://github.com/emscripten-core/emscripten/issues/20097
-
-Differential Revision: https://reviews.llvm.org/D158892
----
- test/wasm/table-base.s | 72 ++++++++++++++++++++++++++++++++++++++
- wasm/Driver.cpp        | 19 ++++++++--
- wasm/Options.td        |  5 ++-
- wasm/Writer.cpp        |  8 -----
- 4 files changed, 93 insertions(+), 11 deletions(-)
- create mode 100644 test/wasm/table-base.s
-
-diff --git a/test/wasm/table-base.s b/test/wasm/table-base.s
-new file mode 100644
-index 000000000000000..56fff414fd31d96
---- /dev/null
-+++ b/test/wasm/table-base.s
-@@ -0,0 +1,72 @@
-+# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.o
-+
-+# RUN: wasm-ld --export=__table_base -o %t.wasm %t.o
-+# RUN: obj2yaml %t.wasm | FileCheck %s  -check-prefix=CHECK-DEFAULT
-+
-+# RUN: wasm-ld --table-base=100 --export=__table_base -o %t.wasm %t.o
-+# RUN: obj2yaml %t.wasm | FileCheck %s  -check-prefix=CHECK-100
-+
-+.globl _start
-+_start:
-+  .functype _start () -> ()
-+  i32.const _start
-+  drop
-+  end_function
-+
-+# CHECK-DEFAULT:       - Type:            TABLE
-+# CHECK-DEFAULT-NEXT:    Tables:
-+# CHECK-DEFAULT-NEXT:      - Index:           0
-+# CHECK-DEFAULT-NEXT:        ElemType:        FUNCREF
-+# CHECK-DEFAULT-NEXT:        Limits:
-+# CHECK-DEFAULT-NEXT:          Flags:           [ HAS_MAX ]
-+# CHECK-DEFAULT-NEXT:          Minimum:         0x2
-+# CHECK-DEFAULT-NEXT:          Maximum:         0x2
-+
-+# CHECK-DEFAULT:       - Type:            GLOBAL
-+# CHECK-DEFAULT-NEXT:    Globals:
-+# CHECK-DEFAULT-NEXT:      - Index:           0
-+# CHECK-DEFAULT-NEXT:        Type:            I32
-+# CHECK-DEFAULT-NEXT:        Mutable:         true
-+# CHECK-DEFAULT-NEXT:        InitExpr:
-+# CHECK-DEFAULT-NEXT:          Opcode:          I32_CONST
-+# CHECK-DEFAULT-NEXT:          Value:           66560
-+# CHECK-DEFAULT-NEXT:      - Index:           1
-+# CHECK-DEFAULT-NEXT:        Type:            I32
-+# CHECK-DEFAULT-NEXT:        Mutable:         false
-+# CHECK-DEFAULT-NEXT:        InitExpr:
-+# CHECK-DEFAULT-NEXT:          Opcode:          I32_CONST
-+# CHECK-DEFAULT-NEXT:          Value:           1
-+
-+# CHECK-DEFAULT:       - Type:            EXPORT
-+# CHECK-DEFAULT:           - Name:            __table_base
-+# CHECK-DEFAULT-NEXT:        Kind:            GLOBAL
-+# CHECK-DEFAULT-NEXT:        Index:           1
-+
-+# CHECK-100:       - Type:            TABLE
-+# CHECK-100-NEXT:    Tables:
-+# CHECK-100-NEXT:      - Index:           0
-+# CHECK-100-NEXT:        ElemType:        FUNCREF
-+# CHECK-100-NEXT:        Limits:
-+# CHECK-100-NEXT:          Flags:           [ HAS_MAX ]
-+# CHECK-100-NEXT:          Minimum:         0x65
-+# CHECK-100-NEXT:          Maximum:         0x65
-+
-+# CHECK-100:       - Type:            GLOBAL
-+# CHECK-100-NEXT:    Globals:
-+# CHECK-100-NEXT:      - Index:           0
-+# CHECK-100-NEXT:        Type:            I32
-+# CHECK-100-NEXT:        Mutable:         true
-+# CHECK-100-NEXT:        InitExpr:
-+# CHECK-100-NEXT:          Opcode:          I32_CONST
-+# CHECK-100-NEXT:          Value:           66560
-+# CHECK-100-NEXT:      - Index:           1
-+# CHECK-100-NEXT:        Type:            I32
-+# CHECK-100-NEXT:        Mutable:         false
-+# CHECK-100-NEXT:        InitExpr:
-+# CHECK-100-NEXT:          Opcode:          I32_CONST
-+# CHECK-100-NEXT:          Value:           100
-+
-+# CHECK-100:       - Type:            EXPORT
-+# CHECK-100:           - Name:            __table_base
-+# CHECK-100-NEXT:        Kind:            GLOBAL
-+# CHECK-100-NEXT:        Index:           1
-diff --git a/wasm/Driver.cpp b/wasm/Driver.cpp
-index 84304881f5ca34e..c2f5f0185781f36 100644
---- a/wasm/Driver.cpp
-+++ b/wasm/Driver.cpp
-@@ -502,6 +502,7 @@ static void readConfigs(opt::InputArgList &args) {
- 
-   config->initialMemory = args::getInteger(args, OPT_initial_memory, 0);
-   config->globalBase = args::getInteger(args, OPT_global_base, 0);
-+  config->tableBase = args::getInteger(args, OPT_table_base, 0);
-   config->maxMemory = args::getInteger(args, OPT_max_memory, 0);
-   config->zStackSize =
-       args::getZOptionValue(args, OPT_z, "stack-size", WasmPageSize);
-@@ -573,6 +574,17 @@ static void setConfigs() {
-     if (config->exportTable)
-       error("-shared/-pie is incompatible with --export-table");
-     config->importTable = true;
-+  } else {
-+    // Default table base.  Defaults to 1, reserving 0 for the NULL function
-+    // pointer.
-+    if (!config->tableBase)
-+      config->tableBase = 1;
-+    // The default offset for static/global data, for when --global-base is
-+    // not specified on the command line.  The precise value of 1024 is
-+    // somewhat arbitrary, and pre-dates wasm-ld (Its the value that
-+    // emscripten used prior to wasm-ld).
-+    if (!config->globalBase && !config->relocatable && !config->stackFirst)
-+      config->globalBase = 1024;
-   }
- 
-   if (config->relocatable) {
-@@ -666,8 +678,11 @@ static void checkOptions(opt::InputArgList &args) {
-     warn("-Bsymbolic is only meaningful when combined with -shared");
-   }
- 
--  if (config->globalBase && config->isPic) {
--    error("--global-base may not be used with -shared/-pie");
-+  if (config->isPic) {
-+    if (config->globalBase)
-+      error("--global-base may not be used with -shared/-pie");
-+    if (config->tableBase)
-+      error("--table-base may not be used with -shared/-pie");
-   }
- }
- 
-diff --git a/wasm/Options.td b/wasm/Options.td
-index 50417d2928e0a34..bb764396bf4df14 100644
---- a/wasm/Options.td
-+++ b/wasm/Options.td
-@@ -191,7 +191,7 @@ def growable_table: FF<"growable-table">,
-   HelpText<"Remove maximum size from function table, allowing table to grow">;
- 
- def global_base: JJ<"global-base=">,
--  HelpText<"Where to start to place global data">;
-+  HelpText<"Memory offset at which to place global data (Defaults to 1024)">;
- 
- def import_memory: FF<"import-memory">,
-   HelpText<"Import the module's memory from the default module of \"env\" with the name \"memory\".">;
-@@ -224,6 +224,9 @@ def no_entry: FF<"no-entry">,
- def stack_first: FF<"stack-first">,
-   HelpText<"Place stack at start of linear memory rather than after data">;
- 
-+def table_base: JJ<"table-base=">,
-+  HelpText<"Table offset at which to place address taken functions (Defaults to 1)">;
-+
- defm whole_archive: B<"whole-archive",
-     "Force load of all members in a static library",
-     "Do not force load of all members in a static library (default)">;
-diff --git a/wasm/Writer.cpp b/wasm/Writer.cpp
-index f25d358dc5bae6f..0576bf2907e49c4 100644
---- a/wasm/Writer.cpp
-+++ b/wasm/Writer.cpp
-@@ -358,13 +358,6 @@ void Writer::layoutMemory() {
-       memoryPtr = config->globalBase;
-     }
-   } else {
--    if (!config->globalBase && !config->relocatable && !config->isPic) {
--      // The default offset for static/global data, for when --global-base is
--      // not specified on the command line.  The precise value of 1024 is
--      // somewhat arbitrary, and pre-dates wasm-ld (Its the value that
--      // emscripten used prior to wasm-ld).
--      config->globalBase = 1024;
--    }
-     memoryPtr = config->globalBase;
-   }
- 
-@@ -1685,7 +1678,6 @@ void Writer::run() {
-   // For PIC code the table base is assigned dynamically by the loader.
-   // For non-PIC, we start at 1 so that accessing table index 0 always traps.
-   if (!config->isPic) {
--    config->tableBase = 1;
-     if (WasmSym::definedTableBase)
-       WasmSym::definedTableBase->setVA(config->tableBase);
-     if (WasmSym::definedTableBase32)