Commit Graph

66 Commits

Author SHA1 Message Date
bjorn3
8a35cbaf0d Enable PIC in SimpleJITBuilder::new 2020-11-12 19:49:42 +01:00
bjorn3
86d3dc9510 Add prepare_for_function_redefine 2020-11-12 19:39:44 +01:00
bjorn3
03c0e7e678 Rustfmt 2020-11-12 18:58:40 +01:00
bjorn3
cdbbcf7e13 Add plt entries to perf jit map 2020-11-12 18:58:28 +01:00
bjorn3
bf9e5d9448 Use a PLT reference for function relocations in data objects
This ensures that all functions can be replaced without having to
perform relocations again.
2020-11-12 16:41:23 +01:00
bjorn3
8a4749af51 Immediately perform relocations when defining a function 2020-11-12 16:33:04 +01:00
bjorn3
5458473765 Implement PLT relocations for SimpleJIT 2020-11-12 16:19:16 +01:00
bjorn3
eaa2c5b3c2 Implement GOT relocations in SimpleJIT 2020-11-12 15:06:52 +01:00
bjorn3
11a3bdfc6a Catch overflows when performing relocations 2020-11-12 14:13:06 +01:00
bjorn3
b7a93c2321 Remove reloc_block
It isn't called and all reloc sinks either ignore it or panic when it is
called.
2020-11-11 12:36:17 +01:00
bjorn3
1dc27c93a4 Introduce DataDescription::all_relocs to dedup some code 2020-11-11 12:36:17 +01:00
bjorn3
a5501e12a6 Rename functions and data_objects fields 2020-11-11 11:56:41 +01:00
bjorn3
844a52e96a Don't unnecessarily take &self for some ModuleDeclarations methods 2020-11-11 11:43:09 +01:00
bjorn3
79f6f72e78 Remove StackMapSink from SimpleJIT
The stack maps are discarded anyway
2020-11-11 11:43:09 +01:00
bjorn3
ffe9de15fc Enable unreachable_pub lint 2020-11-11 11:43:09 +01:00
bjorn3
d5d5cba8b2 Remove SimpleJITProduct
All of it's methods now have an equivalent on SimpleJitModule
2020-11-11 11:43:02 +01:00
bjorn3
856f799ade Make some things more consistent between define_function and define_function_bytes 2020-11-11 11:38:28 +01:00
bjorn3
2ca2255a4a Move CompiledBlob to a new file 2020-11-11 11:38:28 +01:00
bjorn3
d0706e6f71 Merge finalize_function and perform_relocations 2020-11-11 11:38:28 +01:00
bjorn3
5df5bbbdca Fix usage of default_libcall_names (#2378)
* Fix usage of default_libcall_names

* Add basic cranelift-object test

It is based on a test with the same name in cranelift-simplejit
2020-11-09 10:33:56 -06:00
Andrew Brown
c9e8889d47 Update clippy annotation to use latest version (#2375) 2020-11-09 09:24:59 -06:00
Alex Crichton
8af2dbfbac Allow offloading compilation in cranelift-object (#2371)
This commit is a slight refactoring of the `Module` trait and backend in
`cranelift-object`. The goal is to enable parallelization of compilation
when using `cranelift-object`. Currently this is difficult because
`ObjectModule::define_function` requires `&mut self`. This instead
soups up the `define_function_bytes` interface to handle relocations so
compilation can happen externally before defining it in a `Module`. This
also means that `define_function` is now a convenience wrapper around
`define_function_bytes`.
2020-11-06 09:56:44 -06:00
bjorn3
cb2d180f2a Remove SimpleJIT prefix from some private types 2020-10-12 14:09:03 +02:00
bjorn3
69513ee85e Merge CompiledFunction and CompiledData 2020-10-12 14:02:37 +02:00
bjorn3
6b0d246b24 Implement Linkage::Preemptible for simplejit 2020-10-11 16:23:43 +02:00
bjorn3
589f4a4405 Re-introduce finalize_definitions and get_finalized_* for simplejit 2020-10-11 16:18:27 +02:00
bjorn3
2346fe7de6 Make some things private 2020-10-11 16:16:39 +02:00
bjorn3
b061694491 Rustfmt and update docs 2020-10-01 09:53:23 +02:00
bjorn3
d84ca235d2 Remove Backend trait and turn Module into a trait 2020-09-30 19:52:57 +02:00
bjorn3
84c6ec3214 Move alignment config from declare_data to define_data 2020-09-30 19:23:23 +02:00
bjorn3
b44c5bb2be Move ModuleDeclarations to backends 2020-09-30 18:33:29 +02:00
bjorn3
7a6e909efe Move a bit more logic out of Module 2020-09-30 17:31:08 +02:00
bjorn3
c2ffcdc6d0 Move logic out of more Module methods 2020-09-30 17:12:33 +02:00
bjorn3
80f4ecf9b5 Move almost all logic out of Module 2020-09-30 16:50:24 +02:00
bjorn3
588a4be0b3 Store Compiled* in the backend instead of Module 2020-09-30 16:18:57 +02:00
bjorn3
405b9e2875 Remove finalize_* from the Backend trait
Instead let the `finish` method perform finalization
2020-09-30 14:20:39 +02:00
bjorn3
59f95083b1 Remove write_data_funcaddr and write_data_dataaddr
They are unimplemented by all backends
2020-09-30 13:59:26 +02:00
bjorn3
7608749647 Merge finalize_definitions into finish 2020-09-30 13:58:13 +02:00
bjorn3
4483c3740a Remove get_finalized_* 2020-09-30 13:53:01 +02:00
bjorn3
b1187b5507 Merge ModuleNamespace and ModuleContents 2020-09-30 12:29:22 +02:00
Nick Fitzgerald
05bf9ea3f3 Rename "Stackmap" to "StackMap"
And "stackmap" to "stack_map".

This commit is purely mechanical.
2020-08-07 10:08:44 -07:00
Carlo Kok
0b613caad1 Address concerns in pullrequests. 2020-06-15 20:46:04 +02:00
Carlo Kok
04492983d2 Extra assertions and fix for SimpleJit. 2020-06-08 19:19:20 +02:00
Chris Fallin
b8e31d7c8e Fix build warnings (errors on CI) due to mmap flag rename and deprecation. 2020-06-03 09:48:22 -07:00
Chris Fallin
e39b4aba1c Fix long-range (non-colocated) aarch64 calls to not use Arm64Call reloc, and fix simplejit to use it.
Previously, every call was lowered on AArch64 to a `call` instruction, which
takes a signed 26-bit PC-relative offset. Including the 2-bit left shift, this
gives a range of +/- 128 MB. Longer-distance offsets would cause an impossible
relocation record to be emitted (or rather, a record that a more sophisticated
linker would fix up by inserting a shim/veneer).

This commit adds a notion of "relocation distance" in the MachInst backends,
and provides this information for every call target and symbol reference. The
intent is that backends on architectures like AArch64, where there are different
offset sizes / addressing strategies to choose from, can either emit a regular
call or a load-64-bit-constant / call-indirect sequence, as necessary. This
avoids the need to implement complex linking behavior.

The MachInst driver code provides this information based on the "colocated" bit
in the CLIF symbol references, which appears to have been designed for this
purpose, or at least a similar one. Combined with the `use_colocated_libcalls`
setting, this allows client code to ensure that library calls can link to
library code at any location in the address space.

Separately, the `simplejit` example did not handle `Arm64Call`; rather than doing
so, it appears all that is necessary to get its tests to pass is to set the
`use_colocated_libcalls` flag to false, to make use of the above change. This
fixes the `libcall_function` unit-test in this crate.
2020-05-05 09:55:12 -07:00
Benjamin Bouvier
f4c4a84b84 cranelift codegen: pass source locations with external relocations; 2020-04-07 11:52:39 +02:00
Nathan Froyd
dcabb55776 change Module::define_function to take TrapSink instances
Experience with the `define_function` API has shown that returning
borrowed slices of `TrapSite` is not ideal: the returned slice
represents a borrow on the entire `Module`, which makes calling back
into methods taking `&mut self` a bit tricky.

To eliminate the problem, let's require the callers of `define_function`
to provide `TrapSink` instances.  This style of API enables them to
control when and how traps are collected, and makes the `object` and
`faerie` backends simpler/more efficient by not having to worry about
trap collection.
2020-03-24 13:36:01 -04:00
Nathan Froyd
2bb3096342 change interfaces to use slices instead of Vec 2020-03-05 10:19:01 -05:00
Nathan Froyd
0f49a830c9 cranelift-module: expose trap information when defining functions
The current interface of `cranelift-module` requires consumers who want
to be informed about traps to discover that information through
`Module::Product`, which is backend-specific.  Since it's advantageous
to manipulate this information in a backend-agnostic way, this patch
changes `Module::define_function{,_bytes}` to return information about
the traps contained in the function being defined.
2020-03-03 11:37:15 -05:00
bjorn3
0a1bb3ba6c Add TLS support for ELF and MachO (#1174)
* Add TLS support
* Add binemit and legalize tests
* Spill all caller-saved registers when necessary
2020-02-25 17:50:04 -08:00