From: Jeff Law Date: Mon, 6 Jan 1997 22:20:38 +0000 (+0000) Subject: * elf32-mn10200.c (elf_mn10200_howto): Don't ever set partial-inplace. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=40131692863c141bbbf2a9386334d4fe1a1bbc75;p=binutils-gdb.git * elf32-mn10200.c (elf_mn10200_howto): Don't ever set partial-inplace. Use bfd_elf_generic_reloc as special function for all relocs. (bfd_elf32_mn10200_reloc): Remove unnecessary function. Working on relocs for the mn10200. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 637cfbc1de8..673e3544f9e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,6 +1,10 @@ Mon Jan 6 13:28:35 1997 Jeffrey A Law (law@cygnus.com) - * elf32-mn10200.c (elf_mn10200_howto): Set partial_inplace for + * elf32-mn10200-c (elf_mn10200_howto): Don't ever set partial-inplace. + Use bfd_elf_generic_reloc as special function for all relocs. + (bfd_elf32_mn10200_reloc): Remove unnecessary function. + + * elf32-mn10200.c (elf_mn10200_howto): Set pcrel_offset for 24bit pc-relative reloc. start-sanitize-tic80 diff --git a/bfd/elf32-mn10200.c b/bfd/elf32-mn10200.c index 699dd690f56..56f85694a8e 100644 --- a/bfd/elf32-mn10200.c +++ b/bfd/elf32-mn10200.c @@ -26,8 +26,6 @@ static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type code)); static void mn10200_info_to_howto PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *)); -static bfd_reloc_status_type bfd_elf32_mn10200_reloc - PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **)); /* We have to use RELA instructions since md_apply_fix3 in the assembler @@ -126,9 +124,9 @@ static reloc_howto_type elf_mn10200_howto_table[] = true, 0, complain_overflow_bitfield, - bfd_elf32_mn10200_reloc, + bfd_elf_generic_reloc, "R_MN10200_PCREL8", - true, + false, 0xff, 0xff, true), @@ -141,9 +139,9 @@ static reloc_howto_type elf_mn10200_howto_table[] = true, 0, complain_overflow_bitfield, - bfd_elf32_mn10200_reloc, + bfd_elf_generic_reloc, "R_MN10200_PCREL24", - true, + false, 0xffffff, 0xffffff, true), @@ -199,103 +197,6 @@ mn10200_info_to_howto (abfd, cache_ptr, dst) cache_ptr->howto = &elf_mn10200_howto_table[r_type]; } -static bfd_reloc_status_type -bfd_elf32_mn10200_reloc (abfd, reloc, symbol, data, isection, obfd, err) - bfd *abfd; - arelent *reloc; - asymbol *symbol; - PTR data; - asection *isection; - bfd *obfd; - char **err; -{ - if (obfd != (bfd *) NULL - && (symbol->flags & BSF_SECTION_SYM) == 0 - && (! reloc->howto->partial_inplace - || reloc->addend == 0)) - { - reloc->address += isection->output_offset; - return bfd_reloc_ok; - } - else if (obfd != NULL) - { - return bfd_reloc_continue; - } - -#if 0 - /* Catch relocs involving undefined symbols. */ - if (bfd_is_und_section (symbol->section) - && (symbol->flags & BSF_WEAK) == 0 - && obfd == NULL) - return bfd_reloc_undefined; - - /* We handle final linking of some relocs ourselves. */ - { - long relocation; - - /* Is the address of the relocation really within the section? */ - if (reloc->address > isection->_cooked_size) - return bfd_reloc_outofrange; - - /* Work out which section the relocation is targetted at and the - initial relocation command value. */ - - /* Get symbol value. (Common symbols are special.) */ - if (bfd_is_com_section (symbol->section)) - relocation = 0; - else - relocation = symbol->value; - - /* Convert input-section-relative symbol value to absolute + addend. */ - relocation += symbol->section->output_section->vma; - relocation += symbol->section->output_offset; - relocation += reloc->addend; - - if (reloc->howto->pc_relative == true) - { - /* Here the variable relocation holds the final address of the - symbol we are relocating against, plus any addend. */ - relocation -= isection->output_section->vma + isection->output_offset; - - /* Deal with pcrel_offset */ - relocation -= reloc->address; - - if (reloc->howto->type == R_MN10200_PCREL32_1BYTE - || reloc->howto->type == R_MN10200_PCREL16_1BYTE - || reloc->howto->type == R_MN10200_PCREL8_1BYTE) - relocation += 1; - else if (reloc->howto->type == R_MN10200_PCREL32_2BYTE - || reloc->howto->type == R_MN10200_PCREL16_2BYTE) - relocation += 2; - } - - /* I've got no clue... */ - reloc->addend = 0; - - if (reloc->howto->size == 0) - { - if (relocation > 0x7f || relocation < -0x80) - return bfd_reloc_overflow; - - bfd_put_8 (abfd, relocation & 0xff, - (bfd_byte *)data + reloc->address); - } - else if (reloc->howto->size == 1) - { - if (relocation > 0x7fff || relocation < -0x8000) - return bfd_reloc_overflow; - - bfd_putb16 (relocation & 0xffff, (bfd_byte *)data + reloc->address); - } - else if (reloc->howto->size == 2) - bfd_putb32 (relocation, (bfd_byte *)data + reloc->address); - return bfd_reloc_ok; - } -#endif - - return bfd_reloc_continue; -} - #define TARGET_LITTLE_SYM bfd_elf32_mn10200_vec #define TARGET_LITTLE_NAME "elf32-mn10200" #define ELF_ARCH bfd_arch_mn10200