Remove wrongly emitted .eh_frame in -Cpanic=abort

This commit is contained in:
Gary Guo 2023-06-07 21:00:56 +01:00
parent b2807b2bf3
commit d9531a0d93
3 changed files with 26 additions and 1 deletions

View file

@ -9,6 +9,7 @@ use rustc_middle::mir::{
};
use rustc_middle::ty::{Ty, TyCtxt, TypeAndMut};
use rustc_session::Session;
use rustc_target::spec::PanicStrategy;
pub struct CheckAlignment;
@ -236,7 +237,11 @@ fn insert_alignment_check<'tcx>(
required: Operand::Copy(alignment),
found: Operand::Copy(addr),
}),
unwind: UnwindAction::Terminate,
unwind: if tcx.sess.panic_strategy() == PanicStrategy::Unwind {
UnwindAction::Terminate
} else {
UnwindAction::Unreachable
},
},
});
}

View file

@ -0,0 +1,10 @@
# only-linux
#
# This test ensures that `panic=abort` code (without `C-unwind`, that is) should not have any
# unwinding related `.eh_frame` sections emitted.
include ../tools.mk
all:
$(RUSTC) foo.rs --crate-type=lib --emit=obj=$(TMPDIR)/foo.o -Cpanic=abort
objdump --dwarf=frames $(TMPDIR)/foo.o | $(CGREP) -v 'DW_CFA'

View file

@ -0,0 +1,10 @@
#![no_std]
#[panic_handler]
fn handler(_: &core::panic::PanicInfo<'_>) -> ! {
loop {}
}
pub unsafe fn oops(x: *const u32) -> u32 {
*x
}