this symbol. */
unsigned int got_type;
+ /* TRUE if symbol is defined as a protected symbol. */
+ unsigned int def_protected : 1;
+
/* A pointer to the most recently used stub hash entry against this
symbol. */
struct elf_aarch64_stub_hash_entry *stub_cache;
static void
elfNN_aarch64_merge_symbol_attribute (struct elf_link_hash_entry *h,
unsigned int st_other,
- bool definition ATTRIBUTE_UNUSED,
+ bool definition,
bool dynamic ATTRIBUTE_UNUSED)
{
+ if (definition)
+ {
+ struct elf_aarch64_link_hash_entry *eh
+ = (struct elf_aarch64_link_hash_entry *)h;
+ eh->def_protected = ELF_ST_VISIBILITY (st_other) == STV_PROTECTED;
+ }
+
unsigned int isym_sto = st_other & ~ELF_ST_VISIBILITY (-1);
unsigned int h_sto = h->other & ~ELF_ST_VISIBILITY (-1);
if (h->dyn_relocs == NULL)
return true;
+ for (p = h->dyn_relocs; p != NULL; p = p->next)
+ if (eh->def_protected)
+ {
+ /* Disallow copy relocations against protected symbol. */
+ asection *s = p->sec->output_section;
+ if (s != NULL && (s->flags & SEC_READONLY) != 0)
+ {
+ info->callbacks->einfo
+ /* xgettext:c-format */
+ (_ ("%F%P: %pB: copy relocation against non-copyable "
+ "protected symbol `%s'\n"),
+ p->sec->owner, h->root.root.string);
+ return false;
+ }
+ }
+
/* In the shared -Bsymbolic case, discard space allocated for
dynamic pc-relative relocs against symbols which turn out to be
defined in regular objects. For the normal shared case, discard
{copy-reloc-exe-2.s} {{objdump -R copy-reloc-2.d}} "copy-reloc-2"}
{"ld-aarch64/exe with copy relocation elimination" "-e0 tmpdir/copy-reloc-so.so" "" ""
{copy-reloc-exe-eliminate.s} {{objdump -R copy-reloc-eliminate.d}} "copy-reloc-elimination"}
+ {"Build .so with protected data" "-shared" "" "" {protected.s}
+ {} "protected.so"}
{"ld-aarch64/so with global func" "-shared" "" "" {func-in-so.s}
{} "func-in-so.so"}
{"ld-aarch64/func sym hash opt for exe"
{} "libbti-plt-so.so"}
}
+set aarch64elfcclinktests [list \
+ [list "copy relocation on protected data" \
+ "-no-pie tmpdir/copy-reloc-exe.o tmpdir/protected.so" "" \
+ {} {{error_output copy-reloc-protected.d}} "copy-reloc-protected"]
+]
+
if [check_shared_lib_support] {
run_ld_link_tests $aarch64elflinktests
+ run_cc_link_tests $aarch64elfcclinktests
}
run_dump_test "bti-plt-3"