From: Alexandre Oliva Date: Sat, 29 Mar 2003 08:15:29 +0000 (+0000) Subject: * configure.in: Add mips64* support. X-Git-Tag: glibc-2.16-ports-merge^2~1381 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=ef055a744e3f0fd916b71400e768a060b58ba989;p=jlayton%2Fglibc.git * configure.in: Add mips64* support. * configure: Rebuilt. * sysdeps/mips/bits/endian.h: Make it bi-endian. * sysdeps/mips/mipsel/bits/endian.h: Removed. * sysdeps/mips/mips64/n32/el/bits/endian.h: Removed. * sysdeps/mips/mips64/n64/el/bits/endian.h: Removed. * sysdeps/mips/mips32/Makefile (CC): Add -mabi=32. * sysdeps/mips/mips64/n32/Makefile (CC): Add -mabi=n32. * sysdeps/mips/mips64/n64/Makefile (CC): Add -mabi=64. * sysdeps/mips/Implies: Moved wordsize-32 to... * sysdeps/mips/mips32/Implies: New file. * sysdeps/unix/mips/sysdep.h (PSEUDO_NOERRNO, PSEUDO_END_NOERRNO, ret_NOERRNO): New. (ret, PSEUDO_END): Moved past END. (PSEUDO): Moved to... * sysdeps/unix/mips/mips32/sysdep.h: New file. * sysdeps/unix/mips/mips64/n32/sysdep.h: Removed #undef PSEUDO. * sysdeps/unix/mips/mips64/n64/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/mips/sysdep.h: Move to... * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h: New file. --- diff --git a/sysdeps/mips/Implies b/sysdeps/mips/Implies index 9f60963329..8c18cb3034 100644 --- a/sysdeps/mips/Implies +++ b/sysdeps/mips/Implies @@ -1,4 +1,3 @@ -wordsize-32 # MIPS uses IEEE 754 floating point. ieee754/flt-32 ieee754/dbl-64 diff --git a/sysdeps/mips/bits/endian.h b/sysdeps/mips/bits/endian.h index 40321a2866..9586104ccd 100644 --- a/sysdeps/mips/bits/endian.h +++ b/sysdeps/mips/bits/endian.h @@ -5,4 +5,9 @@ # error "Never use directly; include instead." #endif -#define __BYTE_ORDER __BIG_ENDIAN +#if __MIPSEB +# define __BYTE_ORDER __BIG_ENDIAN +#endif +#if __MIPSEL +# define __BYTE_ORDER __LITTLE_ENDIAN +#endif diff --git a/sysdeps/mips/mips32/Implies b/sysdeps/mips/mips32/Implies new file mode 100644 index 0000000000..fab98d7312 --- /dev/null +++ b/sysdeps/mips/mips32/Implies @@ -0,0 +1,2 @@ +mips +wordsize-32 diff --git a/sysdeps/mips/mips32/Makefile b/sysdeps/mips/mips32/Makefile new file mode 100644 index 0000000000..dec0b024c3 --- /dev/null +++ b/sysdeps/mips/mips32/Makefile @@ -0,0 +1,3 @@ +ifeq ($(filter -mabi=32,$(CC)),) +CC += -mabi=32 +endif diff --git a/sysdeps/mips/mips64/n32/Makefile b/sysdeps/mips/mips64/n32/Makefile index 26f38570d7..a84d2a51bd 100644 --- a/sysdeps/mips/mips64/n32/Makefile +++ b/sysdeps/mips/mips64/n32/Makefile @@ -1,2 +1,6 @@ # `long double' is a distinct type we support. long-double-fcts = yes + +ifeq ($(filter -mabi=n32,$(CC)),) +CC += -mabi=n32 +endif diff --git a/sysdeps/mips/mips64/n32/el/bits/endian.h b/sysdeps/mips/mips64/n32/el/bits/endian.h deleted file mode 100644 index 2241190a70..0000000000 --- a/sysdeps/mips/mips64/n32/el/bits/endian.h +++ /dev/null @@ -1,8 +0,0 @@ -/* The MIPS architecture has selectable endianness. - This file is for a machine using little-endian mode. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/mips/mips64/n64/Makefile b/sysdeps/mips/mips64/n64/Makefile index 26f38570d7..a823f32b53 100644 --- a/sysdeps/mips/mips64/n64/Makefile +++ b/sysdeps/mips/mips64/n64/Makefile @@ -1,2 +1,6 @@ # `long double' is a distinct type we support. long-double-fcts = yes + +ifeq ($(filter -mabi=64,$(CC)),) +CC += -mabi=64 +endif diff --git a/sysdeps/mips/mips64/n64/el/bits/endian.h b/sysdeps/mips/mips64/n64/el/bits/endian.h deleted file mode 100644 index 2241190a70..0000000000 --- a/sysdeps/mips/mips64/n64/el/bits/endian.h +++ /dev/null @@ -1,8 +0,0 @@ -/* The MIPS architecture has selectable endianness. - This file is for a machine using little-endian mode. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/mips/mipsel/bits/endian.h b/sysdeps/mips/mipsel/bits/endian.h deleted file mode 100644 index 2241190a70..0000000000 --- a/sysdeps/mips/mipsel/bits/endian.h +++ /dev/null @@ -1,8 +0,0 @@ -/* The MIPS architecture has selectable endianness. - This file is for a machine using little-endian mode. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __LITTLE_ENDIAN diff --git a/sysdeps/unix/mips/mips32/sysdep.h b/sysdeps/unix/mips/mips32/sysdep.h new file mode 100644 index 0000000000..0b5d1186bb --- /dev/null +++ b/sysdeps/unix/mips/mips32/sysdep.h @@ -0,0 +1,52 @@ +/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Brendan Kehoe (brendan@zen.org). + + 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 + +/* Note that while it's better structurally, going back to call __syscall_error + can make things confusing if you're debugging---it looks like it's jumping + backwards into the previous fn. */ +#ifdef __PIC__ +#define PSEUDO(name, syscall_name, args) \ + .align 2; \ + 99: la t9,__syscall_error; \ + jr t9; \ + ENTRY(name) \ + .set noreorder; \ + .cpload t9; \ + li v0, SYS_ify(syscall_name); \ + syscall; \ + .set reorder; \ + bne a3, zero, 99b; \ +L(syse1): +#else +#define PSEUDO(name, syscall_name, args) \ + .set noreorder; \ + .align 2; \ + 99: j __syscall_error; \ + nop; \ + ENTRY(name) \ + .set noreorder; \ + li v0, SYS_ify(syscall_name); \ + syscall; \ + .set reorder; \ + bne a3, zero, 99b; \ +L(syse1): +#endif diff --git a/sysdeps/unix/mips/mips64/n32/sysdep.h b/sysdeps/unix/mips/mips64/n32/sysdep.h index 3564c6b61e..ec93fadc04 100644 --- a/sysdeps/unix/mips/mips64/n32/sysdep.h +++ b/sysdeps/unix/mips/mips64/n32/sysdep.h @@ -22,7 +22,6 @@ #ifdef __ASSEMBLER__ -# undef PSEUDO /* Note that while it's better structurally, going back to call __syscall_error can make things confusing if you're debugging---it looks like it's jumping backwards into the previous fn. */ diff --git a/sysdeps/unix/mips/mips64/n64/sysdep.h b/sysdeps/unix/mips/mips64/n64/sysdep.h index 982d905a43..502b66797b 100644 --- a/sysdeps/unix/mips/mips64/n64/sysdep.h +++ b/sysdeps/unix/mips/mips64/n64/sysdep.h @@ -22,7 +22,6 @@ #ifdef __ASSEMBLER__ -# undef PSEUDO /* Note that while it's better structurally, going back to call __syscall_error can make things confusing if you're debugging---it looks like it's jumping backwards into the previous fn. */ diff --git a/sysdeps/unix/mips/sysdep.h b/sysdeps/unix/mips/sysdep.h index 8ba84e2083..13a3752dc8 100644 --- a/sysdeps/unix/mips/sysdep.h +++ b/sysdeps/unix/mips/sysdep.h @@ -30,47 +30,27 @@ .ent name,0; \ name##: -/* Note that while it's better structurally, going back to call __syscall_error - can make things confusing if you're debugging---it looks like it's jumping - backwards into the previous fn. */ -#ifdef __PIC__ -#define PSEUDO(name, syscall_name, args) \ - .align 2; \ - 99: la t9,__syscall_error; \ - jr t9; \ - ENTRY(name) \ - .set noreorder; \ - .cpload t9; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#else -#define PSEUDO(name, syscall_name, args) \ - .set noreorder; \ - .align 2; \ - 99: j __syscall_error; \ - nop; \ - ENTRY(name) \ - .set noreorder; \ - li v0, SYS_ify(syscall_name); \ - syscall; \ - .set reorder; \ - bne a3, zero, 99b; \ -L(syse1): -#endif - -#undef PSEUDO_END -#define PSEUDO_END(sym) .end sym - -#define ret j ra ; nop - #undef END #define END(function) \ .end function; \ .size function,.-function +#define ret j ra ; nop + +#define PSEUDO_END(sym) .end sym; .size sym,.-sym + +#define PSEUDO_NOERRNO(name, syscall_name, args) \ + .align 2; \ + ENTRY(name) \ + .set noreorder; \ + li v0, SYS_ify(syscall_name); \ + syscall + +#undef PSEUDO_END_NOERRNO +#define PSEUDO_END_NOERRNO(sym) .end sym; .size sym,.-sym + +#define ret_NOERRNO ret + #define r0 v0 #define r1 v1 /* The mips move insn is d,s. */ diff --git a/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h new file mode 100644 index 0000000000..b0316b657b --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h @@ -0,0 +1,36 @@ +/* Copyright (C) 2000, 2002, 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 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 _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H +#define _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H 1 + +/* There is some commonality. */ +#include + +/* 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 +#ifdef __STDC__ +# define SYS_ify(syscall_name) __NR_O32_##syscall_name +#else +# define SYS_ify(syscall_name) __NR_O32_/**/syscall_name +#endif + +#endif /* linux/mips/mips32/kern64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/mips/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h similarity index 97% rename from sysdeps/unix/sysv/linux/mips/sysdep.h rename to sysdeps/unix/sysv/linux/mips/mips32/sysdep.h index 710479ae18..1f56671ba0 100644 --- a/sysdeps/unix/sysv/linux/mips/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 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 @@ -16,11 +16,11 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _LINUX_MIPS_SYSDEP_H -#define _LINUX_MIPS_SYSDEP_H 1 +#ifndef _LINUX_MIPS_MIPS32_SYSDEP_H +#define _LINUX_MIPS_MIPS32_SYSDEP_H 1 /* There is some commonality. */ -#include +#include /* For Linux we can use the system call table in the header file /usr/include/asm/unistd.h @@ -279,4 +279,4 @@ #endif /* __ASSEMBLER__ */ -#endif /* linux/mips/sysdep.h */ +#endif /* linux/mips/mips32/sysdep.h */