mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-26 09:07: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