[uClibc-cvs] CVS update of uClibc (libc/sysdeps/linux/frv/Makefile libc/sysdeps/linux/frv/bits/elf-fdpic.h libc/sysdeps/linux/frv/bits/kernel_stat.h libc/sysdeps/linux/frv/bits/stat.h libc/sysdeps/linux/frv/bits/syscalls.h libc/sysdeps/linux/frv/bits/uClibc_page.h libc/sysdeps/linux/frv/crt0.S libc/sysdeps/linux/frv/crti.S libc/sysdeps/linux/frv/crtn.S libc/sysdeps/linux/frv/crtreloc.c libc/sysdeps/linux/frv/fstat.c libc/sysdeps/linux/frv/fstat64.c libc/sysdeps/linux/frv/lstat.c libc/sysdeps/linux/frv/lstat64.c libc/sysdeps/linux/frv/stat.c libc/sysdeps/linux/frv/stat64.c libc/sysdeps/linux/frv/xstatconv.c libpthread/linuxthreads/sysdeps/frv/pt-machine.h)

Erik Andersen andersen at codepoet.org
Thu Aug 26 23:36:05 UTC 2004


    Date: Thursday, August 26, 2004 @ 17:36:05
  Author: andersen
    Path: /var/cvs/uClibc

   Added: libc/sysdeps/linux/frv/bits/stat.h (1.1)
          libc/sysdeps/linux/frv/bits/uClibc_page.h (1.1)
          libc/sysdeps/linux/frv/fstat.c (1.1)
          libc/sysdeps/linux/frv/fstat64.c (1.1)
          libc/sysdeps/linux/frv/lstat.c (1.1)
          libc/sysdeps/linux/frv/lstat64.c (1.1)
          libc/sysdeps/linux/frv/stat.c (1.1)
          libc/sysdeps/linux/frv/stat64.c (1.1)
          libc/sysdeps/linux/frv/xstatconv.c (1.1)
Modified: libc/sysdeps/linux/frv/Makefile (1.5 -> 1.6)
          libc/sysdeps/linux/frv/bits/elf-fdpic.h (1.1 -> 1.2)
          libc/sysdeps/linux/frv/bits/kernel_stat.h (1.1 -> 1.2)
          libc/sysdeps/linux/frv/bits/syscalls.h (1.2 -> 1.3)
          libc/sysdeps/linux/frv/crt0.S (1.3 -> 1.4)
          libc/sysdeps/linux/frv/crti.S (1.1 -> 1.2)
          libc/sysdeps/linux/frv/crtn.S (1.1 -> 1.2)
          libc/sysdeps/linux/frv/crtreloc.c (1.2 -> 1.3)
          libpthread/linuxthreads/sysdeps/frv/pt-machine.h (1.1 -> 1.2)

Partial patch from Alexandre Oliva:

- adjust licensing terms of sources for crt*.o

- change the stat ABI to speed it up, matching changes in the kernel

- assorted bug-fixes, improvements and updates in the FR-V port

etc.


Index: uClibc/libc/sysdeps/linux/frv/Makefile
diff -u uClibc/libc/sysdeps/linux/frv/Makefile:1.5 uClibc/libc/sysdeps/linux/frv/Makefile:1.6
--- uClibc/libc/sysdeps/linux/frv/Makefile:1.5	Sat Aug 21 15:19:25 2004
+++ uClibc/libc/sysdeps/linux/frv/Makefile	Thu Aug 26 17:36:04 2004
@@ -32,6 +32,7 @@
 SOBJS=$(patsubst %.S,%.o, $(SSRC))
 
 CSRC=mmap.c sysdep.c syscall.c brk.c sbrk.c __init_brk.c dl-iterate-phdr.c
+CSRC+=xstatconv.c stat.c stat64.c fstat.c fstat64.c lstat.c lstat64.c
 COBJS=$(patsubst %.c,%.o, $(CSRC))
 
 OBJS=$(SOBJS) $(COBJS)
