diff options
author | Nicolas Blanc <nicolas.blanc@intel.com> | 2013-07-17 11:44:26 +0200 |
---|---|---|
committer | Nicolas Blanc <nicolas.blanc@intel.com> | 2013-10-29 10:56:45 +0100 |
commit | 681f229a9fbf72ce7882bf81122f1f18bce96c0e (patch) | |
tree | 43af29f04ff8c4641084123659b07c2e6b95a4a4 /gdb/testsuite/gdb.base/sym-file-main.c | |
parent | e9f0e62efd736ec42eb7da1520655f136481a411 (diff) | |
download | gdb-681f229a9fbf72ce7882bf81122f1f18bce96c0e.zip gdb-681f229a9fbf72ce7882bf81122f1f18bce96c0e.tar.gz gdb-681f229a9fbf72ce7882bf81122f1f18bce96c0e.tar.bz2 |
Test adding and removing a symbol file at runtime.
This test exercises the commands 'add-symbol-file'
and 'remove-symbol-file'.
2013-10-29 Nicolas Blanc <nicolas.blanc@intel.com>
gdb/testsuite
* gdb.base/sym-file-lib.c: New file.
* gdb.base/sym-file-loader.c: New file.
* gdb.base/sym-file-loader.h: New file.
* gdb.base/sym-file-main.c: New file.
* gdb.base/sym-file.exp: New file.
Signed-off-by: Nicolas Blanc <nicolas.blanc@intel.com>
Diffstat (limited to 'gdb/testsuite/gdb.base/sym-file-main.c')
-rw-r--r-- | gdb/testsuite/gdb.base/sym-file-main.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/sym-file-main.c b/gdb/testsuite/gdb.base/sym-file-main.c new file mode 100644 index 0000000..932ed0d --- /dev/null +++ b/gdb/testsuite/gdb.base/sym-file-main.c @@ -0,0 +1,79 @@ +/* Copyright 2013 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 <stdlib.h> +#include <stdio.h> + +#include "sym-file-loader.h" + +void +gdb_add_symbol_file (void *addr, const char *file) +{ + return; +} + +void +gdb_remove_symbol_file (void *addr) +{ + return; +} + +/* Load a shared library without relying on the standard + loader to test GDB's commands for adding and removing + symbol files at runtime. */ + +int +main (int argc, const char *argv[]) +{ + const char *file = SHLIB_NAME; + Elf_External_Ehdr *ehdr = NULL; + struct segment *head_seg = NULL; + Elf_External_Shdr *text; + char *text_addr = NULL; + int (*pbar) () = NULL; + int (*pfoo) (int) = NULL; + + if (load_shlib (file, &ehdr, &head_seg) != 0) + return -1; + + /* Get the text section. */ + text = find_shdr (ehdr, ".text"); + if (text == NULL) + return -1; + + /* Notify GDB to add the symbol file. */ + if (translate_offset (GET (text, sh_offset), head_seg, (void **) &text_addr) + != 0) + return -1; + + gdb_add_symbol_file (text_addr, file); + + /* Call bar from SHLIB_NAME. */ + if (lookup_function ("bar", ehdr, head_seg, (void *) &pbar) != 0) + return -1; + + (*pbar) (); + + /* Call foo from SHLIB_NAME. */ + if (lookup_function ("foo", ehdr, head_seg, (void *) &pfoo) != 0) + return -1; + + (*pfoo) (2); + + /* Notify GDB to remove the symbol file. */ + gdb_remove_symbol_file (text_addr); + + return 0; +} |