aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/sym-file-main.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2014-04-15 14:02:34 +0100
committerPedro Alves <palves@redhat.com>2014-04-15 14:23:37 +0100
commit35e5d2f0f81d97f9bd41586b1979345072b7989d (patch)
tree7855d882067bbb98544809b10df256ebc2ccc1d3 /gdb/testsuite/gdb.base/sym-file-main.c
parenteb4c17106b7303565b8d0ce8b572fa64945d1e7d (diff)
downloadgdb-35e5d2f0f81d97f9bd41586b1979345072b7989d.zip
gdb-35e5d2f0f81d97f9bd41586b1979345072b7989d.tar.gz
gdb-35e5d2f0f81d97f9bd41586b1979345072b7989d.tar.bz2
gdb.base/sym-file.exp, hide guts of the custom loader.
This test uses a simple custom elf loader, implemented in gdb.base/sym-file-loader.h|c. This loader doesn't have a dlclose-like function today, but I'll need one. But, I found that the guts of the loader are exposed too much to the client, making the interface more complicated than necessary. It's simpler if the loader just exports a few dlopen/dlsym -style functions. That's what this patch does. Tested on x86_86 Fedora 17, native and gdbserver. gdb/testsuite/ 2014-04-15 Pedro Alves <palves@redhat.com> * gdb.base/sym-file-loader.h: Move inclusion of <inttypes.h>, <ansidecl.h>, <elf/common.h> and <elf/external.h> to sym-file-loader.c. (Elf_External_Phdr, Elf_External_Ehdr, Elf_External_Shdr) (Elf_External_Sym, Elf_Addr, GET, GETADDR, struct segment): Move to sym-file-loader.c. (struct library): Forward declare. (load_shlib, lookup_function): Change prototypes. (find_shstrtab, find_strtab, find_shdr, find_symtab) (translate_offset): Remove declarations. (get_text_addr): New declaration. * gdb.base/sym-file-loader.c: Move inclusion of <inttypes.h>, <ansidecl.h>, <elf/common.h> and <elf/external.h> here from sym-file-loader.h. (Elf_External_Phdr, Elf_External_Ehdr, Elf_External_Shdr) (Elf_External_Sym, Elf_Addr, GET, GETADDR, struct segment): Move here from sym-file-loader.h. (struct library): New structure. (load_shlib, lookup_function): Change prototypes and adjust to work with a struct library. (find_shstrtab, find_strtab, find_shdr, find_symtab) (translate_offset): Make static. (get_text_addr): New function. * gdb.base/sym-file-main.c (main): Adjust to new loader interface.
Diffstat (limited to 'gdb/testsuite/gdb.base/sym-file-main.c')
-rw-r--r--gdb/testsuite/gdb.base/sym-file-main.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/gdb/testsuite/gdb.base/sym-file-main.c b/gdb/testsuite/gdb.base/sym-file-main.c
index 2746566..b48a1c2 100644
--- a/gdb/testsuite/gdb.base/sym-file-main.c
+++ b/gdb/testsuite/gdb.base/sym-file-main.c
@@ -38,37 +38,29 @@ 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;
+ struct library *lib;
char *text_addr = NULL;
int (*pbar) () = NULL;
int (*pfoo) (int) = NULL;
- if (load_shlib (file, &ehdr, &head_seg) != 0)
- return -1;
+ lib = load_shlib (file);
+ if (lib == NULL)
+ 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;
+ if (get_text_addr (lib, (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;
+ if (lookup_function (lib, "bar", (void *) &pbar) != 0)
+ return 1;
(*pbar) ();
/* Call foo from SHLIB_NAME. */
- if (lookup_function ("foo", ehdr, head_seg, (void *) &pfoo) != 0)
- return -1;
+ if (lookup_function (lib, "foo", (void *) &pfoo) != 0)
+ return 1;
(*pfoo) (2);