Module Name: src Committed By: christos Date: Tue Aug 26 07:54:27 UTC 2014
Modified Files: src/libexec/ld.elf_so: headers.c rtld.h Log Message: Introduce a cast to fix the build for Elf32 on _LP64. To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/libexec/ld.elf_so/headers.c cvs rdiff -u -r1.120 -r1.121 src/libexec/ld.elf_so/rtld.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/libexec/ld.elf_so/headers.c diff -u src/libexec/ld.elf_so/headers.c:1.55 src/libexec/ld.elf_so/headers.c:1.56 --- src/libexec/ld.elf_so/headers.c:1.55 Mon Aug 25 16:40:52 2014 +++ src/libexec/ld.elf_so/headers.c Tue Aug 26 03:54:27 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: headers.c,v 1.55 2014/08/25 20:40:52 joerg Exp $ */ +/* $NetBSD: headers.c,v 1.56 2014/08/26 07:54:27 christos Exp $ */ /* * Copyright 1996 John D. Polstra. @@ -40,7 +40,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: headers.c,v 1.55 2014/08/25 20:40:52 joerg Exp $"); +__RCSID("$NetBSD: headers.c,v 1.56 2014/08/26 07:54:27 christos Exp $"); #endif /* not lint */ #include <err.h> @@ -345,9 +345,9 @@ _rtld_digest_dynamic(const char *execnam } if (init != 0) - obj->init = (Elf_Addr)obj->relocbase + init; + obj->init = (Elf_Addr) RTLD_ELF32_CAST obj->relocbase + init; if (fini != 0) - obj->fini = (Elf_Addr)obj->relocbase + fini; + obj->fini = (Elf_Addr) RTLD_ELF32_CAST obj->relocbase + fini; if (dyn_rpath != NULL) { _rtld_add_paths(execname, &obj->rpaths, obj->strtab + Index: src/libexec/ld.elf_so/rtld.h diff -u src/libexec/ld.elf_so/rtld.h:1.120 src/libexec/ld.elf_so/rtld.h:1.121 --- src/libexec/ld.elf_so/rtld.h:1.120 Mon Aug 25 16:40:52 2014 +++ src/libexec/ld.elf_so/rtld.h Tue Aug 26 03:54:27 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: rtld.h,v 1.120 2014/08/25 20:40:52 joerg Exp $ */ +/* $NetBSD: rtld.h,v 1.121 2014/08/26 07:54:27 christos Exp $ */ /* * Copyright 1996 John D. Polstra. @@ -475,6 +475,15 @@ Obj_Entry *_rtld_map_object(const char * void _rtld_obj_free(Obj_Entry *); Obj_Entry *_rtld_obj_new(void); +/* + * The following uintptr_t cast is for Elf32 emulation on _LP64 systems + */ +#if defined(_LP64) && ELFSIZE == 32 +#define RTLD_ELF32_CAST (uintptr_t) +#else +#define RTLD_ELF32_CAST +#endif + /* function descriptors */ #ifdef __HAVE_FUNCTION_DESCRIPTORS Elf_Addr _rtld_function_descriptor_alloc(const Obj_Entry *, @@ -487,12 +496,12 @@ Elf_Addr _rtld_call_function_addr(const static inline void _rtld_call_function_void(const Obj_Entry *obj, Elf_Addr addr) { - ((void (*)(void))addr)(); + ((void (*)(void)) RTLD_ELF32_CAST addr)(); } static inline Elf_Addr _rtld_call_function_addr(const Obj_Entry *obj, Elf_Addr addr) { - return ((Elf_Addr(*)(void))addr)(); + return ((Elf_Addr(*)(void)) RTLD_ELF32_CAST addr)(); } #endif /* __HAVE_FUNCTION_DESCRIPTORS */