This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Final D_PTR Patch



The appended patch adds D_PTR to all places where it was missing for
consistency.

Andreas

2000-03-29  Andreas Jaeger  <aj@suse.de>

	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_runtime_setup):
	Use D_PTR to access relocated entries in l_info.
	(elf_machine_rela): Likewise.

	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup):
	Likewise.
	(elf_machine_rela): Likewise.

	* sysdeps/powerpc/dl-machine.c (__elf_machine_runtime_setup):
	Likewise.
	(__elf_machine_fixup_plt): Likewise.
	(__process_machine_rela): Likewise.

	* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
	(elf_machine_rela): Likewise.

	* sysdeps/arm/dl-machine.h (elf_machine_runtime_setup): Likewise.
	(elf_machine_rel): Likewise.

	* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): Likewise.
	(elf_machine_fixup_plt): Likewise.
	(elf_machine_rela): Likewise.

============================================================
Index: sysdeps/sparc/sparc64/dl-machine.h
--- sysdeps/sparc/sparc64/dl-machine.h	2000/03/23 20:31:05	1.13
+++ sysdeps/sparc/sparc64/dl-machine.h	2000/03/29 10:54:03
@@ -220,7 +220,7 @@
 	      extern char **_dl_argv;
 	      const char *strtab;
 
-	      strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
 	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
 				": Symbol `", strtab + refsym->st_name,
 				"' has different size in shared object, "
@@ -368,7 +368,7 @@
       extern void _dl_runtime_profile_0 (void);
       extern void _dl_runtime_profile_1 (void);
       Elf64_Addr res0_addr, res1_addr;
-      unsigned int *plt = (void *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      unsigned int *plt = (void *) D_PTR (l, l_info[DT_PLTGOT]);
 
       if (! profile)
 	{
============================================================
Index: sysdeps/sparc/sparc32/dl-machine.h
--- sysdeps/sparc/sparc32/dl-machine.h	2000/03/23 20:31:02	1.19
+++ sysdeps/sparc/sparc32/dl-machine.h	2000/03/29 10:54:03
@@ -112,7 +112,7 @@
 	 Their initial contents will arrange when called to set the high 22
 	 bits of %g1 with an offset into the .rela.plt section and jump to
 	 the beginning of the PLT.  */
-      plt = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      plt = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
       if (! profile)
 	rfunc = (Elf32_Addr) &_dl_runtime_resolve;
       else
@@ -387,7 +387,7 @@
 	      extern char **_dl_argv;
 	      const char *strtab;
 
-	      strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
 	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
 				": Symbol `", strtab + refsym->st_name,
 				"' has different size in shared object, "
============================================================
Index: sysdeps/powerpc/dl-machine.c
--- sysdeps/powerpc/dl-machine.c	2000/03/23 20:30:16	1.9
+++ sysdeps/powerpc/dl-machine.c	2000/03/29 10:54:04
@@ -203,7 +203,7 @@
   if (map->l_info[DT_JMPREL])
     {
       Elf32_Word i;
-      Elf32_Word *plt = (Elf32_Word *) map->l_info[DT_PLTGOT]->d_un.d_val;
+      Elf32_Word *plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]);
       Elf32_Word num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val
 				    / sizeof (Elf32_Rela));
       Elf32_Word rel_offset_words = PLT_DATA_START_WORDS (num_plt_entries);
@@ -331,7 +331,7 @@
       
       num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val
 			 / sizeof(Elf32_Rela));
-      plt = (Elf32_Word *) map->l_info[DT_PLTGOT]->d_un.d_val;
+      plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]);
       offset = reloc_addr - plt;
       index = (offset - PLT_INITIAL_ENTRY_WORDS)/2;
       data_words = plt + PLT_DATA_START_WORDS (num_plt_entries);
