1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00
1998-09-14  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sysdeps/mach/hurd/dl-cache.c (_dl_unload_cache): New dummy
	function.  Reported by okuji@kuicr.kyoto-u.ac.jp [PR libc/789].

1998-09-15  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup):
	Add profiling support.
	(TRAMPOLINE_TEMPLATE): New macro.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Define in terms of that.
	(RTLD_START): Prettify, and set __libc_stack_end properly.
	(elf_machine_rela) [R_SPARC_COPY]: Remove RTLD_BOOTSTRAP ifndef
	and check for sym being NULL instead.
	* sysdeps/sparc/sparc64/addmul_1.S: Adjust to allocate 192 bytes
	of stack space.
	* sysdeps/sparc/sparc64/lshift.S: Likewise.
	* sysdeps/sparc/sparc64/mul_1.S: Likewise.
	* sysdeps/sparc/sparc64/rshift.S: Likewise.
	* sysdeps/sparc/sparc64/submul_1.S: Likewise.
	* sysdeps/sparc/sparc64/elf/crtbegin.S: Likewise and remove old
	MEDANY code model %g4 usage.
	* sysdeps/sparc/sparc64/elf/crtend.S: Likewise and remove old
	MEDANY code model %g4 usage.
	* sysdeps/sparc/sparc64/elf/start.S: Rework to not use old FULLANY
	code model address formation.
	* sysdeps/sparc/sparc64/dl-machine.h: Don't include link.h, do
	include elf/ldsodefs.h
	(DT_SPARC): Remove.
	(elf_machine_matches_host): It is now EM_SPARCV9.
	(elf_machine_dynamic): Clean up to remove ugly cast.
	(elf_machine_fixup_plt): Rework for new V9 ABI, add support for
	new PLT formats.
	(elf_machine_rela): Don't do anything at all for R_SPARC_NONE.
	Prettify rest of function.
	[R_SPARC_COPY]: Check for sym being NULL.
	[R_SPARC_32]: Handle it.
	[R_SPARC_H44, R_SPARC_M44, R_SPARC_L44]: Handle them for the
	MEDMID code model.
	[R_SPARC_HH22, R_SPARC_HM10, R_SPARC_LM22]: Handle them for the
	MEDANY code model.
	[R_SPARC_NONE]: Remove this case, as it is now checked earlier.
	(elf_machine_runtime_setup): Rewrite for new V9 ABI plt formats.
	Add profiling support.
	(TRAMPOLINE_TEMPLATE): New macro.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Define in terms of that.
	(RTLD_START): Prettify and set __libc_stack_end.
	* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h (SA_SIGINFO):
	Define.
	* sysdeps/unix/sysv/linux/sparc/bits/signum.h (_NSIG): Set to 64.
	(SIGRTMIN, SIGRTMAX, __SIGRTMIN, __SIGRTMAX): Define.
	* sysdeps/unix/sysv/linux/sparc/sparc32/brk.c (__brk): Remove
	unused variable scratch.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
	(__syscall_rt_sigaction, __rt_sigreturn_stub, __sigreturn_stub):
	Declare.
	(__sigaction): Rewrite rt_sigaction case to pass correct sigreturn
	stub to rt_sigaction syscalls.  Rewrite non-rt case to use correct
	old format kernel sigaction structures.
	* sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h: Move...
	* sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h: to here.
	* sysdeps/unix/sysv/linux/sparc/sparc64/Dist: Remove ucontext.h
	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h: Fix
	ucontext include.
	(_JMPBUF_UNWINDS): Define.
	* sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: Declare
	statfs64 structure, which is exactly the same as the normal one.
	* sysdeps/unix/sysv/linux/sparc/sparc64/brk.S: Allocate 192 bytes
	of stack.  Use correct syscall trap number.  Add branch prediction
	settings to branch instructions.  Remove old MEDANY code model %g4
	referneces for non-PIC.
	* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Add
	__libc_longjmp and __libc_siglongjmp strong aliases.
	* sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c (__readdir64):
	Also define to __no__readdir64_decl around readdir.c inclusion.
	(__readdir64): Add strong alias.
	* sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (getrlimit):
	Set strong and weak names properly.

1998-09-16 11:25  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/Makefile (AWK): Default to gawk if standalone.

1998-09-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile (distribute): Undo last change.
	* Make-dist (+tsrc) [not subdir]: Also include indirection headers
	for sysdep headers.
	(+subdir-headers): Removed, unused.

1998-09-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio-common/Makefile ($(inst_includedir)/bits/stdio_lim.h): Use
	$(do-install).

