coff-ppc.c

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

C
2,197
字号
	 false,	                 /* partial_inplace */	 0x00,	 	         /* src_mask */	 0x00,        		 /* dst_mask */	 false),                 /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR64 0x0001  64-bit address */  /* Unused: */  HOWTO(IMAGE_REL_PPC_ADDR64,    /* type */	0,	                 /* rightshift */	3,	                 /* size (0 = byte, 1 = short, 2 = long) */	64,	                 /* bitsize */	false,	                 /* pc_relative */	0,	                 /* bitpos */	complain_overflow_bitfield, 	 /* complain_on_overflow */	0,		         /* special_function */	"ADDR64",               /* name */	true,	                 /* partial_inplace */	MINUS_ONE,	 	 /* src_mask */	MINUS_ONE,        	 /* dst_mask */	false),                 /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR32 0x0002  32-bit address */  /* Used: */  HOWTO (IMAGE_REL_PPC_ADDR32,	/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 0,		        /* special_function */	 "ADDR32",              /* name */	 true,	                /* partial_inplace */	 0xffffffff,            /* src_mask */	 0xffffffff,            /* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR24 0x0003  26-bit address, shifted left 2 (branch absolute) */  /* the LI field is in bit 6 through bit 29 is 24 bits, + 2 for the shift */  /* Of course, That's the IBM approved bit numbering, which is not what */  /* anyone else uses.... The li field is in bit 2 thru 25 */  /* Used: */  HOWTO (IMAGE_REL_PPC_ADDR24,  /* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 26,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 0,		        /* special_function */	 "ADDR24",              /* name */	 true,	                /* partial_inplace */	 0x07fffffc,	        /* src_mask */	 0x07fffffc,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR16 0x0004  16-bit address */  /* Used: */  HOWTO (IMAGE_REL_PPC_ADDR16,  /* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "ADDR16",              /* name */	 true,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR14 0x0005 */  /*  16-bit address, shifted left 2 (load doubleword) */  /* FIXME: the mask is likely wrong, and the bit position may be as well */  /* Unused: */  HOWTO (IMAGE_REL_PPC_ADDR14,  /* type */	 1,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "ADDR16",              /* name */	 true,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_REL24 0x0006 */  /*   26-bit PC-relative offset, shifted left 2 (branch relative) */  /* Used: */  HOWTO (IMAGE_REL_PPC_REL24,   /* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 26,	                /* bitsize */	 true,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "REL24",               /* name */	 true,	                /* partial_inplace */	 0x3fffffc,	        /* src_mask */	 0x3fffffc,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_REL14 0x0007 */  /*   16-bit PC-relative offset, shifted left 2 (br cond relative) */  /* FIXME: the mask is likely wrong, and the bit position may be as well */  /* FIXME: how does it know how far to shift? */  /* Unused: */  HOWTO (IMAGE_REL_PPC_ADDR14,  /* type */	 1,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "ADDR16",              /* name */	 true,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 true),                 /* pcrel_offset */  /* IMAGE_REL_PPC_TOCREL16 0x0008 */  /*   16-bit offset from TOC base */  /* Used: */  HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 ppc_toc16_reloc,       /* special_function */	 "TOCREL16",            /* name */	 false,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_TOCREL14 0x0009 */  /*   16-bit offset from TOC base, shifted left 2 (load doubleword) */  /* Unused: */  HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */	 1,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "TOCREL14",            /* name */	 false,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_ADDR32NB 0x000A */  /*   32-bit addr w/ image base */  /* Unused: */  HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,                     /* special_function */	 "ADDR32NB",            /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                 /* pcrel_offset */  /* IMAGE_REL_PPC_SECREL 0x000B */  /*   va of containing section (as in an image sectionhdr) */  /* Unused: */  HOWTO (IMAGE_REL_PPC_SECREL,/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 ppc_secrel_reloc,      /* special_function */	 "SECREL",              /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 true),                 /* pcrel_offset */  /* IMAGE_REL_PPC_SECTION 0x000C */  /*   sectionheader number */  /* Unused: */  HOWTO (IMAGE_REL_PPC_SECTION,/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 ppc_section_reloc,     /* special_function */	 "SECTION",             /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 true),                 /* pcrel_offset */  /* IMAGE_REL_PPC_IFGLUE 0x000D */  /*   substitute TOC restore instruction iff symbol is glue code */  /* Used: */  HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "IFGLUE",              /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_IMGLUE 0x000E */  /*   symbol is glue code; virtual address is TOC restore instruction */  /* Unused: */  HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */	 0,	                /* rightshift */	 2,	                /* size (0 = byte, 1 = short, 2 = long) */	 32,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 ppc_imglue_reloc,      /* special_function */	 "IMGLUE",              /* name */	 false,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                 /* pcrel_offset */  /* IMAGE_REL_PPC_SECREL16 0x000F */  /*   va of containing section (limited to 16 bits) */  /* Unused: */  HOWTO (IMAGE_REL_PPC_SECREL16,/* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 0,		        /* special_function */	 "SECREL16",            /* name */	 true,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 true),                 /* pcrel_offset */  /* IMAGE_REL_PPC_REFHI             0x0010 */  /* Unused: */  HOWTO (IMAGE_REL_PPC_REFHI,   /* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 ppc_refhi_reloc,	/* special_function */	 "REFHI",               /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                 /* pcrel_offset */  /* IMAGE_REL_PPC_REFLO             0x0011 */  /* Unused: */  HOWTO (IMAGE_REL_PPC_REFLO,   /* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 ppc_refhi_reloc,	/* special_function */	 "REFLO",               /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_PAIR              0x0012 */  /* Unused: */  HOWTO (IMAGE_REL_PPC_PAIR,    /* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_signed, /* complain_on_overflow */	 ppc_pair_reloc,        /* special_function */	 "PAIR",                /* name */	 true,	                /* partial_inplace */	 0xffffffff,	        /* src_mask */	 0xffffffff,        	/* dst_mask */	 false),                /* pcrel_offset */  /* IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 */  /*   16-bit offset from TOC base, without causing a definition */  /* Used: */  HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */	 0,	                /* rightshift */	 1,	                /* size (0 = byte, 1 = short, 2 = long) */	 16,	                /* bitsize */	 false,	                /* pc_relative */	 0,	                /* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 0,                     /* special_function */	 "TOCREL16, TOCDEFN",   /* name */	 false,	                /* partial_inplace */	 0xffff,	        /* src_mask */	 0xffff,        	/* dst_mask */	 false),                /* pcrel_offset */};/* Some really cheezy macros that can be turned on to test stderr :-) */#ifdef DEBUG_RELOC#define UN_IMPL(x)                                           \{                                                            \   static int i;                                             \   if (i == 0)                                               \     {                                                       \       i = 1;                                                \       fprintf (stderr,_("Unimplemented Relocation -- %s\n"),x); \     }                                                       \}#define DUMP_RELOC(n,r)                              \{                                                    \   fprintf (stderr,"%s sym %d, addr %d, addend %d\n", \	   n, (*(r->sym_ptr_ptr))->name,             \	   r->address, r->addend);                   \}/* Given a reloc name, n, and a pointer to an internal_reloc,   dump out interesting information on the contents#define n_name		_n._n_name#define n_zeroes	_n._n_n._n_zeroes#define n_offset	_n._n_n._n_offset*/#define DUMP_RELOC2(n,r)                     \{                                            \   fprintf (stderr,"%s sym %d, r_vaddr %d %s\n", \	   n, r->r_symndx, r->r_vaddr,\	   (((r->r_type) & IMAGE_REL_PPC_TOCDEFN) == 0) \	   ?" ":" TOCDEFN"  );      \}#else#define UN_IMPL(x)#define DUMP_RELOC(n,r)#define DUMP_RELOC2(n,r)#endif/* toc construction and management routines *//* This file is compiled twice, and these variables are defined in one   of the compilations.  FIXME: This is confusing and weird.  Also,   BFD should not use global variables.  */extern bfd* bfd_of_toc_owner;extern long int global_toc_size;extern long int import_table_size;extern long int first_thunk_address;extern long int thunk_size;enum toc_type{  default_toc,  toc_32,  toc_64};enum ref_category{  priv,  pub,  data};struct list_ele{  struct list_ele *next;  bfd_vma addr;  enum ref_category cat;  int offset;  const char *name;};extern struct list_ele *head;extern struct list_ele *tail;static void record_toc  PARAMS ((asection *, int, enum ref_category, const char *));static voidrecord_toc (toc_section, our_toc_offset, cat, name)     asection *toc_section;     int our_toc_offset;     enum ref_category cat;     const char *name;{  /* add this entry to our toc addr-offset-name list */  struct list_ele *t;  t = (struct list_ele *) bfd_malloc (sizeof (struct list_ele));  if (t == NULL)    abort ();  t->next = 0;  t->offset = our_toc_offset;  t->name = name;  t->cat = cat;  t->addr = toc_section->output_offset + our_toc_offset;  if (head == 0)    {      head = t;      tail = t;    }  else    {      tail->next = t;      tail = t;

⌨️ 快捷键说明

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