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

Ao Qi aoqi at loongson.cn
Mon Dec 17 08:50:30 UTC 2018


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