851 lines
14 KiB
ArmAsm
851 lines
14 KiB
ArmAsm
/* -----------------------------------------------------------------------
|
|
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:
|