about summary refs log tree commit diff
path: root/sysdeps/alpha
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-07-01 05:19:18 +0000
committerUlrich Drepper <drepper@redhat.com>2000-07-01 05:19:18 +0000
commit5e087c7152841153da9c696df8596684e359c755 (patch)
treecae5f5ecce14411ed79627adffc0661b94fa1e4a /sysdeps/alpha
parentb856f875e8b72c48ef9b983b702f614615fc80b3 (diff)
downloadglibc-5e087c7152841153da9c696df8596684e359c755.tar.gz
glibc-5e087c7152841153da9c696df8596684e359c755.tar.xz
glibc-5e087c7152841153da9c696df8596684e359c755.zip
Update.
	* assert/Depend: Add localedata.
	* assert/Makefile (test-assert-ENV): New.  Define LANGUAGE=C.
	(test-assert-perr-ENV): New.  Define LANGUAGE=C.

	* sysdeps/alpha/dl-machine.h (elf_machine_rela) [r_type ==
	R_ALPHA_REFQUAD]: Use memcpy to load and store value from
	relocation address to prevent unaligned trap.
	Suggested by Richard Henderson <rth@cygnus.com>.

2000-06-30  Jakub Jelinek  <jakub@redhat.com>

	* io/sys/stat.h (stat64, lstat64, fstat64): Don't define inlines
	if redirecting and either redirection is done using defines or
	not optimizing.

2000-06-30  Ulrich Drepper  <drepper@redhat.com>
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r--sysdeps/alpha/dl-machine.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h
index e20493b33f..a7f13e0192 100644
--- a/sysdeps/alpha/dl-machine.h
+++ b/sysdeps/alpha/dl-machine.h
@@ -500,7 +500,12 @@ elf_machine_rela (struct link_map *map,
 	elf_machine_fixup_plt (map, NULL, reloc, reloc_addr, sym_value);
       else if (r_type == R_ALPHA_REFQUAD)
 	{
-	  sym_value += *reloc_addr;
+	  void *reloc_addr_1 = reloc_addr;
+	  Elf64_Addr reloc_addr_val;
+
+	  /* Load value without causing unaligned trap.  */
+	  memcpy (&reloc_addr_val, reloc_addr_1, 8);
+	  sym_value += reloc_addr_val;
 #ifndef RTLD_BOOTSTRAP
 	  if (map == &_dl_rtld_map)
 	    {
@@ -516,7 +521,8 @@ elf_machine_rela (struct link_map *map,
 	      sym_value -= reloc->r_addend;
 	    }
 #endif
-	  *reloc_addr = sym_value;
+	  /* Store value without causing unaligned trap.  */
+	  memcpy (reloc_addr_1, &sym_value, 8);
 	}
       else
 	_dl_reloc_bad_type (map, r_type, 0);