elfarm-nabi.c

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

C
678
字号
	 0,			/* dst_mask */	 false),		/* pcrel_offset */  /* Relocs used in ARM Linux */  HOWTO (R_ARM_COPY,		/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_COPY",		/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),                /* pcrel_offset */  HOWTO (R_ARM_GLOB_DAT,	/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_GLOB_DAT",	/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),                /* pcrel_offset */  HOWTO (R_ARM_JUMP_SLOT,	/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_JUMP_SLOT",	/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),                /* pcrel_offset */  HOWTO (R_ARM_RELATIVE,	/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_RELATIVE",	/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),                /* pcrel_offset */  HOWTO (R_ARM_GOTOFF,		/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_GOTOFF",	/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),                /* pcrel_offset */  HOWTO (R_ARM_GOTPC,		/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         true,			/* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_GOTPC",		/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         true),			/* pcrel_offset */  HOWTO (R_ARM_GOT32,		/* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         32,                    /* bitsize */         false,			/* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_GOT32",		/* name */         true,			/* partial_inplace */         0xffffffff,		/* src_mask */         0xffffffff,		/* dst_mask */         false),		/* pcrel_offset */  HOWTO (R_ARM_PLT32,		/* type */         2,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         26,                    /* bitsize */         true,			/* pc_relative */         0,                     /* bitpos */         complain_overflow_bitfield,/* complain_on_overflow */         bfd_elf_generic_reloc, /* special_function */         "R_ARM_PLT32",		/* name */         true,			/* partial_inplace */         0x00ffffff,		/* src_mask */         0x00ffffff,		/* dst_mask */         true),			/* pcrel_offset */  /* End of relocs used in ARM Linux */  HOWTO (R_ARM_RREL32,		/* type */	 0,			/* rightshift */	 0,			/* size (0 = byte, 1 = short, 2 = long) */	 0,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont,/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_RREL32",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0,			/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_ARM_RABS32,		/* type */	 0,			/* rightshift */	 0,			/* size (0 = byte, 1 = short, 2 = long) */	 0,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont,/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_RABS32",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0,			/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_ARM_RPC24,		/* type */	 0,			/* rightshift */	 0,			/* size (0 = byte, 1 = short, 2 = long) */	 0,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont,/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_RPC24",		/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0,			/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_ARM_RBASE,		/* type */	 0,			/* rightshift */	 0,			/* size (0 = byte, 1 = short, 2 = long) */	 0,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont,/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_RBASE",		/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0,			/* dst_mask */	 false),		/* pcrel_offset */};  /* GNU extension to record C++ vtable hierarchy */static reloc_howto_type elf32_arm_vtinherit_howto =  HOWTO (R_ARM_GNU_VTINHERIT, /* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         0,                     /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_dont, /* complain_on_overflow */         NULL,                  /* special_function */         "R_ARM_GNU_VTINHERIT", /* name */         false,                 /* partial_inplace */         0,                     /* src_mask */         0,                     /* dst_mask */         false);                /* pcrel_offset */  /* GNU extension to record C++ vtable member usage */static reloc_howto_type elf32_arm_vtentry_howto =  HOWTO (R_ARM_GNU_VTENTRY,     /* type */         0,                     /* rightshift */         2,                     /* size (0 = byte, 1 = short, 2 = long) */         0,                     /* bitsize */         false,                 /* pc_relative */         0,                     /* bitpos */         complain_overflow_dont, /* complain_on_overflow */         _bfd_elf_rel_vtable_reloc_fn,  /* special_function */         "R_ARM_GNU_VTENTRY",   /* name */         false,                 /* partial_inplace */         0,                     /* src_mask */         0,                     /* dst_mask */         false);                /* pcrel_offset */  /* 12 bit pc relative */static reloc_howto_type elf32_arm_thm_pc11_howto =  HOWTO (R_ARM_THM_PC11,	/* type */	 1,			/* rightshift */	 1,			/* size (0 = byte, 1 = short, 2 = long) */	 11,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_signed,	/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_THM_PC11",	/* name */	 false,			/* partial_inplace */	 0x000007ff,		/* src_mask */	 0x000007ff,		/* dst_mask */	 true);			/* pcrel_offset */  /* 12 bit pc relative */static reloc_howto_type elf32_arm_thm_pc9_howto =  HOWTO (R_ARM_THM_PC9,		/* type */	 1,			/* rightshift */	 1,			/* size (0 = byte, 1 = short, 2 = long) */	 8,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_signed,	/* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_ARM_THM_PC9",	/* name */	 false,			/* partial_inplace */	 0x000000ff,		/* src_mask */	 0x000000ff,		/* dst_mask */	 true);			/* pcrel_offset */static voidelf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)     bfd * abfd ATTRIBUTE_UNUSED;     arelent * bfd_reloc;     Elf32_Internal_Rel * elf_reloc;{  unsigned int r_type;  r_type = ELF32_R_TYPE (elf_reloc->r_info);  switch (r_type)    {    case R_ARM_GNU_VTINHERIT:      bfd_reloc->howto = & elf32_arm_vtinherit_howto;      break;    case R_ARM_GNU_VTENTRY:      bfd_reloc->howto = & elf32_arm_vtentry_howto;      break;    case R_ARM_THM_PC11:      bfd_reloc->howto = & elf32_arm_thm_pc11_howto;      break;    case R_ARM_THM_PC9:      bfd_reloc->howto = & elf32_arm_thm_pc9_howto;      break;    default:      if (r_type >= NUM_ELEM (elf32_arm_howto_table))	bfd_reloc->howto = NULL;      else        bfd_reloc->howto = & elf32_arm_howto_table[r_type];      break;    }}struct elf32_arm_reloc_map  {    bfd_reloc_code_real_type  bfd_reloc_val;    unsigned char             elf_reloc_val;  };static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] ={  {BFD_RELOC_NONE,                 R_ARM_NONE},  {BFD_RELOC_ARM_PCREL_BRANCH,     R_ARM_PC24},  {BFD_RELOC_ARM_PCREL_BLX,        R_ARM_XPC25},  {BFD_RELOC_THUMB_PCREL_BLX,      R_ARM_THM_XPC22},  {BFD_RELOC_32,                   R_ARM_ABS32},  {BFD_RELOC_32_PCREL,             R_ARM_REL32},  {BFD_RELOC_8,                    R_ARM_ABS8},  {BFD_RELOC_16,                   R_ARM_ABS16},  {BFD_RELOC_ARM_OFFSET_IMM,       R_ARM_ABS12},  {BFD_RELOC_ARM_THUMB_OFFSET,     R_ARM_THM_ABS5},  {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22},  {BFD_RELOC_ARM_COPY,             R_ARM_COPY},  {BFD_RELOC_ARM_GLOB_DAT,         R_ARM_GLOB_DAT},  {BFD_RELOC_ARM_JUMP_SLOT,        R_ARM_JUMP_SLOT},  {BFD_RELOC_ARM_RELATIVE,         R_ARM_RELATIVE},  {BFD_RELOC_ARM_GOTOFF,           R_ARM_GOTOFF},  {BFD_RELOC_ARM_GOTPC,            R_ARM_GOTPC},  {BFD_RELOC_ARM_GOT32,            R_ARM_GOT32},  {BFD_RELOC_ARM_PLT32,            R_ARM_PLT32}};static reloc_howto_type *elf32_arm_reloc_type_lookup (abfd, code)     bfd *abfd ATTRIBUTE_UNUSED;     bfd_reloc_code_real_type code;{  unsigned int i;  switch (code)    {    case BFD_RELOC_VTABLE_INHERIT:      return & elf32_arm_vtinherit_howto;    case BFD_RELOC_VTABLE_ENTRY:      return & elf32_arm_vtentry_howto;    case BFD_RELOC_THUMB_PCREL_BRANCH12:      return & elf32_arm_thm_pc11_howto;    case BFD_RELOC_THUMB_PCREL_BRANCH9:      return & elf32_arm_thm_pc9_howto;    default:      for (i = 0; i < NUM_ELEM (elf32_arm_reloc_map); i ++)	if (elf32_arm_reloc_map[i].bfd_reloc_val == code)	  return & elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val];      return NULL;   }}#include "elf32-arm.h"

⌨️ 快捷键说明

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