Bug#754125: [rt.cpan.org #97035] libimager-perl: FTBFS on s390x

Aurelien Jarno aurelien at aurel32.net
Sun Jul 13 18:12:38 UTC 2014


On Sun, Jul 13, 2014 at 09:11:57AM -0400, gregor herrmann via RT wrote:
> <URL: https://rt.cpan.org/Ticket/Display.html?id=97035 >
> 
> On Mon Jul 07 18:30:19 2014, tony at develop-help.com wrote:
> 
> (Sorry for the late reply, our bug forwarding script didn't set requestor or
> cc, so I didn't see your reply.)
> 
> > This is a segmentation fault, could I please get a backtrace from it?
> > 
> > $ perl Makefile.PL OPTIMIZE=-g
> > $ make
> > $ cd PNG
> > $ gdb --args perl -Mblib t/10png.t
> > ...
> > gdb> bt
> 
> Unfortunately this doesn't work in the s390x chroot (while it works fine on
> my local machine):
> 
> $ gdb --args perl -Mblib t/10png.t
> GNU gdb (Debian 7.7.1-2) 7.7.1
> [..]
> Reading symbols from perl...(no debugging symbols found)...done.
> (gdb) run
> Starting program: /usr/bin/perl -Mblib t/10png.t
> Couldn't write registers: Invalid argument.
> (gdb) 
> 
> Same for every program I try to run under gdb. -- Ah, seems to be
> https://bugs.debian.org/728705
> 
> So let's try the workaround:
> 
> $ ulimit -c unlimited
> $ perl -Mblib t/10png.t
> 1..251
> ok 1 - must have png format
> # Library version 10250
> ok 2 - write
> ok 3 - read png
> # png average mean square pixel difference: 0
> ok 4 - compare saved and original images
> ok 5 - i_xres: 300
> ok 6 - i_yres: 200
> ok 7 - i_format: png
> ok 8 - write tranparent
> ok 9 - read transparent
> # png average mean square pixel difference: 0
> ok 10 - compare saved and original transparent
> ok 11 - read transparent paletted image
> ok 12 - read palette_out image
> ok 13 - images the same
> ok 14 - set width limit 149
> ok 15 - should fail read due to size limits
> # file size limit - image width of 150 exceeds limit of 149
> ok 16 - check message
> ok 17 - set height limit 149
> ok 18 - should fail read due to size limits
> # file size limit - image height of 150 exceeds limit of 149
> ok 19 - check message
> ok 20 - set width limit 150
> ok 21 - should succeed - just inside width limit
> ok 22 - set height limit 150
> ok 23 - should succeed - just inside height limit
> ok 24 - set bytes limit 67499
> ok 25 - should fail - too many bytes
> # file size limit - storage size of 67500 exceeds limit of 67499
> ok 26 - check error message
> ok 27 - set bytes limit 67500
> ok 28 - should succeed - just inside bytes limit
> ok 29 - check the image was loaded
> ok 30 - check image matches
> ok 31 - test write_multi() callback
> ok 32 - test write_multi() callback failure
> # closecb called
> ok 33 - check failing close fails
> ok 34 - check error message
> ok 35 - check png in read types
> ok 36 - check png in write types
> Segmentation fault (core dumped)
> 
> $ gdb perl core
> [..]
> Core was generated by `perl -Mblib t/10png.t'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0  0x00000000fcef2068 in ?? ()
> (gdb) bt
> #0  0x00000000fcef2068 in ?? ()
> #1  0x000003fffcee132e in png_error () from /lib/s390x-linux-gnu/libpng12.so.0
> #2  0x000003fffcee169a in png_chunk_error () from /lib/s390x-linux-gnu/libpng12.so.0
> #3  0x000003fffcecb480 in ?? () from /lib/s390x-linux-gnu/libpng12.so.0
> #4  0x000003fffcecb84a in ?? () from /lib/s390x-linux-gnu/libpng12.so.0
> #5  0x000003fffced56cc in png_read_info () from /lib/s390x-linux-gnu/libpng12.so.0
> #6  0x000003fffcef2d66 in i_readpng_wiol (ig=0x82af2840, flags=0) at impng.c:362
> #7  0x000003fffcef0da4 in XS_Imager__File__PNG_i_readpng_wiol (my_perl=0x822a5010, cv=0x82aba5a0) at PNG.c:195
> #8  0x000003fffd37a4fa in Perl_pp_entersub () from /usr/lib/libperl.so.5.18
> #9  0x000003fffd3713a8 in Perl_runops_standard () from /usr/lib/libperl.so.5.18
> #10 0x000003fffd2f7d3a in perl_run () from /usr/lib/libperl.so.5.18
> #11 0x0000000080000fa2 in main ()
> 
> With perl-debug installed:
> 
> (gdb) bt
> #0  0x00000000fcef2068 in ?? ()
> #1  0x000003fffcee132e in png_error () from /lib/s390x-linux-gnu/libpng12.so.0
> #2  0x000003fffcee169a in png_chunk_error () from /lib/s390x-linux-gnu/libpng12.so.0
> #3  0x000003fffcecb480 in ?? () from /lib/s390x-linux-gnu/libpng12.so.0
> #4  0x000003fffcecb84a in ?? () from /lib/s390x-linux-gnu/libpng12.so.0
> #5  0x000003fffced56cc in png_read_info () from /lib/s390x-linux-gnu/libpng12.so.0
> #6  0x000003fffcef2d66 in i_readpng_wiol (ig=0x82af2840, flags=0) at impng.c:362
> #7  0x000003fffcef0da4 in XS_Imager__File__PNG_i_readpng_wiol (my_perl=0x822a5010, cv=0x82aba5a0) at PNG.c:195
> #8  0x000003fffd37a4fa in Perl_pp_entersub (my_perl=0x822a5010) at pp_hot.c:2888
> #9  0x000003fffd3713a8 in Perl_runops_standard (my_perl=0x822a5010) at run.c:42
> #10 0x000003fffd2f7d3a in S_run_body (oldscope=1, my_perl=0x822a5010) at perl.c:2467
> #11 perl_run (my_perl=0x822a5010) at perl.c:2383
> #12 0x0000000080000fa2 in main (argc=3, argv=0x3ffffb4dcc8, env=0x3ffffb4dce8) at perlmain.c:114

A quick debugging seems to show the problem is on the libpng side.
Rebuilding it makes the problem disappear. It looks like it is due to
the same issue we are doing this transition, ie the libpng structure
expose a jmp_buf structure. I don't really now what to do...

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien at aurel32.net                 http://www.aurel32.net



More information about the pkg-perl-maintainers mailing list