From e84fe78fbc4573769e4e96baf38696354718b382 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 14 Oct 2013 02:53:01 +0000 Subject: * 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(). --- gold/powerpc.cc | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 78 insertions(+), 3 deletions(-) (limited to 'gold/powerpc.cc') diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 36745ea..880b367 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -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::add_global(gsym, got_type); + } + + bool + add_global_plt(Symbol* gsym, unsigned int got_type) + { + this->reserve_ent(); + return Output_data_got::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:: + 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:: + 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::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::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:: + 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::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::add_constant_pair(c1, c2); } // Offset of _GLOBAL_OFFSET_TABLE_. -- cgit v1.1