Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
2000-10-26  Kazumoto Kojima  <kkojima@rr.iij4u.or.jp>
	    Yutaka Niibe  <gniibe@chroot.org>

	* sysdeps/sh/dl-machine.h (elf_machine_rela): Handle in place
	relocation which is generated by new ld.
	* sysdeps/sh/elf/initfini.c (_init): Preseted __fpscr_values.
	(_fini): Delete an obsolete register prefix.
	* sysdeps/unix/sysv/linux/sh/Versions: Add __xstat64, __fxstat64,
	__lxstat64, alphasort64, glob64, readdir64, readdir64_r, scandir64
	and versionsort64 as the 2.2-versioned symbols.
	* sysdeps/unix/sysv/linux/sh/bits/fcntl.h: New file.
	* sysdeps/unix/sysv/linux/sh/brk.c: Changes for the new system call
	calling convention of the kernel.
	* sysdeps/unix/sysv/linux/sh/pipe.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/vfork.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/sh/fcntl.c: New file.
	* sysdeps/unix/sysv/linux/sh/lockf64.c: New file.
	* sysdeps/unix/sysv/linux/sh/sys/user.h: Include the kernel header
	file and delete the definitions of struct user and user_fp.
	* sysdeps/unix/sysv/linux/sh/syscall.S: New file.
	* sysdeps/unix/sysv/linux/sh/syscalls.list: Remove entries for
	s_ioctl, s_ipc, s_llseek, s_chown, s_fchown, s_lchown, s_execve,
	rt_sigaction, rt_sigpending, rt_sigprocmask, rt_sigqueueinfo,
	rt_sigsuspend, rt_sigtimedwait, s_getcwd, s_getdents, s_getgroups,
	s_getpriority, s_getegid, s_geteuid, s_getuid, getresgid, getresuid,
	s_getrlimit, s_poll, s_pread64, s_ptrace, s_pwrite64, s_reboot,
	s_setrlimit, s_sigaction, s_sigpending, s_sigprocmask, s_sigsuspend,
	s_setfsgid, s_setfsuid, s_setgid, s_setgroups, s_setregid,
	s_setresgid, s_setresuid, s_setreuid, s_setuid, s_sysctl,
	s_ugetrlimit, s_ustat, sys_fstat, sys_lstat, sys_mknod, sys_readv,
	sys_stat, sys_writev and syscall.
  • Loading branch information
Ulrich Drepper committed Oct 26, 2000
1 parent 8547128 commit 876f963
Show file tree
Hide file tree
Showing 17 changed files with 403 additions and 133 deletions.
35 changes: 35 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
2000-10-26 Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
Yutaka Niibe <gniibe@chroot.org>

* sysdeps/sh/dl-machine.h (elf_machine_rela): Handle in place
relocation which is generated by new ld.
* sysdeps/sh/elf/initfini.c (_init): Preseted __fpscr_values.
(_fini): Delete an obsolete register prefix.
* sysdeps/unix/sysv/linux/sh/Versions: Add __xstat64, __fxstat64,
__lxstat64, alphasort64, glob64, readdir64, readdir64_r, scandir64
and versionsort64 as the 2.2-versioned symbols.
* sysdeps/unix/sysv/linux/sh/bits/fcntl.h: New file.
* sysdeps/unix/sysv/linux/sh/brk.c: Changes for the new system call
calling convention of the kernel.
* sysdeps/unix/sysv/linux/sh/pipe.S: Likewise.
* sysdeps/unix/sysv/linux/sh/socket.S: Likewise.
* sysdeps/unix/sysv/linux/sh/clone.S: Likewise.
* sysdeps/unix/sysv/linux/sh/vfork.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/sh/fcntl.c: New file.
* sysdeps/unix/sysv/linux/sh/lockf64.c: New file.
* sysdeps/unix/sysv/linux/sh/sys/user.h: Include the kernel header
file and delete the definitions of struct user and user_fp.
* sysdeps/unix/sysv/linux/sh/syscall.S: New file.
* sysdeps/unix/sysv/linux/sh/syscalls.list: Remove entries for
s_ioctl, s_ipc, s_llseek, s_chown, s_fchown, s_lchown, s_execve,
rt_sigaction, rt_sigpending, rt_sigprocmask, rt_sigqueueinfo,
rt_sigsuspend, rt_sigtimedwait, s_getcwd, s_getdents, s_getgroups,
s_getpriority, s_getegid, s_geteuid, s_getuid, getresgid, getresuid,
s_getrlimit, s_poll, s_pread64, s_ptrace, s_pwrite64, s_reboot,
s_setrlimit, s_sigaction, s_sigpending, s_sigprocmask, s_sigsuspend,
s_setfsgid, s_setfsuid, s_setgid, s_setgroups, s_setregid,
s_setresgid, s_setresuid, s_setreuid, s_setuid, s_sysctl,
s_ugetrlimit, s_ustat, sys_fstat, sys_lstat, sys_mknod, sys_readv,
sys_stat, sys_writev and syscall.

