📄 wrapper.c
字号:
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 + -