This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC 2/2] Move gdb's xmalloc and friends to new file


Tom,

Looks like this breaks the building of alloc-ipa.o when using Make 3.81
I’ve tried this on a few different machines.

g++ -x c++  -g -O2    -I. -I../../../src/binutils-gdb/gdb/gdbserver -I../../../src/binutils-gdb/gdb/gdbserver/../regformats -I../../../src/binutils-gdb/gdb/gdbserver/.. -I../../../src/binutils-gdb/gdb/gdbserver/../../include -I../../../src/binutils-gdb/gdb/gdbserver/../../gnulib/import -Ibuild-gnulib-gdbserver/import  -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wformat -Wformat-nonliteral -Werror -DGDBSERVER  -DCONFIG_UST_GDB_INTEGRATION -Drpl_strerror=strerror -fPIC -DIN_PROCESS_AGENT -fvisibility=hidden -c -o alloc-ipa.o -MT alloc-ipa.o -MMD -MP -MF ./.deps/alloc-ipa.Tpo `echo " -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wformat -Wformat-nonliteral " | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"`
g++: warning: ‘-x c++’ after last input file has no effect
g++: fatal error: no input files
compilation terminated.
make-3.81[4]: *** [alloc-ipa.o] Error 1
make-3.81[4]: *** Waiting for unfinished jobs....


Something has stripped the "../../../src/binutils-gdb/gdb/gdbserver/../alloc.c” from the build line.

Bizarrely, if you then run make a second time, everything works:

g++ -x c++  -g -O2    -I. -I../../../src/binutils-gdb/gdb/gdbserver -I../../../src/binutils-gdb/gdb/gdbserver/../regformats -I../../../src/binutils-gdb/gdb/gdbserver/.. -I../../../src/binutils-gdb/gdb/gdbserver/../../include -I../../../src/binutils-gdb/gdb/gdbserver/../../gnulib/import -Ibuild-gnulib-gdbserver/import  -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wformat -Wformat-nonliteral -Werror -DGDBSERVER  -DCONFIG_UST_GDB_INTEGRATION -Drpl_strerror=strerror -fPIC -DIN_PROCESS_AGENT -fvisibility=hidden -c -o alloc-ipa.o -MT alloc-ipa.o -MMD -MP -MF ./.deps/alloc-ipa.Tpo `echo " -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wformat -Wformat-nonliteral " | sed "s/ -Wformat-nonliteral / -Wno-format-nonliteral /g"` ../../../src/binutils-gdb/gdb/gdbserver/../alloc.c


Reverting your change fixes the issue.

I’ve no idea what’s causing it, and am assuming it’s a weird make bug.
I remember having a 3.81 issue around the same area:
a543c5ca7c1285548726e6d92ca6044dc1963340.


(Personally, I’ve no attachment to 3.81, and usually use 4.x.)



Alan.




