diff options
author | Cary Coutant <ccoutant@google.com> | 2008-03-25 18:37:16 +0000 |
---|---|---|
committer | Cary Coutant <ccoutant@google.com> | 2008-03-25 18:37:16 +0000 |
commit | 0a65a3a7402d9b8523844366c638a0354f48dfa4 (patch) | |
tree | 38d2a9a2cbf1277091cd8de1f92c3e6871156407 /gold/output.h | |
parent | 403fe1979f7a9e128d3904731e709fadbf60ea81 (diff) | |
download | gdb-0a65a3a7402d9b8523844366c638a0354f48dfa4.zip gdb-0a65a3a7402d9b8523844366c638a0354f48dfa4.tar.gz gdb-0a65a3a7402d9b8523844366c638a0354f48dfa4.tar.bz2 |
* i386.cc (Target_i386::Got_type): New enum declaration.
(Target_i386::Scan::local): Updated callers of Output_data_got
member functions.
(Target_i386::Scan::global): Likewise.
(Target_i386::Relocate::relocate): Likewise.
(Target_i386::Relocate::relocate_tls): Likewise.
* object.h (Got_offset_list): New class.
(Sized_relobj::local_has_got_offset): Added got_type parameter.
(Sized_relobj::local_got_offset): Likewise.
(Sized_relobj::set_local_got_offset): Likewise.
(Sized_relobj::local_has_tls_got_offset): Removed.
(Sized_relobj::local_tls_got_offset): Removed.
(Sized_relobj::set_local_tls_got_offset): Removed.
(Sized_relobj::Local_got_offsets): Changed to store a list of offsets.
* output.cc (Output_data_got::add_global): Added got_type parameter.
(Output_data_got::add_global_with_rel): Likewise.
(Output_data_got::add_global_with_rela): Likewise.
(Output_data_got::add_global_pair_with_rel): New function.
(Output_data_got::add_global_pair_with_rela): New function.
(Output_data_got::add_local): Added got_type parameter.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_with_rela): Likewise.
(Output_data_got::add_local_pair_with_rel): New function.
(Output_data_got::add_local_pair_with_rela): New function.
(Output_data_got::add_global_tls): Removed.
(Output_data_got::add_global_tls_with_rel): Removed.
(Output_data_got::add_global_tls_with_rela): Removed.
(Output_data_got::add_local_tls): Removed.
(Output_data_got::add_local_tls_with_rel): Removed.
(Output_data_got::add_local_tls_with_rela): Removed.
* output.h (Output_data_got::add_global): Added got_type parameter.
(Output_data_got::add_global_with_rel): Likewise.
(Output_data_got::add_global_with_rela): Likewise.
(Output_data_got::add_global_pair_with_rel): New function.
(Output_data_got::add_global_pair_with_rela): New function.
(Output_data_got::add_local): Added got_type parameter.
(Output_data_got::add_local_with_rel): Likewise.
(Output_data_got::add_local_with_rela): Likewise.
(Output_data_got::add_local_pair_with_rel): New function.
(Output_data_got::add_local_pair_with_rela): New function.
(Output_data_got::add_global_tls): Removed.
(Output_data_got::add_global_tls_with_rel): Removed.
(Output_data_got::add_global_tls_with_rela): Removed.
(Output_data_got::add_local_tls): Removed.
(Output_data_got::add_local_tls_with_rel): Removed.
(Output_data_got::add_local_tls_with_rela): Removed.
* resolve.cc (Symbol::override_base_with_special): Removed
reference to has_got_offset_ field.
* symtab.cc (Symbol::init_fields): Replaced initialization
of got_offset_ with got_offsets_. Removed initialization
of has_got_offset_
*symtab.h (Symbol::has_got_offset): Aded got_type parameter.
(Symbol::got_offset): Likewise.
(Symbol::set_got_offset): Likewise.
(Symbol::has_tls_got_offset): Removed.
(Symbol::tls_got_offset): Removed.
(Symbol::set_tls_got_offset): Removed.
(Symbol::got_offset_): Removed.
(Symbol::tls_mod_got_offset_): Removed.
(Symbol::tls_pair_got_offset_): Removed.
(Symbol::got_offsets_): New field.
(Symbol::has_got_offset): Removed.
(Symbol::has_tls_mod_got_offset): Removed.
(Symbol::has_tls_pair_got_offset): Removed.
* x86_64.cc (Target_x86_64::Got_type): New enum declaration.
(Target_x86_64::Scan::local): Updated callers of Output_data_got
member functions.
(Target_x86_64::Scan::global): Likewise.
(Target_x86_64::Relocate::relocate): Likewise.
(Target_x86_64::Relocate::relocate_tls): Likewise.
Diffstat (limited to 'gold/output.h')
-rw-r--r-- | gold/output.h | 91 |
1 files changed, 34 insertions, 57 deletions
diff --git a/gold/output.h b/gold/output.h index e394538..2b864f3 100644 --- a/gold/output.h +++ b/gold/output.h @@ -1362,85 +1362,62 @@ class Output_data_got : public Output_section_data_build // Add an entry for a global symbol to the GOT. Return true if this // is a new GOT entry, false if the symbol was already in the GOT. bool - add_global(Symbol* gsym); + add_global(Symbol* gsym, unsigned int got_type); // Add an entry for a global symbol to the GOT, and add a dynamic // relocation of type R_TYPE for the GOT entry. void - add_global_with_rel(Symbol* gsym, Rel_dyn* rel_dyn, unsigned int r_type); + add_global_with_rel(Symbol* gsym, unsigned int got_type, + Rel_dyn* rel_dyn, unsigned int r_type); void - add_global_with_rela(Symbol* gsym, Rela_dyn* rela_dyn, unsigned int r_type); + add_global_with_rela(Symbol* gsym, unsigned int got_type, + Rela_dyn* rela_dyn, unsigned int r_type); + + // Add a pair of entries for a global symbol to the GOT, and add + // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively. + void + add_global_pair_with_rel(Symbol* gsym, unsigned int got_type, + Rel_dyn* rel_dyn, unsigned int r_type_1, + unsigned int r_type_2); + + void + add_global_pair_with_rela(Symbol* gsym, unsigned int got_type, + Rela_dyn* rela_dyn, unsigned int r_type_1, + unsigned int r_type_2); // Add an entry for a local symbol to the GOT. This returns true if // this is a new GOT entry, false if the symbol already has a GOT // entry. bool - add_local(Sized_relobj<size, big_endian>* object, unsigned int sym_index); + add_local(Sized_relobj<size, big_endian>* object, unsigned int sym_index, + unsigned int got_type); - // Add an entry for a global symbol to the GOT, and add a dynamic + // Add an entry for a local symbol to the GOT, and add a dynamic // relocation of type R_TYPE for the GOT entry. void add_local_with_rel(Sized_relobj<size, big_endian>* object, - unsigned int sym_index, Rel_dyn* rel_dyn, - unsigned int r_type); + unsigned int sym_index, unsigned int got_type, + Rel_dyn* rel_dyn, unsigned int r_type); void add_local_with_rela(Sized_relobj<size, big_endian>* object, - unsigned int sym_index, Rela_dyn* rela_dyn, - unsigned int r_type); - - // Add an entry (or pair of entries) for a global TLS symbol to the GOT. - // Return true if this is a new GOT entry, false if the symbol was - // already in the GOT. - bool - add_global_tls(Symbol* gsym, bool need_pair); - - // Add an entry for a global TLS symbol to the GOT, and add a dynamic - // relocation of type R_TYPE. - void - add_global_tls_with_rel(Symbol* gsym, Rel_dyn* rel_dyn, - unsigned int r_type); - - void - add_global_tls_with_rela(Symbol* gsym, Rela_dyn* rela_dyn, - unsigned int r_type); - - // Add a pair of entries for a global TLS symbol to the GOT, and add - // dynamic relocations of type MOD_R_TYPE and DTV_R_TYPE, respectively. - void - add_global_tls_with_rel(Symbol* gsym, Rel_dyn* rel_dyn, - unsigned int mod_r_type, - unsigned int dtv_r_type); - - void - add_global_tls_with_rela(Symbol* gsym, Rela_dyn* rela_dyn, - unsigned int mod_r_type, - unsigned int dtv_r_type); - - // Add an entry (or pair of entries) for a local TLS symbol to the GOT. - // This returns true if this is a new GOT entry, false if the symbol - // already has a GOT entry. - bool - add_local_tls(Sized_relobj<size, big_endian>* object, - unsigned int sym_index, bool need_pair); + unsigned int sym_index, unsigned int got_type, + Rela_dyn* rela_dyn, unsigned int r_type); - // Add an entry (or pair of entries) for a local TLS symbol to the GOT, - // and add a dynamic relocation of type R_TYPE for the first GOT entry. - // Because this is a local symbol, the first GOT entry can be relocated - // relative to a section symbol, and the second GOT entry will have an - // dtv-relative value that can be computed at link time. + // Add a pair of entries for a local symbol to the GOT, and add + // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively. void - add_local_tls_with_rel(Sized_relobj<size, big_endian>* object, - unsigned int sym_index, unsigned int shndx, - bool need_pair, Rel_dyn* rel_dyn, - unsigned int r_type); + add_local_pair_with_rel(Sized_relobj<size, big_endian>* object, + unsigned int sym_index, unsigned int shndx, + unsigned int got_type, Rel_dyn* rel_dyn, + unsigned int r_type_1, unsigned int r_type_2); void - add_local_tls_with_rela(Sized_relobj<size, big_endian>* object, - unsigned int sym_index, unsigned int shndx, - bool need_pair, Rela_dyn* rela_dyn, - unsigned int r_type); + add_local_pair_with_rela(Sized_relobj<size, big_endian>* object, + unsigned int sym_index, unsigned int shndx, + unsigned int got_type, Rela_dyn* rela_dyn, + unsigned int r_type_1, unsigned int r_type_2); // Add a constant to the GOT. This returns the offset of the new // entry from the start of the GOT. |