diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a60a7e9ae70a68f4015061c817c786a1f5f8bb6e..215f3c85b26cfedffd9e65305dbc483c40afe638 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-11-21  Richard Henderson  <rth@redhat.com>
+
+	* varasm.c (record_constant): Pad the constructed
+	constant_descriptor appropriately.
+
 Wed Nov 22 00:52:55 2000  J"orn Rennecke <amylaar@redhat.com>
 
 	* rtl.h (traverse_md_constants): Declare.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 799beeb14ee16341f5864c36ddc9c4777d2f5d19..e9925bfd6bf3c69d87dae7b2a7eb463c6c0421fe 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -2797,6 +2797,7 @@ record_constant (exp)
   struct constant_descriptor *next = 0;
   char *label = 0;
   rtx rtl = 0;
+  int pad;
 
   /* Make a struct constant_descriptor.  The first three pointers will
      be filled in later.  Here we just leave space for them.  */
@@ -2804,6 +2805,14 @@ record_constant (exp)
   obstack_grow (&permanent_obstack, (char *) &next, sizeof next);
   obstack_grow (&permanent_obstack, (char *) &label, sizeof label);
   obstack_grow (&permanent_obstack, (char *) &rtl, sizeof rtl);
+
+  /* Align the descriptor for the data payload.  */
+  pad = (offsetof (struct constant_descriptor, u)
+	 - offsetof(struct constant_descriptor, rtl)
+	 - sizeof(next->rtl));
+  if (pad > 0)
+    obstack_blank (&permanent_obstack, pad);
+
   record_constant_1 (exp);
   return (struct constant_descriptor *) obstack_finish (&permanent_obstack);
 }