Include <sgidefs.h>. Use _ABIO32, _ABIN32 and _ABI64 for ABI selection

throughout.
This commit is contained in:
Andreas Jaeger 2004-11-24 04:36:11 +00:00
parent 56eb7d3add
commit b8ddf7a11f
18 changed files with 69 additions and 51 deletions

View File

@ -32,6 +32,7 @@
#error ENTRY_POINT needs to be defined for MIPS.
#endif
#include <sgidefs.h>
#include <sys/asm.h>
/* The offset of gp from GOT might be system-dependent. It's set by
@ -74,10 +75,9 @@ do { if ((l)->l_info[DT_MIPS (RLD_MAP)]) \
static inline int __attribute_used__
elf_machine_matches_host (const ElfW(Ehdr) *ehdr)
{
#if _MIPS_SIM == _MIPS_SIM_ABI32 || _MIPS_SIM == _MIPS_SIM_NABI32
#if _MIPS_SIM == _ABIO32 || _MIPS_SIM == _ABIN32
/* Don't link o32 and n32 together. */
if (((ehdr->e_flags & EF_MIPS_ABI2) != 0)
!= (_MIPS_SIM != _MIPS_SIM_ABI32))
if (((ehdr->e_flags & EF_MIPS_ABI2) != 0) != (_MIPS_SIM == _ABIN32))
return 0;
#endif
@ -130,7 +130,7 @@ elf_machine_load_address (void)
}
/* The MSB of got[1] of a gnu object is set to identify gnu objects. */
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABI64
# define ELF_MIPS_GNU_GOT1_MASK 0x8000000000000000L
#else
# define ELF_MIPS_GNU_GOT1_MASK 0x80000000L
@ -257,7 +257,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
return NULL;
}
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
#define ELF_DL_FRAME_SIZE 40
#define ELF_DL_SAVE_ARG_REGS "\
@ -278,7 +278,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
#define IFABIO32(X) X
#else /* _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64 */
#else /* _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64 */
#define ELF_DL_FRAME_SIZE 80
@ -550,7 +550,7 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
switch (r_type)
{
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABI64
case (R_MIPS_64 << 8) | R_MIPS_REL32:
#else
case R_MIPS_REL32:
@ -615,7 +615,7 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
break;
case R_MIPS_NONE: /* Alright, Wilbur. */
break;
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABI64
case R_MIPS_64:
/* For full compliance with the ELF64 ABI, one must precede the
_REL32/_64 pair of relocations with a _64 relocation, such

View File

@ -1,5 +1,5 @@
/* Startup code compliant to the ELF Mips ABI.
Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003
Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@ -37,6 +37,7 @@
#define __ASSEMBLY__ 1
#include <entry.h>
#include <sgidefs.h>
#include <sys/asm.h>
#ifndef ENTRY_POINT
@ -93,12 +94,12 @@ ENTRY_POINT:
on o32 and quad words (16 bytes) on n32 and n64. */
and $29, -2 * SZREG
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
PTR_SUBIU $29, 32
#endif
PTR_LA $7, __libc_csu_init /* init */
PTR_LA $8, __libc_csu_fini
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
PTR_S $8, 16($29) /* fini */
PTR_S $2, 20($29) /* rtld_fini */
PTR_S $29, 24($29) /* stack_end */

View File

@ -19,6 +19,7 @@
02111-1307 USA. */
#include <setjmp.h>
#include <sgidefs.h>
#include <stdlib.h>
#undef __longjmp
@ -39,7 +40,7 @@ __longjmp (env, val_arg)
register int val asm ("a1");
/* Pull back the floating point callee-saved registers. */
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABI64
asm volatile ("l.d $f24, %0" : : "m" (env[0].__fpregs[0]));
asm volatile ("l.d $f25, %0" : : "m" (env[0].__fpregs[1]));
asm volatile ("l.d $f26, %0" : : "m" (env[0].__fpregs[2]));

View File

@ -1,5 +1,6 @@
/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. MIPS64 version.
Copyright (C) 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 2000, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -21,6 +22,7 @@
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 <sgidefs.h>
#include <sysdep.h>
#include <sys/asm.h>
@ -33,7 +35,7 @@ ENTRY (_setjmp)
#endif
SETUP_GP64 (v0, C_SYMBOL_NAME (_setjmp))
PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
nop
#endif
RESTORE_GP64

View File

@ -1,5 +1,5 @@
/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. MIPS64 version.
Copyright (C) 1996, 1997, 2002, 2003 Free Software Foundation, Inc.
Copyright (C) 1996, 1997, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -21,6 +21,7 @@
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 <sgidefs.h>
#include <sysdep.h>
#include <sys/asm.h>
@ -33,7 +34,7 @@ ENTRY (setjmp)
#endif
SETUP_GP64 (v0, C_SYMBOL_NAME (setjmp))
PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
nop
#endif
RESTORE_GP64

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1996, 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997, 2000, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -16,6 +17,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sgidefs.h>
#include <sysdep.h>
#include <sys/asm.h>
@ -33,11 +35,11 @@ ENTRY (__sigsetjmp)
move a2, sp
move a3, fp
PTR_LA t9, __sigsetjmp_aux
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
nop
#endif
RESTORE_GP64
#if _MIPS_SIM != _MIPS_SIM_ABI32
#if _MIPS_SIM != _ABIO32
move a4, gp
#endif
jr t9

View File

@ -18,6 +18,7 @@
02111-1307 USA. */
#include <setjmp.h>
#include <sgidefs.h>
/* This function is only called via the assembly language routine
__sigsetjmp, which arranges to pass in the stack pointer and the frame
@ -29,7 +30,7 @@ __sigsetjmp_aux (jmp_buf env, int savemask, long long sp, long long fp,
long long gp)
{
/* Store the floating point callee-saved registers... */
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABI64
asm volatile ("s.d $f24, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[0]));
asm volatile ("s.d $f25, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[1]));
asm volatile ("s.d $f26, %0" : : "m" (env[0].__jmpbuf[0].__fpregs[2]));

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997, 1998, 2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 1997, 1998, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ralf Baechle <ralf@gnu.org>.
@ -20,6 +20,8 @@
#ifndef _SYS_REGDEF_H
#define _SYS_REGDEF_H
#include <sgidefs.h>
/*
* Symbolic register names for 32 bit ABI
*/
@ -31,7 +33,7 @@
#define a1 $5
#define a2 $6
#define a3 $7
#if _MIPS_SIM != _MIPS_SIM_ABI32
#if _MIPS_SIM != _ABIO32
#define a4 $8
#define a5 $9
#define a6 $10
@ -44,7 +46,7 @@
#define ta1 a5
#define ta2 a6
#define ta3 a7
#else /* if _MIPS_SIM == _MIPS_SIM_ABI32 */
#else /* if _MIPS_SIM == _ABIO32 */
#define t0 $8 /* caller saved */
#define t1 $9
#define t2 $10
@ -57,7 +59,7 @@
#define ta1 t5
#define ta2 t6
#define ta3 t7
#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
#endif /* _MIPS_SIM == _ABIO32 */
#define s0 $16 /* callee saved */
#define s1 $17
#define s2 $18

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -22,10 +22,11 @@
#define _SYS_UCONTEXT_H 1
#include <features.h>
#include <sgidefs.h>
#include <signal.h>
/* Type for general register. */
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
typedef __uint32_t greg_t;
#else
typedef __uint64_t greg_t;
@ -119,7 +120,7 @@ typedef struct fpregset
{
union
{
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
double fp_dregs[16];
float fp_fregs[32];
unsigned int fp_regs[32];
@ -143,7 +144,7 @@ typedef struct
/* Userlevel context. */
typedef struct ucontext
{
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
unsigned long int uc_flags;
#else
__uint64_t uc_flags;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Brendan Kehoe (brendan@zen.org).
@ -18,6 +18,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <sgidefs.h>
#include <sysdeps/unix/sysdep.h>
#ifdef __ASSEMBLER__
@ -69,7 +70,7 @@
/* The mips move insn is d,s. */
#define MOVE(x,y) move y , x
#if _MIPS_SIM == _MIPS_SIM_ABI32 || _MIPS_SIM == _MIPS_SIM_ABIO64
#if _MIPS_SIM == _ABIO32
# define L(label) $L ## label
#else
# define L(label) .L ## label

View File

@ -20,6 +20,7 @@
#include <assert.h>
#include <errno.h>
#include <sgidefs.h>
#include <unistd.h>
#include <endian.h>
@ -55,14 +56,14 @@ __libc_pread (fd, buf, count, offset)
{
ssize_t result;
#if _MIPS_SIM != _MIPS_SIM_ABI64
#if _MIPS_SIM != _ABI64
assert (sizeof (offset) == 4);
#endif
if (SINGLE_THREAD_P)
{
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
#else
@ -80,7 +81,7 @@ __libc_pread (fd, buf, count, offset)
int oldtype = LIBC_CANCEL_ASYNC ();
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count, offset);
#else
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,

View File

@ -19,6 +19,7 @@
02111-1307 USA. */
#include <errno.h>
#include <sgidefs.h>
#include <unistd.h>
#include <endian.h>
@ -58,7 +59,7 @@ __libc_pread64 (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count,
offset);
#else
@ -77,7 +78,7 @@ __libc_pread64 (fd, buf, count, offset)
int oldtype = LIBC_CANCEL_ASYNC ();
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pread, 4, fd, CHECK_N (buf, count), count, offset);
#else
result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count, 0,

View File

@ -18,6 +18,7 @@
02111-1307 USA. */
#include <errno.h>
#include <sgidefs.h>
#include <sys/types.h>
#include <sys/ptrace.h>
#include <sys/user.h>
@ -28,7 +29,7 @@
#include <bp-checks.h>
#include <sgidefs.h>
#if _MIPS_SIM == _MIPS_SIM_NABI32
#if _MIPS_SIM == _ABIN32
__extension__ typedef long long int reg_type;
#else
typedef long int reg_type;

View File

@ -20,6 +20,7 @@
#include <assert.h>
#include <errno.h>
#include <sgidefs.h>
#include <unistd.h>
#include <endian.h>
@ -55,14 +56,14 @@ __libc_pwrite (fd, buf, count, offset)
{
ssize_t result;
#if _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM != _ABI64
assert (sizeof (offset) == 4);
#endif
if (SINGLE_THREAD_P)
{
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
#else
@ -80,7 +81,7 @@ __libc_pwrite (fd, buf, count, offset)
int oldtype = LIBC_CANCEL_ASYNC ();
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count, offset);
#else
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,

View File

@ -19,6 +19,7 @@
02111-1307 USA. */
#include <errno.h>
#include <sgidefs.h>
#include <unistd.h>
#include <endian.h>
@ -54,7 +55,7 @@ __libc_pwrite64 (fd, buf, count, offset)
if (SINGLE_THREAD_P)
{
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count,
offset);
#else
@ -74,7 +75,7 @@ __libc_pwrite64 (fd, buf, count, offset)
int oldtype = LIBC_CANCEL_ASYNC ();
/* First try the syscall. */
#if _MIPS_SIM == _MIPS_SIM_NABI32 || _MIPS_SIM == _MIPS_SIM_ABI64
#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
result = INLINE_SYSCALL (pwrite, 4, fd, CHECK_N (buf, count), count, offset);
#else
result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count, 0,

View File

@ -18,6 +18,7 @@
02111-1307 USA. */
#include <errno.h>
#include <sgidefs.h>
#include <signal.h>
#include <string.h>
@ -40,7 +41,7 @@ int __libc_missing_rt_sigs;
#endif
#if _MIPS_SIM != _MIPS_SIM_ABI32
#if _MIPS_SIM != _ABIO32
# ifdef __NR_rt_sigreturn
static void restore_rt (void) asm ("__restore_rt");
@ -82,7 +83,7 @@ __libc_sigaction (sig, act, oact)
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kernel_sigset_t));
kact.sa_flags = act->sa_flags;
# ifdef HAVE_SA_RESTORER
# if _MIPS_SIM == _MIPS_SIM_ABI32
# if _MIPS_SIM == _ABIO32
kact.sa_restorer = act->sa_restorer;
# else
kact.sa_restorer = &restore_rt;
@ -140,7 +141,7 @@ __libc_sigaction (sig, act, oact)
oact->sa_mask.__val[0] = k_osigact.sa_mask;
oact->sa_flags = k_osigact.sa_flags;
# ifdef HAVE_SA_RESTORER
# if _MIPS_SIM == _MIPS_SIM_ABI32
# if _MIPS_SIM == _ABIO32
oact->sa_restorer = k_osigact.sa_restorer;
# else
oact->sa_restorer = &restore;
@ -177,7 +178,7 @@ asm \
);
/* The return code for realtime-signals. */
#if _MIPS_SIM != _MIPS_SIM_ABI32
#if _MIPS_SIM != _ABIO32
# ifdef __NR_rt_sigreturn
RESTORE (restore_rt, __NR_rt_sigreturn)
# endif

View File

@ -25,6 +25,7 @@
used on Linux. */
#include <features.h>
#include <sgidefs.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/user.h>
@ -34,7 +35,7 @@
#define ELF_NGREG 45
#define ELF_NFPREG 33
#if _MIPS_SIM == _MIPS_SIM_NABI32
#if _MIPS_SIM == _ABIN32
__extension__ typedef unsigned long long elf_greg_t;
#else
typedef unsigned long elf_greg_t;
@ -65,7 +66,7 @@ struct elf_prstatus
{
struct elf_siginfo pr_info; /* Info associated with signal. */
short int pr_cursig; /* Current signal. */
#if _MIPS_SIM == _MIPS_SIM_NABI32
#if _MIPS_SIM == _ABIN32
__extension__ unsigned long long int pr_sigpend;
__extension__ unsigned long long int pr_sighold;
#else
@ -93,7 +94,7 @@ struct elf_prpsinfo
char pr_sname; /* Char for pr_state. */
char pr_zomb; /* Zombie. */
char pr_nice; /* Nice val. */
#if _MIPS_SIM == _MIPS_SIM_NABI32
#if _MIPS_SIM == _ABIN32
__extension__ unsigned long long int pr_flag;
#else
unsigned long int pr_flag; /* Flags. */

View File

@ -22,14 +22,13 @@
#define _SYS_UCONTEXT_H 1
#include <features.h>
#include <sgidefs.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
#include <bits/sigcontext.h>
#include <sgidefs.h>
/* Type for general register. Even in o32 we assume 64-bit registers,
like the kernel. */
__extension__ typedef unsigned long long int greg_t;
@ -54,7 +53,7 @@ typedef struct fpregset {
/* Context to describe whole processor state. */
#if _MIPS_SIM == _MIPS_SIM_ABI32
#if _MIPS_SIM == _ABIO32
/* Earlier versions of glibc for mips had an entirely different
definition of mcontext_t, that didn't even resemble the
corresponding kernel data structure. Since all legitimate uses of