[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#18368: HYBRID_MALLOC broke AIX build

From: Paul Eggert
Subject: bug#18368: HYBRID_MALLOC broke AIX build
Date: Sat, 30 Aug 2014 15:50:30 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0

The trunk's recent HYBRID_MALLOC changes broke the build on AIX. Here are the first couple of compile-time diagnostics:

xlc -c  -Demacs  -I. -I. -I../lib -I../lib -g3 -O  gmalloc.c
"/usr/include/unistd.h", line 201.17: 1506-343 (S) Redeclaration of lseek64 differs from previous declaration on line 199 of "/usr/include/unistd.h". "/usr/include/unistd.h", line 201.17: 1506-050 (I) Return type "long long" in redeclaration is not compatible with the previous return type "long".

The culprit is this part of gmalloc.c:

/* If HYBRID_MALLOC is defined in config.h, then conf_post.h #defines
   malloc and friends as macros before including stdlib.h.  In this
   file we will need the prototypes for the system malloc, so we must
   include stdlib.h before config.h.  And we have to do this
   unconditionally, since HYBRID_MALLOC hasn't been defined yet.  */
#include <stdlib.h>

#include <config.h>

This doesn't work, as <config.h> must come first for various reasons; I suspect the AIX breakage is just the tip of the iceberg.

One possible fix is to declare the system malloc directly, if HYBRID_MALLOC is defined. Another one, which might be safer, is to modify config.h to capture the system malloc before it's redefined.

Since AIX does not define HYBRID_MALLOC, I have temporarily worked around the problem on my AIX host by using this in gmalloc.c:

#include <stdlib.h>

#include <config.h>

#include <stdlib.h>

but I suspect this is not the right way to fix the problems on platforms that need HYBRID_MALLOC but have AIX-like problems with redefinitions.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]