From 6e5b4429db0d66e2d0b27e1bcfe4709f3dae73ed Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 15 Jul 2015 17:37:27 +0200 Subject: [PATCH] Move gdb_regex* to common/ Later patches need regex support also in gdbserver. gdb/ChangeLog 2015-07-15 Jan Kratochvil * 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 * Makefile.in (OBS): Add gdb_regex.o. (gdb_regex.o): New. * config.in: Rebuilt. * configure: Rebuilt. --- gdb/ChangeLog | 19 +++++++ gdb/Makefile.in | 7 ++- gdb/common/common.m4 | 29 ++++++++++ gdb/common/gdb_regex.c | 73 +++++++++++++++++++++++++ gdb/{ => common}/gdb_regex.h | 7 ++- gdb/configure | 102 +++++++++++++++++------------------ gdb/configure.ac | 29 ---------- gdb/gdbserver/ChangeLog | 7 +++ gdb/gdbserver/Makefile.in | 4 ++ gdb/gdbserver/config.in | 3 ++ gdb/gdbserver/configure | 56 +++++++++++++++++++ gdb/utils.c | 55 ------------------- 12 files changed, 251 insertions(+), 140 deletions(-) create mode 100644 gdb/common/gdb_regex.c rename gdb/{ => common}/gdb_regex.h (92%) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1a5a20950d4..b87a90112b9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2015-07-15 Jan Kratochvil + + * 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 diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 237da9d4ada..ea9e804517e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -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 # diff --git a/gdb/common/common.m4 b/gdb/common/common.m4 index a87579a12b9..e48dd5a79fc 100644 --- a/gdb/common/common.m4 +++ b/gdb/common/common.m4 @@ -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 ], + [#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 ]) diff --git a/gdb/common/gdb_regex.c b/gdb/common/gdb_regex.c new file mode 100644 index 00000000000..73f30a75647 --- /dev/null +++ b/gdb/common/gdb_regex.c @@ -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 . */ + +#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); +} diff --git a/gdb/gdb_regex.h b/gdb/common/gdb_regex.h similarity index 92% rename from gdb/gdb_regex.h rename to gdb/common/gdb_regex.h index 3173a54d19a..c6eb67bf0df 100644 --- a/gdb/gdb_regex.h +++ b/gdb/common/gdb_regex.h @@ -16,8 +16,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 #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 */ diff --git a/gdb/configure b/gdb/configure index e8979f03218..027ecf46197 100755 --- a/gdb/configure +++ b/gdb/configure @@ -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 +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 -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 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 #include diff --git a/gdb/configure.ac b/gdb/configure.ac index a40860ad432..6a7e0c90d4e 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -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 ], - [#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 defines `struct thread' with a td_pcb member. AC_CHECK_MEMBERS([struct thread.td_pcb], [], [], [#include diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 0ce30b79f81..e269b970a3b 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2015-07-15 Jan Kratochvil + + * Makefile.in (OBS): Add gdb_regex.o. + (gdb_regex.o): New. + * config.in: Rebuilt. + * configure: Rebuilt. + 2015-07-15 Aleksandar Ristovski diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 908061a60de..fea8e1b6deb 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -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 diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in index f24e6bb7eeb..90ea95daa61 100644 --- a/gdb/gdbserver/config.in +++ b/gdb/gdbserver/config.in @@ -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 diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index e8cf136c243..c7ae6bebf4c 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -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 +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="" diff --git a/gdb/utils.c b/gdb/utils.c index acb4c7d5295..a2c2710dba4 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -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 -- 2.30.2