Abdoulaye Walsimou GAYE
2013-Feb-04 20:08 UTC
[LLVMdev] ARM c++ exceptions handling not working with clang/llvm-3.2?
Hello, am I wrong or the ARM c++ exceptions handling does not work? See the difference between assembly generated by clang and gcc with the following test code: #include <stdio.h> #include <exception> # test.cpp int main() { try { throw 20; } catch (int e) { printf("Exception Nr %d occurred\n", e); } return 0; } tools-armel-linux-arm920t/bin/armel-unknown-linux-gnueabi-clang++ -v -save-temps -mcpu=arm920t -std=c++11 test.cpp -o test clang version 3.2 (tags/RELEASE_32/final) Target: armel-unknown-linux-gnueabi Thread model: posix "/home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/armel-unknown-linux-gnueabi-clang" -cc1 -triple armv4t-unknown-linux-gnueabi -E -disable-free -main-file-name test.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -mconstructor-aliases -fuse-init-array -target-abi aapcs-linux -target-cpu arm920t -msoft-float -mfloat-abi soft -target-feature +soft-float -target-feature +soft-float-abi -target-feature -neon -target-linker-version 2.22 -momit-leaf-frame-pointer -v -resource-dir /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/clang/3.2 -isysroot /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t -fmodule-cache-path /var/tmp/clang-module-cache -internal-isystem /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3 -internal-isystem /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3/armel-unknown-linux-gnueabi -internal-isystem /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3/backward -internal-isystem /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/local/include -internal-isystem /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/clang/3.2/include -internal-externc-isystem /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/include -internal-externc-isystem /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/include -std=c++11 -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/walsimou/embtoolkit.git -ferror-limit 19 -fmessage-length 212 -mstackrealign -fno-signed-char -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o test.ii -x c++ test.cpp clang -cc1 version 3.2 based upon LLVM 3.2svn default target armel-unknown-linux-gnueabi ignoring nonexistent directory "/home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/local/include" ignoring nonexistent directory "/home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/include" #include "..." search starts here: #include <...> search starts here: /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3 /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3/armel-unknown-linux-gnueabi /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/../../../../armel-unknown-linux-gnueabi/include/c++/4.7.3/backward /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/clang/3.2/include /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/include End of search list. "/home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/armel-unknown-linux-gnueabi-clang" -cc1 -triple armv4t-unknown-linux-gnueabi -S -disable-free -main-file-name test.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -mconstructor-aliases -fuse-init-array -target-abi aapcs-linux -target-cpu arm920t -msoft-float -mfloat-abi soft -target-feature +soft-float -target-feature +soft-float-abi -target-feature -neon -target-linker-version 2.22 -momit-leaf-frame-pointer -v -resource-dir /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/clang/3.2 -std=c++11 -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir /home/walsimou/embtoolkit.git -ferror-limit 19 -fmessage-length 212 -mstackrealign -fno-signed-char -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o test.s -x c++-cpp-output test.ii clang -cc1 version 3.2 based upon LLVM 3.2svn default target armel-unknown-linux-gnueabi #include "..." search starts here: End of search list. "/home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/armel-unknown-linux-gnueabi-as" -mfloat-abi=soft -mcpu=arm920t -o test.o test.s "/home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/armel-unknown-linux-gnueabi-ld" --sysroot=/home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t -z relro -X --hash-style=gnu --build-id --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /lib/ld-linux.so.3 -o test /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/lib/crt1.o /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/lib/crti.o /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/crtbegin.o -L/home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3 -L/home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/lib -L/home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/lib test.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /home/walsimou/embtoolkit.git/tools-armel-linux-arm920t/bin/../lib/gcc/armel-unknown-linux-gnueabi/4.7.3/crtend.o /home/walsimou/embtoolkit.git/sysroot-armel-linux-arm920t/usr/lib/crtn.o ----- CLANG/LLVM-3.2 assembly out-------- .syntax unified .eabi_attribute 6, 2 .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute 23, 3 .eabi_attribute 24, 1 .eabi_attribute 25, 1 .file "test.ii" .text .globl main .align 2 .type main,%function main: push {r11, lr} mov r11, sp sub sp, sp, #24 mov r0, #0 str r0, [r11, #-4] mov r1, #4 str r0, [sp, #4] mov r0, r1 bl __cxa_allocate_exception mov r1, #20 str r1, [r0] ldr r1, .LCPI0_0 ldr r2, [sp, #4] bl __cxa_throw .align 2 .LCPI0_0: .long _ZTIi .Ltmp0: .size main, .Ltmp0-main .type .L.str,%object .section .rodata.str1.1,"aMS",%progbits,1 .L.str: .asciz "Exception Nr %d occurred\n" .size .L.str, 26 ----- GCC assembly output -------- .cpu arm920t .fpu softvfp .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute 23, 3 .eabi_attribute 24, 1 .eabi_attribute 25, 1 .eabi_attribute 26, 2 .eabi_attribute 30, 6 .eabi_attribute 34, 0 .eabi_attribute 18, 4 .file "test.cpp" .section .rodata .align 2 .LC0: .ascii "Exception Nr %d occurred\012\000" .text .align 2 .global main .type main, %function main: .fnstart .LFB6: @ Function supports interworking. @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 stmfd sp!, {fp, lr} .save {fp, lr} .setfp fp, sp, #4 add fp, sp, #4 .pad #8 sub sp, sp, #8 mov r0, #4 bl __cxa_allocate_exception mov r3, r0 mov r2, #20 str r2, [r3, #0] mov r0, r3 ldr r1, .L9 mov r2, #0 .LEHB0: bl __cxa_throw .LEHE0: .L8: bl __cxa_end_catch .LEHB1: bl __cxa_end_cleanup .L7: mov r3, r0 mov r2, r1 cmp r2, #1 beq .L6 bl __cxa_end_cleanup .LEHE1: .L6: mov r0, r3 bl __cxa_begin_catch mov r3, r0 ldr r3, [r3, #0] str r3, [fp, #-8] ldr r0, .L9+4 ldr r1, [fp, #-8] .LEHB2: bl printf .LEHE2: bl __cxa_end_catch mov r3, #0 mov r0, r3 sub sp, fp, #4 ldmfd sp!, {fp, lr} bx lr .L10: .align 2 .L9: .word _ZTIi .word .LC0 .global __gxx_personality_v0 .personality __gxx_personality_v0 .handlerdata .align 2 .LLSDA6: .byte 0xff .byte 0 .uleb128 .LLSDATT6-.LLSDATTD6 .LLSDATTD6: .byte 0x1 .uleb128 .LLSDACSE6-.LLSDACSB6 .LLSDACSB6: .uleb128 .LEHB0-.LFB6 .uleb128 .LEHE0-.LEHB0 .uleb128 .L7-.LFB6 .uleb128 0x1 .uleb128 .LEHB1-.LFB6 .uleb128 .LEHE1-.LEHB1 .uleb128 0 .uleb128 0 .uleb128 .LEHB2-.LFB6 .uleb128 .LEHE2-.LEHB2 .uleb128 .L8-.LFB6 .uleb128 0 .LLSDACSE6: .byte 0x1 .byte 0 .align 2 .word _ZTIi(TARGET2) .LLSDATT6: .text .fnend .size main, .-main .ident "GCC: (embtoolkit-00149-g2857df9) 4.7.3 20121216 (prerelease)" .section .note.GNU-stack,"",%progbits
Anton Korobeynikov
2013-Feb-04 20:32 UTC
[LLVMdev] ARM c++ exceptions handling not working with clang/llvm-3.2?
> am I wrong or the ARM c++ exceptions handling does not work?Yes, it's still work-in-progress option disabled by default. You might want to give it a try via special cmdline line -mllvm -arm-enable-ehabi -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University
Abdoulaye Walsimou Gaye
2013-Feb-04 20:47 UTC
[LLVMdev] ARM c++ exceptions handling not working with clang/llvm-3.2?
On 02/04/2013 09:32 PM, Anton Korobeynikov wrote:>> am I wrong or the ARM c++ exceptions handling does not work? > Yes, it's still work-in-progress option disabled by default. You might > want to give it a try via special cmdline line -mllvm > -arm-enable-ehabiOhhh I see, thanks for the input!> -- > With best regards, Anton Korobeynikov > Faculty of Mathematics and Mechanics, Saint Petersburg State University
Seemingly Similar Threads
- [LLVMdev] [PATCH] [Embtk] [compiler-rt] ASAN: Add mips support
- [LLVMdev] [PATCH] [Embtk] [compiler-rt] ASAN: Add mips support
- [LLVMdev] Running cross compiled binaries for ARM on gem5
- [LLVMdev] ARM c++ exceptions handling not working with clang/llvm-3.2?
- [LLVMdev] ARM c++ exceptions handling not working with clang/llvm-3.2?