Move gdb_regex* to common/

Later patches need regex support also in gdbserver.

gdb/ChangeLog
2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* Makefile.in (HFILES_NO_SRCDIR): Change gdb_regex.h to
	common/gdb_regex.h.
	(COMMON_OBS): Add gdb_regex.o.
	(gdb_regex.o): New.
	* common/common.m4 (GDB_AC_COMMON): Add gdb_use_included_regex,
	--without-included-regex and USE_INCLUDED_REGEX.
	* common/gdb_regex.c: New file from utils.c functions.
	* common/gdb_regex.h: Move it here from gdb_regex.h, update include
	file wrapping define name.
	* configure: Rebuilt.
	* configure.ac (gdb_use_included_regex, --without-included-regex)
	(USE_INCLUDED_REGEX): Move them to common/common.m4.
	* gdb_regex.h: Move it to common/gdb_regex.h.
	* utils.c: Remove include gdb_regex.h.
	(do_regfree_cleanup, make_regfree_cleanup, get_regcomp_error)
	(compile_rx_or_error): Move them to common/gdb_regex.c.

gdb/gdbserver/ChangeLog
2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* Makefile.in (OBS): Add gdb_regex.o.
	(gdb_regex.o): New.
	* config.in: Rebuilt.
	* configure: Rebuilt.
This commit is contained in:
Jan Kratochvil 2015-07-15 17:37:27 +02:00
parent ddc98fbf2f
commit 6e5b4429db
12 changed files with 251 additions and 140 deletions

View File

@ -1,3 +1,22 @@
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* Makefile.in (HFILES_NO_SRCDIR): Change gdb_regex.h to
common/gdb_regex.h.
(COMMON_OBS): Add gdb_regex.o.
(gdb_regex.o): New.
* common/common.m4 (GDB_AC_COMMON): Add gdb_use_included_regex,
--without-included-regex and USE_INCLUDED_REGEX.
* common/gdb_regex.c: New file from utils.c functions.
* common/gdb_regex.h: Move it here from gdb_regex.h, update include
file wrapping define name.
* configure: Rebuilt.
* configure.ac (gdb_use_included_regex, --without-included-regex)
(USE_INCLUDED_REGEX): Move them to common/common.m4.
* gdb_regex.h: Move it to common/gdb_regex.h.
* utils.c: Remove include gdb_regex.h.
(do_regfree_cleanup, make_regfree_cleanup, get_regcomp_error)
(compile_rx_or_error): Move them to common/gdb_regex.c.
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>

View File

@ -937,7 +937,7 @@ extension.h extension-priv.h \
build-id.h buildsym.h valprint.h \
typeprint.h mi/mi-getopt.h mi/mi-parse.h mi/mi-console.h \
mi/mi-out.h mi/mi-main.h mi/mi-common.h mi/mi-cmds.h linux-nat.h \
complaints.h gdb_proc_service.h gdb_regex.h xtensa-tdep.h inf-loop.h \
complaints.h gdb_proc_service.h common/gdb_regex.h xtensa-tdep.h inf-loop.h \
common/gdb_wait.h common/gdb_assert.h solib.h ppc-tdep.h cp-support.h glibc-tdep.h \
interps.h auxv.h gdbcmd.h tramp-frame.h mipsnbsd-tdep.h \
amd64-linux-tdep.h linespec.h i387-tdep.h mn10300-tdep.h \
@ -1084,6 +1084,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
format.o registry.o btrace.o record-btrace.o waitstatus.o \
print-utils.o rsp-low.o errors.o common-debug.o debug.o \
common-exceptions.o btrace-common.o fileio.o target-utils.o \
gdb_regex.o \
$(SUBDIR_GCC_COMPILE_OBS)
TSOBS = inflow.o
@ -2272,6 +2273,10 @@ btrace-common.o: ${srcdir}/common/btrace-common.c
fileio.o: ${srcdir}/common/fileio.c
$(COMPILE) $(srcdir)/common/fileio.c
$(POSTCOMPILE)
gdb_regex.o: ${srcdir}/common/gdb_regex.c
$(COMPILE) $(srcdir)/common/gdb_regex.c
$(POSTCOMPILE)
#
# gdb/target/ dependencies
#

View File

@ -44,4 +44,33 @@ gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)])
if test $gdb_cv_func_sigsetjmp = yes; then
AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
fi
# Assume we'll default to using the included libiberty regex.
gdb_use_included_regex=yes
# However, if the system regex is GNU regex, then default to *not*
# using the included regex.
AC_CACHE_CHECK(
[for GNU regex],
[gdb_cv_have_gnu_regex],
[AC_TRY_COMPILE(
[#include <gnu-versions.h>],
[#define REGEX_INTERFACE_VERSION 1
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
# error "Version mismatch"
#endif],
gdb_cv_have_gnu_regex=yes,
gdb_cv_have_gnu_regex=no)])
if test $gdb_cv_have_gnu_regex = yes; then
gdb_use_included_regex=no
fi
AC_ARG_WITH(included-regex,
AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
gdb_with_regex=$withval,
gdb_with_regex=$gdb_use_included_regex)
if test "$gdb_with_regex" = yes; then
AC_DEFINE(USE_INCLUDED_REGEX, 1,
[Define to 1 if the regex included in libiberty should be used.])
fi
])