2000-10-25 Ulrich Drepper <drepper@redhat.com>

* io/test-lfs.c (do_prepare): Rewrite so it doesn't fail on systems
Expand Down
6 changes: 3 additions & 3 deletions linuxthreads/sysdeps/sh/pt-machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ testandset (int *spinlock)
int ret;

__asm__ __volatile__(
"tas.b %1\n\t"
"tas.b @%1\n\t"
"movt %0"
: "=z" (ret), "=m" (*spinlock)
: /* "1" (*spinlock) */
: "=z" (ret)
: "r" (spinlock)
: "memory", "cc");

return ret;
Expand Down
7 changes: 6 additions & 1 deletion sysdeps/sh/dl-machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,12 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
#ifndef RTLD_BOOTSTRAP
if (map != &_dl_rtld_map) /* Already done in rtld itself. */
#endif
*reloc_addr = map->l_addr + reloc->r_addend;
{
if (reloc->r_addend)
*reloc_addr = map->l_addr + reloc->r_addend;
else
*reloc_addr += map->l_addr;
}
}
else if (ELF32_R_TYPE (reloc->r_info) != R_SH_NONE)
{
Expand Down
8 changes: 7 additions & 1 deletion sysdeps/sh/elf/initfini.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ __asm__ ("
.L23:
.long __gmon_start__
#endif
.data
.global __fpscr_values
__fpscr_values:
.long 0
.long 0x80000
.previous
1:
ALIGN
END_INIT
Expand Down Expand Up @@ -114,7 +120,7 @@ __asm__ ("
.global _fini
.type _fini,@function
_fini:
mov.l r12,@-$r15
mov.l r12,@-r15
mov.l r14,@-r15
sts.l pr,@-r15
#ifdef SHARED
Expand Down
18 changes: 18 additions & 0 deletions sysdeps/unix/sysv/linux/sh/Versions
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
libc {
GLIBC_2.2 {
# functions used in other libraries
__xstat64; __fxstat64; __lxstat64;

# a*
alphasort64;

# g*
glob64;

# New rlimit interface
getrlimit; setrlimit; getrlimit64;

# r*
readdir64; readdir64_r;

# s*
scandir64;

# v*
versionsort64;
}
}
155 changes: 155 additions & 0 deletions sysdeps/unix/sysv/linux/sh/bits/fcntl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/* O_*, F_*, FD_* bit values for Linux.
Copyright (C) 1995, 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. */

#ifndef _FCNTL_H
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif


#include <sys/types.h>

/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
#define O_ACCMODE 0003
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_CREAT 0100 /* not fcntl */
#define O_EXCL 0200 /* not fcntl */
#define O_NOCTTY 0400 /* not fcntl */
#define O_TRUNC 01000 /* not fcntl */
#define O_APPEND 02000
#define O_NONBLOCK 04000
#define O_NDELAY O_NONBLOCK
#define O_SYNC 010000
#define O_FSYNC O_SYNC
#define O_ASYNC 020000

#ifdef __USE_GNU
# define O_DIRECT 040000 /* Direct disk access. */
# define O_DIRECTORY 0200000 /* Must be a directory. */
# define O_NOFOLLOW 0400000 /* Do not follow links. */
#endif

/* For now Linux has synchronisity options for data and read operations.
We define the symbols here but let them do the same as O_SYNC since
this is a superset. */
#if defined __USE_POSIX199309 || defined __USE_UNIX98
# define O_DSYNC O_SYNC /* Synchronize data. */
# define O_RSYNC O_SYNC /* Synchronize read operations. */
#endif

#ifdef __USE_LARGEFILE64
# define O_LARGEFILE 0100000
#endif

/* Values for the second argument to `fcntl'. */
#define F_DUPFD 0 /* Duplicate file descriptor. */
#define F_GETFD 1 /* Get file descriptor flags. */
#define F_SETFD 2 /* Set file descriptor flags. */
#define F_GETFL 3 /* Get file status flags. */
#define F_SETFL 4 /* Set file status flags. */
#ifndef __USE_FILE_OFFSET64
# define F_GETLK 5 /* Get record locking info. */
# define F_SETLK 6 /* Set record locking info (non-blocking). */
# define F_SETLKW 7 /* Set record locking info (blocking). */
#else
# define F_GETLK F_GETLK64 /* Get record locking info. */
# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
#endif
#define F_GETLK64 12 /* Get record locking info. */
#define F_SETLK64 13 /* Set record locking info (non-blocking). */
#define F_SETLKW64 14 /* Set record locking info (blocking). */

#if defined __USE_BSD || defined __USE_XOPEN2K
# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
#endif

#ifdef __USE_GNU
# define F_SETSIG 10 /* Set number of signal to be sent. */
# define F_GETSIG 11 /* Get number of signal to be sent. */
#endif

/* For F_[GET|SET]FL. */
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */

/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
#define F_RDLCK 0 /* Read lock. */
#define F_WRLCK 1 /* Write lock. */
#define F_UNLCK 2 /* Remove lock. */

/* For old implementation of bsd flock(). */
#define F_EXLCK 4 /* or 3 */
#define F_SHLCK 8 /* or 4 */

#ifdef __USE_BSD
/* Operations for bsd flock(), also used by the kernel implementation. */
# define LOCK_SH 1 /* shared lock */
# define LOCK_EX 2 /* exclusive lock */
# define LOCK_NB 4 /* or'd with one of the above to prevent
blocking */
# define LOCK_UN 8 /* remove lock */
#endif

struct flock
{
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
#ifndef __USE_FILE_OFFSET64
__off_t l_start; /* Offset where the lock begins. */
__off_t l_len; /* Size of the locked area; zero means until EOF. */
#else
__off64_t l_start; /* Offset where the lock begins. */
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
#endif
__pid_t l_pid; /* Process holding the lock. */
};

#ifdef __USE_LARGEFILE64
struct flock64
{
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
__off64_t l_start; /* Offset where the lock begins. */
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
__pid_t l_pid; /* Process holding the lock. */
};
#endif

/* Define some more compatibility macros to be backward compatible with
BSD systems which did not managed to hide these kernel macros. */
#ifdef __USE_BSD
# define FAPPEND O_APPEND
# define FFSYNC O_FSYNC
# define FASYNC O_ASYNC
# define FNONBLOCK O_NONBLOCK
# define FNDELAY O_NDELAY
#endif /* Use BSD. */

/* Advise to `posix_fadvise'. */
#ifdef __USE_XOPEN2K
# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
#endif
12 changes: 5 additions & 7 deletions sysdeps/unix/sysv/linux/sh/brk.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,12 @@ int
__brk (void *addr)
{
void *newbrk;
register long r3 asm ("%r3") = SYS_ify (brk);
register long r4 asm ("%r4") = (long)addr;

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");
asm volatile ("trapa #0x11"
: "=z"(newbrk)
: "r" (r3), "r" (r4));

__curbrk = newbrk;

Expand Down
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/sh/clone.S
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ ENTRY(__clone)

/* do the system call */
mov r6, r4
mov #+SYS_ify(clone), r0
trapa #0
mov #+SYS_ify(clone), r3
trapa #0x12
mov r0, r1
mov #-12, r2
shad r2, r1
Expand Down
1 change: 1 addition & 0 deletions sysdeps/unix/sysv/linux/sh/fcntl.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
1 change: 1 addition & 0 deletions sysdeps/unix/sysv/linux/sh/lockf64.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/lockf64.c>
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/sh/pipe.S
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
#include <sysdep.h>

ENTRY (__libc_pipe)
mov #+__NR_pipe, r0
trapa #0
mov #+__NR_pipe, r3
trapa #0x10
mov r0, r3
mov #-12, r2
shad r2, r3
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/sh/socket.S
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ ENTRY (__socket)
/* Do the system call trap. */
mov #+P(SOCKOP_,socket), r4
mov r15, r5
mov.l .L1,r0
trapa #0
mov.l .L1,r3
trapa #0x12

/* Pop args off the stack */
P(POPARGS_,NARGS)
Expand Down
44 changes: 1 addition & 43 deletions sysdeps/unix/sysv/linux/sh/sys/user.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,48 +21,6 @@

#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. */
};
#include <asm/user.h>

#endif /* sys/user.h */
Loading

0 comments on commit 876f963

Please sign in to comment.