diff options
author | J.T. Conklin <jtc@acorntoolworks.com> | 2001-04-06 22:43:55 +0000 |
---|---|---|
committer | J.T. Conklin <jtc@acorntoolworks.com> | 2001-04-06 22:43:55 +0000 |
commit | c839c4db61a73535746c9a8f52e127c100c600ca (patch) | |
tree | 09a6964882402d9469603cc4499cf364006cfd77 /gdb/dcache.c | |
parent | af471f3cf4c701963e0771d904ed9f86d02c1cb8 (diff) | |
download | gdb-c839c4db61a73535746c9a8f52e127c100c600ca.zip gdb-c839c4db61a73535746c9a8f52e127c100c600ca.tar.gz gdb-c839c4db61a73535746c9a8f52e127c100c600ca.tar.bz2 |
* dcache.c (dcache_write_line): Fixed bugs where cache line was
not written to target correctly.
Diffstat (limited to 'gdb/dcache.c')
-rw-r--r-- | gdb/dcache.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gdb/dcache.c b/gdb/dcache.c index d6268f7..6e74274 100644 --- a/gdb/dcache.c +++ b/gdb/dcache.c @@ -278,20 +278,24 @@ dcache_write_line (DCACHE *dcache, register struct dcache_block *db) while (reg_len > 0) { s = XFORM(memaddr); - do { + while (reg_len > 0) { if (db->state[s] == ENTRY_DIRTY) break; s++; reg_len--; - } while (reg_len > 0); + + memaddr++; + myaddr++; + len--; + } e = s; - do { + while (reg_len > 0) { if (db->state[e] != ENTRY_DIRTY) break; e++; reg_len--; - } while (reg_len > 0); + } dirty_len = e - s; while (dirty_len > 0) @@ -304,6 +308,7 @@ dcache_write_line (DCACHE *dcache, register struct dcache_block *db) memset (&db->state[XFORM(memaddr)], ENTRY_OK, res); memaddr += res; myaddr += res; + len -= res; dirty_len -= res; } } |