73
gdb/common/gdb_regex.c Normal file
View File

@ -0,0 +1,73 @@
/* Shared utility routines for GDB to interact with agent.
Copyright (C) 2009-2015 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-defs.h"
#include "gdb_regex.h"
/* A cleanup function that calls regfree. */
static void
do_regfree_cleanup (void *r)
{
regfree (r);
}
/* Create a new cleanup that frees the compiled regular expression R. */
struct cleanup *
make_regfree_cleanup (regex_t *r)
{
return make_cleanup (do_regfree_cleanup, r);
}
/* Return an xmalloc'd error message resulting from a regular
expression compilation failure. */
char *
get_regcomp_error (int code, regex_t *rx)
{
size_t length = regerror (code, rx, NULL, 0);
char *result = xmalloc (length);
regerror (code, rx, result, length);
return result;
}
/* Compile a regexp and throw an exception on error. This returns a
cleanup to free the resulting pattern on success. RX must not be
NULL. */
struct cleanup *
compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
{
int code;
gdb_assert (rx != NULL);
code = regcomp (pattern, rx, REG_NOSUB);
if (code != 0)
{
char *err = get_regcomp_error (code, pattern);
make_cleanup (xfree, err);
error (("%s: %s"), message, err);
}
return make_regfree_cleanup (pattern);
}

View File

@ -16,8 +16,8 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef GDB_REGEX_H
#define GDB_REGEX_H 1
#ifndef COMMON_GDB_REGEX_H
#define COMMON_GDB_REGEX_H 1
#ifdef USE_INCLUDED_REGEX
# include "xregex.h"
@ -27,10 +27,9 @@
# include <regex.h>
#endif
/* From utils.c. */
struct cleanup *make_regfree_cleanup (regex_t *);
char *get_regcomp_error (int, regex_t *);
struct cleanup *compile_rx_or_error (regex_t *pattern, const char *rx,
const char *message);
#endif /* not GDB_REGEX_H */
#endif /* not COMMON_GDB_REGEX_H */

102
gdb/configure vendored
View File

