Auto merge of #133818 - matthiaskrgr:rollup-iav1wq7, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #132937 (a release operation synchronizes with an acquire operation) - #133681 (improve TagEncoding::Niche docs, sanity check, and UB checks) - #133726 (Add `core::arch::breakpoint` and test) - #133768 (Remove `generic_associated_types_extended` feature gate) - #133811 ([AIX] change AIX default codemodel=large) - #133812 (Update wasm-component-ld to 0.5.11) - #133813 (compiletest: explain that UI tests are expected not to compile by default) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
3b382642ab
51 changed files with 566 additions and 240 deletions
|
@ -42,3 +42,30 @@ pub macro naked_asm("assembly template", $(operands,)* $(options($(option),*))?)
|
|||
pub macro global_asm("assembly template", $(operands,)* $(options($(option),*))?) {
|
||||
/* compiler built-in */
|
||||
}
|
||||
|
||||
/// Compiles to a target-specific software breakpoint instruction or equivalent.
|
||||
///
|
||||
/// This will typically abort the program. It may result in a core dump, and/or the system logging
|
||||
/// debug information. Additional target-specific capabilities may be possible depending on
|
||||
/// debuggers or other tooling; in particular, a debugger may be able to resume execution.
|
||||
///
|
||||
/// If possible, this will produce an instruction sequence that allows a debugger to resume *after*
|
||||
/// the breakpoint, rather than resuming *at* the breakpoint; however, the exact behavior is
|
||||
/// target-specific and debugger-specific, and not guaranteed.
|
||||
///
|
||||
/// If the target platform does not have any kind of debug breakpoint instruction, this may compile
|
||||
/// to a trapping instruction (e.g. an undefined instruction) instead, or to some other form of
|
||||
/// target-specific abort that may or may not support convenient resumption.
|
||||
///
|
||||
/// The precise behavior and the precise instruction generated are not guaranteed, except that in
|
||||
/// normal execution with no debug tooling involved this will not continue executing.
|
||||
///
|
||||
/// - On x86 targets, this produces an `int3` instruction.
|
||||
/// - On aarch64 targets, this produces a `brk #0xf000` instruction.
|
||||
// When stabilizing this, update the comment on `core::intrinsics::breakpoint`.
|
||||
#[unstable(feature = "breakpoint", issue = "133724")]
|
||||
#[inline(always)]
|
||||
#[cfg(not(bootstrap))]
|
||||
pub fn breakpoint() {
|
||||
core::intrinsics::breakpoint();
|
||||
}
|
||||
|
|
|
@ -1381,6 +1381,18 @@ pub unsafe fn prefetch_write_instruction<T>(_data: *const T, _locality: i32) {
|
|||
#[rustc_intrinsic]
|
||||
#[rustc_intrinsic_must_be_overridden]
|
||||
#[rustc_nounwind]
|
||||
#[cfg(not(bootstrap))]
|
||||
pub fn breakpoint() {
|
||||
unreachable!()
|
||||
}
|
||||
|
||||
/// Executes a breakpoint trap, for inspection by a debugger.
|
||||
///
|
||||
/// This intrinsic does not have a stable counterpart.
|
||||
#[rustc_intrinsic]
|
||||
#[rustc_intrinsic_must_be_overridden]
|
||||
#[rustc_nounwind]
|
||||
#[cfg(bootstrap)]
|
||||
pub unsafe fn breakpoint() {
|
||||
unreachable!()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue