diff options
author | Keith Seitz <keiths@redhat.com> | 2015-08-11 17:09:35 -0700 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2015-08-11 17:09:35 -0700 |
commit | c7c1b3e998a77eb077ac3c08c88a97d2e11dfef0 (patch) | |
tree | b096b0ee0c2de1ab36dd9215c6a20e75534d0175 /gdb/location.h | |
parent | 5f700d83f7f3ea422d789c51a25f04818bf788d7 (diff) | |
download | binutils-c7c1b3e998a77eb077ac3c08c88a97d2e11dfef0.zip binutils-c7c1b3e998a77eb077ac3c08c88a97d2e11dfef0.tar.gz binutils-c7c1b3e998a77eb077ac3c08c88a97d2e11dfef0.tar.bz2 |
Explicit locations: introduce new struct event_location-based API
This patch introduces the new breakpoint/"linespec" API based on
a new struct event_location. This API currently only supports
traditional linespecs, maintaining the status quo of the code base.
Future patches will add additional functionality for other location
types such as address locations.
gdb/ChangeLog:
* Makefile.in (SFILES): Add location.c.
(HFILES_NO_SRCDIR): Add location.h.
(COMMON_OBS): Add location.o.
* linespec.c (linespec_lex_to_end): New function.
* linespec.h (linespec_lex_to_end): Declare.
* location.c: New file.
* location.h: New file.
Diffstat (limited to 'gdb/location.h')
-rw-r--r-- | gdb/location.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/gdb/location.h b/gdb/location.h new file mode 100644 index 0000000..d35fecb --- /dev/null +++ b/gdb/location.h @@ -0,0 +1,99 @@ +/* Data structures and API for event locations in GDB. + Copyright (C) 2013-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 LOCATIONS_H +#define LOCATIONS_H 1 + +struct language_defn; +struct event_location; + +/* An enumeration of the various ways to specify a stop event + location (used with create_breakpoint). */ + +enum event_location_type +{ + /* A traditional linespec. */ + LINESPEC_LOCATION +}; + +/* Return the type of the given event location. */ + +extern enum event_location_type + event_location_type (const struct event_location *); + +/* Return a string representation of the LOCATION. + This function may return NULL for unspecified linespecs, + e.g, LOCATION_LINESPEC and addr_string is NULL. + + The result is cached in LOCATION. */ + +extern const char * + event_location_to_string (struct event_location *location); + +/* Create a new linespec location. The return result is malloc'd + and should be freed with delete_event_location. */ + +extern struct event_location * + new_linespec_location (char **linespec); + +/* Return the linespec location (a string) of the given event_location + (which must be of type LINESPEC_LOCATION). */ + +extern const char * + get_linespec_location (const struct event_location *location); + +/* Free an event location and any associated data. */ + +extern void delete_event_location (struct event_location *location); + +/* Make a cleanup to free LOCATION. */ + +extern struct cleanup * + make_cleanup_delete_event_location (struct event_location *location); + +/* Return a copy of the given SRC location. */ + +extern struct event_location * + copy_event_location (const struct event_location *src); + +/* Attempt to convert the input string in *ARGP into an event_location. + ARGP is advanced past any processed input. Returns an event_location + (malloc'd) if an event location was successfully found in *ARGP, + NULL otherwise. + + This function may call error() if *ARGP looks like properly formed, + but invalid, input, e.g., if it is called with missing argument parameters + or invalid options. + + The return result must be freed with delete_event_location. */ + +extern struct event_location * + string_to_event_location (char **argp, + const struct language_defn *langauge); + +/* A convenience function for testing for unset locations. */ + +extern int event_location_empty_p (const struct event_location *location); + +/* Set the location's string representation. If STRING is NULL, clear + the string representation. */ + +extern void + set_event_location_string (struct event_location *location, + const char *string); +#endif /* LOCATIONS_H */ |