Place copy relocations in .dynbss when target is read-only.

gold/
	PR ld/20995
	* copy-relocs.cc (Copy_relocs::make_copy_reloc): Use .dynbss for
	read-only data when linking with -z relro.
	* copy-relocs.h (Copy_relocs::dynrelro_): New data member.
	* testsuite/Makefile.am (copy_test_relro): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/copy_test_relro.cc: New source file.
	* testsuite/copy_test_relro_1.cc: New source file.
This commit is contained in:
Cary Coutant
2016-12-27 20:50:47 -08:00
parent 7ff34266fd
commit b733bcb7f5
7 changed files with 162 additions and 17 deletions

View File

@@ -54,7 +54,8 @@ class Copy_relocs
public:
Copy_relocs(unsigned int copy_reloc_type)
: entries_(), copy_reloc_type_(copy_reloc_type), dynbss_(NULL)
: entries_(), copy_reloc_type_(copy_reloc_type), dynbss_(NULL),
dynrelro_(NULL)
{ }
// This is called while scanning relocs if we see a relocation
@@ -152,8 +153,11 @@ class Copy_relocs
// 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_;
// The dynamic read-only data, which goes into the .dynbss section. This
// is where read-only variables which require COPY relocations are placed.
Output_data_space* dynrelro_;
};
} // End namespace gold.