diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-07-15 17:37:27 +0200 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-07-15 17:39:17 +0200 |
commit | 6e5b4429db0d66e2d0b27e1bcfe4709f3dae73ed (patch) | |
tree | 7936b330582c83cb83293d8e6eca41bc8803dbda /gdb/common | |
parent | ddc98fbf2fd9e244a215a4d09e559180dc573a14 (diff) | |
download | gdb-6e5b4429db0d66e2d0b27e1bcfe4709f3dae73ed.zip gdb-6e5b4429db0d66e2d0b27e1bcfe4709f3dae73ed.tar.gz gdb-6e5b4429db0d66e2d0b27e1bcfe4709f3dae73ed.tar.bz2 |
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.
Diffstat (limited to 'gdb/common')
-rw-r--r-- | gdb/common/common.m4 | 29 | ||||
-rw-r--r-- | gdb/common/gdb_regex.c | 73 | ||||
-rw-r--r-- | gdb/common/gdb_regex.h | 35 |
3 files changed, 137 insertions, 0 deletions
diff --git a/gdb/common/common.m4 b/gdb/common/common.m4 index a87579a..e48dd5a 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 <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 ]) diff --git a/gdb/common/gdb_regex.c b/gdb/common/gdb_regex.c new file mode 100644 index 0000000..73f30a7 --- /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 <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); +} diff --git a/gdb/common/gdb_regex.h b/gdb/common/gdb_regex.h new file mode 100644 index 0000000..c6eb67b --- /dev/null +++ b/gdb/common/gdb_regex.h @@ -0,0 +1,35 @@ +/* Portable <regex.h>. + Copyright (C) 2000-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/>. */ + +#ifndef COMMON_GDB_REGEX_H +#define COMMON_GDB_REGEX_H 1 + +#ifdef USE_INCLUDED_REGEX +# include "xregex.h" +#else +/* Request 4.2 BSD regex functions. */ +# define _REGEX_RE_COMP +# include <regex.h> +#endif + +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 COMMON_GDB_REGEX_H */ |