Index: uClibc/libc/sysdeps/linux/frv/bits/elf-fdpic.h
diff -u uClibc/libc/sysdeps/linux/frv/bits/elf-fdpic.h:1.1 uClibc/libc/sysdeps/linux/frv/bits/elf-fdpic.h:1.2
--- uClibc/libc/sysdeps/linux/frv/bits/elf-fdpic.h:1.1	Wed Feb 18 01:04:50 2004
+++ uClibc/libc/sysdeps/linux/frv/bits/elf-fdpic.h	Thu Aug 26 17:36:04 2004
@@ -1,4 +1,4 @@
-/* Copyright 2003 Free Software Foundation, Inc.
+/* Copyright 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
@@ -6,6 +6,15 @@
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.
 
+In addition to the permissions in the GNU Lesser General Public
+License, the Free Software Foundation gives you unlimited
+permission to link the compiled version of this file with other
+programs, and to distribute those programs without any restriction
+coming from the use of this file.  (The GNU Lesser General Public
+License restrictions do apply in other respects; for example, they
+cover modification of the file, and distribution when not linked
+into another program.)
+
 The GNU C Library 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
@@ -84,12 +93,14 @@
 	 above, but we want to use the carry in the comparison, so we
 	 can't convert it to an integer type beforehand.  */
       unsigned long offset = p - (void*)map->segs[c].p_vaddr;
-      /* We explicitly refrain from checking for one-past-the-end.
-	 Zero-sized objects aren't legal, and it's expected that array
-	 addresses will be relocated before the addend that would make
-	 it one-past-the-end is added.  This gives us a reasonable speed
-	 up, and we couldn't possibly disambiguate all cases anyway.  */
-      if (offset < map->segs[c].p_memsz)
+      /* We only check for one-past-the-end for the last segment,
+	 assumed to be the data segment, because other cases are
+	 ambiguous in the absence of padding between segments, and
+	 rofixup already serves as padding between text and data.
+	 Unfortunately, unless we special-case the last segment, we
+	 fail to relocate the _end symbol.  */
+      if (offset < map->segs[c].p_memsz
+	  || (offset == map->segs[c].p_memsz && c + 1 == map->nsegs))
 	return (char*)map->segs[c].addr + offset;
     }
 	     
