From 34517ebc854c0fc0314823defa19c4d79e317e12 Mon Sep 17 00:00:00 2001 From: John Gilmore Date: Sat, 3 Oct 1992 05:28:42 +0000 Subject: [PATCH] Changes to make 29k function calls work better at Adobe. * am29k-tdep.c (_initialize_29k): Make it possible for the user to set and query the address where function calls into the inferior write a small scratch routine. `set call_scratch_address' * inferior.h (PC_IN_CALL_DUMMY): Fix fencepost error. * remote.c (remote_prepare_to_store): Only fetch regs if they are not already cached validly. --- gdb/ChangeLog | 9 +++++++++ gdb/am29k-tdep.c | 10 ++++++++++ gdb/inferior.h | 22 ++++++++-------------- gdb/remote.c | 6 ++++-- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1024126e5b3..d142e62699b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Fri Oct 2 22:04:42 1992 John Gilmore (gnu@cygnus.com) + + * am29k-tdep.c (_initialize_29k): Make it possible for the + user to set and query the address where function calls into the + inferior write a small scratch routine. `set call_scratch_address' + * inferior.h (PC_IN_CALL_DUMMY): Fix fencepost error. + * remote.c (remote_prepare_to_store): Only fetch regs if they are + not already cached validly. + Thu Oct 1 14:36:42 1992 K. Richard Pixley (rich@sendai.cygnus.com) Rs6000 native support. diff --git a/gdb/am29k-tdep.c b/gdb/am29k-tdep.c index d5399b74602..13aca9a2cb2 100644 --- a/gdb/am29k-tdep.c +++ b/gdb/am29k-tdep.c @@ -810,6 +810,8 @@ reginv_com (args, fromtty) void _initialize_29k() { + extern CORE_ADDR text_end; + add_com ("reginv ", class_obscure, reginv_com, "Invalidate gdb's internal register cache."); @@ -821,4 +823,12 @@ _initialize_29k() Attempts to access registers saved above this address will be ignored\n\ or will produce the value -1.", &setlist), &showlist); + + /* FIXME, there should be a way to make a CORE_ADDR variable settable. */ + add_show_from_set + (add_set_cmd ("call_scratch_address", class_support, var_uinteger, + (char *)&text_end, +"Set address in memory where small amounts of RAM can be used when\n\ +making function calls into the inferior.", &setlist), + &showlist); } diff --git a/gdb/inferior.h b/gdb/inferior.h index c893f349a75..5db853eaca4 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -153,7 +153,7 @@ terminal_inferior PARAMS ((void)); extern void terminal_init_inferior PARAMS ((void)); -/* From infptrace.c or procfs.c */ +/* From infptrace.c */ extern int attach PARAMS ((int)); @@ -173,24 +173,18 @@ call_ptrace PARAMS ((int, int, PTRACE_ARG3_TYPE, int)); /* From procfs.c */ -#ifdef USE_PROC_FS - extern int proc_iterate_over_mappings PARAMS ((int (*) (int, CORE_ADDR))); -extern int -proc_wait PARAMS ((int *)); - -extern void -inferior_proc_init PARAMS ((int)); - extern void proc_signal_handling_change PARAMS ((void)); -extern void -proc_set_exec_trap PARAMS ((void)); +/* From fork-child.c */ -#endif +extern void +fork_inferior PARAMS ((char *, char *, char **, + void (*) (void), + void (*) (int))); /* From inflow.c */ @@ -326,13 +320,13 @@ extern int attach_flag; extern CORE_ADDR text_end; #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ ((pc) >= text_end - CALL_DUMMY_LENGTH \ - && (pc) < text_end + DECR_PC_AFTER_BREAK) + && (pc) <= text_end + DECR_PC_AFTER_BREAK) #else /* Not before text_end. */ #if CALL_DUMMY_LOCATION == AFTER_TEXT_END extern CORE_ADDR text_end; #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ ((pc) >= text_end \ - && (pc) < text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK) + && (pc) <= text_end + CALL_DUMMY_LENGTH + DECR_PC_AFTER_BREAK) #else /* On stack. */ #define PC_IN_CALL_DUMMY(pc, sp, frame_address) \ ((sp) INNER_THAN (pc) && (pc) INNER_THAN (frame_address)) diff --git a/gdb/remote.c b/gdb/remote.c index 86df56a8e48..e7f249968ba 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -417,7 +417,7 @@ remote_wait (status) unsigned char *p; int i; long regno; - unsigned char regs[MAX_REGISTER_RAW_SIZE]; + char regs[MAX_REGISTER_RAW_SIZE]; WSETEXIT ((*status), 0); @@ -505,7 +505,8 @@ remote_fetch_registers (regno) static void remote_prepare_to_store () { - remote_fetch_registers (-1); + /* Make sure the entire registers array is valid. */ + read_register_bytes (0, (char *)NULL, REGISTER_BYTES); } /* Store the remote registers from the contents of the block REGISTERS. @@ -1068,6 +1069,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */ NULL, /* to_lookup_symbol */ NULL, /* to_create_inferior */ NULL, /* to_mourn_inferior */ + 0, /* to_can_run */ process_stratum, /* to_stratum */ NULL, /* to_next */ 1, /* to_has_all_memory */ -- 2.30.2