666 Commits

Author SHA1 Message Date
Lang Hames
2ec1aba2b6 [llvm-jitlink] Discard allocation actions in -noexec mode.
Allocation actions may run JIT'd code, which isn't permitted in -noexec mode.

Testcases that depend on actions running should be moved to the ORC runtime.
2023-02-17 20:18:23 -08:00
Moritz Sichert
cb19b83baa [RuntimeDyld][ELF] Fixed relocations referencing undefined TLS symbols
The classification of TLS symbols in ELF was changed from ST_Data to
ST_Other in the following commit:
018a484cd26d72fb4c9e7fd75e5f5bc7838dfc73

RuntimeDyldELF::processRelocationRef() needs to be updated to also
handle ST_Other symbols so that it handles TLS relocations correctly.
The current tests did not fail because we have a shortcut for global
symbols that are already defined.

Differential Revision: https://reviews.llvm.org/D143568
2023-02-08 17:49:53 +01:00
Jonas Hahnfeld
50ca8b3e87 [ORC] Drop Comdat when discarding IR symbol
According to the IR verifier, "Declaration[s] may not be in a Comdat!"

This is a re-commit of 76b3f0b4d5a0b8c54147c4c73a30892bbca76467 and
87d7838202267a011639fcbf97263556ccf091dc with updates to the test:
 * Force emission of the extra-module, to trigger the bug after D138264,
   by providing a second symbol @g, and making the comdat nodeduplicate.
   (Technically only one is needed, but two should be safer.)
 * Name the comdat $f to avoid failure on Windows:
   LLVM ERROR: Associative COMDAT symbol 'c' does not exist.
 * Mark the test as UNSUPPORTED on macOS, MachO doesn't support COMDATs.

Differential Revision: https://reviews.llvm.org/D142443
2023-02-05 10:53:36 +01:00
Jonas Hahnfeld
76d94d3eed Revert "[ORC] Drop Comdat when discarding IR symbol"
A number of AArch64 bots report errors in clang-repl, for example
https://lab.llvm.org/buildbot/#/builders/197/builds/3920

This reverts commit 87d7838202267a011639fcbf97263556ccf091dc.
2023-02-04 21:26:36 +01:00
Lang Hames
7e528d4689 [ORC] Make weak-comdat.ll testcase UNSUPPORTED on Darwin, rather than XFAIL. 2023-02-03 12:04:06 -08:00
Jonas Hahnfeld
de7e9ebe46 [Orc] XFAIL test with Comdats on macOS
The bots report:
LLVM ERROR: MachO doesn't support COMDATs, 'f' cannot be lowered.
2023-02-03 16:33:57 +01:00
Jonas Hahnfeld
87d7838202 [ORC] Drop Comdat when discarding IR symbol
According to the IR verifier, "Declaration[s] may not be in a Comdat!"

This is a re-commit of 76b3f0b4d5a0b8c54147c4c73a30892bbca76467 with
updates to the test:
 * Force emission of the extra-module, to trigger the bug after D138264,
   by providing a second symbol @g, and making the comdat nodeduplicate.
   (Technically only one is needed, but two should be safer.)
 * Name the comdat $f to avoid failure on Windows:
   LLVM ERROR: Associative COMDAT symbol 'c' does not exist.

Differential Revision: https://reviews.llvm.org/D142443
2023-02-03 11:16:19 +01:00
Jonas Hahnfeld
e5dd58e3a6 Revert "[ORC] Drop Comdat when discarding IR symbol"
Failure on Windows:
LLVM ERROR: Associative COMDAT symbol 'c' does not exist.

This reverts commit 76b3f0b4d5a0b8c54147c4c73a30892bbca76467 while
I investigate the problem and a solution that still triggers the
original problem.
2023-02-03 10:04:38 +01:00
Jonas Hahnfeld
76b3f0b4d5 [ORC] Drop Comdat when discarding IR symbol
According to the IR verifier, "Declaration[s] may not be in a Comdat!"

