Bruce,

The current AIX stdlib.h header file uses #define.  This is exactly
what I am trying to remove with the fixincludes patch.

#define malloc __linux_malloc

needs to be replaced with

extern void *malloc(size_t) __asm__("__linux_malloc");

and so forth.

Thanks, David

On Thu, Jun 9, 2016 at 5:18 PM, Bruce Korb <bk...@gnu.org> wrote:
> It ought to work:
>
> $ for f in m re c v ; do printf '#define %salloc __linux_%salloc\n' $f $f
>> done > foo.h
> $ grep -E '[ \t](m|re|c|v)alloc +__linux_\1alloc' foo.h
> #define malloc __linux_malloc
> #define realloc __linux_realloc
> #define calloc __linux_calloc
> #define valloc __linux_valloc
>
> and your "%1" is then "m" or "re" or "c" or "v".
> I can't test right now tho.
>
> On Thu, Jun 9, 2016 at 10:49 AM, David Edelsohn <dje....@gmail.com> wrote:
>>
>> Hi, Bruce!
>>
>> I thought about a regex, but the aliases require a full function
>> signature and the original, narrow context does not provide a function
>> signature.  If it was just alias XXXalloc as __linux_XXXalloc, it
>> would be more straight forward.  If there's a convenient way to add
>> the other information, I'm eager to learn.
>>
>> Thanks, David
>>
>> On Thu, Jun 9, 2016 at 1:44 PM, Bruce Korb <bk...@gnu.org> wrote:
>> > He's retired, but he ain't dead.
>> > I think these could be accomplished with a single fix.
>> > Please try a regex expression in the selection and utilize the selection
>> > in
>> > the replacement.
>> > I'll look at it when I have time (give me a few days)
>> >
>> > On Thu, Jun 9, 2016 at 10:29 AM, Jeff Law <l...@redhat.com> wrote:
>> >>
>> >> On 06/09/2016 11:25 AM, David Edelsohn wrote:
>> >>>
>> >>> AIX has added variants of malloc, realloc, calloc and valloc with
>> >>> greater compatibility with Linux semantics, especially for NULL
>> >>> addresses.  The variants are declared in stdlib.h and use #define to
>> >>> override the normal definition if _LINUX_SOURCE_COMPAT is defined,
>> >>> e.g.,
>> >>>
>> >>> #define malloc __linux_malloc
>> >>> #define calloc __linux_calloc
>> >>> #define realloc __linux_realloc
>> >>> #define valloc __linux_valloc
>> >>>
>> >>> libstdc++-v3 cstdlib specifically undefines a number of stdlib.h
>> >>> macros,
>> >>> e.g.,
>> >>>
>> >>> // Get rid of those macros defined in <stdlib.h> in lieu of real
>> >>> functions.
>> >>> ...
>> >>> #undef malloc
>> >>> #undef realloc
>> >>>
>> >>> C++ applications on AIX, especially users of BOOST that include
>> >>> cstdlib, encounter unexpected behavior when the definition of malloc
>> >>> changes from the expected / requested version.
>> >>>
>> >>> The following patch updates fixincludes to correct the AIX stdlib.h
>> >>> header by converting the #define to GCC asm aliases.  I created a
>> >>> separate fix for each definition because the order is not guaranteed.
>> >>>
>> >>> Bootstrapped on powerpc-ibm-aix7.1.0.0.  This fixes a recent node.js
>> >>> build failure on AIX due to additional dependence on BOOST.
>> >>>
>> >>> Okay for trunk, GCC 6 and GCC 5?
>> >>>
>> >>> Thanks, David
>> >>>
>> >>> * inclhack.def (aix_stdlib_malloc): New fix.
>> >>> (aix_stdlib_realloc): New fix.
>> >>> (aix_stdlib_calloc): New fix.
>> >>> (aix_stdlib_valloc): New fix.
>> >>> * fixincl.x: Regenerate.
>> >>> * test/base/stdlib.h [AIX_STDLIB_MALLOC]: New test.
>> >>> [AIX_STDLIB_REALLOC]: New test.
>> >>> [AIX_STDLIB_CALLOC]: New test.
>> >>> [AIX_STDLIB_VALLOC]: New test.
>> >>
>> >> Wow, fixincludes....    I'm not even sure if Bruce is around anymore...
>> >>
>> >> GIven these are conditional on mach= *-*-aix*, I think you can
>> >> self-approve them.
>> >>
>> >> jeff
>> >>
>> >
>
>

Reply via email to