diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2004-02-26 03:54:06 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2004-02-26 03:54:06 +0000 |
commit | ac33696c68c399fcb8cd7f3a095abc55fd360033 (patch) | |
tree | cc1dfbe13f2a87476d07c005ecccc366a49e9de5 /bfd/elfxx-ia64.c | |
parent | e5d2b64f531246911a60815414dd2e8981abc550 (diff) | |
download | gdb-ac33696c68c399fcb8cd7f3a095abc55fd360033.zip gdb-ac33696c68c399fcb8cd7f3a095abc55fd360033.tar.gz gdb-ac33696c68c399fcb8cd7f3a095abc55fd360033.tar.bz2 |
2004-02-25 H.J. Lu <hongjiu.lu@intel.com>
* 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.
Diffstat (limited to 'bfd/elfxx-ia64.c')
-rw-r--r-- | bfd/elfxx-ia64.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index e223a10..332e361 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; } |