The main difference with existing support is that function addresses are function descriptor addresses instead. This means that all code dealing with function pointers now has to cope with function descriptors instead. For the same reason, Linux kernel helpers can no longer be called by dereferencing their address, so we implement wrappers that directly call the kernel helpers. When restoring a function address, we also have to restore the FDPIC register value (r9). 2019-09-10 Christophe Lyon <christophe.lyon@st.com> Mickaël Guêné <mickael.guene@st.com> gcc/ * ginclude/unwind-arm-common.h (unwinder_cache): Add reserved5 field. libgcc/ * config/arm/linux-atomic.c (__kernel_cmpxchg): Add FDPIC support. (__kernel_dmb): Likewise. (__fdpic_cmpxchg): New function. (__fdpic_dmb): New function. * config/arm/unwind-arm.h (FDPIC_REGNUM): New define. (gnu_Unwind_Find_got): New function. (_Unwind_decode_typeinfo_ptr): Add FDPIC support. * unwind-arm-common.inc (UCB_PR_GOT): New. (funcdesc_t): New struct. (get_eit_entry): Add FDPIC support. (unwind_phase2): Likewise. (unwind_phase2_forced): Likewise. (__gnu_Unwind_RaiseException): Likewise. (__gnu_Unwind_Resume): Likewise. (__gnu_Unwind_Backtrace): Likewise. * unwind-pe.h (read_encoded_value_with_base): Likewise. libstdc++/ * libsupc++/eh_personality.cc (get_ttype_entry): Add FDPIC support. Co-Authored-By: Mickaël Guêné <mickael.guene@st.com> From-SVN: r275568
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
Makefile.am | Loading commit data... | |
Makefile.in | Loading commit data... | |
array_type_info.cc | Loading commit data... | |
atexit_arm.cc | Loading commit data... | |
atexit_thread.cc | Loading commit data... | |
atomic_lockfree_defines.h | Loading commit data... | |
bad_alloc.cc | Loading commit data... | |
bad_array_length.cc | Loading commit data... | |
bad_array_new.cc | Loading commit data... | |
bad_cast.cc | Loading commit data... | |
bad_typeid.cc | Loading commit data... | |
class_type_info.cc | Loading commit data... | |
cxxabi.h | Loading commit data... | |
cxxabi_forced.h | Loading commit data... | |
cxxabi_init_exception.h | Loading commit data... | |
del_op.cc | Loading commit data... | |
del_opa.cc | Loading commit data... | |
del_opant.cc | Loading commit data... | |
del_opnt.cc | Loading commit data... | |
del_ops.cc | Loading commit data... | |
del_opsa.cc | Loading commit data... | |
del_opv.cc | Loading commit data... | |
del_opva.cc | Loading commit data... | |
del_opvant.cc | Loading commit data... | |
del_opvnt.cc | Loading commit data... | |
del_opvs.cc | Loading commit data... | |
del_opvsa.cc | Loading commit data... | |
dyncast.cc | Loading commit data... | |
eh_alloc.cc | Loading commit data... | |
eh_arm.cc | Loading commit data... | |
eh_atomics.h | Loading commit data... | |
eh_aux_runtime.cc | Loading commit data... | |
eh_call.cc | Loading commit data... | |
eh_catch.cc | Loading commit data... | |
eh_exception.cc | Loading commit data... | |
eh_globals.cc | Loading commit data... | |
eh_personality.cc | Loading commit data... | |
eh_ptr.cc | Loading commit data... | |
eh_term_handler.cc | Loading commit data... | |
eh_term_handler.h | Loading commit data... | |
eh_terminate.cc | Loading commit data... | |
eh_throw.cc | Loading commit data... | |
eh_tm.cc | Loading commit data... | |
eh_type.cc | Loading commit data... | |
eh_unex_handler.cc | Loading commit data... | |
enum_type_info.cc | Loading commit data... | |
exception | Loading commit data... | |
exception.h | Loading commit data... | |
exception_defines.h | Loading commit data... | |
exception_ptr.h | Loading commit data... | |
function_type_info.cc | Loading commit data... | |
fundamental_type_info.cc | Loading commit data... | |
guard.cc | Loading commit data... | |
guard_error.cc | Loading commit data... | |
hash_bytes.cc | Loading commit data... | |
hash_bytes.h | Loading commit data... | |
initializer_list | Loading commit data... | |
nested_exception.cc | Loading commit data... | |
nested_exception.h | Loading commit data... | |
new | Loading commit data... | |
new_handler.cc | Loading commit data... | |
new_op.cc | Loading commit data... | |
new_opa.cc | Loading commit data... | |
new_opant.cc | Loading commit data... | |
new_opnt.cc | Loading commit data... | |
new_opv.cc | Loading commit data... | |
new_opva.cc | Loading commit data... | |
new_opvant.cc | Loading commit data... | |
new_opvnt.cc | Loading commit data... | |
pbase_type_info.cc | Loading commit data... | |
pmem_type_info.cc | Loading commit data... | |
pointer_type_info.cc | Loading commit data... | |
pure.cc | Loading commit data... | |
si_class_type_info.cc | Loading commit data... | |
tinfo.cc | Loading commit data... | |
tinfo.h | Loading commit data... | |
tinfo2.cc | Loading commit data... | |
typeinfo | Loading commit data... | |
unwind-cxx.h | Loading commit data... | |
vec.cc | Loading commit data... | |
vmi_class_type_info.cc | Loading commit data... | |
vterminate.cc | Loading commit data... | |
vtv_stubs.cc | Loading commit data... |