1998-09-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules ($(+sysdir_pfx)sysd-Makefile): Don't check for
	absolute name in $(config-sysdirs), can never happen.
	($(+sysdir_pfx)sysd-rules): Likewise.
	* Makeconfig (full-config-sysdirs): Likewise.
	(all-Subdirs-files): Prepend $(..).

	* configure.in: Don't check for absolute name in $add_ons_pfx, can
	not happen.  Let --enable-add-ons=yes work if no add-ons actually
	exist.

1998-09-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Rules ($(common-objpfx)bits/stdio_%.h): Remove extra
	continuations in command.

1998-09-15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* libio/oldstdfiles.c (_IO_stdin_used): Update declaration.
This commit is contained in:
Ulrich Drepper
1998-09-16 17:54:34 +00:00
parent a8125d8552
commit 9c4c002459
42 changed files with 796 additions and 353 deletions

View File

@ -40,6 +40,8 @@ struct sigaction
/* Bits in `sa_flags'. */
#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */
#define SA_SIGINFO 0x00000200 /* Invoke signal-catching function with
three arguments instead of one. */
#ifdef __USE_MISC
# define SA_STACK 0x00000001 /* Use signal stack by using `sa_restorer'. */
# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */

View File

@ -32,8 +32,6 @@
* Linux/SPARC has different signal numbers that Linux/i386: I'm trying
* to make it OSF/1 binary compatible, at least for normal binaries.
*/
#define _NSIG 32 /* Biggest signal number + 1. */
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
@ -70,4 +68,15 @@
#define SIGUSR1 30
#define SIGUSR2 31
#define _NSIG 64 /* Biggest signal number + 1
(including real-time signals). */
#define SIGRTMIN (__libc_current_sigrtmin ())
#define SIGRTMAX (__libc_current_sigrtmax ())
/* These are the hard limits of the kernel. These values should not be
used directly at user level. */
#define __SIGRTMIN 32
#define __SIGRTMAX (_NSIG - 1)
#endif /* <signal.h> included. */

View File

@ -33,7 +33,7 @@ weak_alias (__curbrk, ___brk_addr)
int
__brk (void *addr)
{
void *newbrk, *scratch;
void *newbrk;
{
register void *o0 __asm__("%o0") = addr;

View File

@ -23,6 +23,13 @@
#include <errno.h>
#include <kernel_sigaction.h>
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *,
struct kernel_sigaction *, unsigned long,
size_t);
static void __rt_sigreturn_stub (void);
static void __sigreturn_stub (void);
/* The variable is shared between all wrappers around signal handling
functions which have RT equivalents. */
int __libc_missing_rt_sigs;
@ -30,8 +37,49 @@ int __libc_missing_rt_sigs;
int
__sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
{
struct old_kernel_sigaction k_sigact, k_osigact;
int ret;
struct kernel_sigaction k_sigact, k_osigact;
/* First try the RT signals. */
if (!__libc_missing_rt_sigs)
{
struct kernel_sigaction kact, koact;
unsigned long stub = 0;
int saved_errno = errno;
if (act)
{
kact.k_sa_handler = act->sa_handler;
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0)
stub = (unsigned long) &__rt_sigreturn_stub;
else
stub = (unsigned long) &__sigreturn_stub;
stub -= 8;
kact.sa_restorer = NULL;
}
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
ret = __syscall_rt_sigaction (sig, act ? &kact : 0,
oact ? &koact : 0,
stub, _NSIG / 8);
if (ret >= 0 || errno != ENOSYS)
{
if (oact && ret >= 0)
{
oact->sa_handler = koact.k_sa_handler;
memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
oact->sa_flags = koact.sa_flags;
oact->sa_restorer = koact.sa_restorer;
}
return ret;
}
__set_errno (saved_errno);
__libc_missing_rt_sigs = 1;
}
/* Magic to tell the kernel we are using "new-style" signals, in that
the signal table is not kept in userspace. Not the same as the
@ -41,15 +89,16 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
if (act)
{
k_sigact.k_sa_handler = act->sa_handler;
memcpy (&k_sigact.sa_mask, &act->sa_mask, sizeof (sigset_t));
k_sigact.sa_mask = act->sa_mask.__val[0];
k_sigact.sa_flags = act->sa_flags;
k_sigact.sa_restorer = NULL;
}
{
register int r_syscallnr __asm__("%g1") = __NR_sigaction;
register int r_sig __asm__("%o0") = sig;
register struct kernel_sigaction *r_act __asm__("%o1");
register struct kernel_sigaction *r_oact __asm__("%o2");
register struct old_kernel_sigaction *r_act __asm__("%o1");
register struct old_kernel_sigaction *r_oact __asm__("%o2");
r_act = act ? &k_sigact : NULL;
r_oact = oact ? &k_osigact : NULL;
@ -57,7 +106,7 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
__asm__ __volatile__("t 0x10\n\t"
"bcc 1f\n\t"
" nop\n\t"
" sub %%g0,%%o0,%%o0\n"
"sub %%g0,%%o0,%%o0\n"
"1:"
: "=r"(r_sig)
: "r"(r_syscallnr), "r"(r_act), "r"(r_oact),
@ -66,16 +115,13 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
ret = r_sig;
}
if (ret >= 0)
if (oact && ret >= 0)
{
if (oact)
{
oact->sa_handler = k_osigact.k_sa_handler;
memcpy (&oact->sa_mask, &k_osigact.sa_mask, sizeof (sigset_t));
oact->sa_flags = k_osigact.sa_flags;
oact->sa_restorer = NULL;
}
return 0;
oact->sa_handler = k_osigact.k_sa_handler;
oact->sa_mask.__val[0] = k_osigact.sa_mask;
oact->sa_flags = k_osigact.sa_flags;
oact->sa_restorer = NULL;
return ret;
}
__set_errno (-ret);
@ -83,3 +129,21 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact)
}
weak_alias (__sigaction, sigaction);
static void
__rt_sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
"ta 0x10\n\t"
: /* no outputs */
: "i" (__NR_rt_sigreturn));
}
static void
__sigreturn_stub (void)
{
__asm__ ("mov %0, %%g1\n\t"
"ta 0x10\n\t"
: /* no outputs */
: "i" (__NR_sigreturn));
}

