[llvm-commits] [llvm] r95723 - in /llvm/trunk/examples: CMakeLists.txt ExceptionDemo/ ExceptionDemo/CMakeLists.txt ExceptionDemo/ExceptionDemo.cpp ExceptionDemo/Makefile Makefile

Xerxes Rånby xerxes at zafena.se
Tue Feb 23 05:20:39 PST 2010


On 2010-02-23 13:41, Xerxes Rånby wrote:
> On 2010-02-10 00:22, Garrison Venn wrote:
>   
>> Author: gvenn
>> Date: Tue Feb  9 17:22:43 2010
>> New Revision: 95723
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=95723&view=rev
>> Log:
>> Adds a JIT based exception handling example to the examples directory. 
>> Both zero cost example domain specific, and C++ foreign exception handling are 
>> shown. The example's documentation fully explains how to run the example.
>>
>> Notes:
>>
>> 1)   The code uses an extremely simple type info model.
>> 2)   Only a single landing pad is used per unwind edge 
>>      (one call to llvm.eh.selector)
>> 3)   llvm.eh.selector support for filter arguments is not given.
>> 4)   llvm.eh.typeid.for is not used.
>> 5)   Forced unwind behavior is not supported.
>> 6)   Very little if any error handling is given.
>> 7)   __attribute__((__aligned__)) is used.
>> 8)   The code uses parts from the llvm compiler-rt project and
>>      the llvm Kaleidoscope example.
>> 9)   The code has not been ported or tested on WINDOWS.
>> 10)  The code was not tested with a cmake build.
>> 11)  The code was tested for a debug build on 32bit X86 CentOS LINUX, 
>>      and both a debug and release build on OS X 10.6.2 (64bit).
>>   
>>     
> The build fails when building this example using LLVM ARM Linux using
> GCC 4.3.3 on Ubuntu Jaunty,
>
> make[1]: Entering directory 
> `/media/disk/llvm-configure/examples/ExceptionDemo'
> llvm[1]: Compiling ExceptionDemo.cpp for Release build
> llvm[1]: Linking Release executable ExceptionDemo (without symbols)
> /media/disk/llvm-configure/examples/ExceptionDemo/Release/ExceptionDemo.o: 
> In function `ourPersonality':
> ExceptionDemo.cpp:(.text+0x60c): undefined reference to `_Unwind_GetIP'
> ExceptionDemo.cpp:(.text+0x7f8): undefined reference to `_Unwind_SetGR'
> ExceptionDemo.cpp:(.text+0x818): undefined reference to `_Unwind_SetGR'
> ExceptionDemo.cpp:(.text+0x828): undefined reference to `_Unwind_SetIP'
> ExceptionDemo.cpp:(.text+0x870): undefined reference to `_Unwind_SetGR'
> collect2: ld returned 1 exit status
> make[1]: *** [/media/disk/llvm-configure/Release/examples/ExceptionDemo] 
> Error 1
> make[1]: Leaving directory 
>   

For what i can find, it looks like

_Unwind_GetIP

and

_Unwind_SetGR

are not defined in the Exception Handling ABI for the ARM® Architecture
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf

Hope this heps fixing the example implementation for ARM.
Cheers
Xerxes

> The llvm-arm-linux buildbot have disabled builds of the examples so
> thats why we are not catching this using the buildbot.
>
> The following exception symbols exist when building on ARM:
> buildbot at sheeva:/usr/lib/gcc/arm-linux-gnueabi/4.3.3$ nm -a libgcc_eh.a
>
> unwind-arm.o:
> 00000000 n .ARM.attributes
> 00000000 r .ARM.exidx
> 00000000 r .ARM.extab
> 00000000 b .bss
> 00000000 n .comment
> 00000000 d .data
> 00000000 n .note.GNU-stack
> 00000000 t .text
>          U _GLOBAL_OFFSET_TABLE_
> 000000b0 T _Unwind_Complete
> 000000b4 T _Unwind_DeleteException
> 000000a8 T _Unwind_GetCFA
> 00000000 T _Unwind_VRS_Get
> 00000b8c T _Unwind_VRS_Pop
> 00000054 T _Unwind_VRS_Set
> 000004e0 T __aeabi_unwind_cpp_pr0
> 000004d8 W __aeabi_unwind_cpp_pr1
> 000004d0 W __aeabi_unwind_cpp_pr2
>          w __cxa_begin_cleanup
>          w __cxa_call_unexpected
>          w __cxa_type_match
>          U __exidx_end
>          U __exidx_start
> 000007e0 T __gnu_Unwind_Backtrace
>          w __gnu_Unwind_Find_exidx
> 000009dc T __gnu_Unwind_ForcedUnwind
> 00000a5c T __gnu_Unwind_RaiseException
>          U __gnu_Unwind_Restore_VFP
>          U __gnu_Unwind_Restore_VFP_D
>          U __gnu_Unwind_Restore_VFP_D_16_to_31
>          U __gnu_Unwind_Restore_WMMXC
>          U __gnu_Unwind_Restore_WMMXD
> 00000b20 T __gnu_Unwind_Resume
> 00000b00 T __gnu_Unwind_Resume_or_Rethrow
>          U __gnu_Unwind_Save_VFP
>          U __gnu_Unwind_Save_VFP_D
>          U __gnu_Unwind_Save_VFP_D_16_to_31
>          U __gnu_Unwind_Save_WMMXC
>          U __gnu_Unwind_Save_WMMXD
>          U __gnu_unwind_execute
> 000000dc t __gnu_unwind_pr_common
>          U abort
> 000004e8 t get_eit_entry
>          U memcpy
>          U restore_core_regs
> 00000754 t restore_non_core_regs
> 00000a00 t unwind_phase2
> 0000089c t unwind_phase2_forced
>
> libunwind.o:
> 00000000 n .ARM.attributes
> 00000000 b .bss
> 00000000 d .data
> 00000000 n .note.GNU-stack
> 00000000 t .text
> 00000184 T _Unwind_Backtrace
> 00000160 T _Unwind_ForcedUnwind
> 000000f4 T _Unwind_RaiseException
> 00000118 T _Unwind_Resume
> 0000013c T _Unwind_Resume_or_Rethrow
> 00000184 T ___Unwind_Backtrace
> 00000160 T ___Unwind_ForcedUnwind
> 000000f4 T ___Unwind_RaiseException
> 00000118 T ___Unwind_Resume
> 0000013c T ___Unwind_Resume_or_Rethrow
>          U __gnu_Unwind_Backtrace
>          U __gnu_Unwind_ForcedUnwind
>          U __gnu_Unwind_RaiseException
> 00000014 T __gnu_Unwind_Restore_VFP
> 00000024 T __gnu_Unwind_Restore_VFP_D
> 00000034 T __gnu_Unwind_Restore_VFP_D_16_to_31
> 000000cc T __gnu_Unwind_Restore_WMMXC
> 00000044 T __gnu_Unwind_Restore_WMMXD
>          U __gnu_Unwind_Resume
>          U __gnu_Unwind_Resume_or_Rethrow
> 0000001c T __gnu_Unwind_Save_VFP
> 0000002c T __gnu_Unwind_Save_VFP_D
> 0000003c T __gnu_Unwind_Save_VFP_D_16_to_31
> 000000e0 T __gnu_Unwind_Save_WMMXC
> 00000088 T __gnu_Unwind_Save_WMMXD
> 00000000 T __restore_core_regs
> 00000000 T restore_core_regs
>
> pr-support.o:
> 00000000 n .ARM.attributes
> 00000000 r .ARM.exidx
> 00000000 r .ARM.extab
> 00000000 b .bss
> 00000000 n .comment
> 00000000 d .data
> 00000000 n .note.GNU-stack
> 00000000 t .text
> 00000068 T _Unwind_GetDataRelBase
> 00000074 T _Unwind_GetLanguageSpecificData
> 000000b8 T _Unwind_GetRegionStart
> 0000005c T _Unwind_GetTextRelBase
>          U _Unwind_VRS_Get
>          U _Unwind_VRS_Pop
>          U _Unwind_VRS_Set
>          U __aeabi_unwind_cpp_pr0
> 000000e8 T __gnu_unwind_execute
> 00000768 T __gnu_unwind_frame
>          U abort
> 00000000 t next_unwind_byte
>
> unwind-c.o:
> 00000000 n .ARM.attributes
> 00000000 r .ARM.exidx
> 00000000 r .ARM.extab
> 00000000 b .bss
> 00000000 n .comment
> 00000000 d .data
> 00000000 n .note.GNU-stack
> 00000000 t .text
>          U _Unwind_GetDataRelBase
>          U _Unwind_GetLanguageSpecificData
>          U _Unwind_GetRegionStart
>          U _Unwind_GetTextRelBase
>          U _Unwind_VRS_Get
>          U _Unwind_VRS_Set
>          U __aeabi_unwind_cpp_pr0
> 00000000 T __gcc_personality_v0
>          U __gnu_unwind_frame
>          U abort
>
> emutls.o:
> 00000000 n .ARM.attributes
> 00000000 r .ARM.exidx
> 00000000 r .ARM.extab
> 00000000 b .bss
> 00000000 n .comment
> 00000000 d .data
> 00000000 n .note.GNU-stack
> 00000000 t .text
>          U _GLOBAL_OFFSET_TABLE_
>          U __aeabi_unwind_cpp_pr0
> 0000012c T __emutls_get_address
> 00000000 T __emutls_register_common
>          U abort
>          U calloc
> 00000084 t emutls_alloc
> 000002b8 t emutls_destroy
> 00000040 t emutls_init
> 0000001c b emutls_key
> 00000000 b emutls_mutex
> 00000020 b emutls_size
>          U free
>          U malloc
>          U memcpy
>          U memset
> 00000018 b once.6753
>          w pthread_cancel
>          w pthread_getspecific
>          w pthread_key_create
>          w pthread_mutex_lock
>          w pthread_mutex_unlock
>          w pthread_once
>          w pthread_setspecific
>          U realloc
> buildbot at sheeva:/usr/lib/gcc/arm-linux-gnueabi/4.3.3$
>
> Cheers, and have a great day!
> Xerxes
>   




More information about the llvm-commits mailing list