elf32-i860.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,108 行 · 第 1/3 页

C
1,108
字号
	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOGOTOFF1,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOTOFF1",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_SPGOTOFF1,       /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPGOTOFF1",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOGOTOFF2,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOTOFF2",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOGOTOFF3,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOTOFF3",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOPC,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOPC",		/* name */	 false,			/* partial_inplace */	 0xffff,		/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_HIGHADJ,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HIGHADJ",	/* name */	 false,			/* partial_inplace */	 0xffff,		/* src_mask */	 0xffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_HAGOT,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HAGOT",		/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_HAGOTOFF,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HAGOTOFF",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_HAPC,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HAPC",		/* name */	 false,			/* partial_inplace */	 0xffff,		/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_HIGH,	        /* type */	 16,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HIGH",		/* name */	 false,			/* partial_inplace */	 0xffff,		/* src_mask */	 0xffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_HIGOT,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HIGOT",		/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_HIGOTOFF,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_HIGOTOFF",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */};static unsigned char elf_code_to_howto_index[R_860_max + 1];static reloc_howto_type *lookup_howto (rtype)     unsigned int rtype;{  static int initialized = 0;  int i;  int howto_tbl_size = (int) (sizeof (elf32_i860_howto_table)			/ sizeof (elf32_i860_howto_table[0]));  if (! initialized)    {      initialized = 1;      memset (elf_code_to_howto_index, 0xff,	      sizeof (elf_code_to_howto_index));      for (i = 0; i < howto_tbl_size; i++)        elf_code_to_howto_index[elf32_i860_howto_table[i].type] = i;    }  BFD_ASSERT (rtype <= R_860_max);  i = elf_code_to_howto_index[rtype];  if (i >= howto_tbl_size)    return 0;  return elf32_i860_howto_table + i;}/* Given a BFD reloc, return the matching HOWTO structure.  */static reloc_howto_type *elf32_i860_reloc_type_lookup (abfd, code)     bfd * abfd ATTRIBUTE_UNUSED;     bfd_reloc_code_real_type code;{  unsigned int rtype;  switch (code)    {    case BFD_RELOC_NONE:      rtype = R_860_NONE;      break;    case BFD_RELOC_32:      rtype = R_860_32;      break;    case BFD_RELOC_860_COPY:      rtype = R_860_COPY;      break;    case BFD_RELOC_860_GLOB_DAT:      rtype = R_860_GLOB_DAT;      break;    case BFD_RELOC_860_JUMP_SLOT:      rtype = R_860_JUMP_SLOT;      break;    case BFD_RELOC_860_RELATIVE:      rtype = R_860_RELATIVE;      break;    case BFD_RELOC_860_PC26:      rtype = R_860_PC26;      break;    case BFD_RELOC_860_PLT26:      rtype = R_860_PLT26;      break;    case BFD_RELOC_860_PC16:      rtype = R_860_PC16;      break;    case BFD_RELOC_860_LOW0:      rtype = R_860_LOW0;      break;    case BFD_RELOC_860_SPLIT0:      rtype = R_860_SPLIT0;      break;    case BFD_RELOC_860_LOW1:      rtype = R_860_LOW1;      break;    case BFD_RELOC_860_SPLIT1:      rtype = R_860_SPLIT1;      break;    case BFD_RELOC_860_LOW2:      rtype = R_860_LOW2;      break;    case BFD_RELOC_860_SPLIT2:      rtype = R_860_SPLIT2;      break;    case BFD_RELOC_860_LOW3:      rtype = R_860_LOW3;      break;    case BFD_RELOC_860_LOGOT0:      rtype = R_860_LOGOT0;      break;    case BFD_RELOC_860_SPGOT0:      rtype = R_860_SPGOT0;      break;    case BFD_RELOC_860_LOGOT1:      rtype = R_860_LOGOT1;      break;    case BFD_RELOC_860_SPGOT1:      rtype = R_860_SPGOT1;      break;    case BFD_RELOC_860_LOGOTOFF0:      rtype = R_860_LOGOTOFF0;      break;    case BFD_RELOC_860_SPGOTOFF0:      rtype = R_860_SPGOTOFF0;      break;    case BFD_RELOC_860_LOGOTOFF1:      rtype = R_860_LOGOTOFF1;      break;    case BFD_RELOC_860_SPGOTOFF1:      rtype = R_860_SPGOTOFF1;      break;    case BFD_RELOC_860_LOGOTOFF2:      rtype = R_860_LOGOTOFF2;      break;    case BFD_RELOC_860_LOGOTOFF3:      rtype = R_860_LOGOTOFF3;      break;    case BFD_RELOC_860_LOPC:      rtype = R_860_LOPC;      break;    case BFD_RELOC_860_HIGHADJ:      rtype = R_860_HIGHADJ;      break;    case BFD_RELOC_860_HAGOT:      rtype = R_860_HAGOT;      break;    case BFD_RELOC_860_HAGOTOFF:      rtype = R_860_HAGOTOFF;      break;    case BFD_RELOC_860_HAPC:      rtype = R_860_HAPC;      break;    case BFD_RELOC_860_HIGH:      rtype = R_860_HIGH;      break;    case BFD_RELOC_860_HIGOT:      rtype = R_860_HIGOT;      break;    case BFD_RELOC_860_HIGOTOFF:      rtype = R_860_HIGOTOFF;      break;    default:      rtype = 0;      break;    }  return lookup_howto (rtype);}/* Given a ELF reloc, return the matching HOWTO structure.  */static voidelf32_i860_info_to_howto_rela (abfd, bfd_reloc, elf_reloc)     bfd *abfd ATTRIBUTE_UNUSED;     arelent *bfd_reloc;     Elf64_Internal_Rela *elf_reloc;{  bfd_reloc->howto = lookup_howto (ELF32_R_TYPE (elf_reloc->r_info));}/* Specialized relocation handler for R_860_SPLITn.  These relocations   involves a 16-bit field that is split into two contiguous parts.  */static bfd_reloc_status_typeelf32_i860_relocate_splitn (input_bfd, rello, contents, value)     bfd *input_bfd;     Elf_Internal_Rela *rello;     bfd_byte *contents;     bfd_vma value;{  bfd_vma insn;  reloc_howto_type *howto;  howto  = lookup_howto (ELF32_R_TYPE (rello->r_info));  insn = bfd_get_32 (input_bfd, contents + rello->r_offset);  /* Relocate.  */  value += rello->r_addend;  /* Separate the fields and insert.  */  value = (((value & 0xf8) << 5) | (value & 0x7ff)) & howto->dst_mask;  insn = (insn & ~howto->dst_mask) | value;  bfd_put_32 (input_bfd, insn, contents + rello->r_offset);  return bfd_reloc_ok;}/* Specialized relocation handler for R_860_PC16.  This relocation   involves a 16-bit, PC-relative field that is split into two contiguous   parts.  */static bfd_reloc_status_typeelf32_i860_relocate_pc16 (input_bfd, input_section, rello, contents, value)     bfd *input_bfd;     asection *input_section;     Elf_Internal_Rela *rello;     bfd_byte *contents;     bfd_vma value;{  bfd_vma insn;  reloc_howto_type *howto;  howto  = lookup_howto (ELF32_R_TYPE (rello->r_info));  insn = bfd_get_32 (input_bfd, contents + rello->r_offset);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?