Differential Revision: https://reviews.llvm.org/D142443
2023-02-03 08:41:58 +01:00
wanglei
f2d52c0531 [ExecutionEngine] Enable ExecutionEngine regression tests on LoongArch
This patch also sets `UNSUPPORTED` on some tests which need `mcjit` and
`emulated tls` support.

Depends on D142950

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D142954
2023-02-02 11:16:18 +08:00
Kshitij Jain
51a52a0e9c [JITLink] Fixes a bug in one of the test files which was causing build failures
Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D142856
2023-01-30 01:56:00 +00:00
Kshitij Jain
cd9fd4255b [JITLink] Adds support for PLT based relocations to the ELF/i386 JITLink backend
This commit adds support for PLT based relocations. Specifically -
1. It adds logic to create a `PLTTableManager` in the `buildTables_ELF_i386`
function, which is called as part of the post-prune JITLink passes. The `PLTTableManager`
handles creating pointer jump stubs and related GOT entries for position independent
code.

2. It also adds a pre-fixup pass to optimize away PLT based calls in position independent
code, when possible.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D142846
2023-01-30 01:15:34 +00:00
Lang Hames
2667be0eb8 [JITLink][MachO] Error on N_EXT symbols with illegal string-table index 0.
Index 0 is reserved for anonymous symbols, which can't have the N_EXT bit
set (since N_EXT means non-local scope, and non-local scope requires a name).
2023-01-28 19:58:27 -08:00
Vassil Vassilev
38ef56880a Teach RuntimeDyld about COFF weak references and to consider comdat symbols weak.
Patch by Lang Hames and Sunho Kim!

Differential revision: https://reviews.llvm.org/D138264
2023-01-24 18:25:49 +00:00
wanglei
f10d452db8 Reland "[JITLink] Add an initial implementation of JITLink for ELF/LoongArch"
This implementation supports basic relocation types and adds EHFrame,
Got/Plt handling passes.
This patch also enables JIT support for LoongArch64.

With this patch, I successfully run hello.ll and simple_throw.ll
(which is generated from test-suite/SingleSource/Regression/C++/EH/simple_throw.cpp)
using the `lli` command with options `--jit-kind=orc --jit-linker=jitlink`.

Note: `hasJIT` property of LoongArch32 remains false as there is no
validation environment.

New changes: Since LoongArch does not support RuntimeDyld, JITLink is set
by default.  Add a null-terminator to eh-frame sections. This should fix
the test failure on LoongArch bot.
(https://lab.llvm.org/staging/#/builders/236/builds/896)

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D141036
2023-01-18 20:49:20 +08:00
wanglei
48c2172e51 Revert "[JITLink] Add an initial implementation of JITLink for ELF/LoongArch"
This reverts commit 28b6f38d0a841451af7b4893368543382dd5e630.

This breaks on LoongArch64 bot.
https://lab.llvm.org/staging/#/builders/236/builds/896
2023-01-18 16:53:37 +08:00
wanglei
28b6f38d0a [JITLink] Add an initial implementation of JITLink for ELF/LoongArch
This implementation supports basic relocation types and adds EHFrame,
Got/Plt handling passes.
This patch also enables JIT support for LoongArch64.

With this patch, I successfully run hello.ll and simple_throw.ll
(which is generated from test-suite/SingleSource/Regression/C++/EH/simple_throw.cpp)
using the `lli` command with options `--jit-kind=orc --jit-linker=jitlink`.

Note: `hasJIT` property of LoongArch32 remains false as there is no
validation environment.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D141036
2023-01-18 14:29:45 +08:00
Jonas Hahnfeld
c8d43dca23 [JITLink][RISCV] Add R_RISCV_RVC_BRANCH and R_RISCV_RVC_JUMP
These are the compressed equivalents of the relocations R_RISCV_BRANCH
and R_RISCV_JAL with slightly more complex immediate handling.

Differential Revision: https://reviews.llvm.org/D140827
2023-01-04 13:51:15 +01:00
Muhammad Omair Javaid
cd8b36190d [llvm] XFAIL X86 tests failing on AArch64/Windows
coff-alignment.ll and merge-equivalent-ranges.ll depend on X86 target.
This patch marks them as XFAIL for AArch64/Windows target.
2023-01-03 16:52:29 +04:00
Kshitij Jain
1b123d9fb5 Adds support for GOT relocations to i386/ELF backend
This CR adds support for GOT relocations to the JITLink i386/ELF backend.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D140279
2022-12-25 02:06:24 +00:00
Kshitij Jain
03ed35b111 Updates and adds tests for i386/ELF JITLink backend
This CR modifies the existing 32 bit pcrel relocation test to
include the case when the relocation target might be present at
a smaller address than the address of the location that needs to be
patched.

Additionally, it adds a test for 16 bit absolute relocation.

Reviewed By: sunho

Differential Revision: https://reviews.llvm.org/D138372
2022-12-25 02:06:09 +00:00
Paul Robinson
a1b4e13cff [llvm] Convert tests to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
2022-12-15 14:40:26 -08:00
Paul Robinson
7e4218bfce [MCJIT] Convert tests to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
2022-12-15 14:08:36 -08:00
Dmitry Kurtaev
a2c9f12dd6 [RISCV][JitLink] Propagate error from Expected<T> result during R_RISCV_PCREL_HI20 parsing
related issue: https://github.com/llvm/llvm-project/issues/59139

Differential Revision: https://reviews.llvm.org/D138781
2022-12-07 08:26:38 -08:00
Paul Robinson
99212b945a [Mips,i686,others] Convert tests to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
2022-12-06 15:13:32 -08:00
Paul Robinson
fe21126112 [Windows] Convert tests to check 'target=...'
Part of the project to eliminate special handling for triples in lit
expressions.
2022-12-06 13:15:48 -08:00
Paul Robinson
26e50c4c4d [ARM/Darwin] Convert tests to check 'target='
Part of the project to eliminate special handling for triples in lit
expressions.
2022-12-06 06:58:39 -08:00
Matt Arsenault
2d56d8c4e8 ExecutionEngine: Convert tests to opaque pointers 2022-12-05 11:12:17 -05:00
Paul Robinson
284b77f177 [Windows] Convert llvm/test/ExecutionEngine/MCJIT/remote tests to check 'target=<triple>'
Part of the project to eliminate special handling for triples in lit
expressions.
2022-11-29 12:25:16 -08:00
luxufan
f8979512ea [JITLink][RISCV] Add R_RISCV_LO12_S relocation support
Fixes: https://github.com/llvm/llvm-project/issues/58979

Reviewed By: Hahnfeld

Differential Revision: https://reviews.llvm.org/D138030
2022-11-16 19:50:18 +08:00
Stefan Gränitz
dc9854d4e9 [JITLink] Fix check-line in Windows X86 COFF COMDAT test
This test caught my attention because it's the only one in JITLink that XFAILs. Running it in isolation showed that the output doesn't meet the CHECK-LINES, i.e. the block address didn't match:

```
error: CHECK-NEXT: expected string not found in input
  CHECK-NEXT: block 0xfff02000 size = 0x00000001, align = 16, alignment-offset = 0

<stdin>:22:2: note: possible intended match here
              block 0xfff01000 size = 0x00000001, align = 16, alignment-offset = 0
```

Though, that doesn't appear to be the reason the test XFAILs. What we really want to check here is that llvm-jitlink doesn't fail with a duplicate section error yet.
In order to avoid issues like this in the future we can match a placeholder to check for some valid address within the slab (64Kb == last 4 digits).

The patch also drops the duplicate -noexec argument, removes an empty RUN-line, fixes indentation and adds a newline at EOF.

Reviewed By: sunho

Differential Revision: https://reviews.llvm.org/D137148
2022-11-03 15:07:20 +01:00
Moritz Sichert
9c05b7c06f [RuntimeDyld] Require x86_64-linux for IFUNC test
This test was introduced by a667aa4de041816cb4865bce8f523228f2332ffa. It
assumes that it runs on x86_64 on linux, so require that for the test.
2022-11-02 12:10:59 +01:00
Moritz Sichert
a667aa4de0 [RuntimeDyld] Added support for relocation of indirect functions
In ELF, symbols of type STT_GNU_IFUNC need to be resolved by calling the
function at the symbol's address. This is implemented by adding special
stubs for all symbols of that type.

Differential Revision: https://reviews.llvm.org/D105465
2022-11-02 10:46:11 +01:00
Paul Robinson
295500d57b [lit] Remove undefined keyword from an MCJIT test
Changed 'XFAIL: mcjit-ia32' to 'XFAIL: i686 && windows' because the
'mcjit-ia32 feature isn't defined anywhere, or used anywhere else.

I found this as part of other work to clean up lit keywords, so
I figured I would go ahead and fix it.  Verified by hacking my
lit.site.cfg.py so host_triple = target_triple = "i686-pc-windows-msvc"
and the test correctly reported XFAIL, while "i686-pc-linux" passes.
2022-10-31 10:51:29 -07:00
Kshitij Jain
2a3b257a93 [JITLink][i386] Adds absolute and pc relative relocation support for ELF/i386.
This commit adds support for 32 bit absolute and pc relative relocations in
ELF/i386 objects, along with simple regression tests.

Reviewed By: sgraenitz, lhames

Differential Revision: https://reviews.llvm.org/D135523
2022-10-30 17:35:41 -07:00
WANG Xuerui
48aea4a36a [test][LoongArch] Mark old JIT ExecutionEngine tests as unsupported
The old MCJIT won't be accepting new architectures so it can only be
appropriate to add ourselves to the exclude list.

Differential Revision: https://reviews.llvm.org/D134367
2022-10-13 19:30:20 +08:00
Lang Hames
23dda2899e [ExecutionEngine] Enable ExecutionEngine regression tests on AArch64. 2022-10-04 13:39:26 -07:00
Lang Hames
ffe2dda29f [ORC][JITLink] Retain Weak flags in JITDylib interfaces, propagate to LinkGraph.
Previously we stripped Weak flags from JITDylib symbol table entries once they
were resolved (there was no particularly good reason for this). Now we want to
retain them and query them when setting the Linkage on external symbols in
LinkGraphs during symbol resolution (this was the motivation for 75404e9ef88).
Making weak linkage of external definitions discoverable in the LinkGraph will
in turn allow future plugins to implement correct handling for them (by
recording locations that depend on exported weak definitions and pointing all
of these at one chosen definition at runtime).
2022-09-27 10:04:59 -07:00
Fangrui Song
ab1c259613 [RISCV] Assemble call foo to R_RISCV_CALL_PLT
R_RISCV_CALL/R_RISCV_CALL_PLT distinction isn't necessary. R_RISCV_CALL has been
deprecated as a resolution to
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/98 .

ld.lld and mold treat the two relocation types the same. GNU ld has a custom
handling for undefined weak functions which is unnecessary: calling an
unresolved undefined weak function is UB and GNU ld can handle the case without
a relocation error (such a function call is usually guarded by a zero value
check and should be allowed).

This patch assembles `call foo` to use R_RISCV_CALL_PLT instead of the
deprecated R_RISCV_CALL.

Note: the code generator still differentiates `call foo` and (maybe preemptible)
`call foo@plt`, but the difference is purely aesthetic.

Note: D105429 does not support R_RISCV_CALL_PLT correctly. Changed the test to
force R_RISCV_CALL for now.

Reviewed By: kito-cheng

Differential Revision: https://reviews.llvm.org/D132530
2022-09-13 18:47:55 -07:00
sunho
bc24e6ab7c [JITLink][COFF] Use DLLImportDefinitionGenerator for creating PLT stubs.
Uses DLLImportDefinitionGenerator for creating PLT stubs. It removes previous approach for dllimport stub creation which can't deal with jump thunks.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D132524
2022-09-10 15:25:44 +09:00
Lang Hames
c2786683ca [JITLink][MachO] Add support for non-subsections-via-symbols objects.
This patch updates MachOLinkGraphBuilder to honor the MH_SUBSECTIONS_VIA_SYMBOLS
flag. Prior to this patch we assumed MH_SUBSECTIONS_VIA_SYMBOLS, but never
checked the flag.

If MH_SUBSECTIONS_VIA_SYMBOLS is set (the default for MachO output on modern
compilers) then MachOLinkGraphBuilder will break MachO section content into
jitlink::Blocks on symbol boundaries. (This is how JITLink has always handled
MachO sections previously).

If MH_SUBSECTIONS_VIA_SYMBOLS is not set then MachOLinkGraphBuilder will create
a single jitlink::Block for each MachO section.

Existing hand-written testcases that were _not_ using the
.subsections_via_symbols directive are updated to use it. A new testcase for
non-subsections-via-symbols behavior is included.
2022-08-17 15:55:42 -07:00
Kshitij Jain
29fe204b4e Re-apply "[JITLink] Introduce ELF/i386 backend " with correct authorship.
I (lhames) accidentally pushed 5f300397c6ae8fa7ca3547ec2b7a3cd844f3ed59 on
Kshitij Jain's behalf without updating the patch author first (my apologies
Kshitij!).

