1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

signal: Move sys_siglist to a compat symbol

The symbol was deprecated by strsignal and its usage imposes issues
such as copy relocations.

Its internal name is changed to __sys_siglist and __sys_sigabbrev to
avoid static linking usage.  The compat code is also refactored, since
both Linux and Hurd usage the same strategy: export the same array with
different object sizes.

The libSegfault change avoids calling strsignal on the SIGFAULT signal
handler (the current usage is already sketchy, adding a call that
potentially issue locale internal function is even sketchier).

Checked on x86_64-linux-gnu and i686-linux-gnu. I also run a check-abi
on all affected platforms.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
Adhemerval Zanella
2020-04-24 11:09:00 -03:00
parent e4e11b1dba
commit b1ccfc061f
14 changed files with 93 additions and 116 deletions

View File

@ -49,20 +49,16 @@
static const char *fname;
/* We better should not use `strerror' since it can call far too many
other functions which might fail. Do it here ourselves. */
/* Print the signal number SIGNAL. Either strerror or strsignal might
call local internal functions and these in turn call far too many
other functions and might even allocate memory which might fail. */
static void
write_strsignal (int fd, int signal)
{
if (signal < 0 || signal >= _NSIG || _sys_siglist[signal] == NULL)
{
char buf[30];
char *ptr = _itoa_word (signal, &buf[sizeof (buf)], 10, 0);
WRITE_STRING ("signal ");
write (fd, buf, &buf[sizeof (buf)] - ptr);
}
else
WRITE_STRING (_sys_siglist[signal]);
char buf[30];
char *ptr = _itoa_word (signal, &buf[sizeof (buf)], 10, 0);
WRITE_STRING ("signal ");
write (fd, buf, &buf[sizeof (buf)] - ptr);
}