Hi! On 6/19/20 8:22 AM, John Paul Adrian Glaubitz wrote: > The attached patch fixes the problem by adding an additional 16 bits padding > before the opslot member which causes the alignment of opslot to be 32 bits.
Attaching a patch with a better commit message for explanation. Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaub...@debian.org `. `' Freie Universitaet Berlin - glaub...@physik.fu-berlin.de `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
>From 8cd015a5cc230105bdcb8c33db80ef9f06b1c670 Mon Sep 17 00:00:00 2001 From: John Paul Adrian Glaubitz <glaub...@physik.fu-berlin.de> Date: Fri, 19 Jun 2020 08:33:33 +0200 Subject: [PATCH] op.h: Add additional padding to struct opslab to ensure proper alignment Perl crashes with a segmentation fault on m68k due to an alignment issue. On m68k, the natural alignment is 16 bits which causes the opslot member of "struct opslab" to be aligned at a 16-bit offset. On other 32-bit and 64-bit architectures, the natural alignment is at least 32 bits, so the offset is always guaranteed to be 32-bit aligned. Fix this by adding an additional 16 bits padding before the opslot member which causes the offset of oplab_slots to be 32-bit aligned. On architectures which have a natural alignment of at least 32 bits, the padding does not affect the alignment, offsets or struct size. --- op.h | 1 + 1 file changed, 1 insertion(+) diff --git a/op.h b/op.h index fc21f03cda..fb9f538e23 100644 --- a/op.h +++ b/op.h @@ -714,6 +714,7 @@ struct opslab { # ifdef PERL_DEBUG_READONLY_OPS bool opslab_readonly; # endif + U16 opslab_padding; /* padding to ensure proper alignment */ OPSLOT opslab_slots; /* slots begin here */ }; -- 2.27.0