|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1 |
|
| #
86c90f9b |
| 16-Nov-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Add --unresolved-symbols=import-dynamic
This is a new mode for handling unresolved symbols that allows all symbols to be imported in the same that they would be in the case of `-f
[lld][WebAssembly] Add --unresolved-symbols=import-dynamic
This is a new mode for handling unresolved symbols that allows all symbols to be imported in the same that they would be in the case of `-fpie` or `-shared`, but generting an otherwise fixed/non-relocatable binary.
Code linked in this way should still be compiled with `-fPIC` so that data symbols can be resolved via imports.
This essentially allows the building of static binaries that have dynamic imports. See: https://github.com/emscripten-core/emscripten/issues/12682
As with other uses of the experimental dynamic linking ABI, this behaviour will produce a warning unless run with `--experimental-pic`.
Differential Revision: https://reviews.llvm.org/D91577
show more ...
|
| #
37f422f4 |
| 11-Feb-2022 |
Sam Clegg <[email protected]> |
[WebAssembly] Use GeneralDynamic TLS for exception handling builtins.
These global TLS symbols are shared across all shared libraries and therefor should not be assumed to be local to the current mo
[WebAssembly] Use GeneralDynamic TLS for exception handling builtins.
These global TLS symbols are shared across all shared libraries and therefor should not be assumed to be local to the current module.
Also add new error in the linker when TLS relocations are used against undefined symbols. TLS relocations are offsets into the current modules tls data segment, and don't make sense for undefined symbols which are modeled as global imports.
Fixes: https://github.com/emscripten-core/emscripten/issues/13398
Differential Revision: https://reviews.llvm.org/D119630
show more ...
|
| #
9f903475 |
| 27-Oct-2021 |
Nico Weber <[email protected]> |
fix comment typos to cycle bots
|
| #
9a9ec8e0 |
| 04-Oct-2021 |
Heejin Ahn <[email protected]> |
[lld][WebAssembly] Remove redundant check for undefined global (NFC)
Also does some refactoring.
Reviewed By: sbc100
Differential Revision: https://reviews.llvm.org/D111101
|
| #
ef8c9135 |
| 26-Aug-2021 |
Sam Clegg <[email protected]> |
[WebAssembly] Allow import and export of TLS symbols between DSOs
We previously had a limitation that TLS variables could not be exported (and therefore could also not be imported). This change rem
[WebAssembly] Allow import and export of TLS symbols between DSOs
We previously had a limitation that TLS variables could not be exported (and therefore could also not be imported). This change removed that limitation.
Differential Revision: https://reviews.llvm.org/D108877
show more ...
|
| #
44177e5f |
| 08-Sep-2021 |
Sam Clegg <[email protected]> |
[WebAssembly] Add explict TLS symbol flag
As before we maintain backwards compat with older object files by also infering the TLS flag based on the name of the segment.
This change is was split out
[WebAssembly] Add explict TLS symbol flag
As before we maintain backwards compat with older object files by also infering the TLS flag based on the name of the segment.
This change is was split out from https://reviews.llvm.org/D108877.
Differential Revision: https://reviews.llvm.org/D109426
show more ...
|
| #
d51f74ac |
| 20-Jul-2021 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Error on import of TLS symbols in shared libraries
In https://reviews.llvm.org/D102044 we made exporting a TLS symbol into an error, but we also want to error on import.
See http
[lld][WebAssembly] Error on import of TLS symbols in shared libraries
In https://reviews.llvm.org/D102044 we made exporting a TLS symbol into an error, but we also want to error on import.
See https://github.com/emscripten-core/emscripten/issues/14461
Differential Revision: https://reviews.llvm.org/D106385
show more ...
|
| #
670944fb |
| 15-Jul-2021 |
Wouter van Oortmerssen <[email protected]> |
[WebAssembly] Support R_WASM_MEMORY_ADDR_TLS_SLEB64 for wasm64
Also fixed TLS tests swapping addr & value in store op Differential Revision: https://reviews.llvm.org/D106096
|
| #
758633f9 |
| 27-May-2021 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Add new `--import-undefined` option
This change revisits https://reviews.llvm.org/D79248 which originally added support for the --unresolved-symbols flag.
At the time I thought i
[lld][WebAssembly] Add new `--import-undefined` option
This change revisits https://reviews.llvm.org/D79248 which originally added support for the --unresolved-symbols flag.
At the time I thought it would make sense to add a third option to this flag called `import-functions` but it turns out (as was suspects by on the reviewers IIRC) that this option can be authoganal.
Instead I've added a new option called `--import-undefined` that only operates on symbols that can be imported (for example, function symbols can always be imported as opposed to data symbols we can only be imported when compiling with PIC).
This option gives us the full expresivitiy that emscripten needs to be able allow reporting of undefined data symbols as well as the option to disable that.
This change does remove the `--unresolved-symbols=import-functions` option, which is been in the codebase now for about a year but I would be extremely surprised if anyone was using it.
Differential Revision: https://reviews.llvm.org/D103290
show more ...
|
| #
8544b40b |
| 21-May-2021 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Fix for PIC output + TLS + non-shared-memory
Prior to this change build with `-shared/-pie` and using TLS (but without -shared-memory) would hit this assert:
"Currenly only a s
[lld][WebAssembly] Fix for PIC output + TLS + non-shared-memory
Prior to this change build with `-shared/-pie` and using TLS (but without -shared-memory) would hit this assert:
"Currenly only a single data segment is supported in PIC mode"
This is because we were not including TLS data when merging data segments. However, when we build without shared-memory (i.e. without threads) we effectively lower away TLS into a normal active data segment.. so we were ending up with two active data segments: the merged data, and the lowered TLS data.
To fix this problem we can instead avoid combining data segments at all when running in shared memory mode (because in this case all segment initialization is passive). And then in non-shared memory mode we know that TLS has been lowered and therefore we can can and should combine all segments.
So with this new behavior we have two different modes:
1. With shared memory / mutli-threaded: Never combine data segments since it is not necessary. (All data segments as passive already).
2. Wihout shared memory / single-threaded: Combine *all* data segments since we treat TLS as normal data. (We end up with a single active data segment).
Differential Revision: https://reviews.llvm.org/D102937
show more ...
|
| #
3a293cbf |
| 22-Apr-2021 |
Wouter van Oortmerssen <[email protected]> |
[WebAssembly] Fix PIC/GOT codegen for wasm64
__table_base is know 64-bit, since in LLVM it represents a function pointer offset __table_base32 is a copy in wasm32 for use in elem init expr, since no
[WebAssembly] Fix PIC/GOT codegen for wasm64
__table_base is know 64-bit, since in LLVM it represents a function pointer offset __table_base32 is a copy in wasm32 for use in elem init expr, since no truncation may be used there. New reloc R_WASM_TABLE_INDEX_REL_SLEB64 added
Differential Revision: https://reviews.llvm.org/D101784
show more ...
|
| #
bda8b848 |
| 07-May-2021 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Disallow exporting of TLS symbols
Cross module TLS is currently not supported by our ABI. This change makes explicitly exporting a TLS symbol into an error and prevents implicit
[lld][WebAssembly] Disallow exporting of TLS symbols
Cross module TLS is currently not supported by our ABI. This change makes explicitly exporting a TLS symbol into an error and prevents implicit exporting (via --export-all).
See https://github.com/emscripten-core/emscripten/issues/14120
Differential Revision: https://reviews.llvm.org/D102044
show more ...
|
| #
808fcdda |
| 01-May-2021 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Fix crash with `-pie` without `--allow-undefined`
`shouldImport` was not returning true in PIC mode even though out assumption elsewhere (in Relocations.cpp:scanRelocations) is th
[lld][WebAssembly] Fix crash with `-pie` without `--allow-undefined`
`shouldImport` was not returning true in PIC mode even though out assumption elsewhere (in Relocations.cpp:scanRelocations) is that we don't report undefined symbols in PIC mode today. This was resulting functions that were undefined and but also not imported which hits an assert later on that all functions have valid indexes.
Differential Revision: https://reviews.llvm.org/D101716
show more ...
|
| #
48ddf5e1 |
| 23-Nov-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Ensure stub symbols always get address 0
Without this extra flag we can't distingish between stub functions and functions that happen to have address 0 (relative to __table_base).
[lld][WebAssembly] Ensure stub symbols always get address 0
Without this extra flag we can't distingish between stub functions and functions that happen to have address 0 (relative to __table_base).
Adding this flag bit the base symbol class actually avoids growing the SymbolUnion struct which would not be true if we added it to the FunctionSymbol subclass (due to bitbacking).
The previous approach of setting it's table index to zero worked for normal static relocations but not for `-fPIC` code.
See https://github.com/emscripten-core/emscripten/issues/12819
Differential Revision: https://reviews.llvm.org/D92038
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3, llvmorg-11.0.0-rc2, llvmorg-11.0.0-rc1, llvmorg-12-init, llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2, llvmorg-10.0.1-rc1 |
|
| #
206884bf |
| 01-May-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Implement --unresolved-symbols
This is a more full featured version of ``--allow-undefined``. The semantics of the different methods are as follows:
report-all:
Report all un
[lld][WebAssembly] Implement --unresolved-symbols
This is a more full featured version of ``--allow-undefined``. The semantics of the different methods are as follows:
report-all:
Report all unresolved symbols. This is the default. Normally the linker will generate an error message for each reported unresolved symbol but the option ``--warn-unresolved-symbols`` can change this to a warning.
ignore-all:
Resolve all undefined symbols to zero. For data and function addresses this is trivial. For direct function calls, the linker will generate a trapping stub function in place of the undefined function.
import-functions:
Generate WebAssembly imports for any undefined functions. Undefined data symbols are resolved to zero as in `ignore-all`. This corresponds to the legacy ``--allow-undefined`` flag.
The plan is to followup with a new mode called `import-dynamic` which allows for statically linked binaries to refer to both data and functions symbols from the embedder.
Differential Revision: https://reviews.llvm.org/D79248
show more ...
|
| #
a28a4662 |
| 11-Nov-2020 |
Sam Clegg <[email protected]> |
[WebAssembly] Add new relocation type for TLS data symbols
These relocations represent offsets from the __tls_base symbol.
Previously we were just using normal MEMORY_ADDR relocations and relying o
[WebAssembly] Add new relocation type for TLS data symbols
These relocations represent offsets from the __tls_base symbol.
Previously we were just using normal MEMORY_ADDR relocations and relying on the linker to select a segment-offset rather and absolute value in Symbol::getVirtualAddress(). Using an explicit relocation type allows allow us to clearly distinguish absolute from relative relocations based on the relocation information alone.
One place this is useful is being able to reject absolute relocation in the PIC case, but still accept TLS relocations.
Differential Revision: https://reviews.llvm.org/D91276
show more ...
|
| #
2513407d |
| 07-Oct-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Add support for -Bsymbolic flag
This flag works in a similar way to the ELF linker in that it will resolve any defined symbols to their local definition with a shared library or -
[lld][WebAssembly] Add support for -Bsymbolic flag
This flag works in a similar way to the ELF linker in that it will resolve any defined symbols to their local definition with a shared library or -pie executable.
This flag has no effect on static linking.
Differential Revision: https://reviews.llvm.org/D89152
show more ...
|
| #
2c12b056 |
| 15-Sep-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Allow globals imports via import_name/import_module
This feature already exists but was limited to function symbols.
Differential Revision: https://reviews.llvm.org/D87666
|
| #
cc1b9b68 |
| 10-Jul-2020 |
Wouter van Oortmerssen <[email protected]> |
[WebAssembly] 64-bit (function) pointer fixes.
Accounting for the fact that Wasm function indices are 32-bit, but in wasm64 we want uniform 64-bit pointers. Includes reloc types for 64-bit table ind
[WebAssembly] 64-bit (function) pointer fixes.
Accounting for the fact that Wasm function indices are 32-bit, but in wasm64 we want uniform 64-bit pointers. Includes reloc types for 64-bit table indices.
Differential Revision: https://reviews.llvm.org/D83729
show more ...
|
| #
3b29376e |
| 05-Jun-2020 |
Wouter van Oortmerssen <[email protected]> |
[WebAssembly] Adding 64-bit version of R_WASM_MEMORY_ADDR_* relocs
This adds 4 new reloc types.
A lot of code that previously assumed any memory or offset values could be contained in a uint32_t (a
[WebAssembly] Adding 64-bit version of R_WASM_MEMORY_ADDR_* relocs
This adds 4 new reloc types.
A lot of code that previously assumed any memory or offset values could be contained in a uint32_t (and often truncated results from functions returning 64-bit values) have been upgraded to uint64_t. This is not comprehensive: it is only the values that come in contact with the new relocation values and their dependents.
A new tablegen mapping was added to automatically upgrade loads/stores in the assembler, which otherwise has no way to select for these instructions (since they are indentical other than for the offset immediate). It follows a similar technique to https://reviews.llvm.org/D53307
Differential Revision: https://reviews.llvm.org/D81704
show more ...
|
| #
f03b6e78 |
| 01-May-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Honor --allow-undefined for data symbols too
This was originally the way this worked before before https://reviews.llvm.org/D60882.
In retrospect it seems inconsistent that `--al
[lld][WebAssembly] Honor --allow-undefined for data symbols too
This was originally the way this worked before before https://reviews.llvm.org/D60882.
In retrospect it seems inconsistent that `--allow-undefined` doesn't work for all symbols. See: https://groups.google.com/g/emscripten-discuss/c/HSRgQiIq1gI/m/Kt9oFWHiAwAJ
I'm also planning a followup change which implement the full `--unresolved-symbols=..` flags supported by ELF linkers (both ld and ld.lld) since it seems more standard.
Differential Revision: https://reviews.llvm.org/D79247
show more ...
|
|
Revision tags: llvmorg-10.0.0, llvmorg-10.0.0-rc6 |
|
| #
48139ebc |
| 20-Mar-2020 |
Wouter van Oortmerssen <[email protected]> |
[WebAssembly] Add int32 DW_OP_WASM_location variant
This to allow us to add reloctable global indices as a symbol. Also adds R_WASM_GLOBAL_INDEX_I32 relocation type to support it.
See discussion in
[WebAssembly] Add int32 DW_OP_WASM_location variant
This to allow us to add reloctable global indices as a symbol. Also adds R_WASM_GLOBAL_INDEX_I32 relocation type to support it.
See discussion in https://github.com/WebAssembly/debugging/issues/12
show more ...
|
|
Revision tags: llvmorg-10.0.0-rc5, llvmorg-10.0.0-rc4, llvmorg-10.0.0-rc3 |
|
| #
06f1a5c9 |
| 20-Feb-2020 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Allow symbols with explict import names to be undefined at link time.
Differential Revision: https://reviews.llvm.org/D74110
|
|
Revision tags: llvmorg-10.0.0-rc2, llvmorg-10.0.0-rc1, llvmorg-11-init, llvmorg-9.0.1, llvmorg-9.0.1-rc3, llvmorg-9.0.1-rc2, llvmorg-9.0.1-rc1 |
|
| #
33c59abf |
| 10-Oct-2019 |
Fangrui Song <[email protected]> |
[WebAssembly] Wrap definitions in namespace lld { namespace wasm {. NFC
Similar to D68323, but for wasm.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D68759
llvm-svn: 374279
|
| #
937b9558 |
| 24-Sep-2019 |
Sam Clegg <[email protected]> |
[lld][WebAssembly] Fix static linking of -fPIC code with external undefined functions
Differential Revision: https://reviews.llvm.org/D66784
llvm-svn: 372779
|