ppcboot.c

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

C
543
字号
  sprintf (buf, "_ppcboot_%s_%s", bfd_get_filename (abfd), suffix);  /* Change any non-alphanumeric characters to underscores.  */  for (p = buf; *p; p++)    if (! isalnum ((unsigned char) *p))      *p = '_';  return buf;}/* Return the symbol table.  */static longppcboot_get_symtab (abfd, alocation)     bfd *abfd;     asymbol **alocation;{  asection *sec = ppcboot_get_tdata (abfd)->sec;  asymbol *syms;  unsigned int i;  syms = (asymbol *) bfd_alloc (abfd, PPCBOOT_SYMS * sizeof (asymbol));  if (syms == NULL)    return false;  /* Start symbol.  */  syms[0].the_bfd = abfd;  syms[0].name = mangle_name (abfd, "start");  syms[0].value = 0;  syms[0].flags = BSF_GLOBAL;  syms[0].section = sec;  syms[0].udata.p = NULL;  /* End symbol.  */  syms[1].the_bfd = abfd;  syms[1].name = mangle_name (abfd, "end");  syms[1].value = sec->_raw_size;  syms[1].flags = BSF_GLOBAL;  syms[1].section = sec;  syms[1].udata.p = NULL;  /* Size symbol.  */  syms[2].the_bfd = abfd;  syms[2].name = mangle_name (abfd, "size");  syms[2].value = sec->_raw_size;  syms[2].flags = BSF_GLOBAL;  syms[2].section = bfd_abs_section_ptr;  syms[2].udata.p = NULL;  for (i = 0; i < PPCBOOT_SYMS; i++)    *alocation++ = syms++;  *alocation = NULL;  return PPCBOOT_SYMS;}/* Make an empty symbol.  */static asymbol *ppcboot_make_empty_symbol (abfd)     bfd *abfd;{  return (asymbol *) bfd_alloc (abfd, sizeof (asymbol));}#define ppcboot_print_symbol _bfd_nosymbols_print_symbol/* Get information about a symbol.  */static voidppcboot_get_symbol_info (ignore_abfd, symbol, ret)     bfd *ignore_abfd ATTRIBUTE_UNUSED;     asymbol *symbol;     symbol_info *ret;{  bfd_symbol_info (symbol, ret);}#define ppcboot_bfd_is_local_label_name bfd_generic_is_local_label_name#define ppcboot_get_lineno _bfd_nosymbols_get_lineno#define ppcboot_find_nearest_line _bfd_nosymbols_find_nearest_line#define ppcboot_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol#define ppcboot_read_minisymbols _bfd_generic_read_minisymbols#define ppcboot_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol#define ppcboot_get_reloc_upper_bound \  ((long (*) PARAMS ((bfd *, asection *))) bfd_0l)#define ppcboot_canonicalize_reloc \  ((long (*) PARAMS ((bfd *, asection *, arelent **, asymbol **))) bfd_0l)#define ppcboot_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup/* Write section contents of a ppcboot file.  */static booleanppcboot_set_section_contents (abfd, sec, data, offset, size)     bfd *abfd;     asection *sec;     PTR data;     file_ptr offset;     bfd_size_type size;{  if (! abfd->output_has_begun)    {      bfd_vma low;      asection *s;      /* The lowest section VMA sets the virtual address of the start         of the file.  We use the set the file position of all the         sections.  */      low = abfd->sections->vma;      for (s = abfd->sections->next; s != NULL; s = s->next)	if (s->vma < low)	  low = s->vma;      for (s = abfd->sections; s != NULL; s = s->next)	s->filepos = s->vma - low;      abfd->output_has_begun = true;    }  return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);}static intppcboot_sizeof_headers (abfd, exec)     bfd *abfd ATTRIBUTE_UNUSED;     boolean exec ATTRIBUTE_UNUSED;{  return sizeof (ppcboot_hdr_t);}/* Print out the program headers.  */static booleanppcboot_bfd_print_private_bfd_data (abfd, farg)     bfd *abfd;     PTR farg;{  FILE *f = (FILE *)farg;  ppcboot_data_t *tdata = ppcboot_get_tdata (abfd);  long entry_offset = bfd_getl_signed_32 ((PTR) tdata->header.entry_offset);  long length = bfd_getl_signed_32 ((PTR) tdata->header.length);  int i;  fprintf (f, _("\nppcboot header:\n"));  fprintf (f, _("Entry offset        = 0x%.8lx (%ld)\n"), entry_offset, entry_offset);  fprintf (f, _("Length              = 0x%.8lx (%ld)\n"), length, length);  if (tdata->header.flags)    fprintf (f, _("Flag field          = 0x%.2x\n"), tdata->header.flags);  if (tdata->header.os_id)    fprintf (f, "OS_ID               = 0x%.2x\n", tdata->header.os_id);  if (tdata->header.partition_name)    fprintf (f, _("Partition name      = \"%s\"\n"), tdata->header.partition_name);  for (i = 0; i < 4; i++)    {      long sector_begin  = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_begin);      long sector_length = bfd_getl_signed_32 ((PTR) tdata->header.partition[i].sector_length);      /* Skip all 0 entries */      if (!tdata->header.partition[i].partition_begin.ind	  && !tdata->header.partition[i].partition_begin.head	  && !tdata->header.partition[i].partition_begin.sector	  && !tdata->header.partition[i].partition_begin.cylinder	  && !tdata->header.partition[i].partition_end.ind	  && !tdata->header.partition[i].partition_end.head	  && !tdata->header.partition[i].partition_end.sector	  && !tdata->header.partition[i].partition_end.cylinder	  && !sector_begin && !sector_length)	continue;      fprintf (f, _("\nPartition[%d] start  = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"), i,	       tdata->header.partition[i].partition_begin.ind,	       tdata->header.partition[i].partition_begin.head,	       tdata->header.partition[i].partition_begin.sector,	       tdata->header.partition[i].partition_begin.cylinder);      fprintf (f, _("Partition[%d] end    = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n"), i,	       tdata->header.partition[i].partition_end.ind,	       tdata->header.partition[i].partition_end.head,	       tdata->header.partition[i].partition_end.sector,	       tdata->header.partition[i].partition_end.cylinder);      fprintf (f, _("Partition[%d] sector = 0x%.8lx (%ld)\n"), i, sector_begin, sector_begin);      fprintf (f, _("Partition[%d] length = 0x%.8lx (%ld)\n"), i, sector_length, sector_length);    }  fprintf (f, "\n");  return true;}#define ppcboot_bfd_get_relocated_section_contents \  bfd_generic_get_relocated_section_contents#define ppcboot_bfd_relax_section bfd_generic_relax_section#define ppcboot_bfd_gc_sections bfd_generic_gc_sections#define ppcboot_bfd_link_hash_table_create _bfd_generic_link_hash_table_create#define ppcboot_bfd_link_add_symbols _bfd_generic_link_add_symbols#define ppcboot_bfd_final_link _bfd_generic_final_link#define ppcboot_bfd_link_split_section _bfd_generic_link_split_section#define ppcboot_get_section_contents_in_window \  _bfd_generic_get_section_contents_in_window#define ppcboot_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data#define ppcboot_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data#define ppcboot_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data#define ppcboot_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data#define ppcboot_bfd_set_private_flags _bfd_generic_bfd_set_private_flags#define ppcboot_bfd_print_private_bfd_dat ppcboot_bfd_print_private_bfd_dataconst bfd_target ppcboot_vec ={  "ppcboot",			/* name */  bfd_target_unknown_flavour,	/* flavour */  BFD_ENDIAN_BIG,		/* byteorder is big endian for code */  BFD_ENDIAN_LITTLE,		/* header_byteorder */  EXEC_P,			/* object_flags */  (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA   | SEC_ROM | SEC_HAS_CONTENTS), /* section_flags */  0,				/* symbol_leading_char */  ' ',				/* ar_pad_char */  16,				/* ar_max_namelen */  bfd_getb64, bfd_getb_signed_64, bfd_putb64,  bfd_getb32, bfd_getb_signed_32, bfd_putb32,  bfd_getb16, bfd_getb_signed_16, bfd_putb16,	/* data */  bfd_getl64, bfd_getl_signed_64, bfd_putl64,  bfd_getl32, bfd_getl_signed_32, bfd_putl32,  bfd_getl16, bfd_getl_signed_16, bfd_putl16,	/* hdrs */  {				/* bfd_check_format */    _bfd_dummy_target,    ppcboot_object_p,		/* bfd_check_format */    _bfd_dummy_target,    _bfd_dummy_target,  },  {				/* bfd_set_format */    bfd_false,    ppcboot_mkobject,    bfd_false,    bfd_false,  },  {				/* bfd_write_contents */    bfd_false,    bfd_true,    bfd_false,    bfd_false,  },  BFD_JUMP_TABLE_GENERIC (ppcboot),  BFD_JUMP_TABLE_COPY (ppcboot),  BFD_JUMP_TABLE_CORE (_bfd_nocore),  BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),  BFD_JUMP_TABLE_SYMBOLS (ppcboot),  BFD_JUMP_TABLE_RELOCS (ppcboot),  BFD_JUMP_TABLE_WRITE (ppcboot),  BFD_JUMP_TABLE_LINK (ppcboot),  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),  NULL,  NULL};

⌨️ 快捷键说明

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