@@ -444,7 +444,7 @@
 	{
 	  const char *strtab;
 
-	  strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	  strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
 	  _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
 			    ": Symbol `", strtab + refsym->st_name,
 			    "' has different size in shared object, "
@@ -474,7 +474,7 @@
 	    Elf32_Word *plt, *data_words;
 	    Elf32_Word index, offset, num_plt_entries;
 	    
-	    plt = (Elf32_Word *) map->l_info[DT_PLTGOT]->d_un.d_val;
+	    plt = (Elf32_Word *) D_PTR (map, l_info[DT_PLTGOT]);
 	    offset = reloc_addr - plt;
 
 	    if (offset < PLT_DOUBLE_SIZE*2 + PLT_INITIAL_ENTRY_WORDS)
============================================================
Index: sysdeps/m68k/dl-machine.h
--- sysdeps/m68k/dl-machine.h	1999/07/26 08:27:39	1.41
+++ sysdeps/m68k/dl-machine.h	2000/03/29 10:54:04
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  m68k version.
-   Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -78,7 +78,7 @@
 	 to push an offset into the .rela.plt section, push
 	 _GLOBAL_OFFSET_TABLE_[1], and then jump to
 	 _GLOBAL_OFFSET_TABLE_[2].  */
-      got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
       got[1] = (Elf32_Addr) l;	/* Identify this shared object.  */
 
       /* The got[2] entry contains the address of a function which gets
@@ -289,7 +289,7 @@
 	      extern char **_dl_argv;
 	      const char *strtab;
 
-	      strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
 	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
 				": Symbol `", strtab + refsym->st_name,
 				"' has different size in shared object, "
============================================================
Index: sysdeps/arm/dl-machine.h
--- sysdeps/arm/dl-machine.h	2000/01/10 01:42:43	1.19
+++ sysdeps/arm/dl-machine.h	2000/03/29 10:54:05
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  ARM version.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -97,7 +97,7 @@
 	 in.  Their initial contents will arrange when called to push an
 	 index into the .got section, load ip with &_GLOBAL_OFFSET_TABLE_[3],
 	 and then jump to _GLOBAL_OFFSET_TABLE[2].  */
-      got = (Elf32_Addr *) l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
       got[1] = (Elf32_Addr) l;	/* Identify this shared object.  */
 
       /* The got[2] entry contains the address of a function which gets
@@ -413,7 +413,7 @@
 	    {
 	      const char *strtab;
 
-	      strtab = (const void *) map->l_info[DT_STRTAB]->d_un.d_ptr;
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
 	      _dl_sysdep_error (_dl_argv[0] ?: "<program name unknown>",
 				": Symbol `", strtab + refsym->st_name,
 				"' has different size in shared object, "
============================================================
Index: sysdeps/alpha/dl-machine.h
--- sysdeps/alpha/dl-machine.h	2000/03/26 20:29:55	1.37
+++ sysdeps/alpha/dl-machine.h	2000/03/29 10:54:05
@@ -97,7 +97,7 @@
       /* The GOT entries for the functions in the PLT have not been
 	 filled in yet.  Their initial contents are directed to the
 	 PLT which arranges for the dynamic linker to be called.  */
-      plt = l->l_info[DT_PLTGOT]->d_un.d_ptr;
+      plt = D_PTR (l, l_info[DT_PLTGOT]);
 
       /* This function will be called to perform the relocation.  */
       if (!profile)
@@ -349,8 +349,8 @@
 
   /* Recover the PLT entry address by calculating reloc's index into the
      .rela.plt, and finding that entry in the .plt.  */
-  rela_plt = (void *) l->l_info[DT_JMPREL]->d_un.d_ptr;
-  plte = (void *) (l->l_info[DT_PLTGOT]->d_un.d_ptr + 32);
+  rela_plt = (void *) D_PTR (l, l_info[DT_JMPREL]);
+  plte = (void *) (D_PTR (l, [DT_PLTGOT]) + 32);
   plte += 3 * (reloc - rela_plt);
 
   /* Find the displacement from the plt entry to the function.  */
@@ -480,7 +480,7 @@
 		 than the dynamic linker's built-in definitions used
 		 while loading those libraries.  */
 	      const Elf64_Sym *const dlsymtab
-		= (void *) map->l_info[DT_SYMTAB]->d_un.d_ptr;
+		= (void *) D_PTR (map, l_info[DT_SYMTAB]);
 	      sym_value -= map->l_addr;
 	      sym_value -= dlsymtab[ELF64_R_SYM(reloc->r_info)].st_value;
 	      sym_value -= reloc->r_addend;

-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.rhein-neckar.de

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]