1ef74abb917b8d3fe3da93f31720597eebb88636
[platform/upstream/libunwind.git] / tests / check-namespace.sh.in
1 #!/bin/sh
2 verbose=false
3 if [ "$1" = "-v" ]; then
4     verbose=true
5     shift
6 fi
7
8 build_plat=@build_arch@
9 plat=@arch@
10 os=@target_os@
11 num_errors=0
12
13 LIBUNWIND=../src/.libs/libunwind.so
14 LIBUNWIND_GENERIC=../src/.libs/libunwind-${plat}.so
15
16 fetch_symtab () {
17     filename=$1
18
19     if [ ! -r $filename ]; then
20         return
21     fi
22
23     if $verbose; then
24         echo "Checking $filename..."
25     fi
26
27     #
28     # Unfortunately, "nm --defined" is a GNU-extension.  For portability,
29     # build the list of defined symbols by hand.
30     #
31     symtab=`nm -g $filename`
32     saved_IFS="$IFS"
33     IFS=""
34     undef=`nm -g -u $filename`
35     for line in $undef; do
36         symtab=`echo "$symtab" | grep -v "^${line}"\$`
37     done;
38     IFS="$saved_IFS"
39 }
40
41 ignore () {
42     sym=$1
43     symtab=`echo "$symtab" | grep -v " ${sym}\$"`
44 }
45
46 match () {
47     sym=$1
48     if `echo "$symtab" | grep -q " ${sym}\$"`; then
49         symtab=`echo "$symtab" | grep -v " ${sym}\$"`
50     else
51         echo "  ERROR: Symbol \"$sym\" missing."
52         num_errors=`expr $num_errors + 1`
53     fi
54 }
55
56 #
57 # Filter out miscellaneous symbols that get defined by the
58 # linker for each shared object.
59 #
60 filter_misc () {
61     ignore _DYNAMIC
62     ignore _GLOBAL_OFFSET_TABLE_
63     ignore __bss_start
64     ignore _edata
65     ignore _end
66     ignore _Uelf32_get_proc_name
67     ignore _Uelf32_valid_object
68     ignore _Uelf64_get_proc_name
69     ignore _Uelf64_valid_object
70     ignore _U.*debug_level
71     ignore ICRT.INTERNAL        # ICC 8.x defines this
72
73     # Ignore symbols generated by the ARM Linux default linker script.
74     # For details see the binutils sources (src/ld/emulparams/armelf_linux.sh).
75     if [ ${plat} = "arm" ]; then
76         ignore __bss_start__
77         ignore __bss_end__
78         ignore __end__
79         ignore _bss_end__
80     fi
81
82     if [ ${plat} = "mips" ]; then
83         ignore _fbss
84         ignore _fdata
85         ignore _ftext
86         ignore _gp
87     fi
88 }
89
90 check_local_unw_abi () {
91     match _UL${plat}_create_addr_space
92     match _UL${plat}_destroy_addr_space
93     match _UL${plat}_get_fpreg
94     match _UL${plat}_get_proc_info
95     match _UL${plat}_get_proc_info_by_ip
96     match _UL${plat}_get_proc_name
97     match _UL${plat}_get_reg
98     match _UL${plat}_get_save_loc
99     match _UL${plat}_init_local
100     match _UL${plat}_init_remote
101     match _UL${plat}_is_signal_frame
102     match _UL${plat}_handle_signal_frame
103     match _UL${plat}_local_addr_space
104     match _UL${plat}_resume
105     match _UL${plat}_set_caching_policy
106     match _UL${plat}_set_reg
107     match _UL${plat}_set_fpreg
108     match _UL${plat}_step
109
110     match _U${plat}_flush_cache
111     match _U${plat}_get_accessors
112     match _U${plat}_getcontext
113     match _U${plat}_regname
114     match _U${plat}_strerror
115
116     match _U_dyn_cancel
117     match _U_dyn_info_list_addr
118     match _U_dyn_register
119
120     match unw_backtrace
121     match backtrace
122
123     case ${plat} in
124         arm)
125             match _U${plat}_get_elf_image
126             match _U${plat}_is_fpreg
127             match _UL${plat}_search_unwind_table
128             match _UL${plat}_dwarf_search_unwind_table
129             match _UL${plat}_dwarf_find_unwind_table
130             ;;
131         hppa)
132             match _UL${plat}_dwarf_search_unwind_table
133             match _UL${plat}_dwarf_find_unwind_table
134             match _U${plat}_get_elf_image
135             match _U${plat}_setcontext
136             ;;
137         ia64)
138             match _UL${plat}_search_unwind_table
139             match _U${plat}_get_elf_image
140             ;;
141         x86)
142             match _U${plat}_get_elf_image
143             match _U${plat}_is_fpreg
144             match _UL${plat}_dwarf_search_unwind_table
145             match _UL${plat}_dwarf_find_unwind_table
146             ;;
147         x86_64)
148             match _U${plat}_get_elf_image
149             match _U${plat}_is_fpreg
150             match _UL${plat}_dwarf_search_unwind_table
151             match _UL${plat}_dwarf_find_unwind_table
152             match _U${plat}_setcontext
153             ;;
154         ppc*)
155             match _U${plat}_get_func_addr
156             match _U${plat}_get_elf_image
157             match _U${plat}_is_fpreg
158             match _UL${plat}_dwarf_search_unwind_table
159             match _UL${plat}_dwarf_find_unwind_table
160             ;;
161         tilegx)
162             match _U${plat}_is_fpreg
163             match _UL${plat}_dwarf_search_unwind_table
164             match _UL${plat}_dwarf_find_unwind_table
165             match _UL${plat}_local_addr_space_init
166             match _U${plat}_get_elf_image
167             match ${plat}_lock     
168             ;;
169
170         *)
171             match _U${plat}_is_fpreg
172             match _UL${plat}_dwarf_search_unwind_table
173             match _UL${plat}_dwarf_find_unwind_table
174             ;;
175     esac
176
177     if [ x@enable_debug_frame@ = xyes ]; then
178         match _UL${plat}_dwarf_find_debug_frame
179     fi
180
181 }
182
183 check_generic_unw_abi () {
184     match _U${plat}_create_addr_space
185     match _U${plat}_destroy_addr_space
186     match _U${plat}_flush_cache
187     match _U${plat}_get_accessors
188     match _U${plat}_get_fpreg
189     match _U${plat}_get_proc_info
190     match _U${plat}_get_proc_info_by_ip
191     match _U${plat}_get_proc_name
192     match _U${plat}_get_reg
193     match _U${plat}_get_save_loc
194     match _U${plat}_init_local
195     match _U${plat}_init_remote
196     match _U${plat}_is_signal_frame
197     match _U${plat}_handle_signal_frame
198     match _U${plat}_local_addr_space
199     match _U${plat}_regname
200     match _U${plat}_resume
201     match _U${plat}_set_caching_policy
202     match _U${plat}_set_fpreg
203     match _U${plat}_set_reg
204     match _U${plat}_step
205     match _U${plat}_strerror
206
207     case ${plat} in
208         arm)
209             match _U${plat}_is_fpreg
210             match _U${plat}_get_elf_image
211             match _U${plat}_search_unwind_table
212             match _U${plat}_dwarf_search_unwind_table
213             match _U${plat}_dwarf_find_unwind_table
214             ;;
215         hppa)
216             match _U${plat}_dwarf_search_unwind_table
217             match _U${plat}_dwarf_find_unwind_table
218             match _U${plat}_get_elf_image
219             ;;
220         ia64)
221             match _U${plat}_search_unwind_table
222             match _U${plat}_find_dyn_list
223             if [ $plat = $build_plat ]; then
224                 match _U${plat}_get_elf_image
225                 case $os in
226                     linux*)
227                         match _U${plat}_get_kernel_table
228                         ;;
229                 esac
230             fi
231             ;;
232         x86)
233             match _U${plat}_get_elf_image
234             match _U${plat}_is_fpreg
235             match _U${plat}_dwarf_search_unwind_table
236             match _U${plat}_dwarf_find_unwind_table
237             ;;
238         x86_64)
239             match _U${plat}_get_elf_image
240             match _U${plat}_is_fpreg
241             match _U${plat}_dwarf_search_unwind_table
242             match _U${plat}_dwarf_find_unwind_table
243             ;;
244         ppc*)
245             match _U${plat}_get_elf_image
246             match _U${plat}_get_func_addr
247             match _U${plat}_is_fpreg
248             match _U${plat}_dwarf_search_unwind_table
249             match _U${plat}_dwarf_find_unwind_table
250             ;;
251         tilegx)
252             match _U${plat}_dwarf_search_unwind_table
253             match _U${plat}_dwarf_find_unwind_table
254             match _U${plat}_get_elf_image
255             match _U${plat}_is_fpreg
256             match _U${plat}_local_addr_space_init
257             match ${plat}_lock
258             ;;
259         *)
260             match _U${plat}_is_fpreg
261             match _U${plat}_dwarf_search_unwind_table
262             match _U${plat}_dwarf_find_unwind_table
263             ;;
264     esac
265
266     if [ x@enable_debug_frame@ = xyes ]; then
267         match _U${plat}_dwarf_find_debug_frame
268     fi
269 }
270
271 check_cxx_abi () {
272     match _Unwind_Backtrace
273     match _Unwind_DeleteException
274     match _Unwind_FindEnclosingFunction
275     match _Unwind_ForcedUnwind
276     match _Unwind_GetBSP
277     match _Unwind_GetCFA
278     match _Unwind_GetDataRelBase
279     match _Unwind_GetGR
280     match _Unwind_GetIP
281     match _Unwind_GetIPInfo
282     match _Unwind_GetLanguageSpecificData
283     match _Unwind_GetRegionStart
284     match _Unwind_GetTextRelBase
285     match _Unwind_RaiseException
286     match _Unwind_Resume
287     match _Unwind_Resume_or_Rethrow
288     match _Unwind_SetGR
289     match _Unwind_SetIP
290     match __libunwind_Unwind_Backtrace
291     match __libunwind_Unwind_DeleteException
292     match __libunwind_Unwind_FindEnclosingFunction
293     match __libunwind_Unwind_ForcedUnwind
294     match __libunwind_Unwind_GetBSP
295     match __libunwind_Unwind_GetCFA
296     match __libunwind_Unwind_GetDataRelBase
297     match __libunwind_Unwind_GetGR
298     match __libunwind_Unwind_GetIP
299     match __libunwind_Unwind_GetIPInfo
300     match __libunwind_Unwind_GetLanguageSpecificData
301     match __libunwind_Unwind_GetRegionStart
302     match __libunwind_Unwind_GetTextRelBase
303     match __libunwind_Unwind_RaiseException
304     match __libunwind_Unwind_Resume
305     match __libunwind_Unwind_Resume_or_Rethrow
306     match __libunwind_Unwind_SetGR
307     match __libunwind_Unwind_SetIP
308     case $os in
309         linux*)
310             # needed only for Intel 8.0 bug-compatibility
311             match _ReadSLEB
312             match _ReadULEB
313             ;;
314     esac
315 }
316
317 check_empty () {
318     if [ -n "$symtab" ]; then
319         printf "  ERROR: Extraneous symbols:\n$symtab\n"
320         num_errors=`expr $num_errors + 1`
321     fi
322 }
323
324 if [ $plat = $build_plat ]; then
325     fetch_symtab $LIBUNWIND
326     filter_misc
327     check_local_unw_abi
328     if [ x@enable_cxx_exceptions@ = xyes ]; then
329       check_cxx_abi
330     fi
331     check_empty
332 fi
333
334 fetch_symtab $LIBUNWIND_GENERIC
335 filter_misc
336 check_generic_unw_abi
337 check_empty
338
339 if [ $num_errors -gt 0 ]; then
340     echo "FAILURE: Detected $num_errors errors"
341     exit 1
342 fi
343
344 if $verbose; then
345     echo "  SUCCESS: all checks passed"
346 fi
347 exit 0