Some ELF-related variables differ depending on the native host, so this patch uses conditional compilation tricks to ensure everything works out on each host.
Signed-off-by: Zachary T Welch <[email protected]> --- ltrace-elf.c | 10 ++++++++-- sysdeps/linux-gnu/proc.c | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/ltrace-elf.c b/ltrace-elf.c index e3ef5c3..8592f03 100644 --- a/ltrace-elf.c +++ b/ltrace-elf.c @@ -363,8 +363,14 @@ do_init_elf(struct ltelf *lte, const char *filename) { if (shdr.sh_entsize != 0 && shdr.sh_entsize != 4) { error(EXIT_FAILURE, 0, - ".gnu.hash sh_entsize in \"%s\" should be 4, but is %llu", - filename, shdr.sh_entsize); + ".gnu.hash sh_entsize in \"%s\" " + "should be 4, but is %#" +#if __ELF_NATIVE_CLASS == 32 + PRIx32 +#else + PRIx64 +#endif + , filename, shdr.sh_entsize); } data = loaddata(scn, &shdr); diff --git a/sysdeps/linux-gnu/proc.c b/sysdeps/linux-gnu/proc.c index 3c17e1f..136aff4 100644 --- a/sysdeps/linux-gnu/proc.c +++ b/sysdeps/linux-gnu/proc.c @@ -112,7 +112,13 @@ crawl_linkmap(Process *proc, struct r_debug *dbg, void (*callback)(void *), stru } if (callback) { - debug(2, "Dispatching callback for: %s, Loaded at 0x%x\n", lib_name, rlm.l_addr); + debug(2, "Dispatching callback for: %s, " +#if __ELF_NATIVE_CLASS == 32 + "Loaded at 0x%" PRIx32 "\n", +#else + "Loaded at 0x%" PRIx64 "\n", +#endif + lib_name, rlm.l_addr); data->addr = rlm.l_addr; data->lib_name = lib_name; callback(data); @@ -252,7 +258,13 @@ hook_libdl_cb(void *data) { int linkmap_init(Process *proc, struct ltelf *lte) { - void *dbg_addr = NULL, *dyn_addr = (void *)(unsigned)lte->dyn_addr; + void *dbg_addr = NULL; + void *dyn_addr = +#if __ELF_NATIVE_CLASS == 32 + (void *)(uint32_t)lte->dyn_addr; +#else + (void *)(uint64_t)lte->dyn_addr; +#endif struct r_debug *rdbg = NULL; struct cb_data data; -- 1.7.2.2 _______________________________________________ Ltrace-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/ltrace-devel
