This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH/libiberty] fix build of gdb/binutils with clang.
- From: Yunlian Jiang <yunlian at google dot com>
- To: Ian Lance Taylor <iant at google dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 20 May 2015 11:25:58 -0700
- Subject: Re: [PATCH/libiberty] fix build of gdb/binutils with clang.
- Authentication-results: sourceware.org; auth=none
- References: <CAMsPy2vps4WX9ax-JfPCGdWbRw=deyu+OuqpgojSJFSe6e+HHg at mail dot gmail dot com> <CAKOQZ8wXKGAxKgcetJxPPWXgxaeNrbLf-E_o6Tz2zbjYF6VfQg at mail dot gmail dot com> <CAMsPy2v+MduooHaBA8hhiTcrq_1NeQm1X-LnOrMEoouUQii4kg at mail dot gmail dot com> <CAKOQZ8z7ME_yEbW3YgMWCLyRVz+w3wjYz7LNayBBBmC1atFYHA at mail dot gmail dot com> <CAMsPy2s2A8U-vTE8u9y+P+xmESKMSuHD=6RV798KNEQKbZdXUg at mail dot gmail dot com> <CAKOQZ8ybeY+6bC0XXVy4Ge3QPEcg6XcvhwBuXQjHhLRTMabm8g at mail dot gmail dot com> <CAMsPy2s9vwa+Y3fR4Xc8k5jnJG__jwWAbF2y0bbSfmz0bEYfYQ at mail dot gmail dot com> <CAKOQZ8zw5TUQ5uP60CuSrAokqohR1_Aq=F5-cGPYqSnL--jPzQ at mail dot gmail dot com> <CAMsPy2s5_mE6QCvXj5DEQxGGK6XhpPUMbzxQqqzEOd+f3gaEjg at mail dot gmail dot com> <CAKOQZ8xyg++19bQc1bUF4BnVq1T6GS6x3YdFJWLs3ELhTah0Zw at mail dot gmail dot com>
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