X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Felf64-ia64-vms.c;h=5ce8775459e117d86aea6afdd8626a1ee08ef51f;hb=da1df1db9ae43050c8de62e4842428ddda7eb509;hp=ffdd84c52f8e5493d5097c6a39c30a341fc02172;hpb=b3adc24a0713411ab38a21dc894dd40dbc5c8f4f;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c index ffdd84c52f..5ce8775459 100644 --- a/bfd/elf64-ia64-vms.c +++ b/bfd/elf64-ia64-vms.c @@ -170,8 +170,9 @@ struct elf64_ia64_allocate_data }; #define elf64_ia64_hash_table(p) \ - (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \ - == IA64_ELF_DATA ? ((struct elf64_ia64_link_hash_table *) ((p)->hash)) : NULL) + ((is_elf_hash_table ((p)->hash) \ + && elf_hash_table_id (elf_hash_table (p)) == IA64_ELF_DATA) \ + ? (struct elf64_ia64_link_hash_table *) (p)->hash : NULL) struct elf64_ia64_vms_obj_tdata { @@ -792,13 +793,11 @@ elf64_ia64_relax_section (bfd *abfd, asection *sec, return TRUE; error_return: - if (isymbuf != NULL && (unsigned char *) isymbuf != symtab_hdr->contents) + if ((unsigned char *) isymbuf != symtab_hdr->contents) free (isymbuf); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != contents) + if (elf_section_data (sec)->this_hdr.contents != contents) free (contents); - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); return FALSE; } @@ -822,11 +821,10 @@ is_unwind_section_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name) flag. */ static bfd_boolean -elf64_ia64_section_flags (flagword *flags, - const Elf_Internal_Shdr *hdr) +elf64_ia64_section_flags (const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_IA_64_SHORT) - *flags |= SEC_SMALL_DATA; + hdr->bfd_section->flags |= SEC_SMALL_DATA; return TRUE; } @@ -884,6 +882,7 @@ elf64_ia64_add_symbol_hook (bfd *abfd, scomm = bfd_make_section_with_flags (abfd, ".scommon", (SEC_ALLOC | SEC_IS_COMMON + | SEC_SMALL_DATA | SEC_LINKER_CREATED)); if (scomm == NULL) return FALSE; @@ -1000,14 +999,11 @@ elf64_ia64_global_dyn_info_free (void **xentry, if (entry->root.root.type == bfd_link_hash_warning) entry = (struct elf64_ia64_link_hash_entry *) entry->root.root.u.i.link; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1021,14 +1017,11 @@ elf64_ia64_local_dyn_info_free (void **slot, struct elf64_ia64_local_hash_entry *entry = (struct elf64_ia64_local_hash_entry *) *slot; - if (entry->info) - { - free (entry->info); - entry->info = NULL; - entry->count = 0; - entry->sorted_count = 0; - entry->size = 0; - } + free (entry->info); + entry->info = NULL; + entry->count = 0; + entry->sorted_count = 0; + entry->size = 0; return TRUE; } @@ -1674,7 +1667,7 @@ get_dyn_sym_info (struct elf64_ia64_link_hash_table *ia64_info, *size_p = size; *info_p = info; -has_space: + has_space: /* Append the new one to the array. */ dyn_i = info + count; memset (dyn_i, 0, sizeof (*dyn_i)); @@ -2845,7 +2838,7 @@ elf64_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, elf_ia64_vms_ident (abfd))) return FALSE; - soname = vms_get_module_name (abfd->filename, TRUE); + soname = vms_get_module_name (bfd_get_filename (abfd), TRUE); if (soname == NULL) return FALSE; strindex = dynstrsec->size; @@ -3284,7 +3277,7 @@ elf64_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info, bfd_boolean final) { if (max_short_vma - min_short_vma >= 0x400000) { -overflow: + overflow: _bfd_error_handler /* xgettext:c-format */ (_("%pB: short data segment overflowed (%#" PRIx64 " >= 0x400000)"), @@ -4234,6 +4227,10 @@ elf64_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) flagword in_flags; bfd_boolean ok = TRUE; + /* FIXME: What should be checked when linking shared libraries? */ + if ((ibfd->flags & DYNAMIC) != 0) + return TRUE; + /* Don't even pretend to support mixed-format linking. */ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) @@ -4374,7 +4371,7 @@ elf64_ia64_object_p (bfd *abfd) flagword flags; const char *name; char *unwi_name, *unw_name; - bfd_size_type amt; + size_t amt; if (abfd->flags & DYNAMIC) return TRUE; @@ -4848,7 +4845,7 @@ elf64_vms_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* Extract IDENT. */ if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) { -error_free_dyn: + error_free_dyn: free (dynbuf); goto error_return; } @@ -5239,11 +5236,8 @@ error_free_dyn: } } - if (isymbuf != NULL) - { - free (isymbuf); - isymbuf = NULL; - } + free (isymbuf); + isymbuf = NULL; /* If this object is the same format as the output object, and it is not a shared library, then let the backend look through the @@ -5300,8 +5294,7 @@ error_free_dyn: error_free_vers: error_free_sym: - if (isymbuf != NULL) - free (isymbuf); + free (isymbuf); error_return: return FALSE; }