diff options
author | Stu Grossman <grossman@cygnus> | 1996-04-11 21:17:45 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1996-04-11 21:17:45 +0000 |
commit | a243a22f4359c557c08d4fd962391c9f70287fec (patch) | |
tree | 018f21e57d8d9f12db5fe5f608d8536beb5e34e0 /gdb/dcache.c | |
parent | 024e1779233ad7121b2bf40741cfe21b4047770e (diff) | |
download | fsf-binutils-gdb-a243a22f4359c557c08d4fd962391c9f70287fec.zip fsf-binutils-gdb-a243a22f4359c557c08d4fd962391c9f70287fec.tar.gz fsf-binutils-gdb-a243a22f4359c557c08d4fd962391c9f70287fec.tar.bz2 |
* dcache.c: Add prototypes. Make many functions static.
* (dcache_peek dcache_fetch dcache_poke): Make dcache_fetch and
dcache_poke call dcache_xfer_memory directly in order to fix
problems with turning off dcache. dcache_peek is now unnecessary,
so it goes away.
* defs.h: Define new macros HOST_{FLOAT DOUBLE LONG_DOUBLE}_FORMAT
and TARGET_{FLOAT DOUBLE LONG_DOUBLE}_FORMAT to specify a pointer
to a struct floatformat. This allows for better handling of
targets whose floating point formats differ from the host by more
than just byte order.
* (floatformat_to_long_double floatformat_from_long_double):
Prototypes for new functions in utils.c.
* (floatformat_to_doublest floatformat_from_doublest): Prototypes
for pointers to floating point conversion functions. The actual
function uses either double or long double if the host supports it.
* findvar.c (floatformat_to_doublest floatformat_from_doublest):
Initialize to point at correct function depending on HAVE_LONG_DOUBLE.
* (extract_floating store_floating): Rewrite. Now, if host fp
format is the same as the target, we just do a copy. Otherwise,
we call floatformat_{to from}_doublest.
* remote-nindy.c (nindy_xfer_inferior_memory): Change param
`write' to `should_write'.
* utils.c (floatformat_to_long_double
floatformat_from_long_double): New routines that implement long
double versions of functions in libiberty/floatformat.c.
* config/i960/tm-i960.h (TARGET_LONG_DOUBLE_FORMAT): Define this for
i960 extended real (80 bit) numbers.
* nindy-share/nindy.c (ninMemGet ninMemPut): Return number of bytes
actually read or written.
Diffstat (limited to 'gdb/dcache.c')
-rw-r--r-- | gdb/dcache.c | 69 |
1 files changed, 31 insertions, 38 deletions
diff --git a/gdb/dcache.c b/gdb/dcache.c index 9f44e96..f110a0c0 100644 --- a/gdb/dcache.c +++ b/gdb/dcache.c @@ -148,6 +148,23 @@ struct dcache_struct int cache_has_stuff; } ; +static int +dcache_poke_byte PARAMS ((DCACHE *dcache, CORE_ADDR addr, char *ptr)); + +static int +dcache_peek_byte PARAMS ((DCACHE *dcache, CORE_ADDR addr, char *ptr)); + +static struct dcache_block * +dcache_hit PARAMS ((DCACHE *dcache, unsigned int addr)); + +static int dcache_write_line PARAMS ((DCACHE *dcache,struct dcache_block *db)); + +static struct dcache_block *dcache_alloc PARAMS ((DCACHE *dcache)); + +static int dcache_writeback PARAMS ((DCACHE *dcache)); + +static void dcache_info PARAMS ((char *exp, int tty)); + int remote_dcache = 0; DCACHE *last_cache; /* Used by info dcache */ @@ -186,8 +203,8 @@ dcache_flush (dcache) /* If addr is present in the dcache, return the address of the block containing it. */ -static -struct dcache_block * + +static struct dcache_block * dcache_hit (dcache, addr) DCACHE *dcache; unsigned int addr; @@ -261,8 +278,8 @@ dcache_write_line (dcache, db) prevents errors from creeping in if a memory retrieval is interrupted (which used to put garbage blocks in the valid list...). */ -static -struct dcache_block * + +static struct dcache_block * dcache_alloc (dcache) DCACHE *dcache; { @@ -302,7 +319,7 @@ dcache_alloc (dcache) Returns 0 on error. */ -int +static int dcache_peek_byte (dcache, addr, ptr) DCACHE *dcache; CORE_ADDR addr; @@ -342,28 +359,6 @@ dcache_peek_byte (dcache, addr, ptr) return ok; } -/* Using the data cache DCACHE return the contents of the word at - address ADDR in the remote machine. - - Returns 0 on error. */ - -int -dcache_peek (dcache, addr, data) - DCACHE *dcache; - CORE_ADDR addr; - int *data; -{ - char *dp = (char *) data; - int i; - for (i = 0; i < (int) sizeof (int); i++) - { - if (!dcache_peek_byte (dcache, addr + i, dp + i)) - return 0; - } - return 1; -} - - /* Writeback any dirty lines to the remote. */ static int dcache_writeback (dcache) @@ -391,7 +386,10 @@ dcache_fetch (dcache, addr) CORE_ADDR addr; { int res; - dcache_peek (dcache, addr, &res); + + if (dcache_xfer_memory (dcache, addr, (char *)&res, sizeof res, 0) != sizeof res) + memory_error (EIO, addr); + return res; } @@ -400,7 +398,7 @@ dcache_fetch (dcache, addr) Return zero on write error. */ -int +static int dcache_poke_byte (dcache, addr, ptr) DCACHE *dcache; CORE_ADDR addr; @@ -431,15 +429,10 @@ dcache_poke (dcache, addr, data) CORE_ADDR addr; int data; { - char *dp = (char *) (&data); - int i; - for (i = 0; i < (int) sizeof (int); i++) - { - if (!dcache_poke_byte (dcache, addr + i, dp + i)) - return 0; - } - dcache_writeback (dcache); - return 1; + if (dcache_xfer_memory (dcache, addr, (char *)&data, sizeof data, 1) != sizeof data) + return 0; + + return dcache_writeback (dcache); } |