* output.h (Output_data_got::add_constant): Tidy.
authorAlan Modra <amodra@gmail.com>
Mon, 14 Oct 2013 02:53:01 +0000 (02:53 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 14 Oct 2013 02:53:01 +0000 (02:53 +0000)
(Output_data_got::add_constant_pair): New function.
* powerpc.cc (Output_data_got_powerpc): Override all Output_data_got
methods used so as to first call reserve_ent().

gold/ChangeLog
gold/output.h
gold/powerpc.cc

index 59015a0a98d292ae95df1f0f0069e3c945e3b77b..2d16bbc1609516dc5ae1f2ccd49fed73c72aec01 100644 (file)
@@ -1,3 +1,10 @@
+2013-10-14  Alan Modra  <amodra@gmail.com>
+
+       * output.h (Output_data_got::add_constant): Tidy.
+       (Output_data_got::add_constant_pair): New function.
+       * powerpc.cc (Output_data_got_powerpc): Override all Output_data_got
+       methods used so as to first call reserve_ent().
+
 2013-10-11  Roland McGrath  <mcgrathr@google.com>
 
        * powerpc.cc (Output_data_got_powerpc): Remove unused methods
index a689a44558954e9e8ca9838f6b599a1a13754723..574d270c9b2cd330e011aa17182167e561e097fe 100644 (file)
@@ -2380,10 +2380,13 @@ class Output_data_got : public Output_data_got_base
   // entry from the start of the GOT.
   unsigned int
   add_constant(Valtype constant)
-  {
-    unsigned int got_offset = this->add_got_entry(Got_entry(constant));
-    return got_offset;
-  }
+  { return this->add_got_entry(Got_entry(constant)); }
+
+  // Add a pair of constants to the GOT.  This returns the offset of
+  // the new entry from the start of the GOT.
+  unsigned int
+  add_constant_pair(Valtype c1, Valtype c2)
+  { return this->add_got_entry_pair(Got_entry(c1), Got_entry(c2)); }
 
   // Replace GOT entry I with a new constant.
   void
index 36745eaf7329c9356abefcb76eab4bee213639a6..880b367c44c343e1bff9ba380d24099f860e12e8 100644 (file)
@@ -1987,13 +1987,88 @@ public:
       header_index_(size == 32 ? 0x2000 : 0)
   { }
 
+  // Override all the Output_data_got methods we use so as to first call
+  // reserve_ent().
+  bool
+  add_global(Symbol* gsym, unsigned int got_type)
+  {
+    this->reserve_ent();
+    return Output_data_got<size, big_endian>::add_global(gsym, got_type);
+  }
+
+  bool
+  add_global_plt(Symbol* gsym, unsigned int got_type)
+  {
+    this->reserve_ent();
+    return Output_data_got<size, big_endian>::add_global_plt(gsym, got_type);
+  }
+
+  bool
+  add_global_tls(Symbol* gsym, unsigned int got_type)
+  { return this->add_global_plt(gsym, got_type); }
+
+  void
+  add_global_with_rel(Symbol* gsym, unsigned int got_type,
+                     Output_data_reloc_generic* rel_dyn, unsigned int r_type)
+  {
+    this->reserve_ent();
+    Output_data_got<size, big_endian>::
+      add_global_with_rel(gsym, got_type, rel_dyn, r_type);
+  }
+
+  void
+  add_global_pair_with_rel(Symbol* gsym, unsigned int got_type,
+                          Output_data_reloc_generic* rel_dyn,
+                          unsigned int r_type_1, unsigned int r_type_2)
+  {
+    this->reserve_ent(2);
+    Output_data_got<size, big_endian>::
+      add_global_pair_with_rel(gsym, got_type, rel_dyn, r_type_1, r_type_2);
+  }
+
+  bool
+  add_local(Relobj* object, unsigned int sym_index, unsigned int got_type)
+  {
+    this->reserve_ent();
+    return Output_data_got<size, big_endian>::add_local(object, sym_index,
+                                                       got_type);
+  }
+
+  bool
+  add_local_plt(Relobj* object, unsigned int sym_index, unsigned int got_type)
+  {
+    this->reserve_ent();
+    return Output_data_got<size, big_endian>::add_local_plt(object, sym_index,
+                                                           got_type);
+  }
+
+  bool
+  add_local_tls(Relobj* object, unsigned int sym_index, unsigned int got_type)
+  { return this->add_local_plt(object, sym_index, got_type); }
+
+  void
+  add_local_tls_pair(Relobj* object, unsigned int sym_index,
+                    unsigned int got_type,
+                    Output_data_reloc_generic* rel_dyn,
+                    unsigned int r_type)
+  {
+    this->reserve_ent(2);
+    Output_data_got<size, big_endian>::
+      add_local_tls_pair(object, sym_index, got_type, rel_dyn, r_type);
+  }
+
+  unsigned int
+  add_constant(Valtype constant)
+  {
+    this->reserve_ent();
+    return Output_data_got<size, big_endian>::add_constant(constant);
+  }
+
   unsigned int
   add_constant_pair(Valtype c1, Valtype c2)
   {
     this->reserve_ent(2);
-    unsigned int got_offset = this->add_constant(c1);
-    this->add_constant(c2);
-    return got_offset;
+    return Output_data_got<size, big_endian>::add_constant_pair(c1, c2);
   }
 
   // Offset of _GLOBAL_OFFSET_TABLE_.