diff options
author | Nicholas Clark <nick@ccl4.org> | 2013-05-23 13:46:05 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2013-05-24 21:24:38 +0200 |
commit | c2a50ddb1bed657609ef5e85c7ac5c0bfcaa2c9a (patch) | |
tree | ff9c078ad470966531f5e91f7917e7dc2bb8698e /cpan/Module-Build/lib/Module/Build/Notes.pm | |
parent | 1a72e160c417a912e69c85d4171a406daa388a27 (diff) | |
download | perl-c2a50ddb1bed657609ef5e85c7ac5c0bfcaa2c9a.tar.gz |
Ensure that the IV in struct pmop (for ithreads) is aligned properly.
The members of struct pmop vary between ithreads and non-ithreads builds.
For ithreads, an IV is used for op_pmoffset. For 32 bit platforms built
with -Duse64bitint, IVs are 64 bits, but pointers (and all other members of
all OP structures) are 32 bits, hence on 32 bit platforms OP structure sizes
can be an odd multiple of 4 bytes. Since the swap to the slab allocator,
this is causing problems on architectures where 8 byte IVs have to be 8
byte aligned, notably sparcs. The long-term fix is to replace the IV with
an appropriate 32 bit type, as it is being used for an array index. However,
for maint-5.18 we need a work around which doesn't change the public headers
and ideally doesn't impose a large speed or memory penalty.
Hence for now, simply avoid using the slab allocator when allocating a
struct pmop. Only do this for 32 bit platforms build with 8 byte IVs and
ithreads.
This is the interim fix for RT #118055.
Diffstat (limited to 'cpan/Module-Build/lib/Module/Build/Notes.pm')
0 files changed, 0 insertions, 0 deletions