projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update thread_control_state::trap_expected comments
[deliverable/binutils-gdb.git]
/
gold
/
copy-relocs.h
diff --git
a/gold/copy-relocs.h
b/gold/copy-relocs.h
index d1e2323b25c6baffc4970621f5f9d926111043e4..885d685c777ab9c365fe627994ee2eccf66475eb 100644
(file)
--- a/
gold/copy-relocs.h
+++ b/
gold/copy-relocs.h
@@
-1,6
+1,6
@@
// copy-relocs.h -- handle COPY relocations for gold -*- C++ -*-
// copy-relocs.h -- handle COPY relocations for gold -*- C++ -*-
-// Copyright
2006, 2007, 2008
Free Software Foundation, Inc.
+// Copyright
(C) 2006-2020
Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
@@
-54,7
+54,8
@@
class Copy_relocs
public:
Copy_relocs(unsigned int copy_reloc_type)
public:
Copy_relocs(unsigned int copy_reloc_type)
- : copy_reloc_type_(copy_reloc_type), dynbss_(NULL), entries_()
+ : entries_(), copy_reloc_type_(copy_reloc_type), dynbss_(NULL),
+ dynrelro_(NULL)
{ }
// This is called while scanning relocs if we see a relocation
{ }
// This is called while scanning relocs if we see a relocation
@@
-65,10
+66,15
@@
class Copy_relocs
// will wind up. REL is the reloc itself. The Output_data_reloc
// section is where the dynamic relocs are put.
void
// will wind up. REL is the reloc itself. The Output_data_reloc
// section is where the dynamic relocs are put.
void
- copy_reloc(Symbol_table*, Layout*, Sized_symbol<size>* sym,
+ copy_reloc(Symbol_table*,
+ Layout*,
+ Sized_symbol<size>* sym,
Sized_relobj_file<size, big_endian>* object,
Sized_relobj_file<size, big_endian>* object,
- unsigned int shndx, Output_section* output_section,
- const Reloc& rel,
+ unsigned int shndx,
+ Output_section* output_section,
+ unsigned int r_type,
+ typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+ typename elfcpp::Elf_types<size>::Elf_Swxword r_addend,
Output_data_reloc<sh_type, true, size, big_endian>*);
// Return whether there are any saved relocations.
Output_data_reloc<sh_type, true, size, big_endian>*);
// Return whether there are any saved relocations.
@@
-87,16
+93,15
@@
class Copy_relocs
Output_data*, off_t,
Output_data_reloc<sh_type, true, size, big_endian>*);
Output_data*, off_t,
Output_data_reloc<sh_type, true, size, big_endian>*);
- pr
ivate
:
+ pr
otected
:
typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
// This POD class holds the relocations we are saving. We will emit
// these relocations if it turns out that the symbol does not
// require a COPY relocation.
typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
// This POD class holds the relocations we are saving. We will emit
// these relocations if it turns out that the symbol does not
// require a COPY relocation.
-
class
Copy_reloc_entry
+
struct
Copy_reloc_entry
{
{
- public:
Copy_reloc_entry(Symbol* sym, unsigned int reloc_type,
Sized_relobj_file<size, big_endian>* relobj,
unsigned int shndx,
Copy_reloc_entry(Symbol* sym, unsigned int reloc_type,
Sized_relobj_file<size, big_endian>* relobj,
unsigned int shndx,
@@
-107,13
+112,6
@@
class Copy_relocs
address_(address), addend_(addend)
{ }
address_(address), addend_(addend)
{ }
- // Emit this reloc if appropriate. This is called after we have
- // scanned all the relocations, so we know whether we emitted a
- // COPY relocation for SYM_.
- void
- emit(Output_data_reloc<sh_type, true, size, big_endian>*);
-
- private:
Symbol* sym_;
unsigned int reloc_type_;
Sized_relobj_file<size, big_endian>* relobj_;
Symbol* sym_;
unsigned int reloc_type_;
Sized_relobj_file<size, big_endian>* relobj_;
@@
-123,32
+121,44
@@
class Copy_relocs
Addend addend_;
};
Addend addend_;
};
+ // Make a new COPY reloc and emit it.
+ void
+ make_copy_reloc(Symbol_table*, Layout*, Sized_symbol<size>*,
+ Sized_relobj_file<size, big_endian>* object,
+ Output_data_reloc<sh_type, true, size, big_endian>*);
+
// A list of relocs to be saved.
typedef std::vector<Copy_reloc_entry> Copy_reloc_entries;
// A list of relocs to be saved.
typedef std::vector<Copy_reloc_entry> Copy_reloc_entries;
+ // The list of relocs we are saving.
+ Copy_reloc_entries entries_;
+
+ private:
// Return whether we need a COPY reloc.
bool
need_copy_reloc(Sized_symbol<size>* gsym,
Sized_relobj_file<size, big_endian>* object,
unsigned int shndx) const;
// Return whether we need a COPY reloc.
bool
need_copy_reloc(Sized_symbol<size>* gsym,
Sized_relobj_file<size, big_endian>* object,
unsigned int shndx) const;
- // Make a new COPY reloc and emit it.
- void
- make_copy_reloc(Symbol_table*, Layout*, Sized_symbol<size>*,
- Output_data_reloc<sh_type, true, size, big_endian>*);
-
// Save a reloc against SYM for possible emission later.
void
// Save a reloc against SYM for possible emission later.
void
- save(Symbol*, Sized_relobj_file<size, big_endian>*, unsigned int shndx,
- Output_section*, const Reloc& rel);
+ save(Symbol*,
+ Sized_relobj_file<size, big_endian>*,
+ unsigned int shndx,
+ Output_section*,
+ unsigned int r_type,
+ typename elfcpp::Elf_types<size>::Elf_Addr r_offset,
+ typename elfcpp::Elf_types<size>::Elf_Swxword r_addend);
// The target specific relocation type of the COPY relocation.
const unsigned int copy_reloc_type_;
// The dynamic BSS data which goes into the .bss section. This is
// The target specific relocation type of the COPY relocation.
const unsigned int copy_reloc_type_;
// The dynamic BSS data which goes into the .bss section. This is
- // where variables which require COPY relocations are placed.
+ // where
writable
variables which require COPY relocations are placed.
Output_data_space* dynbss_;
Output_data_space* dynbss_;
- // The list of relocs we are saving.
- Copy_reloc_entries entries_;
+ // The dynamic read-only data, which goes into the .data.rel.ro section.
+ // This is where read-only variables which require COPY relocations are
+ // placed.
+ Output_data_space* dynrelro_;
};
} // End namespace gold.
};
} // End namespace gold.
This page took
0.02606 seconds
and
4
git commands to generate.