mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-30 02:27:38 +01:00
(Logical change 1.225)
This commit is contained in:
parent
3db9cf3812
commit
3640bb40a2
2 changed files with 210 additions and 0 deletions
|
@ -0,0 +1,207 @@
|
||||||
|
#!/bin/sh
|
||||||
|
verbose=false
|
||||||
|
if [ "$1" = "-v" ]; then
|
||||||
|
verbose=true
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
build_plat=@build_arch@
|
||||||
|
plat=@arch@
|
||||||
|
os=@target_os@
|
||||||
|
num_errors=0
|
||||||
|
|
||||||
|
LIBUNWIND=../src/.libs/libunwind.so
|
||||||
|
LIBUNWIND_GENERIC=../src/.libs/libunwind-${plat}.so
|
||||||
|
|
||||||
|
function fetch_symtab {
|
||||||
|
filename=$1
|
||||||
|
|
||||||
|
if [ ! -r $filename ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $verbose; then
|
||||||
|
echo "Checking $filename..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Unfortunately, "nm --defined" is a GNU-extension. For portability,
|
||||||
|
# build the list of defined symbols by hand.
|
||||||
|
#
|
||||||
|
symtab=`nm -g $filename`
|
||||||
|
saved_IFS="$IFS"
|
||||||
|
IFS=""
|
||||||
|
undef=`nm -g -u $filename`
|
||||||
|
for line in $undef; do
|
||||||
|
symtab=`echo "$symtab" | grep -v "^${line}"\$`
|
||||||
|
done;
|
||||||
|
IFS="$saved_IFS"
|
||||||
|
}
|
||||||
|
|
||||||
|
function ignore {
|
||||||
|
sym=$1
|
||||||
|
symtab=`echo "$symtab" | grep -v " ${sym}\$"`
|
||||||
|
}
|
||||||
|
|
||||||
|
function match {
|
||||||
|
sym=$1
|
||||||
|
if `echo "$symtab" | grep -q " ${sym}\$"`; then
|
||||||
|
symtab=`echo "$symtab" | grep -v " ${sym}\$"`
|
||||||
|
else
|
||||||
|
echo " ERROR: Symbol \"$sym\" missing."
|
||||||
|
num_errors=`expr $num_errors + 1`
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Filter out miscellaneous symbols that get defined by the
|
||||||
|
# linker for each shared object.
|
||||||
|
#
|
||||||
|
function filter_misc {
|
||||||
|
ignore _DYNAMIC
|
||||||
|
ignore _GLOBAL_OFFSET_TABLE_
|
||||||
|
ignore __bss_start
|
||||||
|
ignore _edata
|
||||||
|
ignore _end
|
||||||
|
ignore _Uelf32_get_proc_name
|
||||||
|
ignore _Uelf32_valid_object
|
||||||
|
ignore _Uelf64_get_proc_name
|
||||||
|
ignore _Uelf64_valid_object
|
||||||
|
ignore _U.*debug_level
|
||||||
|
ignore ICRT.INTERNAL # ICC 8.x defines this
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_local_unw_abi {
|
||||||
|
match _UL${plat}_create_addr_space
|
||||||
|
match _UL${plat}_destroy_addr_space
|
||||||
|
match _UL${plat}_get_fpreg
|
||||||
|
match _UL${plat}_get_proc_info
|
||||||
|
match _UL${plat}_get_proc_info_by_ip
|
||||||
|
match _UL${plat}_get_proc_name
|
||||||
|
match _UL${plat}_get_reg
|
||||||
|
match _UL${plat}_get_save_loc
|
||||||
|
match _UL${plat}_init_local
|
||||||
|
match _UL${plat}_init_remote
|
||||||
|
match _UL${plat}_is_signal_frame
|
||||||
|
match _UL${plat}_local_addr_space
|
||||||
|
match _UL${plat}_resume
|
||||||
|
match _UL${plat}_set_caching_policy
|
||||||
|
match _UL${plat}_set_reg
|
||||||
|
match _UL${plat}_set_fpreg
|
||||||
|
match _UL${plat}_step
|
||||||
|
|
||||||
|
match _U${plat}_flush_cache
|
||||||
|
match _U${plat}_get_accessors
|
||||||
|
match _U${plat}_getcontext
|
||||||
|
match _U${plat}_regname
|
||||||
|
|
||||||
|
match _U_dyn_cancel
|
||||||
|
match _U_dyn_info_list_addr
|
||||||
|
match _U_dyn_register
|
||||||
|
|
||||||
|
match backtrace
|
||||||
|
|
||||||
|
case ${plat} in
|
||||||
|
ia64)
|
||||||
|
match _UL${plat}_search_unwind_table
|
||||||
|
match _U${plat}_get_elf_image
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
match _UL${plat}_is_fpreg
|
||||||
|
match _UL${plat}_dwarf_search_unwind_table
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_generic_unw_abi {
|
||||||
|
match _U${plat}_create_addr_space
|
||||||
|
match _U${plat}_destroy_addr_space
|
||||||
|
match _U${plat}_flush_cache
|
||||||
|
match _U${plat}_get_accessors
|
||||||
|
match _U${plat}_get_fpreg
|
||||||
|
match _U${plat}_get_proc_info
|
||||||
|
match _U${plat}_get_proc_info_by_ip
|
||||||
|
match _U${plat}_get_proc_name
|
||||||
|
match _U${plat}_get_reg
|
||||||
|
match _U${plat}_get_save_loc
|
||||||
|
match _U${plat}_init_local
|
||||||
|
match _U${plat}_init_remote
|
||||||
|
match _U${plat}_is_signal_frame
|
||||||
|
match _U${plat}_local_addr_space
|
||||||
|
match _U${plat}_regname
|
||||||
|
match _U${plat}_resume
|
||||||
|
match _U${plat}_set_caching_policy
|
||||||
|
match _U${plat}_set_fpreg
|
||||||
|
match _U${plat}_set_reg
|
||||||
|
match _U${plat}_step
|
||||||
|
|
||||||
|
case ${plat} in
|
||||||
|
ia64)
|
||||||
|
match _U${plat}_search_unwind_table
|
||||||
|
match _U${plat}_find_dyn_list
|
||||||
|
match _U${plat}_get_kernel_table
|
||||||
|
match _U${plat}_get_elf_image
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
match _U${plat}_is_fpreg
|
||||||
|
match _U${plat}_dwarf_search_unwind_table
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_cxx_abi {
|
||||||
|
match _Unwind_Backtrace
|
||||||
|
match _Unwind_DeleteException
|
||||||
|
match _Unwind_FindEnclosingFunction
|
||||||
|
match _Unwind_ForcedUnwind
|
||||||
|
match _Unwind_GetBSP
|
||||||
|
match _Unwind_GetCFA
|
||||||
|
match _Unwind_GetDataRelBase
|
||||||
|
match _Unwind_GetGR
|
||||||
|
match _Unwind_GetIP
|
||||||
|
match _Unwind_GetLanguageSpecificData
|
||||||
|
match _Unwind_GetRegionStart
|
||||||
|
match _Unwind_GetTextRelBase
|
||||||
|
match _Unwind_RaiseException
|
||||||
|
match _Unwind_Resume
|
||||||
|
match _Unwind_Resume_or_Rethrow
|
||||||
|
match _Unwind_SetGR
|
||||||
|
match _Unwind_SetIP
|
||||||
|
case $os in
|
||||||
|
linux*)
|
||||||
|
# needed only for Intel 8.0 bug-compatibility
|
||||||
|
match _ReadSLEB
|
||||||
|
match _ReadULEB
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_empty {
|
||||||
|
if [ -n "$symtab" ]; then
|
||||||
|
echo -e " ERROR: Extraneous symbols:\n$symtab"
|
||||||
|
num_errors=`expr $num_errors + 1`
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $plat = $build_plat ]; then
|
||||||
|
fetch_symtab $LIBUNWIND
|
||||||
|
filter_misc
|
||||||
|
check_local_unw_abi
|
||||||
|
check_cxx_abi
|
||||||
|
check_empty
|
||||||
|
fi
|
||||||
|
|
||||||
|
fetch_symtab $LIBUNWIND_GENERIC
|
||||||
|
filter_misc
|
||||||
|
check_generic_unw_abi
|
||||||
|
check_empty
|
||||||
|
|
||||||
|
if [ $num_errors -gt 0 ]; then
|
||||||
|
echo "FAILURE: Detected $num_errors errors"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $verbose; then
|
||||||
|
echo " SUCCESS: all checks passed"
|
||||||
|
fi
|
||||||
|
exit 0
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
chmod +x ./check-namespace.sh
|
||||||
|
./check-namespace.sh
|
Loading…
Reference in a new issue