summaryrefslogtreecommitdiff
path: root/tests/check-namespace.sh.in
diff options
context:
space:
mode:
authormostang.com!davidm <mostang.com!davidm>2004-05-05 01:58:44 +0000
committermostang.com!davidm <mostang.com!davidm>2004-05-05 01:58:44 +0000
commit3640bb40a264ce250153f5463e2ad24b16e94205 (patch)
treef5cfd7e71ecbe23abc492821de642606731d043d /tests/check-namespace.sh.in
parent3db9cf3812456a39527d52850a52e28acc53d796 (diff)
downloadlibunwind-3640bb40a264ce250153f5463e2ad24b16e94205.tar.gz
(Logical change 1.225)
Diffstat (limited to 'tests/check-namespace.sh.in')
-rw-r--r--tests/check-namespace.sh.in207
1 files changed, 207 insertions, 0 deletions
diff --git a/tests/check-namespace.sh.in b/tests/check-namespace.sh.in
index e69de29b..6ba6ecef 100644
--- a/tests/check-namespace.sh.in
+++ b/tests/check-namespace.sh.in
@@ -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