This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] lmemmem.patch
- From: Daniel Jacobowitz <drow at false dot org>
- To: Doug Evans <dje at google dot com>
- Cc: gdb-patches at sourceware dot org
- Date: Sun, 30 Mar 2008 17:35:40 -0400
- Subject: Re: [RFA] lmemmem.patch
- References: <200803241737.m2OHbgC8016762@greed.delorie.com> <e394668d0803241050w6a1f341u585fb4906135a44b@mail.gmail.com> <200803241758.m2OHwDid017265@greed.delorie.com> <e394668d0803241333nedb753j9b7b1593c6d3989f@mail.gmail.com> <20080324203738.GC29991@ins.uni-bonn.de> <e394668d0803241346h5006b63du8997cf9e081dc907@mail.gmail.com> <20080324205119.GE29991@ins.uni-bonn.de> <e394668d0803241420w3db1813bj4aa7803b74f3d40b@mail.gmail.com> <20080324212354.GA16323@caradoc.them.org> <e394668d0803241436w5160a2dfodd33d44b174cb9bf@mail.gmail.com>
On Mon, Mar 24, 2008 at 02:36:13PM -0700, Doug Evans wrote:
> On Mon, Mar 24, 2008 at 2:23 PM, Daniel Jacobowitz <drow@false.org> wrote:
> > I have been thinking of adding support in the GDB build process to use
> > gnulib directly. I even have a patch. I put it under the GDB
> > subdirectory precisely to minimize integration and keeping-in-sync
> > issues with libiberty; gnulib-tool makes it easy to update.
>
> [for completeness' sake]
>
> If/when you do this, make sure gdbserver can use the code too.
Here you go. How does this look? It frees us to rely on gnulib's
stdint.h, string.h, and other useful modules should we want them. I
didn't make gdbserver completely use gnulib, only build memmem; I
tested this on Linux (memmem present) and Windows (memmem missing).
GDB will use the included memmem even on Linux, since glibc's is known
to be slower.
--
Daniel Jacobowitz
CodeSourcery
In the gdb directory, run:
gnulib-tool --import --lib=libgnu --source-base=gnulib --m4-base=gnulib/m4 \
--aux-dir=gnulib/aux memmem
Then apply this patch and run autoconf, aclocal, and automake (yes, automake)
in the gdb subdirectory. Also run autoconf in the gdbserver directory.
2008-03-30 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (LIBGNU, INCGNU): Define.
(INTERNAL_CFLAGS_BASE): Add INCGNU.
(INTERNAL_LIBS, CLIBS, CDEPS): Add LIBGNU.
(CLEANDIRS): New.
($(LIBGNU), all-lib): New rules.
(clean, distclean, do-maintainer-clean): Use CLEANDIRS.
* configure.ac: Use gl_EARLY, gl_INIT, and AM_INIT_AUTOMAKE.
Simplify AC_CONFIG_AUX_DIR. Generate gnulib/Makefile.
* gnulib: New directory, from gnulib-tool.
* configure, aclocal.m4: Regenerated.
2008-03-30 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (LIBOBJS): New.
(OBS): Use LIBOBJS.
(memmem.o): New rule.
* configure.ac: Use AC_CONFIG_LIBOBJ_DIR and check for memmem.
* configure: Regenerated.
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.996
diff -u -p -r1.996 Makefile.in
--- Makefile.in 26 Mar 2008 14:53:28 -0000 1.996
+++ Makefile.in 30 Mar 2008 21:28:20 -0000
@@ -160,6 +160,10 @@ LIBICONV = @LIBICONV@
TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
TARGET_SYSTEM_ROOT_DEFINE = @TARGET_SYSTEM_ROOT_DEFINE@
+# Helper code from gnulib.
+LIBGNU = gnulib/libgnu.a
+INCGNU = -I$(srcdir)/gnulib -Ignulib
+
#
# CLI sub directory definitons
#
@@ -364,7 +368,7 @@ INTERNAL_CFLAGS_BASE = \
$(CFLAGS) $(GLOBAL_CFLAGS) $(PROFILE_CFLAGS) \
$(GDB_CFLAGS) $(OPCODES_CFLAGS) $(READLINE_CFLAGS) \
$(BFD_CFLAGS) $(INCLUDE_CFLAGS) $(LIBDECNUMBER_CFLAGS) \
- $(INTL_CFLAGS) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS)
+ $(INTL_CFLAGS) $(INCGNU) $(ENABLE_CFLAGS) $(INTERNAL_CPPFLAGS)
INTERNAL_WARN_CFLAGS = $(INTERNAL_CFLAGS_BASE) $(GDB_WARN_CFLAGS)
INTERNAL_CFLAGS = $(INTERNAL_WARN_CFLAGS) $(GDB_WERROR_CFLAGS)
@@ -388,13 +392,13 @@ INTERNAL_LDFLAGS = $(CFLAGS) $(GLOBAL_CF
# you can use 'CLIBS=$(INSTALLED_LIBS)' 'CDEPS='
INSTALLED_LIBS=-lbfd -lreadline -lopcodes -liberty -ldecnumber \
$(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
- -lintl -liberty
+ -lintl -liberty $(LIBGNU)
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
$(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
$(LIBICONV) $(LIBEXPAT) \
- $(LIBIBERTY) $(WIN32LIBS)
+ $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU)
CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) \
- $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS)
+ $(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)
ADD_FILES = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
ADD_DEPS = $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
@@ -1077,6 +1081,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $
TSOBS = inflow.o
SUBDIRS = @subdirs@
+CLEANDIRS = $(SUBDIRS) gnulib
# For now, shortcut the "configure GDB for fewer languages" stuff.
YYFILES = c-exp.c \
@@ -1329,6 +1334,12 @@ $(TUI)$(EXEEXT): tui-main.o libgdb.a $(A
-o $(TUI)$(EXEEXT) tui-main.o libgdb.a \
$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
+# Convenience rule to handle recursion.
+$(LIBGNU): all-lib
+all-lib:
+ @$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=gnulib subdir_do
+.PHONY: all-lib
+
# Create a library of the gdb object files and build GDB by linking
# against that.
#
@@ -1368,7 +1379,7 @@ TAGS: $(DEPFILES) $(TAGFILES_NO_SRCDIR)
tags: TAGS
clean mostlyclean: $(CONFIG_CLEAN)
- @$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(SUBDIRS)" subdir_do
+ @$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(CLEANDIRS)" subdir_do
rm -f *.o *.a $(ADD_FILES) *~ init.c-tmp init.l-tmp version.c-tmp
rm -f init.c version.c
rm -f gdb$(EXEEXT) core make.log
@@ -1387,7 +1398,7 @@ clean-tui:
# NB: While GDBSERVER might be configured on native systems, it isn't
# always included in SUBDIRS. Remove the gdbserver files explicitly.
distclean: clean
- @$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(SUBDIRS)" subdir_do
+ @$(MAKE) $(FLAGS_TO_PASS) DO=distclean "DODIRS=$(CLEANDIRS)" subdir_do
rm -f gdbserver/config.status gdbserver/config.log
rm -f gdbserver/tm.h gdbserver/xm.h gdbserver/nm.h
rm -f gdbserver/Makefile gdbserver/config.cache
@@ -1414,7 +1425,7 @@ local-maintainer-clean:
rm -f nm.h config.status
do-maintainer-clean:
- @$(MAKE) $(FLAGS_TO_PASS) DO=maintainer-clean "DODIRS=$(SUBDIRS)" \
+ @$(MAKE) $(FLAGS_TO_PASS) DO=maintainer-clean "DODIRS=$(CLEANDIRS)" \
subdir_do
diststuff: $(DISTSTUFF) $(PACKAGE).pot $(CATALOGS)
Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/configure.ac,v
retrieving revision 1.66
diff -u -p -r1.66 configure.ac
--- configure.ac 12 Mar 2008 14:10:53 -0000 1.66
+++ configure.ac 30 Mar 2008 21:28:20 -0000
@@ -1,6 +1,6 @@
dnl Autoconf configure script for GDB, the GNU debugger.
dnl Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-dnl 2005, 2006
+dnl 2005, 2006, 2007, 2008
dnl Free Software Foundation, Inc.
dnl
dnl This file is part of GDB.
@@ -29,9 +29,10 @@ AC_PROG_CC
AC_GNU_SOURCE
AC_AIX
AC_ISC_POSIX
+gl_EARLY
AM_PROG_CC_STDC
-AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..)
+AC_CONFIG_AUX_DIR(..)
AC_CANONICAL_SYSTEM
dnl List of object files and targets accumulated by configure.
@@ -59,10 +60,16 @@ if test x"$USE_NLS" = xyes; then
CONFIG_UNINSTALL="$CONFIG_UNINSTALL uninstall-po"
fi
+gl_INIT
+
PACKAGE=gdb
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package. ])
AC_SUBST(PACKAGE)
+# GDB does not use automake, but gnulib does. This line lets us
+# generate its Makefile.in.
+AM_INIT_AUTOMAKE(gdb, UNUSED-VERSION, [no-define])
+
debugdir=${libdir}/debug
AC_ARG_WITH(separate-debug-dir,
@@ -207,8 +214,6 @@ if test "x$targ_defvec" != x; then
[Define to BFD's default target vector. ])
fi
-AC_ARG_PROGRAM
-
# The CLI cannot be disabled yet, but may be in the future.
# Enable CLI.
@@ -1721,7 +1726,7 @@ AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "ISO
AM_ICONV
-AC_OUTPUT(Makefile .gdbinit:gdbinit.in,
+AC_OUTPUT(Makefile .gdbinit:gdbinit.in gnulib/Makefile,
[
dnl Autoconf doesn't provide a mechanism for modifying definitions
dnl provided by makefile fragments.
Index: gdbserver/Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v
retrieving revision 1.56
diff -u -p -r1.56 Makefile.in
--- gdbserver/Makefile.in 28 Feb 2008 05:55:55 -0000 1.56
+++ gdbserver/Makefile.in 30 Mar 2008 21:28:20 -0000
@@ -136,6 +136,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/
DEPFILES = @GDBSERVER_DEPFILES@
+LIBOBJS = @LIBOBJS@
+
SOURCES = $(SFILES)
TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
@@ -143,7 +145,7 @@ OBS = inferiors.o regcache.o remote-util
utils.o version.o \
mem-break.o hostio.o \
$(XML_BUILTIN) \
- $(DEPFILES)
+ $(DEPFILES) $(LIBOBJS)
GDBSERVER_LIBS = @GDBSERVER_LIBS@
XM_CLIBS = @LIBS@
@@ -289,6 +291,9 @@ utils.o: utils.c $(server_h)
signals.o: ../signals/signals.c $(server_h)
$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER
+memmem.o: ../gnulib/memmem.c
+ $(CC) -o memmem.o -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $<
+
i387-fp.o: i387-fp.c $(server_h)
linux_low_h = $(srcdir)/linux-low.h
Index: gdbserver/configure.ac
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/configure.ac,v
retrieving revision 1.21
diff -u -p -r1.21 configure.ac
--- gdbserver/configure.ac 28 Feb 2008 05:54:09 -0000 1.21
+++ gdbserver/configure.ac 30 Mar 2008 21:28:20 -0000
@@ -23,6 +23,7 @@ AC_PREREQ(2.59)dnl
AC_INIT(server.c)
AC_CONFIG_HEADER(config.h:config.in)
+AC_CONFIG_LIBOBJ_DIR(../gnulib)
AC_PROG_CC
AC_GNU_SOURCE
@@ -42,6 +43,7 @@ AC_CHECK_HEADERS(sgtty.h termio.h termio
sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
netinet/tcp.h arpa/inet.h sys/wait.h)
AC_CHECK_FUNCS(pread pwrite pread64)
+AC_REPLACE_FUNCS(memmem)
have_errno=no
AC_MSG_CHECKING(for errno)