307 Commits

Author SHA1 Message Date
Antoni Boucher
5f630f3c81 Cleanup regarding handling of recursive types 2022-07-23 20:37:55 -04:00
Ramon de C Valle
bfe3c24e9a Add fine-grained LLVM CFI support to the Rust compiler
This commit improves the LLVM Control Flow Integrity (CFI) support in
the Rust compiler by providing forward-edge control flow protection for
Rust-compiled code only by aggregating function pointers in groups
identified by their return and parameter types.

Forward-edge control flow protection for C or C++ and Rust -compiled
code "mixed binaries" (i.e., for when C or C++ and Rust -compiled code
share the same virtual address space) will be provided in later work as
part of this project by identifying C char and integer type uses at the
time types are encoded (see Type metadata in the design document in the
tracking issue #89653).

LLVM CFI can be enabled with -Zsanitizer=cfi and requires LTO (i.e.,
-Clto).
2022-07-23 10:51:34 -07:00
Daniel Paoliello
fef3b3e27d Enable raw-dylib for binaries 2022-07-22 09:55:14 -07:00
bors
e5e7395cca Auto merge of #99420 - RalfJung:vtable, r=oli-obk
make vtable pointers entirely opaque

This implements the scheme discussed in https://github.com/rust-lang/unsafe-code-guidelines/issues/338: vtable pointers should be considered entirely opaque and not even readable by Rust code, similar to function pointers.

- We have a new kind of `GlobalAlloc` that symbolically refers to a vtable.
- Miri uses that kind of allocation when generating a vtable.
- The codegen backends, upon encountering such an allocation, call `vtable_allocation` to obtain an actually dataful allocation for this vtable.
- We need new intrinsics to obtain the size and align from a vtable (for some `ptr::metadata` APIs), since direct accesses are UB now.

I had to touch quite a bit of code that I am not very familiar with, so some of this might not make much sense...
r? `@oli-obk`
2022-07-22 01:33:49 +00:00
Ralf Jung
59d223d1ed slightly cleaner, if more verbose, vtable handling in codegen backends 2022-07-20 17:12:07 -04:00
Ralf Jung
3f24eb870d consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable) 2022-07-20 17:12:07 -04:00
Ralf Jung
8f290184d2 add a Vtable kind of symbolic allocations 2022-07-20 16:57:31 -04:00
Michael Woerister
4f118ce102 Remove unused StableMap and StableSet types from rustc_data_structures 2022-07-20 13:11:39 +02:00
Joshua Nelson
bca7b0279f Rename debugging_opts to unstable_opts
This is no longer used only for debugging options (e.g. `-Zoutput-width`, `-Zallow-features`).
Rename it to be more clear.
2022-07-13 17:47:06 -05:00
Dylan DPC
6bcab05690 Rollup merge of #99155 - Amanieu:unstable-target-features, r=davidtwco
Keep unstable target features for asm feature checking

Inline assembly uses the target features to determine which registers
are available on the current target. However it needs to be able to
access unstable target features for this.

Fixes #99071
2022-07-13 19:32:36 +05:30
Amanieu d'Antras
c98d66cabf Keep unstable target features for asm feature checking
Inline assembly uses the target features to determine which registers
are available on the current target. However it needs to be able to
access unstable target features for this.

Fixes #99071
2022-07-11 14:26:58 +01:00
Ralf Jung
33e8d4c2d4 fix cranelift and gcc backends 2022-07-09 07:27:29 -04:00
bors
4587677300 Auto merge of #98638 - bjorn3:less_string_interning, r=tmiasko
Use less string interning

