public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Adhemerval Zanella <azanella@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc/azanella/syscall-refactor] m68k: Add internal_syscall Date: Mon, 29 Jun 2020 21:46:14 +0000 (GMT) [thread overview] Message-ID: <20200629214614.1138138930DC@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=49a0944126ce26923bad35dd5a70b8ff78018c1a commit 49a0944126ce26923bad35dd5a70b8ff78018c1a Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Sat May 23 16:47:49 2020 -0300 m68k: Add internal_syscall Diff: --- sysdeps/m68k/nptl/tls.h | 4 +- sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c | 4 +- sysdeps/unix/sysv/linux/m68k/brk.c | 2 +- .../unix/sysv/linux/m68k/coldfire/atomic-machine.h | 2 +- sysdeps/unix/sysv/linux/m68k/getpagesize.c | 4 +- sysdeps/unix/sysv/linux/m68k/m68k-helpers.c | 2 +- sysdeps/unix/sysv/linux/m68k/sysdep.h | 108 +++++++++++++++++++++ 7 files changed, 117 insertions(+), 9 deletions(-) diff --git a/sysdeps/m68k/nptl/tls.h b/sysdeps/m68k/nptl/tls.h index 68ea952e79..593150ebe1 100644 --- a/sysdeps/m68k/nptl/tls.h +++ b/sysdeps/m68k/nptl/tls.h @@ -97,9 +97,9 @@ typedef struct ({ \ int _sys_result; \ \ - _sys_result = INTERNAL_SYSCALL_CALL (set_thread_area, \ + _sys_result = internal_syscall (__NR_set_thread_area, \ ((void *) (tcbp)) + TLS_TCB_OFFSET); \ - INTERNAL_SYSCALL_ERROR_P (_sys_result) ? "unknown error" : NULL; }) + _sys_result != 0 ? "unknown error" : NULL; }) # define TLS_DEFINE_INIT_TP(tp, pd) \ void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE diff --git a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c b/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c index 1e9c5259ab..98f5d68e86 100644 --- a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c +++ b/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c @@ -25,8 +25,8 @@ if ((unsigned long) (sp) < this_sp) \ { \ stack_t oss; \ - int result = INTERNAL_SYSCALL_CALL (sigaltstack, NULL, &oss); \ - if (!INTERNAL_SYSCALL_ERROR_P (result) \ + int result = internal_syscall (__NR_sigaltstack, NULL, &oss); \ + if (result == 0 \ && ((oss.ss_flags & SS_ONSTACK) == 0 \ || ((unsigned long) oss.ss_sp + oss.ss_size \ - (unsigned long) (sp)) < oss.ss_size)) \ diff --git a/sysdeps/unix/sysv/linux/m68k/brk.c b/sysdeps/unix/sysv/linux/m68k/brk.c index ee88acbdc4..1f4408ea11 100644 --- a/sysdeps/unix/sysv/linux/m68k/brk.c +++ b/sysdeps/unix/sysv/linux/m68k/brk.c @@ -32,7 +32,7 @@ __brk (void *addr) { void *newbrk; - newbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); + newbrk = (void *) internal_syscall (__NR_brk, addr); __curbrk = newbrk; if (newbrk < addr) diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h b/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h index ea05b00357..045a284db4 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h @@ -61,6 +61,6 @@ typedef uintmax_t uatomic_max_t; }) # define atomic_full_barrier() \ - (INTERNAL_SYSCALL_CALL (atomic_barrier), (void) 0) + (internal_syscall (__NR_atomic_barrier), (void) 0) #endif diff --git a/sysdeps/unix/sysv/linux/m68k/getpagesize.c b/sysdeps/unix/sysv/linux/m68k/getpagesize.c index 99c83313d2..2e4a8075df 100644 --- a/sysdeps/unix/sysv/linux/m68k/getpagesize.c +++ b/sysdeps/unix/sysv/linux/m68k/getpagesize.c @@ -33,9 +33,9 @@ __getpagesize (void) if (GLRO(dl_pagesize) != 0) return GLRO(dl_pagesize); - result = INTERNAL_SYSCALL_CALL (getpagesize); /* The only possible error is ENOSYS. */ - if (!INTERNAL_SYSCALL_ERROR_P (result)) + result = internal_syscall (__NR_getpagesize); + if (!__syscall_err (result)) return result; return 4096; diff --git a/sysdeps/unix/sysv/linux/m68k/m68k-helpers.c b/sysdeps/unix/sysv/linux/m68k/m68k-helpers.c index 62809e3f5a..0287997454 100644 --- a/sysdeps/unix/sysv/linux/m68k/m68k-helpers.c +++ b/sysdeps/unix/sysv/linux/m68k/m68k-helpers.c @@ -21,5 +21,5 @@ void * __m68k_read_tp (void) { - return (void*) INTERNAL_SYSCALL_CALL (get_thread_area); + return (void*) internal_syscall (__NR_get_thread_area); } diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h index 36e13569f1..9f4868eba6 100644 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h @@ -291,6 +291,114 @@ SYSCALL_ERROR_LABEL: \ LOAD_REGS_5 #define ASM_ARGS_6 ASM_ARGS_5, "a" (_a0) +static inline long int +__internal_syscall0 (long int name) +{ + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall1 (long int name, __syscall_arg_t arg1) +{ + register int d1 asm ("d1") = arg1; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall2 (long int name, __syscall_arg_t arg1, + __syscall_arg_t arg2) +{ + register int d1 asm ("d1") = arg1; + register int d2 asm ("d2") = arg2; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1), "d" (d2) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall3 (long int name, __syscall_arg_t arg1, + __syscall_arg_t arg2, __syscall_arg_t arg3) +{ + register int d1 asm ("d1") = arg1; + register int d2 asm ("d2") = arg2; + register int d3 asm ("d3") = arg3; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1), "d" (d2), "d" (d3) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall4 (long int name, __syscall_arg_t arg1, + __syscall_arg_t arg2, __syscall_arg_t arg3, + __syscall_arg_t arg4) +{ + register int d1 asm ("d1") = arg1; + register int d2 asm ("d2") = arg2; + register int d3 asm ("d3") = arg3; + register int d4 asm ("d4") = arg4; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1), "d" (d2), "d" (d3), "d" (d4) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall5 (long int name, __syscall_arg_t arg1, + __syscall_arg_t arg2, __syscall_arg_t arg3, + __syscall_arg_t arg4, __syscall_arg_t arg5) +{ + register int d1 asm ("d1") = arg1; + register int d2 asm ("d2") = arg2; + register int d3 asm ("d3") = arg3; + register int d4 asm ("d4") = arg4; + register int d5 asm ("d5") = arg5; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1), "d" (d2), "d" (d3), "d" (d4), "d" (d5) + : "memory"); + return d0; +} + +static inline long int +__internal_syscall6 (long int name, __syscall_arg_t arg1, + __syscall_arg_t arg2, __syscall_arg_t arg3, + __syscall_arg_t arg4, __syscall_arg_t arg5, + __syscall_arg_t arg6) +{ + register int d1 asm ("d1") = arg1; + register int d2 asm ("d2") = arg2; + register int d3 asm ("d3") = arg3; + register int d4 asm ("d4") = arg4; + register int d5 asm ("d5") = arg5; + register int a0 asm ("a0") = arg6; + register int d0 asm ("d0") = name; + asm volatile ("trap #0" + : "=d" (d0) + : "0" (d0), "d" (d1), "d" (d2), "d" (d3), "d" (d4), "d" (d5), + "a" (a0) + : "memory"); + return d0; +} + #endif /* not __ASSEMBLER__ */ /* Pointer mangling is not yet supported for M68K. */
reply other threads:[~2020-06-29 21:46 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200629214614.1138138930DC@sourceware.org \ --to=azanella@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).