X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Felf32-v850.c;h=0235044d2de47d79b06b1c656da6e5b7fdab6688;hb=ddb9ebd500c5accf0128b703a8154ef710bf604c;hp=21cd4f29375fbfe464aaef078f4a2a8de95be27f;hpb=b93a662bcf1eaebac6af70684fbc5bd510fcadcf;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 21cd4f2937..0235044d2d 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -230,7 +230,7 @@ static void remember_hi16s_reloc (bfd *abfd, bfd_vma addend, bfd_byte *address) { hi16s_location * entry = NULL; - bfd_size_type amt = sizeof (* free_hi16s); + size_t amt = sizeof (* free_hi16s); /* Find a free structure. */ if (free_hi16s == NULL) @@ -3151,6 +3151,8 @@ v850_elf_section_from_shdr (bfd *abfd, const char *name, int shindex) { + flagword flags; + /* There ought to be a place to keep ELF backend specific flags, but at the moment there isn't one. We just keep track of the sections by their name, instead. */ @@ -3158,18 +3160,21 @@ v850_elf_section_from_shdr (bfd *abfd, if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; + flags = 0; switch (hdr->sh_type) { case SHT_V850_SCOMMON: case SHT_V850_TCOMMON: case SHT_V850_ZCOMMON: - if (!bfd_set_section_flags (hdr->bfd_section, - (bfd_section_flags (hdr->bfd_section) - | SEC_IS_COMMON))) - return FALSE; + flags = SEC_IS_COMMON; } - return TRUE; + if ((hdr->sh_flags & SHF_V850_GPREL) != 0) + flags |= SEC_SMALL_DATA; + + return (flags == 0 + || bfd_set_section_flags (hdr->bfd_section, + hdr->bfd_section->flags | flags)); } /* Set the correct type for a V850 ELF section. We do this @@ -4088,16 +4093,13 @@ v850_elf_relax_section (bfd *abfd, } finish: - if (internal_relocs != NULL - && elf_section_data (sec)->relocs != internal_relocs) + if (elf_section_data (sec)->relocs != internal_relocs) free (internal_relocs); - if (contents != NULL - && elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents) + if (elf_section_data (sec)->this_hdr.contents != (unsigned char *) contents) free (contents); - if (isymbuf != NULL - && symtab_hdr->contents != (bfd_byte *) isymbuf) + if (symtab_hdr->contents != (bfd_byte *) isymbuf) free (isymbuf); return result;