svn commit: branches/uClibc-nptl: include/sys ldso/ldso/m68k libc/sysdeps/ etc...
sjhill at uclibc.org
sjhill at uclibc.org
Sun Jun 18 04:05:24 UTC 2006
Author: sjhill
Date: 2006-06-17 21:05:21 -0700 (Sat, 17 Jun 2006)
New Revision: 15416
Log:
Merge from trunk.
Modified:
branches/uClibc-nptl/include/sys/kd.h
branches/uClibc-nptl/include/sys/mount.h
branches/uClibc-nptl/include/sys/param.h
branches/uClibc-nptl/include/sys/sysctl.h
branches/uClibc-nptl/ldso/ldso/m68k/dl-sysdep.h
branches/uClibc-nptl/ldso/ldso/m68k/elfinterp.c
branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/syscalls.h
branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h
branches/uClibc-nptl/libc/sysdeps/linux/bfin/syscall.c
branches/uClibc-nptl/libc/sysdeps/linux/common/getcwd.c
branches/uClibc-nptl/libc/sysdeps/linux/common/mremap.c
branches/uClibc-nptl/libc/sysdeps/linux/m68k/clone.S
branches/uClibc-nptl/libc/sysdeps/linux/m68k/crt1.S
Changeset:
Modified: branches/uClibc-nptl/include/sys/kd.h
===================================================================
--- branches/uClibc-nptl/include/sys/kd.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/include/sys/kd.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
/* Make sure the <linux/types.h> header is not loaded. */
#ifndef _LINUX_TYPES_H
-# define _LINUX_TYPES_H 1
+# define _LINUX_TYPES_H 1
# define __undef_LINUX_TYPES_H
#endif
Modified: branches/uClibc-nptl/include/sys/mount.h
===================================================================
--- branches/uClibc-nptl/include/sys/mount.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/include/sys/mount.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -1,5 +1,5 @@
/* Header file for mounting/unmount Linux filesystems.
- Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1996,1997,1998,1999,2000,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -62,7 +62,8 @@
};
/* Flags that can be altered by MS_REMOUNT */
-#define MS_RMT_MASK (MS_RDONLY | MS_MANDLOCK)
+#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_NOATIME \
+ |MS_NODIRATIME)
/* Magic mount flag number. Has to be or-ed to the flag values. */
@@ -82,6 +83,14 @@
#define BLKFLSBUF _IO(0x12, 97) /* Flush buffer cache. */
#define BLKRASET _IO(0x12, 98) /* Set read ahead for block device. */
#define BLKRAGET _IO(0x12, 99) /* Get current read ahead setting. */
+#define BLKFRASET _IO(0x12,100) /* Set filesystem read-ahead. */
+#define BLKFRAGET _IO(0x12,101) /* Get filesystem read-ahead. */
+#define BLKSECTSET _IO(0x12,102) /* Set max sectors per request. */
+#define BLKSECTGET _IO(0x12,103) /* Get max sectors per request. */
+#define BLKSSZGET _IO(0x12,104) /* Get block device sector size. */
+#define BLKBSZGET _IOR(0x12,112,size_t)
+#define BLKBSZSET _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size. */
/* Possible value for FLAGS parameter of `umount2'. */
Modified: branches/uClibc-nptl/include/sys/param.h
===================================================================
--- branches/uClibc-nptl/include/sys/param.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/include/sys/param.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,2000,2001,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -49,10 +49,16 @@
/* Macros for counting and rounding. */
#ifndef howmany
-# define howmany(x, y) (((x)+((y)-1))/(y))
+# define howmany(x, y) (((x) + ((y) - 1)) / (y))
#endif
-#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-#define powerof2(x) ((((x)-1)&(x))==0)
+#ifdef __GNUC__
+# define roundup(x, y) (__builtin_constant_p (y) && powerof2 (y) \
+ ? (((x) + (y) - 1) & ~((y) - 1)) \
+ : ((((x) + ((y) - 1)) / (y)) * (y)))
+#else
+# define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
+#endif
+#define powerof2(x) ((((x) - 1) & (x)) == 0)
/* Macros for min/max. */
#define MIN(a,b) (((a)<(b))?(a):(b))
Modified: branches/uClibc-nptl/include/sys/sysctl.h
===================================================================
--- branches/uClibc-nptl/include/sys/sysctl.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/include/sys/sysctl.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,16 +17,52 @@
02111-1307 USA. */
#ifndef _SYS_SYSCTL_H
+#define _SYS_SYSCTL_H 1
-#define _SYS_SYSCTL_H 1
#include <features.h>
-
-__BEGIN_DECLS
-
#define __need_size_t
#include <stddef.h>
+/* Prevent more kernel headers than necessary to be included. */
+#ifndef _LINUX_KERNEL_H
+# define _LINUX_KERNEL_H 1
+# define __undef_LINUX_KERNEL_H
+#endif
+#ifndef _LINUX_TYPES_H
+# define _LINUX_TYPES_H 1
+# define __undef_LINUX_TYPES_H
+#endif
+#ifndef _LINUX_LIST_H
+# define _LINUX_LIST_H 1
+# define __undef_LINUX_LIST_H
+#endif
+#ifndef __LINUX_COMPILER_H
+# define __LINUX_COMPILER_H 1
+# define __user
+# define __undef__LINUX_COMPILER_H
+#endif
+
#include <linux/sysctl.h>
+#ifdef __undef_LINUX_KERNEL_H
+# undef _LINUX_KERNEL_H
+# undef __undef_LINUX_KERNEL_H
+#endif
+#ifdef __undef_LINUX_TYPES_H
+# undef _LINUX_TYPES_H
+# undef __undef_LINUX_TYPES_H
+#endif
+#ifdef __undef_LINUX_LIST_H
+# undef _LINUX_LIST_H
+# undef __undef_LINUX_LIST_H
+#endif
+#ifdef __undef__LINUX_COMPILER_H
+# undef __LINUX_COMPILER_H
+# undef __user
+# undef __undef__LINUX_COMPILER_H
+#endif
+
+__BEGIN_DECLS
+
/* Read or write system parameters. */
extern int sysctl (int *__name, int __nlen, void *__oldval,
size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
Modified: branches/uClibc-nptl/ldso/ldso/m68k/dl-sysdep.h
===================================================================
--- branches/uClibc-nptl/ldso/ldso/m68k/dl-sysdep.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/ldso/ldso/m68k/dl-sysdep.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -11,8 +11,8 @@
/* Initialization sequence for a GOT. */
#define INIT_GOT(GOT_BASE,MODULE) \
do { \
- GOT_BASE[2] = (int) _dl_linux_resolve; \
- GOT_BASE[1] = (int) (MODULE); \
+ GOT_BASE[2] = (unsigned long) _dl_linux_resolve; \
+ GOT_BASE[1] = (unsigned long) (MODULE); \
} while(0)
/* Here we define the magic numbers that this dynamic loader should accept */
@@ -23,12 +23,8 @@
#define ELF_TARGET "m68k"
struct elf_resolve;
-extern unsigned int _dl_linux_resolver (struct elf_resolve *, int);
+extern unsigned long _dl_linux_resolver (struct elf_resolve *, int);
-/* Define this because we do not want to call .udiv in the library.
- Not needed for m68k. */
-#define do_rem(result, n, base) ((result) = (n) % (base))
-
/* 4096 bytes alignment */
#define PAGE_ALIGN 0xfffff000
#define ADDR_ALIGN 0xfff
Modified: branches/uClibc-nptl/ldso/ldso/m68k/elfinterp.c
===================================================================
--- branches/uClibc-nptl/ldso/ldso/m68k/elfinterp.c 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/ldso/ldso/m68k/elfinterp.c 2006-06-18 04:05:21 UTC (rev 15416)
@@ -44,7 +44,7 @@
extern int _dl_linux_resolve(void);
-unsigned int
+unsigned long
_dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry)
{
int reloc_type;
Modified: branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/syscalls.h
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/syscalls.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/syscalls.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -4,169 +4,177 @@
# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
#endif
-#include <features.h>
-
/* This includes the `__NR_<name>' syscall numbers taken from the Linux kernel
* header files. It also defines the traditional `SYS_<name>' macros for older
* programs. */
#include <bits/sysnum.h>
-/* This code is mostly cut & paste from the uClinux bfin port */
+#ifndef __set_errno
+# define __set_errno(val) ((*__errno_location ()) = (val))
+#endif
+#ifndef SYS_ify
+# define SYS_ify(syscall_name) (__NR_##syscall_name)
+#endif
+
#ifndef __ASSEMBLER__
-#define __syscall_return(type, res) \
-do { \
- if ((unsigned long)(res) >= (unsigned long)(-125)) \
- { __set_errno(-(res)); \
- res = -1; \
- } \
- return (type) (res); \
+/* user-visible error numbers are in the range -1 - -4095: see <asm-frv/errno.h> */
+#if defined _LIBC && !defined __set_errno
+# define __syscall_return(type, res) \
+do { \
+ unsigned long __sr2 = (res); \
+ if (__builtin_expect ((unsigned long)(__sr2) \
+ >= (unsigned long)(-4095), 0)) { \
+ extern int __syscall_error (int); \
+ return (type) __syscall_error (__sr2); \
+ } \
+ return (type) (__sr2); \
} while (0)
+#else
+# define __syscall_return(type, res) \
+do { \
+ unsigned long __sr2 = (res); \
+ if (__builtin_expect ((unsigned long)(__sr2) \
+ >= (unsigned long)(-4095), 0)) { \
+ __set_errno (-__sr2); \
+ __sr2 = -1; \
+ } \
+ return (type) (__sr2); \
+} while (0)
+#endif
#define _syscall0(type,name) \
type name(void) { \
- long __res; \
- __asm__ __volatile__ ( \
- "p0 = %1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name) \
- : "CC", "P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "p0 = %1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name) \
+ : "memory","CC","R0","P0"); \
+ __syscall_return(type,__res); \
}
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) { \
- long __res; \
- __asm__ __volatile__ ( \
- "r0=%2;\n\t" \
- "p0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "a" ((long)(arg1)) \
- : "CC", "R0", "P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r0=%2;\n\t" \
+ "p0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)) \
+ : "memory","CC","R0","P0"); \
+ __syscall_return(type,__res); \
}
#define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1,type2 arg2) { \
- long __res; \
- __asm__ __volatile__ ( \
- "r1=%3;\n\t" \
- "r0=%2;\n\t" \
- "p0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "a" ((long)(arg1)), \
- "a" ((long)(arg2)) \
- : "CC", "R0","R1", "P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r1=%3;\n\t" \
+ "r0=%2;\n\t" \
+ "p0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)), \
+ "rm" ((long)(arg2)) \
+ : "memory","CC","R0","R1","P0"); \
+ __syscall_return(type,__res); \
}
-
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
type name(type1 arg1,type2 arg2,type3 arg3) { \
- long __res; \
- __asm__ __volatile__ ( \
- "r2=%4;\n\t" \
- "r1=%3;\n\t" \
- "r0=%2;\n\t" \
- "p0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "a" ((long)(arg1)), \
- "a" ((long)(arg2)), \
- "a" ((long)(arg3)) \
- : "CC", "R0","R1","R2", "P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r2=%4;\n\t" \
+ "r1=%3;\n\t" \
+ "r0=%2;\n\t" \
+ "p0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)), \
+ "rm" ((long)(arg2)), \
+ "rm" ((long)(arg3)) \
+ : "memory","CC","R0","R1","R2","P0"); \
+ __syscall_return(type,__res); \
}
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \
- long __res; \
- __asm__ __volatile__ ( \
- "[--sp] = r3;\n\t" \
- "r3=%5;\n\t" \
- "r2=%4;\n\t" \
- "r1=%3;\n\t" \
- "r0=%2;\n\t" \
- "p0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- "r3 = [sp++];\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "a" ((long)(arg1)), \
- "a" ((long)(arg2)), \
- "a" ((long)(arg3)), \
- "a" ((long)(arg4)) \
- : "CC", "R0","R1","R2","R3", "P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r3=%5;\n\t" \
+ "r2=%4;\n\t" \
+ "r1=%3;\n\t" \
+ "r0=%2;\n\t" \
+ "p0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)), \
+ "rm" ((long)(arg2)), \
+ "rm" ((long)(arg3)), \
+ "rm" ((long)(arg4)) \
+ : "memory","CC","R0","R1","R2","R3","P0"); \
+ __syscall_return(type,__res); \
}
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \
- long __res; \
- __asm__ __volatile__ ( \
- "[--sp] = r4;\n\t" \
- "[--sp] = r3;\n\t" \
- "r4=%6;\n\t" \
- "r3=%5;\n\t" \
- "r2=%4;\n\t" \
- "r1=%3;\n\t" \
- "r0=%2;\n\t" \
- "P0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- "r3 = [sp++];\n\t" \
- "r4 = [sp++];\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "rm" ((long)(arg1)), \
- "rm" ((long)(arg2)), \
- "rm" ((long)(arg3)), \
- "rm" ((long)(arg4)), \
- "rm" ((long)(arg5)) \
- : "CC","R0","R1","R2","R3","R4","P0"); \
-__syscall_return(type,__res); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r4=%6;\n\t" \
+ "r3=%5;\n\t" \
+ "r2=%4;\n\t" \
+ "r1=%3;\n\t" \
+ "r0=%2;\n\t" \
+ "P0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)), \
+ "rm" ((long)(arg2)), \
+ "rm" ((long)(arg3)), \
+ "rm" ((long)(arg4)), \
+ "rm" ((long)(arg5)) \
+ : "memory","CC","R0","R1","R2","R3","R4","P0"); \
+ __syscall_return(type,__res); \
}
-#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \
- long __res; \
- __asm__ __volatile__ ( \
- "[--sp] = r5;\n\t" \
- "[--sp] = r4;\n\t" \
- "[--sp] = r3;\n\t" \
- "r4=%6;\n\t" \
- "r3=%5;\n\t" \
- "r2=%4;\n\t" \
- "r1=%3;\n\t" \
- "r0=%2;\n\t" \
- "P0=%1;\n\t" \
- "excpt 0;\n\t" \
- "%0=r0;\n\t" \
- "r3 = [sp++];\n\t" \
- "r4 = [sp++];\n\t" \
- "r5 = [sp++];\n\t" \
- : "=da" (__res) \
- : "i" (__NR_##name), \
- "rm" ((long)(arg1)), \
- "rm" ((long)(arg2)), \
- "rm" ((long)(arg3)), \
- "rm" ((long)(arg4)), \
- "rm" ((long)(arg5)), \
- "rm" ((long)(arg6)) \
- : "CC","R0","R1","R2","R3","R4","R5","P0"); \
-__syscall_return(type,__res); \
+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \
+ long __res; \
+ __asm__ __volatile__ ( \
+ "r5=%7;\n\t" \
+ "r4=%6;\n\t" \
+ "r3=%5;\n\t" \
+ "r2=%4;\n\t" \
+ "r1=%3;\n\t" \
+ "r0=%2;\n\t" \
+ "P0=%1;\n\t" \
+ "excpt 0;\n\t" \
+ "%0=r0;\n\t" \
+ : "=da" (__res) \
+ : "i" (__NR_##name), \
+ "rm" ((long)(arg1)), \
+ "rm" ((long)(arg2)), \
+ "rm" ((long)(arg3)), \
+ "rm" ((long)(arg4)), \
+ "rm" ((long)(arg5)), \
+ "rm" ((long)(arg6)) \
+ : "memory","CC","R0","R1","R2","R3","R4","R5","P0"); \
+ __syscall_return(type,__res); \
}
#endif /* __ASSEMBLER__ */
Modified: branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h 2006-06-18 04:05:21 UTC (rev 15416)
@@ -10,7 +10,7 @@
#undef __UCLIBC_ABORT_INSTRUCTION__
/* can your target use syscall6() for mmap ? */
-#undef __UCLIBC_MMAP_HAS_6_ARGS__
+#define __UCLIBC_MMAP_HAS_6_ARGS__
/* does your target use syscall4() for truncate64 ? (32bit arches only) */
#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
Modified: branches/uClibc-nptl/libc/sysdeps/linux/bfin/syscall.c
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/bfin/syscall.c 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/bfin/syscall.c 2006-06-18 04:05:21 UTC (rev 15416)
@@ -1,10 +1,22 @@
/* vi: set sw=4 ts=4: */
/* syscall for blackfin/uClibc
*
- * Copyright (C) 2004 by Analog Devices Inc.
- * Copyright (C) 2000-2006 Erik Andersen <andersen at uclibc.org>
+ * Copyright (C) 2004-2006 by Analog Devices Inc.
+ * Copyright (C) 2002 by Erik Andersen <andersen at uclibc.org>
*
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <features.h>
@@ -12,26 +24,34 @@
#include <sys/types.h>
#include <sys/syscall.h>
-long syscall(long sysnum, long a, long b, long c, long d, long e)
+long syscall(long sysnum, long a, long b, long c, long d, long e, long f)
{
int _r0 = 0;
- asm volatile(
- "p0 = %1;" /*SysCall Number*/
- "r0 = %2;"
- "r1 = %3;"
- "r2 = %4;"
- "r3 = %6;"
- "r4 = %5;"
- "excpt 0;" /*Call the System Call*/
- "%0 = r0;" /*Store the result of syscall*/
- : "=r"(_r0)
- : "r"(sysnum), "r"(a), "r"(b),
- "r"(c), "r"(d), "r"(e)
- : "memory");
- if(_r0 >=(unsigned long) -4095) {
- (*__errno_location())=(-_r0);
- _r0=(unsigned long) -1;
- }
- return (long) _r0;
+ __asm__ __volatile__ (
+ "R5 = %7;"
+ "R4 = %6;"
+ "R3 = %5;"
+ "R2 = %4;"
+ "R1 = %3;"
+ "R0 = %2;"
+ "P0 = %1;"
+ "excpt 0;"
+ "%0 = R0;"
+ : "=r" (_r0)
+ : "rm" (sysnum),
+ "rm" (a),
+ "rm" (b),
+ "rm" (c),
+ "rm" (d),
+ "rm" (e),
+ "rm" (f)
+ : "memory","CC","R0","R1","R2","R3","R4","R5","P0");
+
+ if (_r0 >= (unsigned long) -4095) {
+ (*__errno_location()) = (-_r0);
+ _r0 = (unsigned long) -1;
+ }
+
+ return (long)_r0;
}
Modified: branches/uClibc-nptl/libc/sysdeps/linux/common/getcwd.c
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/common/getcwd.c 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/common/getcwd.c 2006-06-18 04:05:21 UTC (rev 15416)
@@ -12,9 +12,11 @@
#include <dirent.h>
#include <string.h>
#include <unistd.h>
+#include <sys/param.h>
#include <sys/syscall.h>
libc_hidden_proto(getcwd)
+libc_hidden_proto(getpagesize)
libc_hidden_proto(strcat)
libc_hidden_proto(strcpy)
@@ -182,7 +184,7 @@
__set_errno(EINVAL);
return NULL;
}
- alloc_size = PATH_MAX;
+ alloc_size = MAX (PATH_MAX, getpagesize ());
}
path=buf;
if (buf == NULL) {
Modified: branches/uClibc-nptl/libc/sysdeps/linux/common/mremap.c
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/common/mremap.c 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/common/mremap.c 2006-06-18 04:05:21 UTC (rev 15416)
@@ -9,10 +9,13 @@
#include "syscalls.h"
#include <unistd.h>
+#define mremap _hidemremap
#include <sys/mman.h>
+#undef mremap
+void *mremap(void *, size_t, size_t, int, void *);
+
libc_hidden_proto(mremap)
-
-_syscall4(__ptr_t, mremap, __ptr_t, old_address, size_t, old_size, size_t,
- new_size, int, may_move);
+_syscall5(void *, mremap, void *, old_address, size_t, old_size, size_t,
+ new_size, int, may_move, void *, new_address);
libc_hidden_def(mremap)
Modified: branches/uClibc-nptl/libc/sysdeps/linux/m68k/clone.S
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/m68k/clone.S 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/m68k/clone.S 2006-06-18 04:05:21 UTC (rev 15416)
@@ -21,11 +21,11 @@
movel 4(%sp), %d1 /* no NULL function pointers */
movel %d1, %a0
tstl %d1
- beq.w __syscall_error
+ jbeq __syscall_error
movel 8(%sp), %d1 /* no NULL stack pointers */
movel %d1, %a1
tstl %d1
- beq.w __syscall_error
+ jbeq __syscall_error
/* Allocate space and copy the argument onto the new stack. */
movel 16(%sp), -(%a1)
@@ -50,7 +50,7 @@
#endif
tstl %d0
- bmi.w __syscall_error
+ jbmi __syscall_error
beq.w thread_start
rts
Modified: branches/uClibc-nptl/libc/sysdeps/linux/m68k/crt1.S
===================================================================
--- branches/uClibc-nptl/libc/sysdeps/linux/m68k/crt1.S 2006-06-18 01:35:02 UTC (rev 15415)
+++ branches/uClibc-nptl/libc/sysdeps/linux/m68k/crt1.S 2006-06-18 04:05:21 UTC (rev 15416)
@@ -51,6 +51,13 @@
(4*(argc+1))(%sp) envp[0]
...
NULL
+
+ The uclinux conventions are different. %a1 is not defined on entry
+ and the stack is laid out as follows:
+
+ 0(%sp) argc
+ 4(%sp) argv
+ 8(%sp) envp
*/
#include <features.h>
@@ -73,15 +80,23 @@
arguments for `main': argc, argv. envp will be determined
later in __libc_start_main. */
move.l (%sp)+, %d0 /* Pop the argument count. */
+#ifndef __ARCH_USE_MMU__
+ move.l (%sp)+, %a0
+#else
move.l %sp, %a0 /* The argument vector starts just at the
current stack top. */
+#endif
/* Provide the highest stack address to the user code (for stacks
which grow downward). */
pea (%sp)
+#ifndef __ARCH_USE_MMU__
+ clr.l -(%sp)
+#else
pea (%a1) /* Push address of the shared library
termination function. */
+#endif
/* Push the address of our own entry points to `.fini' and
`.init'. */
More information about the uClibc-cvs
mailing list