mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
* sysdeps/mips/mips64/Implies: Move wordsize-64 to... * sysdeps/mips/mips64/n64/Implies: New file. * sysdeps/mips/mips64/n64/Makefile: New file. * sysdeps/mips/mips64/n64/el/bits/endian.h: New file. * sysdeps/mips/mips64/n32/Implies: New file. * sysdeps/mips/mips64/n32/Makefile: New file. * sysdeps/mips/mips64/n32/el/bits/endian.h: New file. * sysdeps/unix/mips/mips64/n32/sysdep.h: New file. * sysdeps/unix/mips/mips64/n64/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/llseek.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/recv.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/send.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/syscall.S: New file. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: New file. * sysdeps/unix/sysv/linux/mips/mips64/umount.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S: New file.
* sysdeps/mips/mips64/Implies: Move wordsize-64 to... * sysdeps/mips/mips64/n64/Implies: New file. * sysdeps/mips/mips64/n64/Makefile: New file. * sysdeps/mips/mips64/n64/el/bits/endian.h: New file. * sysdeps/mips/mips64/n32/Implies: New file. * sysdeps/mips/mips64/n32/Makefile: New file. * sysdeps/mips/mips64/n32/el/bits/endian.h: New file. * sysdeps/unix/mips/mips64/n32/sysdep.h: New file. * sysdeps/unix/mips/mips64/n64/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h: New file. * sysdeps/unix/sysv/linux/mips/mips64/llseek.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/recv.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/send.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/syscall.S: New file. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: New file. * sysdeps/unix/sysv/linux/mips/mips64/umount.c: New file. * sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S: New file.
This commit is contained in:
parent
fc32835abb
commit
5a0e429dd8
21
ChangeLog
21
ChangeLog
@ -1,5 +1,26 @@
|
||||
2003-03-17 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* sysdeps/mips/mips64/Implies: Move wordsize-64 to...
|
||||
* sysdeps/mips/mips64/n64/Implies: New file.
|
||||
* sysdeps/mips/mips64/n64/Makefile: New file.
|
||||
* sysdeps/mips/mips64/n64/el/bits/endian.h: New file.
|
||||
* sysdeps/mips/mips64/n32/Implies: New file.
|
||||
* sysdeps/mips/mips64/n32/Makefile: New file.
|
||||
* sysdeps/mips/mips64/n32/el/bits/endian.h: New file.
|
||||
* sysdeps/unix/mips/mips64/n32/sysdep.h: New file.
|
||||
* sysdeps/unix/mips/mips64/n64/sysdep.h: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/llseek.c: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/recv.c: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/send.c: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/syscall.S: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/umount.c: New file.
|
||||
* sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S: New file.
|
||||
|
||||
* sysdeps/unix/sysv/linux/configure.in (libc_cv_slibdir): Use
|
||||
lib64 for mips64/n64 and lib32 for mips64/n32.
|
||||
(ldd_rewrite_script): Needed for all mips64 configurations.
|
||||
|
@ -1,4 +1,3 @@
|
||||
wordsize-64
|
||||
# MIPS uses IEEE 754 floating point.
|
||||
ieee754/flt-32
|
||||
ieee754/dbl-64
|
||||
|
4
sysdeps/mips/mips64/n32/Implies
Normal file
4
sysdeps/mips/mips64/n32/Implies
Normal file
@ -0,0 +1,4 @@
|
||||
mips/mips64
|
||||
mips
|
||||
wordsize-32
|
||||
ieee754/ldbl-128
|
2
sysdeps/mips/mips64/n32/Makefile
Normal file
2
sysdeps/mips/mips64/n32/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
# `long double' is a distinct type we support.
|
||||
long-double-fcts = yes
|
8
sysdeps/mips/mips64/n32/el/bits/endian.h
Normal file
8
sysdeps/mips/mips64/n32/el/bits/endian.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* The MIPS architecture has selectable endianness.
|
||||
This file is for a machine using little-endian mode. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
|
||||
#endif
|
||||
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
4
sysdeps/mips/mips64/n64/Implies
Normal file
4
sysdeps/mips/mips64/n64/Implies
Normal file
@ -0,0 +1,4 @@
|
||||
mips/mips64
|
||||
mips
|
||||
wordsize-64
|
||||
ieee754/ldbl-128
|
2
sysdeps/mips/mips64/n64/Makefile
Normal file
2
sysdeps/mips/mips64/n64/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
# `long double' is a distinct type we support.
|
||||
long-double-fcts = yes
|
8
sysdeps/mips/mips64/n64/el/bits/endian.h
Normal file
8
sysdeps/mips/mips64/n64/el/bits/endian.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* The MIPS architecture has selectable endianness.
|
||||
This file is for a machine using little-endian mode. */
|
||||
|
||||
#ifndef _ENDIAN_H
|
||||
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
|
||||
#endif
|
||||
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
58
sysdeps/unix/mips/mips64/n32/sysdep.h
Normal file
58
sysdeps/unix/mips/mips64/n32/sysdep.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Alexandre Oliva <aoliva@redhat.com>.
|
||||
|
||||
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 <sysdeps/unix/mips/sysdep.h>
|
||||
|
||||
#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. */
|
||||
#ifdef __PIC__
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.align 2; \
|
||||
99:; \
|
||||
.set noat; \
|
||||
.cpsetup t9, $1, name; \
|
||||
.set at; \
|
||||
la t9,__syscall_error; \
|
||||
.cpreturn; \
|
||||
jr t9; \
|
||||
ENTRY(name) \
|
||||
li v0, SYS_ify(syscall_name); \
|
||||
syscall; \
|
||||
bne a3, zero, 99b; \
|
||||
L(syse1):
|
||||
#else
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.set noreorder; \
|
||||
.align 2; \
|
||||
99: j __syscall_error; \
|
||||
ENTRY(name) \
|
||||
.set noreorder; \
|
||||
li v0, SYS_ify(syscall_name); \
|
||||
syscall; \
|
||||
.set reorder; \
|
||||
bne a3, zero, 99b; \
|
||||
L(syse1):
|
||||
#endif
|
||||
|
||||
#endif
|
58
sysdeps/unix/mips/mips64/n64/sysdep.h
Normal file
58
sysdeps/unix/mips/mips64/n64/sysdep.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* Copyright (C) 1992, 1995, 1997, 1999, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Alexandre Oliva <aoliva@redhat.com>.
|
||||
|
||||
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 <sysdeps/unix/mips/sysdep.h>
|
||||
|
||||
#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. */
|
||||
#ifdef __PIC__
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.align 2; \
|
||||
99:; \
|
||||
.set noat; \
|
||||
.cpsetup t9, $1, name; \
|
||||
.set at; \
|
||||
dla t9,__syscall_error; \
|
||||
.cpreturn; \
|
||||
jr t9; \
|
||||
ENTRY(name) \
|
||||
li v0, SYS_ify(syscall_name); \
|
||||
syscall; \
|
||||
bne a3, zero, 99b; \
|
||||
L(syse1):
|
||||
#else
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.set noreorder; \
|
||||
.align 2; \
|
||||
99: j __syscall_error; \
|
||||
ENTRY(name) \
|
||||
.set noreorder; \
|
||||
li v0, SYS_ify(syscall_name); \
|
||||
syscall; \
|
||||
.set reorder; \
|
||||
bne a3, zero, 99b; \
|
||||
L(syse1):
|
||||
#endif
|
||||
|
||||
#endif
|
26
sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h
Normal file
26
sysdeps/unix/sysv/linux/mips/mips64/ldconfig.h
Normal file
@ -0,0 +1,26 @@
|
||||
/* Copyright (C) 2001, 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. */
|
||||
|
||||
#include <sysdeps/generic/ldconfig.h>
|
||||
|
||||
#define SYSDEP_KNOWN_INTERPRETER_NAMES \
|
||||
{ "/lib32/ld.so.1", FLAG_ELF_LIBC6 }, \
|
||||
{ "/lib64/ld.so.1", FLAG_ELF_LIBC6 },
|
||||
#define SYSDEP_KNOWN_LIBRARY_NAMES \
|
||||
{ "libc.so.6", FLAG_ELF_LIBC6 }, \
|
||||
{ "libm.so.6", FLAG_ELF_LIBC6 },
|
1
sysdeps/unix/sysv/linux/mips/mips64/llseek.c
Normal file
1
sysdeps/unix/sysv/linux/mips/mips64/llseek.c
Normal file
@ -0,0 +1 @@
|
||||
/* lseek() is 64-bit capable already. */
|
263
sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
Normal file
263
sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
Normal file
@ -0,0 +1,263 @@
|
||||
/* 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_SYSDEP_H
|
||||
#define _LINUX_MIPS_SYSDEP_H 1
|
||||
|
||||
/* There is some commonality. */
|
||||
#include <sysdeps/unix/mips/mips64/n32/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
|
||||
#ifdef __STDC__
|
||||
# define SYS_ify(syscall_name) __NR_N32_##syscall_name
|
||||
#else
|
||||
# define SYS_ify(syscall_name) __NR_N32_/**/syscall_name
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#if 0 /* untested */
|
||||
/* Define a macro which expands into the inline wrapper code for a system
|
||||
call. */
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
({ INTERNAL_SYSCALL_DECL(err); \
|
||||
long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
|
||||
if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
|
||||
{ \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
|
||||
result_var = -1L; \
|
||||
} \
|
||||
result_var; })
|
||||
|
||||
#undef INTERNAL_SYSCALL_DECL
|
||||
#define INTERNAL_SYSCALL_DECL(err) long err
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERROR_P
|
||||
#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERRNO
|
||||
#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
|
||||
|
||||
#undef INTERNAL_SYSCALL
|
||||
#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
|
||||
|
||||
#define internal_syscall0(name, err, dummy...) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %2\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set reorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall1(name, err, arg1) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %3\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set reorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall2(name, err, arg1, arg2) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %4\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall3(name, err, arg1, arg2, arg3) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a2 asm("$6") = (long long) arg3; \
|
||||
register long long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a2 asm("$6") = (long long) arg3; \
|
||||
register long long __a3 asm("$7") = (long long) arg4; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a2 asm("$6") = (long long) arg3; \
|
||||
register long long __a3 asm("$7") = (long long) arg4; \
|
||||
register long long __a4 asm("$8") = (long long) arg5; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a4) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a2 asm("$6") = (long long) arg3; \
|
||||
register long long __a3 asm("$7") = (long long) arg4; \
|
||||
register long long __a4 asm("$8") = (long long) arg5; \
|
||||
register long long __a5 asm("$9") = (long long) arg6; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a5), "r" (__a6) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long long __v0 asm("$2"); \
|
||||
register long long __a0 asm("$4") = (long long) arg1; \
|
||||
register long long __a1 asm("$5") = (long long) arg2; \
|
||||
register long long __a2 asm("$6") = (long long) arg3; \
|
||||
register long long __a3 asm("$7") = (long long) arg4; \
|
||||
register long long __a4 asm("$8") = (long long) arg5; \
|
||||
register long long __a5 asm("$9") = (long long) arg6; \
|
||||
register long long __a6 asm("$10") = (long long) arg7; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a5), "r" (__a6), "r" (__a7) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define __SYSCALL_CLOBBERS "$1", "$3", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
|
||||
#endif /* untested */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* linux/mips/sysdep.h */
|
1
sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c
Normal file
1
sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c
Normal file
@ -0,0 +1 @@
|
||||
/* glob64 is in glob.c */
|
43
sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
Normal file
43
sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
Normal file
@ -0,0 +1,43 @@
|
||||
/* Copyright 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. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
#include <sys/asm.h>
|
||||
|
||||
/* Sign-extend the ioctl number, since the kernel wants it as a
|
||||
sign-extended 32-bit value, but our prototype is that of a long. */
|
||||
|
||||
.text
|
||||
ENTRY (__ioctl)
|
||||
li v0, __NR_ioctl
|
||||
dsll a1,a1,32
|
||||
dsra a1,a1,32
|
||||
syscall /* Do the system call. */
|
||||
bne a3, zero, L(error)
|
||||
ret
|
||||
|
||||
L(error):
|
||||
.cpsetup t9, a0, __ioctl
|
||||
PTR_LA t9,__syscall_error
|
||||
.cprestore
|
||||
jr t9
|
||||
|
||||
PSEUDO_END (__ioctl)
|
||||
|
||||
weak_alias (__ioctl, ioctl)
|
263
sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
Normal file
263
sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
Normal file
@ -0,0 +1,263 @@
|
||||
/* 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_SYSDEP_H
|
||||
#define _LINUX_MIPS_SYSDEP_H 1
|
||||
|
||||
/* There is some commonality. */
|
||||
#include <sysdeps/unix/mips/mips64/n64/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
|
||||
#ifdef __STDC__
|
||||
# define SYS_ify(syscall_name) __NR_N64_##syscall_name
|
||||
#else
|
||||
# define SYS_ify(syscall_name) __NR_N64_/**/syscall_name
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#if 0 /* untested */
|
||||
/* Define a macro which expands into the inline wrapper code for a system
|
||||
call. */
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
({ INTERNAL_SYSCALL_DECL(err); \
|
||||
long result_var = INTERNAL_SYSCALL (name, err, nr, args); \
|
||||
if ( INTERNAL_SYSCALL_ERROR_P (result_var, err) ) \
|
||||
{ \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \
|
||||
result_var = -1L; \
|
||||
} \
|
||||
result_var; })
|
||||
|
||||
#undef INTERNAL_SYSCALL_DECL
|
||||
#define INTERNAL_SYSCALL_DECL(err) long err
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERROR_P
|
||||
#define INTERNAL_SYSCALL_ERROR_P(val, err) ((long) (err))
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERRNO
|
||||
#define INTERNAL_SYSCALL_ERRNO(val, err) (val)
|
||||
|
||||
#undef INTERNAL_SYSCALL
|
||||
#define INTERNAL_SYSCALL(name, err, nr, args...) internal_syscall##nr(name, err, args)
|
||||
|
||||
#define internal_syscall0(name, err, dummy...) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %2\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set reorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall1(name, err, arg1) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %3\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set reorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall2(name, err, arg1, arg2) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %4\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall3(name, err, arg1, arg2, arg3) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a2 asm("$6") = (long) arg3; \
|
||||
register long __a3 asm("$7"); \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "=r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a2 asm("$6") = (long) arg3; \
|
||||
register long __a3 asm("$7") = (long) arg4; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a2 asm("$6") = (long) arg3; \
|
||||
register long __a3 asm("$7") = (long) arg4; \
|
||||
register long __a4 asm("$8") = (long) arg5; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a4) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6)\
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a2 asm("$6") = (long) arg3; \
|
||||
register long __a3 asm("$7") = (long) arg4; \
|
||||
register long __a4 asm("$8") = (long) arg5; \
|
||||
register long __a5 asm("$9") = (long) arg6; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a5), "r" (__a6) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define internal_syscall7(name, err, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\
|
||||
({ \
|
||||
long _sys_result; \
|
||||
\
|
||||
{ \
|
||||
register long __v0 asm("$2"); \
|
||||
register long __a0 asm("$4") = (long) arg1; \
|
||||
register long __a1 asm("$5") = (long) arg2; \
|
||||
register long __a2 asm("$6") = (long) arg3; \
|
||||
register long __a3 asm("$7") = (long) arg4; \
|
||||
register long __a4 asm("$8") = (long) arg5; \
|
||||
register long __a5 asm("$9") = (long) arg6; \
|
||||
register long __a6 asm("$10") = (long) arg7; \
|
||||
__asm__ volatile ( \
|
||||
".set\tnoreorder\n\t" \
|
||||
"li\t$2, %5\t\t\t# " #name "\n\t" \
|
||||
"syscall\n\t" \
|
||||
".set\treorder" \
|
||||
: "=r" (__v0), "+r" (__a3) \
|
||||
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (SYS_ify(name)), \
|
||||
"r" (__a5), "r" (__a6), "r" (__a7) \
|
||||
: __SYSCALL_CLOBBERS); \
|
||||
err = __a3; \
|
||||
_sys_result = __v0; \
|
||||
} \
|
||||
_sys_result; \
|
||||
})
|
||||
|
||||
#define __SYSCALL_CLOBBERS "$1", "$3", "$11", "$12", "$13", "$14", "$15", "$24", "$25"
|
||||
#endif /* untested */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* linux/mips/sysdep.h */
|
1
sysdeps/unix/sysv/linux/mips/mips64/recv.c
Normal file
1
sysdeps/unix/sysv/linux/mips/mips64/recv.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/x86_64/recv.c>
|
1
sysdeps/unix/sysv/linux/mips/mips64/send.c
Normal file
1
sysdeps/unix/sysv/linux/mips/mips64/send.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/x86_64/send.c>
|
53
sysdeps/unix/sysv/linux/mips/mips64/syscall.S
Normal file
53
sysdeps/unix/sysv/linux/mips/mips64/syscall.S
Normal file
@ -0,0 +1,53 @@
|
||||
/* Copyright (C) 2001, 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. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
#include <sys/asm.h>
|
||||
|
||||
/* Please consult the file sysdeps/unix/sysv/linux/x86-64/sysdep.h for
|
||||
more information about the value -4095 used below. */
|
||||
|
||||
/* Usage: long syscall (syscall_number, arg1, arg2, arg3, arg4, arg5)
|
||||
We need to do some arg shifting, the syscall_number will be in
|
||||
rax. */
|
||||
|
||||
|
||||
.text
|
||||
ENTRY (syscall)
|
||||
move v0, a0 /* Syscall number -> v0 */
|
||||
move a0, a1 /* shift arg1 - arg7. */
|
||||
move a1, a2
|
||||
move a2, a3
|
||||
move a3, a4
|
||||
move a4, a5
|
||||
move a5, a6
|
||||
move a6, a7
|
||||
|
||||
syscall /* Do the system call. */
|
||||
bne a3, zero, L(error)
|
||||
|
||||
ret
|
||||
|
||||
L(error):
|
||||
.cpsetup t9, a0, syscall
|
||||
PTR_LA t9,__syscall_error
|
||||
.cprestore
|
||||
jr t9
|
||||
|
||||
PSEUDO_END (syscall)
|
20
sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
Normal file
20
sysdeps/unix/sysv/linux/mips/mips64/syscalls.list
Normal file
@ -0,0 +1,20 @@
|
||||
# File name Caller Syscall name Args Strong name Weak names
|
||||
|
||||
lseek - lseek i:iii __libc_lseek __lseek lseek __llseek llseek __libc_lseek64 __lseek64 lseek64
|
||||
|
||||
# proper socket implementations:
|
||||
recvfrom - recvfrom i:ibniBN __libc_recvfrom __recvfrom recvfrom __syscall_recvfrom
|
||||
sendto - sendto i:ibnibn __libc_sendto __sendto sendto __syscall_sendto
|
||||
|
||||
# semaphore and shm system calls
|
||||
msgctl - msgctl i:iip __msgctl msgctl
|
||||
msgget - msgget i:ii __msgget msgget
|
||||
msgrcv - msgrcv i:ibnii __msgrcv msgrcv
|
||||
msgsnd - msgsnd i:ibni __msgsnd msgsnd
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semop - semop i:ipi __semop semop
|
||||
semget - semget i:iii __semget semget
|
||||
semctl - semctl i:iiii __semctl semctl
|
1
sysdeps/unix/sysv/linux/mips/mips64/umount.c
Normal file
1
sysdeps/unix/sysv/linux/mips/mips64/umount.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/hppa/umount.c>
|
Loading…
Reference in New Issue
Block a user