[PATCH] 8170639: [Linux] jsig is limited to a maximum of 64 signals

David Holmes david.holmes at oracle.com
Mon Dec 17 20:32:19 UTC 2018


On 17/12/2018 9:48 pm, Ao Qi wrote:
> Hi David Holmes,
> 
> Thanks for your reply. It makes sense. Is it possible to create
> another bug ID to fix the problem?

I'd prefer to see this fixed properly than point fixed on linux for an 
unsupported platform.

Thanks,
David

> Cheers,
> Ao Qi
> 
> On Mon, Dec 17, 2018 at 7:30 PM David Holmes <david.holmes at oracle.com> wrote:
>>
>> Thanks for reminding me about the rest of the discussion. The point of
>> the RFE I filed was to examine if we could get a consolidated POSIX
>> version using sigset_t. I'd rather see that than a point fix for Linux.
>>
>> Thanks,
>> David
>>
>> On 17/12/2018 6:50 pm, Ao Qi wrote:
>>> Hi David Holmes,
>>>
>>> I am not sure what is the specific issue of "NSIG not being defined".
>>> Do you mean the issue mentioned in "but I found that NSIG was missing
>>> from signal.h on some architectures, mips being among them"[1]? If
>>> yes, James Cowgill answered this in [2]. I check it on MIPS, NSIG is
>>> defined in signal.h and it is 128.
>>>
>>> Cheers,
>>> Ao Qi
>>>
>>> [1] http://mail.openjdk.java.net/pipermail/hotspot-dev/2016-November/025401.html
>>> [2] http://mail.openjdk.java.net/pipermail/hotspot-dev/2016-December/025416.html
>>>
>>> On Mon, Dec 17, 2018 at 8:02 AM David Holmes <david.holmes at oracle.com> wrote:
>>>>
>>>> Hi,
>>>>
>>>> Was the issue of NSIG not being defined resolved?
>>>>
>>>> Thanks,
>>>> David
>>>>
>>>> On 14/12/2018 10:23 pm, Ao Qi wrote:
>>>>> Hi all,
>>>>>
>>>>> Zero does not build on Linux MIPS (actually all Linux of NSIG > 64)
>>>>> since OpenJDK 9, because NISG is 128 on MIPS and can not be encoded in
>>>>> uint64_t sigs. James Cowgill from Debian tried to push a patch fixing
>>>>> this[1] but it seems he failed. I would like to try again to request
>>>>> fixing this in http://hg.openjdk.java.net/jdk/jdk. This was fixed in
>>>>> AIX implementation.
>>>>>
>>>>> After applying this patch, zero can be built on MIPS (Debian testing).
>>>>> I've run the jtreg tests [2] on x86 Linux.
>>>>>
>>>>> [1] http://mail.openjdk.java.net/pipermail/hotspot-dev/2016-November/025399.html
>>>>> [2] https://download.java.net/openjdk/testresults/12/docs/howtoruntests.html
>>>>>
>>>>> Cheers,
>>>>> Ao Qi
>>>>>
>>>>> $ hg export -r 52869
>>>>> # HG changeset patch
>>>>> # User aoqi
>>>>> # Date 1544089853 0
>>>>> #      Thu Dec 06 09:50:53 2018 +0000
>>>>> # Node ID 3eea22b79dc3a4bf26616bde1acb587e3f56e6fe
>>>>> # Parent  b4982a22926b4ddf1a7b1f770e4d42ce8c1dd575
>>>>> 8170639: [Linux] jsig is limited to a maximum of 64 signals
>>>>>
>>>>> diff -r b4982a22926b -r 3eea22b79dc3 src/hotspot/os/linux/os_linux.cpp
>>>>> --- a/src/hotspot/os/linux/os_linux.cpp Thu Dec 06 11:54:39 2018 +0530
>>>>> +++ b/src/hotspot/os/linux/os_linux.cpp Thu Dec 06 09:50:53 2018 +0000
>>>>> @@ -4434,10 +4434,7 @@
>>>>>
>>>>>     // For signal-chaining
>>>>>     struct sigaction sigact[NSIG];
>>>>> -uint64_t sigs = 0;
>>>>> -#if (64 < NSIG-1)
>>>>> -#error "Not all signals can be encoded in sigs. Adapt its type!"
>>>>> -#endif
>>>>> +sigset_t sigs;
>>>>>     bool os::Linux::libjsig_is_loaded = false;
>>>>>     typedef struct sigaction *(*get_signal_t)(int);
>>>>>     get_signal_t os::Linux::get_signal_action = NULL;
>>>>> @@ -4516,7 +4513,7 @@
>>>>>     }
>>>>>
>>>>>     struct sigaction* os::Linux::get_preinstalled_handler(int sig) {
>>>>> -  if ((((uint64_t)1 << (sig-1)) & sigs) != 0) {
>>>>> +  if (sigismember(&sigs, sig)) {
>>>>>         return &sigact[sig];
>>>>>       }
>>>>>       return NULL;
>>>>> @@ -4525,7 +4522,7 @@
>>>>>     void os::Linux::save_preinstalled_handler(int sig, struct sigaction& oldAct) {
>>>>>       assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
>>>>>       sigact[sig] = oldAct;
>>>>> -  sigs |= (uint64_t)1 << (sig-1);
>>>>> +  sigaddset(&sigs, sig);
>>>>>     }
>>>>>
>>>>>     // for diagnostic
>>>>> @@ -4616,6 +4613,7 @@
>>>>>           (*begin_signal_setting)();
>>>>>         }
>>>>>
>>>>> +    ::sigemptyset(&sigs);
>>>>>         set_signal_handler(SIGSEGV, true);
>>>>>         set_signal_handler(SIGPIPE, true);
>>>>>         set_signal_handler(SIGBUS, true);
>>>>>


More information about the hotspot-runtime-dev mailing list