Commit Graph

803 Commits

Author SHA1 Message Date
Nicholas Nethercote
89003418b3 Move ArgAbi::pad_i32 into PassMode::Cast.
Because it's only needed for that variant. This shrinks the types and
clarifies the logic.
2022-08-26 11:12:36 +10:00
Nicholas Nethercote
d83636d3fa Turn ArgAbi::pad into a bool.
Because it's only ever set to `None` or `Some(Reg::i32())`.
2022-08-26 10:53:41 +10:00
Yuki Okushi
5b1229eb45 Rollup merge of #100604 - dtolnay:okorerr, r=m-ou-se
Remove unstable Result::into_ok_or_err

Pending FCP: https://github.com/rust-lang/rust/issues/82223#issuecomment-1214920203

```@rustbot``` label +waiting-on-fcp
2022-08-26 09:51:44 +09:00
Nicholas Nethercote
5a6992916e Simplify arg capacity calculations.
Currently they try to be very precise. But they are wrong, i.e. they
don't match what's happening in the loop below. This code isn't hot
enough for it to matter that much.
2022-08-26 10:45:45 +10:00
Nicholas Nethercote
f78592f1bc Change FnAbi::args to a boxed slice. 2022-08-26 10:30:36 +10:00
Nicholas Nethercote
93191f66dc Box CastTarget within PassMode.
Because `PassMode::Cast` is by far the largest variant, but is
relatively rare.

This requires making `PassMode` not impl `Copy`, and `Clone` is no
longer necessary. This causes lots of sigil adjusting, but nothing very
notable.
2022-08-26 09:35:28 +10:00
Maybe Waffle
1acc3b45e3 Fix ptr_mask impl in cg gcc 2022-08-21 05:27:14 +04:00
Maybe Waffle
34d33f2299 Implement ptr_mask intrinsic in cg gcc 2022-08-21 05:27:14 +04:00
Maybe Waffle
928ef372c3 Replace most uses of pointer::offset with add and sub 2022-08-21 02:21:41 +04:00
David Tolnay
f21a3003e5 Remove unstable Result::into_ok_or_err 2022-08-17 17:20:42 -07:00
Josh Stone
0646f0dda6 Move the cast_float_to_int fallback code to GCC
Now that we require at least LLVM 13, that codegen backend is always
using its intrinsic `fptosi.sat` and `fptoui.sat` conversions, so it
doesn't need the manual implementation. However, the GCC backend still
needs it, so we can move all of that code down there.
2022-08-16 15:46:17 -07:00
antoyo
b4eb2c30a2
Merge pull request #204 from rust-lang/fix/mxcsr-builtins
Fix the mxcsr builtins
2022-08-04 21:12:19 -04:00
Antoni Boucher
deedd28881 Fix the mxcsr builtins 2022-08-04 20:46:32 -04:00
antoyo
70c7c06b80
Merge pull request #203 from rust-lang/feature/visibility
Support symbol visibility
2022-08-03 20:09:13 -04:00
Antoni Boucher
672eec3055 Support symbol visibility 2022-08-03 19:34:47 -04:00
bjorn3
3a8ff6140b Introduce an ArchiveBuilderBuilder
This avoids monomorphizing all linker code for each codegen backend and
will allow passing in extra information to the archive builder from the
codegen backend.
2022-07-28 09:08:47 +00:00
bjorn3
56f34865ae Inline inject_dll_import_lib 2022-07-28 08:43:15 +00:00
bjorn3
a3ea31b846 Move output argument from ArchiveBuilder::new to .build() 2022-07-28 08:39:19 +00:00
bors
fe5cc38098 Auto merge of #98989 - dpaoliello:rawdylibbin, r=michaelwoerister
Enable raw-dylib for bin crates

Fixes #93842

When `raw-dylib` is used in a `bin` crate, we need to collect all of the `raw-dylib` functions, generate the import library and add that to the linker command line.

I also changed the tests so that 1) the C++ dlls are created after the Rust dlls, thus there is no chance of accidentally using them in the Rust linking process and 2) disabled generating import libraries when building with MSVC.
2022-07-26 01:47:34 +00:00
bors
c5528ce643 Auto merge of #95548 - rcvalle:rust-cfi-2, r=nagisa
Add fine-grained LLVM CFI support to the Rust compiler

This PR 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 https://github.com/rust-lang/rust/issues/89653).

LLVM CFI can be enabled with -Zsanitizer=cfi and requires LTO (i.e., -Clto).

Thank you again, `@eddyb,` `@nagisa,` `@pcc,` and `@tmiasko` for all the help!
2022-07-24 01:22:36 +00:00
antoyo
a227994b53
Merge pull request #202 from rust-lang/fix/recursive-types
Cleanup regarding handling of recursive types
2022-07-23 21:08:07 -04:00
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
antoyo
22e4f181cb
Merge pull request #201 from GuillaumeGomez/cache-rust
Add cache for rust repository
2022-07-10 10:42:04 -04:00
Guillaume Gomez
28b11119e7 Add cache for rust repository 2022-07-10 12:43:33 +02:00
Ralf Jung
33e8d4c2d4 fix cranelift and gcc backends 2022-07-09 07:27:29 -04:00
antoyo
7c9db86fa1
Merge pull request #200 from GuillaumeGomez/sort-find
Sort ui_tests to ensure they remain coherent across different jobs
2022-07-08 16:11:50 -04:00
Guillaume Gomez
96d103b9f9 Sort ui_tests to ensure they remain coherent across different jobs 2022-07-08 16:19:48 +02: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
antoyo
fe427541e6
Merge pull request #196 from GuillaumeGomez/faster-ci
Split tests to have faster CI
2022-07-07 21:14:04 -04:00
Guillaume Gomez
50f359c8a1 Split tests to have faster CI 2022-07-07 23:15:58 +02:00
antoyo
0d687bd829
Merge pull request #190 from rust-lang/feature/more-simd
Feature/more simd
2022-07-07 00:10:17 -04: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
d19a5ea868 Fix all command 2022-07-06 15:24:53 -04:00
Antoni Boucher
16ca66d664 Fix build only 2022-07-06 15:24:53 -04:00
Antoni Boucher
85036a5afa Use gccjit from repo 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