[git commit prelink] ldso: fix fdpic builds

Mike Frysinger vapier at gentoo.org
Wed Mar 30 11:53:36 UTC 2011


commit: http://git.uclibc.org/uClibc/commit/?id=3ac213101204750950a129e1a245c4730525287f
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/prelink

Commit 33cb7f0b4 tried to add a small optimization for skipping unnecessary
.dynamic adjustments, but did so by referencing an opaque type.  While this
works for non-fdpic targets (since the type can be cast to an integer), it
falls apart for fdpic targets where the type is actually a structure.

Since FDPIC can't support this optimization without walking a series of
linked structures, just skip it.

Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
 ldso/include/dl-elf.h |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h
index cbb2100..5aec64f 100644
--- a/ldso/include/dl-elf.h
+++ b/ldso/include/dl-elf.h
@@ -162,8 +162,13 @@ unsigned int __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info
 		if (dynamic_info[tag]) \
 			dynamic_info[tag] = (unsigned long) DL_RELOC_ADDR(load_off, dynamic_info[tag]); \
 	} while (0)
-	/* Don't adjust .dynamic unnecessarily.  */
-	if (load_off != 0) {
+	/* Don't adjust .dynamic unnecessarily.  For FDPIC targets,
+	   we'd have to walk all the loadsegs to find out if it was
+	   actually unnecessary, so skip this optimization.  */
+#ifndef __FDPIC__
+	if (load_off != 0)
+#endif
+	{
 		ADJUST_DYN_INFO(DT_HASH, load_off);
 		ADJUST_DYN_INFO(DT_PLTGOT, load_off);
 		ADJUST_DYN_INFO(DT_STRTAB, load_off);
-- 
1.7.3.4



More information about the uClibc-cvs mailing list