[PATCH v7 2/5] nptl: Add __raise_direct

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Thu Apr 2 19:20:41 GMT 2026



On 02/04/26 16:13, Adhemerval Zanella Netto wrote:
> 
> 
> On 31/03/26 19:15, Samuel Thibault wrote:
>> Hello,
>>
>> Florian Weimer, le lun. 02 mars 2026 10:39:07 +0100, a ecrit:
>>> * Adhemerval Zanella:
>>>
>>>> diff --git a/sysdeps/htl/raise.c b/sysdeps/htl/raise.c
>>>> index 3200f91634..9c8bccc5a9 100644
>>>> --- a/sysdeps/htl/raise.c
>>>> +++ b/sysdeps/htl/raise.c
>>>> @@ -51,6 +51,9 @@ raise (int signo)
>>>>    else
>>>>      return __kill (__getpid (), signo);
>>>>  }
>>>> +/* TODO: __raise_direct should not change errno and work during process
>>>> +   startup.  */
>>>> +weak_alias (raise, __raise_direct)
>>>
>>> Sam, Guy, could you help with this?
>>
>> This should be doing it:
>>
>> diff --git a/include/signal.h b/include/signal.h
>> index 73f18dddd7..9c85e5bc84 100644
>> --- a/include/signal.h
>> +++ b/include/signal.h
>> @@ -21,6 +21,8 @@ extern const char * const __sys_sigabbrev[_NSIG] attribute_hidden;
>>  extern __sighandler_t __bsd_signal (int __sig, __sighandler_t __handler);
>>  extern int __kill (__pid_t __pid, int __sig);
>>  libc_hidden_proto (__kill)
>> +/* Similar to kill, but does not set errno.  */
>> +extern int __kill_direct (__pid_t __pid, int __sig) attribute_hidden;
>>  extern int __sigaction (int __sig, const struct sigaction *__restrict __act,
>>  			struct sigaction *__restrict __oact);
>>  libc_hidden_proto (__sigaction)
>> @@ -65,6 +67,9 @@ extern int __xpg_sigpause (int sig);
>>  /* Allocate real-time signal with highest/lowest available priority.  */
>>  extern int __libc_allocate_rtsig (int __high);
>>  
>> +/* Similar to raise, but does not set errno.  */
>> +extern int __raise_direct (int signo) attribute_hidden;
>> +
>>  #  if IS_IN (rtld)
>>  extern __typeof (__sigaction) __sigaction attribute_hidden;
>>  extern __typeof (__libc_sigaction) __libc_sigaction attribute_hidden;
>> diff --git a/sysdeps/htl/raise.c b/sysdeps/htl/raise.c
>> index 3200f91634..7e0d2d09ee 100644
>> --- a/sysdeps/htl/raise.c
>> +++ b/sysdeps/htl/raise.c
>> @@ -54,3 +54,9 @@ raise (int signo)
>>  
>>  libc_hidden_def (raise)
>>  weak_alias (raise, gsignal)
>> +
>> +int
>> +__raise_direct (int signo)
>> +{
>> +  return __kill_direct (__getpid (), signo);
>> +}
>> diff --git a/sysdeps/mach/hurd/kill.c b/sysdeps/mach/hurd/kill.c
>> index 630a87243b..e29662004c 100644
>> --- a/sysdeps/mach/hurd/kill.c
>> +++ b/sysdeps/mach/hurd/kill.c
>> @@ -29,7 +29,7 @@
>>     send SIG to all processes in the current process's process group.
>>     If PID is < -1, send SIG to all processes in process group - PID.  */
>>  int
>> -__kill (pid_t pid, int sig)
>> +__kill_direct (pid_t pid, int sig)
>>  {
>>    int delivered = 0;		/* Set when we deliver any signal.  */
>>    error_t err;
>> @@ -153,7 +153,13 @@ __kill (pid_t pid, int sig)
>>       every kill_pid call failed with ESRCH, meaning all the processes in
>>       the pgrp died between proc_getpgrppids and kill_pid; in that case we
>>       fail with ESRCH.  */
>> -  return delivered ? 0 : __hurd_fail (err ?: ESRCH);
>> +  return delivered ? 0 : (err ?: ESRCH);
>> +}
>> +
>> +int
>> +__kill (pid_t pid, int sig)
>> +{
>> +  return __hurd_fail (__kill_direct (pid, sig));
>>  }
>>  
>>  libc_hidden_def (__kill)
> 

In fact, this is really an i386 Linux issue and I have removed all the Hurd bits
on the v8 [1].  So no need to add any Hurd-specific changes.

[1] https://patchwork.sourceware.org/project/glibc/list/?series=58945



More information about the Libc-alpha mailing list