svn commit: trunk/uClibc/libc/sysdeps/linux/nios2: bits
vapier at uclibc.org
vapier at uclibc.org
Fri Jan 5 01:09:23 PST 2007
Author: vapier
Date: 2007-01-05 01:09:22 -0800 (Fri, 05 Jan 2007)
New Revision: 17161
Log:
Atle Nissestad writes: The attached patch fixes compilation of the current svn on the nios2 platform, and updates the crt1/n/i.S files to get CTOR/DTOR-support to work.
Modified:
trunk/uClibc/libc/sysdeps/linux/nios2/bits/mman.h
trunk/uClibc/libc/sysdeps/linux/nios2/bits/syscalls.h
trunk/uClibc/libc/sysdeps/linux/nios2/crt1.S
trunk/uClibc/libc/sysdeps/linux/nios2/crti.S
trunk/uClibc/libc/sysdeps/linux/nios2/crtn.S
trunk/uClibc/libc/sysdeps/linux/nios2/vfork.S
Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/bits/mman.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/bits/mman.h 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/bits/mman.h 2007-01-05 09:09:22 UTC (rev 17161)
@@ -59,6 +59,15 @@
# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
#endif
+/* Advice to `madvise'. */
+#ifdef __USE_BSD
+# define MADV_NORMAL 0 /* No further special treatment. */
+# define MADV_RANDOM 1 /* Expect random page references. */
+# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
+# define MADV_WILLNEED 3 /* Will need these pages. */
+# define MADV_DONTNEED 4 /* Don't need these pages. */
+#endif
+
/* Flags to `msync'. */
#define MS_ASYNC 1 /* Sync memory asynchronously. */
#define MS_SYNC 4 /* Synchronous memory sync. */
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/bits/syscalls.h
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/bits/syscalls.h 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/bits/syscalls.h 2007-01-05 09:09:22 UTC (rev 17161)
@@ -4,12 +4,292 @@
# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
#endif
-#include <features.h>
+#ifndef __ASSEMBLER__
-/* Do something very evil for now. Until we create our own syscall
- * macros, short circuit bits/sysnum.h and use asm/unistd.h instead */
-#warning "fixme -- add arch specific syscall macros.h"
-#include <asm/unistd.h>
+#include <errno.h>
+#include <asm/traps.h>
+#define __syscall_return(type, res) \
+do { \
+ if ((unsigned long)(res) >= (unsigned long)(-125)) { \
+ \
+ /* avoid using res which is declared to be in \
+ register r2; errno might expand to a function \
+ call and clobber it. */ \
+ \
+ int __err = -(res); \
+ errno = __err; \
+ res = -1; \
+ } \
+ return (type) (res); \
+} while (0)
+
+#define _syscall0(type,name) \
+type name(void) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall1(type,name,atype,a) \
+type name(atype a) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall2(type,name,atype,a,btype,b) \
+type name(atype a,btype b) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ " mov r5, %4\n\t" /* (long) b */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ , "r" ((long) b) /* %4 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ , "r5" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
+type name(atype a,btype b,ctype c) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ " mov r5, %4\n\t" /* (long) b */ \
+ " mov r6, %5\n\t" /* (long) c */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ , "r" ((long) b) /* %4 */ \
+ , "r" ((long) c) /* %5 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ , "r5" /* Clobbered */ \
+ , "r6" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
+type name (atype a, btype b, ctype c, dtype d) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ " mov r5, %4\n\t" /* (long) b */ \
+ " mov r6, %5\n\t" /* (long) c */ \
+ " mov r7, %6\n\t" /* (long) d */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ , "r" ((long) b) /* %4 */ \
+ , "r" ((long) c) /* %5 */ \
+ , "r" ((long) d) /* %6 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ , "r5" /* Clobbered */ \
+ , "r6" /* Clobbered */ \
+ , "r7" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
+type name (atype a,btype b,ctype c,dtype d,etype e) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ " mov r5, %4\n\t" /* (long) b */ \
+ " mov r6, %5\n\t" /* (long) c */ \
+ " mov r7, %6\n\t" /* (long) c */ \
+ " mov r8, %7\n\t" /* (long) e */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ , "r" ((long) b) /* %4 */ \
+ , "r" ((long) c) /* %5 */ \
+ , "r" ((long) d) /* %6 */ \
+ , "r" ((long) e) /* %7 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ , "r5" /* Clobbered */ \
+ , "r6" /* Clobbered */ \
+ , "r7" /* Clobbered */ \
+ , "r8" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
+{ \
+ long __res; \
+ \
+ __asm__ __volatile__ ( \
+ \
+ " \n\t" \
+ \
+ " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
+ " movi r3, %1\n\t" /* __NR_##name */ \
+ " mov r4, %3\n\t" /* (long) a */ \
+ " mov r5, %4\n\t" /* (long) b */ \
+ " mov r6, %5\n\t" /* (long) c */ \
+ " mov r7, %6\n\t" /* (long) c */ \
+ " mov r8, %7\n\t" /* (long) e */ \
+ " mov r9, %8\n\t" /* (long) f */ \
+ \
+ " trap\n\t" \
+ " mov %0, r2\n\t" /* syscall rtn */ \
+ \
+ " \n\t" \
+ \
+ : "=r" (__res) /* %0 */ \
+ \
+ : "i" (__NR_##name) /* %1 */ \
+ , "i" (TRAP_ID_SYSCALL) /* %2 */ \
+ , "r" ((long) a) /* %3 */ \
+ , "r" ((long) b) /* %4 */ \
+ , "r" ((long) c) /* %5 */ \
+ , "r" ((long) d) /* %6 */ \
+ , "r" ((long) e) /* %7 */ \
+ , "r" ((long) f) /* %8 */ \
+ \
+ : "r2" /* Clobbered */ \
+ , "r3" /* Clobbered */ \
+ , "r4" /* Clobbered */ \
+ , "r5" /* Clobbered */ \
+ , "r6" /* Clobbered */ \
+ , "r7" /* Clobbered */ \
+ , "r8" /* Clobbered */ \
+ , "r9" /* Clobbered */ \
+ ); \
+ \
+__syscall_return(type,__res); \
+}
+
+#endif /* __ASSEMBLER__ */
#endif /* _BITS_SYSCALLS_H */
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/crt1.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/crt1.S 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/crt1.S 2007-01-05 09:09:22 UTC (rev 17161)
@@ -16,9 +16,13 @@
#include <asm/unistd.h>
.global _start
- .type __start, at function
+ .type _start, at function
+ .type _init,%function
+ .type _fini,%function
+#ifndef __UCLIBC_CTOR_DTOR__
.weak _init
.weak _fini
+#endif
.type main, at function
.type __uClibc_main, at function
.type __h_errno_location, @function
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/crti.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/crti.S 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/crti.S 2007-01-05 09:09:22 UTC (rev 17161)
@@ -1,31 +1,22 @@
- .file "initfini.c"
-#APP
-
+
.section .init
-#NO_APP
.balign 4
- .global __init
- .type __init, @function
-__init:
+ .global _init
+ .type _init, @function
+_init:
addi sp, sp, -8
stw ra, 0(sp)
stw fp, 4(sp)
-#APP
-
+
.balign 4
.section .fini
-#NO_APP
.balign 4
- .global __fini
- .type __fini, @function
-__fini:
+ .global _fini
+ .type _fini, @function
+_fini:
addi sp, sp, -8
stw ra, 0(sp)
stw fp, 4(sp)
-#APP
.balign 4
-
-
- .ident "GCC: (GNU) 3.3.2"
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/crtn.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/crtn.S 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/crtn.S 2007-01-05 09:09:22 UTC (rev 17161)
@@ -1,30 +1,14 @@
- .file "initfini.c"
-#APP
-
+
.section .init
-#NO_APP
- .balign 4
- .globl _init
- .type _init, @function
-#NO_APP
+
ldw ra, 0(sp)
ldw fp, 4(sp)
addi sp, sp, 8
ret
- .size _init, .-_init
-#APP
-
+
.section .fini
-#NO_APP
- .balign 4
- .globl _fini
- .type _fini, @function
-#NO_APP
+
ldw ra, 0(sp)
ldw fp, 4(sp)
addi sp, sp, 8
ret
- .size _fini, .-_fini
-#APP
-
- .ident "GCC: (GNU) 3.3.2"
Modified: trunk/uClibc/libc/sysdeps/linux/nios2/vfork.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/nios2/vfork.S 2007-01-04 22:13:25 UTC (rev 17160)
+++ trunk/uClibc/libc/sysdeps/linux/nios2/vfork.S 2007-01-05 09:09:22 UTC (rev 17161)
@@ -14,7 +14,7 @@
#define _ERRNO_H
#include <bits/errno.h>
-#include <sys/syscall.h>
+#include <asm/unistd.h>
#ifndef __NR_vfork
#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
More information about the uClibc-cvs
mailing list