merge of 2d5572f10b65f0ac7fdf54361b4dae41ebbd51d0
     and fda3a25581b7bfac581504e9e887e9b97f234f86
diff --git a/backends/ChangeLog b/backends/ChangeLog
index b5ae130..e741633 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,14 @@
+2006-07-05  Ulrich Drepper  <drepper@redhat.com>
+
+	* alpha_init.c: Initialize sysvhash_entrysize.
+	* s390_init.c: Likewise.
+
+2006-07-04  Ulrich Drepper  <drepper@redhat.com>
+
+	* common-reloc.c (relative_reloc_p): New function.
+	(init_reloc): Hook it up.
+	* ia64_reloc.def: Define NO_RELATIVE_RELOC.
+
 2006-06-13  Roland McGrath  <roland@redhat.com>
 
 	* ppc64_retval.c: Remove SVR4_STRUCT_RETURN braino.
@@ -5,7 +16,7 @@
 2006-06-12  Ulrich Drepper  <drepper@redhat.com>
 
 	* common-reloc.c (none_reloc_p): New function.
-	(init_reloc): Hoop it up.
+	(init_reloc): Hook it up.
 
 2006-02-22  Roland McGrath  <roland@redhat.com>
 
diff --git a/backends/alpha_init.c b/backends/alpha_init.c
index 9840028..1590fc8 100644
--- a/backends/alpha_init.c
+++ b/backends/alpha_init.c
@@ -1,5 +1,5 @@
 /* Initialization of Alpha specific backend library.
-   Copyright (C) 2002, 2005 Red Hat, Inc.
+   Copyright (C) 2002, 2005, 2006 Red Hat, Inc.
    This file is part of Red Hat elfutils.
    Written by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -54,6 +54,7 @@
   HOOK (eh, dynamic_tag_check);
   HOOK (eh, reloc_simple_type);
   HOOK (eh, return_value_location);
+  eh->sysvhash_entrysize = sizeof (Elf64_Xword);
 
   return MODVERSION;
 }
diff --git a/backends/common-reloc.c b/backends/common-reloc.c
index 9b95655..191b22a 100644
--- a/backends/common-reloc.c
+++ b/backends/common-reloc.c
@@ -121,6 +121,14 @@
   return reloc == R_TYPE (NONE);
 }
 
+#ifndef NO_RELATIVE_RELOC
+bool
+EBLHOOK(relative_reloc_p) (int reloc)
+{
+  return reloc == R_TYPE (RELATIVE);
+}
+#endif
+
 static void
 EBLHOOK(init_reloc) (Ebl *ebl)
 {
@@ -129,4 +137,7 @@
   ebl->reloc_valid_use = EBLHOOK(reloc_valid_use);
   ebl->copy_reloc_p = EBLHOOK(copy_reloc_p);
   ebl->none_reloc_p = EBLHOOK(none_reloc_p);
+#ifndef NO_RELATIVE_RELOC
+  ebl->relative_reloc_p = EBLHOOK(relative_reloc_p);
+#endif
 }
diff --git a/backends/ia64_reloc.def b/backends/ia64_reloc.def
index 0dc001d..a423465 100644
--- a/backends/ia64_reloc.def
+++ b/backends/ia64_reloc.def
@@ -1,5 +1,5 @@
 /* List the relocation types for ia64.  -*- C -*-
-   Copyright (C) 2005 Red Hat, Inc.
+   Copyright (C) 2005, 2006 Red Hat, Inc.
    This file is part of Red Hat elfutils.
 
    Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -106,3 +106,5 @@
 RELOC_TYPE (DTPREL64MSB,	REL|EXEC|DYN)
 RELOC_TYPE (DTPREL64LSB,	REL|EXEC|DYN)
 RELOC_TYPE (LTOFF_DTPREL22,	REL)
+
+#define NO_RELATIVE_RELOC	1
diff --git a/backends/s390_init.c b/backends/s390_init.c
index 64e5639..80cbb83 100644
--- a/backends/s390_init.c
+++ b/backends/s390_init.c
@@ -53,5 +53,9 @@
   HOOK (eh, register_name);
   HOOK (eh, return_value_location);
 
+  /* Only the 64-bit format uses the incorrect hash table entry size.  */
+  if (eh->class == ELFCLASS64)
+    eh->sysvhash_entrysize = sizeof (Elf64_Xword);
+
   return MODVERSION;
 }