Re-applying with correct authorship.

https://reviews.llvm.org/D131347
2022-08-15 18:44:43 -07:00
Lang Hames
73600b7c8a Revert "[JITLink] Introduce ELF/i386 backend support for JITLink."
This reverts commit 5f300397c6ae8fa7ca3547ec2b7a3cd844f3ed59.

No functional issues, I just failed to correctly set authorship on the patch.
2022-08-15 18:44:43 -07:00
Lang Hames
5f300397c6 [JITLink] Introduce ELF/i386 backend support for JITLink.
This initial ELF/i386 JITLink backend enables JIT-linking of minimal ELF i386
object files. No relocations are supported yet.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D131347
2022-08-15 18:35:51 -07:00
Sunho Kim
5cf0082ae3 [JITLink][COFF][x86_64] Implement SECTION/SECREL relocation.
Implements SECTION/SECREL relocation. These are used by debug info (pdb) data.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D130275
2022-08-11 15:12:24 +09:00
Lang Hames
4229d2788b [JITLink] Add tests for FDEs with bad CIE and PC-begin pointers. 2022-08-03 17:51:45 -07:00
Sunho Kim
b501770aef [JITLink][COFF] Handle COMDAT symbol with offset.
Handles COMDAT symbol with an offset and refactor the code to only generated symbol if the second symbol was encountered. This happens very infrequently but happens in recursive_mutex implementation of MSVC STL library.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D130454
2022-07-31 09:09:48 +09:00
Sunho Kim
d86f903b1d [JITLink][COFF][x86_64] Implement remaining IMAGE_REL_AMD64_REL32_*.
Implements remaining IMAGE_REL_AMD64_REL32_*. We only need IMAGE_REL_AMD64_REL32_4 for now but doing all remaining ones for completeness. (clang only uses IMAGE_REL_AMD64_REL32_1 and IMAGE_REL_AMD64_REL32)

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D130452
2022-07-31 09:03:28 +09:00
Sunho Kim
88181375a3 [JITLink][COFF] Implement include/alternatename linker directive.
Implements include/alternatename linker directive. Alternatename is used by static msvc runtime library. Alias symbol is technically incorrect (we have to search for external definition) but we don't have a way to represent this in jitlink/orc yet, this is solved in the following up patch.

Inlcude linker directive is used in ucrt to forcelly lookup the static initializer symbols so that they will be emitted. It's implemented as extenral symbols with live flag on that cause the lookup of these symbols.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D130276
2022-07-31 07:49:59 +09:00
Sunho Kim
e590f945c6 Revert "[JITLink][COFF] Implement include/alternatename linker directive."
This reverts commit f1fcd06a2a29fc534cb9f365cb4a01559f3378ce.

Faliures reported in
https://lab.llvm.org/buildbot/#/builders/193/builds/16143 and http://lab.llvm.org/buildbot/#/builders/91/builds/13010
2022-07-29 17:03:19 +09:00