diff options
author | Jason Molenda <jsm@bugshack.cygnus.com> | 1999-08-16 19:57:19 +0000 |
---|---|---|
committer | Jason Molenda <jsm@bugshack.cygnus.com> | 1999-08-16 19:57:19 +0000 |
commit | d450852cb3f7b4919eaf956ea0c34a5caeecee5e (patch) | |
tree | 335d04cc9cfc9029551b9176ca163584d4d54f71 /gdb/infttrace.c | |
parent | 39e2b1a6657bcf6f1ae2b616b447c9dab88917ef (diff) | |
download | gdb-d450852cb3f7b4919eaf956ea0c34a5caeecee5e.tar.gz |
import gdb-1999-08-16 snapshot
Diffstat (limited to 'gdb/infttrace.c')
-rw-r--r-- | gdb/infttrace.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gdb/infttrace.c b/gdb/infttrace.c index c76c5132201..3e94e8100b5 100644 --- a/gdb/infttrace.c +++ b/gdb/infttrace.c @@ -5863,6 +5863,55 @@ hppa_resume_execd_vforking_child_to_get_parent_vfork () } +/* Write a register as a 64bit value. This may be necessary if the + native OS is too braindamaged to allow some (or all) registers to + be written in 32bit hunks such as hpux11 and the PC queue registers. + + This is horribly gross and disgusting. */ + +int +ttrace_write_reg_64 (gdb_tid, dest_addr, src_addr) + int gdb_tid; + CORE_ADDR dest_addr; + CORE_ADDR src_addr; +{ + pid_t pid; + lwpid_t tid; + int tt_status; + + tid = map_from_gdb_tid (gdb_tid); + pid = get_pid_for (tid); + + errno = 0; + tt_status = ttrace (TT_LWP_WUREGS, + pid, + tid, + (TTRACE_ARG_TYPE) dest_addr, + 8, + (TTRACE_ARG_TYPE) src_addr ); + +#ifdef THREAD_DEBUG + if (errno) + { + /* Don't bother for a known benign error: if you ask for the + first thread state, but there is only one thread and it's + not stopped, ttrace complains. + + We have this inside the #ifdef because our caller will do + this check for real. */ + if( request != TT_PROC_GET_FIRST_LWP_STATE + || errno != EPROTO ) + { + if( debug_on ) + printf( "TT fail for %s, with pid %d, tid %d, status %d \n", + get_printable_name_of_ttrace_request (TT_LWP_WUREGS), + pid, tid, tt_status ); + } + } +#endif + + return tt_status; +} void _initialize_infttrace () |