From 222ae774360e7306e1803e447f65e421be06254a Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 1 Sep 2016 14:32:01 -0700 Subject: [PATCH] SCP: Add sim_brk_message() to facilitate easy reporting of matched breakpoints. Also extended the optional VM supplied routines to include sim_vm_sprint_addr. Simulators which provide sim_vm_fprint_addr should also provide sim_vm_sprint_addr with sim_vm_fprint_addr reworked to leverage sim_vm_sprint_addr internally. sim_vm_sprint_addr is currently only used by sim_brk_message() which is an API which a simulator may choose to use if it supports multiple breakpoint types, --- doc/simh.doc | Bin 230912 -> 236544 bytes doc/simh_breakpoints.doc | Bin 42496 -> 45056 bytes scp.c | 33 +++++++++++++++++++++++++++++++-- scp.h | 5 +++++ sim_defs.h | 9 +++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index 2ef2c12015c857bcb703a079ca710d784408daf3..a932ecc9aa922928e2ecb9c631568017b977cd17 100644 GIT binary patch delta 47283 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 c0lwC7|M9*7)_`z}C3w8WVhJ~F@~ diff --git a/doc/simh_breakpoints.doc b/doc/simh_breakpoints.doc index d210c67e7e5f07a0c1b3155564532163827b3e5a..ca5f88c225471846f9e470f7214f781f11114f0c 100644 GIT binary patch delta 7690 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 delta 5159 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, sim_dflt_dev->awidth, PV_LEFT); +if (sim_brk_type_desc) { + BRKTYPTAB *brk = sim_brk_type_desc; + + while (2 == strlen (put_switches (buf, sizeof(buf), brk->btyp))) { + if (brk->btyp == sim_brk_match_type) { + sprintf (msg, "%s: %s", brk->desc, addr); + break; + } + brk++; + } + } +if (!msg[0]) + sprintf (msg, "%s Breakpoint at: %o\n", put_switches (buf , sizeof(buf), sim_brk_match_type), sim_brk_match_addr); + +return msg; +} + /* Expect package. This code provides a mechanism to stop and control simulator execution based on traffic coming out of simulated ports and as well as a means to inject data into those ports. It can conceptually viewed as a string diff --git a/scp.h b/scp.h index 0d4937ac..7859f114 100644 --- a/scp.h +++ b/scp.h @@ -150,6 +150,7 @@ int sim_isgraph (char c); int sim_isalnum (char c); int sim_strncasecmp (const char* string1, const char* string2, size_t len); CONST char *get_sim_opt (int32 opt, CONST char *cptr, t_stat *st); +const char *put_switches (char *buf, size_t bufsize, uint32 sw); CONST char *get_glyph (const char *iptr, char *optr, char mchar); CONST char *get_glyph_nc (const char *iptr, char *optr, char mchar); CONST char *get_glyph_quoted (const char *iptr, char *optr, char mchar); @@ -165,6 +166,7 @@ int Fprintf (FILE *f, const char* fmt, ...) GCC_FMT_ATTR(2, 3); t_stat sim_set_memory_load_file (const unsigned char *data, size_t size); int Fgetc (FILE *f); t_stat fprint_val (FILE *stream, t_value val, uint32 rdx, uint32 wid, uint32 fmt); +t_stat sprint_val (char *buf, t_value val, uint32 rdx, uint32 wid, uint32 fmt); t_stat sim_print_val (t_value val, uint32 radix, uint32 width, uint32 format); char *read_line (char *cptr, int32 size, FILE *stream); void fprint_reg_help (FILE *st, DEVICE *dptr); @@ -186,6 +188,7 @@ uint32 sim_brk_test (t_addr bloc, uint32 btyp); void sim_brk_clrspc (uint32 spc, uint32 btyp); void sim_brk_npc (uint32 cnt); void sim_brk_setact (const char *action); +const char *sim_brk_message(void); t_stat sim_send_input (SEND *snd, uint8 *data, size_t size, uint32 after, uint32 delay); t_stat sim_show_send_input (FILE *st, const SEND *snd); t_bool sim_send_poll_data (SEND *snd, t_stat *stat); @@ -274,6 +277,7 @@ extern uint32 sim_brk_dflt; extern uint32 sim_brk_summ; extern uint32 sim_brk_match_type; extern t_addr sim_brk_match_addr; +extern BRKTYPTAB *sim_brk_type_desc; /* type descriptions */ extern FILE *stdnul; extern t_bool sim_asynch_enabled; @@ -298,6 +302,7 @@ WEAK extern void (*sim_vm_init) (void); extern char* (*sim_vm_read) (char *ptr, int32 size, FILE *stream); extern void (*sim_vm_post) (t_bool from_scp); extern CTAB *sim_vm_cmd; +extern void (*sim_vm_sprint_addr) (char *buf, DEVICE *dptr, t_addr addr); extern void (*sim_vm_fprint_addr) (FILE *st, DEVICE *dptr, t_addr addr); extern t_addr (*sim_vm_parse_addr) (DEVICE *dptr, CONST char *cptr, CONST char **tptr); extern t_bool (*sim_vm_fprint_stopped) (FILE *st, t_stat reason); diff --git a/sim_defs.h b/sim_defs.h index 5cc4b22a..9c6ffa27 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -419,6 +419,7 @@ typedef struct SHTAB SHTAB; typedef struct MTAB MTAB; typedef struct SCHTAB SCHTAB; typedef struct BRKTAB BRKTAB; +typedef struct BRKTYPTAB BRKTYPTAB; typedef struct EXPTAB EXPTAB; typedef struct EXPECT EXPECT; typedef struct SEND SEND; @@ -726,6 +727,14 @@ struct BRKTAB { BRKTAB *next; /* list with same address value */ }; +/* Breakpoint table */ + +struct BRKTYPTAB { + uint32 btyp; /* type mask */ + const char *desc; /* description */ + }; +#define BRKTYPE(typ,descrip) {SWMASK(typ), descrip} + /* Expect rule */ struct EXPTAB {