mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-01 10:06:57 +03:00
Update.
2000-06-12 Kazumoto Kojima <kkojima@rr.iij4u.or.jp> Yutaka Niibe <gniibe@chroot.org> * sysdeps/sh/Dist: New file. * sysdeps/sh/Implies: New file. * sysdeps/sh/gmp-mparam.h: New file. * sysdeps/sh/init-first.c: New file. * sysdeps/sh/machine-gmon.h: New file. * sysdeps/sh/memcpy.S: New file. * sysdeps/sh/memprof.h: New file. * sysdeps/sh/memset.S: New file. * sysdeps/sh/sh3/__longjmp.S: New file. * sysdeps/sh/sh3/bits/endian.h: New file. * sysdeps/sh/sh3/bits/huge_val.h: New file. * sysdeps/sh/sh3/bits/setjmp.h: New file. * sysdeps/sh/sh3/bsd-_setjmp.S: New file. * sysdeps/sh/sh3/bsd-setjmp.S: New file. * sysdeps/sh/sh3/dl-machine.h: New file. * sysdeps/sh/sh3/elf/initfini.c: New file. * sysdeps/sh/sh3/elf/start.S: New file. * sysdeps/sh/sh3/setjmp.S: New file. * sysdeps/sh/sh3/sys/ucontext.h: New file. * sysdeps/sh/sh4/__longjmp.S: New file. * sysdeps/sh/sh4/bits/endian.h: New file. * sysdeps/sh/sh4/bits/huge_val.h: New file. * sysdeps/sh/sh4/bits/setjmp.h: New file. * sysdeps/sh/sh4/bsd-_setjmp.S: New file. * sysdeps/sh/sh4/bsd-setjmp.S: New file. * sysdeps/sh/sh4/dl-machine.h: New file. * sysdeps/sh/sh4/elf/initfini.c: New file. * sysdeps/sh/sh4/elf/start.S: New file. * sysdeps/sh/sh4/fpu/bits/fenv.h: New file. * sysdeps/sh/sh4/fpu/bits/huge_val.h: New file. * sysdeps/sh/sh4/fpu/bits/mathdef.h: New file. * sysdeps/sh/sh4/fpu/fclrexcpt.c: New file. * sysdeps/sh/sh4/fpu/fegetenv.c: New file. * sysdeps/sh/sh4/fpu/fegetround.c: New file. * sysdeps/sh/sh4/fpu/feholdexcpt.c: New file. * sysdeps/sh/sh4/fpu/fesetenv.c: New file. * sysdeps/sh/sh4/fpu/fesetround.c: New file. * sysdeps/sh/sh4/fpu/fpu_control.h: New file. * sysdeps/sh/sh4/fpu/fraiseexcpt.c: New file. * sysdeps/sh/sh4/fpu/fsetexcptflg.c: New file. * sysdeps/sh/sh4/fpu/ftestexcept.c: New file. * sysdeps/sh/sh4/fpu/libm-test-ulps: New file. * sysdeps/sh/sh4/setjmp.S: New file. * sysdeps/sh/sh4/sys/ucontext.h: New file. * sysdeps/sh/strlen.S: New file. * sysdeps/sh/sysdep.h: New file. * sysdeps/unix/sh/sysdep.S: New file. * sysdeps/unix/sh/sysdep.h: New file. * sysdeps/unix/sysv/linux/sh/Dist: New file. * sysdeps/unix/sysv/linux/sh/Makefile: New file. * sysdeps/unix/sysv/linux/sh/Versions: New file. * sysdeps/unix/sysv/linux/sh/bits/mman.h: New file. * sysdeps/unix/sysv/linux/sh/bits/resource.h: New file. * sysdeps/unix/sysv/linux/sh/brk.c: New file. * sysdeps/unix/sysv/linux/sh/chown.c: New file. * sysdeps/unix/sysv/linux/sh/clone.S: New file. * sysdeps/unix/sysv/linux/sh/fchown.c: New file. * sysdeps/unix/sysv/linux/sh/fxstat.c: New file. * sysdeps/unix/sysv/linux/sh/getegid.c: New file. * sysdeps/unix/sysv/linux/sh/geteuid.c: New file. * sysdeps/unix/sysv/linux/sh/getgroups.c: New file. * sysdeps/unix/sysv/linux/sh/getresgid.c: New file. * sysdeps/unix/sysv/linux/sh/getresuid.c: New file. * sysdeps/unix/sysv/linux/sh/getrlimit.c: New file. * sysdeps/unix/sysv/linux/sh/getrlimit64.c: New file. * sysdeps/unix/sysv/linux/sh/getuid.c: New file. * sysdeps/unix/sysv/linux/sh/lchown.c: New file. * sysdeps/unix/sysv/linux/sh/lxstat.c: New file. * sysdeps/unix/sysv/linux/sh/msgctl.c: New file. * sysdeps/unix/sysv/linux/sh/oldgetrlimit64.c: New file. * sysdeps/unix/sysv/linux/sh/pipe.S: New file. * sysdeps/unix/sysv/linux/sh/profil-counter.h: New file. * sysdeps/unix/sysv/linux/sh/semctl.c: New file. * sysdeps/unix/sysv/linux/sh/setegid.c: New file. * sysdeps/unix/sysv/linux/sh/seteuid.c: New file. * sysdeps/unix/sysv/linux/sh/setfsgid.c: New file. * sysdeps/unix/sysv/linux/sh/setfsuid.c: New file. * sysdeps/unix/sysv/linux/sh/setgid.c: New file. * sysdeps/unix/sysv/linux/sh/setgroups.c: New file. * sysdeps/unix/sysv/linux/sh/setregid.c: New file. * sysdeps/unix/sysv/linux/sh/setresgid.c: New file. * sysdeps/unix/sysv/linux/sh/setresuid.c: New file. * sysdeps/unix/sysv/linux/sh/setreuid.c: New file. * sysdeps/unix/sysv/linux/sh/setrlimit.c: New file. * sysdeps/unix/sysv/linux/sh/setuid.c: New file. * sysdeps/unix/sysv/linux/sh/sh3/register-dump.h: New file. * sysdeps/unix/sysv/linux/sh/sh4/register-dump.h: New file. * sysdeps/unix/sysv/linux/sh/shmctl.c: New file. * sysdeps/unix/sysv/linux/sh/sigcontextinfo.h: New file. * sysdeps/unix/sysv/linux/sh/socket.S: New file. * sysdeps/unix/sysv/linux/sh/sys/io.h: New file. * sysdeps/unix/sysv/linux/sh/sys/ucontext.h: New file. * sysdeps/unix/sysv/linux/sh/sys/user.h: New file. * sysdeps/unix/sysv/linux/sh/syscalls.list: New file. * sysdeps/unix/sysv/linux/sh/sysdep.S: New file. * sysdeps/unix/sysv/linux/sh/sysdep.h: New file. * sysdeps/unix/sysv/linux/sh/vfork.S: New file. * sysdeps/unix/sysv/linux/sh/xstat.c: New file.
This commit is contained in:
9
sysdeps/unix/sysv/linux/sh/Dist
Normal file
9
sysdeps/unix/sysv/linux/sh/Dist
Normal file
@ -0,0 +1,9 @@
|
||||
clone.S
|
||||
ioperm.c
|
||||
pipe.S
|
||||
setresuid.c
|
||||
setresgid.c
|
||||
setfsuid.c
|
||||
setfsgid.c
|
||||
sys/io.h
|
||||
sys/user.h
|
12
sysdeps/unix/sysv/linux/sh/Makefile
Normal file
12
sysdeps/unix/sysv/linux/sh/Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
ifeq ($(subdir),io)
|
||||
sysdep_routines += pipe
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_routines += setfsgid setfsuid setresgid setresuid
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),signal)
|
||||
sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \
|
||||
rt_sigqueueinfo rt_sigaction rt_sigpending
|
||||
endif
|
6
sysdeps/unix/sysv/linux/sh/Versions
Normal file
6
sysdeps/unix/sysv/linux/sh/Versions
Normal file
@ -0,0 +1,6 @@
|
||||
libc {
|
||||
GLIBC_2.2 {
|
||||
# New rlimit interface
|
||||
getrlimit; setrlimit; getrlimit64;
|
||||
}
|
||||
}
|
93
sysdeps/unix/sysv/linux/sh/bits/mman.h
Normal file
93
sysdeps/unix/sysv/linux/sh/bits/mman.h
Normal file
@ -0,0 +1,93 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/SH version.
|
||||
Copyright (C) 1997, 1999, 2000 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
|
205
sysdeps/unix/sysv/linux/sh/bits/resource.h
Normal file
205
sysdeps/unix/sysv/linux/sh/bits/resource.h
Normal file
@ -0,0 +1,205 @@
|
||||
/* Bit values & structures for resource limits. Linux version.
|
||||
Copyright (C) 1994, 1996, 1997, 1998, 1999 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
|
||||
|
||||
RLIMIT_NLIMITS = 10,
|
||||
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
|
||||
};
|
50
sysdeps/unix/sysv/linux/sh/brk.c
Normal file
50
sysdeps/unix/sysv/linux/sh/brk.c
Normal file
@ -0,0 +1,50 @@
|
||||
/* brk system call for Linux/SH.
|
||||
Copyright (C) 1999, 2000 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;
|
||||
|
||||
asm ("mov %1, r4\n"
|
||||
"mov %2, r0\n"
|
||||
"trapa #0\n" /* do the system call */
|
||||
"mov r0, %0;" /* keep the return value */
|
||||
: "=r"(newbrk)
|
||||
: "r"(addr), "i" (SYS_ify (brk))
|
||||
: "r0");
|
||||
|
||||
__curbrk = newbrk;
|
||||
|
||||
if (newbrk < addr)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__brk, brk)
|
1
sysdeps/unix/sysv/linux/sh/chown.c
Normal file
1
sysdeps/unix/sysv/linux/sh/chown.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/m68k/chown.c>
|
133
sysdeps/unix/sysv/linux/sh/clone.S
Normal file
133
sysdeps/unix/sysv/linux/sh/clone.S
Normal file
@ -0,0 +1,133 @@
|
||||
/* Copyright (C) 1999, 2000 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. */
|
||||
tst r4, r4
|
||||
bf/s 1f
|
||||
tst r5, r5
|
||||
bf/s 1f
|
||||
mov.l .L1, r1
|
||||
#ifdef SHARED
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l .LG, r12
|
||||
mova .LG, r0
|
||||
add r0, r12
|
||||
mova .L1, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
mov #-EINVAL, r4
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
#else
|
||||
jmp @r1
|
||||
mov #-EINVAL, r4
|
||||
#endif
|
||||
.align 2
|
||||
.L1:
|
||||
.long PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
1:
|
||||
/* insert the args onto the new stack */
|
||||
mov.l r7, @-r5
|
||||
/* save the function pointer as the 0th element */
|
||||
mov.l r4, @-r5
|
||||
|
||||
/* do the system call */
|
||||
mov r6, r4
|
||||
mov #+SYS_ify(clone), r0
|
||||
trapa #0
|
||||
mov r0, r1
|
||||
mov #-12, r2
|
||||
shad r2, r1
|
||||
not r1, r1 // r1=0 means r0 = -1 to -4095
|
||||
tst r1, r1 // i.e. error in linux
|
||||
bf 2f
|
||||
mov.l .L2, r1
|
||||
#ifdef SHARED
|
||||
mov r0, r4
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l .LG, r12
|
||||
mova .LG, r0
|
||||
add r0, r12
|
||||
mova .L2, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
nop
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
#else
|
||||
jmp @r1
|
||||
mov r0, r4
|
||||
#endif
|
||||
.align 2
|
||||
.L2:
|
||||
.long PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
|
||||
2:
|
||||
tst r0, r0
|
||||
bt 3f
|
||||
rts
|
||||
nop
|
||||
3:
|
||||
/* thread starts */
|
||||
mov.l @r15, r1
|
||||
jsr @r1
|
||||
mov.l @(4,r15), r4
|
||||
|
||||
/* we are done, passing the return value through r0 */
|
||||
mov.l .L3, r1
|
||||
#ifdef SHARED
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov r0, r4
|
||||
mova .LG, r0
|
||||
mov.l .LG, r12
|
||||
add r0, r12
|
||||
mova .L3, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
nop
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
#else
|
||||
jmp @r1
|
||||
mov r0, r4
|
||||
#endif
|
||||
.align 2
|
||||
.LG:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
.L3:
|
||||
.long PLTJMP(C_SYMBOL_NAME(_exit))
|
||||
PSEUDO_END (__clone)
|
||||
|
||||
weak_alias (__clone, clone)
|
1
sysdeps/unix/sysv/linux/sh/fchown.c
Normal file
1
sysdeps/unix/sysv/linux/sh/fchown.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fchown.c>
|
1
sysdeps/unix/sysv/linux/sh/fxstat.c
Normal file
1
sysdeps/unix/sysv/linux/sh/fxstat.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fxstat.c>
|
1
sysdeps/unix/sysv/linux/sh/getegid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getegid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getegid.c>
|
1
sysdeps/unix/sysv/linux/sh/geteuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/geteuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/geteuid.c>
|
2
sysdeps/unix/sysv/linux/sh/getgroups.c
Normal file
2
sysdeps/unix/sysv/linux/sh/getgroups.c
Normal file
@ -0,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>
|
1
sysdeps/unix/sysv/linux/sh/getresgid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getresgid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getresgid.c>
|
1
sysdeps/unix/sysv/linux/sh/getresuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getresuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getresuid.c>
|
1
sysdeps/unix/sysv/linux/sh/getrlimit.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getrlimit.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit.c>
|
1
sysdeps/unix/sysv/linux/sh/getrlimit64.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getrlimit64.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
|
1
sysdeps/unix/sysv/linux/sh/getuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/getuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getuid.c>
|
1
sysdeps/unix/sysv/linux/sh/lchown.c
Normal file
1
sysdeps/unix/sysv/linux/sh/lchown.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/lchown.c>
|
2
sysdeps/unix/sysv/linux/sh/lxstat.c
Normal file
2
sysdeps/unix/sysv/linux/sh/lxstat.c
Normal file
@ -0,0 +1,2 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/lxstat.c>
|
||||
|
1
sysdeps/unix/sysv/linux/sh/msgctl.c
Normal file
1
sysdeps/unix/sysv/linux/sh/msgctl.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/msgctl.c>
|
1
sysdeps/unix/sysv/linux/sh/oldgetrlimit64.c
Normal file
1
sysdeps/unix/sysv/linux/sh/oldgetrlimit64.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
|
63
sysdeps/unix/sysv/linux/sh/pipe.S
Normal file
63
sysdeps/unix/sysv/linux/sh/pipe.S
Normal file
@ -0,0 +1,63 @@
|
||||
/* Copyright (C) 1999, 2000 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)
|
||||
mov #+__NR_pipe, r0
|
||||
trapa #0
|
||||
mov r0, r3
|
||||
mov #-12, r2
|
||||
shad r2, r3
|
||||
not r3, r3 // r1=0 means r0 = -1 to -4095
|
||||
tst r3, r3 // i.e. error in linux
|
||||
bf 1f
|
||||
mov.l .L2, r1
|
||||
#ifdef SHARED
|
||||
mov r0, r4
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l 0f, r12
|
||||
mova 0f, r0
|
||||
add r0, r12
|
||||
mova .L2, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
nop
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
.align 2
|
||||
0:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#else
|
||||
jmp @r1
|
||||
mov r0, r4
|
||||
#endif
|
||||
1:
|
||||
mov.l r0, @r4
|
||||
mov.l r1, @(4, r4)
|
||||
rts
|
||||
mov #0, r0
|
||||
.align 2
|
||||
.L2:
|
||||
.long PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
PSEUDO_END (__libc_pipe)
|
||||
|
||||
weak_alias (__libc_pipe, __pipe)
|
||||
weak_alias (__libc_pipe, pipe)
|
28
sysdeps/unix/sysv/linux/sh/profil-counter.h
Normal file
28
sysdeps/unix/sysv/linux/sh/profil-counter.h
Normal file
@ -0,0 +1,28 @@
|
||||
/* Low-level statistical profiling support function. Linux/SH version.
|
||||
Copyright (C) 1996, 1997, 1998, 2000 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>
|
||||
|
||||
static void
|
||||
profil_counter (int signo, int _a2, int _a3, int _a4, struct sigcontext sc)
|
||||
{
|
||||
void *pc;
|
||||
pc = (void *) sc.sc_pc;
|
||||
profil_count (pc);
|
||||
}
|
1
sysdeps/unix/sysv/linux/sh/semctl.c
Normal file
1
sysdeps/unix/sysv/linux/sh/semctl.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/semctl.c>
|
1
sysdeps/unix/sysv/linux/sh/setegid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setegid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setegid.c>
|
1
sysdeps/unix/sysv/linux/sh/seteuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/seteuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
|
1
sysdeps/unix/sysv/linux/sh/setfsgid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setfsgid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
|
1
sysdeps/unix/sysv/linux/sh/setfsuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setfsuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
|
1
sysdeps/unix/sysv/linux/sh/setgid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setgid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setgid.c>
|
2
sysdeps/unix/sysv/linux/sh/setgroups.c
Normal file
2
sysdeps/unix/sysv/linux/sh/setgroups.c
Normal file
@ -0,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>
|
1
sysdeps/unix/sysv/linux/sh/setregid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setregid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setregid.c>
|
1
sysdeps/unix/sysv/linux/sh/setresgid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setresgid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setresgid.c>
|
1
sysdeps/unix/sysv/linux/sh/setresuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setresuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setresuid.c>
|
1
sysdeps/unix/sysv/linux/sh/setreuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setreuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
|
1
sysdeps/unix/sysv/linux/sh/setrlimit.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setrlimit.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
|
1
sysdeps/unix/sysv/linux/sh/setuid.c
Normal file
1
sysdeps/unix/sysv/linux/sh/setuid.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setuid.c>
|
151
sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
Normal file
151
sysdeps/unix/sysv/linux/sh/sh3/register-dump.h
Normal file
@ -0,0 +1,151 @@
|
||||
/* Dump registers.
|
||||
Copyright (C) 1999, 2000 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 <sys/uio.h>
|
||||
#include <stdio-common/_itoa.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX
|
||||
R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX
|
||||
R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX
|
||||
R12: XXXXXXXX R13: XXXXXXXX R14: XXXXXXXX R15: XXXXXXXX
|
||||
|
||||
MACL: XXXXXXXX MACH: XXXXXXXX
|
||||
|
||||
PC: XXXXXXXX PR: XXXXXXXX GBR: XXXXXXXX SR: XXXXXXXX
|
||||
|
||||
FR0: XXXXXXXX FR1: XXXXXXXX FR2: XXXXXXXX FR3: XXXXXXXX
|
||||
FR4: XXXXXXXX FR5: XXXXXXXX FR6: XXXXXXXX FR7: XXXXXXXX
|
||||
FR8: XXXXXXXX FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX
|
||||
FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX
|
||||
|
||||
XR0: XXXXXXXX XR1: XXXXXXXX XR2: XXXXXXXX XR3: XXXXXXXX
|
||||
XR4: XXXXXXXX XR5: XXXXXXXX XR6: XXXXXXXX XR7: XXXXXXXX
|
||||
XR8: XXXXXXXX XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX
|
||||
XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX
|
||||
|
||||
FPSCR: XXXXXXXX FPUL: XXXXXXXX
|
||||
|
||||
*/
|
||||
|
||||
static void
|
||||
hexvalue (unsigned long int value, char *buf, size_t len)
|
||||
{
|
||||
char *cp = _itoa_word (value, buf + len, 16, 0);
|
||||
while (cp > buf)
|
||||
*--cp = '0';
|
||||
}
|
||||
|
||||
static void
|
||||
register_dump (int fd, struct sigcontext *ctx)
|
||||
{
|
||||
char regs[22][8];
|
||||
struct iovec iov[112];
|
||||
size_t nr = 0;
|
||||
|
||||
#define ADD_STRING(str) \
|
||||
iov[nr].iov_base = (char *) str; \
|
||||
iov[nr].iov_len = strlen (str); \
|
||||
++nr
|
||||
#define ADD_MEM(str, len) \
|
||||
iov[nr].iov_base = str; \
|
||||
iov[nr].iov_len = len; \
|
||||
++nr
|
||||
|
||||
/* Generate strings of register contents. */
|
||||
hexvalue (ctx->sc_regs[0], regs[0], 8);
|
||||
hexvalue (ctx->sc_regs[1], regs[1], 8);
|
||||
hexvalue (ctx->sc_regs[2], regs[2], 8);
|
||||
hexvalue (ctx->sc_regs[3], regs[3], 8);
|
||||
hexvalue (ctx->sc_regs[4], regs[4], 8);
|
||||
hexvalue (ctx->sc_regs[5], regs[5], 8);
|
||||
hexvalue (ctx->sc_regs[6], regs[6], 8);
|
||||
hexvalue (ctx->sc_regs[7], regs[7], 8);
|
||||
hexvalue (ctx->sc_regs[8], regs[8], 8);
|
||||
hexvalue (ctx->sc_regs[9], regs[9], 8);
|
||||
hexvalue (ctx->sc_regs[10], regs[10], 8);
|
||||
hexvalue (ctx->sc_regs[11], regs[11], 8);
|
||||
hexvalue (ctx->sc_regs[12], regs[12], 8);
|
||||
hexvalue (ctx->sc_regs[13], regs[13], 8);
|
||||
hexvalue (ctx->sc_regs[14], regs[14], 8);
|
||||
hexvalue (ctx->sc_regs[15], regs[15], 8);
|
||||
hexvalue (ctx->sc_macl, regs[16], 8);
|
||||
hexvalue (ctx->sc_mach, regs[17], 8);
|
||||
hexvalue (ctx->sc_pc, regs[18], 8);
|
||||
hexvalue (ctx->sc_pr, regs[19], 8);
|
||||
hexvalue (ctx->sc_gbr, regs[20], 8);
|
||||
hexvalue (ctx->sc_sr, regs[21], 8);
|
||||
|
||||
/* Generate the output. */
|
||||
ADD_STRING ("Register dump:\n\n R0: ");
|
||||
ADD_MEM (regs[0], 8);
|
||||
ADD_STRING (" R1: ");
|
||||
ADD_MEM (regs[1], 8);
|
||||
ADD_STRING (" R2: ");
|
||||
ADD_MEM (regs[2], 8);
|
||||
ADD_STRING (" R3: ");
|
||||
ADD_MEM (regs[3], 8);
|
||||
ADD_STRING ("\n R4: ");
|
||||
ADD_MEM (regs[4], 8);
|
||||
ADD_STRING (" R5: ");
|
||||
ADD_MEM (regs[5], 8);
|
||||
ADD_STRING (" R6: ");
|
||||
ADD_MEM (regs[6], 8);
|
||||
ADD_STRING (" R7: ");
|
||||
ADD_MEM (regs[7], 8);
|
||||
ADD_STRING ("\n R8: ");
|
||||
ADD_MEM (regs[8], 8);
|
||||
ADD_STRING (" R9: ");
|
||||
ADD_MEM (regs[9], 8);
|
||||
ADD_STRING (" R10: ");
|
||||
ADD_MEM (regs[10], 8);
|
||||
ADD_STRING (" R11: ");
|
||||
ADD_MEM (regs[11], 8);
|
||||
ADD_STRING ("\n R12: ");
|
||||
ADD_MEM (regs[12], 8);
|
||||
ADD_STRING (" R13: ");
|
||||
ADD_MEM (regs[13], 8);
|
||||
ADD_STRING (" R14: ");
|
||||
ADD_MEM (regs[14], 8);
|
||||
ADD_STRING (" R15: ");
|
||||
ADD_MEM (regs[15], 8);
|
||||
|
||||
ADD_STRING ("\n\nMACL: ");
|
||||
ADD_MEM (regs[16], 8);
|
||||
ADD_STRING (" MACH: ");
|
||||
ADD_MEM (regs[17], 8);
|
||||
|
||||
ADD_STRING ("\n\n PC: ");
|
||||
ADD_MEM (regs[18], 8);
|
||||
ADD_STRING (" PR: ");
|
||||
ADD_MEM (regs[19], 8);
|
||||
ADD_STRING (" GBR: ");
|
||||
ADD_MEM (regs[20], 8);
|
||||
ADD_STRING (" SR: ");
|
||||
ADD_MEM (regs[21], 8);
|
||||
|
||||
ADD_STRING ("\n");
|
||||
|
||||
/* Write the stuff out. */
|
||||
writev (fd, iov, nr);
|
||||
}
|
||||
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, &ctx)
|
262
sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
Normal file
262
sysdeps/unix/sysv/linux/sh/sh4/register-dump.h
Normal file
@ -0,0 +1,262 @@
|
||||
/* Dump registers.
|
||||
Copyright (C) 1999, 2000 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 <sys/uio.h>
|
||||
#include <stdio-common/_itoa.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX
|
||||
R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX
|
||||
R8: XXXXXXXX R9: XXXXXXXX R10: XXXXXXXX R11: XXXXXXXX
|
||||
R12: XXXXXXXX R13: XXXXXXXX R14: XXXXXXXX R15: XXXXXXXX
|
||||
|
||||
MACL: XXXXXXXX MACH: XXXXXXXX
|
||||
|
||||
PC: XXXXXXXX PR: XXXXXXXX GBR: XXXXXXXX SR: XXXXXXXX
|
||||
|
||||
FR0: XXXXXXXX FR1: XXXXXXXX FR2: XXXXXXXX FR3: XXXXXXXX
|
||||
FR4: XXXXXXXX FR5: XXXXXXXX FR6: XXXXXXXX FR7: XXXXXXXX
|
||||
FR8: XXXXXXXX FR9: XXXXXXXX FR10: XXXXXXXX FR11: XXXXXXXX
|
||||
FR12: XXXXXXXX FR13: XXXXXXXX FR14: XXXXXXXX FR15: XXXXXXXX
|
||||
|
||||
XR0: XXXXXXXX XR1: XXXXXXXX XR2: XXXXXXXX XR3: XXXXXXXX
|
||||
XR4: XXXXXXXX XR5: XXXXXXXX XR6: XXXXXXXX XR7: XXXXXXXX
|
||||
XR8: XXXXXXXX XR9: XXXXXXXX XR10: XXXXXXXX XR11: XXXXXXXX
|
||||
XR12: XXXXXXXX XR13: XXXXXXXX XR14: XXXXXXXX XR15: XXXXXXXX
|
||||
|
||||
FPSCR: XXXXXXXX FPUL: XXXXXXXX
|
||||
|
||||
*/
|
||||
|
||||
static void
|
||||
hexvalue (unsigned long int value, char *buf, size_t len)
|
||||
{
|
||||
char *cp = _itoa_word (value, buf + len, 16, 0);
|
||||
while (cp > buf)
|
||||
*--cp = '0';
|
||||
}
|
||||
|
||||
static void
|
||||
register_dump (int fd, struct sigcontext *ctx)
|
||||
{
|
||||
char regs[22][8];
|
||||
char fpregs[34][8];
|
||||
struct iovec iov[112];
|
||||
size_t nr = 0;
|
||||
|
||||
#define ADD_STRING(str) \
|
||||
iov[nr].iov_base = (char *) str; \
|
||||
iov[nr].iov_len = strlen (str); \
|
||||
++nr
|
||||
#define ADD_MEM(str, len) \
|
||||
iov[nr].iov_base = str; \
|
||||
iov[nr].iov_len = len; \
|
||||
++nr
|
||||
|
||||
/* Generate strings of register contents. */
|
||||
hexvalue (ctx->sc_regs[0], regs[0], 8);
|
||||
hexvalue (ctx->sc_regs[1], regs[1], 8);
|
||||
hexvalue (ctx->sc_regs[2], regs[2], 8);
|
||||
hexvalue (ctx->sc_regs[3], regs[3], 8);
|
||||
hexvalue (ctx->sc_regs[4], regs[4], 8);
|
||||
hexvalue (ctx->sc_regs[5], regs[5], 8);
|
||||
hexvalue (ctx->sc_regs[6], regs[6], 8);
|
||||
hexvalue (ctx->sc_regs[7], regs[7], 8);
|
||||
hexvalue (ctx->sc_regs[8], regs[8], 8);
|
||||
hexvalue (ctx->sc_regs[9], regs[9], 8);
|
||||
hexvalue (ctx->sc_regs[10], regs[10], 8);
|
||||
hexvalue (ctx->sc_regs[11], regs[11], 8);
|
||||
hexvalue (ctx->sc_regs[12], regs[12], 8);
|
||||
hexvalue (ctx->sc_regs[13], regs[13], 8);
|
||||
hexvalue (ctx->sc_regs[14], regs[14], 8);
|
||||
hexvalue (ctx->sc_regs[15], regs[15], 8);
|
||||
hexvalue (ctx->sc_macl, regs[16], 8);
|
||||
hexvalue (ctx->sc_mach, regs[17], 8);
|
||||
hexvalue (ctx->sc_pc, regs[18], 8);
|
||||
hexvalue (ctx->sc_pr, regs[19], 8);
|
||||
hexvalue (ctx->sc_gbr, regs[20], 8);
|
||||
hexvalue (ctx->sc_sr, regs[21], 8);
|
||||
|
||||
/* Generate the output. */
|
||||
ADD_STRING ("Register dump:\n\n R0: ");
|
||||
ADD_MEM (regs[0], 8);
|
||||
ADD_STRING (" R1: ");
|
||||
ADD_MEM (regs[1], 8);
|
||||
ADD_STRING (" R2: ");
|
||||
ADD_MEM (regs[2], 8);
|
||||
ADD_STRING (" R3: ");
|
||||
ADD_MEM (regs[3], 8);
|
||||
ADD_STRING ("\n R4: ");
|
||||
ADD_MEM (regs[4], 8);
|
||||
ADD_STRING (" R5: ");
|
||||
ADD_MEM (regs[5], 8);
|
||||
ADD_STRING (" R6: ");
|
||||
ADD_MEM (regs[6], 8);
|
||||
ADD_STRING (" R7: ");
|
||||
ADD_MEM (regs[7], 8);
|
||||
ADD_STRING ("\n R8: ");
|
||||
ADD_MEM (regs[8], 8);
|
||||
ADD_STRING (" R9: ");
|
||||
ADD_MEM (regs[9], 8);
|
||||
ADD_STRING (" R10: ");
|
||||
ADD_MEM (regs[10], 8);
|
||||
ADD_STRING (" R11: ");
|
||||
ADD_MEM (regs[11], 8);
|
||||
ADD_STRING ("\n R12: ");
|
||||
ADD_MEM (regs[12], 8);
|
||||
ADD_STRING (" R13: ");
|
||||
ADD_MEM (regs[13], 8);
|
||||
ADD_STRING (" R14: ");
|
||||
ADD_MEM (regs[14], 8);
|
||||
ADD_STRING (" R15: ");
|
||||
ADD_MEM (regs[15], 8);
|
||||
|
||||
ADD_STRING ("\n\nMACL: ");
|
||||
ADD_MEM (regs[16], 8);
|
||||
ADD_STRING (" MACH: ");
|
||||
ADD_MEM (regs[17], 8);
|
||||
|
||||
ADD_STRING ("\n\n PC: ");
|
||||
ADD_MEM (regs[18], 8);
|
||||
ADD_STRING (" PR: ");
|
||||
ADD_MEM (regs[19], 8);
|
||||
ADD_STRING (" GBR: ");
|
||||
ADD_MEM (regs[20], 8);
|
||||
ADD_STRING (" SR: ");
|
||||
ADD_MEM (regs[21], 8);
|
||||
|
||||
ADD_STRING ("\n");
|
||||
|
||||
if (ctx->sc_ownedfp != NULL)
|
||||
{
|
||||
hexvalue (ctx->sc_fpregs[0], fpregs[0], 8);
|
||||
hexvalue (ctx->sc_fpregs[1], fpregs[1], 8);
|
||||
hexvalue (ctx->sc_fpregs[2], fpregs[2], 8);
|
||||
hexvalue (ctx->sc_fpregs[3], fpregs[3], 8);
|
||||
hexvalue (ctx->sc_fpregs[4], fpregs[4], 8);
|
||||
hexvalue (ctx->sc_fpregs[5], fpregs[5], 8);
|
||||
hexvalue (ctx->sc_fpregs[6], fpregs[6], 8);
|
||||
hexvalue (ctx->sc_fpregs[7], fpregs[7], 8);
|
||||
hexvalue (ctx->sc_fpregs[8], fpregs[8], 8);
|
||||
hexvalue (ctx->sc_fpregs[9], fpregs[9], 8);
|
||||
hexvalue (ctx->sc_fpregs[10], fpregs[10], 8);
|
||||
hexvalue (ctx->sc_fpregs[11], fpregs[11], 8);
|
||||
hexvalue (ctx->sc_fpregs[12], fpregs[12], 8);
|
||||
hexvalue (ctx->sc_fpregs[13], fpregs[13], 8);
|
||||
hexvalue (ctx->sc_fpregs[14], fpregs[14], 8);
|
||||
hexvalue (ctx->sc_fpregs[15], fpregs[15], 8);
|
||||
hexvalue (ctx->sc_xfpregs[0], fpregs[16], 8);
|
||||
hexvalue (ctx->sc_xfpregs[1], fpregs[17], 8);
|
||||
hexvalue (ctx->sc_xfpregs[2], fpregs[18], 8);
|
||||
hexvalue (ctx->sc_xfpregs[3], fpregs[19], 8);
|
||||
hexvalue (ctx->sc_xfpregs[4], fpregs[20], 8);
|
||||
hexvalue (ctx->sc_xfpregs[5], fpregs[21], 8);
|
||||
hexvalue (ctx->sc_xfpregs[6], fpregs[22], 8);
|
||||
hexvalue (ctx->sc_xfpregs[7], fpregs[23], 8);
|
||||
hexvalue (ctx->sc_xfpregs[8], fpregs[24], 8);
|
||||
hexvalue (ctx->sc_xfpregs[9], fpregs[25], 8);
|
||||
hexvalue (ctx->sc_xfpregs[10], fpregs[26], 8);
|
||||
hexvalue (ctx->sc_xfpregs[11], fpregs[27], 8);
|
||||
hexvalue (ctx->sc_xfpregs[12], fpregs[28], 8);
|
||||
hexvalue (ctx->sc_xfpregs[13], fpregs[29], 8);
|
||||
hexvalue (ctx->sc_xfpregs[14], fpregs[30], 8);
|
||||
hexvalue (ctx->sc_xfpregs[15], fpregs[31], 8);
|
||||
hexvalue (ctx->sc_fpscr, fpregs[32], 8);
|
||||
hexvalue (ctx->sc_fpul, fpregs[33], 8);
|
||||
|
||||
ADD_STRING ("\n\n FR0: ");
|
||||
ADD_MEM (fpregs[0], 8);
|
||||
ADD_STRING (" FR1: ");
|
||||
ADD_MEM (fpregs[1], 8);
|
||||
ADD_STRING (" FR2: ");
|
||||
ADD_MEM (fpregs[2], 8);
|
||||
ADD_STRING (" FR3: ");
|
||||
ADD_MEM (fpregs[3], 8);
|
||||
ADD_STRING ("\n FR4: ");
|
||||
ADD_MEM (fpregs[4], 8);
|
||||
ADD_STRING (" FR5: ");
|
||||
ADD_MEM (fpregs[5], 8);
|
||||
ADD_STRING (" FR6: ");
|
||||
ADD_MEM (fpregs[6], 8);
|
||||
ADD_STRING (" FR7: ");
|
||||
ADD_MEM (fpregs[7], 8);
|
||||
ADD_STRING ("\n FR8: ");
|
||||
ADD_MEM (fpregs[8], 8);
|
||||
ADD_STRING (" FR9: ");
|
||||
ADD_MEM (fpregs[9], 8);
|
||||
ADD_STRING (" FR10: ");
|
||||
ADD_MEM (fpregs[10], 8);
|
||||
ADD_STRING (" FR11: ");
|
||||
ADD_MEM (fpregs[11], 8);
|
||||
ADD_STRING ("\nFR12: ");
|
||||
ADD_MEM (fpregs[12], 8);
|
||||
ADD_STRING (" FR13: ");
|
||||
ADD_MEM (fpregs[13], 8);
|
||||
ADD_STRING (" FR14: ");
|
||||
ADD_MEM (fpregs[14], 8);
|
||||
ADD_STRING (" FR15: ");
|
||||
ADD_MEM (fpregs[15], 8);
|
||||
ADD_STRING ("\n\n XR0: ");
|
||||
ADD_MEM (fpregs[16], 8);
|
||||
ADD_STRING (" XR1: ");
|
||||
ADD_MEM (fpregs[17], 8);
|
||||
ADD_STRING (" XR2: ");
|
||||
ADD_MEM (fpregs[18], 8);
|
||||
ADD_STRING (" XR3: ");
|
||||
ADD_MEM (fpregs[19], 8);
|
||||
ADD_STRING ("\n XR4: ");
|
||||
ADD_MEM (fpregs[20], 8);
|
||||
ADD_STRING (" XR5: ");
|
||||
ADD_MEM (fpregs[21], 8);
|
||||
ADD_STRING (" XR6: ");
|
||||
ADD_MEM (fpregs[22], 8);
|
||||
ADD_STRING (" XR7: ");
|
||||
ADD_MEM (fpregs[23], 8);
|
||||
ADD_STRING ("\n XR8: ");
|
||||
ADD_MEM (fpregs[24], 8);
|
||||
ADD_STRING (" XR9: ");
|
||||
ADD_MEM (fpregs[25], 8);
|
||||
ADD_STRING (" XR10: ");
|
||||
ADD_MEM (fpregs[26], 8);
|
||||
ADD_STRING (" XR11: ");
|
||||
ADD_MEM (fpregs[27], 8);
|
||||
ADD_STRING ("\nXR12: ");
|
||||
ADD_MEM (fpregs[28], 8);
|
||||
ADD_STRING (" XR13: ");
|
||||
ADD_MEM (fpregs[29], 8);
|
||||
ADD_STRING (" XR14: ");
|
||||
ADD_MEM (fpregs[30], 8);
|
||||
ADD_STRING (" XR15: ");
|
||||
ADD_MEM (fpregs[31], 8);
|
||||
|
||||
ADD_STRING ("\n\nFPSCR: ");
|
||||
ADD_MEM (fpregs[32], 8);
|
||||
ADD_STRING (" FPUL: ");
|
||||
ADD_MEM (fpregs[33], 8);
|
||||
|
||||
ADD_STRING ("\n");
|
||||
}
|
||||
|
||||
/* Write the stuff out. */
|
||||
writev (fd, iov, nr);
|
||||
}
|
||||
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, &ctx)
|
1
sysdeps/unix/sysv/linux/sh/shmctl.c
Normal file
1
sysdeps/unix/sysv/linux/sh/shmctl.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/shmctl.c>
|
25
sysdeps/unix/sysv/linux/sh/sigcontextinfo.h
Normal file
25
sysdeps/unix/sysv/linux/sh/sigcontextinfo.h
Normal file
@ -0,0 +1,25 @@
|
||||
/* Copyright (C) 1999, 2000 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 int _a2, int _a3, int _a4, struct sigcontext
|
||||
|
||||
#define SIGCONTEXT_EXTRA_ARGS _a2, _a3, _a4,
|
||||
#define GET_PC(ctx) ((void *) ctx.sc_pc)
|
||||
#define GET_FRAME(ctx) ((void *) ctx.sc_regs[14])
|
||||
#define GET_STACK(ctx) ((void *) ctx.sc_regs[15])
|
116
sysdeps/unix/sysv/linux/sh/socket.S
Normal file
116
sysdeps/unix/sysv/linux/sh/socket.S
Normal file
@ -0,0 +1,116 @@
|
||||
/* Copyright (C) 1999, 2000 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
|
||||
#define __socket P(__,socket)
|
||||
#endif
|
||||
|
||||
#define PUSHARGS_1 mov.l r4,@-r15
|
||||
#define PUSHARGS_2 mov.l r5,@-r15; PUSHARGS_1
|
||||
#define PUSHARGS_3 mov.l r6,@-r15; PUSHARGS_2
|
||||
#define PUSHARGS_4 mov.l r7,@-r15; PUSHARGS_3
|
||||
#define PUSHARGS_5 PUSHARGS_4 /* Caller has already pushed arg 5 */
|
||||
#define PUSHARGS_6 PUSHARGS_4 /* Caller has already pushed arg 5,6 */
|
||||
|
||||
#define POPARGS_1 add #4,r15
|
||||
#define POPARGS_2 add #8,r15
|
||||
#define POPARGS_3 add #12,r15
|
||||
#define POPARGS_4 add #16,r15
|
||||
#define POPARGS_5 add #16,r15
|
||||
#define POPARGS_6 add #16,r15
|
||||
|
||||
#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. */
|
||||
P(PUSHARGS_,NARGS)
|
||||
|
||||
/* Do the system call trap. */
|
||||
mov #+P(SOCKOP_,socket), r4
|
||||
mov r15, r5
|
||||
mov.l .L1,r0
|
||||
trapa #0
|
||||
|
||||
/* Pop args off the stack */
|
||||
P(POPARGS_,NARGS)
|
||||
|
||||
mov r0, r1
|
||||
mov #-12, r2
|
||||
shad r2, r1
|
||||
not r1, r1 // r1=0 means r0 = -1 to -4095
|
||||
tst r1, r1 // i.e. error in linux
|
||||
bf 1f
|
||||
|
||||
mov.l .L2, r1
|
||||
#ifdef SHARED
|
||||
mov r0, r2
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l 0f, r12
|
||||
mova 0f, r0
|
||||
add r0, r12
|
||||
mova .L2, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
mov r2, r0
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
.align 2
|
||||
0:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#else
|
||||
jmp @r1
|
||||
nop
|
||||
#endif
|
||||
1:
|
||||
/* Successful; return the syscall's value. */
|
||||
rts
|
||||
nop
|
||||
.align 2
|
||||
.L1:
|
||||
.long SYS_ify(socketcall)
|
||||
.L2:
|
||||
.long PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
|
||||
PSEUDO_END (__socket)
|
||||
|
||||
weak_alias (__socket, socket)
|
48
sysdeps/unix/sysv/linux/sh/sys/io.h
Normal file
48
sysdeps/unix/sysv/linux/sh/sys/io.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* Copyright (C) 1996, 1998, 1999, 2000 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 */
|
109
sysdeps/unix/sysv/linux/sh/sys/ucontext.h
Normal file
109
sysdeps/unix/sysv/linux/sh/sys/ucontext.h
Normal file
@ -0,0 +1,109 @@
|
||||
/* Copyright (C) 1999, 2000 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 NGREG 16
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef greg_t gregset_t[NGREG];
|
||||
|
||||
#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
|
||||
|
||||
typedef int freg_t;
|
||||
|
||||
/* Number of FPU registers. */
|
||||
#define NFREG 16
|
||||
|
||||
/* Structure to describe FPU registers. */
|
||||
typedef freg_t fpregset_t[NFREG];
|
||||
|
||||
/* 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 */
|
68
sysdeps/unix/sysv/linux/sh/sys/user.h
Normal file
68
sysdeps/unix/sysv/linux/sh/sys/user.h
Normal file
@ -0,0 +1,68 @@
|
||||
/* Copyright (C) 1998, 1999, 2000 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>
|
||||
|
||||
/* <sys/ptrace.h> and <linux/ptrace.h> both define the PTRACE_* macros.
|
||||
This leads to compilation problems with programs which include both
|
||||
user.h and ptrace.h (eg: GDB). Do not include <linux/ptrace.h> here. */
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
struct user_fp
|
||||
{
|
||||
struct fp_reg
|
||||
{
|
||||
unsigned int sign1:1;
|
||||
unsigned int unused:15;
|
||||
unsigned int sign2:1;
|
||||
unsigned int exponent:14;
|
||||
unsigned int j:1;
|
||||
unsigned int mantissa1:31;
|
||||
unsigned int mantissa0:32;
|
||||
} fpregs[8];
|
||||
unsigned int fpsr:32;
|
||||
unsigned int fpcr:32;
|
||||
};
|
||||
|
||||
struct user
|
||||
{
|
||||
struct pt_regs regs; /* General registers */
|
||||
int u_fpvalid; /* True if math co-processor being used. */
|
||||
|
||||
unsigned long int u_tsize; /* Text segment size (pages). */
|
||||
unsigned long int u_dsize; /* Data segment size (pages). */
|
||||
unsigned long int u_ssize; /* Stack segment size (pages). */
|
||||
|
||||
unsigned long start_code; /* Starting virtual address of text. */
|
||||
unsigned long start_stack; /* Starting virtual address of stack. */
|
||||
|
||||
long int signal; /* Signal that caused the core dump. */
|
||||
int reserved; /* No longer used */
|
||||
struct pt_regs *u_ar0; /* help gdb to find the general registers. */
|
||||
|
||||
unsigned long magic; /* uniquely identify a core file */
|
||||
char u_comm[32]; /* User command that was responsible */
|
||||
int u_debugreg[8];
|
||||
struct user_fp u_fp; /* Floating point registers */
|
||||
struct user_fp_struct *u_fp0; /* help gdb to find the FP registers. */
|
||||
};
|
||||
|
||||
#endif /* sys/user.h */
|
54
sysdeps/unix/sysv/linux/sh/syscalls.list
Normal file
54
sysdeps/unix/sysv/linux/sh/syscalls.list
Normal file
@ -0,0 +1,54 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
s_ioctl ioctl ioctl 3 __syscall_ioctl
|
||||
s_ipc msgget ipc 5 __syscall_ipc
|
||||
s_llseek llseek _llseek 5 __syscall__llseek
|
||||
s_chown chown chown 3 __syscall_chown
|
||||
s_fchown fchown fchown 3 __syscall_fchown
|
||||
s_lchown lchown lchown 3 __syscall_lchown
|
||||
s_execve execve execve 3 __syscall_execve
|
||||
rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
|
||||
rt_sigpending - rt_sigpending 2 __syscall_rt_sigpending
|
||||
rt_sigprocmask - rt_sigprocmask 4 __syscall_rt_sigprocmask
|
||||
rt_sigqueueinfo - rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo
|
||||
rt_sigsuspend - rt_sigsuspend 2 __syscall_rt_sigsuspend
|
||||
rt_sigtimedwait - rt_sigtimedwait 4 __syscall_rt_sigtimedwait
|
||||
s_getcwd getcwd getcwd 2 __syscall_getcwd
|
||||
s_getdents getdents getdents 3 __syscall_getdents
|
||||
s_getgroups getgroups getgroups 2 __syscall_getgroups
|
||||
s_getpriority getpriority getpriority 2 __syscall_getpriority
|
||||
s_getegid getegid getegid 0 __syscall_getegid
|
||||
s_geteuid geteuid geteuid 0 __syscall_geteuid
|
||||
s_getuid getuid getuid 0 __syscall_getuid
|
||||
getresgid - getresgid 3 getresgid
|
||||
getresuid - getresuid 3 getresuid
|
||||
s_getrlimit getrlimit getrlimit 2 __syscall_getrlimit
|
||||
s_poll poll poll 3 __syscall_poll
|
||||
s_pread64 pread64 pread 5 __syscall_pread
|
||||
s_ptrace ptrace ptrace 4 __syscall_ptrace
|
||||
s_pwrite64 pwrite64 pwrite 5 __syscall_pwrite
|
||||
s_reboot reboot reboot 3 __syscall_reboot
|
||||
s_setrlimit setrlimit setrlimit 3 __syscall_setrlimit
|
||||
s_sigaction sigaction sigaction 3 __syscall_sigaction
|
||||
s_sigpending sigpending sigpending 1 __syscall_sigpending
|
||||
s_sigprocmask sigprocmask sigprocmask 3 __syscall_sigprocmask
|
||||
s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
|
||||
s_setfsgid setfsgid setfsgid 1 __syscall_setfsgid
|
||||
s_setfsuid setfsuid setfsuid 1 __syscall_setfsuid
|
||||
s_setgid setgid setgid 1 __syscall_setgid
|
||||
s_setgroups setgroups setgroups 2 __syscall_setgroups
|
||||
s_setregid setregid setregid 2 __syscall_setregid
|
||||
s_setresgid setresgid setresgid 3 __syscall_setresgid
|
||||
s_setresuid setresuid setresuid 3 __syscall_setresuid
|
||||
s_setreuid setreuid setreuid 2 __syscall_setreuid
|
||||
s_setuid setuid setuid 1 __syscall_setuid
|
||||
s_sysctl sysctl _sysctl 1 __syscall__sysctl
|
||||
s_ugetrlimit getrlimit ugetrlimit 2 __syscall_ugetrlimit
|
||||
s_ustat ustat ustat 2 __syscall_ustat
|
||||
sys_fstat fxstat fstat 2 __syscall_fstat
|
||||
sys_lstat lxstat lstat 2 __syscall_lstat
|
||||
sys_mknod xmknod mknod 3 __syscall_mknod
|
||||
sys_readv readv readv 3 __syscall_readv
|
||||
sys_stat xstat stat 2 __syscall_stat
|
||||
sys_writev writev writev 3 __syscall_writev
|
||||
syscall - syscall 5 syscall
|
43
sysdeps/unix/sysv/linux/sh/sysdep.S
Normal file
43
sysdeps/unix/sysv/linux/sh/sysdep.S
Normal file
@ -0,0 +1,43 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 1998, 1999 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>
|
||||
|
||||
/* We define errno here, to be consistent with Linux/i386. */
|
||||
|
||||
.section .bss
|
||||
.globl C_SYMBOL_NAME(errno)
|
||||
.type C_SYMBOL_NAME(errno), @object
|
||||
.size C_SYMBOL_NAME(errno), 4
|
||||
C_SYMBOL_NAME(errno):
|
||||
.space 4
|
||||
weak_alias (errno, _errno)
|
||||
.text
|
||||
|
||||
/* 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 r4, r0
|
||||
|
||||
#define __syscall_error __syscall_error_1
|
||||
#include <sysdeps/unix/sh/sysdep.S>
|
132
sysdeps/unix/sysv/linux/sh/sysdep.h
Normal file
132
sysdeps/unix/sysv/linux/sh/sysdep.h
Normal file
@ -0,0 +1,132 @@
|
||||
/* Copyright (C) 1992, 93, 95-99, 2000 Free Software Foundation,
|
||||
Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
|
||||
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
|
||||
|
||||
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_SH_SYSDEP_H
|
||||
#define _LINUX_SH_SYSDEP_H 1
|
||||
|
||||
/* There is some commonality. */
|
||||
#include <sysdeps/unix/sh/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 _IMM12 #-12
|
||||
#undef PSEUDO
|
||||
#ifdef SHARED
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name); \
|
||||
DO_CALL (args, syscall_name); \
|
||||
mov r0,r1; \
|
||||
mov _IMM12,r2; \
|
||||
shad r2,r1; \
|
||||
not r1,r1; \
|
||||
tst r1,r1; \
|
||||
bf 1f; \
|
||||
mov r0,r4; \
|
||||
mov.l r12,@-r15; \
|
||||
sts.l pr,@-r15; \
|
||||
mov.l 0f,r12; \
|
||||
mova 0f,r0; \
|
||||
add r0,r12; \
|
||||
mov.l 2f,r1; \
|
||||
mova 2f,r0; \
|
||||
add r0,r1; \
|
||||
jsr @r1; \
|
||||
nop; \
|
||||
lds.l @r15+,pr; \
|
||||
rts; \
|
||||
mov.l @r15+,r12; \
|
||||
.align 2; \
|
||||
2: .long PLTJMP(C_SYMBOL_NAME(__syscall_error)); \
|
||||
0: .long _GLOBAL_OFFSET_TABLE_; \
|
||||
1:
|
||||
#else
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name); \
|
||||
DO_CALL (args, syscall_name); \
|
||||
mov r0,r1; \
|
||||
mov _IMM12,r2; \
|
||||
shad r2,r1; \
|
||||
not r1,r1; \
|
||||
tst r1,r1; \
|
||||
bf 1f; \
|
||||
mov.l 2f,r1; \
|
||||
jmp @r1; \
|
||||
mov r0, r4; \
|
||||
.align 2; \
|
||||
2: .long PLTJMP(C_SYMBOL_NAME(__syscall_error)); \
|
||||
1:
|
||||
#endif
|
||||
|
||||
#undef PSEUDO_END
|
||||
#define PSEUDO_END(name) \
|
||||
SYSCALL_ERROR_HANDLER \
|
||||
END (name)
|
||||
|
||||
#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
|
||||
|
||||
#define SYSCALL_INST0 trapa #0
|
||||
#define SYSCALL_INST1 trapa #0
|
||||
#define SYSCALL_INST2 trapa #0
|
||||
#define SYSCALL_INST3 trapa #0
|
||||
#define SYSCALL_INST4 trapa #0
|
||||
#define SYSCALL_INST5 trapa #1
|
||||
#define SYSCALL_INST6 trapa #2
|
||||
|
||||
#undef DO_CALL
|
||||
#define DO_CALL(args, syscall_name) \
|
||||
mov.l 1f,r0; \
|
||||
SYSCALL_INST##args; \
|
||||
bra 2f; \
|
||||
nop; \
|
||||
.align 2; \
|
||||
1: .long SYS_ify(syscall_name); \
|
||||
2:
|
||||
|
||||
#else /* not __ASSEMBLER__ */
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
__syscall_##name(args)
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* linux/sh/sysdep.h */
|
112
sysdeps/unix/sysv/linux/sh/vfork.S
Normal file
112
sysdeps/unix/sysv/linux/sh/vfork.S
Normal file
@ -0,0 +1,112 @@
|
||||
/* Copyright (C) 1999, 2000 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
|
||||
mov #+__NR_vfork, r0
|
||||
trapa #0
|
||||
mov r0, r1
|
||||
mov #-12, r2
|
||||
shad r2, r1
|
||||
not r1, r1 // r1=0 means r0 = -1 to -4095
|
||||
tst r1, r1 // i.e. error in linux
|
||||
bf 1f
|
||||
mov.w .L1, r1
|
||||
cmp/eq r1, r0
|
||||
bt 2f
|
||||
mov.l .L2, r1
|
||||
#ifdef SHARED
|
||||
mov r0, r4
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l 0f, r12
|
||||
mova 0f, r0
|
||||
add r0, r12
|
||||
mova .L2, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
nop
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
.align 2
|
||||
0:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#else
|
||||
jmp @r1
|
||||
mov r0, r4
|
||||
#endif
|
||||
.L1:
|
||||
.word -ENOSYS
|
||||
1:
|
||||
rts
|
||||
nop
|
||||
2:
|
||||
#endif
|
||||
|
||||
/* If we don't have vfork, fork is close enough. */
|
||||
mov #+__NR_fork, r0
|
||||
trapa #0
|
||||
mov r0, r1
|
||||
mov #-12, r2
|
||||
shad r2, r1
|
||||
not r1, r1 // r1=0 means r0 = -1 to -4095
|
||||
tst r1, r1 // i.e. error in linux
|
||||
bf 1f
|
||||
mov.l .L2, r1
|
||||
#ifdef SHARED
|
||||
mov r0, r4
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
mov.l 0f, r12
|
||||
mova 0f, r0
|
||||
add r0, r12
|
||||
mova .L2, r0
|
||||
add r0, r1
|
||||
jsr @r1
|
||||
nop
|
||||
lds.l @r15+, pr
|
||||
rts
|
||||
mov.l @r15+, r12
|
||||
.align 2
|
||||
0:
|
||||
.long _GLOBAL_OFFSET_TABLE_
|
||||
#else
|
||||
jmp @r1
|
||||
mov r0, r4
|
||||
#endif
|
||||
.align 2
|
||||
.L2:
|
||||
.long PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||
1:
|
||||
rts
|
||||
nop
|
||||
|
||||
PSEUDO_END (__vfork)
|
||||
|
||||
weak_alias (__vfork, vfork)
|
1
sysdeps/unix/sysv/linux/sh/xstat.c
Normal file
1
sysdeps/unix/sysv/linux/sh/xstat.c
Normal file
@ -0,0 +1 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/xstat.c>
|
Reference in New Issue
Block a user