The attached patch changes the malloc ABI alignment to 128 bits on hppa64 and 
hppa-linux.
This suppresses the over-aligned new warning seen on linux.  On hppa64, we now 
match the
alignment for long double.

The default definition of MALLOC_ABI_ALIGNMENT is 32.  This is wrong for 
PA-RISC, so I back ported
the change and BIGGEST_ALIGNMENT comment updates to the gcc-5 and gcc-6 
branches.

Tested on hppa-unknown-linux-gnu, hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11.

Committed to trunk, gcc-5 and gcc-6 branches.

Dave
--
John David Anglin       dave.ang...@bell.net


2016-10-29  John David Anglin  <dang...@gcc.gnu.org>

        * config/pa/pa.h (BIGGEST_ALIGNMENT): Adjust comment.
        (MALLOC_ABI_ALIGNMENT): Define to 128 on all targets except SOM.
        Adjust comment.

Index: config/pa/pa.h
===================================================================
--- config/pa/pa.h      (revision 241546)
+++ config/pa/pa.h      (working copy)
@@ -295,17 +295,19 @@
 /* No data type wants to be aligned rounder than this.  The long double
    type has 16-byte alignment on the 64-bit target even though it was never
    implemented in hardware.  The software implementation only needs 8-byte
-   alignment.  This is to match the HP compilers.  */
+   alignment.  This matches the biggest alignment of the HP compilers.  */
 #define BIGGEST_ALIGNMENT (2 * BITS_PER_WORD)
 
 /* Alignment, in bits, a C conformant malloc implementation has to provide.
    The HP-UX malloc implementation provides a default alignment of 8 bytes.
-   This can be increased with mallopt.  The glibc implementation also provides
-   8-byte alignment.  Note that this isn't enough for various POSIX types such
-   as pthread_mutex_t.  However, since we no longer need the 16-byte alignment
-   for atomic operations, we ignore the nominal alignment specified for these
-   types.  The same is true for long double on 64-bit HP-UX.  */
-#define MALLOC_ABI_ALIGNMENT (64)
+   It should be 16 bytes on the 64-bit target since long double has 16-byte
+   alignment.  It can be increased with mallopt but it's non critical since
+   long double was never implemented in hardware.  The glibc implementation
+   currently provides 8-byte alignment.  It should be 16 bytes since various
+   POSIX types such as pthread_mutex_t require 16-byte alignment.  Again,
+   this is non critical since 16-byte alignment is no longer needed for
+   atomic operations.  */
+#define MALLOC_ABI_ALIGNMENT (TARGET_SOM ? 64 : 128)
 
 /* Get around hp-ux assembler bug, and make strcpy of constants fast.  */
 #define CONSTANT_ALIGNMENT(EXP, ALIGN)         \

Reply via email to