@ -11925,6 +11925,57 @@ $as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
fi
# Assume we'll default to using the included libiberty regex.
gdb_use_included_regex=yes
# However, if the system regex is GNU regex, then default to *not*
# using the included regex.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
$as_echo_n "checking for GNU regex... " >&6; }
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <gnu-versions.h>
int
main ()
{
#define REGEX_INTERFACE_VERSION 1
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
# error "Version mismatch"
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gdb_cv_have_gnu_regex=yes
else
gdb_cv_have_gnu_regex=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
if test $gdb_cv_have_gnu_regex = yes; then
gdb_use_included_regex=no
fi
# Check whether --with-included-regex was given.
if test "${with_included_regex+set}" = set; then :
withval=$with_included_regex; gdb_with_regex=$withval
else
gdb_with_regex=$gdb_use_included_regex
fi
if test "$gdb_with_regex" = yes; then
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
fi
# Check the return and argument types of ptrace. No canned test for
# this, so roll our own.
@ -12187,57 +12238,6 @@ if test $ac_cv_func_setpgrp_void = yes; then
fi
fi
# Assume we'll default to using the included libiberty regex.
gdb_use_included_regex=yes
# However, if the system regex is GNU regex, then default to *not*
# using the included regex.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
$as_echo_n "checking for GNU regex... " >&6; }
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <gnu-versions.h>
int
main ()
{
#define REGEX_INTERFACE_VERSION 1
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
# error "Version mismatch"
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gdb_cv_have_gnu_regex=yes
else
gdb_cv_have_gnu_regex=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
if test $gdb_cv_have_gnu_regex = yes; then
gdb_use_included_regex=no
fi
# Check whether --with-included-regex was given.
if test "${with_included_regex+set}" = set; then :
withval=$with_included_regex; gdb_with_regex=$withval
else
gdb_with_regex=$gdb_use_included_regex
fi
if test "$gdb_with_regex" = yes; then
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
fi
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h>
#include <sys/proc.h>

View File

@ -1444,35 +1444,6 @@ if test $ac_cv_func_setpgrp_void = yes; then
fi
fi
# Assume we'll default to using the included libiberty regex.
gdb_use_included_regex=yes
# However, if the system regex is GNU regex, then default to *not*
# using the included regex.
AC_CACHE_CHECK(
[for GNU regex],
[gdb_cv_have_gnu_regex],
[AC_TRY_COMPILE(
[#include <gnu-versions.h>],
[#define REGEX_INTERFACE_VERSION 1
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
# error "Version mismatch"
#endif],
gdb_cv_have_gnu_regex=yes,
gdb_cv_have_gnu_regex=no)])
if test $gdb_cv_have_gnu_regex = yes; then
gdb_use_included_regex=no
fi
AC_ARG_WITH(included-regex,
AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
gdb_with_regex=$withval,
gdb_with_regex=$gdb_use_included_regex)
if test "$gdb_with_regex" = yes; then
AC_DEFINE(USE_INCLUDED_REGEX, 1,
[Define to 1 if the regex included in libiberty should be used.])
fi
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
AC_CHECK_MEMBERS([struct thread.td_pcb], [], [],
[#include <sys/param.h>

View File

@ -1,3 +1,10 @@
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* Makefile.in (OBS): Add gdb_regex.o.
(gdb_regex.o): New.
* config.in: Rebuilt.
* configure: Rebuilt.
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>

View File

@ -195,6 +195,7 @@ OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o \
common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.o \
tdesc.o print-utils.o rsp-low.o errors.o common-debug.o cleanups.o \
common-exceptions.o symbol.o btrace-common.o fileio.o target-utils.o \
gdb_regex.o \
$(XML_BUILTIN) $(DEPFILES) $(LIBOBJS)
GDBREPLAY_OBS = gdbreplay.o version.o
GDBSERVER_LIBS = @GDBSERVER_LIBS@
@ -582,6 +583,9 @@ waitstatus.o: ../target/waitstatus.c
fileio.o: ../common/fileio.c
$(COMPILE) $<
$(POSTCOMPILE)
gdb_regex.o: ../common/gdb_regex.c
$(COMPILE) $<
$(POSTCOMPILE)
# Native object files rules from ../nat

View File

@ -317,6 +317,9 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if the regex included in libiberty should be used. */
#undef USE_INCLUDED_REGEX
/* Define if we should use libthread_db directly. */
#undef USE_LIBTHREAD_DB_DIRECTLY

View File

@ -694,6 +694,7 @@ enable_maintainer_mode
enable_largefile
enable_build_with_cxx
enable_libmcheck
with_included_regex
with_ust
with_ust_include
with_ust_lib
@ -1345,6 +1346,10 @@ Optional Features:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--without-included-regex
don't use included regex; this is the default on
systems with version 2 of the GNU C library (use
with caution on other system)
--with-ust=PATH Specify prefix directory for the installed UST package
Equivalent to --with-ust-include=PATH/include
plus --with-ust-lib=PATH/lib
@ -5747,6 +5752,57 @@ $as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
fi
# Assume we'll default to using the included libiberty regex.
gdb_use_included_regex=yes
# However, if the system regex is GNU regex, then default to *not*
# using the included regex.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
$as_echo_n "checking for GNU regex... " >&6; }
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <gnu-versions.h>
int
main ()
{
#define REGEX_INTERFACE_VERSION 1
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
# error "Version mismatch"
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
gdb_cv_have_gnu_regex=yes
else
gdb_cv_have_gnu_regex=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
if test $gdb_cv_have_gnu_regex = yes; then
gdb_use_included_regex=no
fi
# Check whether --with-included-regex was given.
if test "${with_included_regex+set}" = set; then :
withval=$with_included_regex; gdb_with_regex=$withval
else
gdb_with_regex=$gdb_use_included_regex
fi
if test "$gdb_with_regex" = yes; then
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
fi
# Check for UST
ustlibs=""

View File

@ -67,7 +67,6 @@
#include "gdb_usleep.h"
#include "interps.h"
#include "gdb_regex.h"
#if !HAVE_DECL_MALLOC
extern PTR malloc (); /* ARI: PTR */
@ -1114,60 +1113,6 @@ make_hex_string (const gdb_byte *data, size_t length)
/* A cleanup function that calls regfree. */
static void
do_regfree_cleanup (void *r)
{
regfree (r);
}
/* Create a new cleanup that frees the compiled regular expression R. */
struct cleanup *
make_regfree_cleanup (regex_t *r)
{
return make_cleanup (do_regfree_cleanup, r);
}
/* Return an xmalloc'd error message resulting from a regular
expression compilation failure. */
char *
get_regcomp_error (int code, regex_t *rx)
{
size_t length = regerror (code, rx, NULL, 0);
char *result = xmalloc (length);
regerror (code, rx, result, length);
return result;
}
/* Compile a regexp and throw an exception on error. This returns a
cleanup to free the resulting pattern on success. RX must not be
NULL. */
struct cleanup *
compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
{
int code;
gdb_assert (rx != NULL);
code = regcomp (pattern, rx, REG_NOSUB);
if (code != 0)
{
char *err = get_regcomp_error (code, pattern);
make_cleanup (xfree, err);
error (("%s: %s"), message, err);
}
return make_regfree_cleanup (pattern);
}
/* This function supports the query, nquery, and yquery functions.
Ask user a y-or-n question and return 0 if answer is no, 1 if
answer is yes, or default the answer to the specified default