From 78599c32efed3247d165302a1fbe8d9203e38974 Mon Sep 17 00:00:00 2001 From: Conrad Meyer Date: Sat, 5 Dec 2020 00:33:28 +0000 Subject: [PATCH] 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 --- lib/libc/powerpc/SYS.h | 6 +- lib/libc/powerpc64/SYS.h | 6 +- lib/libc/powerpc64/sys/cerror.S | 1 + lib/libthr/arch/i386/i386/_umtx_op_err.S | 5 +- lib/msun/i387/e_logf.S | 1 + lib/msun/i387/e_remainderl.S | 1 + lib/msun/i387/e_sqrtl.S | 1 + lib/msun/i387/s_llrintl.S | 1 + lib/msun/i387/s_logbl.S | 1 + lib/msun/i387/s_lrintl.S | 1 + lib/msun/i387/s_remquol.S | 1 + lib/msun/i387/s_rintl.S | 1 + libexec/rtld-elf/aarch64/rtld_start.S | 9 --- libexec/rtld-elf/powerpc/rtld_start.S | 6 ++ libexec/rtld-elf/powerpc64/rtld_start.S | 2 + stand/libsa/powerpc/_setjmp.S | 2 + stand/powerpc/kboot/host_syscall.S | 13 ++++ stand/powerpc/uboot/start.S | 1 + sys/arm64/include/asm.h | 5 +- sys/arm64/linux/linux_locore.asm | 4 ++ sys/arm64/linux/linux_support.s | 5 ++ sys/crypto/des/arch/i386/des_enc.S | 12 ++-- sys/i386/bios/smapi_bios.S | 1 + sys/i386/include/asm.h | 19 +++-- sys/powerpc/aim/locore.S | 1 + sys/powerpc/aim/locore64.S | 3 + sys/powerpc/aim/trap_subr64.S | 1 + sys/powerpc/booke/locore.S | 10 +++ sys/powerpc/booke/trap_subr.S | 3 + sys/powerpc/include/asm.h | 16 +++-- sys/powerpc/mambo/mambocall.S | 2 +- sys/powerpc/ofw/ofwcall32.S | 3 +- sys/powerpc/ofw/ofwcall64.S | 3 +- sys/powerpc/powernv/opalcall.S | 2 +- sys/powerpc/powerpc/cpu_subr64.S | 1 + sys/powerpc/powerpc/setjmp.S | 2 + sys/powerpc/powerpc/support.S | 27 ++++++- sys/powerpc/powerpc/swtch32.S | 4 ++ sys/powerpc/powerpc/swtch64.S | 4 ++ sys/powerpc/ps3/ps3-hvcall.S | 91 +++++++++++++++++++++++- sys/powerpc/pseries/phyp-hvcall.S | 3 +- 41 files changed, 242 insertions(+), 39 deletions(-) diff --git a/lib/libc/powerpc/SYS.h b/lib/libc/powerpc/SYS.h index e9b6d3226c97..8d019144cdd6 100644 --- a/lib/libc/powerpc/SYS.h +++ b/lib/libc/powerpc/SYS.h @@ -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) diff --git a/lib/libc/powerpc64/SYS.h b/lib/libc/powerpc64/SYS.h index cc1c268adf29..9ca5af4b70ed 100644 --- a/lib/libc/powerpc64/SYS.h +++ b/lib/libc/powerpc64/SYS.h @@ -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) diff --git a/lib/libc/powerpc64/sys/cerror.S b/lib/libc/powerpc64/sys/cerror.S index 515d7e541cab..3362c9fdf046 100644 --- a/lib/libc/powerpc64/sys/cerror.S +++ b/lib/libc/powerpc64/sys/cerror.S @@ -56,5 +56,6 @@ ENTRY_NOPROF(HIDENAME(cerror)) li %r3,-1 li %r4,-1 blr +END(HIDENAME(cerror)) .section .note.GNU-stack,"",%progbits diff --git a/lib/libthr/arch/i386/i386/_umtx_op_err.S b/lib/libthr/arch/i386/i386/_umtx_op_err.S index 113412c85100..dad6495132f7 100644 --- a/lib/libthr/arch/i386/i386/_umtx_op_err.S +++ b/lib/libthr/arch/i386/i386/_umtx_op_err.S @@ -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) diff --git a/lib/msun/i387/e_logf.S b/lib/msun/i387/e_logf.S index 51f12e76e04f..01511af1c750 100644 --- a/lib/msun/i387/e_logf.S +++ b/lib/msun/i387/e_logf.S @@ -13,5 +13,6 @@ ENTRY(logf) flds 4(%esp) fyl2x ret +END(logf) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/e_remainderl.S b/lib/msun/i387/e_remainderl.S index bdbd2ba2bdaa..3dac08836405 100644 --- a/lib/msun/i387/e_remainderl.S +++ b/lib/msun/i387/e_remainderl.S @@ -46,5 +46,6 @@ ENTRY(remainderl) jp 1b fstp %st(1) ret +END(remainderl) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/e_sqrtl.S b/lib/msun/i387/e_sqrtl.S index 3a5ef3e666f5..aec8fbd9e533 100644 --- a/lib/msun/i387/e_sqrtl.S +++ b/lib/msun/i387/e_sqrtl.S @@ -40,5 +40,6 @@ ENTRY(sqrtl) fldt 4(%esp) fsqrt ret +END(sqrtl) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/s_llrintl.S b/lib/msun/i387/s_llrintl.S index 0fe97b82f1b0..aa349cbc1aae 100644 --- a/lib/msun/i387/s_llrintl.S +++ b/lib/msun/i387/s_llrintl.S @@ -34,5 +34,6 @@ ENTRY(llrintl) popl %eax popl %edx ret +END(llrintl) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/s_logbl.S b/lib/msun/i387/s_logbl.S index 685da943c510..f175e7b51a40 100644 --- a/lib/msun/i387/s_logbl.S +++ b/lib/msun/i387/s_logbl.S @@ -41,5 +41,6 @@ ENTRY(logbl) fxtract fstp %st ret +END(logbl) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/s_lrintl.S b/lib/msun/i387/s_lrintl.S index fb7f2612013a..9a8b467a3c13 100644 --- a/lib/msun/i387/s_lrintl.S +++ b/lib/msun/i387/s_lrintl.S @@ -33,5 +33,6 @@ ENTRY(lrintl) fistpl (%esp) popl %eax ret +END(lrintl) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/s_remquol.S b/lib/msun/i387/s_remquol.S index df149dff4aef..59a62cbefe7d 100644 --- a/lib/msun/i387/s_remquol.S +++ b/lib/msun/i387/s_remquol.S @@ -61,5 +61,6 @@ ENTRY(remquol) movl 28(%esp),%ecx movl %eax,(%ecx) ret +END(remquol) .section .note.GNU-stack,"",%progbits diff --git a/lib/msun/i387/s_rintl.S b/lib/msun/i387/s_rintl.S index edb9573ffc63..8be8d96ebcdb 100644 --- a/lib/msun/i387/s_rintl.S +++ b/lib/msun/i387/s_rintl.S @@ -40,5 +40,6 @@ ENTRY(rintl) fldt 4(%esp) frndint ret +END(rintl) .section .note.GNU-stack,"",%progbits diff --git a/libexec/rtld-elf/aarch64/rtld_start.S b/libexec/rtld-elf/aarch64/rtld_start.S index e6804ba0b928..e9d25f2ab170 100644 --- a/libexec/rtld-elf/aarch64/rtld_start.S +++ b/libexec/rtld-elf/aarch64/rtld_start.S @@ -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) diff --git a/libexec/rtld-elf/powerpc/rtld_start.S b/libexec/rtld-elf/powerpc/rtld_start.S index 36f795bc30fe..20f3001a021a 100644 --- a/libexec/rtld-elf/powerpc/rtld_start.S +++ b/libexec/rtld-elf/powerpc/rtld_start.S @@ -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 diff --git a/libexec/rtld-elf/powerpc64/rtld_start.S b/libexec/rtld-elf/powerpc64/rtld_start.S index 2d7fb8980862..fd4a7bdca17d 100644 --- a/libexec/rtld-elf/powerpc64/rtld_start.S +++ b/libexec/rtld-elf/powerpc64/rtld_start.S @@ -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 diff --git a/stand/libsa/powerpc/_setjmp.S b/stand/libsa/powerpc/_setjmp.S index 7c7c24b1237c..485050f003a1 100644 --- a/stand/libsa/powerpc/_setjmp.S +++ b/stand/libsa/powerpc/_setjmp.S @@ -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) diff --git a/stand/powerpc/kboot/host_syscall.S b/stand/powerpc/kboot/host_syscall.S index 1cb9016715ac..dc236afdeda7 100644 --- a/stand/powerpc/kboot/host_syscall.S +++ b/stand/powerpc/kboot/host_syscall.S @@ -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) diff --git a/stand/powerpc/uboot/start.S b/stand/powerpc/uboot/start.S index 3c8d64ae724f..cee56e6ea75b 100644 --- a/stand/powerpc/uboot/start.S +++ b/stand/powerpc/uboot/start.S @@ -85,6 +85,7 @@ ENTRY(syscall) lwz %r30, 12(%r1) mr %r1, %r11 blr +END(syscall) /* * Data section diff --git a/sys/arm64/include/asm.h b/sys/arm64/include/asm.h index d947301d5865..443377bf0c14 100644 --- a/sys/arm64/include/asm.h +++ b/sys/arm64/include/asm.h @@ -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) \ diff --git a/sys/arm64/linux/linux_locore.asm b/sys/arm64/linux/linux_locore.asm index b7e764b6d379..0383e6770954 100644 --- a/sys/arm64/linux/linux_locore.asm +++ b/sys/arm64/linux/linux_locore.asm @@ -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) diff --git a/sys/arm64/linux/linux_support.s b/sys/arm64/linux/linux_support.s index c7a87f616812..1048e9579627 100644 --- a/sys/arm64/linux/linux_support.s +++ b/sys/arm64/linux/linux_support.s @@ -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) diff --git a/sys/crypto/des/arch/i386/des_enc.S b/sys/crypto/des/arch/i386/des_enc.S index 7fc29e678a4c..de1278b5ae93 100644 --- a/sys/crypto/des/arch/i386/des_enc.S +++ b/sys/crypto/des/arch/i386/des_enc.S @@ -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) diff --git a/sys/i386/bios/smapi_bios.S b/sys/i386/bios/smapi_bios.S index 74ba05a3f8d0..c9d4acea66bf 100644 --- a/sys/i386/bios/smapi_bios.S +++ b/sys/i386/bios/smapi_bios.S @@ -38,3 +38,4 @@ ENTRY(smapi32) leave ret +END(smapi32) diff --git a/sys/i386/include/asm.h b/sys/i386/include/asm.h index f45978455056..e23fe2bec8d2 100644 --- a/sys/i386/include/asm.h +++ b/sys/i386/include/asm.h @@ -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) diff --git a/sys/powerpc/aim/locore.S b/sys/powerpc/aim/locore.S index 806884dfbeff..861536447be1 100644 --- a/sys/powerpc/aim/locore.S +++ b/sys/powerpc/aim/locore.S @@ -13,3 +13,4 @@ ENTRY(get_spr) mfspr %r3, 0 blr +END(get_spr) diff --git a/sys/powerpc/aim/locore64.S b/sys/powerpc/aim/locore64.S index e18fbd49318f..0bc0619620d9 100644 --- a/sys/powerpc/aim/locore64.S +++ b/sys/powerpc/aim/locore64.S @@ -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 diff --git a/sys/powerpc/aim/trap_subr64.S b/sys/powerpc/aim/trap_subr64.S index 1a2174c5cb12..8e0f43ed0eeb 100644 --- a/sys/powerpc/aim/trap_subr64.S +++ b/sys/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 diff --git a/sys/powerpc/booke/locore.S b/sys/powerpc/booke/locore.S index f1a87b6ea0db..8fad9296962e 100644 --- a/sys/powerpc/booke/locore.S +++ b/sys/powerpc/booke/locore.S @@ -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 */ diff --git a/sys/powerpc/booke/trap_subr.S b/sys/powerpc/booke/trap_subr.S index 3c54af1b8983..bef0a1a7cd9d 100644 --- a/sys/powerpc/booke/trap_subr.S +++ b/sys/powerpc/booke/trap_subr.S @@ -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); diff --git a/sys/powerpc/include/asm.h b/sys/powerpc/include/asm.h index 49ad43d3cb75..2dd24ebf2bb1 100644 --- a/sys/powerpc/include/asm.h +++ b/sys/powerpc/include/asm.h @@ -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 diff --git a/sys/powerpc/mambo/mambocall.S b/sys/powerpc/mambo/mambocall.S index 16364131eff4..030c4da1fe8f 100644 --- a/sys/powerpc/mambo/mambocall.S +++ b/sys/powerpc/mambo/mambocall.S @@ -36,4 +36,4 @@ ASENTRY(mambocall) */ .long 0x000EAEB0 blr - +ASEND(mambocall) diff --git a/sys/powerpc/ofw/ofwcall32.S b/sys/powerpc/ofw/ofwcall32.S index dd657518dc3c..b5dda4155c22 100644 --- a/sys/powerpc/ofw/ofwcall32.S +++ b/sys/powerpc/ofw/ofwcall32.S @@ -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) diff --git a/sys/powerpc/ofw/ofwcall64.S b/sys/powerpc/ofw/ofwcall64.S index 8a25c1a878bb..2073c2cecf0b 100644 --- a/sys/powerpc/ofw/ofwcall64.S +++ b/sys/powerpc/ofw/ofwcall64.S @@ -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) diff --git a/sys/powerpc/powernv/opalcall.S b/sys/powerpc/powernv/opalcall.S index 208a4d431a28..c8cc5d717f8d 100644 --- a/sys/powerpc/powernv/opalcall.S +++ b/sys/powerpc/powernv/opalcall.S @@ -129,4 +129,4 @@ ASENTRY(opal_call) /* And return */ blr - +ASEND(opal_call) diff --git a/sys/powerpc/powerpc/cpu_subr64.S b/sys/powerpc/powerpc/cpu_subr64.S index 1cc88255153d..148d0eadd4f6 100644 --- a/sys/powerpc/powerpc/cpu_subr64.S +++ b/sys/powerpc/powerpc/cpu_subr64.S @@ -96,3 +96,4 @@ power_save_sequence: bne 2b nap b . +END(enter_idle_powerx) diff --git a/sys/powerpc/powerpc/setjmp.S b/sys/powerpc/powerpc/setjmp.S index 910f58bf6673..f58c4aa0cf7a 100644 --- a/sys/powerpc/powerpc/setjmp.S +++ b/sys/powerpc/powerpc/setjmp.S @@ -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) diff --git a/sys/powerpc/powerpc/support.S b/sys/powerpc/powerpc/support.S index ecb727737c7a..9ff1bcc02437 100644 --- a/sys/powerpc/powerpc/support.S +++ b/sys/powerpc/powerpc/support.S @@ -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) diff --git a/sys/powerpc/powerpc/swtch32.S b/sys/powerpc/powerpc/swtch32.S index 7950b60dc29c..6ad781895dc3 100644 --- a/sys/powerpc/powerpc/swtch32.S +++ b/sys/powerpc/powerpc/swtch32.S @@ -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) diff --git a/sys/powerpc/powerpc/swtch64.S b/sys/powerpc/powerpc/swtch64.S index 716bdf94a96e..fe59a166f3cb 100644 --- a/sys/powerpc/powerpc/swtch64.S +++ b/sys/powerpc/powerpc/swtch64.S @@ -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) diff --git a/sys/powerpc/ps3/ps3-hvcall.S b/sys/powerpc/ps3/ps3-hvcall.S index 6a992648f7f4..49c808a26504 100644 --- a/sys/powerpc/ps3/ps3-hvcall.S +++ b/sys/powerpc/ps3/ps3-hvcall.S @@ -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) diff --git a/sys/powerpc/pseries/phyp-hvcall.S b/sys/powerpc/pseries/phyp-hvcall.S index d6b5152b0d98..6686c476642d 100644 --- a/sys/powerpc/pseries/phyp-hvcall.S +++ b/sys/powerpc/pseries/phyp-hvcall.S @@ -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)