From f481aba1a636f8c420b3fda2b70cc3d017a5f17e Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Wed, 10 Apr 2019 08:17:22 -0500 Subject: [PATCH] libroot/syscall: Add riscv64, improve error handling * Add generic riscv64 support. * Previously, missing architecture syscall.inc's would result in obsecure unrecognized opcode messages. * The logic should be identical, but with a friendly error. Change-Id: I8f4878e99faf0f64465d2a27c3da2dd1e43c4ba5 Reviewed-on: https://review.haiku-os.org/c/1402 Reviewed-by: Alex von Gluck IV --- .../libroot/os/arch/riscv64/syscalls.inc | 33 +++++++++++++++++ src/system/libroot/os/syscalls.S | 35 ++++++++++--------- 2 files changed, 51 insertions(+), 17 deletions(-) create mode 100644 src/system/libroot/os/arch/riscv64/syscalls.inc diff --git a/src/system/libroot/os/arch/riscv64/syscalls.inc b/src/system/libroot/os/arch/riscv64/syscalls.inc new file mode 100644 index 0000000000..031585d2d7 --- /dev/null +++ b/src/system/libroot/os/arch/riscv64/syscalls.inc @@ -0,0 +1,33 @@ +/* +** Copyright 2001-2007, Travis Geiselbrecht. All rights reserved. +** Distributed under the terms of the MIT License. +*/ + +/* TODO actuall syscalls? */ +#define _SYSCALL(name, n) \ +.globl name; \ +.type name,%function; \ +.align 4; \ +name: + +#define SYSCALL0(name, n) _SYSCALL(name, n) +#define SYSCALL1(name, n) _SYSCALL(name, n) +#define SYSCALL2(name, n) _SYSCALL(name, n) +#define SYSCALL3(name, n) _SYSCALL(name, n) +#define SYSCALL4(name, n) _SYSCALL(name, n) +#define SYSCALL5(name, n) _SYSCALL(name, n) +#define SYSCALL6(name, n) _SYSCALL(name, n) +#define SYSCALL7(name, n) _SYSCALL(name, n) +#define SYSCALL8(name, n) _SYSCALL(name, n) +#define SYSCALL9(name, n) _SYSCALL(name, n) +#define SYSCALL10(name, n) _SYSCALL(name, n) +#define SYSCALL11(name, n) _SYSCALL(name, n) +#define SYSCALL12(name, n) _SYSCALL(name, n) +#define SYSCALL13(name, n) _SYSCALL(name, n) +#define SYSCALL14(name, n) _SYSCALL(name, n) +#define SYSCALL15(name, n) _SYSCALL(name, n) +#define SYSCALL16(name, n) _SYSCALL(name, n) +#define SYSCALL17(name, n) _SYSCALL(name, n) +#define SYSCALL18(name, n) _SYSCALL(name, n) +#define SYSCALL19(name, n) _SYSCALL(name, n) +#define SYSCALL20(name, n) _SYSCALL(name, n) diff --git a/src/system/libroot/os/syscalls.S b/src/system/libroot/os/syscalls.S index 2d773dda1e..4e4fb30593 100644 --- a/src/system/libroot/os/syscalls.S +++ b/src/system/libroot/os/syscalls.S @@ -1,29 +1,30 @@ -#ifdef ARCH_x86 +/* + * Copyright 2019, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#if defined(ARCH_x86) # include "arch/x86/syscalls.inc" -#endif -#ifdef ARCH_x86_64 +#elif defined(ARCH_x86_64) # include "arch/x86_64/syscalls.inc" -#endif -#ifdef ARCH_alpha +#elif defined(ARCH_alpha) # include "arch/alpha/syscalls.inc" -#endif -#ifdef ARCH_sh4 +#elif defined(ARCH_sh4) # include "arch/sh4/syscalls.inc" -#endif -#ifdef ARCH_sparc +#elif defined(ARCH_sparc) # include "arch/sparc/syscalls.inc" -#endif -#ifdef ARCH_sparc64 +#elif defined(ARCH_sparc64) # include "arch/sparc64/syscalls.inc" -#endif -#ifdef ARCH_ppc +#elif defined(ARCH_ppc) # include "arch/ppc/syscalls.inc" -#endif -#ifdef ARCH_arm +#elif defined(ARCH_arm) # include "arch/arm/syscalls.inc" -#endif -#ifdef ARCH_m68k +#elif defined(ARCH_m68k) # include "arch/m68k/syscalls.inc" +#elif defined(ARCH_riscv64) +# include "arch/riscv64/syscalls.inc" +#else +#error No syscalls macros defined for this architecture! #endif /* include the auto-generated file syscalls file */