1998-06-18 21:45  Ulrich Drepper  <drepper@cygnus.com>

	* signal/signal.h: Add prototype for __sigaltstack.
	* sysdeps/unix/sysv/linux/syscalls.list: Add __sigaltstack name.
	Remove sigstack entry.
	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add sigstack here.
	* sysdeps/unix/sysv/linux/sigstack.c: New file.

	* sysdeps/i386/backtrace.c: Add casts.
This commit is contained in:
Ulrich Drepper 1998-06-18 21:50:38 +00:00
parent 8cb569b756
commit dfab448bd8
6 changed files with 76 additions and 3 deletions

View File

@ -1,3 +1,13 @@
1998-06-18 21:45 Ulrich Drepper <drepper@cygnus.com>
* signal/signal.h: Add prototype for __sigaltstack.
* sysdeps/unix/sysv/linux/syscalls.list: Add __sigaltstack name.
Remove sigstack entry.
* sysdeps/unix/sysv/linux/alpha/syscalls.list: Add sigstack here.
* sysdeps/unix/sysv/linux/sigstack.c: New file.
* sysdeps/i386/backtrace.c: Add casts.
1998-06-18 19:49 Ulrich Drepper <drepper@cygnus.com> 1998-06-18 19:49 Ulrich Drepper <drepper@cygnus.com>
* intl/dcgettext.c: use complete type name. * intl/dcgettext.c: use complete type name.

View File

@ -328,6 +328,8 @@ extern int sigstack __P ((__const struct sigstack *__ss,
/* Alternate signal handler stack interface. /* Alternate signal handler stack interface.
This interface should always be preferred over `sigstack'. */ This interface should always be preferred over `sigstack'. */
extern int __sigaltstack __P ((__const struct sigaltstack *__ss,
struct sigaltstack *__oss));
extern int sigaltstack __P ((__const struct sigaltstack *__ss, extern int sigaltstack __P ((__const struct sigaltstack *__ss,
struct sigaltstack *__oss)); struct sigaltstack *__oss));

View File

@ -55,7 +55,7 @@ __backtrace (array, size)
current = (struct layout *) ebp; current = (struct layout *) ebp;
while (cnt < size) while (cnt < size)
{ {
if (current < esp || current > __libc_stack_end) if ((void *) current < esp || (void *) current > __libc_stack_end)
/* This means the address is out of range. Note that for the /* This means the address is out of range. Note that for the
toplevel we see a frame pointer with value NULL which clearly is toplevel we see a frame pointer with value NULL which clearly is
out of range. */ out of range. */

View File

@ -16,6 +16,7 @@ semget - semget 3 __semget semget
semctl - semctl 4 __semctl semctl semctl - semctl 4 __semctl semctl
osf_sigprocmask - osf_sigprocmask 2 __osf_sigprocmask osf_sigprocmask - osf_sigprocmask 2 __osf_sigprocmask
sigstack - sigstack 2 sigstack
getpeername - getpeername 3 __getpeername getpeername getpeername - getpeername 3 __getpeername getpeername
getpriority - getpriority 2 __getpriority getpriority getpriority - getpriority 2 __getpriority getpriority

View File

@ -0,0 +1,61 @@
/* Emulate sigstack function using sigalstack.
Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
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>
int
sigstack (ss, oss)
const struct sigstack *ss;
struct sigstack *oss;
{
stack_t sas;
stack_t *sasp = NULL;
stack_t osas;
stack_t *osasp = oss == NULL ? NULL : &osas;
int result;
if (ss != NULL)
{
/* We have to convert the information. */
sas.ss_sp = ss->ss_sp;
sas.ss_flags = ss->ss_onstack ? SS_ONSTACK : 0;
/* For the size of the stack we have no value we can pass to the
kernel. This is why this function should not be used. We simply
assume that all the memory down to address zero (in case the stack
grows down) is available. */
sas.ss_size = ss->ss_sp - NULL;
sasp = &sas;
}
/* Call the kernel. */
result = __sigaltstack (sasp, osasp);
/* Convert the result, if wanted and possible. */
if (result == 0 && oss != NULL)
{
oss->ss_sp = osas.ss_sp;
oss->ss_onstack = (osas.ss_flags & SS_ONSTACK) != 0;
}
return result;
}

View File

@ -72,8 +72,7 @@ setfsuid EXTRA setfsuid 1 setfsuid
setpgid - setpgid 2 __setpgid setpgid setpgid - setpgid 2 __setpgid setpgid
setresgid EXTRA setresgid 3 setresgid setresgid EXTRA setresgid 3 setresgid
setresuid EXTRA setresuid 3 setresuid setresuid EXTRA setresuid 3 setresuid
sigaltstack - sigaltstack 2 sigaltstack sigaltstack - sigaltstack 2 __sigaltstack sigaltstack
sigstack - sigstack 2 sigstack
sys_fstat fxstat fstat 2 __syscall_fstat sys_fstat fxstat fstat 2 __syscall_fstat
sys_lstat lxstat lstat 2 __syscall_lstat sys_lstat lxstat lstat 2 __syscall_lstat
sys_mknod xmknod mknod 3 __syscall_mknod sys_mknod xmknod mknod 3 __syscall_mknod