Subject: bug#18368: closed (Re: bug#18368: HYBRID_MALLOC broke AIX build)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 31 Aug 2014 02:43:03 +0000

Your bug report

#18368: HYBRID_MALLOC broke AIX build

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
18368: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18368
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#18368: HYBRID_MALLOC broke AIX build
From: Ken Brown <[email-masked]>
To: Paul Eggert <[email-masked]>, [email-masked]
Date: Sat, 30 Aug 2014 22:42:21 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.5

On 8/30/2014 10:21 PM, Paul Eggert wrote:
> Thanks, I verified that that patch works on AIX.

I've installed the patch in the trunk as bzr revision 117787.

Ken

Subject: HYBRID_MALLOC broke AIX build
From: Paul Eggert <[email-masked]>
To: Emacs bug reports and feature requests <[email-masked]>
Cc: Ken Brown <[email-masked]>
Date: Sat, 30 Aug 2014 15:50:30 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

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:

#ifdef HYBRID_MALLOC
#include <stdlib.h>
#endif

#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.