[PATCH/libiberty] fix build of gdb/binutils with clang.
Yunlian Jiang
yunlian@google.com
Wed May 20 23:27:00 GMT 2015
GCC bootstraps with this patch.
On Wed, May 20, 2015 at 12:54 PM, Ian Lance Taylor <iant@google.com> wrote:
> This is OK if GCC bootstraps.
>
> Thanks.
>
> Ian
>
> On Wed, May 20, 2015 at 11:25 AM, Yunlian Jiang <yunlian@google.com> wrote:
>> I have the following change to make libiberty compile with _GNU_SOURCE defined
>> and remove the declaration of asprintf in libiberty.h if
>> HAVE_DECL_ASPRINTF is not
>> defined.
>>
>> diff --git a/include/libiberty.h b/include/libiberty.h
>> index b33dd65..8e096a0 100644
>> --- a/include/libiberty.h
>> +++ b/include/libiberty.h
>> @@ -621,7 +621,7 @@ extern int pexecute (const char *, char * const *,
>> const char *,
>>
>> extern int pwait (int, int *, int);
>>
>> -#if !HAVE_DECL_ASPRINTF
>> +#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF
>> /* Like sprintf but provides a pointer to malloc'd storage, which must
>> be freed by the caller. */
>>
>> diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
>> index f06cc69..624420d 100644
>> --- a/libiberty/Makefile.in
>> +++ b/libiberty/Makefile.in
>> @@ -113,7 +113,8 @@ installcheck: installcheck-subdir
>>
>> INCDIR=$(srcdir)/$(MULTISRCTOP)../include
>>
>> -COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR)
>> $(HDEFINES) @ac_libiberty_warn_cflags@
>> +COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \
>> + $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE
>>
>> # Just to make sure we don't use a built-in rule with VPATH
>> .c.$(objext):
>> diff --git a/libiberty/configure b/libiberty/configure
>> index b06cab2..c6758b0 100755
>> --- a/libiberty/configure
>> +++ b/libiberty/configure
>> @@ -5130,6 +5130,9 @@ $as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h
>> fi
>>
>>
>> +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h
>> +
>> +
>> # Determine sizes of some types.
>> # The cast to long int works around a bug in the HP C Compiler
>> # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
>> diff --git a/libiberty/configure.ac b/libiberty/configure.ac
>> index 922aa86..9f2d661 100644
>> --- a/libiberty/configure.ac
>> +++ b/libiberty/configure.ac
>> @@ -272,6 +272,8 @@ AC_HEADER_TIME
>>
>> libiberty_AC_DECLARE_ERRNO
>>
>> +AC_DEFINE(_GNU_SOURCE)
>> +
>> # Determine sizes of some types.
>> AC_CHECK_SIZEOF([int])
>> AC_CHECK_SIZEOF([long])
>> diff --git a/libiberty/floatformat.c b/libiberty/floatformat.c
>> index 789fa05..4e73a2d 100644
>> --- a/libiberty/floatformat.c
>> +++ b/libiberty/floatformat.c
>> @@ -19,7 +19,9 @@ along with this program; if not, write to the Free Software
>> Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
>> 02110-1301, USA. */
>>
>> /* This is needed to pick up the NAN macro on some systems. */
>> +#ifndef _GNU_SOURCE
>> #define _GNU_SOURCE
>> +#endif
>>
>> #ifdef HAVE_CONFIG_H
>> #include "config.h"
>>
>> On Tue, May 19, 2015 at 11:15 AM, Ian Lance Taylor <iant@google.com> wrote:
>>> On Tue, May 19, 2015 at 11:08 AM, Yunlian Jiang <yunlian@google.com> wrote:
>>>>
>>>> I could do that and it make the compilation of libiberty passes.
>>>> However, I have some other problem when using clang to build gdb
>>>> because of libiberty.
>>>>
>>>> Some c file from other component may include 'libiberty.h' which contains
>>>> the following
>>>>
>>>> #if !HAVE_DECL_ASPRINTF
>>>> /* Like sprintf but provides a pointer to malloc'd storage, which must
>>>> be freed by the caller. */
>>>>
>>>> extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
>>>> #endif
>>>>
>>>> The HAVE_DECL_ASPRINTF is defined in config.h under libiberty directory.
>>>> If the other c file only includes libiberty.h and does not include the
>>>> libiberty/config.h and
>>>> at the same time, _GNU_SOURCE is defind, the same error happens.
>>>
>>> Probably if HAVE_DECL_ASPRINTF is not defined at all, we should not
>>> declare asprintf in libiberty.h.
>>>
>>> Ian
More information about the Gcc-patches
mailing list