aboutsummaryrefslogtreecommitdiff
path: root/gdb/location.h
diff options
context:
space:
mode:
authorKeith Seitz <keiths@redhat.com>2015-08-11 17:09:35 -0700
committerKeith Seitz <keiths@redhat.com>2015-08-11 17:09:35 -0700
commitc7c1b3e998a77eb077ac3c08c88a97d2e11dfef0 (patch)
treeb096b0ee0c2de1ab36dd9215c6a20e75534d0175 /gdb/location.h
parent5f700d83f7f3ea422d789c51a25f04818bf788d7 (diff)
downloadbinutils-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.h99
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 */