diff options
author | Petr Machata <pmachata@redhat.com> | 2012-10-31 03:27:05 +0100 |
---|---|---|
committer | Petr Machata <pmachata@redhat.com> | 2012-10-31 03:27:05 +0100 |
commit | 6db61f509eb7537ca64873b0c8c1955e2293db9f (patch) | |
tree | aa64b8e3f2ef0758a3deb209e561374e5c7ee87e | |
parent | 1c79025768a4403e016cc59d7f41b266e868c9e6 (diff) | |
download | ltrace-6db61f509eb7537ca64873b0c8c1955e2293db9f.tar.gz |
Publish default_elf_add_plt_entry
-rw-r--r-- | ltrace-elf.c | 7 | ||||
-rw-r--r-- | ltrace-elf.h | 11 |
2 files changed, 16 insertions, 2 deletions
diff --git a/ltrace-elf.c b/ltrace-elf.c index bdb6220..f4a58a5 100644 --- a/ltrace-elf.c +++ b/ltrace-elf.c @@ -63,13 +63,16 @@ arch_elf_destroy(struct ltelf *lte) } #endif -static int +int default_elf_add_plt_entry(struct Process *proc, struct ltelf *lte, const char *a_name, GElf_Rela *rela, size_t ndx, struct library_symbol **ret) { char *name = strdup(a_name); if (name == NULL) { + fail_message: + fprintf(stderr, "Couldn't create symbol for PLT entry: %s\n", + strerror(errno)); fail: free(name); return -1; @@ -79,7 +82,7 @@ default_elf_add_plt_entry(struct Process *proc, struct ltelf *lte, struct library_symbol *libsym = malloc(sizeof(*libsym)); if (libsym == NULL) - goto fail; + goto fail_message; /* XXX The double cast should be removed when * arch_addr_t becomes integral type. */ diff --git a/ltrace-elf.h b/ltrace-elf.h index 5470c28..1a1321e 100644 --- a/ltrace-elf.h +++ b/ltrace-elf.h @@ -80,6 +80,17 @@ int ltelf_read_library(struct library *lib, struct Process *proc, * point address is stored to *ENTRYP. */ struct library *ltelf_read_main_binary(struct Process *proc, const char *path); +/* Create a default PLT entry. This can be used instead (or in + * addition to) returning plt_default from arch_elf_add_plt_entry. + * RET shall be initialized, the created symbol will be added to the + * beginning of the linked list at *RET. This function doesn't add + * the symbol to LTE. arch_elf_add_plt_entry has the chance to adjust + * symbol internals to its liking, and then return either plt_default + * or plt_ok. */ +int default_elf_add_plt_entry(struct Process *proc, struct ltelf *lte, + const char *a_name, GElf_Rela *rela, size_t ndx, + struct library_symbol **ret); + /* The base implementation of backend.h (arch_get_sym_info). * See backend.h for details. */ int elf_get_sym_info(struct ltelf *lte, const char *filename, |