summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorJie Zhang <jie.zhang@analog.com>2010-03-19 17:04:15 +0000
committerJie Zhang <jie.zhang@analog.com>2010-03-19 17:04:15 +0000
commitfc1c5dc9208297f79e1459d0697872b699c248f2 (patch)
tree20f6f0fa3ef35d7fce4a098eb22218fb74c72afd /bfd
parentcac8d8783acf3401a8ff30f2803936c5bb2fd998 (diff)
downloadgdb-fc1c5dc9208297f79e1459d0697872b699c248f2.tar.gz
* elf32-arm.c (struct section_list): Remove.
(section_list): Remove typedef. (record_section_with_arm_elf_section_data): Remove. (find_arm_elf_section_entry): Remove. (get_arm_elf_section_data): Use is_arm_elf. (unrecord_section_with_arm_elf_section_data): Remove. (elf32_arm_new_section_hook): Don't call record_section_with_arm_elf_section_data. (elf32_arm_write_section): Set mapcount to -1 when the map has been used. Don't call unrecord_section_with_arm_elf_section_data. (unrecord_section_via_map_over_sections): Remove. (elf32_arm_close_and_cleanup): Remove. (elf32_arm_bfd_free_cached_info): Remove. (bfd_elf32_close_and_cleanup): Don't define. (bfd_elf32_bfd_free_cached_info): Don't define.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog19
-rw-r--r--bfd/elf32-arm.c134
2 files changed, 22 insertions, 131 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 623490c8a52..155888337de 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,22 @@
+2010-03-19 Jie Zhang <jie@codesourcery.com>
+
+ * elf32-arm.c (struct section_list): Remove.
+ (section_list): Remove typedef.
+ (record_section_with_arm_elf_section_data): Remove.
+ (find_arm_elf_section_entry): Remove.
+ (get_arm_elf_section_data): Use is_arm_elf.
+ (unrecord_section_with_arm_elf_section_data): Remove.
+ (elf32_arm_new_section_hook): Don't call
+ record_section_with_arm_elf_section_data.
+ (elf32_arm_write_section): Set mapcount to -1 when
+ the map has been used. Don't call
+ unrecord_section_with_arm_elf_section_data.
+ (unrecord_section_via_map_over_sections): Remove.
+ (elf32_arm_close_and_cleanup): Remove.
+ (elf32_arm_bfd_free_cached_info): Remove.
+ (bfd_elf32_close_and_cleanup): Don't define.
+ (bfd_elf32_bfd_free_cached_info): Don't define.
+
2010-03-18 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/11396
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 6bd29f69c06..565861ef1b4 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -12787,108 +12787,15 @@ elf32_arm_section_from_shdr (bfd *abfd,
return TRUE;
}
-/* A structure used to record a list of sections, independently
- of the next and prev fields in the asection structure. */
-typedef struct section_list
-{
- asection * sec;
- struct section_list * next;
- struct section_list * prev;
-}
-section_list;
-
-/* Unfortunately we need to keep a list of sections for which
- an _arm_elf_section_data structure has been allocated. This
- is because it is possible for functions like elf32_arm_write_section
- to be called on a section which has had an elf_data_structure
- allocated for it (and so the used_by_bfd field is valid) but
- for which the ARM extended version of this structure - the
- _arm_elf_section_data structure - has not been allocated. */
-static section_list * sections_with_arm_elf_section_data = NULL;
-
-static void
-record_section_with_arm_elf_section_data (asection * sec)
-{
- struct section_list * entry;
-
- entry = (struct section_list *) bfd_malloc (sizeof (* entry));
- if (entry == NULL)
- return;
- entry->sec = sec;
- entry->next = sections_with_arm_elf_section_data;
- entry->prev = NULL;
- if (entry->next != NULL)
- entry->next->prev = entry;
- sections_with_arm_elf_section_data = entry;
-}
-
-static struct section_list *
-find_arm_elf_section_entry (asection * sec)
-{
- struct section_list * entry;
- static struct section_list * last_entry = NULL;
-
- /* This is a short cut for the typical case where the sections are added
- to the sections_with_arm_elf_section_data list in forward order and
- then looked up here in backwards order. This makes a real difference
- to the ld-srec/sec64k.exp linker test. */
- entry = sections_with_arm_elf_section_data;
- if (last_entry != NULL)
- {
- if (last_entry->sec == sec)
- entry = last_entry;
- else if (last_entry->next != NULL
- && last_entry->next->sec == sec)
- entry = last_entry->next;
- }
-
- for (; entry; entry = entry->next)
- if (entry->sec == sec)
- break;
-
- if (entry)
- /* Record the entry prior to this one - it is the entry we are most
- likely to want to locate next time. Also this way if we have been
- called from unrecord_section_with_arm_elf_section_data() we will not
- be caching a pointer that is about to be freed. */
- last_entry = entry->prev;
-
- return entry;
-}
-
static _arm_elf_section_data *
get_arm_elf_section_data (asection * sec)
{
- struct section_list * entry;
-
- entry = find_arm_elf_section_entry (sec);
-
- if (entry)
- return elf32_arm_section_data (entry->sec);
+ if (sec && sec->owner && is_arm_elf (sec->owner))
+ return elf32_arm_section_data (sec);
else
return NULL;
}
-static void
-unrecord_section_with_arm_elf_section_data (asection * sec)
-{
- struct section_list * entry;
-
- entry = find_arm_elf_section_entry (sec);
-
- if (entry)
- {
- if (entry->prev != NULL)
- entry->prev->next = entry->next;
- if (entry->next != NULL)
- entry->next->prev = entry->prev;
- if (entry == sections_with_arm_elf_section_data)
- sections_with_arm_elf_section_data = entry->next;
- free (entry);
- }
-}
-
-
typedef struct
{
void *finfo;
@@ -13313,8 +13220,6 @@ elf32_arm_new_section_hook (bfd *abfd, asection *sec)
sec->used_by_bfd = sdata;
}
- record_section_with_arm_elf_section_data (sec);
-
return _bfd_elf_new_section_hook (abfd, sec);
}
@@ -13745,44 +13650,13 @@ elf32_arm_write_section (bfd *output_bfd,
}
free (map);
- arm_data->mapcount = 0;
+ arm_data->mapcount = -1;
arm_data->mapsize = 0;
arm_data->map = NULL;
- unrecord_section_with_arm_elf_section_data (sec);
return FALSE;
}
-static void
-unrecord_section_via_map_over_sections (bfd * abfd ATTRIBUTE_UNUSED,
- asection * sec,
- void * ignore ATTRIBUTE_UNUSED)
-{
- unrecord_section_with_arm_elf_section_data (sec);
-}
-
-static bfd_boolean
-elf32_arm_close_and_cleanup (bfd * abfd)
-{
- if (abfd->sections)
- bfd_map_over_sections (abfd,
- unrecord_section_via_map_over_sections,
- NULL);
-
- return _bfd_elf_close_and_cleanup (abfd);
-}
-
-static bfd_boolean
-elf32_arm_bfd_free_cached_info (bfd * abfd)
-{
- if (abfd->sections)
- bfd_map_over_sections (abfd,
- unrecord_section_via_map_over_sections,
- NULL);
-
- return _bfd_free_cached_info (abfd);
-}
-
/* Display STT_ARM_TFUNC symbols as functions. */
static void
@@ -13969,8 +13843,6 @@ const struct elf_size_info elf32_arm_size_info =
#define bfd_elf32_find_inliner_info elf32_arm_find_inliner_info
#define bfd_elf32_new_section_hook elf32_arm_new_section_hook
#define bfd_elf32_bfd_is_target_special_symbol elf32_arm_is_target_special_symbol
-#define bfd_elf32_close_and_cleanup elf32_arm_close_and_cleanup
-#define bfd_elf32_bfd_free_cached_info elf32_arm_bfd_free_cached_info
#define bfd_elf32_bfd_final_link elf32_arm_final_link
#define elf_backend_get_symbol_type elf32_arm_get_symbol_type