hurd: Avoid more libc.so local PLTs

* hurd/catch-signal.c (__hurd_catch_signal): Call __libc_siglongjmp
	instead if siglongjmp.
	(hurd_safe_memmove): Call __libc_longjmp instead of longjmp.
	* hurd/hurdfault.c (faulted): Call __libc_longjmp instead of longjmp.
	* include/setjmp.h (__libc_siglongjmp, __libc_longjmp): New hidden
	prototypes.
	* libio/iolibio.h (_IO_puts): New hidden prototype.
	* libio/ioputs.c (_IO_puts): New hidden def.
	* setjmp/longjmp.c (__libc_longjmp, __libc_siglongjmp): New hidden
	defs.
	* sysdeps/mach/hurd/sigwait.c (__sigwait): Call __libc_longjmp instead
	of longjmp.
This commit is contained in:
Samuel Thibault 2018-04-03 00:34:31 +00:00
parent 62108dbf61
commit 82dbf555a4
8 changed files with 23 additions and 4 deletions

View File

@ -396,6 +396,18 @@
_hurd_fd_error_signal): Add hidden prototype. _hurd_fd_error_signal): Add hidden prototype.
[_HURD_FD_H_HIDDEN_DEF] (_hurd_fd_error, _hurd_fd_error_signal): Add [_HURD_FD_H_HIDDEN_DEF] (_hurd_fd_error, _hurd_fd_error_signal): Add
hidden def. hidden def.
* hurd/catch-signal.c (__hurd_catch_signal): Call __libc_siglongjmp
instead if siglongjmp.
(hurd_safe_memmove): Call __libc_longjmp instead of longjmp.
* hurd/hurdfault.c (faulted): Call __libc_longjmp instead of longjmp.
* include/setjmp.h (__libc_siglongjmp, __libc_longjmp): New hidden
prototypes.
* libio/iolibio.h (_IO_puts): New hidden prototype.
* libio/ioputs.c (_IO_puts): New hidden def.
* setjmp/longjmp.c (__libc_longjmp, __libc_siglongjmp): New hidden
defs.
* sysdeps/mach/hurd/sigwait.c (__sigwait): Call __libc_longjmp instead
of longjmp.
* sysdeps/mach/hurd/localplt.data: New file. * sysdeps/mach/hurd/localplt.data: New file.

View File

@ -32,7 +32,7 @@ __hurd_catch_signal (sigset_t sigset,
instance calling hurd_catch_signal again would then dump core. */ instance calling hurd_catch_signal again would then dump core. */
sigjmp_buf buf; sigjmp_buf buf;
void throw (int signo, long int sigcode, struct sigcontext *scp) void throw (int signo, long int sigcode, struct sigcontext *scp)
{ siglongjmp (buf, scp->sc_error ?: EGRATUITOUS); } { __libc_siglongjmp (buf, scp->sc_error ?: EGRATUITOUS); }
struct hurd_signal_preemptor preemptor = struct hurd_signal_preemptor preemptor =
{ {
@ -121,7 +121,7 @@ hurd_safe_memmove (void *dest, const void *src, size_t nbytes)
{ {
jmp_buf buf; jmp_buf buf;
void throw (int signo, long int sigcode, struct sigcontext *scp) void throw (int signo, long int sigcode, struct sigcontext *scp)
{ longjmp (buf, scp->sc_error ?: EGRATUITOUS); } { __libc_longjmp (buf, scp->sc_error ?: EGRATUITOUS); }
struct hurd_signal_preemptor src_preemptor = struct hurd_signal_preemptor src_preemptor =
{ {

View File

@ -152,7 +152,7 @@ faulted (void)
__libc_fatal ("BUG: unexpected fault in signal thread\n"); __libc_fatal ("BUG: unexpected fault in signal thread\n");
_hurdsig_fault_preemptor.signals = 0; _hurdsig_fault_preemptor.signals = 0;
longjmp (_hurdsig_fault_env, 1); __libc_longjmp (_hurdsig_fault_env, 1);
} }
static char faultstack[1024]; static char faultstack[1024];

View File

@ -24,6 +24,9 @@ extern void __libc_siglongjmp (sigjmp_buf env, int val)
extern void __libc_longjmp (sigjmp_buf env, int val) extern void __libc_longjmp (sigjmp_buf env, int val)
__attribute__ ((noreturn)); __attribute__ ((noreturn));
libc_hidden_proto (__libc_siglongjmp)
libc_hidden_proto (__libc_longjmp)
libc_hidden_proto (_setjmp) libc_hidden_proto (_setjmp)
libc_hidden_proto (__sigsetjmp) libc_hidden_proto (__sigsetjmp)

View File

@ -41,6 +41,7 @@ extern char* _IO_gets (char*);
extern void _IO_perror (const char*) __THROW; extern void _IO_perror (const char*) __THROW;
extern int _IO_printf (const char*, ...); extern int _IO_printf (const char*, ...);
extern int _IO_puts (const char*); extern int _IO_puts (const char*);
libc_hidden_proto (_IO_puts)
extern int _IO_scanf (const char*, ...); extern int _IO_scanf (const char*, ...);
extern void _IO_setbuffer (FILE *, char*, size_t) __THROW; extern void _IO_setbuffer (FILE *, char*, size_t) __THROW;
libc_hidden_proto (_IO_setbuffer) libc_hidden_proto (_IO_setbuffer)

View File

@ -46,3 +46,4 @@ _IO_puts (const char *str)
} }
weak_alias (_IO_puts, puts) weak_alias (_IO_puts, puts)
libc_hidden_def (_IO_puts)

View File

@ -46,4 +46,6 @@ strong_alias (__libc_siglongjmp, __libc_longjmp)
weak_alias (__libc_siglongjmp, _longjmp) weak_alias (__libc_siglongjmp, _longjmp)
weak_alias (__libc_siglongjmp, longjmp) weak_alias (__libc_siglongjmp, longjmp)
weak_alias (__libc_siglongjmp, siglongjmp) weak_alias (__libc_siglongjmp, siglongjmp)
libc_hidden_def (__libc_longjmp)
libc_hidden_def (__libc_siglongjmp)
#endif #endif

View File

@ -59,7 +59,7 @@ __sigwait (const sigset_t *set, int *sig)
handler (int sig) handler (int sig)
{ {
assert (sig == signo); assert (sig == signo);
longjmp (buf, 1); __libc_longjmp (buf, 1);
} }
wait = __mach_reply_port (); wait = __mach_reply_port ();