Remove wrongly emitted .eh_frame
in -Cpanic=abort
This commit is contained in:
parent
b2807b2bf3
commit
d9531a0d93
3 changed files with 26 additions and 1 deletions
|
@ -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
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
10
tests/run-make/panic-abort-eh_frame/Makefile
Normal file
10
tests/run-make/panic-abort-eh_frame/Makefile
Normal 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'
|
10
tests/run-make/panic-abort-eh_frame/foo.rs
Normal file
10
tests/run-make/panic-abort-eh_frame/foo.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
#![no_std]
|
||||
|
||||
#[panic_handler]
|
||||
fn handler(_: &core::panic::PanicInfo<'_>) -> ! {
|
||||
loop {}
|
||||
}
|
||||
|
||||
pub unsafe fn oops(x: *const u32) -> u32 {
|
||||
*x
|
||||
}
|
Loading…
Add table
Reference in a new issue