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 */