mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-07 00:50:50 +00:00
arm64: Support BTI checking in most of the kernel
LLD has the -zbti-report=error argument to check if the BTI note is present when linking. To allow for this to be used when linking the kernel and modules: - Add the BTI note to the remaining assembly files - Mark ptrauth.c as protected by BTI - Disable -zbti-report for vmm hypervisor switching code as it's not used there. The linux64 module doesn't build with the flag as it includes vdso code that doesn't include the note. Reviewed by: imp, kib, emaste Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D45466
This commit is contained in:
parent
a5affc0c4c
commit
c2e0d56f5e
|
@ -25,7 +25,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(generic_bs_r_1)
|
||||
ldrb w0, [x1, x2]
|
||||
ret
|
||||
|
@ -475,3 +477,5 @@ generic_bs_poke_8f:
|
|||
mov x0, #0
|
||||
ret
|
||||
END(generic_bs_poke_8)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -27,9 +27,10 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <sys/elf_common.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/param.h>
|
||||
#include <machine/vmparam.h>
|
||||
|
||||
|
@ -220,3 +221,5 @@ ending:
|
|||
mov x0, xzr /* return 0 */
|
||||
ret
|
||||
.size copycommon, . - copycommon
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -29,7 +29,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/param.h>
|
||||
|
||||
|
@ -190,3 +192,5 @@ ENTRY(cache_maint_fault)
|
|||
mov x0, #EFAULT
|
||||
ret
|
||||
END(cache_maint_fault)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/armreg.h>
|
||||
#include "assym.inc"
|
||||
|
@ -324,3 +326,4 @@ exception_vectors:
|
|||
vempty 0 /* FIQ 32-bit EL0 */
|
||||
vector el0_serror 0 /* Error 32-bit EL0 */
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
.macro vempty
|
||||
|
@ -63,3 +65,5 @@ hyp_stub_vectors:
|
|||
vempty /* IRQ 32-bit EL1 */
|
||||
vempty /* FIQ 32-bit EL1 */
|
||||
vempty /* SError 32-bit EL1 */
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "assym.inc"
|
||||
#include "opt_kstack_pages.h"
|
||||
#include <sys/elf_common.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <machine/asm.h>
|
||||
#include <machine/armreg.h>
|
||||
|
@ -1006,3 +1007,5 @@ aarch32_esigcode:
|
|||
.global sz_aarch32_sigcode
|
||||
sz_aarch32_sigcode:
|
||||
.quad aarch32_esigcode - aarch32_sigcode
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
* ARMv8-a, AArch64, unaligned accesses.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define L(l) .L ## l
|
||||
|
@ -134,3 +136,4 @@ L(byte_loop):
|
|||
|
||||
END (memcmp)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define L(l) .L ## l
|
||||
|
@ -240,3 +242,4 @@ L(copy64_from_start):
|
|||
END(memcpy)
|
||||
EEND(memmove)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define dstin x0
|
||||
|
@ -195,3 +197,5 @@ ENTRY(memset)
|
|||
b.ne .Ltail_maybe_long
|
||||
ret
|
||||
END(memset)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
#include "assym.inc"
|
||||
#include <sys/elf_common.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <machine/asm.h>
|
||||
|
||||
|
@ -57,3 +58,5 @@ esigcode:
|
|||
.global szsigcode
|
||||
szsigcode:
|
||||
.quad esigcode - sigcode
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
* MTE compatible.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define L(l) .L ## l
|
||||
|
@ -187,3 +189,4 @@ L(done):
|
|||
|
||||
END (strcmp)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
* MTE compatible.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#define L(l) .L ## l
|
||||
|
@ -305,3 +307,4 @@ L(ret0):
|
|||
ret
|
||||
END(strncmp)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/setjmp.h>
|
||||
#include <machine/param.h>
|
||||
|
@ -387,3 +389,5 @@ ENTRY(pagezero_cache)
|
|||
ret
|
||||
|
||||
END(pagezero_cache)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
#include "opt_kstack_pages.h"
|
||||
#include "opt_sched.h"
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/armreg.h>
|
||||
.macro clear_step_flag pcbflags, tmp
|
||||
|
@ -277,3 +279,4 @@ ENTRY(savectx)
|
|||
ret
|
||||
END(savectx)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
|
@ -37,3 +38,5 @@ ENTRY(vmm_call_hyp)
|
|||
hvc #0
|
||||
ret
|
||||
END(vmm_call_hyp)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
#include <machine/param.h>
|
||||
|
||||
.section .rodata
|
||||
|
@ -37,3 +40,5 @@ vmm_hyp_code:
|
|||
.incbin "vmm_hyp_blob.bin"
|
||||
.globl vmm_hyp_code_end
|
||||
vmm_hyp_code_end:
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <sys/cpuvar_defs.h>
|
||||
#include <sys/dtrace.h>
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/armreg.h>
|
||||
#include <machine/asm.h>
|
||||
|
@ -172,3 +173,5 @@ ENTRY(dtrace_casptr)
|
|||
2: mov x0, x3 /* Return the value loaded from target */
|
||||
RET
|
||||
END(dtrace_casptr)
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -65,7 +65,7 @@ arm64/arm64/nexus.c standard
|
|||
arm64/arm64/ofw_machdep.c optional fdt
|
||||
arm64/arm64/pl031_rtc.c optional fdt pl031
|
||||
arm64/arm64/ptrauth.c standard \
|
||||
compile-with "${NORMAL_C:N-mbranch-protection*}"
|
||||
compile-with "${NORMAL_C:N-mbranch-protection*} -mbranch-protection=bti"
|
||||
arm64/arm64/pmap.c standard
|
||||
arm64/arm64/ptrace_machdep.c standard
|
||||
arm64/arm64/sigtramp.S standard
|
||||
|
|
|
@ -30,7 +30,10 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/elf_common.h>
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
.macro arm_smccc_1_0 insn
|
||||
ENTRY(arm_smccc_\insn)
|
||||
\insn #0
|
||||
|
@ -84,3 +87,5 @@ END(arm_smccc_1_2_\insn)
|
|||
*/
|
||||
arm_smccc_1_2 hvc
|
||||
arm_smccc_1_2 smc
|
||||
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
|
|
|
@ -45,3 +45,9 @@ FIRMW_START(FIRMW_SYMBOL):
|
|||
.type FIRMW_END(FIRMW_SYMBOL), %object
|
||||
FIRMW_END(FIRMW_SYMBOL):
|
||||
.size FIRMW_END(FIRMW_SYMBOL), . - FIRMW_END(FIRMW_SYMBOL)
|
||||
|
||||
#if defined(__aarch64__)
|
||||
#include <machine/asm.h>
|
||||
#include <sys/elf_common.h>
|
||||
GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL)
|
||||
#endif
|
||||
|
|
|
@ -50,7 +50,7 @@ vmm_hyp.o: vmm_hyp.c
|
|||
|
||||
vmm_hyp_blob.elf.full: vmm_hyp_exception.o vmm_hyp.o
|
||||
${LD} -m ${LD_EMULATION} -Bdynamic -T ${SYSDIR}/conf/ldscript.arm64 \
|
||||
${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
|
||||
${_LDFLAGS:N-zbti-report*} --no-warn-mismatch --warn-common --export-dynamic \
|
||||
--dynamic-linker /red/herring -X -o ${.TARGET} ${.ALLSRC} \
|
||||
--defsym=_start='0x0' --defsym=text_start='0x0'
|
||||
|
||||
|
|
Loading…
Reference in a new issue