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

📄 wrapper.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    case SIM_ARM_FP5_REGNUM:    case SIM_ARM_FP6_REGNUM:    case SIM_ARM_FP7_REGNUM:    case SIM_ARM_FPS_REGNUM:      ARMul_SetReg (state, state->Mode, rn, frommem (state, memory));      break;    case SIM_ARM_PS_REGNUM:      state->Cpsr = frommem (state, memory);      ARMul_CPSRAltered (state);      break;    case SIM_ARM_MAVERIC_COP0R0_REGNUM:    case SIM_ARM_MAVERIC_COP0R1_REGNUM:    case SIM_ARM_MAVERIC_COP0R2_REGNUM:    case SIM_ARM_MAVERIC_COP0R3_REGNUM:    case SIM_ARM_MAVERIC_COP0R4_REGNUM:    case SIM_ARM_MAVERIC_COP0R5_REGNUM:    case SIM_ARM_MAVERIC_COP0R6_REGNUM:    case SIM_ARM_MAVERIC_COP0R7_REGNUM:    case SIM_ARM_MAVERIC_COP0R8_REGNUM:    case SIM_ARM_MAVERIC_COP0R9_REGNUM:    case SIM_ARM_MAVERIC_COP0R10_REGNUM:    case SIM_ARM_MAVERIC_COP0R11_REGNUM:    case SIM_ARM_MAVERIC_COP0R12_REGNUM:    case SIM_ARM_MAVERIC_COP0R13_REGNUM:    case SIM_ARM_MAVERIC_COP0R14_REGNUM:    case SIM_ARM_MAVERIC_COP0R15_REGNUM:      memcpy (& DSPregs [rn - SIM_ARM_MAVERIC_COP0R0_REGNUM],	      memory, sizeof (struct maverick_regs));      return sizeof (struct maverick_regs);    case SIM_ARM_MAVERIC_DSPSC_REGNUM:      memcpy (&DSPsc, memory, sizeof DSPsc);      return sizeof DSPsc;    case SIM_ARM_IWMMXT_COP0R0_REGNUM:    case SIM_ARM_IWMMXT_COP0R1_REGNUM:    case SIM_ARM_IWMMXT_COP0R2_REGNUM:    case SIM_ARM_IWMMXT_COP0R3_REGNUM:    case SIM_ARM_IWMMXT_COP0R4_REGNUM:    case SIM_ARM_IWMMXT_COP0R5_REGNUM:    case SIM_ARM_IWMMXT_COP0R6_REGNUM:    case SIM_ARM_IWMMXT_COP0R7_REGNUM:    case SIM_ARM_IWMMXT_COP0R8_REGNUM:    case SIM_ARM_IWMMXT_COP0R9_REGNUM:    case SIM_ARM_IWMMXT_COP0R10_REGNUM:    case SIM_ARM_IWMMXT_COP0R11_REGNUM:    case SIM_ARM_IWMMXT_COP0R12_REGNUM:    case SIM_ARM_IWMMXT_COP0R13_REGNUM:    case SIM_ARM_IWMMXT_COP0R14_REGNUM:    case SIM_ARM_IWMMXT_COP0R15_REGNUM:    case SIM_ARM_IWMMXT_COP1R0_REGNUM:    case SIM_ARM_IWMMXT_COP1R1_REGNUM:    case SIM_ARM_IWMMXT_COP1R2_REGNUM:    case SIM_ARM_IWMMXT_COP1R3_REGNUM:    case SIM_ARM_IWMMXT_COP1R4_REGNUM:    case SIM_ARM_IWMMXT_COP1R5_REGNUM:    case SIM_ARM_IWMMXT_COP1R6_REGNUM:    case SIM_ARM_IWMMXT_COP1R7_REGNUM:    case SIM_ARM_IWMMXT_COP1R8_REGNUM:    case SIM_ARM_IWMMXT_COP1R9_REGNUM:    case SIM_ARM_IWMMXT_COP1R10_REGNUM:    case SIM_ARM_IWMMXT_COP1R11_REGNUM:    case SIM_ARM_IWMMXT_COP1R12_REGNUM:    case SIM_ARM_IWMMXT_COP1R13_REGNUM:    case SIM_ARM_IWMMXT_COP1R14_REGNUM:    case SIM_ARM_IWMMXT_COP1R15_REGNUM:      return Store_Iwmmxt_Register (rn - SIM_ARM_IWMMXT_COP0R0_REGNUM, memory);    default:      return 0;    }  return -1;}intsim_fetch_register (sd, rn, memory, length)     SIM_DESC sd ATTRIBUTE_UNUSED;     int rn;     unsigned char *memory;     int length ATTRIBUTE_UNUSED;{  ARMword regval;  init ();  switch ((enum sim_arm_regs) rn)    {    case SIM_ARM_R0_REGNUM:    case SIM_ARM_R1_REGNUM:    case SIM_ARM_R2_REGNUM:    case SIM_ARM_R3_REGNUM:    case SIM_ARM_R4_REGNUM:    case SIM_ARM_R5_REGNUM:    case SIM_ARM_R6_REGNUM:    case SIM_ARM_R7_REGNUM:    case SIM_ARM_R8_REGNUM:    case SIM_ARM_R9_REGNUM:    case SIM_ARM_R10_REGNUM:    case SIM_ARM_R11_REGNUM:    case SIM_ARM_R12_REGNUM:    case SIM_ARM_R13_REGNUM:    case SIM_ARM_R14_REGNUM:    case SIM_ARM_R15_REGNUM: /* PC */      regval = ARMul_GetReg (state, state->Mode, rn);      break;    case SIM_ARM_FP0_REGNUM:    case SIM_ARM_FP1_REGNUM:    case SIM_ARM_FP2_REGNUM:    case SIM_ARM_FP3_REGNUM:    case SIM_ARM_FP4_REGNUM:    case SIM_ARM_FP5_REGNUM:    case SIM_ARM_FP6_REGNUM:    case SIM_ARM_FP7_REGNUM:    case SIM_ARM_FPS_REGNUM:      memset (memory, 0, length);      return 0;    case SIM_ARM_PS_REGNUM:      regval = ARMul_GetCPSR (state);      break;    case SIM_ARM_MAVERIC_COP0R0_REGNUM:    case SIM_ARM_MAVERIC_COP0R1_REGNUM:    case SIM_ARM_MAVERIC_COP0R2_REGNUM:    case SIM_ARM_MAVERIC_COP0R3_REGNUM:    case SIM_ARM_MAVERIC_COP0R4_REGNUM:    case SIM_ARM_MAVERIC_COP0R5_REGNUM:    case SIM_ARM_MAVERIC_COP0R6_REGNUM:    case SIM_ARM_MAVERIC_COP0R7_REGNUM:    case SIM_ARM_MAVERIC_COP0R8_REGNUM:    case SIM_ARM_MAVERIC_COP0R9_REGNUM:    case SIM_ARM_MAVERIC_COP0R10_REGNUM:    case SIM_ARM_MAVERIC_COP0R11_REGNUM:    case SIM_ARM_MAVERIC_COP0R12_REGNUM:    case SIM_ARM_MAVERIC_COP0R13_REGNUM:    case SIM_ARM_MAVERIC_COP0R14_REGNUM:    case SIM_ARM_MAVERIC_COP0R15_REGNUM:      memcpy (memory, & DSPregs [rn - SIM_ARM_MAVERIC_COP0R0_REGNUM],	      sizeof (struct maverick_regs));      return sizeof (struct maverick_regs);    case SIM_ARM_MAVERIC_DSPSC_REGNUM:      memcpy (memory, & DSPsc, sizeof DSPsc);      return sizeof DSPsc;    case SIM_ARM_IWMMXT_COP0R0_REGNUM:    case SIM_ARM_IWMMXT_COP0R1_REGNUM:    case SIM_ARM_IWMMXT_COP0R2_REGNUM:    case SIM_ARM_IWMMXT_COP0R3_REGNUM:    case SIM_ARM_IWMMXT_COP0R4_REGNUM:    case SIM_ARM_IWMMXT_COP0R5_REGNUM:    case SIM_ARM_IWMMXT_COP0R6_REGNUM:    case SIM_ARM_IWMMXT_COP0R7_REGNUM:    case SIM_ARM_IWMMXT_COP0R8_REGNUM:    case SIM_ARM_IWMMXT_COP0R9_REGNUM:    case SIM_ARM_IWMMXT_COP0R10_REGNUM:    case SIM_ARM_IWMMXT_COP0R11_REGNUM:    case SIM_ARM_IWMMXT_COP0R12_REGNUM:    case SIM_ARM_IWMMXT_COP0R13_REGNUM:    case SIM_ARM_IWMMXT_COP0R14_REGNUM:    case SIM_ARM_IWMMXT_COP0R15_REGNUM:    case SIM_ARM_IWMMXT_COP1R0_REGNUM:    case SIM_ARM_IWMMXT_COP1R1_REGNUM:    case SIM_ARM_IWMMXT_COP1R2_REGNUM:    case SIM_ARM_IWMMXT_COP1R3_REGNUM:    case SIM_ARM_IWMMXT_COP1R4_REGNUM:    case SIM_ARM_IWMMXT_COP1R5_REGNUM:    case SIM_ARM_IWMMXT_COP1R6_REGNUM:    case SIM_ARM_IWMMXT_COP1R7_REGNUM:    case SIM_ARM_IWMMXT_COP1R8_REGNUM:    case SIM_ARM_IWMMXT_COP1R9_REGNUM:    case SIM_ARM_IWMMXT_COP1R10_REGNUM:    case SIM_ARM_IWMMXT_COP1R11_REGNUM:    case SIM_ARM_IWMMXT_COP1R12_REGNUM:    case SIM_ARM_IWMMXT_COP1R13_REGNUM:    case SIM_ARM_IWMMXT_COP1R14_REGNUM:    case SIM_ARM_IWMMXT_COP1R15_REGNUM:      return Fetch_Iwmmxt_Register (rn - SIM_ARM_IWMMXT_COP0R0_REGNUM, memory);    default:      return 0;    }  while (length)    {      tomem (state, memory, regval);      length -= 4;      memory += 4;      regval = 0;    }    return -1;}#ifdef SIM_TARGET_SWITCHESstatic void sim_target_parse_arg_array PARAMS ((char **));typedef struct{  char * 	swi_option;  unsigned int	swi_mask;} swi_options;#define SWI_SWITCH	"--swi-support"static swi_options options[] =  {    { "none",    0 },    { "demon",   SWI_MASK_DEMON },    { "angel",   SWI_MASK_ANGEL },    { "redboot", SWI_MASK_REDBOOT },    { "all",     -1 },    { "NONE",    0 },    { "DEMON",   SWI_MASK_DEMON },    { "ANGEL",   SWI_MASK_ANGEL },    { "REDBOOT", SWI_MASK_REDBOOT },    { "ALL",     -1 }  };intsim_target_parse_command_line (argc, argv)     int argc;     char ** argv;{  int i;  for (i = 1; i < argc; i++)    {      char * ptr = argv[i];      int arg;      if ((ptr == NULL) || (* ptr != '-'))	break;      if (strncmp (ptr, SWI_SWITCH, sizeof SWI_SWITCH - 1) != 0)	continue;      if (ptr[sizeof SWI_SWITCH - 1] == 0)	{	  /* Remove this option from the argv array.  */	  for (arg = i; arg < argc; arg ++)	    argv[arg] = argv[arg + 1];	  argc --;	  	  ptr = argv[i];	}      else	ptr += sizeof SWI_SWITCH;      swi_mask = 0;            while (* ptr)	{	  int i;	  for (i = sizeof options / sizeof options[0]; i--;)	    if (strncmp (ptr, options[i].swi_option,			 strlen (options[i].swi_option)) == 0)	      {		swi_mask |= options[i].swi_mask;		ptr += strlen (options[i].swi_option);		if (* ptr == ',')		  ++ ptr;		break;	      }	  if (i < 0)	    break;	}      if (* ptr != 0)	fprintf (stderr, "Ignoring swi options: %s\n", ptr);            /* Remove this option from the argv array.  */      for (arg = i; arg < argc; arg ++)	argv[arg] = argv[arg + 1];      argc --;      i --;    }  return argc;}static voidsim_target_parse_arg_array (argv)     char ** argv;{  int i;  for (i = 0; argv[i]; i++)    ;  return (void) sim_target_parse_command_line (i, argv);}voidsim_target_display_usage (){  fprintf (stderr, "%s=<list>  Comma seperated list of SWI protocols to supoport.\n\                This list can contain: NONE, DEMON, ANGEL, REDBOOT and/or ALL.\n",	   SWI_SWITCH);}#endifSIM_DESCsim_open (kind, ptr, abfd, argv)     SIM_OPEN_KIND kind;     host_callback *ptr;     struct bfd *abfd;     char **argv;{  sim_kind = kind;  if (myname) free (myname);  myname = (char *) xstrdup (argv[0]);  sim_callback = ptr;#ifdef SIM_TARGET_SWITCHES  sim_target_parse_arg_array (argv);#endif    /* Decide upon the endian-ness of the processor.     If we can, get the information from the bfd itself.     Otherwise look to see if we have been given a command     line switch that tells us.  Otherwise default to little endian.  */  if (abfd != NULL)    big_endian = bfd_big_endian (abfd);  else if (argv[1] != NULL)    {      int i;      /* Scan for endian-ness and memory-size switches.  */      for (i = 0; (argv[i] != NULL) && (argv[i][0] != 0); i++)	if (argv[i][0] == '-' && argv[i][1] == 'E')	  {	    char c;	    if ((c = argv[i][2]) == 0)	      {		++i;		c = argv[i][0];	      }	    switch (c)	      {	      case 0:		sim_callback->printf_filtered		  (sim_callback, "No argument to -E option provided\n");		break;	      case 'b':	      case 'B':		big_endian = 1;		break;	      case 'l':	      case 'L':		big_endian = 0;		break;	      default:		sim_callback->printf_filtered		  (sim_callback, "Unrecognised argument to -E option\n");		break;	      }	  }	else if (argv[i][0] == '-' && argv[i][1] == 'm')	  {	    if (argv[i][2] != '\0')	      sim_size (atoi (&argv[i][2]));	    else if (argv[i + 1] != NULL)	      {		sim_size (atoi (argv[i + 1]));		i++;	      }	    else	      {		sim_callback->printf_filtered (sim_callback,					       "Missing argument to -m option\n");		return NULL;	      }	      	  }    }  return (SIM_DESC) 1;}voidsim_close (sd, quitting)     SIM_DESC sd ATTRIBUTE_UNUSED;     int quitting ATTRIBUTE_UNUSED;{  if (myname)    free (myname);  myname = NULL;}SIM_RCsim_load (sd, prog, abfd, from_tty)     SIM_DESC sd;     char *prog;     bfd *abfd;     int from_tty ATTRIBUTE_UNUSED;{  bfd *prog_bfd;  prog_bfd = sim_load_file (sd, myname, sim_callback, prog, abfd,			    sim_kind == SIM_OPEN_DEBUG, 0, sim_write);  if (prog_bfd == NULL)    return SIM_RC_FAIL;  ARMul_SetPC (state, bfd_get_start_address (prog_bfd));  if (abfd == NULL)    bfd_close (prog_bfd);  return SIM_RC_OK;}voidsim_stop_reason (sd, reason, sigrc)     SIM_DESC sd ATTRIBUTE_UNUSED;     enum sim_stop *reason;     int *sigrc;{  if (stop_simulator)    {      *reason = sim_stopped;      *sigrc = SIGINT;    }  else if (state->EndCondition == 0)    {      *reason = sim_exited;      *sigrc = state->Reg[0] & 255;    }  else    {      *reason = sim_stopped;      if (state->EndCondition == RDIError_BreakpointReached)	*sigrc = SIGTRAP;      else if (   state->EndCondition == RDIError_DataAbort	       || state->EndCondition == RDIError_AddressException)	*sigrc = SIGBUS;      else	*sigrc = 0;    }}voidsim_do_command (sd, cmd)     SIM_DESC sd ATTRIBUTE_UNUSED;     char *cmd ATTRIBUTE_UNUSED;{    (*sim_callback->printf_filtered)    (sim_callback,     "This simulator does not accept any commands.\n");}voidsim_set_callbacks (ptr)     host_callback *ptr;{  sim_callback = ptr;}

⌨️ 快捷键说明

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