From 8b6f1f3a31e4a5ba0151f3ec9d0b31688c28de35 Mon Sep 17 00:00:00 2001 From: Elena Zannoni Date: Mon, 19 Nov 2001 23:59:55 +0000 Subject: 2001-11-19 Elena Zannoni * infptrace.c (fetch_register): Dynamically allocate buffer for register. (store_register): Use regcache_collect, instead of accessing the register buffer directly. --- gdb/infptrace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'gdb/infptrace.c') diff --git a/gdb/infptrace.c b/gdb/infptrace.c index d0df642..9815e05 100644 --- a/gdb/infptrace.c +++ b/gdb/infptrace.c @@ -359,7 +359,7 @@ fetch_register (int regno) char mess[128]; /* For messages */ register int i; unsigned int offset; /* Offset of registers within the u area. */ - char buf[MAX_REGISTER_RAW_SIZE]; + char *buf = alloca (MAX_REGISTER_RAW_SIZE); int tid; if (CANNOT_FETCH_REGISTER (regno)) @@ -424,6 +424,7 @@ store_register (int regno) register int i; unsigned int offset; /* Offset of registers within the u area. */ int tid; + char *buf = alloca (MAX_REGISTER_RAW_SIZE); if (CANNOT_STORE_REGISTER (regno)) { @@ -437,11 +438,16 @@ store_register (int regno) offset = U_REGS_OFFSET; regaddr = register_addr (regno, offset); + + /* Put the contents of regno into a local buffer */ + regcache_collect (regno, buf); + + /* Store the local buffer into the inferior a chunk at the time. */ for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE)) { errno = 0; ptrace (PT_WRITE_U, tid, (PTRACE_ARG3_TYPE) regaddr, - *(PTRACE_XFER_TYPE *) & registers[REGISTER_BYTE (regno) + i]); + *(PTRACE_XFER_TYPE *) (buf + i)); regaddr += sizeof (PTRACE_XFER_TYPE); if (errno != 0) { -- cgit v1.1