aboutsummaryrefslogtreecommitdiff
path: root/gold/output.h
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2008-03-25 18:37:16 +0000
committerCary Coutant <ccoutant@google.com>2008-03-25 18:37:16 +0000
commit0a65a3a7402d9b8523844366c638a0354f48dfa4 (patch)
tree38d2a9a2cbf1277091cd8de1f92c3e6871156407 /gold/output.h
parent403fe1979f7a9e128d3904731e709fadbf60ea81 (diff)
downloadgdb-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.h91
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.