Index: uClibc/libc/sysdeps/linux/frv/bits/kernel_stat.h
diff -u uClibc/libc/sysdeps/linux/frv/bits/kernel_stat.h:1.1 uClibc/libc/sysdeps/linux/frv/bits/kernel_stat.h:1.2
--- uClibc/libc/sysdeps/linux/frv/bits/kernel_stat.h:1.1	Wed Feb 18 01:04:50 2004
+++ uClibc/libc/sysdeps/linux/frv/bits/kernel_stat.h	Thu Aug 26 17:36:04 2004
@@ -6,52 +6,79 @@
  * different opinion on the subject... */
 
 struct kernel_stat {
+	unsigned char __pad1[6];
 	unsigned short st_dev;
-	unsigned short __pad1;
+
+	unsigned long __pad2;
 	unsigned long st_ino;
+
+	unsigned short __pad3;
 	unsigned short st_mode;
+	unsigned short __pad4;
 	unsigned short st_nlink;
+
+	unsigned short __pad5;
 	unsigned short st_uid;
+	unsigned short __pad6;
 	unsigned short st_gid;
+
+	unsigned char __pad7[6];
 	unsigned short st_rdev;
-	unsigned short __pad2;
-	unsigned long  st_size;
-	unsigned long  st_blksize;
-	unsigned long  st_blocks;
-	unsigned long  st_atime;
-	unsigned long  __unused1;
-	unsigned long  st_mtime;
-	unsigned long  __unused2;
-	unsigned long  st_ctime;
-	unsigned long  __unused3;
-	unsigned long  __unused4;
-	unsigned long  __unused5;
+
+	unsigned long __pad8;
+	unsigned long st_size;
+
+	unsigned long __pad9;		/* align 64-bit st_blocks to 2-word */
+	unsigned long st_blksize;
+
+	unsigned long __pad10;	/* future possible st_blocks high bits */
+	unsigned long st_blocks;	/* Number 512-byte blocks allocated. */
+
+	unsigned long __unused1;
+	unsigned long st_atime;
+
+	unsigned long __unused2;
+	unsigned long st_mtime;
+
+	unsigned long __unused3;
+	unsigned long st_ctime;
+
+	unsigned long long __unused4;
 };
 
 struct kernel_stat64 {
-	unsigned char	__pad0[6];
-	unsigned short	st_dev;
-	unsigned char	__pad1[2];
-#define _HAVE_STAT64___ST_INO
-	unsigned long	__st_ino;
-	unsigned int	st_mode;
-	unsigned int	st_nlink;
-	unsigned long	st_uid;
-	unsigned long	st_gid;
-	unsigned char	__pad2[6];
-	unsigned short	st_rdev;
-	unsigned char	__pad3[2];
-	long long	st_size;
-	unsigned long	st_blksize;
-	unsigned long	__pad4;		/* future possible st_blocks high bits */
-	unsigned long	st_blocks;	/* Number 512-byte blocks allocated. */
-	unsigned long	st_atime;
-	unsigned long	__pad5;
-	unsigned long	st_mtime;
-	unsigned long	__pad6;
-	unsigned long	st_ctime;
-	unsigned long	__pad7;		/* will be high 32 bits of ctime someday */
-	unsigned long long	st_ino;
+	unsigned char __pad1[6];
+	unsigned short st_dev;
+
+	unsigned long long st_ino;
+
+	unsigned int st_mode;
+	unsigned int st_nlink;
+
+	unsigned long st_uid;
+	unsigned long st_gid;
+
+	unsigned char __pad2[6];
+	unsigned short st_rdev;
+
+	long long st_size;
+
+	unsigned long __pad3;		/* align 64-bit st_blocks to 2-word */
+	unsigned long st_blksize;
+
+	unsigned long __pad4;		/* future possible st_blocks high bits */
+	unsigned long st_blocks;	/* Number 512-byte blocks allocated. */
+
+	unsigned long __unused1;
+	unsigned long st_atime;
+
+	unsigned long __unused2;
+	unsigned long st_mtime;
+
+	unsigned long __unused3;	/* will be high 32 bits of ctime someday */
+	unsigned long st_ctime;
+
+	unsigned long long __unused4;
 };
 
 #endif	/*  _BITS_STAT_STRUCT_H */
