| /* ----------------------------------------------------------------------- |
| sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima |
| |
| SuperH Foreign Function Interface |
| |
| Permission is hereby granted, free of charge, to any person obtaining |
| a copy of this software and associated documentation files (the |
| ``Software''), to deal in the Software without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sublicense, and/or sell copies of the Software, and to |
| permit persons to whom the Software is furnished to do so, subject to |
| the following conditions: |
| |
| The above copyright notice and this permission notice shall be included |
| in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR |
| ANY CLAIM, DAMAGES OR |
| OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
| ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
| OTHER DEALINGS IN THE SOFTWARE. |
| ----------------------------------------------------------------------- */ |
| |
| #define LIBFFI_ASM |
| #include <fficonfig.h> |
| #include <ffi.h> |
| #ifdef HAVE_MACHINE_ASM_H |
| #include <machine/asm.h> |
| #else |
| /* XXX these lose for some platforms, I'm sure. */ |
| #define CNAME(x) x |
| #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): |
| #endif |
| |
| #if defined(__HITACHI__) |
| #define STRUCT_VALUE_ADDRESS_WITH_ARG 1 |
| #else |
| #define STRUCT_VALUE_ADDRESS_WITH_ARG 0 |
| #endif |
| |
| .text |
| |
| # r4: ffi_prep_args |
| # r5: &ecif |
| # r6: bytes |
| # r7: flags |
| # sp+0: rvalue |
| # sp+4: fn |
| |
| # This assumes we are using gas. |
| ENTRY(ffi_call_SYSV) |
| # Save registers |
| .LFB1: |
| mov.l r8,@-r15 |
| .LCFI0: |
| mov.l r9,@-r15 |
| .LCFI1: |
| mov.l r10,@-r15 |
| .LCFI2: |
| mov.l r12,@-r15 |
| .LCFI3: |
| mov.l r14,@-r15 |
| .LCFI4: |
| sts.l pr,@-r15 |
| .LCFI5: |
| mov r15,r14 |
| .LCFI6: |
| #if defined(__SH4__) |
| mov r6,r8 |
| mov r7,r9 |
| |
| sub r6,r15 |
| add #-16,r15 |
| mov #~7,r0 |
| and r0,r15 |
| |
| mov r4,r0 |
| jsr @r0 |
| mov r15,r4 |
| |
| mov r9,r1 |
| shlr8 r9 |
| shlr8 r9 |
| shlr8 r9 |
| |
| mov #FFI_TYPE_STRUCT,r2 |
| cmp/eq r2,r9 |
| bf 1f |
| #if STRUCT_VALUE_ADDRESS_WITH_ARG |
| mov.l @r15+,r4 |
| bra 2f |
| mov #5,r2 |
| #else |
| mov.l @r15+,r10 |
| #endif |
| 1: |
| mov #4,r2 |
| 2: |
| mov #4,r3 |
| |
| L_pass: |
| cmp/pl r8 |
| bf L_call_it |
| |
| mov r1,r0 |
| and #3,r0 |
| |
| L_pass_d: |
| cmp/eq #FFI_TYPE_DOUBLE,r0 |
| bf L_pass_f |
| |
| mov r3,r0 |
| and #1,r0 |
| tst r0,r0 |
| bt 1f |
| add #1,r3 |
| 1: |
| mov #12,r0 |
| cmp/hs r0,r3 |
| bt/s 3f |
| shlr2 r1 |
| bsr L_pop_d |
| nop |
| 3: |
| add #2,r3 |
| bra L_pass |
| add #-8,r8 |
| |
| L_pop_d: |
| mov r3,r0 |
| add r0,r0 |
| add r3,r0 |
| add #-12,r0 |
| braf r0 |
| nop |
| #ifdef __LITTLE_ENDIAN__ |
| fmov.s @r15+,fr5 |
| rts |
| fmov.s @r15+,fr4 |
| fmov.s @r15+,fr7 |
| rts |
| fmov.s @r15+,fr6 |
| fmov.s @r15+,fr9 |
| rts |
| fmov.s @r15+,fr8 |
| fmov.s @r15+,fr11 |
| rts |
| fmov.s @r15+,fr10 |
| #else |
| fmov.s @r15+,fr4 |
| rts |
| fmov.s @r15+,fr5 |
| fmov.s @r15+,fr6 |
| rts |
| fmov.s @r15+,fr7 |
| fmov.s @r15+,fr8 |
| rts |
| fmov.s @r15+,fr9 |
| fmov.s @r15+,fr10 |
| rts |
| fmov.s @r15+,fr11 |
| #endif |
| |
| L_pass_f: |
| cmp/eq #FFI_TYPE_FLOAT,r0 |
| bf L_pass_i |
| |
| mov #12,r0 |
| cmp/hs r0,r3 |
| bt/s 2f |
| shlr2 r1 |
| bsr L_pop_f |
| nop |
| 2: |
| add #1,r3 |
| bra L_pass |
| add #-4,r8 |
| |
| L_pop_f: |
| mov r3,r0 |
| shll2 r0 |
| add #-16,r0 |
| braf r0 |
| nop |
| #ifdef __LITTLE_ENDIAN__ |
| rts |
| fmov.s @r15+,fr5 |
| rts |
| fmov.s @r15+,fr4 |
| rts |
| fmov.s @r15+,fr7 |
| rts |
| fmov.s @r15+,fr6 |
| rts |
| fmov.s @r15+,fr9 |
| rts |
| fmov.s @r15+,fr8 |
| rts |
| fmov.s @r15+,fr11 |
| rts |
| fmov.s @r15+,fr10 |
| #else |
| rts |
| fmov.s @r15+,fr4 |
| rts |
| fmov.s @r15+,fr5 |
| rts |
| fmov.s @r15+,fr6 |
| rts |
| fmov.s @r15+,fr7 |
| rts |
| fmov.s @r15+,fr8 |
| rts |
| fmov.s @r15+,fr9 |
| rts |
| fmov.s @r15+,fr10 |
| rts |
| fmov.s @r15+,fr11 |
| #endif |
| |
| L_pass_i: |
| cmp/eq #FFI_TYPE_INT,r0 |
| bf L_call_it |
| |
| mov #8,r0 |
| cmp/hs r0,r2 |
| bt/s 2f |
| shlr2 r1 |
| bsr L_pop_i |
| nop |
| 2: |
| add #1,r2 |
| bra L_pass |
| add #-4,r8 |
| |
| L_pop_i: |
| mov r2,r0 |
| shll2 r0 |
| add #-16,r0 |
| braf r0 |
| nop |
| rts |
| mov.l @r15+,r4 |
| rts |
| mov.l @r15+,r5 |
| rts |
| mov.l @r15+,r6 |
| rts |
| mov.l @r15+,r7 |
| |
| L_call_it: |
| # call function |
| #if (! STRUCT_VALUE_ADDRESS_WITH_ARG) |
| mov r10, r2 |
| #endif |
| mov.l @(28,r14),r1 |
| jsr @r1 |
| nop |
| |
| L_ret_d: |
| mov #FFI_TYPE_DOUBLE,r2 |
| cmp/eq r2,r9 |
| bf L_ret_ll |
| |
| mov.l @(24,r14),r1 |
| #ifdef __LITTLE_ENDIAN__ |
| fmov.s fr1,@r1 |
| add #4,r1 |
| bra L_epilogue |
| fmov.s fr0,@r1 |
| #else |
| fmov.s fr0,@r1 |
| add #4,r1 |
| bra L_epilogue |
| fmov.s fr1,@r1 |
| #endif |
| |
| L_ret_ll: |
| mov #FFI_TYPE_SINT64,r2 |
| cmp/eq r2,r9 |
| bt/s 1f |
| mov #FFI_TYPE_UINT64,r2 |
| cmp/eq r2,r9 |
| bf L_ret_f |
| |
| 1: |
| mov.l @(24,r14),r2 |
| mov.l r0,@r2 |
| bra L_epilogue |
| mov.l r1,@(4,r2) |
| |
| L_ret_f: |
| mov #FFI_TYPE_FLOAT,r2 |
| cmp/eq r2,r9 |
| bf L_ret_i |
| |
| mov.l @(24,r14),r1 |
| bra L_epilogue |
| fmov.s fr0,@r1 |
| |
| L_ret_i: |
| mov #FFI_TYPE_INT,r2 |
| cmp/eq r2,r9 |
| bf L_epilogue |
| |
| mov.l @(24,r14),r1 |
| bra L_epilogue |
| mov.l r0,@r1 |
| |
| L_epilogue: |
| # Remove the space we pushed for the args |
| mov r14,r15 |
| |
| lds.l @r15+,pr |
| mov.l @r15+,r14 |
| mov.l @r15+,r12 |
| mov.l @r15+,r10 |
| mov.l @r15+,r9 |
| rts |
| mov.l @r15+,r8 |
| #else |
| mov r6,r8 |
| mov r7,r9 |
| |
| sub r6,r15 |
| add #-16,r15 |
| mov #~7,r0 |
| and r0,r15 |
| |
| mov r4,r0 |
| jsr @r0 |
| mov r15,r4 |
| |
| mov r9,r3 |
| shlr8 r9 |
| shlr8 r9 |
| shlr8 r9 |
| |
| mov #FFI_TYPE_STRUCT,r2 |
| cmp/eq r2,r9 |
| bf 1f |
| #if STRUCT_VALUE_ADDRESS_WITH_ARG |
| mov.l @r15+,r4 |
| bra 2f |
| mov #5,r2 |
| #else |
| mov.l @r15+,r10 |
| #endif |
| 1: |
| mov #4,r2 |
| 2: |
| |
| L_pass: |
| cmp/pl r8 |
| bf L_call_it |
| |
| mov r3,r0 |
| and #3,r0 |
| |
| L_pass_d: |
| cmp/eq #FFI_TYPE_DOUBLE,r0 |
| bf L_pass_i |
| |
| mov r15,r0 |
| and #7,r0 |
| tst r0,r0 |
| bt 1f |
| add #4,r15 |
| 1: |
| mov #8,r0 |
| cmp/hs r0,r2 |
| bt/s 2f |
| shlr2 r3 |
| bsr L_pop_d |
| nop |
| 2: |
| add #2,r2 |
| bra L_pass |
| add #-8,r8 |
| |
| L_pop_d: |
| mov r2,r0 |
| add r0,r0 |
| add r2,r0 |
| add #-12,r0 |
| add r0,r0 |
| braf r0 |
| nop |
| mov.l @r15+,r4 |
| rts |
| mov.l @r15+,r5 |
| mov.l @r15+,r5 |
| rts |
| mov.l @r15+,r6 |
| mov.l @r15+,r6 |
| rts |
| mov.l @r15+,r7 |
| rts |
| mov.l @r15+,r7 |
| |
| L_pass_i: |
| cmp/eq #FFI_TYPE_INT,r0 |
| bf L_call_it |
| |
| mov #8,r0 |
| cmp/hs r0,r2 |
| bt/s 2f |
| shlr2 r3 |
| bsr L_pop_i |
| nop |
| 2: |
| add #1,r2 |
| bra L_pass |
| add #-4,r8 |
| |
| L_pop_i: |
| mov r2,r0 |
| shll2 r0 |
| add #-16,r0 |
| braf r0 |
| nop |
| rts |
| mov.l @r15+,r4 |
| rts |
| mov.l @r15+,r5 |
| rts |
| mov.l @r15+,r6 |
| rts |
| mov.l @r15+,r7 |
| |
| L_call_it: |
| # call function |
| #if (! STRUCT_VALUE_ADDRESS_WITH_ARG) |
| mov r10, r2 |
| #endif |
| mov.l @(28,r14),r1 |
| jsr @r1 |
| nop |
| |
| L_ret_d: |
| mov #FFI_TYPE_DOUBLE,r2 |
| cmp/eq r2,r9 |
| bf L_ret_ll |
| |
| mov.l @(24,r14),r2 |
| mov.l r0,@r2 |
| bra L_epilogue |
| mov.l r1,@(4,r2) |
| |
| L_ret_ll: |
| mov #FFI_TYPE_SINT64,r2 |
| cmp/eq r2,r9 |
| bt/s 1f |
| mov #FFI_TYPE_UINT64,r2 |
| cmp/eq r2,r9 |
| bf L_ret_i |
| |
| 1: |
| mov.l @(24,r14),r2 |
| mov.l r0,@r2 |
| bra L_epilogue |
| mov.l r1,@(4,r2) |
| |
| L_ret_i: |
| mov #FFI_TYPE_FLOAT,r2 |
| cmp/eq r2,r9 |
| bt 1f |
| mov #FFI_TYPE_INT,r2 |
| cmp/eq r2,r9 |
| bf L_epilogue |
| 1: |
| mov.l @(24,r14),r1 |
| bra L_epilogue |
| mov.l r0,@r1 |
| |
| L_epilogue: |
| # Remove the space we pushed for the args |
| mov r14,r15 |
| |
| lds.l @r15+,pr |
| mov.l @r15+,r14 |
| mov.l @r15+,r12 |
| mov.l @r15+,r10 |
| mov.l @r15+,r9 |
| rts |
| mov.l @r15+,r8 |
| #endif |
| .LFE1: |
| .ffi_call_SYSV_end: |
| .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) |
| |
| .globl ffi_closure_helper_SYSV |
| |
| ENTRY(ffi_closure_SYSV) |
| .LFB2: |
| mov.l r7,@-r15 |
| .LCFI7: |
| mov.l r6,@-r15 |
| .LCFI8: |
| mov.l r5,@-r15 |
| .LCFI9: |
| mov.l r4,@-r15 |
| .LCFIA: |
| mov.l r14,@-r15 |
| .LCFIB: |
| sts.l pr,@-r15 |
| |
| /* Stack layout: |
| xx bytes (on stack parameters) |
| 16 bytes (register parameters) |
| 4 bytes (saved frame pointer) |
| 4 bytes (saved return address) |
| 32 bytes (floating register parameters, SH-4 only) |
| 8 bytes (result) |
| 4 bytes (pad) |
| 4 bytes (5th arg) |
| <- new stack pointer |
| */ |
| .LCFIC: |
| #if defined(__SH4__) |
| add #-48,r15 |
| #else |
| add #-16,r15 |
| #endif |
| .LCFID: |
| mov r15,r14 |
| .LCFIE: |
| |
| #if defined(__SH4__) |
| mov r14,r1 |
| add #48,r1 |
| #ifdef __LITTLE_ENDIAN__ |
| fmov.s fr10,@-r1 |
| fmov.s fr11,@-r1 |
| fmov.s fr8,@-r1 |
| fmov.s fr9,@-r1 |
| fmov.s fr6,@-r1 |
| fmov.s fr7,@-r1 |
| fmov.s fr4,@-r1 |
| fmov.s fr5,@-r1 |
| #else |
| fmov.s fr11,@-r1 |
| fmov.s fr10,@-r1 |
| fmov.s fr9,@-r1 |
| fmov.s fr8,@-r1 |
| fmov.s fr7,@-r1 |
| fmov.s fr6,@-r1 |
| fmov.s fr5,@-r1 |
| fmov.s fr4,@-r1 |
| #endif |
| mov r1,r7 |
| mov r14,r6 |
| add #56,r6 |
| #else |
| mov r14,r6 |
| add #24,r6 |
| #endif |
| |
| bt/s 10f |
| mov r2, r5 |
| mov r14,r1 |
| add #8,r1 |
| mov r1,r5 |
| 10: |
| |
| mov r14,r1 |
| #if defined(__SH4__) |
| add #72,r1 |
| #else |
| add #40,r1 |
| #endif |
| mov.l r1,@r14 |
| |
| #ifdef PIC |
| mov.l L_got,r1 |
| mova L_got,r0 |
| add r0,r1 |
| mov.l L_helper,r0 |
| add r1,r0 |
| #else |
| mov.l L_helper,r0 |
| #endif |
| jsr @r0 |
| mov r3,r4 |
| |
| shll r0 |
| mov r0,r1 |
| mova L_table,r0 |
| add r1,r0 |
| mov.w @r0,r0 |
| mov r14,r2 |
| braf r0 |
| add #8,r2 |
| 0: |
| .align 2 |
| #ifdef PIC |
| L_got: |
| .long _GLOBAL_OFFSET_TABLE_ |
| L_helper: |
| .long ffi_closure_helper_SYSV@GOTOFF |
| #else |
| L_helper: |
| .long ffi_closure_helper_SYSV |
| #endif |
| L_table: |
| .short L_case_v - 0b /* FFI_TYPE_VOID */ |
| .short L_case_i - 0b /* FFI_TYPE_INT */ |
| #if defined(__SH4__) |
| .short L_case_f - 0b /* FFI_TYPE_FLOAT */ |
| .short L_case_d - 0b /* FFI_TYPE_DOUBLE */ |
| .short L_case_d - 0b /* FFI_TYPE_LONGDOUBLE */ |
| #else |
| .short L_case_i - 0b /* FFI_TYPE_FLOAT */ |
| .short L_case_ll - 0b /* FFI_TYPE_DOUBLE */ |
| .short L_case_ll - 0b /* FFI_TYPE_LONGDOUBLE */ |
| #endif |
| .short L_case_uq - 0b /* FFI_TYPE_UINT8 */ |
| .short L_case_q - 0b /* FFI_TYPE_SINT8 */ |
| .short L_case_uh - 0b /* FFI_TYPE_UINT16 */ |
| .short L_case_h - 0b /* FFI_TYPE_SINT16 */ |
| .short L_case_i - 0b /* FFI_TYPE_UINT32 */ |
| .short L_case_i - 0b /* FFI_TYPE_SINT32 */ |
| .short L_case_ll - 0b /* FFI_TYPE_UINT64 */ |
| .short L_case_ll - 0b /* FFI_TYPE_SINT64 */ |
| .short L_case_v - 0b /* FFI_TYPE_STRUCT */ |
| .short L_case_i - 0b /* FFI_TYPE_POINTER */ |
| |
| #if defined(__SH4__) |
| L_case_d: |
| #ifdef __LITTLE_ENDIAN__ |
| fmov.s @r2+,fr1 |
| bra L_case_v |
| fmov.s @r2,fr0 |
| #else |
| fmov.s @r2+,fr0 |
| bra L_case_v |
| fmov.s @r2,fr1 |
| #endif |
| |
| L_case_f: |
| bra L_case_v |
| fmov.s @r2,fr0 |
| #endif |
| |
| L_case_ll: |
| mov.l @r2+,r0 |
| bra L_case_v |
| mov.l @r2,r1 |
| |
| L_case_i: |
| bra L_case_v |
| mov.l @r2,r0 |
| |
| L_case_q: |
| #ifdef __LITTLE_ENDIAN__ |
| #else |
| add #3,r2 |
| #endif |
| bra L_case_v |
| mov.b @r2,r0 |
| |
| L_case_uq: |
| #ifdef __LITTLE_ENDIAN__ |
| #else |
| add #3,r2 |
| #endif |
| mov.b @r2,r0 |
| bra L_case_v |
| extu.b r0,r0 |
| |
| L_case_h: |
| #ifdef __LITTLE_ENDIAN__ |
| #else |
| add #2,r2 |
| #endif |
| bra L_case_v |
| mov.w @r2,r0 |
| |
| L_case_uh: |
| #ifdef __LITTLE_ENDIAN__ |
| #else |
| add #2,r2 |
| #endif |
| mov.w @r2,r0 |
| extu.w r0,r0 |
| /* fall through */ |
| |
| L_case_v: |
| #if defined(__SH4__) |
| add #48,r15 |
| #else |
| add #16,r15 |
| #endif |
| lds.l @r15+,pr |
| mov.l @r15+,r14 |
| rts |
| add #16,r15 |
| .LFE2: |
| .ffi_closure_SYSV_end: |
| .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) |
| |
| #if defined __ELF__ && defined __linux__ |
| .section .note.GNU-stack,"",@progbits |
| #endif |
| |
| .section ".eh_frame","aw",@progbits |
| __FRAME_BEGIN__: |
| .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ |
| .LSCIE1: |
| .4byte 0x0 /* CIE Identifier Tag */ |
| .byte 0x1 /* CIE Version */ |
| #ifdef PIC |
| .ascii "zR\0" /* CIE Augmentation */ |
| #else |
| .byte 0x0 /* CIE Augmentation */ |
| #endif |
| .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ |
| .byte 0x7c /* sleb128 -4; CIE Data Alignment Factor */ |
| .byte 0x11 /* CIE RA Column */ |
| #ifdef PIC |
| .uleb128 0x1 /* Augmentation size */ |
| .byte 0x10 /* FDE Encoding (pcrel) */ |
| #endif |
| .byte 0xc /* DW_CFA_def_cfa */ |
| .byte 0xf /* uleb128 0xf */ |
| .byte 0x0 /* uleb128 0x0 */ |
| .align 2 |
| .LECIE1: |
| .LSFDE1: |
| .4byte .LEFDE1-.LASFDE1 /* FDE Length */ |
| .LASFDE1: |
| .4byte .LASFDE1-__FRAME_BEGIN__ /* FDE CIE offset */ |
| #ifdef PIC |
| .4byte .LFB1-. /* FDE initial location */ |
| #else |
| .4byte .LFB1 /* FDE initial location */ |
| #endif |
| .4byte .LFE1-.LFB1 /* FDE address range */ |
| #ifdef PIC |
| .uleb128 0x0 /* Augmentation size */ |
| #endif |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI0-.LFB1 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x4 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI1-.LCFI0 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x8 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI2-.LCFI1 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0xc /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI3-.LCFI2 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x10 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI4-.LCFI3 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x14 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI5-.LCFI4 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x18 /* uleb128 0x4 */ |
| .byte 0x91 /* DW_CFA_offset, column 0x11 */ |
| .byte 0x6 /* uleb128 0x6 */ |
| .byte 0x8e /* DW_CFA_offset, column 0xe */ |
| .byte 0x5 /* uleb128 0x5 */ |
| .byte 0x8c /* DW_CFA_offset, column 0xc */ |
| .byte 0x4 /* uleb128 0x4 */ |
| .byte 0x8a /* DW_CFA_offset, column 0xa */ |
| .byte 0x3 /* uleb128 0x3 */ |
| .byte 0x89 /* DW_CFA_offset, column 0x9 */ |
| .byte 0x2 /* uleb128 0x2 */ |
| .byte 0x88 /* DW_CFA_offset, column 0x8 */ |
| .byte 0x1 /* uleb128 0x1 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI6-.LCFI5 |
| .byte 0xd /* DW_CFA_def_cfa_register */ |
| .byte 0xe /* uleb128 0xe */ |
| .align 2 |
| .LEFDE1: |
| |
| .LSFDE3: |
| .4byte .LEFDE3-.LASFDE3 /* FDE Length */ |
| .LASFDE3: |
| .4byte .LASFDE3-__FRAME_BEGIN__ /* FDE CIE offset */ |
| #ifdef PIC |
| .4byte .LFB2-. /* FDE initial location */ |
| #else |
| .4byte .LFB2 /* FDE initial location */ |
| #endif |
| .4byte .LFE2-.LFB2 /* FDE address range */ |
| #ifdef PIC |
| .uleb128 0x0 /* Augmentation size */ |
| #endif |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI7-.LFB2 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x4 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI8-.LCFI7 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x8 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFI9-.LCFI8 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0xc /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFIA-.LCFI9 |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x10 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFIB-.LCFIA |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x14 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFIC-.LCFIB |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| .byte 0x18 /* uleb128 0x4 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFID-.LCFIC |
| .byte 0xe /* DW_CFA_def_cfa_offset */ |
| #if defined(__SH4__) |
| .byte 24+48 /* uleb128 24+48 */ |
| #else |
| .byte 24+16 /* uleb128 24+16 */ |
| #endif |
| .byte 0x91 /* DW_CFA_offset, column 0x11 */ |
| .byte 0x6 /* uleb128 0x6 */ |
| .byte 0x8e /* DW_CFA_offset, column 0xe */ |
| .byte 0x5 /* uleb128 0x5 */ |
| .byte 0x84 /* DW_CFA_offset, column 0x4 */ |
| .byte 0x4 /* uleb128 0x4 */ |
| .byte 0x85 /* DW_CFA_offset, column 0x5 */ |
| .byte 0x3 /* uleb128 0x3 */ |
| .byte 0x86 /* DW_CFA_offset, column 0x6 */ |
| .byte 0x2 /* uleb128 0x2 */ |
| .byte 0x87 /* DW_CFA_offset, column 0x7 */ |
| .byte 0x1 /* uleb128 0x1 */ |
| .byte 0x4 /* DW_CFA_advance_loc4 */ |
| .4byte .LCFIE-.LCFID |
| .byte 0xd /* DW_CFA_def_cfa_register */ |
| .byte 0xe /* uleb128 0xe */ |
| .align 2 |
| .LEFDE3: |