> On 30 May 2019, at 22:30, Tom Tromey <tom@tromey.com> wrote:
> 
> When "common" becomes a library, linking will cause a symbol clash,
> because "xmalloc" and some related symbols are defined in that
> library, libiberty, and readline.
> 
> To work around this problem, this patch moves the clashing symbols to
> a new file, which is then compiled separately for both gdb and
> gdbserver.
> 
> gdb/ChangeLog
> 2019-05-30  Tom Tromey  <tom@tromey.com>
> 
> 	* common/common-utils.c (xmalloc, xrealloc, xcalloc)
> 	(xmalloc_failed): Move to alloc.c.
> 	* alloc.c: New file.
> 	* Makefile.in (COMMON_SFILES): Add alloc.c.
> 
> gdb/gdbserver/ChangeLog
> 2019-05-30  Tom Tromey  <tom@tromey.com>
> 
> 	* Makefile.in (SFILES): Add alloc.c.
> 	(OBS): Add alloc.o.
> 	(IPA_OBJS): Add alloc-ipa.o.
> 	(alloc-ipa.o): New target.
> 	(%.o: ../%.c): New pattern rule.
> ---
> gdb/ChangeLog             |  7 +++
> gdb/Makefile.in           |  1 +
> gdb/alloc.c               | 95 +++++++++++++++++++++++++++++++++++++++
> gdb/common/common-utils.c | 72 -----------------------------
> gdb/gdbserver/ChangeLog   |  8 ++++
> gdb/gdbserver/Makefile.in | 11 +++++
> 6 files changed, 122 insertions(+), 72 deletions(-)
> create mode 100644 gdb/alloc.c
> 
> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
> index 0f495783600..15ec7a61b1c 100644
> --- a/gdb/Makefile.in
> +++ b/gdb/Makefile.in
> @@ -924,6 +924,7 @@ COMMON_SFILES = \
> 	ada-varobj.c \
> 	addrmap.c \
> 	agent.c \
> +	alloc.c \
> 	annotate.c \
> 	arch-utils.c \
> 	auto-load.c \
> diff --git a/gdb/alloc.c b/gdb/alloc.c
> new file mode 100644
> index 00000000000..e6c9c215435
> --- /dev/null
> +++ b/gdb/alloc.c
> @@ -0,0 +1,95 @@
> +/* Shared allocation functions for GDB, the GNU debugger.
> +
> +   Copyright (C) 2019 Free Software Foundation, Inc.
> +
> +   This file is part of GDB.
> +
> +   This program is free software; you can redistribute it and/or modify
> +   it under the terms of the GNU General Public License as published by
> +   the Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +#include "common/common-defs.h"
> +#include "libiberty.h"
> +#include <cstdlib>
> +#include "common/errors.h"
> +
> +/* The xmalloc() (libiberty.h) family of memory management routines.
> +
> +   These are like the ISO-C malloc() family except that they implement
> +   consistent semantics and guard against typical memory management
> +   problems.  */
> +
> +/* NOTE: These are declared using PTR to ensure consistency with
> +   "libiberty.h".  xfree() is GDB local.  */
> +
> +PTR                            /* ARI: PTR */
> +xmalloc (size_t size)
> +{
> +  void *val;
> +
> +  /* See libiberty/xmalloc.c.  This function need's to match that's
> +     semantics.  It never returns NULL.  */
> +  if (size == 0)
> +    size = 1;
> +
> +  val = malloc (size);         /* ARI: malloc */
> +  if (val == NULL)
> +    malloc_failure (size);
> +
> +  return val;
> +}
> +
> +PTR                              /* ARI: PTR */
> +xrealloc (PTR ptr, size_t size)          /* ARI: PTR */
> +{
> +  void *val;
> +
> +  /* See libiberty/xmalloc.c.  This function need's to match that's
> +     semantics.  It never returns NULL.  */
> +  if (size == 0)
> +    size = 1;
> +
> +  if (ptr != NULL)
> +    val = realloc (ptr, size);	/* ARI: realloc */
> +  else
> +    val = malloc (size);	        /* ARI: malloc */
> +  if (val == NULL)
> +    malloc_failure (size);
> +
> +  return val;
> +}
> +
> +PTR                            /* ARI: PTR */
> +xcalloc (size_t number, size_t size)
> +{
> +  void *mem;
> +
> +  /* See libiberty/xmalloc.c.  This function need's to match that's
> +     semantics.  It never returns NULL.  */
> +  if (number == 0 || size == 0)
> +    {
> +      number = 1;
> +      size = 1;
> +    }
> +
> +  mem = calloc (number, size);      /* ARI: xcalloc */
> +  if (mem == NULL)
> +    malloc_failure (number * size);
> +
> +  return mem;
> +}
> +
> +void
> +xmalloc_failed (size_t size)
> +{
> +  malloc_failure (size);
> +}
> diff --git a/gdb/common/common-utils.c b/gdb/common/common-utils.c
> index 74ca93810c7..dd839a0d4d1 100644
> --- a/gdb/common/common-utils.c
> +++ b/gdb/common/common-utils.c
> @@ -22,84 +22,12 @@
> #include "host-defs.h"
> #include <ctype.h>
> 
> -/* The xmalloc() (libiberty.h) family of memory management routines.
> -
> -   These are like the ISO-C malloc() family except that they implement
> -   consistent semantics and guard against typical memory management
> -   problems.  */
> -
> -/* NOTE: These are declared using PTR to ensure consistency with
> -   "libiberty.h".  xfree() is GDB local.  */
> -
> -PTR                            /* ARI: PTR */
> -xmalloc (size_t size)
> -{
> -  void *val;
> -
> -  /* See libiberty/xmalloc.c.  This function need's to match that's
> -     semantics.  It never returns NULL.  */
> -  if (size == 0)
> -    size = 1;
> -
> -  val = malloc (size);         /* ARI: malloc */
> -  if (val == NULL)
> -    malloc_failure (size);
> -
> -  return val;
> -}
> -
> -PTR                              /* ARI: PTR */
> -xrealloc (PTR ptr, size_t size)          /* ARI: PTR */
> -{
> -  void *val;
> -
> -  /* See libiberty/xmalloc.c.  This function need's to match that's
> -     semantics.  It never returns NULL.  */
> -  if (size == 0)
> -    size = 1;
> -
> -  if (ptr != NULL)
> -    val = realloc (ptr, size);	/* ARI: realloc */
> -  else
> -    val = malloc (size);	        /* ARI: malloc */
> -  if (val == NULL)
> -    malloc_failure (size);
> -
> -  return val;
> -}
> -
> -PTR                            /* ARI: PTR */           
> -xcalloc (size_t number, size_t size)
> -{
> -  void *mem;
> -
> -  /* See libiberty/xmalloc.c.  This function need's to match that's
> -     semantics.  It never returns NULL.  */
> -  if (number == 0 || size == 0)
> -    {
> -      number = 1;
> -      size = 1;
> -    }
> -
> -  mem = calloc (number, size);      /* ARI: xcalloc */
> -  if (mem == NULL)
> -    malloc_failure (number * size);
> -
> -  return mem;
> -}
> -
> void *
> xzalloc (size_t size)
> {
>   return xcalloc (1, size);
> }
> 
> -void
> -xmalloc_failed (size_t size)
> -{
> -  malloc_failure (size);
> -}
> -
> /* Like asprintf/vasprintf but get an internal_error if the call
>    fails. */
> 
> diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
> index f5fc55034ee..a0793e657c5 100644
> --- a/gdb/gdbserver/Makefile.in
> +++ b/gdb/gdbserver/Makefile.in
> @@ -197,6 +197,7 @@ SFILES = \
> 	$(srcdir)/arch/arm-get-next-pcs.c \
> 	$(srcdir)/arch/arm-linux.c \
> 	$(srcdir)/arch/ppc-linux-common.c \
> +	$(srcdir)/../alloc.c \
> 	$(srcdir)/common/btrace-common.c \
> 	$(srcdir)/common/buffer.c \
> 	$(srcdir)/common/cleanups.c \
> @@ -238,6 +239,7 @@ SOURCES = $(SFILES)
> TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
> 
> OBS = \
> +	alloc.o \
> 	ax.o \
> 	common/agent.o \
> 	common/btrace-common.o \
> @@ -413,6 +415,7 @@ gdbreplay$(EXEEXT): $(sort $(GDBREPLAY_OBS)) $(LIBGNU) $(LIBIBERTY)
> 		$(LIBIBERTY)
> 
> IPA_OBJS = \
> +	alloc-ipa.o \
> 	ax-ipa.o \
> 	common/common-utils-ipa.o \
> 	common/errors-ipa.o \
> @@ -568,6 +571,10 @@ ax.o: ax.c
> 	$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
> 	$(POSTCOMPILE)
> 
> +alloc-ipa.o: ../alloc.c
> +	$(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
> +	$(POSTCOMPILE)
> +
> # Rules for objects that go in the in-process agent.
> 
> arch/%-ipa.o: ../arch/%.c
> @@ -623,6 +630,10 @@ common/%.o: ../common/%.c
> 	$(COMPILE) $<
> 	$(POSTCOMPILE)
> 
> +%.o: ../%.c
> +	$(COMPILE) $<
> +	$(POSTCOMPILE)
> +
> # Rules for register format descriptions.  Suffix destination files with
> # -generated to identify and clean them easily.
> 
> -- 
> 2.17.2
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]