This removes string interning in a couple of places where doing so won't result in perf improvements. I also switched one place to use pre-interned symbols.
2022-07-08 10:03:27 +00:00
Antoni Boucher
5f4777e55d Add name in TODO 2022-07-06 23:12:28 -04:00
Antoni Boucher
b14b440f3a Format 2022-07-06 15:24:53 -04:00
Antoni Boucher
fea51f391e Fix warnings 2022-07-06 15:24:53 -04:00
Antoni Boucher
9db55d2f54 Fix vector comparison now returning a vector of integers 2022-07-06 15:24:53 -04:00
Antoni Boucher
6205f1a0c5 Reenable target flags 2022-07-06 15:24:53 -04:00
Antoni Boucher
1c4ca283df Support #[target(enable)] function attribute 2022-07-06 15:24:53 -04:00
Antoni Boucher
4094923789 Disable avx512 2022-07-06 15:24:53 -04:00
Antoni Boucher
910ec42566 Fixes to make stdarch tests compile 2022-07-06 15:24:53 -04:00
Antoni Boucher
1777cdd644 Add antoyo in TODOs 2022-07-06 15:24:53 -04:00
Alan Egerton
97b7dc2912 Update TypeVisitor paths 2022-07-06 06:41:53 +01:00
Antoni Boucher
9edaf82a03 Add comment 2022-06-29 21:03:45 -04:00
bjorn3
c0ec18bd0d Avoid unnecessary string interning for const_str 2022-06-28 18:38:36 +00:00
antoyo
d6aadc684b
Merge pull request #187 from GuillaumeGomez/invalid-conversion
Prevent invalid intrinsics conversion generation
2022-06-24 12:57:54 -04:00
antoyo
39d7a23170
Merge pull request #185 from rust-lang/feature/dummy-fast-math
Add dummy fast math implementation
2022-06-24 11:30:26 -04:00
Guillaume Gomez
f7a3dffc0b Add missing intrinsics conversions for ignored invalid LLVM intrinsics 2022-06-24 17:25:09 +02:00
Antoni Boucher
4dc0bbf40e Add dummy fast math implementation 2022-06-23 09:55:33 -04:00
Guillaume Gomez
94b345705a Regen without invalid conversion intrinsics 2022-06-23 13:39:30 +02:00
Guillaume Gomez
48347715fb Regen intrinsics 2022-06-23 13:28:38 +02:00
bors
6bad0d5b20 Auto merge of #98098 - bjorn3:archive_refactor, r=michaelwoerister
Remove the source archive functionality of ArchiveWriter

We now build archives through strictly additive means rather than taking an existing archive and potentially substracting parts. This is simpler and makes it easier to swap out the archive writer in https://github.com/rust-lang/rust/pull/97485.
2022-06-21 16:24:56 +00:00
bjorn3
0d28d642b5 Remove the source archive functionality of ArchiveWriter
We now build archives through strictly additive means rather than taking
an existing archive and potentially substracting parts.
2022-06-19 12:56:31 +00:00
bjorn3
2c7038b860 Fix "Remove src_files and remove_file" 2022-06-19 12:56:31 +00:00
antoyo
302157d7bd
Merge pull request #181 from GuillaumeGomez/more-intrinsics
More intrinsics
2022-06-18 11:25:34 -04:00
bjorn3
489d2daec0 Remove src_files and remove_file
They only apply to the main source archive and their role can be
fulfilled through the skip argument of add_archive too.
2022-06-14 15:11:14 +00:00
flip1995
0acd23c1da Add llvm.type.checked.load intrinsic
Add the intrinsic

declare {i8*, i1} @llvm.type.checked.load(i8* %ptr, i32 %offset, metadata %type)

This is used in the VFE optimization when lowering loading functions
from vtables to LLVM IR. The `metadata` is used to map the function to
all vtables this function could belong to. This ensures that functions
from vtables that might be used somewhere won't get removed.
2022-06-14 14:50:52 +02:00
Antoni Boucher
ee4755afdb Add more SIMD 2022-06-09 21:11:30 -04:00
Guillaume Gomez
c66055c193 Generate new intrinsics 2022-06-09 14:25:48 +02:00
Antoni Boucher
fc7030130e Remove unused macro rule 2022-06-07 08:50:13 -04:00
Antoni Boucher
13fa30c6c3 Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
b55bd956dc Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
e5a1bb2f59 Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
fe606eb444 Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
df85771b34 Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
06073c9dfc Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
2fa6a9080b Add more SIMD 2022-06-06 22:08:07 -04:00
Antoni Boucher
f59d345fc1 Refactor 2022-06-06 22:08:07 -04:00
Antoni Boucher
4e802c84c5 Remove intrinsics that were adding by the updated script 2022-06-06 22:08:07 -04:00
Antoni Boucher
3b35940443 Implement more SIMD 2022-06-06 22:08:07 -04:00