View File

@ -4,5 +4,4 @@ kernel_stat.h
getcontext.S
setcontext.S
sizes.h
ucontext.h
init-first.h

View File

@ -21,6 +21,11 @@
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
#include <ucontext.h>
#include <sys/ucontext.h>
typedef ucontext_t __jmp_buf[1];
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
#define _JMPBUF_UNWINDS(jmpbuf, address) \
((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp)

View File

@ -39,4 +39,20 @@ struct statfs
long int f_spare[6];
};
/* We already use 64-bit types in the normal structure,
so this is the same as the above. */
struct statfs64
{
long int f_type;
long int f_bsize;
long int f_blocks;
long int f_bfree;
long int f_bavail;
long int f_files;
long int f_ffree;
__fsid_t f_fsid;
long int f_namelen;
long int f_spare[6];
};
#endif /* bits/statfs.h */

View File

@ -38,7 +38,7 @@ __curbrk: .skip 8
.text
ENTRY(__brk)
save %sp, -160, %sp
save %sp, -192, %sp
#ifdef PIC
1: call 2f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
@ -49,24 +49,23 @@ ENTRY(__brk)
LOADSYSCALL(brk)
mov %i0, %o0
ta 0x11
ta 0x6d
/* All the ways we can fail... */
bcs,pn %xcc, .Lerr1
nop
brz %i0, .Lok
brz,pt %i0, .Lok
subcc %i0, %o0, %g0
bne,pn %xcc, .Lerr0
nop
/* Update __curbrk and return cleanly. */
.Lok: sethi %hi(__curbrk), %g1
or %g1, %lo(__curbrk), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
stx %o0, [%g1]
#else
stx %o0, [%g4+%g1]
#endif
stx %o0, [%g1]
mov %g0, %i0
/* Don't use "ret" cause the preprocessor will eat it. */
@ -81,10 +80,8 @@ ENTRY(__brk)
or %g1, %lo(errno), %g1
#ifdef PIC
ldx [%l7+%g1], %g1
st %o0, [%g1]
#else
st %o0, [%g4+%g1]
#endif
st %o0, [%g1]
#else
call __errno_location
mov %o0,%l1

View File

@ -30,7 +30,7 @@
.type __clone,@function
__clone:
save %sp,-160,%sp
save %sp, -192, %sp
/* sanity check arguments */
brz,pn %i0, 99f
@ -42,10 +42,10 @@ __clone:
mov %i1, %o1
mov %i2, %o0
set __NR_clone, %g1
ta 0x11
ta 0x6d
bcs,pn %xcc, 99f
nop
brnz %o0, __thread_start
brnz,pn %o0, __thread_start
mov %o0, %i0
ret
restore
@ -62,7 +62,6 @@ __clone:
st %i0, [%l7+%g2]
#else
sethi %hi(errno), %g2
add %g2, %g4, %g2
set EINVAL, %i0
st %i0, [%g2+%lo(errno)]
#endif

View File

@ -33,7 +33,7 @@
.global " #NAME "
.type " #NAME ",@function
" #NAME ":
save %sp, -128, %sp
save %sp, -192, %sp
1: call 11f
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
@ -73,11 +73,10 @@
or %g2, %lo(_dl_starting_up), %g2
brz,pt %g2, 3f
sethi %hi(__libc_multiple_libcs), %g3
ld [%g4+%g2], %g1
ld [%g2], %g1
mov %g0, %g2
movrz %g1, 1, %g2
3: or %g3, %lo(__libc_multiple_libcs), %g3
st %g2, [%g3+%g4]
3: st %g2, [%g3 + %lo(__libc_multiple_libcs)]
/* If so, argc et al are in %o0-%o2 already. Otherwise, load them. */
brnz,pn %g2, " #INIT "
nop

