diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-01-29 17:52:47 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-01-29 17:52:47 +0000 |
commit | a5606eee5ec10851d09a8e2709354c7e0931a99c (patch) | |
tree | 74396fad6948f39a3d299b61354795949342468e /gdb/testsuite/gdb.base/watchpoint-solib.c | |
parent | 0b3de036ef7812900af73c59dae4a703fce5f2da (diff) | |
download | gdb-a5606eee5ec10851d09a8e2709354c7e0931a99c.zip gdb-a5606eee5ec10851d09a8e2709354c7e0931a99c.tar.gz gdb-a5606eee5ec10851d09a8e2709354c7e0931a99c.tar.bz2 |
Use multiple locations for hardware watchpoints.
This eliminates the need to traverse value chain, doing
various checks, in three different places.
* breakpoint.h (struct bp_location): New fields
lengths and watchpoint_type.
(struct breakpoint): Remove the val_chain field.
* breakpoint.c (is_hardware_watchpoint): New.
(free_valchain): Remove.
(update_watchpoint): New.
(insert_bp_location): For hardware watchpoint, just
directly insert it.
(insert_breakpoints): Call update_watchpoint_locations
on all watchpoints. If we have failed to insert
any location of a hardware watchpoint, remove all inserted
locations.
(remove_breakpoint): For hardware watchpoints, directly
remove location.
(watchpoints_triggered): Iterate over locations.
(bpstat_stop_status): Use only first location of
a resource watchpoint.
(delete_breakpoint): Don't call free_valchain.
(print_one_breakpoint): Don't print all
locations for watchpoints.
(breakpoint_re_set_one): Use update_watchpoint for
watchpoints.
Diffstat (limited to 'gdb/testsuite/gdb.base/watchpoint-solib.c')
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint-solib.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/watchpoint-solib.c b/gdb/testsuite/gdb.base/watchpoint-solib.c new file mode 100644 index 0000000..b316024 --- /dev/null +++ b/gdb/testsuite/gdb.base/watchpoint-solib.c @@ -0,0 +1,68 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2004, 2007 Free Software Foundation, Inc. + + 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 <stdio.h> +#include <stdlib.h> + +#ifdef __WIN32__ +#include <windows.h> +#define dlopen(name, mode) LoadLibrary (TEXT (name)) +#ifdef _WIN32_WCE +# define dlsym(handle, func) GetProcAddress (handle, TEXT (func)) +#else +# define dlsym(handle, func) GetProcAddress (handle, func) +#endif +#define dlclose(handle) FreeLibrary (handle) +#define dlerror() "error %d occurred", GetLastError () +#else +#include <dlfcn.h> +#endif + + +void open_shlib () +{ + void *handle; + void (*foo) (int); + + handle = dlopen (SHLIB_NAME, RTLD_LAZY); + + if (!handle) + { + fprintf (stderr, dlerror ()); + exit (1); + } + + foo = (void (*)(int))dlsym (handle, "foo"); + + if (!foo) + { + fprintf (stderr, dlerror ()); + exit (1); + } + + foo (1); // call to foo + foo (2); + + dlclose (handle); +} + + +int main() +{ + open_shlib (); + return 0; +} |