All of lore.kernel.org
 help / color / mirror / Atom feed
* [parisc-linux] Fix for hppa-linux ld.so with newer binutils
@ 2001-10-20  7:39 Alan Modra
  2001-10-20 13:54 ` [parisc-linux] " Ben Collins
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Alan Modra @ 2001-10-20  7:39 UTC (permalink / raw)
  To: parisc-linux; +Cc: bcollins, randolph, libc-alpha

Newer binutils don't initialise .got entries for global syms, so the
scheme used by sysdeps/hppa/dl-machine.h:elf_machine_dynamic to find
the address of .dynamic no longer works.

ChangeLog
	* sysdeps/hppa/dl-machine.h (elf_machine_dynamic):  Make it a
	const function.  Do not use &_DYNAMIC as .got entries for global
	syms are no longer initialised.  Instead they rely on the reloc,
	which hasn't yet been applied.
	(elf_machine_load_address): Make it const.  Call
	elf_machine_dynamic as that function is called fropm rtld anyway.

-- 
Alan Modra
 
Index: sysdeps/hppa/dl-machine.h
===================================================================
RCS file: /home/cvs/parisc/glibc/sysdeps/hppa/dl-machine.h,v
retrieving revision 1.41
diff -u -p -r1.41 dl-machine.h
--- dl-machine.h	2001/06/08 00:19:01	1.41
+++ dl-machine.h	2001/10/20 07:20:27
@@ -76,42 +76,40 @@ elf_machine_matches_host (const Elf32_Eh
 
 /* Return the link-time address of _DYNAMIC.  */
 static inline Elf32_Addr
+elf_machine_dynamic (void) __attribute__ ((const));
+
+static inline Elf32_Addr
 elf_machine_dynamic (void)
 {
   Elf32_Addr dynamic;
 
-#if 0
-  /* Use this method if GOT address not yet set up.  */
   asm (
 "	b,l	1f,%0\n"
 "	depi	0,31,2,%0\n"
 "1:	addil	L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0\n"
 "	ldw	R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0\n"
       : "=r" (dynamic) : : "r1");
-#else
-  /* This works because we already have our GOT address available.  */
-  dynamic = (Elf32_Addr) &_DYNAMIC;
-#endif
 
   return dynamic;
 }
 
 /* Return the run-time load address of the shared object.  */
 static inline Elf32_Addr
+elf_machine_load_address (void) __attribute__ ((const));
+
+static inline Elf32_Addr
 elf_machine_load_address (void)
 {
-  Elf32_Addr dynamic, dynamic_linkaddress;
+  Elf32_Addr dynamic;
 
   asm (
 "	b,l	1f,%0\n"
 "	depi	0,31,2,%0\n"
 "1:	addil	L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0\n"
-"	ldo	R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%1\n"
-"	addil	L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%0\n"
-"	ldw	R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%%r1),%0\n"
-   : "=r" (dynamic_linkaddress), "=r" (dynamic) : : "r1");
+"	ldo	R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%0\n"
+   : "=r" (dynamic) : : "r1");
 
-  return dynamic - dynamic_linkaddress;
+  return dynamic - elf_machine_dynamic ();
 }
 
 /* Fixup a PLT entry to bounce directly to the function at VALUE.  */

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2001-10-25 15:50 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-10-20  7:39 [parisc-linux] Fix for hppa-linux ld.so with newer binutils Alan Modra
2001-10-20 13:54 ` [parisc-linux] " Ben Collins
2001-10-20 14:34   ` Alan Modra
2001-10-20 15:01     ` Ben Collins
2001-10-24 23:51       ` Ben Collins
2001-10-25  0:56         ` Randolph Chung
2001-10-25  1:12           ` Ben Collins
2001-10-25 15:07         ` Matthew Wilcox
2001-10-25 15:50           ` Ben Collins
2001-10-22  3:44     ` Alan Modra
2001-10-20 18:01 ` [parisc-linux] " Carlos O'Donell Jr.
2001-10-21 11:20   ` Alan Modra
2001-10-22 14:05 ` [parisc-linux] " Alan Modra
2001-10-22 16:04   ` Carlos O'Donell Jr.
2001-10-22 16:11     ` Alan Modra
2001-10-23  1:31   ` Ben Collins
2001-10-23  1:59     ` Randolph Chung

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.