View File

@ -44,5 +44,7 @@ ENTRY(longjmp)
END(longjmp)
strong_alias(longjmp, __longjmp)
strong_alias(longjmp, __libc_longjmp)
strong_alias(longjmp, __libc_siglongjmp)
weak_alias(longjmp, _longjmp)
weak_alias(longjmp, siglongjmp)

View File

@ -22,7 +22,7 @@
ENTRY (__libc_pipe)
mov %o0, %o2 /* Save PIPEDES. */
LOADSYSCALL(pipe)
ta 0x11
ta 0x6d
bcc,pn %xcc, 2f
nop
SYSCALL_ERROR_HANDLER

View File

@ -1,4 +1,7 @@
#define readdir64 __no_readdir64_decl
#define __readdir64 __no___readdir64_decl
#include <sysdeps/unix/readdir.c>
#undef __readdir64
strong_alias (__readdir, __readdir64)
#undef readdir64
weak_alias (__readdir, readdir64)

View File

@ -1,5 +1,5 @@
#ifndef _UCONTEXT_H
#define _UCONTEXT_H
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H
#include <signal.h>
@ -64,4 +64,4 @@ struct ucontext {
};
typedef struct ucontext ucontext_t;
#endif /* ucontext.h */
#endif /* sys/ucontext.h */

View File

@ -28,7 +28,7 @@ ENTRY (syscall)
mov %o4,%o3
mov %o5,%o4
ta 0x11
ta 0x6d
bcc,pt %xcc,1f
nop

View File

@ -6,7 +6,7 @@ pread - pread 4 __pread pread __pread64 pread64
pwrite - pwrite 4 __pwrite pwrite __pwrite64 pwrite64
fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64
statfs - statfs 2 __statfs statfs statfs64
getrlimit - getrlimit 2 getrlimit getrlimit64
getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64
setrlimit - setrlimit 2 setrlimit setrlimit64
ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64
truncate - truncate 2 truncate truncate64

View File

@ -46,49 +46,48 @@
#ifdef PIC
# ifdef _LIBC_REENTRANT
# define SYSCALL_ERROR_HANDLER \
save %sp,-160,%sp; \
call __errno_location; \
save %sp, -192, %sp; \
call __errno_location; \
nop; \
st %i0,[%o0]; \
sub %g0,1,%i0; \
jmpl %i7+8, %g0; \
st %i0,[%o0]; \
sub %g0,1,%i0; \
jmpl %i7+8, %g0; \
restore
# else
# define SYSCALL_ERROR_HANDLER \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
mov %o7,%g3; \
101: call 102f; \
sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \
102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \
sethi %hi(errno),%o1; \
add %g2,%o7,%l7; \
or %o1,%lo(errno),%o1; \
mov %g3,%o7; \
ldx [%l7+%o1],%g2; \
st %o0,[%g2]; \
mov %o7, %g3; \
101: call 102f; \
sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \
102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \
sethi %hi(errno), %o1; \
add %g2, %o7, %l7; \
or %o1, %lo(errno), %o1; \
mov %g3,%o7; \
ldx [%l7+%o1], %g2; \
st %o0, [%g2]; \
retl; \
sub %g0,1,%i0
sub %g0, 1, %i0
# endif
#else
# ifdef _LIBC_REENTRANT
# define SYSCALL_ERROR_HANDLER \
save %sp,-160,%sp; \
call __errno_location; \
save %sp, -192, %sp; \
call __errno_location; \
nop; \
st %i0,[%o0]; \
sub %g0,1,%i0; \
jmpl %i7+8, %g0; \
st %i0, [%o0]; \
sub %g0, 1, %i0; \
jmpl %i7+8, %g0; \
restore
# else
# define SYSCALL_ERROR_HANDLER \
.global C_SYMBOL_NAME(errno); \
.type C_SYMBOL_NAME(errno),@object; \
sethi %hi(errno),%g1; \
or %g1,%lo(errno),%g1; \
st %i0,[%g1+%g4]; \
sethi %hi(errno), %g1; \
st %i0, [%g1 + %lo(errno)]; \
retl; \
sub %g0,1,%i0
sub %g0, 1, %i0
# endif
#endif
@ -96,8 +95,8 @@
.text; \
ENTRY(name); \
LOADSYSCALL(syscall_name); \
ta 0x11; \
bcc,pt %xcc,1f; \
ta 0x6d; \
bcc,pt %xcc, 1f; \
nop; \
SYSCALL_ERROR_HANDLER; \
1: