⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aoutf1.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
  intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);  intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);  memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));  intcore->fp_stuff_pos = (long) (((struct external_sun3_core *)0)->fp_stuff);  /* FP stuff takes up whole rest of struct, except c_ucode. */  intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -    (file_ptr)(((struct external_sun3_core *)0)->fp_stuff);  /* Ucode is the last thing in the struct -- just before the end */  intcore->c_ucode =     bfd_h_get_32 (abfd, 		  intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);  intcore->c_stacktop = 0x0E000000; /* By experimentation */}/* byte-swap in the Sparc core structure */static voidDEFUN(swapcore_sparc,(abfd, ext, intcore),      bfd *abfd AND      char *ext AND      struct internal_sunos_core *intcore){  struct external_sparc_core *extcore = (struct external_sparc_core *)ext;    intcore->c_magic = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_magic);  intcore->c_len   = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_len  );  intcore->c_regs_pos  = (long) (((struct external_sparc_core *)0)->c_regs);  intcore->c_regs_size = sizeof (extcore->c_regs);  NAME(aout,swap_exec_header_in)(abfd, &extcore->c_aouthdr,&intcore->c_aouthdr);  intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_signo);  intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_tsize);  intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);  intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);  memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));  intcore->fp_stuff_pos = (long) (((struct external_sparc_core *)0)->fp_stuff);  /* FP stuff takes up whole rest of struct, except c_ucode. */  intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -    (file_ptr)(((struct external_sparc_core *)0)->fp_stuff);  /* Ucode is the last thing in the struct -- just before the end */  intcore->c_ucode =    bfd_h_get_32 (abfd, 		  intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);  /* Supposedly the user stack grows downward from the bottom of kernel memory.     Presuming that this remains true, this definition will work. */#define SPARC_USRSTACK (-(128*1024*1024))  intcore->c_stacktop = SPARC_USRSTACK;	/* By experimentation */}/* need this cast because ptr is really void * */#define core_hdr(bfd) ((bfd)->tdata.sun_core_data)#define core_datasec(bfd) (core_hdr(bfd)->data_section)#define core_stacksec(bfd) (core_hdr(bfd)->stack_section)#define core_regsec(bfd) (core_hdr(bfd)->reg_section)#define core_reg2sec(bfd) (core_hdr(bfd)->reg2_section)/* These are stored in the bfd's tdata */struct sun_core_struct {  struct internal_sunos_core *hdr;             /* core file header */  asection *data_section;  asection *stack_section;  asection *reg_section;  asection *reg2_section;};static bfd_target *DEFUN(sunos4_core_file_p,(abfd),      bfd *abfd){  unsigned char longbuf[4];	/* Raw bytes of various header fields */  int core_size;  int core_mag;  struct internal_sunos_core *core;  char *extcore;  struct mergem {    struct sun_core_struct suncoredata;    struct internal_sunos_core internal_sunos_core;    char external_core[1];  } *mergem;    bfd_error = system_call_error;    if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=      sizeof (longbuf))    return 0;  core_mag = bfd_h_get_32 (abfd, longbuf);  if (core_mag != CORE_MAGIC) return 0;  /* SunOS core headers can vary in length; second word is size; */  if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=      sizeof (longbuf))    return 0;  core_size = bfd_h_get_32 (abfd, longbuf);  /* Sanity check */  if (core_size > 20000)    return 0;  if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) < 0) return 0;  mergem = (struct mergem *)bfd_zalloc (abfd, core_size + sizeof (struct mergem));  if (mergem == NULL) {    bfd_error = no_memory;    return 0;  }  extcore = mergem->external_core;  if ((bfd_read ((PTR) extcore, 1, core_size, abfd)) != core_size) {    bfd_error = system_call_error;    bfd_release (abfd, (char *)mergem);    return 0;  }  /* Validate that it's a core file we know how to handle, due to sun     botching the positioning of registers and other fields in a machine     dependent way.  */  core = &mergem->internal_sunos_core;  switch (core_size) {  case SPARC_CORE_LEN:    swapcore_sparc (abfd, extcore, core);    break;  case SUN3_CORE_LEN:    swapcore_sun3 (abfd, extcore, core);    break;  default:    bfd_error = system_call_error;		/* FIXME */    bfd_release (abfd, (char *)mergem);    return 0;  } abfd->tdata.sun_core_data = &mergem->suncoredata; abfd->tdata.sun_core_data->hdr = core;  /* create the sections.  This is raunchy, but bfd_close wants to reclaim     them */  core_stacksec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_stacksec (abfd) == NULL) {  loser:    bfd_error = no_memory;    bfd_release (abfd, (char *)mergem);    return 0;  }  core_datasec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_datasec (abfd) == NULL) {  loser1:    bfd_release (abfd, core_stacksec (abfd));    goto loser;  }  core_regsec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_regsec (abfd) == NULL) {  loser2:    bfd_release (abfd, core_datasec (abfd));    goto loser1;  }  core_reg2sec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));  if (core_reg2sec (abfd) == NULL) {    bfd_release (abfd, core_regsec (abfd));    goto loser2;  }  core_stacksec (abfd)->name = ".stack";  core_datasec (abfd)->name = ".data";  core_regsec (abfd)->name = ".reg";  core_reg2sec (abfd)->name = ".reg2";  core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;  core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;  core_regsec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;  core_reg2sec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;  core_stacksec (abfd)->_raw_size = core->c_ssize;  core_datasec (abfd)->_raw_size = core->c_dsize;  core_regsec (abfd)->_raw_size = core->c_regs_size;  core_reg2sec (abfd)->_raw_size = core->fp_stuff_size;  core_stacksec (abfd)->vma = (core->c_stacktop - core->c_ssize);  core_datasec (abfd)->vma = N_DATADDR(core->c_aouthdr);  core_regsec (abfd)->vma = 0;  core_reg2sec (abfd)->vma = 0;  core_stacksec (abfd)->filepos = core->c_len + core->c_dsize;  core_datasec (abfd)->filepos = core->c_len;  /* We'll access the regs afresh in the core file, like any section: */  core_regsec (abfd)->filepos = (file_ptr)core->c_regs_pos;  core_reg2sec (abfd)->filepos = (file_ptr)core->fp_stuff_pos;  /* Align to word at least */  core_stacksec (abfd)->alignment_power = 2;  core_datasec (abfd)->alignment_power = 2;  core_regsec (abfd)->alignment_power = 2;  core_reg2sec (abfd)->alignment_power = 2;  abfd->sections = core_stacksec (abfd);  core_stacksec (abfd)->next = core_datasec (abfd);  core_datasec (abfd)->next = core_regsec (abfd);  core_regsec (abfd)->next = core_reg2sec (abfd);  abfd->section_count = 4;  return abfd->xvec;}static char *sunos4_core_file_failing_command (abfd)bfd *abfd;  {  return core_hdr (abfd)->hdr->c_cmdname;}static intDEFUN(sunos4_core_file_failing_signal,(abfd),      bfd *abfd){  return core_hdr (abfd)->hdr->c_signo;}static booleanDEFUN(sunos4_core_file_matches_executable_p, (core_bfd, exec_bfd),      bfd *core_bfd AND      bfd *exec_bfd){  if (core_bfd->xvec != exec_bfd->xvec) {    bfd_error = system_call_error;    return false;  }  return (memcmp ((char *)&((core_hdr (core_bfd)->hdr)->c_aouthdr), 		  (char *) exec_hdr (exec_bfd),		  sizeof (struct internal_exec)) == 0) ? true : false;}extern reloc_howto_type aout_32_ext_howto_table[];static reloc_howto_type *DEFUN (sunos4_reloc_type_lookup, (abfd, code),       bfd *abfd AND       bfd_reloc_code_real_type code){  switch (bfd_get_arch (abfd))    {    default:      return 0;    case bfd_arch_sparc:      switch (code)	{	default:	  return 0;#define IDX(i,j)	case i: return &aout_32_ext_howto_table[j]	  IDX (BFD_RELOC_CTOR, 2);	  IDX (BFD_RELOC_32, 2);	  IDX (BFD_RELOC_HI22, 8);	  IDX (BFD_RELOC_LO10, 11);	  IDX (BFD_RELOC_32_PCREL_S2, 6);	}    }}static booleanDEFUN (sunos4_set_sizes, (abfd),       bfd *abfd){  switch (bfd_get_arch (abfd))    {    default:      return false;    case bfd_arch_sparc:      adata(abfd).page_size = 0x2000;      adata(abfd).segment_size = 0x2000;      adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;      return true;    case bfd_arch_m68k:      adata(abfd).page_size = 0x2000;      adata(abfd).segment_size = 0x20000;      adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;      return true;    }}static CONST struct aout_backend_data sunos4_aout_backend = {  0, 1, 0, sunos4_set_sizes, 0,};#define	MY_core_file_failing_command 	sunos4_core_file_failing_command#define	MY_core_file_failing_signal	sunos4_core_file_failing_signal#define	MY_core_file_matches_executable_p sunos4_core_file_matches_executable_p#define MY_bfd_debug_info_start		bfd_void#define MY_bfd_debug_info_end		bfd_void#define MY_bfd_debug_info_accumulate	(PROTO(void,(*),(bfd*, struct sec *))) bfd_void#define MY_core_file_p sunos4_core_file_p#define MY_write_object_contents NAME(aout,sunos4_write_object_contents)#define MY_backend_data			&sunos4_aout_backend#define TARGET_IS_BIG_ENDIAN_P#include "aout-target.h"

⌨️ 快捷键说明

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