1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple armeb-eabi -mattr v7 -filetype obj -o - | llvm-objdump -s - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; ARM EHABI for big endian 4*9880d681SAndroid Build Coastguard Worker; This test case checks whether frame unwinding instructions are laid out in big endian format. 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; This is the LLVM assembly generated from following C++ code: 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; extern void foo(int); 9*9880d681SAndroid Build Coastguard Worker; void test(int a, int b) { 10*9880d681SAndroid Build Coastguard Worker; try { 11*9880d681SAndroid Build Coastguard Worker; foo(a); 12*9880d681SAndroid Build Coastguard Worker; } catch (...) { 13*9880d681SAndroid Build Coastguard Worker; foo(b); 14*9880d681SAndroid Build Coastguard Worker; } 15*9880d681SAndroid Build Coastguard Worker;} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine void @_Z4testii(i32 %a, i32 %b) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 18*9880d681SAndroid Build Coastguard Workerentry: 19*9880d681SAndroid Build Coastguard Worker invoke void @_Z3fooi(i32 %a) 20*9880d681SAndroid Build Coastguard Worker to label %try.cont unwind label %lpad 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerlpad: ; preds = %entry 23*9880d681SAndroid Build Coastguard Worker %0 = landingpad { i8*, i32 } 24*9880d681SAndroid Build Coastguard Worker catch i8* null 25*9880d681SAndroid Build Coastguard Worker %1 = extractvalue { i8*, i32 } %0, 0 26*9880d681SAndroid Build Coastguard Worker %2 = tail call i8* @__cxa_begin_catch(i8* %1) #2 27*9880d681SAndroid Build Coastguard Worker invoke void @_Z3fooi(i32 %b) 28*9880d681SAndroid Build Coastguard Worker to label %invoke.cont2 unwind label %lpad1 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerinvoke.cont2: ; preds = %lpad 31*9880d681SAndroid Build Coastguard Worker tail call void @__cxa_end_catch() 32*9880d681SAndroid Build Coastguard Worker br label %try.cont 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workertry.cont: ; preds = %entry, %invoke.cont2 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerlpad1: ; preds = %lpad 38*9880d681SAndroid Build Coastguard Worker %3 = landingpad { i8*, i32 } 39*9880d681SAndroid Build Coastguard Worker cleanup 40*9880d681SAndroid Build Coastguard Worker invoke void @__cxa_end_catch() 41*9880d681SAndroid Build Coastguard Worker to label %eh.resume unwind label %terminate.lpad 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workereh.resume: ; preds = %lpad1 44*9880d681SAndroid Build Coastguard Worker resume { i8*, i32 } %3 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerterminate.lpad: ; preds = %lpad1 47*9880d681SAndroid Build Coastguard Worker %4 = landingpad { i8*, i32 } 48*9880d681SAndroid Build Coastguard Worker catch i8* null 49*9880d681SAndroid Build Coastguard Worker %5 = extractvalue { i8*, i32 } %4, 0 50*9880d681SAndroid Build Coastguard Worker tail call void @__clang_call_terminate(i8* %5) #3 51*9880d681SAndroid Build Coastguard Worker unreachable 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdeclare void @_Z3fooi(i32) #0 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...) 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdeclare i8* @__cxa_begin_catch(i8*) 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdeclare void @__cxa_end_catch() 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline noreturn nounwind 63*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr hidden void @__clang_call_terminate(i8*) #1 { 64*9880d681SAndroid Build Coastguard Worker %2 = tail call i8* @__cxa_begin_catch(i8* %0) #2 65*9880d681SAndroid Build Coastguard Worker tail call void @_ZSt9terminatev() #3 66*9880d681SAndroid Build Coastguard Worker unreachable 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdeclare void @_ZSt9terminatev() 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Contents of section .ARM.extab: 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: 0000 00000000 00a8b0b0 73*9880d681SAndroid Build Coastguard Worker 74