This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Adding m32-linux support glibc again.
- From: Kazuhiro Inaoka <inaoka dot kazuhiro at renesas dot com>
- To: aj at suse dot de
- Cc: "libc-alpha at sources dot redhat dot com" <libc-alpha at sources dot redhat dot com>, Nick Clifton <nickc at redhat dot com>
- Date: Thu, 09 Sep 2004 18:51:36 +0900
- Subject: Adding m32-linux support glibc again.
Hello again,
This is a patch for glibc to support m32r-linux-gnu target. (Renesas M32R)
Please commit it.
The m32r target is added in linux-kernel 2.6.9-rc1-mm4
http://www.kernel.org/
The following is our recent development download page.
http://www.linux-m32r.org/eng/download.html
Regards,
Kazuhiro Inaoka
ChangeLog
2004-09-09 Kazuhiro Inaoka < inaoka dot kazuhiro at renesas dot com >
* stdlib/longlong.h (add_ssaaaa, sub_ddmmss): Fixed miss operands.
Added new m32r-linux-gnu target.
* configure.in: Changed for m32r-linux-gnu.
* scripts/config.sub: Changed for m32r-linux-gnu.
* scripts/config.guess: Changed for m32r-linux-gnu.
* shlib-versions: Changed for m32r-linux-gnu.
* elf/elf.h: Added for m32r-linux-gnu.
* sysdeps/m32r/Implies: New file.
* sysdeps/m32r/Makefile: New file.
* sysdeps/m32r/__longjmp.S: New file.
* sysdeps/m32r/bsd-_setjmp.S: New file.
* sysdeps/m32r/bsd-setjmp.S: New file.
* sysdeps/m32r/dl-machine.h: New file.
* sysdeps/m32r/gmp-mparam.h: New file.
* sysdeps/m32r/init-first.c: New file.
* sysdeps/m32r/m32r-mcount.S: New file.
* sysdeps/m32r/machine-gmon.h: New file.
* sysdeps/m32r/memcpy.S: New file.
* sysdeps/m32r/memset.S: New file.
* sysdeps/m32r/memusage.h: New file.
* sysdeps/m32r/setjmp.S: New file.
* sysdeps/m32r/stackinfo.h: New file.
* sysdeps/m32r/strlen.S: New file.
* sysdeps/m32r/sysdep.h: New file.
* sysdeps/m32r/bits/endian.h: New file.
* sysdeps/m32r/bits/huge_val.h: New file.
* sysdeps/m32r/bits/setjump.h: New file.
* sysdeps/m32r/elf/start.S: New file.
* sysdeps/m32r/elf/ucontext.h: New file.
* sysdeps/unix/m32r/Makefile: New file.
* sysdeps/unix/m32r/sysdep.S: New file.
* sysdeps/unix/m32r/sysdep.h: New file.
* sysdeps/unix/sysv/linux/m32r/Dist: New file.
* sysdeps/unix/sysv/linux/m32r/Makefile: New file.
* sysdeps/unix/sysv/linux/m32r/Versions: New file.
* sysdeps/unix/sysv/linux/m32r/brk.c: New file.
* sysdeps/unix/sysv/linux/m32r/chown.c: New file.
* sysdeps/unix/sysv/linux/m32r/clone.S: New file.
* sysdeps/unix/sysv/linux/m32r/fchown.c: New file.
* sysdeps/unix/sysv/linux/m32r/fcntl.c: New file.
* sysdeps/unix/sysv/linux/m32r/flushcache.S: New file.
* sysdeps/unix/sysv/linux/m32r/fxstat.c: New file.
* sysdeps/unix/sysv/linux/m32r/getegid.c: New file.
* sysdeps/unix/sysv/linux/m32r/geteuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/getgroups.c: New file.
* sysdeps/unix/sysv/linux/m32r/getresgid.c: New file.
* sysdeps/unix/sysv/linux/m32r/getresuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/getrlimit.c: New file.
* sysdeps/unix/sysv/linux/m32r/getrlimit64.c: New file.
* sysdeps/unix/sysv/linux/m32r/getuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/lchown.c: New file.
* sysdeps/unix/sysv/linux/m32r/lockf64.c: New file.
* sysdeps/unix/sysv/linux/m32r/lxstat.c: New file.
* sysdeps/unix/sysv/linux/m32r/m32r-stub.c: New file.
* sysdeps/unix/sysv/linux/m32r/mmap.S: New file.
* sysdeps/unix/sysv/linux/m32r/msgctl.c: New file.
* sysdeps/unix/sysv/linux/m32r/pipe.S: New file.
* sysdeps/unix/sysv/linux/m32r/profil-counter.h: New file.
* sysdeps/unix/sysv/linux/m32r/semctl.c: New file.
* sysdeps/unix/sysv/linux/m32r/setegid.c: New file.
* sysdeps/unix/sysv/linux/m32r/seteuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setfsgid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setfsuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setgid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setgroups.c: New file.
* sysdeps/unix/sysv/linux/m32r/setregid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setresgid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setresuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setreuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/setrlimit.c: New file.
* sysdeps/unix/sysv/linux/m32r/setuid.c: New file.
* sysdeps/unix/sysv/linux/m32r/shmctl.c: New file.
* sysdeps/unix/sysv/linux/m32r/sigcontextinfo.h: New file.
* sysdeps/unix/sysv/linux/m32r/socket.S: New file.
* sysdeps/unix/sysv/linux/m32r/syscall.S: New file.
* sysdeps/unix/sysv/linux/m32r/syscalls.list: New file.
* sysdeps/unix/sysv/linux/m32r/sysdep.S: New file.
* sysdeps/unix/sysv/linux/m32r/sysdep.h: New file.
* sysdeps/unix/sysv/linux/m32r/vfork.S: New file.
* sysdeps/unix/sysv/linux/m32r/xstat.c: New file.
* sysdeps/unix/sysv/linux/m32r/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/m32r/bits/mman.h: New file.
* sysdeps/unix/sysv/linux/m32r/bits/resource.h: New file.
* sysdeps/unix/sysv/linux/m32r/sys/cachectl.h: New file.
* sysdeps/unix/sysv/linux/m32r/sys/io.h: New file.
* sysdeps/unix/sysv/linux/m32r/sys/tas.h: New file.
* sysdeps/unix/sysv/linux/m32r/sys/ucontext.h: New file.
* sysdeps/unix/sysv/linux/m32r/sys/user.h: New file.
linuxthreads/ChangeLog
2004-09-09 Kazuhiro Inaoka < inaoka dot kazuhiro at renesas dot com >
Added new m32r-linux-gnu target.
* sysdeps/m32r/pspinlock.c: New file.
* sysdeps/m32r/pt-machine.h: New file.
* shlib-versions: Add m32r* target.
diff -cNr --exclude CVS --exclude manual ../libc-org/configure.in ./configure.in
*** ../libc-org/configure.in 2004-09-09 16:57:32.000000000 +0900
--- ./configure.in 2004-09-09 10:02:45.000000000 +0900
***************
*** 475,480 ****
--- 475,481 ----
sparc64b | ultrasparc3)
base_machine=sparc machine=sparc/sparc64/sparcv9b ;;
thumb*) base_machine=thumb machine=arm/thumb/$machine ;;
+ m32r*) base_machine=m32r machine=m32r/$machine ;;
*) base_machine=$machine ;;
esac
changequote([,])dnl
***************
*** 1617,1623 ****
libc_cv_asm_line_sep='@'
AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep)
;;
! hppa*linux*)
AC_CACHE_CHECK(for assembler line separator,
libc_cv_asm_line_sep, [dnl
cat > conftest.s <<EOF
--- 1618,1624 ----
libc_cv_asm_line_sep='@'
AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep)
;;
! hppa*linux*|m32r*)
AC_CACHE_CHECK(for assembler line separator,
libc_cv_asm_line_sep, [dnl
cat > conftest.s <<EOF
diff -cNr --exclude CVS --exclude manual ../libc-org/elf/elf.h ./elf/elf.h
*** ../libc-org/elf/elf.h 2004-05-10 14:02:22.000000000 +0900
--- ./elf/elf.h 2004-09-09 17:41:43.000000000 +0900
***************
*** 2462,2467 ****
--- 2462,2522 ----
#define R_X86_64_NUM 24
+ /* M32R relocs. */
+ #define R_M32R_NONE 0 /* No reloc. */
+ #define R_M32R_16 1 /* For backwards compatibility. */
+ #define R_M32R_32 2 /* For backwards compatibility. */
+ #define R_M32R_24 3 /* For backwards compatibility. */
+ #define R_M32R_10_PCREL 4 /* For backwards compatibility. */
+ #define R_M32R_18_PCREL 5 /* For backwards compatibility. */
+ #define R_M32R_26_PCREL 6 /* For backwards compatibility. */
+ #define R_M32R_HI16_ULO 7 /* For backwards compatibility. */
+ #define R_M32R_HI16_SLO 8 /* For backwards compatibility. */
+ #define R_M32R_LO16 9 /* For backwards compatibility. */
+ #define R_M32R_SDA16 10 /* For backwards compatibility. */
+ #define R_M32R_GNU_VTINHERIT 11 /* For backwards compatibility. */
+ #define R_M32R_GNU_VTENTRY 12 /* For backwards compatibility. */
+
+ #define R_M32R_16_RELA 33 /* Direct 16 bit. */
+ #define R_M32R_32_RELA 34 /* Direct 32 bit. */
+ #define R_M32R_24_RELA 35 /* Direct 24 bit. */
+ #define R_M32R_10_PCREL_RELA 36 /* PC relative 10 bit shifted. */
+ #define R_M32R_18_PCREL_RELA 37 /* PC relative 18 bit shifted. */
+ #define R_M32R_26_PCREL_RELA 38 /* PC relative 26 bit shifted. */
+ #define R_M32R_HI16_ULO_RELA 39 /* High 16 bit with unsigned low */
+ #define R_M32R_HI16_SLO_RELA 40 /* High 16 bit with signed low */
+ #define R_M32R_LO16_RELA 41 /* Low 16 bit */
+ #define R_M32R_SDA16_RELA 42 /* 16 bit offset in SDA */
+ #define R_M32R_RELA_GNU_VTINHERIT 43
+ #define R_M32R_RELA_GNU_VTENTRY 44
+
+ #define R_M32R_GOT24 48 /* 24 bit GOT entry */
+ #define R_M32R_26_PLTREL 49 /* 26 bit PC relative to PLT shifted */
+ #define R_M32R_COPY 50 /* Copy symbol at runtime */
+ #define R_M32R_GLOB_DAT 51 /* Create GOT entry */
+ #define R_M32R_JMP_SLOT 52 /* Create PLT entry */
+ #define R_M32R_RELATIVE 53 /* Adjust by program base */
+ #define R_M32R_GOTOFF 54 /* 24 bit offset to GOT */
+ #define R_M32R_GOTPC24 55 /* 24 bit PC relative offset to GOT */
+ #define R_M32R_GOT16_HI_ULO 56 /* High 16 bit GOT entry with unsigned
+ low */
+ #define R_M32R_GOT16_HI_SLO 57 /* High 16 bit GOT entry with signed
+ low */
+ #define R_M32R_GOT16_LO 58 /* Low 16 bit GOT entry */
+ #define R_M32R_GOTPC_HI_ULO 59 /* High 16 bit PC relative offset to
+ GOT with unsigned low */
+ #define R_M32R_GOTPC_HI_SLO 60 /* High 16 bit PC relative offset to
+ GOT with signed low */
+ #define R_M32R_GOTPC_LO 61 /* Low 16 bit PC relative offset to
+ GOT */
+ #define R_M32R_GOTOFF_HI_ULO 62 /* High 16 bit offset to GOT
+ with unsigned low */
+ #define R_M32R_GOTOFF_HI_SLO 63 /* High 16 bit offset to GOT
+ with signed low */
+ #define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */
+ /* Keep this the last entry. */
+ #define R_M32R_NUM 256
+
__END_DECLS
#endif /* elf.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/linuxthreads/sysdeps/m32r/pspinlock.c ./linuxthreads/sysdeps/m32r/pspinlock.c
*** ../libc-org/linuxthreads/sysdeps/m32r/pspinlock.c 1970-01-01 09:00:00.000000000 +0900
--- ./linuxthreads/sysdeps/m32r/pspinlock.c 2004-09-08 16:50:33.000000000 +0900
***************
*** 0 ****
--- 1,70 ----
+ /* POSIX spinlock implementation. M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <errno.h>
+ #include <pthread.h>
+ #include "internals.h"
+
+ int
+ __pthread_spin_lock (pthread_spinlock_t *lock)
+ {
+ while (INLINE_SYSCALL (tas, 1, lock));
+ return 0;
+ }
+ weak_alias (__pthread_spin_lock, pthread_spin_lock)
+
+
+ int
+ __pthread_spin_trylock (pthread_spinlock_t *lock)
+ {
+ unsigned int val;
+
+ if ((val = *lock) == 0)
+ val = INLINE_SYSCALL (tas, 1, lock);
+ return (val > 0 ? EBUSY : 0);
+ }
+ weak_alias (__pthread_spin_trylock, pthread_spin_trylock)
+
+
+ int
+ __pthread_spin_unlock (pthread_spinlock_t *lock)
+ {
+ return *lock = 0;
+ }
+ weak_alias (__pthread_spin_unlock, pthread_spin_unlock)
+
+
+ int
+ __pthread_spin_init (pthread_spinlock_t *lock, int pshared)
+ {
+ /* We can ignore the `pshared' parameter. Since we are busy-waiting
+ all processes which can access the memory location `lock' points
+ to can use the spinlock. */
+ return *lock = 0;
+ }
+ weak_alias (__pthread_spin_init, pthread_spin_init)
+
+
+ int
+ __pthread_spin_destroy (pthread_spinlock_t *lock)
+ {
+ /* Nothing to do. */
+ return 0;
+ }
+ weak_alias (__pthread_spin_destroy, pthread_spin_destroy)
diff -cNr --exclude CVS --exclude manual ../libc-org/linuxthreads/sysdeps/m32r/pt-machine.h ./linuxthreads/sysdeps/m32r/pt-machine.h
*** ../libc-org/linuxthreads/sysdeps/m32r/pt-machine.h 1970-01-01 09:00:00.000000000 +0900
--- ./linuxthreads/sysdeps/m32r/pt-machine.h 2004-09-08 16:50:40.000000000 +0900
***************
*** 0 ****
--- 1,55 ----
+ /* Machine-dependent pthreads configuration and inline functions.
+ M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _PT_MACHINE_H
+ #define _PT_MACHINE_H 1
+
+ #include <errno.h>
+ #include <sysdep.h>
+
+ #ifndef __ASSEMBLER__
+ #ifndef PT_EI
+ # define PT_EI extern inline
+ #endif
+
+ extern long int testandset (int *spinlock);
+ extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+
+ /* Spinlock implementation; required. */
+ PT_EI long int
+ testandset (int *spinlock)
+ {
+ int ret;
+
+ ret = INLINE_SYSCALL (tas, 1, spinlock);
+ return ret;
+ }
+
+ #define lock_held(p) *(p)
+
+ /* 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__ ("r15");
+
+ #endif /* __ASSEMBLER__ */
+
+ #endif /* pt-machine.h */
+
diff -cNr --exclude CVS --exclude manual ../libc-org/scripts/config.guess ./scripts/config.guess
*** ../libc-org/scripts/config.guess 2003-12-03 10:30:27.000000000 +0900
--- ./scripts/config.guess 2004-09-09 10:07:14.000000000 +0900
***************
*** 910,915 ****
--- 910,918 ----
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit 0 ;;
diff -cNr --exclude CVS --exclude manual ../libc-org/scripts/config.sub ./scripts/config.sub
*** ../libc-org/scripts/config.sub 2003-12-03 10:30:27.000000000 +0900
--- ./scripts/config.sub 2003-12-25 10:25:22.000000000 +0900
***************
*** 237,243 ****
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
! | m32r | m68000 | m68k | m88k | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
--- 237,243 ----
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
! | m32r | m32rle | m68000 | m68k | m88k | mcore \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
***************
*** 308,314 ****
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
! | m32r-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
--- 308,314 ----
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
! | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | mcore-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
diff -cNr --exclude CVS --exclude manual ../libc-org/shlib-versions ./shlib-versions
*** ../libc-org/shlib-versions 2002-09-05 18:32:03.000000000 +0900
--- ./shlib-versions 2004-05-11 15:32:47.000000000 +0900
***************
*** 73,78 ****
--- 73,79 ----
powerpc64.*-.*-linux.* ld=ld64.so.1 GLIBC_2.3
cris-.*-linux.* ld=ld.so.1 GLIBC_2.2
x86_64-.*-linux.* ld=ld-linux-x86-64.so.2 GLIBC_2.2.5
+ m32r.*-.*-linux.* ld=ld-linux.so.2
# We use the ELF ABI standard name for the default.
.*-.*-.* ld=ld.so.1
diff -cNr --exclude CVS --exclude manual ../libc-org/stdlib/longlong.h ./stdlib/longlong.h
*** ../libc-org/stdlib/longlong.h 2002-09-29 21:34:54.000000000 +0900
--- ./stdlib/longlong.h 2004-06-14 19:03:05.000000000 +0900
***************
*** 400,416 ****
#if defined (__M32R__) && W_TYPE_SIZE == 32
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
/* The cmp clears the condition bit. */ \
! __asm__ ("cmp %0,%0\n\taddx %%5,%1\n\taddx %%3,%0" \
: "=r" ((USItype) (sh)), \
"=&r" ((USItype) (sl)) \
! : "%0" ((USItype) (ah)), \
"r" ((USItype) (bh)), \
! "%1" ((USItype) (al)), \
"r" ((USItype) (bl)) \
: "cbit")
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
/* The cmp clears the condition bit. */ \
! __asm__ ("cmp %0,%0\n\tsubx %5,%1\n\tsubx %3,%0" \
: "=r" ((USItype) (sh)), \
"=&r" ((USItype) (sl)) \
: "0" ((USItype) (ah)), \
--- 400,416 ----
#if defined (__M32R__) && W_TYPE_SIZE == 32
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
/* The cmp clears the condition bit. */ \
! __asm__ ("cmp %0,%0\n\taddx %1,%5\n\taddx %0,%3" \
: "=r" ((USItype) (sh)), \
"=&r" ((USItype) (sl)) \
! : "0" ((USItype) (ah)), \
"r" ((USItype) (bh)), \
! "1" ((USItype) (al)), \
"r" ((USItype) (bl)) \
: "cbit")
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
/* The cmp clears the condition bit. */ \
! __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3" \
: "=r" ((USItype) (sh)), \
"=&r" ((USItype) (sl)) \
: "0" ((USItype) (ah)), \
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/Implies ./sysdeps/m32r/Implies
*** ../libc-org/sysdeps/m32r/Implies 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/Implies 2003-12-25 09:48:06.000000000 +0900
***************
*** 0 ****
--- 1,3 ----
+ wordsize-32
+ ieee754/flt-32
+ ieee754/dbl-64
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/Makefile ./sysdeps/m32r/Makefile
*** ../libc-org/sysdeps/m32r/Makefile 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/Makefile 2003-12-25 09:48:06.000000000 +0900
***************
*** 0 ****
--- 1,7 ----
+ # m32r/ELF specific definitions.
+
+ # The assembler on m32r needs the -fPIC flag even when it's assembler code.
+ #ASFLAGS-.os = -fPIC
+ ifeq ($(subdir),gmon)
+ sysdep_routines += m32r-mcount
+ endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/__longjmp.S ./sysdeps/m32r/__longjmp.S
*** ../libc-org/sysdeps/m32r/__longjmp.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/__longjmp.S 2004-09-08 16:42:35.000000000 +0900
***************
*** 0 ****
--- 1,43 ----
+ /* longjmp for M32R.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #define _SETJMP_H
+ #define _ASM
+ #include <bits/setjmp.h>
+
+ /* __longjmp(jmpbuf, val) */
+
+ ENTRY (__longjmp)
+ ld r8, @r0+
+ ld r9, @r0+
+ ld r10, @r0+
+ ld r11, @r0+
+ ld r12, @r0+
+ ld r13, @r0+
+ ld r2, @r0+ /* lr */
+ ld r15, @r0 /* sp */
+
+ mv r0,r1
+ bnez r0, 1f /* get the return value in place */
+ ldi r0, #1 /* can't let setjmp() return zero! */
+ .fillinsn
+ 1:
+ jmp r2
+ END (__longjmp)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/bits/endian.h ./sysdeps/m32r/bits/endian.h
*** ../libc-org/sysdeps/m32r/bits/endian.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/bits/endian.h 2003-12-25 10:53:16.000000000 +0900
***************
*** 0 ****
--- 1,13 ----
+ /* M32R is bi-endian. */
+
+ #ifndef _ENDIAN_H
+ # error "Never use <bits/endian.h> directly; include <endian.h> instead."
+ #endif
+
+ #ifdef __LITTLE_ENDIAN__
+ #define __BYTE_ORDER __LITTLE_ENDIAN
+ #define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+ #else
+ #define __BYTE_ORDER __BIG_ENDIAN
+ #define __FLOAT_WORD_ORDER __BIG_ENDIAN
+ #endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/bits/huge_val.h ./sysdeps/m32r/bits/huge_val.h
*** ../libc-org/sysdeps/m32r/bits/huge_val.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/bits/huge_val.h 2004-03-26 15:42:12.000000000 +0900
***************
*** 0 ****
--- 1,56 ----
+ /* `HUGE_VAL' constants for IEEE 754 machines (where it is infinity).
+ Used by <stdlib.h> and <math.h> functions for overflow.
+ M32R version.
+ Copyright (C) 1992, 95, 96, 97, 98, 99, 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
+ 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 _MATH_H
+ # error "Never use <bits/huge_val.h> directly; include <math.h> instead."
+ #endif
+
+ /* IEEE positive infinity (-HUGE_VAL is negative infinity). */
+
+ #if __GNUC_PREREQ(3,3)
+ # define HUGE_VAL (__builtin_huge_val())
+ #elif __GNUC_PREREQ(2,96)
+ # define HUGE_VAL (__extension__ 0x1.0p2047)
+ #elif defined __GNUC__
+
+ # define HUGE_VAL \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+ { __l: 0x000000007ff00000ULL }).__d)
+
+ #else /* not GCC */
+
+ # include <endian.h>
+
+ typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
+ # if __BYTE_ORDER == __BIG_ENDIAN
+ # define __HUGE_VAL_bytes { 0, 0, 0, 0, 0x7f, 0xf0, 0, 0 }
+ # endif
+ # if __BYTE_ORDER == __LITTLE_ENDIAN
+ # define __HUGE_VAL_bytes { 0, 0, 0xf0, 0x7f, 0, 0, 0, 0 }
+ # endif
+
+ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
+ # define HUGE_VAL (__huge_val.__d)
+
+ #endif /* GCC. */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/bits/setjmp.h ./sysdeps/m32r/bits/setjmp.h
*** ../libc-org/sysdeps/m32r/bits/setjmp.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/bits/setjmp.h 2004-09-08 16:45:28.000000000 +0900
***************
*** 0 ****
--- 1,55 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* Define the machine-dependent type `jmp_buf'. M32R version. */
+ #ifndef _BITS_SETJMP_H
+ #define _BITS_SETJMP_H 1
+
+ #ifndef _SETJMP_H
+ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+ #endif
+
+ #ifndef _ASM
+ typedef struct
+ {
+ /* Callee-saved registers r8 through r15. */
+ int __regs[8];
+
+ /* Program counter. */
+ void * __pc;
+ } __jmp_buf[1];
+ #endif
+
+ #define JB_R8 0
+ #define JB_R9 1
+ #define JB_R10 2
+ #define JB_R11 3
+ #define JB_R12 4
+ #define JB_FP 5
+ #define JB_LR 6
+ #define JB_SP 7
+ #define JB_PC 8
+
+ #define JB_SIZE (4 * 9)
+
+ /* Test if longjmp to JMPBUF would unwind the frame
+ containing a local variable at ADDRESS. */
+ #define _JMPBUF_UNWINDS(jmpbuf, address) \
+ ((void *) (address) < &(jmpbuf)[0].__regs[JB_SP])
+
+ #endif /* bits/setjmp.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/bsd-_setjmp.S ./sysdeps/m32r/bsd-_setjmp.S
*** ../libc-org/sysdeps/m32r/bsd-_setjmp.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/bsd-_setjmp.S 2004-09-08 16:42:44.000000000 +0900
***************
*** 0 ****
--- 1,43 ----
+ /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 0)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+ in setjmp doesn't clobber the state restored by longjmp. */
+
+ #include <sysdep.h>
+
+ ENTRY (_setjmp)
+ #ifdef SHARED
+ mv r2,lr
+ bl.s .+4
+ ld24 r1,#_GLOBAL_OFFSET_TABLE_
+ add r1,lr
+ mv lr,r2
+
+ ld24 r2,C_SYMBOL_NAME(__sigsetjmp)
+ add r2,r1
+ ld r2,@r2
+ #else
+ LDIMM (r2, C_SYMBOL_NAME(__sigsetjmp))
+ #endif
+ ldi r1, #0 /* Pass a second argument of zero. */
+ jmp r2
+ END (_setjmp)
+ libc_hidden_def(_setjmp)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/bsd-setjmp.S ./sysdeps/m32r/bsd-setjmp.S
*** ../libc-org/sysdeps/m32r/bsd-setjmp.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/bsd-setjmp.S 2004-09-08 16:42:56.000000000 +0900
***************
*** 0 ****
--- 1,42 ----
+ /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* This just does a tail-call to `__sigsetjmp (ARG, 1)'.
+ We cannot do it in C because it must be a tail-call, so frame-unwinding
+ in setjmp doesn't clobber the state restored by longjmp. */
+
+ #include <sysdep.h>
+
+ ENTRY (setjmp)
+ #ifdef SHARED
+ mv r2,lr
+ bl.s .+4
+ ld24 r1,#_GLOBAL_OFFSET_TABLE_
+ add r1,lr
+ mv lr,r2
+
+ ld24 r2,C_SYMBOL_NAME(__sigsetjmp)
+ add r2,r1
+ ld r2,@r2
+ #else
+ LDIMM (r2, C_SYMBOL_NAME(__sigsetjmp))
+ #endif
+ ldi r1, #1 /* Pass a second argument of one. */
+ jmp r2
+ END (setjmp)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/dl-machine.h ./sysdeps/m32r/dl-machine.h
*** ../libc-org/sysdeps/m32r/dl-machine.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/dl-machine.h 2004-09-08 16:42:22.000000000 +0900
***************
*** 0 ****
--- 1,781 ----
+ /* Machine-dependent ELF dynamic relocation inline functions. M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef dl_machine_h
+ #define dl_machine_h
+
+ /* Only dummy. This doesn't work. */
+
+ #define ELF_MACHINE_NAME "M32R"
+
+ #include <sys/param.h>
+
+ #include <assert.h>
+
+ /* Define the M32R_OLD_ABI, if you want to keep compatibility with
+ an old Renesas relocs */
+ #ifdef M32R_OLD_ABI
+ #define R_M32R_16_SAMPLE 1
+ #define R_M32R_32_SAMPLE 2
+ #define R_M32R_24_SAMPLE 3
+ #define R_M32R_10_PCREL_SAMPLE 4
+ #define R_M32R_18_PCREL_SAMPLE 5
+ #define R_M32R_26_PCREL_SAMPLE 6
+ #define R_M32R_HI16_ULO_SAMPLE 7
+ #define R_M32R_HI16_SLO_SAMPLE 8
+ #define R_M32R_LO16_SAMPLE 9
+ #define R_M32R_SDA16_SAMPLE 10
+
+ #define R_M32R_GOT24_SAMPLE 11 /* conflict */
+ #define R_M32R_26_PLTREL_SAMPLE 12 /* conflict */
+ #define R_M32R_GOT16_HI_ULO_SAMPLE 13
+ #define R_M32R_GOT16_HI_SLO_SAMPLE 14
+ #define R_M32R_GOT16_LO_SAMPLE 15
+ #define R_M32R_GOTPC24_SAMPLE 16
+ #define R_M32R_COPY_SAMPLE 17
+ #define R_M32R_GLOB_DAT_SAMPLE 18
+ #define R_M32R_JMP_SLOT_SAMPLE 19
+ #define R_M32R_RELATIVE_SAMPLE 20
+ #define R_M32R_GNU_VTINHERIT_SAMPLE 21
+ #define R_M32R_GNU_VTENTRY_SAMPLE 22
+ #endif /* M32R_OLD_ABI */
+
+ /* Return nonzero iff ELF header is compatible with the running host. */
+ static inline int __attribute__ ((unused))
+ elf_machine_matches_host (const Elf32_Ehdr *ehdr)
+ {
+ return (ehdr->e_machine == EM_M32R);
+ }
+
+
+ /* Return the link-time address of _DYNAMIC. Conveniently, this is the
+ first element of the GOT. This must be inlined in a function which
+ uses global data. */
+ static inline Elf32_Addr __attribute__ ((unused))
+ elf_machine_dynamic (void)
+ {
+ register Elf32_Addr *got;
+ asm (" bl.s .+4\n"
+ " ld24 %0,#_GLOBAL_OFFSET_TABLE_\n"
+ " add %0,lr" :"=r" (got) : : "lr" );
+ return *got;
+ }
+
+
+ /* Return the run-time load address of the shared object. */
+ static inline Elf32_Addr __attribute__ ((unused))
+ elf_machine_load_address (void)
+ {
+ Elf32_Addr addr;
+ asm (" ld24 r0,#here\n\t"
+ " add r0,r12\n\t"
+ " ld r0,@r0\n\t"
+ "here: \n\t"
+ " ld24 r1,#_GLOBAL_OFFSET_TABLE_\n\t"
+ " mv r2,r12\n\t"
+ " sub r2,r1\n\t"
+ " sub r2,r0\n\t"
+ " mv %0,r2"
+ : "=r" (addr) : : "r0", "r1", "r2" );
+ return addr;
+ }
+
+
+ /* Set up the loaded object described by L so its unrelocated PLT
+ entries will jump to the on-demand fixup code in dl-runtime.c. */
+
+ static inline int __attribute__ ((unused))
+ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+ {
+ Elf32_Addr *got;
+ extern void _dl_runtime_resolve (Elf32_Word);
+ extern void _dl_runtime_profile (Elf32_Word);
+
+ if (l->l_info[DT_JMPREL] && lazy)
+ {
+ /* The GOT entries for functions in the PLT have not yet been filled
+ in. Their initial contents will arrange when called to load an
+ offset into the .rela.plt section and _GLOBAL_OFFSET_TABLE_[1],
+ and then jump to _GLOBAL_OFFSET_TABLE[2]. */
+ got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
+ got[1] = (Elf32_Addr) l; /* Identify this shared object. */
+
+ /* The got[2] entry contains the address of a function which gets
+ called to get the address of a so far unresolved function and
+ jump to it. The profiling extension of the dynamic linker allows
+ to intercept the calls to collect information. In this case we
+ don't store the address in the GOT so that all future calls also
+ end in this function. */
+ if (profile)
+ {
+ got[2] = (Elf32_Addr) &_dl_runtime_profile;
+ /* Say that we really want profiling and the timers are started. */
+ GL(dl_profile_map) = l;
+ }
+ else
+ /* This function will get called to fix up the GOT entry indicated by
+ the offset on the stack, and then jump to the resolved address. */
+ got[2] = (Elf32_Addr) &_dl_runtime_resolve;
+ }
+ return lazy;
+ }
+
+ /* This code is used in dl-runtime.c to call the `fixup' function
+ and then redirect to the address it returns. */
+
+ #define ELF_MACHINE_RUNTIME_FIXUP_ARGS int plt_type
+
+ #ifdef SHARED
+ #define FUN_ADDR( func ) "\n\
+ bl.s .+4 \n\
+ ld24 r12,#_GLOBAL_OFFSET_TABLE_ \n\
+ add r12,lr \n\
+ ld24 r4,#" #func " \n\
+ add r4,r12 \n\
+ ld r4,@r4"
+ #else
+ #define FUN_ADDR( func ) "\
+ seth r4,#high( " #func " ) \n\
+ or3 r4,r4,#low( " #func " )"
+ #endif
+
+ #define FGR_SAVE ""
+ #define FGR_LOAD ""
+
+ #ifdef M32R_OLD_NEWABI
+ #define LOAD_ARGS_FROM_STACK( name ) "\n\
+ mv r7,lr \n\
+ ; OLD_PLT to keep compatible mode only \n\
+ bl.s .+4 \n\
+ .fillinsn \n\
+ addi lr,# " #name " -. \n\
+ beq r6,lr,1f \n\
+ ; OLT_PLT ABI \n\
+ pop r4 ; link map address \n\
+ pop r5 ; reloc offset \n\
+ .fillinsn \n\
+ 1: \n\
+ mv lr,r7"
+ #else
+ #define LOAD_ARGS_FROM_STACK( name ) "\n\
+ ; DELETE FOR NEW ABI pop r4 ; link map address \n\
+ ; DELETE FOR NEW ABI pop r5 ; reloc offset\n"
+ #endif
+
+ #ifndef PROF
+ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+ .text \n\
+ .globl _dl_runtime_resolve \n\
+ .type _dl_runtime_resolve, @function \n\
+ \n\
+ .balign 4 \n\
+ _dl_runtime_resolve: \n\
+ " LOAD_ARGS_FROM_STACK( _dl_runtime_resolve ) " \n\
+ push r0 \n\
+ push r1 \n\
+ push r2 \n\
+ push r3 \n\
+ push r12 \n\
+ " FGR_SAVE " \n\
+ push lr \n\
+ \n\
+ ; fixup( ELF_MACHINE_RUNTIME_TRAMPOLINE, link_map, reloc_offset ) \n\
+ ;mv r0,*** ; plt_type (dummy) \n\
+ \n\
+ mv r1,r4 ; link map address \n\
+ mv r2,r5 ; reloc offset \n\
+ \n\
+ " FUN_ADDR( fixup ) " \n\
+ \n\
+ jl r4 ; Call resolver. \n\
+ mv r4,r0 ; value \n\
+ \n\
+ pop lr ; Get register content back. \n\
+ " FGR_LOAD " \n\
+ pop r12 \n\
+ pop r3 \n\
+ pop r2 \n\
+ pop r1 \n\
+ pop r0 \n\
+ \n\
+ jmp r4 ; Jump to function address. \n\
+ \n\
+ .balign 4 \n\
+ .size _dl_runtime_resolve, .-_dl_runtime_resolve \n\
+ \n\
+ .globl _dl_runtime_profile \n\
+ .type _dl_runtime_profile, @function \n\
+ \n\
+ .balign 4 \n\
+ _dl_runtime_profile: \n\
+ " LOAD_ARGS_FROM_STACK( _dl_runtime_profile ) " \n\
+ push r0 \n\
+ push r1 \n\
+ push r2 \n\
+ push r3 \n\
+ push r12 \n\
+ " FGR_SAVE " \n\
+ push lr \n\
+ \n\
+ ; profile_fixup( ELF_MACHINE_RUNTIME_TRAMPOLINE, link_map, reloc_offset ) \n\
+ ;mv r0,*** ; plt_type (dummy) \n\
+ mv r1,r4 ; link map address \n\
+ mv r2,r5 ; reloc offset \n\
+ \n\
+ " FUN_ADDR( profile_fixup ) " \n\
+ \n\
+ jl r4 ; Call resolver. \n\
+ mv r4,r0 ; value \n\
+ \n\
+ pop lr ; Get register content back. \n\
+ " FGR_LOAD " \n\
+ pop r12 \n\
+ pop r3 \n\
+ pop r2 \n\
+ pop r1 \n\
+ pop r0 \n\
+ \n\
+ jmp r4 ; Jump to function address. \n\
+ \n\
+ .balign 4 \n\
+ .size _dl_runtime_profile, .-_dl_runtime_profile \n\
+ .previous \n\
+ ");
+ #else
+ # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+ .text \n\
+ .globl _dl_runtime_resolve \n\
+ .globl _dl_runtime_profile \n\
+ .type _dl_runtime_resolve, @function \n\
+ .type _dl_runtime_profile, @function \n\
+ \n\
+ .balign 4 \n\
+ _dl_runtime_resolve: \n\
+ _dl_runtime_profile: \n\
+ " LOAD_ARGS_FROM_STACK( _dl_runtime_resolve ) " \n\
+ push r0 \n\
+ push r1 \n\
+ push r2 \n\
+ push r3 \n\
+ push r12 \n\
+ " FGR_SAVE " \n\
+ push lr \n\
+ \n\
+ ; fixup( ELF_MACHINE_RUNTIME_TRAMPOLINE, link_map, reloc_offset ) \n\
+ ;mv r0,*** ; plt_type (dummy) \n\
+ mv r1,r4 ; link map address \n\
+ mv r2,r5 ; reloc offset \n\
+ \n\
+ " FUN_ADDR( fixup ) " \n\
+ \n\
+ jl r4 ; Call resolver. \n\
+ mv r4,r0 ; value \n\
+ \n\
+ pop lr ; Get register content back. \n\
+ " FGR_LOAD " \n\
+ pop r12 \n\
+ pop r3 \n\
+ pop r2 \n\
+ pop r1 \n\
+ pop r0 \n\
+ \n\
+ jmp r4 ; Jump to function address. \n\
+ \n\
+ .balign 4 \n\
+ .size _dl_runtime_resolve, .-_dl_runtime_resolve \n\
+ .size _dl_runtime_profile, .-_dl_runtime_profile \n\
+ .previous \n\
+ ");
+ #endif
+
+ /* Mask identifying addresses reserved for the user program,
+ where the dynamic linker should not map anything. */
+ #define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL
+
+ /* Initial entry point code for the dynamic linker.
+ The C function `_dl_start' is the real entry point;
+ its return value is the user program's entry point. */
+
+ #define RTLD_START asm ("\
+ .text\n\
+ .globl _start\n\
+ .globl _dl_start_user\n\
+ _start:\n\
+ mv r0,r15\n\
+ bl _dl_start\n\
+ _dl_start_user:\n\
+ ; Save the user entry point address in r8.\n\
+ mv r8,r0\n\
+ ; Point r12 at the GOT.\n\
+ bl.s .+4\n\
+ ld24 r12,#_GLOBAL_OFFSET_TABLE_\n\
+ add r12,lr\n\
+ ; Store the highest stack address\n\
+ ld24 r0,#__libc_stack_end ; __libc_stack_end@GOT \n\
+ add r0,r12\n\
+ ld r0,@r0\n\
+ st r15,@r0\n\
+ ; See if we were run as a command with the executable file\n\
+ ; name as an extra leading argument.\n\
+ ld24 r0,#_dl_skip_args ; _dl_skip_args@GOT \n\
+ add r0,r12\n\
+ ld r0,@r0\n\
+ ld r0,@r0\n\
+ ; Get the original argument count.\n\
+ ld r1,@r15\n\
+ ; Subtract _dl_skip_args from it.\n\
+ sub r1,r0\n\
+ ; Adjust the stack pointer to skip _dl_skip_args words.\n\
+ slli r0,#2\n\
+ add r15,r0\n\
+ ; Store back the modified argument count.\n\
+ st r1,@r15\n\
+ ; Compute argv address and envp.\n\
+ mv r2,r15\n\
+ addi r2,#4\n\
+ mv r3,r1\n\
+ addi r3,#1\n\
+ slli r3,#2\n\
+ add r3,r2\n\
+ ld24 r0,#_rtld_local\n\
+ add r0,r12\n\
+ ld r0,@r0\n\
+ ld r0,@r0\n\
+ ; Call _dl_init.\n\
+ bl _dl_init ; _dl_init@PLT \n\
+ .fillinsn\n\
+ 1: ; Pass our finalizer function to the user in r4, as per ELF ABI.\n\
+ ld24 r0,#_dl_fini ; _dl_fini@GOT \n\
+ add r0,r12\n\
+ ld r0,@r0\n\
+ ; Jump to the user's entry point.\n\
+ jmp r8\n\
+ .previous\n\
+ ");
+
+ /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
+ PLT entries should not be allowed to define the value.
+ ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
+ of the main executable's symbols, as for a COPY reloc. */
+ #ifdef M32R_OLD_ABI
+ /* for oldtype relocation compatibility */
+ #define elf_machine_type_class(type) \
+ ((((type) == R_M32R_JMP_SLOT || (type) == R_M32R_JMP_SLOT_SAMPLE) * ELF_RTYPE_CLASS_PLT) \
+ | (((type) == R_M32R_COPY || (type) == R_M32R_COPY_SAMPLE) * ELF_RTYPE_CLASS_COPY))
+ #else
+ #define elf_machine_type_class(type) \
+ ((((type) == R_M32R_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \
+ | (((type) == R_M32R_COPY) * ELF_RTYPE_CLASS_COPY))
+ #endif
+
+ /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
+ #ifdef M32R_OLD_ABI
+ /* for oldtype relocation compatibility */
+ #define ELF_MACHINE_JMP_SLOT \
+ R_M32R_JMP_SLOT || ELFW(R_TYPE)(reloc->r_info) == R_M32R_JMP_SLOT_SAMPLE
+ #else
+ #define ELF_MACHINE_JMP_SLOT R_M32R_JMP_SLOT
+ #endif
+
+ /* M32R never uses Elf32_Rel relocations. */
+ #define ELF_MACHINE_NO_REL 1
+
+ /* We define an initialization functions. This is called very early in
+ _dl_sysdep_start. */
+ #define DL_PLATFORM_INIT dl_platform_init ()
+
+ static inline void __attribute__ ((unused))
+ dl_platform_init (void)
+ {
+ if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
+ /* Avoid an empty string which would disturb us. */
+ GLRO(dl_platform) = NULL;
+ }
+
+ static inline Elf32_Addr
+ elf_machine_fixup_plt (struct link_map *map, lookup_t t,
+ const Elf32_Rela *reloc,
+ Elf32_Addr *reloc_addr, Elf32_Addr value)
+ {
+ return *reloc_addr = value;
+ }
+
+ /* Return the final value of a plt relocation. */
+ static inline Elf32_Addr
+ elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+ Elf32_Addr value)
+ {
+ return value + reloc->r_addend;
+ }
+
+ #endif /* !dl_machine_h */
+
+ #ifdef RESOLVE
+
+ extern char **_dl_argv;
+
+ /* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+ MAP is the object containing the reloc. */
+
+ static inline void
+ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+ const Elf32_Sym *sym, const struct r_found_version *version,
+ void *const reloc_addr_arg)
+ {
+ Elf32_Addr *const reloc_addr = reloc_addr_arg;
+ const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
+ Elf32_Addr value;
+
+ #define COPY_UNALIGNED_WORD(swp, twp, align) \
+ { \
+ void *__s = (swp), *__t = (twp); \
+ unsigned char *__s1 = __s, *__t1 = __t; \
+ unsigned short *__s2 = __s, *__t2 = __t; \
+ unsigned long *__s4 = __s, *__t4 = __t; \
+ switch ((align)) \
+ { \
+ case 0: \
+ *__t4 = *__s4; \
+ break; \
+ case 2: \
+ *__t2++ = *__s2++; \
+ *__t2 = *__s2; \
+ break; \
+ default: \
+ *__t1++ = *__s1++; \
+ *__t1++ = *__s1++; \
+ *__t1++ = *__s1++; \
+ *__t1 = *__s1; \
+ break; \
+ } \
+ }
+ #define COPY_UNALIGNED_HWORD(swp, twp, align) \
+ { \
+ void *__s = (swp), *__t = (twp); \
+ unsigned char *__s1 = __s, *__t1 = __t; \
+ unsigned short *__s2 = __s, *__t2 = __t; \
+ switch ((align)) \
+ { \
+ case 0: \
+ *__t2 = *__s2; \
+ break; \
+ default: \
+ *__t1++ = *__s1++; \
+ *__t1 = *__s1; \
+ break; \
+ } \
+ }
+
+ #ifdef M32R_OLD_ABI
+ /* for oldtype relocation compatibility */
+ if (__builtin_expect (r_type == R_M32R_RELATIVE || r_type == R_M32R_RELATIVE_SAMPLE, 0))
+ #else
+ if (__builtin_expect (r_type == R_M32R_RELATIVE, 0))
+ #endif
+ {
+ #ifndef RTLD_BOOTSTRAP
+ if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
+ #endif
+ {
+ if (reloc->r_addend)
+ value = map->l_addr + reloc->r_addend;
+ else
+ {
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &value,
+ (int) reloc_addr_arg & 3);
+ value += map->l_addr;
+ }
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ }
+ }
+ #ifndef RTLD_BOOTSTRAP
+ else if (__builtin_expect (r_type == R_M32R_NONE, 0))
+ return;
+ #endif
+ else
+ {
+ const Elf32_Sym *const refsym = sym;
+ #ifndef RTLD_BOOTSTRAP
+ Elf32_Addr tmp_value;
+ #endif
+ value = RESOLVE (&sym, version, r_type);
+ if (sym)
+ value += sym->st_value;
+ value += reloc->r_addend;
+
+ switch (r_type)
+ {
+ #ifdef M32R_OLD_ABI
+ case R_M32R_COPY_SAMPLE:
+ #endif
+ case R_M32R_COPY:
+ if (sym == NULL)
+ /* This can happen in trace mode if an object could not be
+ found. */
+ break;
+ if (sym->st_size > refsym->st_size
+ || (sym->st_size < refsym->st_size && GLRO(dl_verbose)))
+ {
+ const char *strtab;
+
+ strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
+ _dl_error_printf ("\
+ %s: Symbol `%s' has different size in shared object, consider re-linking\n",
+ _dl_argv[0] ?: "<program name unknown>",
+ strtab + refsym->st_name);
+ }
+ memcpy (reloc_addr, (void *) value, MIN (sym->st_size,
+ refsym->st_size));
+ break;
+ #ifdef M32R_OLD_ABI
+ case R_M32R_GLOB_DAT_SAMPLE:
+ #endif
+ case R_M32R_GLOB_DAT:
+ #if 0 /* 20021129 1 -> 0 */
+ case R_M32R_32:
+ *reloc_addr = value;
+ break;
+ #endif /* 20021129 1 -> 0 */
+ #ifdef M32R_OLD_ABI
+ case R_M32R_JMP_SLOT_SAMPLE:
+ #endif
+ case R_M32R_JMP_SLOT:
+ elf_machine_fixup_plt(map, 0, reloc, reloc_addr, value);
+ break;
+ #if 1 /* 20021129 0 -> 1 */
+ #ifdef M32R_OLD_ABI
+ case R_M32R_32_SAMPLE:
+ #endif
+ case R_M32R_32_RELA:
+ #ifndef RTLD_BOOTSTRAP
+ #ifdef M32R_OLD_ABI
+ case R_M32R_24_SAMPLE:
+ case R_M32R_16_SAMPLE:
+ case R_M32R_HI16_ULO_SAMPLE:
+ case R_M32R_HI16_SLO_SAMPLE:
+ case R_M32R_LO16_SAMPLE:
+ case R_M32R_SDA16_SAMPLE:
+ #endif
+ case R_M32R_24_RELA:
+ case R_M32R_16_RELA:
+ case R_M32R_HI16_ULO_RELA:
+ case R_M32R_HI16_SLO_RELA:
+ case R_M32R_LO16_RELA:
+ case R_M32R_SDA16_RELA:
+ #endif
+ {
+ #ifndef RTLD_BOOTSTRAP
+ /* This is defined in rtld.c, but nowhere in the static
+ libc.a; make the reference weak so static programs can
+ still link. This declaration cannot be done when
+ compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
+ rtld.c contains the common defn for _dl_rtld_map, which
+ is incompatible with a weak decl in the same file. */
+ # ifndef SHARED
+ weak_extern (GL(dl_rtld_map));
+ # endif
+ if (map == &GL(dl_rtld_map))
+ /* Undo the relocation done here during bootstrapping.
+ Now we will relocate it anew, possibly using a
+ binding found in the user program or a loaded library
+ rather than the dynamic linker's built-in definitions
+ used while loading those libraries. */
+ value -= map->l_addr + refsym->st_value + reloc->r_addend;
+ #endif
+ #ifdef M32R_OLD_ABI
+ if (r_type == R_M32R_32_SAMPLE
+ || r_type == R_M32R_32_RELA)
+ #else
+ if (r_type == R_M32R_32_RELA)
+ #endif
+ {
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ }
+ #ifndef RTLD_BOOTSTRAP
+ #ifdef M32R_OLD_ABI
+ else if (r_type == R_M32R_16_SAMPLE
+ || r_type == R_M32R_16_RELA)
+ #else
+ else if (r_type == R_M32R_16_RELA)
+ #endif
+ {
+ COPY_UNALIGNED_HWORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ }
+ else
+ {
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &tmp_value,
+ (int) reloc_addr_arg & 3);
+ switch (r_type)
+ {
+ #ifdef M32R_OLD_ABI
+ case R_M32R_24_SAMPLE:
+ if (value & 0xff000000)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_24 relocation overflow");
+ }
+ value = (tmp_value & ~0xffffff) | (value & 0xffffff);
+ break;
+ #endif
+ case R_M32R_24_RELA:
+ if (value & 0xff000000)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_24_RELA relocation overflow");
+ }
+ value = (tmp_value & ~0xffffff) | (value & 0xffffff);
+ break;
+ #ifdef M32R_OLD_ABI
+ case R_M32R_HI16_ULO_SAMPLE:
+ #endif
+ case R_M32R_HI16_ULO_RELA:
+ value = (tmp_value & ~0xffff) | ((value >>16) & 0xffff);
+ break;
+ #ifdef M32R_OLD_ABI
+ case R_M32R_HI16_SLO_SAMPLE:
+ #endif
+ case R_M32R_HI16_SLO_RELA:
+ if (value & 0x8000)
+ value += 0x10000;
+ value = (tmp_value & ~0xffff) | ((value >>16) & 0xffff);
+ break;
+ #ifdef M32R_OLD_ABI
+ case R_M32R_LO16_SAMPLE:
+ case R_M32R_SDA16_SAMPLE:
+ #endif
+ case R_M32R_LO16_RELA:
+ case R_M32R_SDA16_RELA:
+ value = (tmp_value & ~0xffff) | (value & 0xffff);
+ break;
+ }
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ }
+ #endif
+ break;
+ }
+ #ifndef RTLD_BOOTSTRAP
+ #ifdef M32R_OLD_ABI
+ case R_M32R_26_PCREL_SAMPLE:
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &tmp_value,
+ (int) reloc_addr_arg & 3);
+ value += (signed long)(tmp_value & 0xffffff) << 2;
+ value = value - (Elf32_Addr) reloc_addr;
+ if ((signed long)value < -0x2000000 || 0x1fffffc < (signed long)value)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_26_PCREL relocation overflow");
+ }
+ value = (tmp_value & ~0xffffff) | ((value >> 2) & 0xffffff);
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg, (int) reloc_addr_arg & 3);
+ break;
+ #endif
+ case R_M32R_26_PCREL_RELA:
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &tmp_value,
+ (int) reloc_addr_arg & 3);
+ value += (signed long)(tmp_value & 0xffffff) << 2;
+ value = value - (Elf32_Addr) reloc_addr;
+ if ((signed long)value < -0x2000000 || 0x1fffffc < (signed long)value)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_26_PCREL_RELA relocation overflow");
+ }
+ value = (tmp_value & ~0xffffff) | ((value >> 2) & 0xffffff);
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ break;
+ #ifdef M32R_OLD_ABI
+ case R_M32R_18_PCREL_SAMPLE:
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &tmp_value,
+ (int) reloc_addr_arg & 3);
+ value += (signed long)(tmp_value & 0xffff) << 2;
+ value = value - (Elf32_Addr) reloc_addr;
+ if ((signed long)value < -0x20000 || 0x1fffc < (signed long)value)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_18_PCREL relocation overflow");
+ }
+ value = (tmp_value & ~0xffff) | ((value >> 2) & 0xffff);
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ break;
+ #endif
+ case R_M32R_18_PCREL_RELA:
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &tmp_value,
+ (int) reloc_addr_arg & 3);
+ value += (signed long)(tmp_value & 0xffff) << 2;
+ value = value - (Elf32_Addr) reloc_addr;
+ if ((signed long)value < -0x20000 || 0x1fffc < (signed long)value)
+ {
+ _dl_signal_error (0, map->l_name, NULL,
+ "R_M32R_18_PCREL_RELA relocation overflow");
+ }
+ value = (tmp_value & ~0xffff) | ((value >> 2) & 0xffff);
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg,
+ (int) reloc_addr_arg & 3);
+ break;
+ #endif
+ #endif /* 20021129 0 -> 1 */
+ default:
+ _dl_reloc_bad_type (map, r_type, 0);
+ break;
+ }
+ }
+ }
+
+ static inline void
+ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
+ void *const reloc_addr_arg)
+ {
+ Elf32_Addr value;
+
+ if (reloc->r_addend)
+ value = l_addr + reloc->r_addend;
+ else
+ {
+ COPY_UNALIGNED_WORD (reloc_addr_arg, &value, (int) reloc_addr_arg & 3);
+ value += l_addr;
+ }
+ COPY_UNALIGNED_WORD (&value, reloc_addr_arg, (int) reloc_addr_arg & 3);
+
+ #undef COPY_UNALIGNED_WORD
+ #undef COPY_UNALIGNED_HWORD
+ }
+
+ static inline void
+ elf_machine_lazy_rel (struct link_map *map,
+ Elf32_Addr l_addr, const Elf32_Rela *reloc)
+ {
+ Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+ /* Check for unexpected PLT reloc type. */
+ #ifdef M32R_OLD_ABI
+ if (ELF32_R_TYPE (reloc->r_info) == R_M32R_JMP_SLOT
+ || ELF32_R_TYPE (reloc->r_info) == R_M32R_JMP_SLOT_SAMPLE)
+ #else
+ if (ELF32_R_TYPE (reloc->r_info) == R_M32R_JMP_SLOT)
+ #endif
+ *reloc_addr += l_addr;
+ else
+ _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
+ }
+
+ #endif /* RESOLVE */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/elf/start.S ./sysdeps/m32r/elf/start.S
*** ../libc-org/sysdeps/m32r/elf/start.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/elf/start.S 2004-09-08 16:45:34.000000000 +0900
***************
*** 0 ****
--- 1,81 ----
+ /* Startup code for M32R & ELF.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* This is the canonical entry point, usually the first thing in the text
+ segment.
+
+ Note that the code in the .init section has already been run.
+ This includes _init and _libc_init
+
+
+ At this entry point, most registers' values are unspecified, except:
+
+ r0 Contains a function pointer to be registered with `atexit'.
+ This is how the dynamic linker arranges to have DT_FINI
+ functions called for shared libraries that have been loaded
+ before this code runs.
+
+ sp The stack contains the arguments and environment:
+ @(0,sp) argc
+ @(4,sp) argv[0]
+ ...
+ @((4*argc),sp) NULL
+ @((4*(argc+1)),sp) envp[0]
+ ...
+ NULL
+ */
+
+ #include "sysdep.h"
+ #include "bp-sym.h"
+
+ .text
+ .globl _start
+ _start:
+ /* Clear the frame pointer since this is the outermost frame. */
+ ldi r13, #0
+
+ /* Pop argc off the stack and save a pointer to argv */
+ pop r1
+ mv r2, sp
+
+ /* Push the last arguments to main() onto the stack */
+ push r0
+ LDIMM (r0, __libc_csu_fini)
+ push r0
+
+ /* Set up the other arguments for main() that go in registers */
+ LDIMM (r0, BP_SYM (main))
+ LDIMM (r3, __libc_csu_init)
+
+ /* __libc_start_main (main, argc, argv, init, fini, rtld_fini) */
+
+ /* Let the libc call main and exit with its return code. */
+ LDIMM (r4, BP_SYM (__libc_start_main))
+ jl r4
+ /* should never get here....*/
+ LDIMM (r4, abort)
+ jl r4
+
+ /* Define a symbol for the first piece of initialized data. */
+ .data
+ .globl __data_start
+ __data_start:
+ .long 0
+ .weak data_start
+ data_start = __data_start
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/gmp-mparam.h ./sysdeps/m32r/gmp-mparam.h
*** ../libc-org/sysdeps/m32r/gmp-mparam.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/gmp-mparam.h 2004-09-08 16:43:58.000000000 +0900
***************
*** 0 ****
--- 1,30 ----
+ /* gmp-mparam.h -- Compiler/machine parameter header file.
+
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+ This file is part of the GNU MP Library.
+
+ The GNU MP 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.
+
+ The GNU MP 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 the GNU MP 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. */
+
+ #define BITS_PER_MP_LIMB 32
+ #define BYTES_PER_MP_LIMB 4
+ #define BITS_PER_LONGINT 32
+ #define BITS_PER_INT 32
+ #define BITS_PER_SHORTINT 16
+ #define BITS_PER_CHAR 8
+
+ #define IEEE_DOUBLE_BIG_ENDIAN 0
+ #define IEEE_DOUBLE_MIXED_ENDIAN 1
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/init-first.c ./sysdeps/m32r/init-first.c
*** ../libc-org/sysdeps/m32r/init-first.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/init-first.c 2004-09-08 16:44:08.000000000 +0900
***************
*** 0 ****
--- 1,73 ----
+ /* Initialization code run first thing by the ELF startup code. For M32R.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <unistd.h>
+
+ extern void __libc_init (int, char **, char **);
+ #ifdef USE_NONOPTION_FLAGS
+ extern void __getopt_clean_environment (char **);
+ #endif
+ extern void __libc_global_ctors (void);
+
+ int __libc_multiple_libcs attribute_hidden = 1;
+
+ static void
+ init (int *data)
+ {
+ int argc = *data;
+ char **argv = (void *) (data + 1);
+ char **envp = &argv[argc + 1];
+
+ __environ = envp;
+ __libc_init (argc, argv, envp);
+
+ #ifdef USE_NONOPTION_FLAGS
+ /* This is a hack to make the special getopt in GNU libc working. */
+ __getopt_clean_environment (envp);
+ #endif
+ }
+
+ #ifdef SHARED
+ /* This function is called to initialize the shared C library.
+ It is called just before the user _start code from m32r/elf/start.S,
+ with the stack set up as that code gets it. */
+
+ /* NOTE! The linker notices the magical name `_init' and sets the DT_INIT
+ pointer in the dynamic section based solely on that. It is convention
+ for this function to be in the `.init' section, but the symbol name is
+ the only thing that really matters!! */
+ /*void _init (int argc, ...) __attribute__ ((unused, section (".init")));*/
+
+ void
+ _init (int argc, ...)
+ {
+ init (&argc);
+
+ __libc_global_ctors ();
+ }
+ #endif
+
+
+ void
+ __libc_init_first (int argc __attribute__ ((unused)), ...)
+ {
+ #ifndef SHARED
+ init (&argc);
+ #endif
+ }
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/m32r-mcount.S ./sysdeps/m32r/m32r-mcount.S
*** ../libc-org/sysdeps/m32r/m32r-mcount.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/m32r-mcount.S 2004-08-02 17:58:51.000000000 +0900
***************
*** 0 ****
--- 1,67 ----
+ /* m32r-specific implemetation of profiling support.
+ Copyright (C) 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount)
+ ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), function)
+ .balign 4
+ C_LABEL(_mcount)
+ /* Save the caller-clobbered registers. */
+ push r0
+ push r1
+ push r2
+ push r3
+ push r4
+ push r5
+ push r6
+ push r7
+ push lr
+ ld r0,@(36,sp)
+ mv r1,lr
+
+ #ifdef __PIC__
+ push r12
+ bl.s .+4
+ ld24 r12,#_GLOBAL_OFFSET_TABLE_
+ add r12,lr
+ ld24 lr,#__mcount_internal
+ add lr,r12
+ ld lr,@(lr)
+ jl lr
+ pop r12
+ #else
+ bl __mcount_internal
+ #endif
+ /* Pop the saved registers. Please note that `mcount' has no
+ return value. */
+ pop lr
+ pop r7
+ pop r6
+ pop r5
+ pop r4
+ pop r3
+ pop r2
+ pop r1
+ pop r0
+ ret
+ ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount))
+
+ #undef mcount
+ weak_alias(_mcount, mcount)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/machine-gmon.h ./sysdeps/m32r/machine-gmon.h
*** ../libc-org/sysdeps/m32r/machine-gmon.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/machine-gmon.h 2004-09-08 16:44:14.000000000 +0900
***************
*** 0 ****
--- 1,34 ----
+ /* Machine-dependent definitions for profiling support. M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* NOTYET */
+
+ /* We must not pollute the global namespace. */
+ #define mcount_internal __mcount_internal
+
+ void mcount_internal (u_long frompc, u_long selfpc);
+
+ #define _MCOUNT_DECL(frompc, selfpc) \
+ void mcount_internal (u_long frompc, u_long selfpc)
+
+
+ /* Define MCOUNT as empty since we have the implementation in another
+ file. */
+ #define MCOUNT
+
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/memcpy.S ./sysdeps/m32r/memcpy.S
*** ../libc-org/sysdeps/m32r/memcpy.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/memcpy.S 2004-09-08 16:44:21.000000000 +0900
***************
*** 0 ****
--- 1,62 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #include <endian.h>
+
+ /*
+ * void *memcpy(void *dst, const void *src, size_t n);
+ * No overlap between the memory of DST and of SRC are assumed.
+ *
+ * dst: r0
+ * src: r1
+ * n : r2
+ */
+
+ ENTRY(memcpy)
+ mv r4, r0
+ mv r7, r0
+ or r7, r1
+ beq r0, r1, end_memcopy
+ beqz r2, end_memcopy
+
+ and3 r7, r7, #3
+ bnez r7, byte_copy
+ srl3 r3, r2, #2
+ and3 r2, r2, #3
+ beqz r3, byte_copy
+ addi r4, #-4
+ word_copy:
+ ld r7, @r1+
+ addi r3, #-1
+ st r7, @+r4
+ bnez r3, word_copy
+ beqz r2, end_memcopy
+ addi r4, #4
+ byte_copy:
+ ldb r7, @r1
+ addi r1, #1
+ addi r2, #-1
+ stb r7, @r4
+ addi r4, #1
+ bnez r2, byte_copy
+ end_memcopy:
+ jmp r14
+ nop
+ END(memcpy)
+ libc_hidden_builtin_def (memcpy)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/memset.S ./sysdeps/m32r/memset.S
*** ../libc-org/sysdeps/m32r/memset.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/memset.S 2004-09-08 16:44:29.000000000 +0900
***************
*** 0 ****
--- 1,76 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ /* void *memset(void *dst, int val, int len);
+ *
+ * dst: r0
+ * val: r1
+ * len: r2
+ * ret: r0
+ */
+
+ ENTRY(memset)
+ mv r4, r0
+ beqz r2, end_memset
+ cmpui r2, #4
+ bc byte_set
+ ; case len >= 4
+ and3 r3, r4, #3
+ beqz r3, word_set
+ ; case miss align
+ addi r3, #-4
+ neg r3, r3 ; r3 = -(r3 - 4)
+ miss_align:
+ stb r1, @r4
+ addi r4, #1
+ addi r2, #-1
+ addi r3, #-1
+ bnez r3, miss_align
+ cmpui r2, #4
+ bc byte_set
+ word_set:
+ and3 r1, r1, #0x00ff ; r1: abababab <-- ??????ab
+ sll3 r3, r1, #8
+ or r1, r3
+ sll3 r3, r1, #16
+ or r1, r3
+ addi r2, #-4
+ addi r4, #-4
+ word_set_loop:
+ st r1, @+r4
+ addi r2, #-4
+ bgtz r2, word_set_loop
+ bnez r2, byte_set_wrap
+ st r1, @+r4
+ jmp r14
+ byte_set_wrap:
+ addi r2, #4
+ addi r4, #4
+ beqz r2, end_memset
+ byte_set:
+ addi r2, #-1
+ stb r1, @r4
+ addi r4, #1
+ bnez r2, byte_set
+ end_memset:
+ jmp r14
+ nop
+ END(memset)
+ libc_hidden_builtin_def (memset)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/memusage.h ./sysdeps/m32r/memusage.h
*** ../libc-org/sysdeps/m32r/memusage.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/memusage.h 2004-09-08 16:44:36.000000000 +0900
***************
*** 0 ****
--- 1,21 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #define GETSP() ({ register uintptr_t stack_ptr asm ("r15"); stack_ptr; })
+
+ #include <sysdeps/generic/memusage.h>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/setjmp.S ./sysdeps/m32r/setjmp.S
*** ../libc-org/sysdeps/m32r/setjmp.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/setjmp.S 2004-09-08 16:44:42.000000000 +0900
***************
*** 0 ****
--- 1,53 ----
+ /* setjmp for M32R.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #define _SETJMP_H
+ #define _ASM
+ #include <bits/setjmp.h>
+
+ ENTRY (__sigsetjmp)
+ mv r2, r0
+ /* Save registers */
+ st r8, @r0
+ st r9, @+r0
+ st r10, @+r0
+ st r11, @+r0
+ st r12, @+r0
+ st r13, @+r0
+ st r14, @+r0 /* lr */
+ st r15, @+r0 /* sp */
+ mv r0, r2
+
+ /* Make a tail call to __sigjmp_save; it takes the same args. */
+ #ifdef SHARED
+ mv r2,lr
+ bl.s .+4
+ ld24 r3,#_GLOBAL_OFFSET_TABLE_
+ add r3,lr
+ mv lr,r2
+
+ ld24 r2,C_SYMBOL_NAME(__sigjmp_save)
+ add r2,r3
+ ld r2,@r2
+ #else
+ LDIMM (r2, C_SYMBOL_NAME(__sigjmp_save))
+ #endif
+ jmp r2
+ END (__sigsetjmp)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/stackinfo.h ./sysdeps/m32r/stackinfo.h
*** ../libc-org/sysdeps/m32r/stackinfo.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/stackinfo.h 2004-09-08 16:44:47.000000000 +0900
***************
*** 0 ****
--- 1,28 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* This file contains a bit of information about the stack allocation
+ of the processor. */
+
+ #ifndef _STACKINFO_H
+ #define _STACKINFO_H 1
+
+ /* On SH the stack grows down. */
+ #define _STACK_GROWS_DOWN 1
+
+ #endif /* stackinfo.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/strlen.S ./sysdeps/m32r/strlen.S
*** ../libc-org/sysdeps/m32r/strlen.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/strlen.S 2004-09-08 16:44:53.000000000 +0900
***************
*** 0 ****
--- 1,77 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #include <endian.h>
+
+ /* size_t strlen (const char *s) */
+
+ ENTRY(strlen)
+ mv r6, r0
+ ldi r2, #0
+ and3 r0, r0, #3
+ bnez r0, strlen_byte
+ ;
+ strlen_word:
+ ld r0, @r6+
+ ;
+ seth r5, #high(0x01010101)
+ or3 r5, r5, #low(0x01010101)
+ sll3 r7, r5, #7
+ strlen_word_loop:
+ ld r1, @r6+
+ not r4, r0 ; NOTE: If a null char. exists, return 0.
+ sub r0, r5 ; if ((x - 0x01010101) & ~x & 0x80808080)
+ and r4, r7 ; return 0;
+ and r4, r0
+ bnez r4, strlen_last_bytes
+ addi r2, #4
+ ;
+ ld r0, @r6+
+ not r4, r1 ; NOTE: If a null char. exists, return 0.
+ sub r1, r5 ; if ((x - 0x01010101) & ~x & 0x80808080)
+ and r4, r7 ; return 0;
+ and r4, r1
+ bnez r4, strlen_last_bytes
+ addi r2, #4
+ bra strlen_word_loop
+ ;
+ strlen_byte:
+ ldb r1, @r6
+ addi r6, #1
+ beqz r1, strlen_exit
+ addi r2, #1
+ bra strlen_byte
+ ;
+ strlen_last_bytes:
+ ldi r0, #4
+ addi r6, #-8
+ ;
+ strlen_byte_loop:
+ ldb r1, @r6
+ addi r6, #1
+ addi r0, #-1
+ beqz r1, strlen_exit
+ addi r2, #1
+ bnez r0, strlen_byte_loop
+ ;
+ strlen_exit:
+ mv r0, r2
+ jmp r14
+ END(strlen)
+ libc_hidden_builtin_def (strlen)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/sys/ucontext.h ./sysdeps/m32r/sys/ucontext.h
*** ../libc-org/sysdeps/m32r/sys/ucontext.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/sys/ucontext.h 2004-09-08 16:45:43.000000000 +0900
***************
*** 0 ****
--- 1,102 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+
+ #include <features.h>
+ #include <signal.h>
+
+ typedef int greg_t;
+
+ /* Number of general registers. */
+ #define NGREG 16
+
+ /* Container for all general registers. */
+ typedef greg_t gregset_t[NGREG];
+
+ /* Number of each register is the `gregset_t' array. */
+ enum
+ {
+ R0 = 0,
+ #define R0 R0
+ R1 = 1,
+ #define R1 R1
+ R2 = 2,
+ #define R2 R2
+ R3 = 3,
+ #define R3 R3
+ R4 = 4,
+ #define R4 R4
+ R5 = 5,
+ #define R5 R5
+ R6 = 6,
+ #define R6 R6
+ R7 = 7,
+ #define R7 R7
+ R8 = 8,
+ #define R8 R8
+ R9 = 9,
+ #define R9 R9
+ R10 = 10,
+ #define R10 R10
+ R11 = 11,
+ #define R11 R11
+ R12 = 12,
+ #define R12 R12
+ R13 = 13,
+ #define R13 R13
+ R14 = 14,
+ #define R14 R14
+ R15 = 15,
+ #define R15 R15
+ };
+
+ #if 0
+ /* FIXME */
+ typedef int freg_t;
+
+ /* Number of FPU registers. */
+ #define NFREG 16
+
+ /* Structure to describe FPU registers. */
+ typedef freg_t fpregset_t[NFREG];
+ #endif
+
+ /* Context to describe whole processor state. */
+ typedef struct
+ {
+ gregset_t gregs;
+ #if 0
+ fpregset_t fpregs;
+ fpregset_t xfpregs;
+ #endif
+ } mcontext_t;
+
+ /* Userlevel context. */
+ typedef struct ucontext
+ {
+ unsigned long int uc_flags;
+ struct ucontext *uc_link;
+ __sigset_t uc_sigmask;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ long int uc_filler[5];
+ } ucontext_t;
+
+ #endif /* sys/ucontext.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/m32r/sysdep.h ./sysdeps/m32r/sysdep.h
*** ../libc-org/sysdeps/m32r/sysdep.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/m32r/sysdep.h 2004-09-08 16:45:07.000000000 +0900
***************
*** 0 ****
--- 1,92 ----
+ /* Assembler macros for M32R.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdeps/generic/sysdep.h>
+
+ #ifdef __ASSEMBLER__
+
+ /* Syntactic details of assembler. */
+
+ #ifdef HAVE_ELF
+
+ #define ALIGNARG(log2) log2
+ /* For ELF we need the `.type' directive to make shared libs work right. */
+ #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg
+ #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+ #define PLTJMP(_x) _x
+ #define GOT(_x) _x
+
+ #else
+
+ #define ALIGNARG(log2) log2
+ #define ASM_TYPE_DIRECTIVE(name,type) /* Nothing is specified. */
+ #define ASM_SIZE_DIRECTIVE(name) /* Nothing is specified. */
+
+ #define PLTJMP(_x) _x
+ #define GOT(_x) _x
+
+ #endif
+
+ /* If compiled for profiling, call `mcount' at the start of each function. */
+ #ifdef PROF
+ #ifdef __PIC__
+ #define CALL_MCOUNT \
+ push r14 ! \
+ ld24 r14,#mcount ! \
+ add r14,r12 ! \
+ ld r14,@r14 ! \
+ jl r14 ! \
+ pop r14
+ #else
+ #define CALL_MCOUNT \
+ push r14 ! \
+ seth r14,#high(mcount) ! \
+ or3 r14,r14,#low(mcount) ! \
+ jl r14 ! \
+ pop r14
+ #endif
+ #else
+ #define CALL_MCOUNT /* Do nothing. */
+ #endif
+
+ #undef CALL_MCOUNT /* Do nothing. */
+ #define CALL_MCOUNT /* Do nothing. */
+
+ /* Define an entry point visible from C. */
+ #define ENTRY(name) \
+ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name) ! \
+ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function) ! \
+ .balign 4 ! \
+ C_LABEL(name) ! \
+ CALL_MCOUNT
+
+ #undef END
+ #define END(name) \
+ ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name))
+
+ #ifdef NO_UNDERSCORES
+ /* Since C identifiers are not normally prefixed with an underscore
+ on this system, the asm identifier `syscall_error' intrudes on the
+ C name space. Make sure we use an innocuous name. */
+ #define syscall_error __syscall_error
+ #define mcount _mcount
+ #endif
+
+ #endif /* __ASSEMBLER__ */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/m32r/Makefile ./sysdeps/unix/m32r/Makefile
*** ../libc-org/sysdeps/unix/m32r/Makefile 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/m32r/Makefile 2003-12-24 10:56:53.000000000 +0900
***************
*** 0 ****
--- 1,4 ----
+ # m32r/ELF specific definitions.
+
+ # The assembler on m32r needs the -fPIC flag even when it's assembler code.
+ ASFLAGS-.os = -fPIC
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/m32r/sysdep.S ./sysdeps/unix/m32r/sysdep.S
*** ../libc-org/sysdeps/unix/m32r/sysdep.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/m32r/sysdep.S 2004-09-08 16:46:04.000000000 +0900
***************
*** 0 ****
--- 1,76 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H
+ #include <bits/errno.h>
+
+ ENTRY(__syscall_error)
+ #if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
+ /* We translate the system's EWOULDBLOCK error into EAGAIN.
+ The GNU C library always defines EWOULDBLOCK==EAGAIN.
+ EWOULDBLOCK_sys is the original number. */
+ ldi r1, #EWOULDBLOCK_sys
+ bne r1, r0, skip
+ ldi r0, #EAGAIN
+ skip:
+ #endif
+ /* Store it in errno... */
+ #ifndef SHARED
+ #ifndef _LIBC_REENTRANT
+ LDIMM (r1, C_SYMBOL_NAME(errno))
+ st r0, @r1
+ #else
+ push r0
+ push lr
+ LDIMM (r1, C_SYMBOL_NAME(__errno_location))
+ jl r1
+ pop lr
+ pop r1
+ st r1, @r0
+ #endif
+ #else
+ push r12
+ push lr
+ bl.s .+4
+ ld24 r12,#_GLOBAL_OFFSET_TABLE_
+ add r12, lr
+ #ifndef _LIBC_REENTRANT
+ mv r2, r0
+ LDIMM (r1, C_SYMBOL_NAME(errno))
+ add r1, r12
+ ld r1, @r1
+ st r2, @r1
+ #else
+ push r0
+ LDIMM (r1, C_SYMBOL_NAME(__errno_location))
+ add r1, r12
+ ld r1, @r1
+ jl r1
+ pop r1
+ st r1, @r0
+ #endif
+ pop lr
+ pop r12
+ #endif
+ /* And just kick back a -1. */
+ ldi r0, #-1
+ ret
+ END(__syscall_error)
+
+ weak_alias (__syscall_error, syscall_error)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/m32r/sysdep.h ./sysdeps/unix/m32r/sysdep.h
*** ../libc-org/sysdeps/unix/m32r/sysdep.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/m32r/sysdep.h 2004-09-08 16:46:09.000000000 +0900
***************
*** 0 ****
--- 1,33 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdeps/unix/sysdep.h>
+ #include <sysdeps/m32r/sysdep.h>
+
+ #ifdef __ASSEMBLER__
+
+ #define ret jmp r14
+
+ /* The m32r move insn is d, s. */
+ #define MOVE(x,y) mv y,x
+
+ #define LDIMM(reg,x) \
+ seth reg, #high(x) ! \
+ or3 reg, reg, #low(x)
+
+ #endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/bits/socket.h ./sysdeps/unix/sysv/linux/bits/socket.h
*** ../libc-org/sysdeps/unix/sysv/linux/bits/socket.h 2004-09-09 16:58:48.000000000 +0900
--- ./sysdeps/unix/sysv/linux/bits/socket.h 2004-09-08 13:48:21.000000000 +0900
***************
*** 286,294 ****
SCM_RIGHTS = 0x01, /* Transfer file descriptors. */
#define SCM_RIGHTS SCM_RIGHTS
#ifdef __USE_BSD
! SCM_CREDENTIALS = 0x02 /* Credentials passing. */
# define SCM_CREDENTIALS SCM_CREDENTIALS
#endif
};
/* User visible structure for SCM_CREDENTIALS message */
--- 286,295 ----
SCM_RIGHTS = 0x01, /* Transfer file descriptors. */
#define SCM_RIGHTS SCM_RIGHTS
#ifdef __USE_BSD
! SCM_CREDENTIALS = 0x02, /* Credentials passing. */
# define SCM_CREDENTIALS SCM_CREDENTIALS
#endif
+ __SCM_CONNECT = 0x03 /* Data array is `struct scm_connect'. */
};
/* User visible structure for SCM_CREDENTIALS message */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/Dist ./sysdeps/unix/sysv/linux/m32r/Dist
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/Dist 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/Dist 2004-05-12 13:46:20.000000000 +0900
***************
*** 0 ****
--- 1,9 ----
+ clone.S
+ pipe.S
+ flushcache.S
+ setresuid.c
+ setresgid.c
+ setfsuid.c
+ setfsgid.c
+ sys/io.h
+ sys/user.h
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/Makefile ./sysdeps/unix/sysv/linux/m32r/Makefile
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/Makefile 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/Makefile 2004-07-20 11:05:29.000000000 +0900
***************
*** 0 ****
--- 1,15 ----
+ # m32r/ELF specific definitions.
+ gnulib := -lgcc
+
+ # The assembler on m32r needs the -fPIC flag even when it's assembler code.
+ ASFLAGS-.os = -fPIC
+
+ ifeq ($(subdir),io)
+ sysdep_routines += pipe
+ endif
+
+ ifeq ($(subdir),misc)
+ sysdep_routines += m32r-stub tas \
+ cachectl flushcache
+ sysdep_headers += sys/io.h sys/tas.h sys/cachectl.h
+ endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/Versions ./sysdeps/unix/sysv/linux/m32r/Versions
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/Versions 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/Versions 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,33 ----
+ libc {
+ GLIBC_2.2 {
+ # functions used in other libraries
+ __xstat64; __fxstat64; __lxstat64;
+
+ # Needed by gcc
+ _flush_cache;
+
+ # a*
+ alphasort64;
+
+ # c*
+ cachectl; cacheflush;
+
+ # g*
+ glob64;
+
+ # New rlimit interface
+ getrlimit; setrlimit; getrlimit64;
+
+ # r*
+ readdir64; readdir64_r;
+
+ # s*
+ scandir64;
+
+ # t*
+ tas;
+
+ # v*
+ versionsort64;
+ }
+ }
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/fcntl.h ./sysdeps/unix/sysv/linux/m32r/bits/fcntl.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/fcntl.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/bits/fcntl.h 2004-09-08 16:48:47.000000000 +0900
***************
*** 0 ****
--- 1,155 ----
+ /* O_*, F_*, FD_* bit values for Linux.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _FCNTL_H
+ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+ #endif
+
+
+ #include <sys/types.h>
+
+ /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+ #define O_ACCMODE 0003
+ #define O_RDONLY 00
+ #define O_WRONLY 01
+ #define O_RDWR 02
+ #define O_CREAT 0100 /* not fcntl */
+ #define O_EXCL 0200 /* not fcntl */
+ #define O_NOCTTY 0400 /* not fcntl */
+ #define O_TRUNC 01000 /* not fcntl */
+ #define O_APPEND 02000
+ #define O_NONBLOCK 04000
+ #define O_NDELAY O_NONBLOCK
+ #define O_SYNC 010000
+ #define O_FSYNC O_SYNC
+ #define O_ASYNC 020000
+
+ #ifdef __USE_GNU
+ # define O_DIRECT 040000 /* Direct disk access. */
+ # define O_DIRECTORY 0200000 /* Must be a directory. */
+ # define O_NOFOLLOW 0400000 /* Do not follow links. */
+ #endif
+
+ /* For now Linux has synchronisity options for data and read operations.
+ We define the symbols here but let them do the same as O_SYNC since
+ this is a superset. */
+ #if defined __USE_POSIX199309 || defined __USE_UNIX98
+ # define O_DSYNC O_SYNC /* Synchronize data. */
+ # define O_RSYNC O_SYNC /* Synchronize read operations. */
+ #endif
+
+ #ifdef __USE_LARGEFILE64
+ # define O_LARGEFILE 0100000
+ #endif
+
+ /* Values for the second argument to `fcntl'. */
+ #define F_DUPFD 0 /* Duplicate file descriptor. */
+ #define F_GETFD 1 /* Get file descriptor flags. */
+ #define F_SETFD 2 /* Set file descriptor flags. */
+ #define F_GETFL 3 /* Get file status flags. */
+ #define F_SETFL 4 /* Set file status flags. */
+ #ifndef __USE_FILE_OFFSET64
+ # define F_GETLK 5 /* Get record locking info. */
+ # define F_SETLK 6 /* Set record locking info (non-blocking). */
+ # define F_SETLKW 7 /* Set record locking info (blocking). */
+ #else
+ # define F_GETLK F_GETLK64 /* Get record locking info. */
+ # define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
+ # define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
+ #endif
+ #define F_GETLK64 12 /* Get record locking info. */
+ #define F_SETLK64 13 /* Set record locking info (non-blocking). */
+ #define F_SETLKW64 14 /* Set record locking info (blocking). */
+
+ #if defined __USE_BSD || defined __USE_XOPEN2K
+ # define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
+ # define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
+ #endif
+
+ #ifdef __USE_GNU
+ # define F_SETSIG 10 /* Set number of signal to be sent. */
+ # define F_GETSIG 11 /* Get number of signal to be sent. */
+ #endif
+
+ /* For F_[GET|SET]FL. */
+ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */
+
+ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
+ #define F_RDLCK 0 /* Read lock. */
+ #define F_WRLCK 1 /* Write lock. */
+ #define F_UNLCK 2 /* Remove lock. */
+
+ /* For old implementation of bsd flock(). */
+ #define F_EXLCK 4 /* or 3 */
+ #define F_SHLCK 8 /* or 4 */
+
+ #ifdef __USE_BSD
+ /* Operations for bsd flock(), also used by the kernel implementation. */
+ # define LOCK_SH 1 /* shared lock */
+ # define LOCK_EX 2 /* exclusive lock */
+ # define LOCK_NB 4 /* or'd with one of the above to prevent
+ blocking */
+ # define LOCK_UN 8 /* remove lock */
+ #endif
+
+ struct flock
+ {
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+ #ifndef __USE_FILE_OFFSET64
+ __off_t l_start; /* Offset where the lock begins. */
+ __off_t l_len; /* Size of the locked area; zero means until EOF. */
+ #else
+ __off64_t l_start; /* Offset where the lock begins. */
+ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
+ #endif
+ __pid_t l_pid; /* Process holding the lock. */
+ };
+
+ #ifdef __USE_LARGEFILE64
+ struct flock64
+ {
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
+ __off64_t l_start; /* Offset where the lock begins. */
+ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
+ __pid_t l_pid; /* Process holding the lock. */
+ };
+ #endif
+
+ /* Define some more compatibility macros to be backward compatible with
+ BSD systems which did not managed to hide these kernel macros. */
+ #ifdef __USE_BSD
+ # define FAPPEND O_APPEND
+ # define FFSYNC O_FSYNC
+ # define FASYNC O_ASYNC
+ # define FNONBLOCK O_NONBLOCK
+ # define FNDELAY O_NDELAY
+ #endif /* Use BSD. */
+
+ /* Advise to `posix_fadvise'. */
+ #ifdef __USE_XOPEN2K
+ # define POSIX_FADV_NORMAL 0 /* No further special treatment. */
+ # define POSIX_FADV_RANDOM 1 /* Expect random page references. */
+ # define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
+ # define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
+ # define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
+ # define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
+ #endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/mman.h ./sysdeps/unix/sysv/linux/m32r/bits/mman.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/mman.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/bits/mman.h 2004-09-08 16:48:53.000000000 +0900
***************
*** 0 ****
--- 1,93 ----
+ /* Definitions for POSIX memory map interface. Linux/M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _SYS_MMAN_H
+ # error "Never include this file directly. Use <sys/mman.h> instead"
+ #endif
+
+ /* The following definitions basically come from the kernel headers.
+ But the kernel header is not namespace clean. */
+
+
+ /* Protections are chosen from these bits, OR'd together. The
+ implementation does not necessarily support PROT_EXEC or PROT_WRITE
+ without PROT_READ. The only guarantees are that no writing will be
+ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+ #define PROT_READ 0x1 /* Page can be read. */
+ #define PROT_WRITE 0x2 /* Page can be written. */
+ #define PROT_EXEC 0x4 /* Page can be executed. */
+ #define PROT_NONE 0x0 /* Page can not be accessed. */
+
+ /* Sharing types (must choose one and only one of these). */
+ #define MAP_SHARED 0x01 /* Share changes. */
+ #define MAP_PRIVATE 0x02 /* Changes are private. */
+ #ifdef __USE_MISC
+ # define MAP_TYPE 0x0f /* Mask for type of mapping. */
+ #endif
+
+ /* Other flags. */
+ #define MAP_FIXED 0x10 /* Interpret addr exactly. */
+ #ifdef __USE_MISC
+ # define MAP_FILE 0
+ # define MAP_ANONYMOUS 0x20 /* Don't use a file. */
+ # define MAP_ANON MAP_ANONYMOUS
+ #endif
+
+ /* These are Linux-specific. */
+ #ifdef __USE_MISC
+ # define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
+ # define MAP_DENYWRITE 0x0800 /* ETXTBSY */
+ # define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
+ # define MAP_LOCKED 0x2000 /* Lock the mapping. */
+ # define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
+ #endif
+
+ /* Flags to `msync'. */
+ #define MS_ASYNC 1 /* Sync memory asynchronously. */
+ #define MS_SYNC 4 /* Synchronous memory sync. */
+ #define MS_INVALIDATE 2 /* Invalidate the caches. */
+
+ /* Flags for `mlockall'. */
+ #define MCL_CURRENT 1 /* Lock all currently mapped pages. */
+ #define MCL_FUTURE 2 /* Lock all additions to address
+ space. */
+
+ /* Flags for `mremap'. */
+ #ifdef __USE_GNU
+ # define MREMAP_MAYMOVE 1
+ #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
+
+ /* The POSIX people had to invent similar names for the same things. */
+ #ifdef __USE_XOPEN2K
+ # define POSIX_MADV_NORMAL 0 /* No further special treatment. */
+ # define POSIX_MADV_RANDOM 1 /* Expect random page references. */
+ # define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
+ # define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
+ # define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
+ #endif
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/resource.h ./sysdeps/unix/sysv/linux/m32r/bits/resource.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/bits/resource.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/bits/resource.h 2004-09-08 16:48:58.000000000 +0900
***************
*** 0 ****
--- 1,209 ----
+ /* Bit values & structures for resource limits. Linux/M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _SYS_RESOURCE_H
+ # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
+ #endif
+
+ #include <bits/types.h>
+
+ /* Transmute defines to enumerations. The macro re-definitions are
+ necessary because some programs want to test for operating system
+ features with #ifdef RUSAGE_SELF. In ISO C the reflexive
+ definition is a no-op. */
+
+ /* Kinds of resource limit. */
+ enum __rlimit_resource
+ {
+ /* Per-process CPU limit, in seconds. */
+ RLIMIT_CPU = 0,
+ #define RLIMIT_CPU RLIMIT_CPU
+
+ /* Largest file that can be created, in bytes. */
+ RLIMIT_FSIZE = 1,
+ #define RLIMIT_FSIZE RLIMIT_FSIZE
+
+ /* Maximum size of data segment, in bytes. */
+ RLIMIT_DATA = 2,
+ #define RLIMIT_DATA RLIMIT_DATA
+
+ /* Maximum size of stack segment, in bytes. */
+ RLIMIT_STACK = 3,
+ #define RLIMIT_STACK RLIMIT_STACK
+
+ /* Largest core file that can be created, in bytes. */
+ RLIMIT_CORE = 4,
+ #define RLIMIT_CORE RLIMIT_CORE
+
+ /* Largest resident set size, in bytes.
+ This affects swapping; processes that are exceeding their
+ resident set size will be more likely to have physical memory
+ taken from them. */
+ RLIMIT_RSS = 5,
+ #define RLIMIT_RSS RLIMIT_RSS
+
+ /* Number of open files. */
+ RLIMIT_NOFILE = 7,
+ RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */
+ #define RLIMIT_NOFILE RLIMIT_NOFILE
+ #define RLIMIT_OFILE RLIMIT_OFILE
+
+ /* Address space limit. */
+ RLIMIT_AS = 9,
+ #define RLIMIT_AS RLIMIT_AS
+
+ /* Number of processes. */
+ RLIMIT_NPROC = 6,
+ #define RLIMIT_NPROC RLIMIT_NPROC
+
+ /* Locked-in-memory address space. */
+ RLIMIT_MEMLOCK = 8,
+ #define RLIMIT_MEMLOCK RLIMIT_MEMLOCK
+
+ /* Maximum number of file locks. */
+ RLIMIT_LOCKS = 10,
+ #define RLIMIT_LOCKS RLIMIT_LOCKS
+
+ RLIMIT_NLIMITS = 11,
+ RLIM_NLIMITS = RLIMIT_NLIMITS
+ #define RLIMIT_NLIMITS RLIMIT_NLIMITS
+ #define RLIM_NLIMITS RLIM_NLIMITS
+ };
+
+ /* Value to indicate that there is no limit. */
+ #ifndef __USE_FILE_OFFSET64
+ # define RLIM_INFINITY ((unsigned long int)(~0UL))
+ #else
+ # define RLIM_INFINITY 0xffffffffffffffffuLL
+ #endif
+
+ #ifdef __USE_LARGEFILE64
+ # define RLIM64_INFINITY 0xffffffffffffffffuLL
+ #endif
+
+ /* We can represent all limits. */
+ #define RLIM_SAVED_MAX RLIM_INFINITY
+ #define RLIM_SAVED_CUR RLIM_INFINITY
+
+
+ /* Type for resource quantity measurement. */
+ #ifndef __USE_FILE_OFFSET64
+ typedef __rlim_t rlim_t;
+ #else
+ typedef __rlim64_t rlim_t;
+ #endif
+ #ifdef __USE_LARGEFILE64
+ typedef __rlim64_t rlim64_t;
+ #endif
+
+ struct rlimit
+ {
+ /* The current (soft) limit. */
+ rlim_t rlim_cur;
+ /* The hard limit. */
+ rlim_t rlim_max;
+ };
+
+ #ifdef __USE_LARGEFILE64
+ struct rlimit64
+ {
+ /* The current (soft) limit. */
+ rlim64_t rlim_cur;
+ /* The hard limit. */
+ rlim64_t rlim_max;
+ };
+ #endif
+
+ /* Whose usage statistics do you want? */
+ enum __rusage_who
+ {
+ /* The calling process. */
+ RUSAGE_SELF = 0,
+ #define RUSAGE_SELF RUSAGE_SELF
+
+ /* All of its terminated child processes. */
+ RUSAGE_CHILDREN = -1,
+ #define RUSAGE_CHILDREN RUSAGE_CHILDREN
+
+ /* Both. */
+ RUSAGE_BOTH = -2
+ #define RUSAGE_BOTH RUSAGE_BOTH
+ };
+
+ #define __need_timeval
+ #include <bits/time.h> /* For `struct timeval'. */
+
+ /* Structure which says how much of each resource has been used. */
+ struct rusage
+ {
+ /* Total amount of user time used. */
+ struct timeval ru_utime;
+ /* Total amount of system time used. */
+ struct timeval ru_stime;
+ /* Maximum resident set size (in kilobytes). */
+ long int ru_maxrss;
+ /* Amount of sharing of text segment memory
+ with other processes (kilobyte-seconds). */
+ long int ru_ixrss;
+ /* Amount of data segment memory used (kilobyte-seconds). */
+ long int ru_idrss;
+ /* Amount of stack memory used (kilobyte-seconds). */
+ long int ru_isrss;
+ /* Number of soft page faults (i.e. those serviced by reclaiming
+ a page from the list of pages awaiting reallocation. */
+ long int ru_minflt;
+ /* Number of hard page faults (i.e. those that required I/O). */
+ long int ru_majflt;
+ /* Number of times a process was swapped out of physical memory. */
+ long int ru_nswap;
+ /* Number of input operations via the file system. Note: This
+ and `ru_oublock' do not include operations with the cache. */
+ long int ru_inblock;
+ /* Number of output operations via the file system. */
+ long int ru_oublock;
+ /* Number of IPC messages sent. */
+ long int ru_msgsnd;
+ /* Number of IPC messages received. */
+ long int ru_msgrcv;
+ /* Number of signals delivered. */
+ long int ru_nsignals;
+ /* Number of voluntary context switches, i.e. because the process
+ gave up the process before it had to (usually to wait for some
+ resource to be available). */
+ long int ru_nvcsw;
+ /* Number of involuntary context switches, i.e. a higher priority process
+ became runnable or the current process used up its time slice. */
+ long int ru_nivcsw;
+ };
+
+ /* Priority limits. */
+ #define PRIO_MIN -20 /* Minimum priority a process can have. */
+ #define PRIO_MAX 20 /* Maximum priority a process can have. */
+
+ /* The type of the WHICH argument to `getpriority' and `setpriority',
+ indicating what flavor of entity the WHO argument specifies. */
+ enum __priority_which
+ {
+ PRIO_PROCESS = 0, /* WHO is a process ID. */
+ #define PRIO_PROCESS PRIO_PROCESS
+ PRIO_PGRP = 1, /* WHO is a process group ID. */
+ #define PRIO_PGRP PRIO_PGRP
+ PRIO_USER = 2 /* WHO is a user ID. */
+ #define PRIO_USER PRIO_USER
+ };
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/brk.c ./sysdeps/unix/sysv/linux/m32r/brk.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/brk.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/brk.c 2004-09-08 16:46:40.000000000 +0900
***************
*** 0 ****
--- 1,50 ----
+ /* brk system call for Linux/M32R.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <errno.h>
+ #include <unistd.h>
+ #include <sysdep.h>
+
+ /* This must be initialized data because commons can't have aliases. */
+ void *__curbrk = 0;
+
+ int
+ __brk (void *addr)
+ {
+ void *newbrk;
+ register long r7 asm ("r7") = SYS_ify (brk);
+ register long r0 asm ("r0") = (long)addr;
+
+ asm volatile ("trap #0x2\n\t"
+ "mv %0,r0\n"
+ : "=r"(newbrk)
+ : "r" (r7), "r" (r0)
+ );
+
+ __curbrk = newbrk;
+
+ if (newbrk < addr)
+ {
+ __set_errno (ENOMEM);
+ return -1;
+ }
+
+ return 0;
+ }
+ weak_alias (__brk, brk)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/chown.c ./sysdeps/unix/sysv/linux/m32r/chown.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/chown.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/chown.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/m68k/chown.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/clone.S ./sysdeps/unix/sysv/linux/m32r/clone.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/clone.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/clone.S 2004-09-08 16:46:47.000000000 +0900
***************
*** 0 ****
--- 1,70 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* clone() is even more special than fork() as it mucks with stacks
+ and invokes a function in the right context after its all over. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+ #include <bits/errno.h>
+
+ /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+
+ .text
+ ENTRY(__clone)
+ /* sanity check arguments. */
+ beqz r0, 1f
+ bnez r1, 2f
+
+ .fillinsn
+ 1:
+ ldi r0, #-EINVAL
+ SYSCALL_ERROR_HANDLER
+ .fillinsn
+ 2:
+ /* insert the args onto the new stack */
+ st r3, @-r1
+ /* save the function pointer as the 0th element */
+ st r0, @-r1
+
+ /* do the system call */
+ mv r0, r2
+ ldi r7, #SYS_ify(clone)
+ SYSCALL_INST
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 3f // i.e. error in linux
+
+ SYSCALL_ERROR_HANDLER
+ .fillinsn
+ 3:
+ beqz r0, 4f
+ ret
+ .fillinsn
+ 4:
+ /* thread starts */
+ ld r1, @r15
+ ld r0, @(4,r15)
+ jl r1
+
+ /* we are done, passing the return value through r0 */
+ SYSCALL_ERROR_HANDLER
+
+ PSEUDO_END (__clone)
+
+ weak_alias (__clone, clone)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/fchown.c ./sysdeps/unix/sysv/linux/m32r/fchown.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/fchown.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/fchown.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/fcntl.c ./sysdeps/unix/sysv/linux/m32r/fcntl.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/fcntl.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/fcntl.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/fcntl.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/flushcache.S ./sysdeps/unix/sysv/linux/m32r/flushcache.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/flushcache.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/flushcache.S 2004-09-08 16:46:57.000000000 +0900
***************
*** 0 ****
--- 1,29 ----
+ /* 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
+ 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. */
+
+ #include <sysdep.h>
+
+ /* int _flush_cache(char *addr, int nbytes, int cache); */
+
+ .text
+ ENTRY(__flush_cache)
+ trap #12
+ ret
+ PSEUDO_END (__flush_cache)
+
+ weak_alias (__flush_cache, _flush_cache)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/fxstat.c ./sysdeps/unix/sysv/linux/m32r/fxstat.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/fxstat.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/fxstat.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/fxstat.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getegid.c ./sysdeps/unix/sysv/linux/m32r/getegid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getegid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getegid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getegid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/geteuid.c ./sysdeps/unix/sysv/linux/m32r/geteuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/geteuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/geteuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/geteuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getgroups.c ./sysdeps/unix/sysv/linux/m32r/getgroups.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getgroups.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getgroups.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,2 ----
+ /* We also have to rewrite the kernel gid_t to the user land type. */
+ #include <sysdeps/unix/sysv/linux/i386/getgroups.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getresgid.c ./sysdeps/unix/sysv/linux/m32r/getresgid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getresgid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getresgid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getresgid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getresuid.c ./sysdeps/unix/sysv/linux/m32r/getresuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getresuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getresuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getresuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getrlimit.c ./sysdeps/unix/sysv/linux/m32r/getrlimit.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getrlimit.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getrlimit.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getrlimit.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getrlimit64.c ./sysdeps/unix/sysv/linux/m32r/getrlimit64.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getrlimit64.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getrlimit64.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/getuid.c ./sysdeps/unix/sysv/linux/m32r/getuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/getuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/getuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/getuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/lchown.c ./sysdeps/unix/sysv/linux/m32r/lchown.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/lchown.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/lchown.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/lockf64.c ./sysdeps/unix/sysv/linux/m32r/lockf64.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/lockf64.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/lockf64.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/lockf64.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/lxstat.c ./sysdeps/unix/sysv/linux/m32r/lxstat.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/lxstat.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/lxstat.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,2 ----
+ #include <sysdeps/unix/sysv/linux/i386/lxstat.c>
+
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/m32r-stub.c ./sysdeps/unix/sysv/linux/m32r/m32r-stub.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/m32r-stub.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/m32r-stub.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,11 ----
+ #include <elf/link.h>
+
+ struct link_map _dl_rtld_map;
+
+ #ifndef __PIC__
+ void __pthread_initialize_minimal(void)
+ {
+ }
+ #endif
+
+
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/mmap.S ./sysdeps/unix/sysv/linux/m32r/mmap.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/mmap.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/mmap.S 2004-09-08 16:47:24.000000000 +0900
***************
*** 0 ****
--- 1,53 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ /*
+ __ptr_t
+ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset);
+ */
+
+ ENTRY (__mmap)
+ /* Push args and pass the address of 1st arg.
+ * The 5th and 6th args are already passed in the stack.
+ */
+ push r3 // flags
+ push r2 // prot
+ push r1 // len
+ push r0 // addr
+ mv r0, sp
+
+ ; ldi r7, #__NR_old_mmap
+ ldi r7, #__NR_mmap
+ SYSCALL_INST
+ addi sp, #(0x04 * 4)
+
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 1f // i.e. error in linux
+
+ SYSCALL_ERROR_HANDLER
+
+ .fillinsn
+ 1:
+ ret
+
+ PSEUDO_END (__mmap)
+
+ weak_alias (__mmap, mmap)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/msgctl.c ./sysdeps/unix/sysv/linux/m32r/msgctl.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/msgctl.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/msgctl.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/msgctl.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/pipe.S ./sysdeps/unix/sysv/linux/m32r/pipe.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/pipe.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/pipe.S 2004-09-08 16:47:31.000000000 +0900
***************
*** 0 ****
--- 1,37 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ ENTRY (__libc_pipe)
+ ldi r7, #__NR_pipe
+ SYSCALL_INST
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 1f // i.e. error in linux
+
+ SYSCALL_ERROR_HANDLER
+ .fillinsn
+ 1:
+ ldi r0, #0
+ ret
+ PSEUDO_END (__libc_pipe)
+
+ weak_alias (__libc_pipe, __pipe)
+ libc_hidden_def (__pipe)
+ weak_alias (__libc_pipe, pipe)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/profil-counter.h ./sysdeps/unix/sysv/linux/m32r/profil-counter.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/profil-counter.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/profil-counter.h 2004-09-08 16:47:37.000000000 +0900
***************
*** 0 ****
--- 1,29 ----
+ /* Low-level statistical profiling support function. Linux/M32R version.
+ 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <signal.h>
+ #include <sigcontextinfo.h>
+
+ static void
+ profil_counter (int signo, SIGCONTEXT sc)
+ {
+ void *pc;
+ pc = GET_PC(sc);
+ profil_count (pc);
+ }
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/semctl.c ./sysdeps/unix/sysv/linux/m32r/semctl.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/semctl.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/semctl.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/semctl.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setegid.c ./sysdeps/unix/sysv/linux/m32r/setegid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setegid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setegid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setegid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/seteuid.c ./sysdeps/unix/sysv/linux/m32r/seteuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/seteuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/seteuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/seteuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setfsgid.c ./sysdeps/unix/sysv/linux/m32r/setfsgid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setfsgid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setfsgid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setfsuid.c ./sysdeps/unix/sysv/linux/m32r/setfsuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setfsuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setfsuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setgid.c ./sysdeps/unix/sysv/linux/m32r/setgid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setgid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setgid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setgid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setgroups.c ./sysdeps/unix/sysv/linux/m32r/setgroups.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setgroups.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setgroups.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,2 ----
+ /* We also have to rewrite the kernel gid_t to the user land type. */
+ #include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setregid.c ./sysdeps/unix/sysv/linux/m32r/setregid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setregid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setregid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setresgid.c ./sysdeps/unix/sysv/linux/m32r/setresgid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setresgid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setresgid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setresgid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setresuid.c ./sysdeps/unix/sysv/linux/m32r/setresuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setresuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setresuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setresuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setreuid.c ./sysdeps/unix/sysv/linux/m32r/setreuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setreuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setreuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setrlimit.c ./sysdeps/unix/sysv/linux/m32r/setrlimit.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setrlimit.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setrlimit.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/setuid.c ./sysdeps/unix/sysv/linux/m32r/setuid.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/setuid.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/setuid.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/setuid.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/shmctl.c ./sysdeps/unix/sysv/linux/m32r/shmctl.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/shmctl.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/shmctl.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/shmctl.c>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sigcontextinfo.h ./sysdeps/unix/sysv/linux/m32r/sigcontextinfo.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sigcontextinfo.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sigcontextinfo.h 2004-09-08 16:48:01.000000000 +0900
***************
*** 0 ****
--- 1,26 ----
+ /* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Philip Blundell <philb@gnu.org>, 1999.
+
+ The GNU C 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #define SIGCONTEXT struct sigcontext *
+ #define SIGCONTEXT_EXTRA_ARGS
+ #define GET_PC(ctx) ((void *)((ctx)->sc_bpc))
+ #define GET_FRAME(ctx) ((void *)((ctx)->sc_fp))
+ #define GET_STACK(ctx) ((void *)((ctx)->sc_spi))
+ #define CALL_SIGHANDLER(handler, signo, ctx) \
+ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/socket.S ./sysdeps/unix/sysv/linux/m32r/socket.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/socket.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/socket.S 2004-09-08 16:48:06.000000000 +0900
***************
*** 0 ****
--- 1,114 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #include <socketcall.h>
+
+ #define P(a, b) P2(a, b)
+ #define P2(a, b) a##b
+
+ .text
+ /* The socket-oriented system calls are handled unusally in Linux.
+ They are all gated through the single `socketcall' system call number.
+ `socketcall' takes two arguments: the first is the subcode, specifying
+ which socket function is being called; and the second is a pointer to
+ the arguments to the specific function.
+
+ The .S files for the other calls just #define socket and #include this. */
+
+ #ifndef __socket
+ #ifndef NO_WEAK_ALIAS
+ #define __socket P(__,socket)
+ #else
+ #define __socket socket
+ #endif
+ #endif
+
+ #define PUSHARGS(x) PUSHARGS x
+ .macro PUSHARGS nargs
+ push r0
+ .aif \nargs ge 2
+ push r1
+ .aif \nargs ge 3
+ push r2
+ .aif \nargs ge 4
+ push r3
+ /* If nargs is 5, caller has already pushed arg 5. */
+ /* If nargs is 6, caller has already pushed arg 5, 6. */
+ .aendi
+ .aendi
+ .aendi
+ .endm
+
+ #define PUSHARGS(x) PUSHARGS x
+
+ #define POPARGS_1 addi r15,#4
+ #define POPARGS_2 addi r15,#8
+ #define POPARGS_3 addi r15,#12
+ #define POPARGS_4 addi r15,#16
+ #define POPARGS_5 addi r15,#16
+ #define POPARGS_6 addi r15,#16
+
+ #ifndef NARGS
+ #define NARGS 3 /* If we were called with no wrapper, this is really socket() */
+ #endif
+
+ .globl __socket
+ ENTRY (__socket)
+ /* This will not work in the case of a socket call being interrupted
+ by a signal. If the signal handler uses any stack the arguments
+ to socket will be trashed. The results of a restart of any
+ socket call are then unpredictable. */
+
+ /* Push args onto the stack. */
+ /* PUSHARGS(NARGS) */
+ #if (NARGS >= 4)
+ push r3
+ /* If nargs is 6, caller has already pushed arg 5, 6. */
+ /* If nargs is 5, caller has already pushed arg 5. */
+ #endif
+ #if (NARGS >= 3)
+ push r2
+ #endif
+ #if (NARGS >= 2)
+ push r1
+ #endif
+ push r0
+
+ /* Do the system call trap. */
+ ldi r0, #P(SOCKOP_,socket)
+ mv r1, r15
+ ldi r7, #SYS_ify(socketcall)
+ SYSCALL_INST
+
+ /* Pop args off the stack */
+ P(POPARGS_,NARGS)
+
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 1f // i.e. error in linux
+
+ SYSCALL_ERROR_HANDLER
+ .fillinsn
+ 1:
+ /* Successful; return the syscall's value. */
+ ret
+
+ PSEUDO_END (__socket)
+
+ weak_alias (__socket, socket)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/cachectl.h ./sysdeps/unix/sysv/linux/m32r/sys/cachectl.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/cachectl.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sys/cachectl.h 2004-09-08 16:49:03.000000000 +0900
***************
*** 0 ****
--- 1,38 ----
+ /* 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
+ 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_CACHECTL_H
+ #define _SYS_CACHECTL_H 1
+
+ #include <features.h>
+
+ /*
+ * Get the kernel definition for the op bits.
+ */
+ #include <asm/cachectl.h>
+
+ __BEGIN_DECLS
+
+ #ifdef __USE_MISC
+ extern int cacheflush (void *addr, __const int nbytes, __const int op) __THROW;
+ #endif
+ extern int _flush_cache (char *addr, __const int nbytes, __const int op) __THROW;
+
+ __END_DECLS
+
+ #endif /* sys/cachectl.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/io.h ./sysdeps/unix/sysv/linux/m32r/sys/io.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/io.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sys/io.h 2004-09-08 16:49:08.000000000 +0900
***************
*** 0 ****
--- 1,48 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _SYS_IO_H
+
+ #define _SYS_IO_H 1
+ #include <features.h>
+
+ __BEGIN_DECLS
+
+ /* If TURN_ON is TRUE, request for permission to do direct i/o on the
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
+ permission off for that range. This call requires root privileges. */
+ extern int ioperm (unsigned long int __from, unsigned long int __num,
+ int __turn_on) __THROW;
+
+ /* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
+ permission to access any I/O port is granted. This call requires
+ root privileges. */
+ extern int iopl (int __level) __THROW;
+
+ /* The functions that actually perform reads and writes. */
+ extern unsigned char inb (unsigned long int port) __THROW;
+ extern unsigned short int inw (unsigned long int port) __THROW;
+ extern unsigned long int inl (unsigned long int port) __THROW;
+
+ extern void outb (unsigned char value, unsigned long int port) __THROW;
+ extern void outw (unsigned short value, unsigned long int port) __THROW;
+ extern void outl (unsigned long value, unsigned long int port) __THROW;
+
+ __END_DECLS
+
+ #endif /* _SYS_IO_H */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/tas.h ./sysdeps/unix/sysv/linux/m32r/sys/tas.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/tas.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sys/tas.h 2003-12-25 10:05:27.000000000 +0900
***************
*** 0 ****
--- 1,13 ----
+ #ifndef _SYS_TAS_H
+
+ #define _SYS_TAS_H 1
+
+ #include <features.h>
+
+ __BEGIN_DECLS
+
+ extern int tas(int *) __THROW;
+
+ __END_DECLS
+
+ #endif /* _SYS_TAS_H */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/ucontext.h ./sysdeps/unix/sysv/linux/m32r/sys/ucontext.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/ucontext.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sys/ucontext.h 2004-09-08 16:49:15.000000000 +0900
***************
*** 0 ****
--- 1,111 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ /* Where is System V/SH ABI? */
+
+ #ifndef _SYS_UCONTEXT_H
+ #define _SYS_UCONTEXT_H 1
+
+ #include <features.h>
+ #include <signal.h>
+
+ /* We need the signal context definitions even if they are not used
+ included in <signal.h>. */
+ #include <bits/sigcontext.h>
+
+
+ typedef int greg_t;
+
+ /* Number of general registers. */
+ #define NFPREG 16
+
+ /* Container for all general registers. */
+ typedef greg_t gregset_t[NFPREG];
+
+ #if 0
+ #ifdef __USE_GNU
+ /* Number of each register is the `gregset_t' array. */
+ enum
+ {
+ R0 = 0,
+ #define R0 R0
+ R1 = 1,
+ #define R1 R1
+ R2 = 2,
+ #define R2 R2
+ R3 = 3,
+ #define R3 R3
+ R4 = 4,
+ #define R4 R4
+ R5 = 5,
+ #define R5 R5
+ R6 = 6,
+ #define R6 R6
+ R7 = 7,
+ #define R7 R7
+ R8 = 8,
+ #define R8 R8
+ R9 = 9,
+ #define R9 R9
+ R10 = 10,
+ #define R10 R10
+ R11 = 11,
+ #define R11 R11
+ R12 = 12,
+ #define R12 R12
+ R13 = 13,
+ #define R13 R13
+ R14 = 14,
+ #define R14 R14
+ R15 = 15,
+ #define R15 R15
+ };
+ #endif
+ #endif /* 0 */
+
+ typedef int freg_t;
+
+ /* Number of FPU registers. */
+ #define NFPREG 16
+
+ /* Structure to describe FPU registers. */
+ typedef freg_t fpregset_t[NFPREG];
+
+ /* Context to describe whole processor state. */
+ typedef struct
+ {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ fpregset_t xfpregs;
+ unsigned int fpscr;
+ unsigned int fpul;
+ unsigned int macl;
+ unsigned int mach;
+ } mcontext_t;
+
+ /* Userlevel context. */
+ typedef struct ucontext
+ {
+ unsigned long int uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ __sigset_t uc_sigmask;
+ } ucontext_t;
+
+ #endif /* sys/ucontext.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/user.h ./sysdeps/unix/sysv/linux/m32r/sys/user.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sys/user.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sys/user.h 2004-09-08 16:49:20.000000000 +0900
***************
*** 0 ****
--- 1,26 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _SYS_USER_H
+ #define _SYS_USER_H 1
+
+ #include <features.h>
+
+ #include <asm/user.h>
+
+ #endif /* sys/user.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/syscall.S ./sysdeps/unix/sysv/linux/m32r/syscall.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/syscall.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/syscall.S 2004-09-08 16:48:14.000000000 +0900
***************
*** 0 ****
--- 1,41 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ ENTRY (__syscall)
+ mv r7, r0 // syscall number
+ mv r0, r1 // p1
+ mv r1, r2 // p2
+ mv r2, r3 // p3
+ ld r3, @(sp) // p4
+ ld r4, @(4,sp) // p5
+ ld r5, @(8,sp) // p6
+ ld r6, @(12,sp) // p7
+ SYSCALL_INST
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 1f // i.e. error in linux
+
+ SYSCALL_ERROR_HANDLER
+ .fillinsn
+ 1:
+ ret
+ PSEUDO_END (__syscall)
+
+ weak_alias (__syscall, syscall)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/syscalls.list ./sysdeps/unix/sysv/linux/m32r/syscalls.list
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/syscalls.list 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/syscalls.list 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1,4 ----
+ # File name Caller Syscall name # args Strong name Weak names
+ tas - tas i:p __tas tas
+ cachectl - cachectl i:pii __cachectl cachectl
+ cacheflush - cacheflush i:pii __cacheflush cacheflush
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sysdep.S ./sysdeps/unix/sysv/linux/m32r/sysdep.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sysdep.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sysdep.S 2004-09-08 16:48:21.000000000 +0900
***************
*** 0 ****
--- 1,32 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+
+ /* The syscall stubs jump here when they detect an error.
+ The code for Linux is almost identical to the canonical Unix
+ code, except that the error number in R0 is negated. */
+
+ #undef CALL_MCOUNT
+ #define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */
+
+ ENTRY (__syscall_error)
+ neg r0, r0
+
+ #define __syscall_error __syscall_error_1
+ #include <sysdeps/unix/m32r/sysdep.S>
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/sysdep.h ./sysdeps/unix/sysv/linux/m32r/sysdep.h
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/sysdep.h 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/sysdep.h 2004-09-08 16:48:26.000000000 +0900
***************
*** 0 ****
--- 1,276 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #ifndef _LINUX_M32R_SYSDEP_H
+ #define _LINUX_M32R_SYSDEP_H 1
+
+ /* There is some commonality. */
+ #include <sysdeps/unix/m32r/sysdep.h>
+
+ /* For Linux we can use the system call table in the header file
+ /usr/include/asm/unistd.h
+ of the kernel. But these symbols do not follow the SYS_* syntax
+ so we have to redefine the `SYS_ify' macro here. */
+ #undef SYS_ify
+ #define SYS_ify(syscall_name) __NR_##syscall_name
+
+ #ifdef __ASSEMBLER__
+
+ /* Linux uses a negative return value to indicate syscall errors,
+ unlike most Unices, which use the condition codes' carry flag.
+
+ Since version 2.1 the return value of a system call might be
+ negative even if the call succeeded. E.g., the `lseek' system call
+ might return a large offset. Therefore we must not anymore test
+ for < 0, but test for a real error by making sure the value in R0
+ is a real error number. Linus said he will make sure the no syscall
+ returns a value in -1 .. -4095 as a valid result so we can savely
+ test with -4095. */
+
+ #define SYSCALL_INST trap #2
+ #define SYSCALL_INST_0 trap #2
+ #define SYSCALL_INST_1 trap #2
+ #define SYSCALL_INST_2 trap #2
+ #define SYSCALL_INST_3 trap #2
+ #define SYSCALL_INST_4 trap #2
+ #define SYSCALL_INST_5 \
+ ld r4,@sp ! \
+ trap #2
+ #define SYSCALL_INST_STR_6 \
+ ld r4,@sp ! \
+ ld r5,@(4,sp) ! \
+ trap #2
+ #define SYSCALL_INST_STR_7 \
+ ld r4,@sp ! \
+ ld r5,@(4,sp) ! \
+ ld r6,@(8,sp) ! \
+ trap #2
+
+ #define DO_CALL( syscall_name, args ) \
+ ldi r7,SYS_ify(syscall_name) ! \
+ SYSCALL_INST_##args
+
+ #undef PSEUDO
+ #define PSEUDO(name, syscall_name, args) \
+ .text !\
+ ENTRY (name) !\
+ DO_CALL (syscall_name, args) !\
+ not r1,r0 !\
+ srai r1,#12 !\
+ bnez r1,.Lpseudo_end !\
+ SYSCALL_ERROR_HANDLER !\
+ .fillinsn !\
+ .Lpseudo_end:
+
+ #undef PSEUDO_END
+ #define PSEUDO_END(name) \
+ END (name)
+
+ #undef PSEUDO_NOERRNO
+ #define PSEUDO_NOERRNO(name, syscall_name, args) \
+ .text !\
+ ENTRY (name) !\
+ DO_CALL (syscall_name, args)
+
+ #undef PSEUDO_END_NOERRNO
+ #define PSEUDO_END_NOERRNO(name) \
+ END (name)
+
+ #define ret_NOERRNO ret
+
+ #define PSEUDO_ERRVAL(name, syscall_name, args) \
+ .text !\
+ ENTRY (name) !\
+ DO_CALL (syscall_name, args)
+
+ #undef PSEUDO_END_ERRVAL
+ #define PSEUDO_END_ERRVAL(name) \
+ END (name)
+
+ #define ret_ERRVAL ret
+
+ #ifndef __PIC__
+ # define SYSCALL_ERROR_HANDLER \
+ LDIMM (r1, C_SYMBOL_NAME(__syscall_error)) !\
+ jmp r1 !\
+
+ #else
+ # if defined _LIBC_REENTRANT
+
+ # if USE___THREAD
+ # ifndef NOT_IN_libc
+ # define SYSCALL_ERROR_ERRNO __libc_errno
+ # else
+ # define SYSCALL_ERROR_ERRNO errno
+ # endif
+ # define SYSCALL_ERROR_HANDLER \
+ neg r1,r0 !\
+ mv r3,lr !\
+ bl.s .+4 !\
+ ld24 r2,#_GLOBAL_OFFSET_TABLE_ !\
+ add r2,lr !\
+ mv lr,r3 !\
+ ld24 r0,#GOT(C_SYMBOL_NAME(SYSCALL_ERROR_ERRNO)) !\
+ add r2,r0 !\
+ ld r2,@r2 !\
+ st r1,@r2 !\
+ ldi r0,#-1 !\
+ ret
+
+ # else
+ # define SYSCALL_ERROR_HANDLER \
+ neg r1,r0 !\
+ push r12 !\
+ push lr !\
+ push r1 !\
+ bl.s .+4 !\
+ ld24 r12,#_GLOBAL_OFFSET_TABLE_ !\
+ add r12,lr !\
+ ld24 r1,#GOT(C_SYMBOL_NAME(__errno_location)) !\
+ add r1,r12 !\
+ ld r1,@r1 !\
+ jl r1 !\
+ pop r1 !\
+ st r1,@r0 !\
+ pop lr !\
+ pop r12 !\
+ ldi r0,#-1 !\
+ ret !\
+
+ # endif
+
+ # else
+ /* Store (-r0) into errno through the GOT. */
+ # define SYSCALL_ERROR_HANDLER \
+ neg r1,r0 !\
+ mv r3,lr !\
+ bl.s .+4 !\
+ ld24 r2,#_GLOBAL_OFFSET_TABLE_ !\
+ add r2,lr !\
+ mv lr,r3 !\
+ ld24 r0,#GOT(C_SYMBOL_NAME(errno)) !\
+ add r2,r0 !\
+ ld r2,@r2 !\
+ st r1,@r2 !\
+ ldi r0,#-1 !\
+ ret
+
+ # endif /* _LIBC_REENTRANT */
+ #endif /* __PIC__ */
+
+ #define ret_ERRVAL ret
+
+ #else /* not __ASSEMBLER__ */
+
+ #undef DO_CALL
+
+ #define SYSCALL_INST_STR "trap #2\n\t"
+
+ #define ASMFMT_0 \
+ , "0" (r0)
+ #define ASMFMT_1 \
+ , "0" (r0)
+ #define ASMFMT_2 \
+ , "0" (r0), "r" (r1)
+ #define ASMFMT_3 \
+ , "0" (r0), "r" (r1), "r" (r2)
+ #define ASMFMT_4 \
+ , "0" (r0), "r" (r1), "r" (r2), "r" (r3)
+ #define ASMFMT_5 \
+ , "0" (r0), "r" (r1), "r" (r2), "r" (r3), "r" (r4)
+ #define ASMFMT_6 \
+ , "0" (r0), "r" (r1), "r" (r2), "r" (r3), "r" (r4), "r" (r5)
+ #define ASMFMT_7 \
+ , "0" (r0), "r" (r1), "r" (r2), "r" (r3), "r" (r4), "r" (r5), "r" (r6)
+
+ #define SUBSTITUTE_ARGS_0() \
+ register long r0 asm ("r0") = 0
+ #define SUBSTITUTE_ARGS_1(arg1) \
+ register long r0 asm ("r0") = (long)(arg1)
+ #define SUBSTITUTE_ARGS_2(arg1, arg2) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2)
+ #define SUBSTITUTE_ARGS_3(arg1, arg2, arg3) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2); \
+ register long r2 asm ("r2") = (long)(arg3)
+ #define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2); \
+ register long r2 asm ("r2") = (long)(arg3); \
+ register long r3 asm ("r3") = (long)(arg4)
+ #define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2); \
+ register long r2 asm ("r2") = (long)(arg3); \
+ register long r3 asm ("r3") = (long)(arg4); \
+ register long r4 asm ("r4") = (long)(arg5)
+ #define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2); \
+ register long r2 asm ("r2") = (long)(arg3); \
+ register long r3 asm ("r3") = (long)(arg4); \
+ register long r4 asm ("r4") = (long)(arg5); \
+ register long r5 asm ("r5") = (long)(arg6)
+ #define SUBSTITUTE_ARGS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ register long r0 asm ("r0") = (long)(arg1); \
+ register long r1 asm ("r1") = (long)(arg2); \
+ register long r2 asm ("r2") = (long)(arg3); \
+ register long r3 asm ("r3") = (long)(arg4); \
+ register long r4 asm ("r4") = (long)(arg5); \
+ register long r5 asm ("r5") = (long)(arg6); \
+ register long r6 asm ("r6") = (long)(arg7)
+
+ #undef INLINE_SYSCALL
+ #define INLINE_SYSCALL(name, nr, args...) \
+ ({ \
+ unsigned int resultvar = INTERNAL_SYSCALL (name, , nr, args); \
+ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0)) \
+ { \
+ __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, )); \
+ resultvar = 0xffffffff; \
+ } \
+ (int) resultvar; })
+
+ #undef INTERNAL_SYSCALL
+ #define INTERNAL_SYSCALL(name, err, nr, args...) \
+ ({ \
+ register long r7 asm ("r7") = SYS_ify (name); \
+ SUBSTITUTE_ARGS_##nr(args); \
+ \
+ asm volatile (SYSCALL_INST_STR "\n\t" \
+ : "=r" (r0) \
+ : "r" (r7) ASMFMT_##nr \
+ : "memory"); \
+ \
+ (int) r0; })
+
+ #undef INTERNAL_SYSCALL_DECL
+ #define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
+ #undef INTERNAL_SYSCALL_ERROR_P
+ #define INTERNAL_SYSCALL_ERROR_P(val, err) \
+ ((unsigned int) (val) >= 0xfffff001u)
+
+ #undef INTERNAL_SYSCALL_ERRNO
+ #define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
+
+ #endif /* __ASSEMBLER__ */
+
+ #endif /* linux/m32r/sysdep.h */
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/vfork.S ./sysdeps/unix/sysv/linux/m32r/vfork.S
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/vfork.S 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/vfork.S 2004-09-08 16:48:31.000000000 +0900
***************
*** 0 ****
--- 1,65 ----
+ /* 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
+ 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.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library 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. */
+
+ #include <sysdep.h>
+ #define _ERRNO_H 1
+ #include <bits/errno.h>
+
+ /* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+ ENTRY (__vfork)
+
+ #ifdef __NR_vfork
+ ldi r7, #__NR_vfork
+ SYSCALL_INST
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 1f // i.e. error in linux
+
+ /* Check if vfork syscall is known at all. */
+ ldi r1, #-ENOSYS
+ beq r0, r1, 2f
+ bra vfork_error
+ .fillinsn
+ 1:
+ ret
+ .fillinsn
+ 2:
+ #endif
+
+ /* If we don't have vfork, fork is close enough. */
+ ldi r7, #__NR_fork
+ SYSCALL_INST
+ not r1, r0
+ srai r1, #12 // r1=0 means r0 = -1 to -4095
+ bnez r1, 4f // i.e. error in linux
+ vfork_error:
+
+ SYSCALL_ERROR_HANDLER
+
+ .fillinsn
+ 4:
+ ret
+
+ PSEUDO_END (__vfork)
+ libc_hidden_def(__vfork)
+
+ weak_alias (__vfork, vfork)
diff -cNr --exclude CVS --exclude manual ../libc-org/sysdeps/unix/sysv/linux/m32r/xstat.c ./sysdeps/unix/sysv/linux/m32r/xstat.c
*** ../libc-org/sysdeps/unix/sysv/linux/m32r/xstat.c 1970-01-01 09:00:00.000000000 +0900
--- ./sysdeps/unix/sysv/linux/m32r/xstat.c 2003-12-25 10:01:57.000000000 +0900
***************
*** 0 ****
--- 1 ----
+ #include <sysdeps/unix/sysv/linux/i386/xstat.c>