From ac33696c68c399fcb8cd7f3a095abc55fd360033 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 26 Feb 2004 03:54:06 +0000 Subject: [PATCH] 2004-02-25 H.J. Lu * elfxx-ia64.c (elfNN_ia64_dyn_reloc_entry): Add the reltext. field to track if a relocation is against readonly section. (count_dyn_reloc): Take a new argument for rent->reltext. (elfNN_ia64_check_relocs): Adjust call to count_dyn_reloc. (get_reloc_section): Don't set ia64_info->reltext here. (allocate_dynrel_entries): Set ia64_info->reltext here. --- bfd/ChangeLog | 9 +++++++++ bfd/elfxx-ia64.c | 22 ++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0ccab082a5c..6aadd114889 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2004-02-25 H.J. Lu + + * elfxx-ia64.c (elfNN_ia64_dyn_reloc_entry): Add the reltext. + field to track if a relocation is against readonly section. + (count_dyn_reloc): Take a new argument for rent->reltext. + (elfNN_ia64_check_relocs): Adjust call to count_dyn_reloc. + (get_reloc_section): Don't set ia64_info->reltext here. + (allocate_dynrel_entries): Set ia64_info->reltext here. + 2004-02-24 Alexandre Oliva * elf32-frv.c (FRV_SYM_LOCAL): Weak undefined doesn't imply local. diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index e223a10e09b..332e361024b 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -92,6 +92,9 @@ struct elfNN_ia64_dyn_sym_info asection *srel; int type; int count; + + /* Is this reloc against readonly section? */ + bfd_boolean reltext; } *reloc_entries; /* TRUE when the section contents have been updated. */ @@ -243,9 +246,6 @@ static asection *get_pltoff static asection *get_reloc_section PARAMS ((bfd *abfd, struct elfNN_ia64_link_hash_table *ia64_info, asection *sec, bfd_boolean create)); -static bfd_boolean count_dyn_reloc - PARAMS ((bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i, - asection *srel, int type)); static bfd_boolean elfNN_ia64_check_relocs PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec, const Elf_Internal_Rela *relocs)); @@ -2175,18 +2175,12 @@ get_reloc_section (abfd, ia64_info, sec, create) return NULL; } - if (sec->flags & SEC_READONLY) - ia64_info->reltext = 1; - return srel; } static bfd_boolean -count_dyn_reloc (abfd, dyn_i, srel, type) - bfd *abfd; - struct elfNN_ia64_dyn_sym_info *dyn_i; - asection *srel; - int type; +count_dyn_reloc (bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i, + asection *srel, int type, bfd_boolean reltext) { struct elfNN_ia64_dyn_reloc_entry *rent; @@ -2207,6 +2201,7 @@ count_dyn_reloc (abfd, dyn_i, srel, type) rent->count = 0; dyn_i->reloc_entries = rent; } + rent->reltext = reltext; rent->count++; return TRUE; @@ -2491,7 +2486,8 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs) if (!srel) return FALSE; } - if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type)) + if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type, + (sec->flags & SEC_READONLY))) return FALSE; } } @@ -2798,6 +2794,8 @@ allocate_dynrel_entries (dyn_i, data) default: abort (); } + if (rent->reltext) + ia64_info->reltext = 1; rent->srel->_raw_size += sizeof (ElfNN_External_Rela) * count; } -- 2.30.2