New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SIGUNUSED removal in glibc 2.26 changes PL_sig_name / SIG_SIZE #16152
Comments
From @ntyniAs discussed in a change in glibc 2.26, presumably The problem seems to be that Perl's global array PL_sig_name[] and It looks to me like Perl builds on glibc could pad PL_sig_name[] on the For bleadperl / 5.27, where there are no ABI guarantees, it seems Similar code seems to be in IO::AIO, Coro and Ev, see s_signum() Perl Info
|
From @jkeenanOn Sat, 16 Sep 2017 18:01:56 GMT, ntyni@debian.org wrote:
Async::Interrupt is maintained upstream on CPAN; it is not maintained by Perl 5 Porters. Can you be a bit more specific as to what changes you want in the core distribution?
From 'man glibc' on Linux I read: ##### So, is this problems specific to Linux?
Those are also maintained upstream on CPAN. Thank you very much. -- |
The RT System itself - Status changed from 'new' to 'open' |
From @ntyniOn Sat, Sep 16, 2017 at 01:26:24PM -0700, James E Keenan via RT wrote:
Of course.
I want stable Perl releases to have the same binary interface whether I suggest that this could be fixed in maint-5.* by adding a placeholder I also suggest that bleadperl could ignore SIGUNUSED on glibc < 2.26, I can look at implementing these if this is considered feasible and I suppose an alternative to the above approach would be to declare that I would not be very happy with such an outcome, as it would cause pain
Essentially yes, although there are a some other minority platforms such -- |
From @LeontOn Sun, Sep 17, 2017 at 10:25 AM, Niko Tyni <ntyni@debian.org> wrote:
This is one of those cases where not having described much of our code
The patch to the modules would be little more than removing code; they'd Leon |
From @tonycozOn Sat, 16 Sep 2017 11:01:56 -0700, ntyni@debian.org wrote:
The check would need to be more complex than that - other platforms may not provide SIGUNUSED (darwin doesn't) I think workaround for this belongs downstream - in Debian/Ubuntu - the incompatibility was introduced by a change in the platform. Building with something like: ./Configure -des -Dusedevel -Dsig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' -Dsig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' (and probably sig_name and sig_count too) though ugly should retain binary compatibility.
The real fix for blead would probably be to make SIG_SIZE a variable, or for code that iterates over sig_num[] to terminate on the 0 at the end.
s_signum() itself has a bug: $ perl -MAsync::Interrupt -le 'print Async::Interrupt::sig2num("POLL")' (Debian packaged x86_64 perl and module) Tony |
From @ntyniOn Sun, Sep 17, 2017 at 08:47:43PM -0700, Tony Cook via RT wrote:
Sure. Sorry for cutting corners there.
Okay. I can see the point. I note that Fedora etc. are probably going
Urgh, but sure. We'll look at the options on the Debian side.
Making SIG_SIZE a variable on the Perl core side works for me and would Fixing the 'consumers' would be ideal of course. Is there something
My code searches also turned up
Indeed. AIUI, it should be looking the signal number up in PL_sig_num[] I'll try to push for fixing the s_signum() implementations one way or Thanks for looking at this, |
From @doughera88On Sun, Sep 17, 2017 at 11:25:08AM +0300, Niko Tyni wrote:
In general, Perl can't guarantee that the same binary interface is
These both sound like sensible workarounds.
I don't think I would put it that way. It's more that perl is fiddling
I think I understand the pain, but I fear that's ultimately the only sure Still I agree that such breakage is rare, and there is value in working -- |
From @tonycozOn Mon, 18 Sep 2017 10:46:17 -0700, ntyni@debian.org wrote:
Making SIG_SIZE a variable would further break Async::Interrupt, since it contains: static async_t *sig_async [SIG_SIZE]; which would fail to compile if SIG_SIZE isn't a compile-time constant. So I don't think there's anything else we can do to handle this. Tony |
From @tonycozOn Tue, 26 Sep 2017 21:27:42 -0700, tonyc wrote:
So closing. Tony |
@tonycoz - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#132105 (status was 'resolved')
Searchable as RT132105$
The text was updated successfully, but these errors were encountered: