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 + -
显示快捷键?