Index: uClibc/libc/sysdeps/linux/frv/bits/stat.h
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/bits/stat.h:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/bits/stat.h	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,154 @@
+/* Copyright (C) 1992,95,96,97,98,99,2000,2001, 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _SYS_STAT_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_KERNEL	0
+#define _STAT_VER_LINUX		0
+#define _STAT_VER		_STAT_VER_LINUX	/* The one defined below.  */
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
+
+struct stat
+{
+    __dev_t st_dev;			/* Device.  */
+
+#ifndef __USE_FILE_OFFSET64
+    unsigned long __pad1;
+    __ino_t st_ino;			/* File serial number.	*/
+#else
+    __ino64_t st_ino;			/* File serial number.	*/
+#endif
+
+    __mode_t st_mode;			/* File mode.  */
+    __nlink_t st_nlink;			/* Link count.  */
+
+    __uid_t st_uid;			/* User ID of the file's owner.	*/
+    __gid_t st_gid;			/* Group ID of the file's group.*/
+
+    __dev_t st_rdev;			/* Device number, if device.  */
+
+#ifndef __USE_FILE_OFFSET64
+    unsigned long __pad2;
+    __off_t st_size;			/* Size of file, in bytes.  */
+
+    unsigned long __pad3;
+#else
+    __off64_t st_size;			/* Size of file, in bytes.  */
+
+    unsigned long __pad1;
+#endif
+    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
+
+#ifndef __USE_FILE_OFFSET64
+    unsigned long __pad4;
+    __blkcnt_t st_blocks;		/* Number 512-byte blocks allocated. */
+#else
+    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
+#endif
+
+    unsigned long int __unused1;
+    __time_t st_atime;			/* Time of last access.  */
+
+    unsigned long int __unused2;
+    __time_t st_mtime;			/* Time of last modification.  */
+
+    unsigned long int __unused3;
+    __time_t st_ctime;			/* Time of last status change.  */
+
+    unsigned long long __unused4;
+};
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+{
+    __dev_t st_dev;			/* Device.  */
+
+    __ino64_t st_ino;			/* File serial number.	*/
+
+    __mode_t st_mode;			/* File mode.  */
+    __nlink_t st_nlink;			/* Link count.  */
+
+    __uid_t st_uid;			/* User ID of the file's owner.	*/
+    __gid_t st_gid;			/* Group ID of the file's group.*/
+
+    __dev_t st_rdev;			/* Device number, if device.  */
+
+    __off64_t st_size;			/* Size of file, in bytes.  */
+
+    unsigned long __pad1;
+    __blksize_t st_blksize;		/* Optimal block size for I/O.  */
+
+    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
+
+    unsigned long int __unused1;
+    __time_t st_atime;			/* Time of last access.  */
+
+    unsigned long int __unused2;
+    __time_t st_mtime;			/* Time of last modification.  */
+
+    unsigned long int __unused3;
+    __time_t st_ctime;			/* Time of last status change.  */
+
+    unsigned long long __unused4;
+};
+#endif
+
+
+/* Tell code we have these members.  */
+#define	_STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+
+/* Encoding of the file mode.  */
+
+#define	__S_IFMT	0170000	/* These bits determine file type.  */
+
+/* File types.  */
+#define	__S_IFDIR	0040000	/* Directory.  */
+#define	__S_IFCHR	0020000	/* Character device.  */
+#define	__S_IFBLK	0060000	/* Block device.  */
+#define	__S_IFREG	0100000	/* Regular file.  */
+#define	__S_IFIFO	0010000	/* FIFO.  */
+#define	__S_IFLNK	0120000	/* Symbolic link.  */
+#define	__S_IFSOCK	0140000	/* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define	__S_ISUID	04000	/* Set user ID on execution.  */
+#define	__S_ISGID	02000	/* Set group ID on execution.  */
+#define	__S_ISVTX	01000	/* Save swapped text after use (sticky).  */
+#define	__S_IREAD	0400	/* Read by owner.  */
+#define	__S_IWRITE	0200	/* Write by owner.  */
+#define	__S_IEXEC	0100	/* Execute by owner.  */
+
+#endif	/* _BITS_STAT_H */
Index: uClibc/libc/sysdeps/linux/frv/bits/syscalls.h
diff -u uClibc/libc/sysdeps/linux/frv/bits/syscalls.h:1.2 uClibc/libc/sysdeps/linux/frv/bits/syscalls.h:1.3
--- uClibc/libc/sysdeps/linux/frv/bits/syscalls.h:1.2	Fri May 14 04:59:08 2004
+++ uClibc/libc/sysdeps/linux/frv/bits/syscalls.h	Thu Aug 26 17:36:04 2004
@@ -9,9 +9,6 @@
  * programs.  */
 #include <bits/sysnum.h>
 
-#ifndef __set_errno
-# define __set_errno(val) ((*__errno_location ()) = (val))
-#endif
 #ifndef SYS_ify
 # define SYS_ify(syscall_name)  (__NR_##syscall_name)
 #endif
@@ -19,7 +16,7 @@
 #ifndef __ASSEMBLER__
 
 /* user-visible error numbers are in the range -1 - -4095: see <asm-frv/errno.h> */
-#ifdef _LIBC
+#if defined _LIBC && !defined __set_errno
 # define __syscall_return(type, res) \
 do { \
         unsigned long __sr2 = (res);		    			    \
@@ -43,6 +40,10 @@
 } while (0)
 #endif
 
+#ifndef __set_errno
+# define __set_errno(val) ((*__errno_location ()) = (val))
+#endif
+
 /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
 
 #define _syscall0(type,name) \
