mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-26 07:55:01 +00:00
Add CFI start/end proc directives to arm64, i386, and ppc
Follow-up to r353959 and r368070: do the same for other architectures. arm32 already seems to use its own .fnstart/.fnend directives, which appear to be ARM-specific variants of the same thing. Likewise, MIPS uses .frame directives. Reviewed by: arichardson Differential Revision: https://reviews.freebsd.org/D27387
This commit is contained in:
parent
ac4dd4cd95
commit
78599c32ef
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=368354
@ -58,7 +58,8 @@ ENTRY(__sys_##name); \
|
||||
WEAK_REFERENCE(__sys_##name, _##name); \
|
||||
_SYSCALL(name); \
|
||||
bnslr; \
|
||||
b CNAME(HIDENAME(cerror))
|
||||
b CNAME(HIDENAME(cerror)); \
|
||||
END(__sys_##name)
|
||||
|
||||
#define RSYSCALL(name) \
|
||||
.text; \
|
||||
@ -68,4 +69,5 @@ ENTRY(__sys_##name); \
|
||||
WEAK_REFERENCE(__sys_##name, _##name); \
|
||||
_SYSCALL(name); \
|
||||
bnslr; \
|
||||
b CNAME(HIDENAME(cerror))
|
||||
b CNAME(HIDENAME(cerror)); \
|
||||
END(__sys_##name)
|
||||
|
@ -74,7 +74,8 @@ ENTRY(__sys_##name); \
|
||||
addi %r1,%r1,48; \
|
||||
ld %r0,16(%r1); \
|
||||
mtlr %r0; \
|
||||
blr;
|
||||
blr; \
|
||||
END(__sys_##name)
|
||||
|
||||
#define RSYSCALL(name) \
|
||||
.text; \
|
||||
@ -93,4 +94,5 @@ ENTRY(__sys_##name); \
|
||||
addi %r1,%r1,48; \
|
||||
ld %r0,16(%r1); \
|
||||
mtlr %r0; \
|
||||
blr;
|
||||
blr; \
|
||||
END(__sys_##name)
|
||||
|
@ -56,5 +56,6 @@ ENTRY_NOPROF(HIDENAME(cerror))
|
||||
li %r3,-1
|
||||
li %r4,-1
|
||||
blr
|
||||
END(HIDENAME(cerror))
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -31,7 +31,10 @@
|
||||
|
||||
#define SYSCALL_ERR(x) \
|
||||
ENTRY(__CONCAT(x, _err)); \
|
||||
mov __CONCAT($SYS_,x),%eax; int $0x80; ret
|
||||
mov __CONCAT($SYS_,x),%eax; \
|
||||
int $0x80; \
|
||||
ret; \
|
||||
END(__CONCAT(x, _err))
|
||||
|
||||
SYSCALL_ERR(_umtx_op)
|
||||
|
||||
|
@ -13,5 +13,6 @@ ENTRY(logf)
|
||||
flds 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(logf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -46,5 +46,6 @@ ENTRY(remainderl)
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(remainderl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -40,5 +40,6 @@ ENTRY(sqrtl)
|
||||
fldt 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
END(sqrtl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -34,5 +34,6 @@ ENTRY(llrintl)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
END(llrintl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -41,5 +41,6 @@ ENTRY(logbl)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
END(logbl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -33,5 +33,6 @@ ENTRY(lrintl)
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
END(lrintl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -61,5 +61,6 @@ ENTRY(remquol)
|
||||
movl 28(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
END(remquol)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -40,5 +40,6 @@ ENTRY(rintl)
|
||||
fldt 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
END(rintl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -55,7 +55,6 @@ END(.rtld_start)
|
||||
* x17 = &_rtld_bind_start
|
||||
*/
|
||||
ENTRY(_rtld_bind_start)
|
||||
.cfi_startproc
|
||||
mov x17, sp
|
||||
|
||||
/* Save frame pointer and SP */
|
||||
@ -114,7 +113,6 @@ ENTRY(_rtld_bind_start)
|
||||
|
||||
/* Call into the correct function */
|
||||
br x16
|
||||
.cfi_endproc
|
||||
END(_rtld_bind_start)
|
||||
|
||||
/*
|
||||
@ -128,10 +126,8 @@ END(_rtld_bind_start)
|
||||
* Resolver function for TLS symbols resolved at load time
|
||||
*/
|
||||
ENTRY(_rtld_tlsdesc_static)
|
||||
.cfi_startproc
|
||||
ldr x0, [x0, #8]
|
||||
ret
|
||||
.cfi_endproc
|
||||
END(_rtld_tlsdesc_static)
|
||||
|
||||
/*
|
||||
@ -140,7 +136,6 @@ END(_rtld_tlsdesc_static)
|
||||
* Resolver function for weak and undefined TLS symbols
|
||||
*/
|
||||
ENTRY(_rtld_tlsdesc_undef)
|
||||
.cfi_startproc
|
||||
str x1, [sp, #-16]!
|
||||
.cfi_adjust_cfa_offset 16
|
||||
|
||||
@ -150,7 +145,6 @@ ENTRY(_rtld_tlsdesc_undef)
|
||||
|
||||
ldr x1, [sp], #16
|
||||
.cfi_adjust_cfa_offset -16
|
||||
.cfi_endproc
|
||||
ret
|
||||
END(_rtld_tlsdesc_undef)
|
||||
|
||||
@ -160,8 +154,6 @@ END(_rtld_tlsdesc_undef)
|
||||
* Resolver function for TLS symbols from dlopen()
|
||||
*/
|
||||
ENTRY(_rtld_tlsdesc_dynamic)
|
||||
.cfi_startproc
|
||||
|
||||
/* Save registers used in fast path */
|
||||
stp x1, x2, [sp, #(-2 * 16)]!
|
||||
stp x3, x4, [sp, #(1 * 16)]
|
||||
@ -257,6 +249,5 @@ ENTRY(_rtld_tlsdesc_dynamic)
|
||||
ldp x3, x4, [sp, #16]
|
||||
ldp x1, x2, [sp], #(2 * 16)
|
||||
.cfi_adjust_cfa_offset -2 * 16
|
||||
.cfi_endproc
|
||||
ret
|
||||
END(_rtld_tlsdesc_dynamic)
|
||||
|
@ -101,6 +101,7 @@ _ENTRY(.rtld_start)
|
||||
|
||||
li %r0,1 /* _exit() */
|
||||
sc
|
||||
_END(.rtld_start)
|
||||
|
||||
#ifdef __SPE__
|
||||
/* stack space for 30 GPRs + SPEFSCR/ACC/lr/cr */
|
||||
@ -142,6 +143,7 @@ _ENTRY(_rtld_bind_secureplt_start)
|
||||
ori %r11,%r11,0x15555556@l
|
||||
mulhwu %r11,%r11,%r0 # get high half of multiplication
|
||||
b 1f
|
||||
_END(_rtld_bind_secureplt_start)
|
||||
|
||||
/*
|
||||
* _rtld_bind_start()
|
||||
@ -264,6 +266,7 @@ _ENTRY(_rtld_bind_start)
|
||||
|
||||
addi %r1,%r1,STACK_SIZE # restore stack
|
||||
bctr # jump to target
|
||||
_END(_rtld_bind_start)
|
||||
|
||||
|
||||
/*
|
||||
@ -284,6 +287,7 @@ _ENTRY(_rtld_powerpc_pltlongresolve)
|
||||
subf %r11,%r12,%r11 # reloff
|
||||
li %r12,2
|
||||
srw %r11,%r11,%r12 # index = reloff/sizeof(Elf_Addr)
|
||||
_END(_rtld_powerpc_pltlongresolve)
|
||||
_ENTRY(_rtld_powerpc_pltresolve)
|
||||
lis %r12,0 # lis 12,_rtld_bind_start@ha
|
||||
addi %r12,%r12,0 # addi 12,12,_rtld_bind_start@l
|
||||
@ -291,6 +295,7 @@ _ENTRY(_rtld_powerpc_pltresolve)
|
||||
lis %r12,0 # lis 12,obj@ha
|
||||
addi %r12,%r12,0 # addi 12,12,obj@l
|
||||
bctr
|
||||
_END(_rtld_powerpc_pltresolve)
|
||||
|
||||
/*
|
||||
* _rtld_powerpc_pltcall()
|
||||
@ -311,5 +316,6 @@ _ENTRY(_rtld_powerpc_pltcall)
|
||||
lwz %r11,0(%r11) # lwz 11,jmptab@l(11)
|
||||
mtctr %r11
|
||||
bctr # (*jmptab[index])()
|
||||
_END(_rtld_powerpc_pltcall)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -113,6 +113,7 @@ _ENTRY(_rtld_start)
|
||||
|
||||
li %r0,1 /* _exit() */
|
||||
sc
|
||||
_END(_rtld_start)
|
||||
|
||||
/*
|
||||
* _rtld_bind_start()
|
||||
@ -175,5 +176,6 @@ _ENTRY(_rtld_bind_start)
|
||||
mtlr %r0
|
||||
|
||||
bctr # jump to target
|
||||
_END(_rtld_bind_start)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -76,6 +76,7 @@ ASENTRY_NOPROF(_setjmp)
|
||||
/* f14-f31, fpscr */
|
||||
li 3, 0
|
||||
blr
|
||||
ASEND(_setjmp)
|
||||
|
||||
|
||||
.extern sigsetmask
|
||||
@ -113,3 +114,4 @@ ASENTRY_NOPROF(_longjmp)
|
||||
/* f14-f31, fpscr */
|
||||
mr 3, 4
|
||||
blr
|
||||
ASEND(_longjmp)
|
||||
|
@ -13,11 +13,13 @@ ENTRY(host_read)
|
||||
1:
|
||||
li %r3, 0
|
||||
blr
|
||||
END(host_read)
|
||||
|
||||
ENTRY(host_write)
|
||||
li %r0, 4 # SYS_write
|
||||
sc
|
||||
blr
|
||||
END(host_write)
|
||||
|
||||
ENTRY(host_seek)
|
||||
mr %r4,%r5
|
||||
@ -26,11 +28,13 @@ ENTRY(host_seek)
|
||||
li %r0, 140 # SYS_llseek
|
||||
sc
|
||||
blr
|
||||
END(host_seek)
|
||||
|
||||
ENTRY(host_llseek)
|
||||
li %r0, 140 # SYS_llseek
|
||||
sc
|
||||
blr
|
||||
END(host_llseek)
|
||||
|
||||
ENTRY(host_open)
|
||||
li %r0, 5 # SYS_open
|
||||
@ -40,45 +44,54 @@ ENTRY(host_open)
|
||||
1:
|
||||
li %r3, 0
|
||||
blr
|
||||
END(host_open)
|
||||
|
||||
ENTRY(host_close)
|
||||
li %r0, 6 # SYS_close
|
||||
sc
|
||||
blr
|
||||
END(host_close)
|
||||
|
||||
ENTRY(host_mmap)
|
||||
li %r0, 90 # SYS_mmap
|
||||
sc
|
||||
blr
|
||||
END(host_mmap)
|
||||
|
||||
ENTRY(host_uname)
|
||||
li %r0, 122 # SYS_uname
|
||||
sc
|
||||
blr
|
||||
END(host_uname)
|
||||
|
||||
ENTRY(host_gettimeofday)
|
||||
li %r0, 78 # SYS_gettimeofday
|
||||
sc
|
||||
blr
|
||||
END(host_gettimeofday)
|
||||
|
||||
ENTRY(host_select)
|
||||
li %r0, 142 # SYS_select
|
||||
sc
|
||||
blr
|
||||
END(host_select)
|
||||
|
||||
ENTRY(kexec_load)
|
||||
lis %r6,21 # KEXEC_ARCH_PPC64
|
||||
li %r0,268 # __NR_kexec_load
|
||||
sc
|
||||
blr
|
||||
END(kexec_load)
|
||||
|
||||
ENTRY(host_reboot)
|
||||
li %r0,88 # SYS_reboot
|
||||
sc
|
||||
blr
|
||||
END(host_reboot)
|
||||
|
||||
ENTRY(host_getdents)
|
||||
li %r0,141 # SYS_getdents
|
||||
sc
|
||||
blr
|
||||
END(host_getdents)
|
||||
|
||||
|
@ -85,6 +85,7 @@ ENTRY(syscall)
|
||||
lwz %r30, 12(%r1)
|
||||
mr %r1, %r11
|
||||
blr
|
||||
END(syscall)
|
||||
|
||||
/*
|
||||
* Data section
|
||||
|
@ -39,10 +39,11 @@
|
||||
#define _C_LABEL(x) x
|
||||
|
||||
#define ENTRY(sym) \
|
||||
.text; .globl sym; .align 2; .type sym,#function; sym:
|
||||
.text; .globl sym; .align 2; .type sym,#function; sym: \
|
||||
.cfi_startproc
|
||||
#define EENTRY(sym) \
|
||||
.globl sym; sym:
|
||||
#define END(sym) .size sym, . - sym
|
||||
#define END(sym) .cfi_endproc; .size sym, . - sym
|
||||
#define EEND(sym)
|
||||
|
||||
#define WEAK_REFERENCE(sym, alias) \
|
||||
|
@ -47,17 +47,21 @@ linux_platform:
|
||||
ENTRY(__kernel_rt_sigreturn)
|
||||
brk #0 /* LINUXTODO: implement __kernel_rt_sigreturn */
|
||||
ret
|
||||
END(__kernel_rt_sigreturn)
|
||||
|
||||
ENTRY(__kernel_gettimeofday)
|
||||
ldr x8, =LINUX_SYS_gettimeofday
|
||||
svc #0
|
||||
ret
|
||||
END(__kernel_gettimeofday)
|
||||
|
||||
ENTRY(__kernel_clock_gettime)
|
||||
ldr x8, =LINUX_SYS_linux_clock_gettime
|
||||
svc #0
|
||||
ret
|
||||
END(__kernel_clock_gettime)
|
||||
|
||||
ENTRY(__kernel_clock_getres)
|
||||
brk #0 /* LINUXTODO: implement __kernel_clock_getres */
|
||||
ret
|
||||
END(__kernel_clock_getres)
|
||||
|
@ -39,19 +39,24 @@
|
||||
ENTRY(futex_xchgl)
|
||||
brk #0
|
||||
ret
|
||||
END(futex_xchgl)
|
||||
|
||||
ENTRY(futex_addl)
|
||||
brk #0
|
||||
ret
|
||||
END(futex_addl)
|
||||
|
||||
ENTRY(futex_orl)
|
||||
brk #0
|
||||
ret
|
||||
END(futex_orl)
|
||||
|
||||
ENTRY(futex_andl)
|
||||
brk #0
|
||||
ret
|
||||
END(futex_andl)
|
||||
|
||||
ENTRY(futex_xorl)
|
||||
brk #0
|
||||
ret
|
||||
END(futex_xorl)
|
||||
|
@ -1354,8 +1354,7 @@ ENTRY(des_encrypt1)
|
||||
popl %edi
|
||||
popl %esi
|
||||
ret
|
||||
.L_des_encrypt1_end:
|
||||
.size _C_LABEL(des_encrypt1),.L_des_encrypt1_end-_C_LABEL(des_encrypt1)
|
||||
END(des_encrypt1)
|
||||
|
||||
ENTRY(des_encrypt2)
|
||||
pushl %esi
|
||||
@ -2573,8 +2572,7 @@ ENTRY(des_encrypt2)
|
||||
popl %edi
|
||||
popl %esi
|
||||
ret
|
||||
.L_des_encrypt2_end:
|
||||
.size _C_LABEL(des_encrypt2),.L_des_encrypt2_end-_C_LABEL(des_encrypt2)
|
||||
END(des_encrypt2)
|
||||
|
||||
ENTRY(des_encrypt3)
|
||||
pushl %ebx
|
||||
@ -2692,8 +2690,7 @@ ENTRY(des_encrypt3)
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
ret
|
||||
.L_des_encrypt3_end:
|
||||
.size _C_LABEL(des_encrypt3),.L_des_encrypt3_end-_C_LABEL(des_encrypt3)
|
||||
END(des_encrypt3)
|
||||
|
||||
ENTRY(des_decrypt3)
|
||||
pushl %ebx
|
||||
@ -2811,5 +2808,4 @@ ENTRY(des_decrypt3)
|
||||
popl %ebp
|
||||
popl %ebx
|
||||
ret
|
||||
.L_des_decrypt3_end:
|
||||
.size _C_LABEL(des_decrypt3),.L_des_decrypt3_end-_C_LABEL(des_decrypt3)
|
||||
END(des_decrypt3)
|
||||
|
@ -38,3 +38,4 @@ ENTRY(smapi32)
|
||||
|
||||
leave
|
||||
ret
|
||||
END(smapi32)
|
||||
|
@ -73,19 +73,30 @@
|
||||
#define _START_ENTRY .text; .p2align 2,0x90
|
||||
|
||||
#define _ENTRY(x) _START_ENTRY; \
|
||||
.globl CNAME(x); .type CNAME(x),@function; CNAME(x):
|
||||
#define END(x) .size x, . - x
|
||||
.globl CNAME(x); .type CNAME(x),@function; CNAME(x): \
|
||||
.cfi_startproc
|
||||
#define END(x) .cfi_endproc; .size x, . - x
|
||||
|
||||
#ifdef PROF
|
||||
#define ALTENTRY(x) _ENTRY(x); \
|
||||
pushl %ebp; movl %esp,%ebp; \
|
||||
pushl %ebp; \
|
||||
.cfi_def_cfa_offset 8; \
|
||||
.cfi_offset %ebp, -8; \
|
||||
movl %esp,%ebp; \
|
||||
call PIC_PLT(HIDENAME(mcount)); \
|
||||
popl %ebp; \
|
||||
.cfi_restore %ebp; \
|
||||
.cfi_def_cfa_offset 4; \
|
||||
jmp 9f
|
||||
#define ENTRY(x) _ENTRY(x); \
|
||||
pushl %ebp; movl %esp,%ebp; \
|
||||
pushl %ebp; \
|
||||
.cfi_def_cfa_offset 8; \
|
||||
.cfi_offset %ebp, -8; \
|
||||
movl %esp,%ebp; \
|
||||
call PIC_PLT(HIDENAME(mcount)); \
|
||||
popl %ebp; \
|
||||
.cfi_restore %ebp; \
|
||||
.cfi_def_cfa_offset 4; \
|
||||
9:
|
||||
#else
|
||||
#define ALTENTRY(x) _ENTRY(x)
|
||||
|
@ -13,3 +13,4 @@
|
||||
ENTRY(get_spr)
|
||||
mfspr %r3, 0
|
||||
blr
|
||||
END(get_spr)
|
||||
|
@ -203,6 +203,7 @@ _NAKED_ENTRY(__start)
|
||||
|
||||
/* Unreachable */
|
||||
b .
|
||||
_END(__start)
|
||||
|
||||
ASENTRY_NOPROF(__restartkernel_virtual)
|
||||
/*
|
||||
@ -254,6 +255,7 @@ ASENTRY_NOPROF(__restartkernel_virtual)
|
||||
addi %r14, %r14, 1
|
||||
cmpdi %r14, 16
|
||||
blt 1b
|
||||
ASEND(__restartkernel_virtual)
|
||||
|
||||
ASENTRY_NOPROF(__restartkernel)
|
||||
/*
|
||||
@ -270,5 +272,6 @@ ASENTRY_NOPROF(__restartkernel)
|
||||
rfid
|
||||
2: bl __start
|
||||
nop
|
||||
ASEND(__restartkernel)
|
||||
|
||||
#include <powerpc/aim/trap_subr64.S>
|
||||
|
@ -957,6 +957,7 @@ dbtrap:
|
||||
dbleave:
|
||||
FRAME_LEAVE(PC_DBSAVE)
|
||||
rfid
|
||||
ASEND(breakpoint)
|
||||
|
||||
/*
|
||||
* In case of KDB we want a separate trap catcher for it
|
||||
|
@ -834,6 +834,7 @@ ENTRY(dcache_inval)
|
||||
andi. %r3, %r3, L1CSR0_DCFI
|
||||
bne 1b
|
||||
blr
|
||||
END(dcache_inval)
|
||||
|
||||
ENTRY(dcache_disable)
|
||||
/* Disable d-cache */
|
||||
@ -846,6 +847,7 @@ ENTRY(dcache_disable)
|
||||
mtspr SPR_L1CSR0, %r3
|
||||
isync
|
||||
blr
|
||||
END(dcache_disable)
|
||||
|
||||
ENTRY(dcache_enable)
|
||||
/* Enable d-cache */
|
||||
@ -857,6 +859,7 @@ ENTRY(dcache_enable)
|
||||
mtspr SPR_L1CSR0, %r3
|
||||
isync
|
||||
blr
|
||||
END(dcache_enable)
|
||||
|
||||
ENTRY(icache_inval)
|
||||
/* Invalidate i-cache */
|
||||
@ -869,6 +872,7 @@ ENTRY(icache_inval)
|
||||
andi. %r3, %r3, L1CSR1_ICFI
|
||||
bne 1b
|
||||
blr
|
||||
END(icache_inval)
|
||||
|
||||
ENTRY(icache_disable)
|
||||
/* Disable i-cache */
|
||||
@ -880,6 +884,7 @@ ENTRY(icache_disable)
|
||||
mtspr SPR_L1CSR1, %r3
|
||||
isync
|
||||
blr
|
||||
END(icache_disable)
|
||||
|
||||
ENTRY(icache_enable)
|
||||
/* Enable i-cache */
|
||||
@ -890,6 +895,7 @@ ENTRY(icache_enable)
|
||||
mtspr SPR_L1CSR1, %r3
|
||||
isync
|
||||
blr
|
||||
END(icache_enable)
|
||||
|
||||
/*
|
||||
* L2 cache disable/enable/inval sequences for E500mc.
|
||||
@ -906,6 +912,7 @@ ENTRY(l2cache_inval)
|
||||
andis. %r3, %r3, L2CSR0_L2FI@h
|
||||
bne 1b
|
||||
blr
|
||||
END(l2cache_inval)
|
||||
|
||||
ENTRY(l2cache_enable)
|
||||
mfspr %r3, SPR_L2CSR0
|
||||
@ -914,6 +921,7 @@ ENTRY(l2cache_enable)
|
||||
mtspr SPR_L2CSR0, %r3
|
||||
isync
|
||||
blr
|
||||
END(l2cache_enable)
|
||||
|
||||
/*
|
||||
* Branch predictor setup.
|
||||
@ -929,6 +937,7 @@ ENTRY(bpred_enable)
|
||||
mtspr SPR_BUCSR, %r3
|
||||
isync
|
||||
blr
|
||||
END(bpred_enable)
|
||||
|
||||
/*
|
||||
* XXX: This should be moved to a shared AIM/booke asm file, if one ever is
|
||||
@ -938,6 +947,7 @@ ENTRY(get_spr)
|
||||
/* Note: The spr number is patched at runtime */
|
||||
mfspr %r3, 0
|
||||
blr
|
||||
END(get_spr)
|
||||
|
||||
/************************************************************************/
|
||||
/* Data section */
|
||||
|
@ -1097,6 +1097,7 @@ dbtrap:
|
||||
dbleave:
|
||||
FRAME_LEAVE(SPR_SRR0, SPR_SRR1)
|
||||
rfi
|
||||
ASEND(breakpoint)
|
||||
#endif /* KDB */
|
||||
|
||||
#ifdef SMP
|
||||
@ -1111,6 +1112,7 @@ ENTRY(tlb_lock)
|
||||
isync
|
||||
msync
|
||||
blr
|
||||
END(tlb_lock)
|
||||
|
||||
ENTRY(tlb_unlock)
|
||||
isync
|
||||
@ -1120,6 +1122,7 @@ ENTRY(tlb_unlock)
|
||||
isync
|
||||
msync
|
||||
blr
|
||||
END(tlb_unlock)
|
||||
|
||||
/*
|
||||
* TLB miss spin locks. For each CPU we have a reservation granule (32 bytes);
|
||||
|
@ -108,12 +108,13 @@
|
||||
.globl name; \
|
||||
.section ".opd","aw"; \
|
||||
.p2align 3; \
|
||||
name: \
|
||||
name: \
|
||||
.quad DOT_LABEL(name),.TOC.@tocbase,0; \
|
||||
.previous; \
|
||||
.p2align 4; \
|
||||
TYPE_ENTRY(name) \
|
||||
DOT_LABEL(name):
|
||||
DOT_LABEL(name): \
|
||||
.cfi_startproc
|
||||
#define _NAKED_ENTRY(name) _ENTRY(name)
|
||||
#else
|
||||
#define _ENTRY(name) \
|
||||
@ -122,6 +123,7 @@ DOT_LABEL(name):
|
||||
.globl name; \
|
||||
.type name,@function; \
|
||||
name: \
|
||||
.cfi_startproc; \
|
||||
addis %r2, %r12, (.TOC.-name)@ha; \
|
||||
addi %r2, %r2, (.TOC.-name)@l; \
|
||||
.localentry name, .-name;
|
||||
@ -133,10 +135,12 @@ name: \
|
||||
.globl name; \
|
||||
.type name,@function; \
|
||||
name: \
|
||||
.cfi_startproc; \
|
||||
.localentry name, .-name;
|
||||
#endif
|
||||
|
||||
#define _END(name) \
|
||||
.cfi_endproc; \
|
||||
.long 0; \
|
||||
.byte 0,0,0,0,0,0,0,0; \
|
||||
END_SIZE(name)
|
||||
@ -153,8 +157,11 @@ name: \
|
||||
.p2align 4; \
|
||||
.globl name; \
|
||||
.type name,@function; \
|
||||
name:
|
||||
#define _END(name)
|
||||
name: \
|
||||
.cfi_startproc
|
||||
#define _END(name) \
|
||||
.cfi_endproc; \
|
||||
.size name, . - name
|
||||
|
||||
#define _NAKED_ENTRY(name) _ENTRY(name)
|
||||
|
||||
@ -186,6 +193,7 @@ name: \
|
||||
# define _PROF_PROLOGUE
|
||||
#endif
|
||||
|
||||
#define ASEND(y) _END(ASMNAME(y))
|
||||
#define ASENTRY(y) _ENTRY(ASMNAME(y)); _PROF_PROLOGUE
|
||||
#define END(y) _END(CNAME(y))
|
||||
#define ENTRY(y) _ENTRY(CNAME(y)); _PROF_PROLOGUE
|
||||
|
@ -36,4 +36,4 @@ ASENTRY(mambocall)
|
||||
*/
|
||||
.long 0x000EAEB0
|
||||
blr
|
||||
|
||||
ASEND(mambocall)
|
||||
|
@ -120,6 +120,7 @@ ASENTRY(ofwcall)
|
||||
lwz %r0,4(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(ofwcall)
|
||||
|
||||
/*
|
||||
* RTAS Entry Point. Similar to the OF one, but simpler (no separate stack)
|
||||
@ -174,4 +175,4 @@ ASENTRY(rtascall)
|
||||
lwz %r0,4(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
|
||||
ASEND(rtascall)
|
||||
|
@ -216,6 +216,7 @@ ASENTRY_NOPROF(ofwcall)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(ofwcall)
|
||||
|
||||
/*
|
||||
* RTAS 32-bit Entry Point. Similar to the OF one, but simpler (no separate
|
||||
@ -380,4 +381,4 @@ ASENTRY_NOPROF(rtascall)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
|
||||
ASEND(rtascall)
|
||||
|
@ -129,4 +129,4 @@ ASENTRY(opal_call)
|
||||
|
||||
/* And return */
|
||||
blr
|
||||
|
||||
ASEND(opal_call)
|
||||
|
@ -96,3 +96,4 @@ power_save_sequence:
|
||||
bne 2b
|
||||
nap
|
||||
b .
|
||||
END(enter_idle_powerx)
|
||||
|
@ -75,6 +75,7 @@ ASENTRY_NOPROF(setjmp)
|
||||
/* f14-f31, fpscr */
|
||||
li 3, 0
|
||||
blr
|
||||
ASEND(setjmp)
|
||||
|
||||
|
||||
.extern sigsetmask
|
||||
@ -112,3 +113,4 @@ ASENTRY_NOPROF(longjmp)
|
||||
/* f14-f31, fpscr */
|
||||
mr 3, 4
|
||||
blr
|
||||
ASEND(longjmp)
|
||||
|
@ -73,9 +73,11 @@
|
||||
#endif
|
||||
|
||||
#ifdef AIM
|
||||
#define ENTRY_DIRECT(x) ENTRY(x ## _direct)
|
||||
#define ENTRY_DIRECT(x) ENTRY(x ## _direct)
|
||||
#define END_DIRECT(x) END(x ## _direct)
|
||||
#else
|
||||
#define ENTRY_DIRECT(x) ENTRY(x)
|
||||
#define END_DIRECT(x) END(x)
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc64__
|
||||
@ -320,6 +322,7 @@ ENTRY(bcopy_generic)
|
||||
/* done */
|
||||
.Lend:
|
||||
blr
|
||||
END(bcopy_generic)
|
||||
|
||||
/*
|
||||
* copyout(from_kernel, to_user, len)
|
||||
@ -332,6 +335,7 @@ ENTRY_DIRECT(copyout)
|
||||
nop
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(copyout)
|
||||
|
||||
/*
|
||||
* copyin(from_user, to_kernel, len)
|
||||
@ -344,6 +348,8 @@ ENTRY_DIRECT(copyin)
|
||||
nop
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(copyin)
|
||||
|
||||
/*
|
||||
* copyinstr(const void *udaddr, void *kaddr, size_t len, size_t *done)
|
||||
* %r3 %r4 %r5 %r6
|
||||
@ -379,6 +385,7 @@ ENTRY_DIRECT(copyinstr)
|
||||
3:
|
||||
CLEAR_FAULT_NO_CLOBBER(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(copyinstr)
|
||||
|
||||
ENTRY_DIRECT(subyte)
|
||||
PROLOGUE
|
||||
@ -386,6 +393,7 @@ ENTRY_DIRECT(subyte)
|
||||
stb %r4, 0(%r3)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(subyte)
|
||||
|
||||
#ifndef __powerpc64__
|
||||
ENTRY_DIRECT(suword)
|
||||
@ -394,6 +402,7 @@ ENTRY_DIRECT(suword)
|
||||
stw %r4, 0(%r3)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(suword)
|
||||
#endif
|
||||
|
||||
ENTRY_DIRECT(suword32)
|
||||
@ -402,6 +411,7 @@ ENTRY_DIRECT(suword32)
|
||||
stw %r4, 0(%r3)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(suword32)
|
||||
|
||||
#ifdef __powerpc64__
|
||||
ENTRY_DIRECT(suword64)
|
||||
@ -410,12 +420,15 @@ ENTRY_DIRECT(suword64)
|
||||
std %r4, 0(%r3)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(suword64)
|
||||
|
||||
ENTRY_DIRECT(suword)
|
||||
PROLOGUE
|
||||
SET_FUSUFAULT(%r3, %r7)
|
||||
std %r4, 0(%r3)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(suword)
|
||||
#endif
|
||||
|
||||
ENTRY_DIRECT(fubyte)
|
||||
@ -424,6 +437,7 @@ ENTRY_DIRECT(fubyte)
|
||||
lbz %r3, 0(%r3)
|
||||
CLEAR_FAULT_NO_CLOBBER(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fubyte)
|
||||
|
||||
ENTRY_DIRECT(fuword16)
|
||||
PROLOGUE
|
||||
@ -431,6 +445,7 @@ ENTRY_DIRECT(fuword16)
|
||||
lhz %r3, 0(%r3)
|
||||
CLEAR_FAULT_NO_CLOBBER(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fuword16)
|
||||
|
||||
#ifndef __powerpc64__
|
||||
ENTRY_DIRECT(fueword)
|
||||
@ -440,6 +455,7 @@ ENTRY_DIRECT(fueword)
|
||||
stw %r0, 0(%r4)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fueword)
|
||||
#endif
|
||||
ENTRY_DIRECT(fueword32)
|
||||
PROLOGUE
|
||||
@ -448,6 +464,7 @@ ENTRY_DIRECT(fueword32)
|
||||
stw %r0, 0(%r4)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fueword32)
|
||||
|
||||
#ifdef __powerpc64__
|
||||
ENTRY_DIRECT(fueword)
|
||||
@ -457,6 +474,7 @@ ENTRY_DIRECT(fueword)
|
||||
std %r0, 0(%r4)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fueword)
|
||||
|
||||
ENTRY_DIRECT(fueword64)
|
||||
PROLOGUE
|
||||
@ -465,6 +483,7 @@ ENTRY_DIRECT(fueword64)
|
||||
std %r0, 0(%r4)
|
||||
CLEAR_FAULT(%r7)
|
||||
EPILOGUE
|
||||
END_DIRECT(fueword64)
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -495,6 +514,7 @@ ENTRY_DIRECT(fueword64)
|
||||
|
||||
ENTRY_DIRECT(casueword32)
|
||||
CASUEWORD32(%r3, %r7)
|
||||
END_DIRECT(casueword32)
|
||||
|
||||
#ifdef __powerpc64__
|
||||
#define CASUEWORD64(raddr, rpcb) ;\
|
||||
@ -520,20 +540,25 @@ ENTRY_DIRECT(casueword32)
|
||||
|
||||
ENTRY_DIRECT(casueword)
|
||||
CASUEWORD64(%r3, %r7)
|
||||
END_DIRECT(casueword)
|
||||
|
||||
ENTRY_DIRECT(casueword64)
|
||||
CASUEWORD64(%r3, %r7)
|
||||
END_DIRECT(casueword64)
|
||||
#else
|
||||
ENTRY_DIRECT(casueword)
|
||||
CASUEWORD32(%r3, %r7)
|
||||
END_DIRECT(casueword)
|
||||
#endif
|
||||
|
||||
_NAKED_ENTRY(fusufault)
|
||||
CLEAR_FAULT_NO_CLOBBER(%r7)
|
||||
li %r3, -1
|
||||
EPILOGUE
|
||||
_END(fusufault)
|
||||
|
||||
_NAKED_ENTRY(copy_fault)
|
||||
CLEAR_FAULT_NO_CLOBBER(%r7)
|
||||
li %r3, EFAULT
|
||||
EPILOGUE
|
||||
_END(copy_fault)
|
||||
|
@ -74,6 +74,7 @@ ENTRY(cpu_throw)
|
||||
li %r14,0 /* Tell cpu_switchin not to release a thread */
|
||||
|
||||
b cpu_switchin
|
||||
END(cpu_throw)
|
||||
|
||||
/*
|
||||
* void cpu_switch(struct thread *old,
|
||||
@ -193,6 +194,7 @@ blocked_loop:
|
||||
*/
|
||||
stwcx. %r1, 0, %r3
|
||||
blr
|
||||
END(cpu_switch)
|
||||
|
||||
/*
|
||||
* savectx(pcb)
|
||||
@ -206,6 +208,7 @@ ENTRY(savectx)
|
||||
mflr %r4 /* Save the link register */
|
||||
stw %r4,PCB_LR(%r3)
|
||||
blr
|
||||
END(savectx)
|
||||
|
||||
/*
|
||||
* fork_trampoline()
|
||||
@ -225,3 +228,4 @@ ENTRY(fork_trampoline)
|
||||
mtspr SPR_SPEFSCR, %r3
|
||||
#endif
|
||||
b trapexit
|
||||
END(fork_trampoline)
|
||||
|
@ -81,6 +81,7 @@ ENTRY(cpu_throw)
|
||||
li %r18,0 /* No old pcb flags. The old thread is extinguished. */
|
||||
|
||||
b cpu_switchin
|
||||
END(cpu_throw)
|
||||
|
||||
/*
|
||||
* void cpu_switch(struct thread *old,
|
||||
@ -304,6 +305,7 @@ restore_tar:
|
||||
*/
|
||||
stdcx. %r1, 0, %r3
|
||||
blr
|
||||
END(cpu_switch)
|
||||
|
||||
/*
|
||||
* savectx(pcb)
|
||||
@ -338,6 +340,7 @@ ENTRY(savectx)
|
||||
mflr %r4 /* Save the link register */
|
||||
std %r4,PCB_LR(%r3)
|
||||
blr
|
||||
END(savectx)
|
||||
|
||||
/*
|
||||
* fork_trampoline()
|
||||
@ -358,3 +361,4 @@ ENTRY_NOPROF(fork_trampoline)
|
||||
a frame pointer/saved LR */
|
||||
bl trapexit
|
||||
nop
|
||||
END(fork_trampoline)
|
||||
|
@ -21,6 +21,7 @@ ASENTRY(lv1_allocate_memory)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_allocate_memory)
|
||||
|
||||
ASENTRY(lv1_write_htab_entry)
|
||||
mflr %r0
|
||||
@ -33,6 +34,7 @@ ASENTRY(lv1_write_htab_entry)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_write_htab_entry)
|
||||
|
||||
ASENTRY(lv1_construct_virtual_address_space)
|
||||
mflr %r0
|
||||
@ -51,6 +53,7 @@ ASENTRY(lv1_construct_virtual_address_space)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_construct_virtual_address_space)
|
||||
|
||||
ASENTRY(lv1_get_virtual_address_space_id_of_ppe)
|
||||
mflr %r0
|
||||
@ -66,6 +69,7 @@ ASENTRY(lv1_get_virtual_address_space_id_of_ppe)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_virtual_address_space_id_of_ppe)
|
||||
|
||||
ASENTRY(lv1_query_logical_partition_address_region_info)
|
||||
mflr %r0
|
||||
@ -93,6 +97,7 @@ ASENTRY(lv1_query_logical_partition_address_region_info)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_query_logical_partition_address_region_info)
|
||||
|
||||
ASENTRY(lv1_select_virtual_address_space)
|
||||
mflr %r0
|
||||
@ -105,6 +110,7 @@ ASENTRY(lv1_select_virtual_address_space)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_select_virtual_address_space)
|
||||
|
||||
ASENTRY(lv1_pause)
|
||||
mflr %r0
|
||||
@ -117,6 +123,7 @@ ASENTRY(lv1_pause)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_pause)
|
||||
|
||||
ASENTRY(lv1_destruct_virtual_address_space)
|
||||
mflr %r0
|
||||
@ -129,6 +136,7 @@ ASENTRY(lv1_destruct_virtual_address_space)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_destruct_virtual_address_space)
|
||||
|
||||
ASENTRY(lv1_configure_irq_state_bitmap)
|
||||
mflr %r0
|
||||
@ -141,6 +149,7 @@ ASENTRY(lv1_configure_irq_state_bitmap)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_configure_irq_state_bitmap)
|
||||
|
||||
ASENTRY(lv1_connect_irq_plug_ext)
|
||||
mflr %r0
|
||||
@ -153,6 +162,7 @@ ASENTRY(lv1_connect_irq_plug_ext)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_connect_irq_plug_ext)
|
||||
|
||||
ASENTRY(lv1_release_memory)
|
||||
mflr %r0
|
||||
@ -165,6 +175,7 @@ ASENTRY(lv1_release_memory)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_release_memory)
|
||||
|
||||
ASENTRY(lv1_put_iopte)
|
||||
mflr %r0
|
||||
@ -177,6 +188,7 @@ ASENTRY(lv1_put_iopte)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_put_iopte)
|
||||
|
||||
ASENTRY(lv1_disconnect_irq_plug_ext)
|
||||
mflr %r0
|
||||
@ -189,6 +201,7 @@ ASENTRY(lv1_disconnect_irq_plug_ext)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_disconnect_irq_plug_ext)
|
||||
|
||||
ASENTRY(lv1_construct_event_receive_port)
|
||||
mflr %r0
|
||||
@ -204,6 +217,7 @@ ASENTRY(lv1_construct_event_receive_port)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_construct_event_receive_port)
|
||||
|
||||
ASENTRY(lv1_destruct_event_receive_port)
|
||||
mflr %r0
|
||||
@ -216,6 +230,7 @@ ASENTRY(lv1_destruct_event_receive_port)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_destruct_event_receive_port)
|
||||
|
||||
ASENTRY(lv1_send_event_locally)
|
||||
mflr %r0
|
||||
@ -228,6 +243,7 @@ ASENTRY(lv1_send_event_locally)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_send_event_locally)
|
||||
|
||||
ASENTRY(lv1_end_of_interrupt)
|
||||
mflr %r0
|
||||
@ -240,6 +256,7 @@ ASENTRY(lv1_end_of_interrupt)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_end_of_interrupt)
|
||||
|
||||
ASENTRY(lv1_connect_irq_plug)
|
||||
mflr %r0
|
||||
@ -252,6 +269,7 @@ ASENTRY(lv1_connect_irq_plug)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_connect_irq_plug)
|
||||
|
||||
ASENTRY(lv1_disconnect_irq_plus)
|
||||
mflr %r0
|
||||
@ -264,6 +282,7 @@ ASENTRY(lv1_disconnect_irq_plus)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_disconnect_irq_plus)
|
||||
|
||||
ASENTRY(lv1_end_of_interrupt_ext)
|
||||
mflr %r0
|
||||
@ -276,6 +295,7 @@ ASENTRY(lv1_end_of_interrupt_ext)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_end_of_interrupt_ext)
|
||||
|
||||
ASENTRY(lv1_did_update_interrupt_mask)
|
||||
mflr %r0
|
||||
@ -288,6 +308,7 @@ ASENTRY(lv1_did_update_interrupt_mask)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_did_update_interrupt_mask)
|
||||
|
||||
ASENTRY(lv1_shutdown_logical_partition)
|
||||
mflr %r0
|
||||
@ -300,6 +321,7 @@ ASENTRY(lv1_shutdown_logical_partition)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_shutdown_logical_partition)
|
||||
|
||||
ASENTRY(lv1_destruct_logical_spe)
|
||||
mflr %r0
|
||||
@ -312,6 +334,7 @@ ASENTRY(lv1_destruct_logical_spe)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_destruct_logical_spe)
|
||||
|
||||
ASENTRY(lv1_construct_logical_spe)
|
||||
mflr %r0
|
||||
@ -347,6 +370,7 @@ ASENTRY(lv1_construct_logical_spe)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_construct_logical_spe)
|
||||
|
||||
ASENTRY(lv1_set_spe_interrupt_mask)
|
||||
mflr %r0
|
||||
@ -359,6 +383,7 @@ ASENTRY(lv1_set_spe_interrupt_mask)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_set_spe_interrupt_mask)
|
||||
|
||||
ASENTRY(lv1_disable_logical_spe)
|
||||
mflr %r0
|
||||
@ -371,6 +396,7 @@ ASENTRY(lv1_disable_logical_spe)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_disable_logical_spe)
|
||||
|
||||
ASENTRY(lv1_clear_spe_interrupt_status)
|
||||
mflr %r0
|
||||
@ -383,6 +409,7 @@ ASENTRY(lv1_clear_spe_interrupt_status)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_clear_spe_interrupt_status)
|
||||
|
||||
ASENTRY(lv1_get_spe_interrupt_status)
|
||||
mflr %r0
|
||||
@ -398,6 +425,7 @@ ASENTRY(lv1_get_spe_interrupt_status)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_spe_interrupt_status)
|
||||
|
||||
ASENTRY(lv1_get_logical_ppe_id)
|
||||
mflr %r0
|
||||
@ -413,6 +441,7 @@ ASENTRY(lv1_get_logical_ppe_id)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_logical_ppe_id)
|
||||
|
||||
ASENTRY(lv1_get_logical_partition_id)
|
||||
mflr %r0
|
||||
@ -428,6 +457,7 @@ ASENTRY(lv1_get_logical_partition_id)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_logical_partition_id)
|
||||
|
||||
ASENTRY(lv1_get_spe_irq_outlet)
|
||||
mflr %r0
|
||||
@ -443,6 +473,7 @@ ASENTRY(lv1_get_spe_irq_outlet)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_spe_irq_outlet)
|
||||
|
||||
ASENTRY(lv1_set_spe_privilege_state_area_1_register)
|
||||
mflr %r0
|
||||
@ -455,6 +486,7 @@ ASENTRY(lv1_set_spe_privilege_state_area_1_register)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_set_spe_privilege_state_area_1_register)
|
||||
|
||||
ASENTRY(lv1_get_repository_node_value)
|
||||
mflr %r0
|
||||
@ -473,6 +505,7 @@ ASENTRY(lv1_get_repository_node_value)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_repository_node_value)
|
||||
|
||||
ASENTRY(lv1_read_htab_entries)
|
||||
mflr %r0
|
||||
@ -500,6 +533,7 @@ ASENTRY(lv1_read_htab_entries)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_read_htab_entries)
|
||||
|
||||
ASENTRY(lv1_set_dabr)
|
||||
mflr %r0
|
||||
@ -512,6 +546,7 @@ ASENTRY(lv1_set_dabr)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_set_dabr)
|
||||
|
||||
ASENTRY(lv1_allocate_io_segment)
|
||||
mflr %r0
|
||||
@ -527,6 +562,7 @@ ASENTRY(lv1_allocate_io_segment)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_allocate_io_segment)
|
||||
|
||||
ASENTRY(lv1_release_io_segment)
|
||||
mflr %r0
|
||||
@ -539,6 +575,7 @@ ASENTRY(lv1_release_io_segment)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_release_io_segment)
|
||||
|
||||
ASENTRY(lv1_construct_io_irq_outlet)
|
||||
mflr %r0
|
||||
@ -554,6 +591,7 @@ ASENTRY(lv1_construct_io_irq_outlet)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_construct_io_irq_outlet)
|
||||
|
||||
ASENTRY(lv1_destruct_io_irq_outlet)
|
||||
mflr %r0
|
||||
@ -566,6 +604,7 @@ ASENTRY(lv1_destruct_io_irq_outlet)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_destruct_io_irq_outlet)
|
||||
|
||||
ASENTRY(lv1_map_htab)
|
||||
mflr %r0
|
||||
@ -581,6 +620,7 @@ ASENTRY(lv1_map_htab)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_map_htab)
|
||||
|
||||
ASENTRY(lv1_unmap_htab)
|
||||
mflr %r0
|
||||
@ -593,6 +633,7 @@ ASENTRY(lv1_unmap_htab)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_unmap_htab)
|
||||
|
||||
ASENTRY(lv1_get_version_info)
|
||||
mflr %r0
|
||||
@ -608,6 +649,7 @@ ASENTRY(lv1_get_version_info)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_version_info)
|
||||
|
||||
ASENTRY(lv1_insert_htab_entry)
|
||||
mflr %r0
|
||||
@ -630,6 +672,7 @@ ASENTRY(lv1_insert_htab_entry)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_insert_htab_entry)
|
||||
|
||||
ASENTRY(lv1_read_virtual_uart)
|
||||
mflr %r0
|
||||
@ -645,6 +688,7 @@ ASENTRY(lv1_read_virtual_uart)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_read_virtual_uart)
|
||||
|
||||
ASENTRY(lv1_write_virtual_uart)
|
||||
mflr %r0
|
||||
@ -660,6 +704,7 @@ ASENTRY(lv1_write_virtual_uart)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_write_virtual_uart)
|
||||
|
||||
ASENTRY(lv1_set_virtual_uart_param)
|
||||
mflr %r0
|
||||
@ -672,6 +717,7 @@ ASENTRY(lv1_set_virtual_uart_param)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_set_virtual_uart_param)
|
||||
|
||||
ASENTRY(lv1_get_virtual_uart_param)
|
||||
mflr %r0
|
||||
@ -687,6 +733,7 @@ ASENTRY(lv1_get_virtual_uart_param)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_virtual_uart_param)
|
||||
|
||||
ASENTRY(lv1_configure_virtual_uart)
|
||||
mflr %r0
|
||||
@ -702,6 +749,7 @@ ASENTRY(lv1_configure_virtual_uart)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_configure_virtual_uart)
|
||||
|
||||
ASENTRY(lv1_open_device)
|
||||
mflr %r0
|
||||
@ -714,6 +762,7 @@ ASENTRY(lv1_open_device)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_open_device)
|
||||
|
||||
ASENTRY(lv1_close_device)
|
||||
mflr %r0
|
||||
@ -726,6 +775,7 @@ ASENTRY(lv1_close_device)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_close_device)
|
||||
|
||||
ASENTRY(lv1_map_device_mmio_region)
|
||||
mflr %r0
|
||||
@ -741,6 +791,7 @@ ASENTRY(lv1_map_device_mmio_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_map_device_mmio_region)
|
||||
|
||||
ASENTRY(lv1_unmap_device_mmio_region)
|
||||
mflr %r0
|
||||
@ -753,6 +804,7 @@ ASENTRY(lv1_unmap_device_mmio_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_unmap_device_mmio_region)
|
||||
|
||||
ASENTRY(lv1_allocate_device_dma_region)
|
||||
mflr %r0
|
||||
@ -768,6 +820,7 @@ ASENTRY(lv1_allocate_device_dma_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_allocate_device_dma_region)
|
||||
|
||||
ASENTRY(lv1_free_device_dma_region)
|
||||
mflr %r0
|
||||
@ -780,6 +833,7 @@ ASENTRY(lv1_free_device_dma_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_free_device_dma_region)
|
||||
|
||||
ASENTRY(lv1_map_device_dma_region)
|
||||
mflr %r0
|
||||
@ -792,6 +846,7 @@ ASENTRY(lv1_map_device_dma_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_map_device_dma_region)
|
||||
|
||||
ASENTRY(lv1_unmap_device_dma_region)
|
||||
mflr %r0
|
||||
@ -804,6 +859,7 @@ ASENTRY(lv1_unmap_device_dma_region)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_unmap_device_dma_region)
|
||||
|
||||
ASENTRY(lv1_read_pci_config)
|
||||
mflr %r0
|
||||
@ -819,6 +875,7 @@ ASENTRY(lv1_read_pci_config)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_read_pci_config)
|
||||
|
||||
ASENTRY(lv1_write_pci_config)
|
||||
mflr %r0
|
||||
@ -831,6 +888,7 @@ ASENTRY(lv1_write_pci_config)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_write_pci_config)
|
||||
|
||||
ASENTRY(lv1_net_add_multicast_address)
|
||||
mflr %r0
|
||||
@ -843,6 +901,7 @@ ASENTRY(lv1_net_add_multicast_address)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_add_multicast_address)
|
||||
|
||||
ASENTRY(lv1_net_remove_multicast_address)
|
||||
mflr %r0
|
||||
@ -855,6 +914,7 @@ ASENTRY(lv1_net_remove_multicast_address)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_remove_multicast_address)
|
||||
|
||||
ASENTRY(lv1_net_start_tx_dma)
|
||||
mflr %r0
|
||||
@ -867,6 +927,7 @@ ASENTRY(lv1_net_start_tx_dma)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_start_tx_dma)
|
||||
|
||||
ASENTRY(lv1_net_stop_tx_dma)
|
||||
mflr %r0
|
||||
@ -879,6 +940,7 @@ ASENTRY(lv1_net_stop_tx_dma)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_stop_tx_dma)
|
||||
|
||||
ASENTRY(lv1_net_start_rx_dma)
|
||||
mflr %r0
|
||||
@ -891,6 +953,7 @@ ASENTRY(lv1_net_start_rx_dma)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_start_rx_dma)
|
||||
|
||||
ASENTRY(lv1_net_stop_rx_dma)
|
||||
mflr %r0
|
||||
@ -903,6 +966,7 @@ ASENTRY(lv1_net_stop_rx_dma)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_stop_rx_dma)
|
||||
|
||||
ASENTRY(lv1_net_set_interrupt_status_indicator)
|
||||
mflr %r0
|
||||
@ -915,6 +979,7 @@ ASENTRY(lv1_net_set_interrupt_status_indicator)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_set_interrupt_status_indicator)
|
||||
|
||||
ASENTRY(lv1_net_set_interrupt_mask)
|
||||
mflr %r0
|
||||
@ -927,6 +992,7 @@ ASENTRY(lv1_net_set_interrupt_mask)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_set_interrupt_mask)
|
||||
|
||||
ASENTRY(lv1_net_control)
|
||||
mflr %r0
|
||||
@ -945,6 +1011,7 @@ ASENTRY(lv1_net_control)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_net_control)
|
||||
|
||||
ASENTRY(lv1_connect_interrupt_event_receive_port)
|
||||
mflr %r0
|
||||
@ -957,6 +1024,7 @@ ASENTRY(lv1_connect_interrupt_event_receive_port)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_connect_interrupt_event_receive_port)
|
||||
|
||||
ASENTRY(lv1_disconnect_interrupt_event_receive_port)
|
||||
mflr %r0
|
||||
@ -969,6 +1037,7 @@ ASENTRY(lv1_disconnect_interrupt_event_receive_port)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_disconnect_interrupt_event_receive_port)
|
||||
|
||||
ASENTRY(lv1_deconfigure_virtual_uart_irq)
|
||||
mflr %r0
|
||||
@ -981,6 +1050,7 @@ ASENTRY(lv1_deconfigure_virtual_uart_irq)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_deconfigure_virtual_uart_irq)
|
||||
|
||||
ASENTRY(lv1_enable_logical_spe)
|
||||
mflr %r0
|
||||
@ -993,6 +1063,7 @@ ASENTRY(lv1_enable_logical_spe)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_enable_logical_spe)
|
||||
|
||||
ASENTRY(lv1_gpu_open)
|
||||
mflr %r0
|
||||
@ -1005,6 +1076,7 @@ ASENTRY(lv1_gpu_open)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_open)
|
||||
|
||||
ASENTRY(lv1_gpu_close)
|
||||
mflr %r0
|
||||
@ -1017,6 +1089,7 @@ ASENTRY(lv1_gpu_close)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_close)
|
||||
|
||||
ASENTRY(lv1_gpu_device_map)
|
||||
mflr %r0
|
||||
@ -1035,6 +1108,7 @@ ASENTRY(lv1_gpu_device_map)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_device_map)
|
||||
|
||||
ASENTRY(lv1_gpu_device_unmap)
|
||||
mflr %r0
|
||||
@ -1047,6 +1121,7 @@ ASENTRY(lv1_gpu_device_unmap)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_device_unmap)
|
||||
|
||||
ASENTRY(lv1_gpu_memory_allocate)
|
||||
mflr %r0
|
||||
@ -1065,6 +1140,7 @@ ASENTRY(lv1_gpu_memory_allocate)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_memory_allocate)
|
||||
|
||||
ASENTRY(lv1_gpu_memory_free)
|
||||
mflr %r0
|
||||
@ -1077,6 +1153,7 @@ ASENTRY(lv1_gpu_memory_free)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_memory_free)
|
||||
|
||||
ASENTRY(lv1_gpu_context_allocate)
|
||||
mflr %r0
|
||||
@ -1104,6 +1181,7 @@ ASENTRY(lv1_gpu_context_allocate)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_context_allocate)
|
||||
|
||||
ASENTRY(lv1_gpu_context_free)
|
||||
mflr %r0
|
||||
@ -1116,6 +1194,7 @@ ASENTRY(lv1_gpu_context_free)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_context_free)
|
||||
|
||||
ASENTRY(lv1_gpu_context_iomap)
|
||||
mflr %r0
|
||||
@ -1128,6 +1207,7 @@ ASENTRY(lv1_gpu_context_iomap)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_context_iomap)
|
||||
|
||||
ASENTRY(lv1_gpu_context_attribute)
|
||||
mflr %r0
|
||||
@ -1140,6 +1220,7 @@ ASENTRY(lv1_gpu_context_attribute)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_context_attribute)
|
||||
|
||||
ASENTRY(lv1_gpu_context_intr)
|
||||
mflr %r0
|
||||
@ -1155,6 +1236,7 @@ ASENTRY(lv1_gpu_context_intr)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_context_intr)
|
||||
|
||||
ASENTRY(lv1_gpu_attribute)
|
||||
mflr %r0
|
||||
@ -1167,6 +1249,7 @@ ASENTRY(lv1_gpu_attribute)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_gpu_attribute)
|
||||
|
||||
ASENTRY(lv1_get_rtc)
|
||||
mflr %r0
|
||||
@ -1185,6 +1268,7 @@ ASENTRY(lv1_get_rtc)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_get_rtc)
|
||||
|
||||
ASENTRY(lv1_storage_read)
|
||||
mflr %r0
|
||||
@ -1200,6 +1284,7 @@ ASENTRY(lv1_storage_read)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_storage_read)
|
||||
|
||||
ASENTRY(lv1_storage_write)
|
||||
mflr %r0
|
||||
@ -1215,6 +1300,7 @@ ASENTRY(lv1_storage_write)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_storage_write)
|
||||
|
||||
ASENTRY(lv1_storage_send_device_command)
|
||||
mflr %r0
|
||||
@ -1230,6 +1316,7 @@ ASENTRY(lv1_storage_send_device_command)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_storage_send_device_command)
|
||||
|
||||
ASENTRY(lv1_storage_get_async_status)
|
||||
mflr %r0
|
||||
@ -1248,6 +1335,7 @@ ASENTRY(lv1_storage_get_async_status)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_storage_get_async_status)
|
||||
|
||||
ASENTRY(lv1_storage_check_async_status)
|
||||
mflr %r0
|
||||
@ -1263,6 +1351,7 @@ ASENTRY(lv1_storage_check_async_status)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
ASEND(lv1_storage_check_async_status)
|
||||
|
||||
ASENTRY(lv1_panic)
|
||||
mflr %r0
|
||||
@ -1275,4 +1364,4 @@ ASENTRY(lv1_panic)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr
|
||||
|
||||
ASEND(lv1_panic)
|
||||
|
@ -47,6 +47,7 @@ ASENTRY(phyp_hcall)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr /* return r3 = status */
|
||||
ASEND(phyp_hcall)
|
||||
|
||||
/*
|
||||
* PFT HV calls take a special ABI (see PAPR 14.5.4.1)
|
||||
@ -72,4 +73,4 @@ ASENTRY(phyp_pft_hcall)
|
||||
ld %r0,16(%r1)
|
||||
mtlr %r0
|
||||
blr /* return r3 = status */
|
||||
|
||||
ASEND(phyp_pft_hcall)
|
||||
|
Loading…
Reference in New Issue
Block a user