2017-07-10 18:08:08 -07:00
# This file is included by the global makefile so that you can add your own
# architecture-specific flags and dependencies. Remember to do have actions
# for "archclean" and "archdep" for cleaning up and making dependencies for
# this architecture
#
# This file is subject to the terms and conditions of the GNU General Public
# License. See the file "COPYING" in the main directory of this archive
# for more details.
#
OBJCOPYFLAGS := -O binary
LDFLAGS_vmlinux :=
2018-02-13 13:13:16 +08:00
i f e q ( $( CONFIG_DYNAMIC_FTRACE ) , y )
LDFLAGS_vmlinux := --no-relax
e n d i f
2017-07-10 18:08:08 -07:00
KBUILD_AFLAGS_MODULE += -fPIC
KBUILD_CFLAGS_MODULE += -fPIC
export BITS
i f e q ( $( CONFIG_ARCH_RV 64I ) , y )
BITS := 64
UTS_MACHINE := riscv64
KBUILD_CFLAGS += -mabi= lp64
KBUILD_AFLAGS += -mabi= lp64
2018-07-29 01:14:47 +00:00
2018-08-24 08:20:39 +09:00
KBUILD_LDFLAGS += -melf64lriscv
2017-07-10 18:08:08 -07:00
e l s e
BITS := 32
UTS_MACHINE := riscv32
KBUILD_CFLAGS += -mabi= ilp32
KBUILD_AFLAGS += -mabi= ilp32
2018-08-24 08:20:39 +09:00
KBUILD_LDFLAGS += -melf32lriscv
2017-07-10 18:08:08 -07:00
e n d i f
2018-10-09 10:18:32 +08:00
# ISA string setting
2019-04-15 11:14:35 +02:00
riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
2018-10-09 10:18:33 +08:00
riscv-march-$(CONFIG_FPU) := $( riscv-march-y) fd
2018-10-09 10:18:32 +08:00
riscv-march-$(CONFIG_RISCV_ISA_C) := $( riscv-march-y) c
KBUILD_CFLAGS += -march= $( subst fd,,$( riscv-march-y) )
KBUILD_AFLAGS += -march= $( riscv-march-y)
2017-07-10 18:08:08 -07:00
KBUILD_CFLAGS += -mno-save-restore
KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET= $( CONFIG_PAGE_OFFSET)
i f e q ( $( CONFIG_CMODEL_MEDLOW ) , y )
KBUILD_CFLAGS += -mcmodel= medlow
e n d i f
i f e q ( $( CONFIG_CMODEL_MEDANY ) , y )
KBUILD_CFLAGS += -mcmodel= medany
e n d i f
2018-03-15 16:50:41 +08:00
i f e q ( $( CONFIG_MODULE_SECTIONS ) , y )
KBUILD_LDFLAGS_MODULE += -T $( srctree) /arch/riscv/kernel/module.lds
e n d i f
KBUILD_CFLAGS_MODULE += $( call cc-option,-mno-relax)
2017-07-10 18:08:08 -07:00
# GCC versions that support the "-mstrict-align" option default to allowing
# unaligned accesses. While unaligned accesses are explicitly allowed in the
# RISC-V ISA, they're emulated by machine mode traps on all extant
# architectures. It's faster to have GCC emit only aligned accesses.
KBUILD_CFLAGS += $( call cc-option,-mstrict-align)
2018-05-31 17:42:01 +02:00
# arch specific predefines for sparse
CHECKFLAGS += -D__riscv -D__riscv_xlen= $( BITS)
2018-11-12 11:25:15 +05:30
# Default target when executing plain make
boot := arch/riscv/boot
KBUILD_IMAGE := $( boot) /Image.gz
2017-07-10 18:08:08 -07:00
head-y := arch/riscv/kernel/head.o
bpf, riscv: add BPF JIT for RV64G
This commit adds a BPF JIT for RV64G.
The JIT is a two-pass JIT, and has a dynamic prolog/epilogue (similar
to the MIPS64 BPF JIT) instead of static ones (e.g. x86_64).
At the moment the RISC-V Linux port does not support
CONFIG_HAVE_KPROBES, which means that CONFIG_BPF_EVENTS is not
supported. Thus, no tests involving BPF_PROG_TYPE_TRACEPOINT,
BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_KPROBE and
BPF_PROG_TYPE_RAW_TRACEPOINT passes.
The implementation does not support "far branching" (>4KiB).
Test results:
# modprobe test_bpf
test_bpf: Summary: 378 PASSED, 0 FAILED, [366/366 JIT'ed]
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier
...
Summary: 761 PASSED, 507 SKIPPED, 2 FAILED
Note that "test_verifier" was run with one build with
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y and one without, otherwise
many of the the tests that require unaligned access were skipped.
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
0
No CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
59
The two failing test_verifier tests are:
"ld_abs: vlan + abs, test 1"
"ld_abs: jump around ld_abs"
This is due to that "far branching" involved in those tests.
All tests where done on QEMU (QEMU emulator version 3.1.50
(v3.1.0-688-g8ae951fbc106)).
Signed-off-by: Björn Töpel <bjorn.topel@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-02-05 13:41:22 +01:00
core-y += arch/riscv/kernel/ arch/riscv/mm/ arch/riscv/net/
2017-07-10 18:08:08 -07:00
libs-y += arch/riscv/lib/
2018-11-05 15:35:37 +01:00
PHONY += vdso_install
vdso_install :
$( Q) $( MAKE) $( build) = arch/riscv/kernel/vdso $@
2018-11-12 11:25:15 +05:30
all : Image .gz
Image : vmlinux
$( Q) $( MAKE) $( build) = $( boot) $( boot) /$@
Image.% : Image
$( Q) $( MAKE) $( build) = $( boot) $( boot) /$@
zinstall install :
$( Q) $( MAKE) $( build) = $( boot) $@