From daecc9a410a6f23d80daf8ce3afd280fea329e63 Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Thu, 18 Nov 2010 14:58:01 +0000 Subject: metag: Add NPTL support Signed-off-by: Markos Chandras Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/metag/sysdep.h | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 libc/sysdeps/linux/metag/sysdep.h (limited to 'libc/sysdeps/linux/metag/sysdep.h') diff --git a/libc/sysdeps/linux/metag/sysdep.h b/libc/sysdeps/linux/metag/sysdep.h new file mode 100644 index 000000000..a12f393ce --- /dev/null +++ b/libc/sysdeps/linux/metag/sysdep.h @@ -0,0 +1,59 @@ +/* + * Assembler macros for Meta. + * + * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include + +#include +#include + +#ifdef __ASSEMBLER__ + +#ifdef SHARED +#define PLTJMP(_x) _x##@PLT +#else +#define PLTJMP(_x) _x +#endif + +#undef PSEUDO_END +#define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER \ + END (name) + +#if defined NOT_IN_libc +# define SYSCALL_ERROR __local_syscall_error +# ifdef RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_HANDLER \ +__local_syscall_error: \ + NEG D0Re0, D0Re0; \ + ADDT D1Re0, CPC1, #HI(_rtld_errno); \ + ADD D1Re0, D1Re0, #LO(_rtld_errno) + 4; \ + SETD [D1Re0], D0Re0; \ + NEG D0Re0, #0x1; \ + MOV PC, D1RtP; +# else +# define SYSCALL_ERROR_HANDLER \ +__local_syscall_error: \ + MOV D1Re0, D1RtP; \ + SETL [A0StP++], D0Re0, D1Re0; \ + CALLR D1RtP, PLTJMP(___errno_location); \ + GETD D1Re0, [A0StP+#-8]; \ + NEG D1Re0, D1Re0; \ + SETD [D0Re0], D1Re0; \ + NEG D0Re0, #0x1; \ + GETD D1RtP, [A0StP+#-4]; \ + SUB A0StP, A0StP, #0x8; \ + MOV PC, D1RtP; +# endif +#else +# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ +# define SYSCALL_ERROR ___syscall_error +#endif + +#endif /* __ASSEMBLER __*/ + +/* Pointer mangling is not yet supported for META. */ +#define PTR_MANGLE(var) (void) (var) +#define PTR_DEMANGLE(var) (void) (var) -- cgit v1.2.3