Index: uClibc/libc/sysdeps/linux/frv/bits/uClibc_page.h
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/bits/uClibc_page.h:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/bits/uClibc_page.h	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,32 @@
+/*  Copyright (C) 2004     Erik Andersen
+ *
+ *  This library 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 library 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 library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Supply an architecture specific value for PAGE_SIZE and friends.  */
+
+#ifndef _UCLIBC_PAGE_H
+#define _UCLIBC_PAGE_H
+
+/* PAGE_SHIFT determines the page size -- in this case 4096 */
+#define PAGE_SHIFT	(14)
+#ifndef __ASSEMBLY__
+#define PAGE_SIZE	(1UL << PAGE_SHIFT)
+#else
+#define PAGE_SIZE	(1 << PAGE_SHIFT)
+#endif
+#define PAGE_MASK	(~(PAGE_SIZE-1))
+
+#endif /* _UCLIBC_PAGE_H */
Index: uClibc/libc/sysdeps/linux/frv/crt0.S
diff -u uClibc/libc/sysdeps/linux/frv/crt0.S:1.3 uClibc/libc/sysdeps/linux/frv/crt0.S:1.4
--- uClibc/libc/sysdeps/linux/frv/crt0.S:1.3	Sat Aug 21 15:19:25 2004
+++ uClibc/libc/sysdeps/linux/frv/crt0.S	Thu Aug 26 17:36:04 2004
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 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
@@ -11,6 +11,15 @@
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.
 
+In addition to the permissions in the GNU Lesser General Public
+License, the Free Software Foundation gives you unlimited
+permission to link the compiled version of this file with other
+programs, and to distribute those programs without any restriction
+coming from the use of this file.  (The GNU Lesser General Public
+License restrictions do apply in other respects; for example, they
+cover modification of the file, and distribution when not linked
+into another program.)
+
 You should have received a copy of the GNU Lesser General Public
 License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
@@ -43,11 +52,12 @@
 	.weak	_fini
 	.type	__uClibc_start_main,%function
 #endif
-/* Stick in a dummy reference to main(), so that if an application
- * is linking when the main() function is in a static library (.a)
- * we can be sure that main() actually gets linked in */
-	.type	main,%function
 _start:
+	/* Make sure the stack pointer is properly aligned.  Save the
+	   original value in gr21 such that we can get to arguments and
+	   such from there.  */
+	mov.p	sp, gr21
+	andi	sp, #-8, sp
 	/* At program start-up, gr16 contains a pointer to a memory
 	   map, that we use to relocate addresses.  */
 	call	.Lcall
@@ -74,10 +84,10 @@
 	the last entry, relocated.  */
 
 	/* Prepare arguments for uClibc main.  */
-	ld	@(sp, gr0), gr8
+	ld	@(gr21, gr0), gr8
 	slli	gr8, #2, gr10
