aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2012-10-31 03:27:05 +0100
committerPetr Machata <pmachata@redhat.com>2012-10-31 03:27:05 +0100
commit6db61f509eb7537ca64873b0c8c1955e2293db9f (patch)
treeaa64b8e3f2ef0758a3deb209e561374e5c7ee87e
parent1c79025768a4403e016cc59d7f41b266e868c9e6 (diff)
downloadltrace-6db61f509eb7537ca64873b0c8c1955e2293db9f.tar.gz
Publish default_elf_add_plt_entry
-rw-r--r--ltrace-elf.c7
-rw-r--r--ltrace-elf.h11
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,