Source: pywavelets Version: 0.5.1-1.1 Severity: important User: debian-...@lists.debian.org Usertags: alignment
Hi! I've been doing a full rebuild of the Debian archive, building all source packages targeting armel and armhf using arm64 hardware. We are planning in future to move all of our 32-bit armel/armhf builds to using arm64 machines, so this rebuild is to identify packages that might have problems with this configuration. A feature of the arm64 kernel is that it does *not* support fixing up code with broken alignment, so code that might have built and run OK on our older armel/armhf build machines due to kernel fixups will now fail. When building your package, I've found a bus error (aka alignment fault). The full log is online at https://www.einval.com/debian/arm/rebuild-logs/armel/FAIL/pywavelets_0.5.1-1.1_armel.log for reference I've done a quick bit of debugging to find the source of the bug. Here's a gdb stacktrace and variable printout to demonstrate the problem. (sid-armel)steve@maul:~/debian/build/pywavelets/pywavelets-0.5.1$ gdb /usr/bin/python2.7 core ... Reading symbols from /usr/bin/python2.7...(no debugging symbols found)...done. [New LWP 3291] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/arm-linux-gnueabi/libthread_db.so.1". Core was generated by `python2.7 -c import sys ; sys.path.insert(0, '/home/steve/debian/build/pywavele'. Program terminated with signal SIGBUS, Bus error. #0 double_downcoef_axis (input=0x1011b90, input_info=..., output=0xfe4500, output_info=..., wavelet=0x1161b78, axis=0, coef=COEF_APPROX, dwt_mode=MODE_SYMMETRIC, swt_level=0, transform=DWT_TRANSFORM) at pywt/_extensions/c/wt.template.c:100 100 temp_input[j] = *(TYPE *)(((char *) input) + input_offset (gdb) list 95 96 // Copy to temporary input if necessary 97 if (make_temp_input) 98 for (j = 0; j < input_info.shape[axis]; ++j) 99 // Offsets are byte offsets, to need to cast to char and back 100 temp_input[j] = *(TYPE *)(((char *) input) + input_offset 101 + j * input_info.strides[axis]); 102 103 // Select temporary or direct output and input 104 input_row = make_temp_input ? temp_input (gdb) p input $1 = (const double * const restrict) 0x1011b90 (gdb) p input_offset $2 = <optimized out> (gdb) p j $3 = <optimized out> This is a classic pattern for alignment problems. You can't just cast things like this and expect them to work safely. -- System Information: Debian Release: 9.6 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable-debug'), (500, 'stable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.9.0-8-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), LANGUAGE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) _______________________________________________ Python-modules-team mailing list Python-modules-team@alioth-lists.debian.net https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/python-modules-team