-	add	sp, gr10, gr10
-	addi.p	sp, #4, gr9
+	add	gr21, gr10, gr10
+	addi.p	gr21, #4, gr9
 	addi	gr10, #8, gr10
 
 	/* Set up an invalid (NULL return address, NULL frame pointer)
Index: uClibc/libc/sysdeps/linux/frv/crti.S
diff -u uClibc/libc/sysdeps/linux/frv/crti.S:1.1 uClibc/libc/sysdeps/linux/frv/crti.S:1.2
--- uClibc/libc/sysdeps/linux/frv/crti.S:1.1	Wed Feb 18 01:04:49 2004
+++ uClibc/libc/sysdeps/linux/frv/crti.S	Thu Aug 26 17:36:04 2004
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 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
@@ -6,6 +6,15 @@
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.
 
+In addition to the permissions in the GNU Lesser General Public
+License, the Free Software Foundation gives you unlimited
+permission to link the compiled version of this file with other
+programs, and to distribute those programs without any restriction
+coming from the use of this file.  (The GNU Lesser General Public
+License restrictions do apply in other respects; for example, they
+cover modification of the file, and distribution when not linked
+into another program.)
+
 The GNU C Library 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
Index: uClibc/libc/sysdeps/linux/frv/crtn.S
diff -u uClibc/libc/sysdeps/linux/frv/crtn.S:1.1 uClibc/libc/sysdeps/linux/frv/crtn.S:1.2
--- uClibc/libc/sysdeps/linux/frv/crtn.S:1.1	Wed Feb 18 01:04:49 2004
+++ uClibc/libc/sysdeps/linux/frv/crtn.S	Thu Aug 26 17:36:04 2004
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 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
@@ -6,6 +6,15 @@
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.
 
+In addition to the permissions in the GNU Lesser General Public
+License, the Free Software Foundation gives you unlimited
+permission to link the compiled version of this file with other
+programs, and to distribute those programs without any restriction
+coming from the use of this file.  (The GNU Lesser General Public
+License restrictions do apply in other respects; for example, they
+cover modification of the file, and distribution when not linked
+into another program.)
+
 The GNU C Library 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
Index: uClibc/libc/sysdeps/linux/frv/crtreloc.c
diff -u uClibc/libc/sysdeps/linux/frv/crtreloc.c:1.2 uClibc/libc/sysdeps/linux/frv/crtreloc.c:1.3
--- uClibc/libc/sysdeps/linux/frv/crtreloc.c:1.2	Fri May 14 04:59:08 2004
+++ uClibc/libc/sysdeps/linux/frv/crtreloc.c	Thu Aug 26 17:36:04 2004
@@ -7,6 +7,15 @@
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.
 
+In addition to the permissions in the GNU Lesser General Public
+License, the Free Software Foundation gives you unlimited
+permission to link the compiled version of this file with other
+programs, and to distribute those programs without any restriction
+coming from the use of this file.  (The GNU Lesser General Public
+License restrictions do apply in other respects; for example, they
+cover modification of the file, and distribution when not linked
+into another program.)
+
 The GNU C Library 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
Index: uClibc/libc/sysdeps/linux/frv/fstat.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/fstat.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/fstat.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,45 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#define __NR___syscall_fstat __NR_fstat
+_syscall2(int, __syscall_fstat, int, fd, struct stat *, buf);
+strong_alias(__syscall_fstat, fstat)
Index: uClibc/libc/sysdeps/linux/frv/fstat64.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/fstat64.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/fstat64.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,47 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#if defined __UCLIBC_HAS_LFS__
+#define __NR___syscall_fstat64 __NR_fstat64
+_syscall2(int, __syscall_fstat64, int, fd, struct stat64 *, buf);
+strong_alias(__syscall_fstat64, fstat64)
+#endif
Index: uClibc/libc/sysdeps/linux/frv/lstat.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/lstat.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/lstat.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,45 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#define __NR___syscall_lstat __NR_lstat
+_syscall2(int, __syscall_lstat, const char *, file_name, struct stat *, buf);
+strong_alias(__syscall_lstat, lstat)
Index: uClibc/libc/sysdeps/linux/frv/lstat64.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/lstat64.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/lstat64.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,47 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#if defined __UCLIBC_HAS_LFS__
+#define __NR___syscall_lstat64 __NR_lstat64
+_syscall2(int, __syscall_lstat64, const char *, file_name, struct stat64 *, buf);
+strong_alias(__syscall_lstat64, lstat64)
+#endif
Index: uClibc/libc/sysdeps/linux/frv/stat.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/stat.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/stat.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,45 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#define __NR___syscall_stat __NR_stat
+_syscall2(int, __syscall_stat, const char *, file_name, struct stat *, buf);
+strong_alias(__syscall_stat, stat)
Index: uClibc/libc/sysdeps/linux/frv/stat64.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/stat64.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/stat64.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1,47 @@
+/*
+ * Syscalls for uClibc
+ *
+ * Copyright (C) 2001-2003 by Erik Andersen
+ * Extracted from ../common/syscalls.c by Erik Andersen <andersen at codpoet.org>
+ * Adapted to FR-V by Alexandre Oliva <aoliva at redhat.com>
+ *
+ * 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
+ *
+ */
+
+#define _GNU_SOURCE
+#define _LARGEFILE64_SOURCE
+#include <features.h>
+#undef __OPTIMIZE__
+/* We absolutely do _NOT_ want interfaces silently
+ *  *  * renamed under us or very bad things will happen... */
+#ifdef __USE_FILE_OFFSET64
+# undef __USE_FILE_OFFSET64
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <endian.h>
+
+#include <unistd.h>
+#define _SYS_STAT_H
+#include <bits/stat.h>
+
+#if defined __UCLIBC_HAS_LFS__
+#define __NR___syscall_stat64 __NR_stat64
+_syscall2(int, __syscall_stat64, const char *, file_name, struct stat64 *, buf);
+strong_alias(__syscall_stat64, stat64)
+#endif
Index: uClibc/libc/sysdeps/linux/frv/xstatconv.c
diff -u /dev/null uClibc/libc/sysdeps/linux/frv/xstatconv.c:1.1
--- /dev/null	Thu Aug 26 17:36:05 2004
+++ uClibc/libc/sysdeps/linux/frv/xstatconv.c	Thu Aug 26 17:36:04 2004
@@ -0,0 +1 @@
+/* We don't need any of this.  */
Index: uClibc/libpthread/linuxthreads/sysdeps/frv/pt-machine.h
diff -u uClibc/libpthread/linuxthreads/sysdeps/frv/pt-machine.h:1.1 uClibc/libpthread/linuxthreads/sysdeps/frv/pt-machine.h:1.2
--- uClibc/libpthread/linuxthreads/sysdeps/frv/pt-machine.h:1.1	Wed Feb 18 01:04:48 2004
+++ uClibc/libpthread/linuxthreads/sysdeps/frv/pt-machine.h	Thu Aug 26 17:36:03 2004
@@ -1,6 +1,6 @@
 /* Machine-dependent pthreads configuration and inline functions.
-   ARM version.
-   Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+   FR-V version.
+   Copyright (C) 2004  Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Alexandre Oliva <aoliva at redhat.com>
 
@@ -15,34 +15,54 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, write to the Free Software Foundation, Inc.,
+   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifndef _PT_MACHINE_H
 #define _PT_MACHINE_H   1
 
+#ifndef __ASSEMBLER__
+
 #ifndef PT_EI
-# define PT_EI extern inline
+# define PT_EI extern inline __attribute__ ((always_inline))
 #endif
 
-/* Get some notion of the current stack.  Need not be exactly the top
-   of the stack, just something somewhere in the current frame.  */
-#define CURRENT_STACK_FRAME  __builtin_frame_address (0)
-
-
-extern long int testandset (int *spinlock);
-
 /* Spinlock implementation; required.  */
 PT_EI long int
 testandset (int *spinlock)
 {
-  register long int ret = 1;
+  int i = 1;
+  asm ("swap%I0 %M0, %1" : "+m"(*(volatile int *)spinlock), "+r"(i));
+  return i;
+}
 
-  __asm__ __volatile__("swap%I1\t%M1,%0"
-		       : "+r"(ret), "+m"(*spinlock));
+/* We want the OS to assign stack addresses.  */
+#define FLOATING_STACKS 1
 
-  return ret;
-}
+/* This symbol is defined by the ABI as the stack size requested by
+   the main program.  */
+extern char __stacksize;
+#define ARCH_STACK_MAX_SIZE ((unsigned long)&__stacksize)
+
+/* Memory barrier; default is to do nothing */
+#define MEMORY_BARRIER() __asm__ __volatile__("membar" : : : "memory")
+/* Write barrier.  */
+#define WRITE_MEMORY_BARRIER() __asm__ __volatile__("membar" : : : "memory")
+
+/* Return the thread descriptor for the current thread.  */
+register struct _pthread_descr_struct *THREAD_SELF asm ("gr29");
+#define THREAD_SELF THREAD_SELF
+
+/* Initialize the thread-unique value.  */
+#define INIT_THREAD_SELF(descr, nr) \
+  (THREAD_SELF = descr)
+
+/* Get some notion of the current stack.  Need not be exactly the top
+   of the stack, just something somewhere in the current frame.  */
+#define CURRENT_STACK_FRAME  stack_pointer
+register char * stack_pointer __asm__ ("sp");
+
+#endif
 
 #endif /* pt-machine.h */



More information about the uClibc-cvs mailing list