From: Doug Evans Date: Mon, 14 Sep 2009 20:49:11 +0000 (+0000) Subject: * target.c (memory_xfer_partial): Only update dcache after we know X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41dcd03ff79cb197e121d17028baefbdf49e306f;p=binutils-gdb.git * target.c (memory_xfer_partial): Only update dcache after we know the write succeeded. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0d6b94729ed..ce226cc3dda 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-09-14 Doug Evans + + * target.c (memory_xfer_partial): Only update dcache after we know + the write succeeded. + 2009-09-14 Paul Pluzhnikov *minsyms.c (lookup_minimal_symbol_by_pc_section_1): Assert non-NULL diff --git a/gdb/target.c b/gdb/target.c index a662ecab669..cb955bda0fe 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -1289,19 +1289,6 @@ memory_xfer_partial (struct target_ops *ops, enum target_object object, } } - /* Make sure the cache gets updated no matter what - if we are writing - to the stack, even if this write is not tagged as such, we still need - to update the cache. */ - - if (inf != NULL - && readbuf == NULL - && !region->attrib.cache - && stack_cache_enabled_p - && object != TARGET_OBJECT_STACK_MEMORY) - { - dcache_update (target_dcache, memaddr, (void *) writebuf, reg_len); - } - /* If none of those methods found the memory we wanted, fall back to a target partial transfer. Normally a single call to to_xfer_partial is enough; if it doesn't recognize an object @@ -1331,6 +1318,20 @@ memory_xfer_partial (struct target_ops *ops, enum target_object object, if (readbuf && !show_memory_breakpoints) breakpoint_restore_shadows (readbuf, memaddr, reg_len); + /* Make sure the cache gets updated no matter what - if we are writing + to the stack. Even if this write is not tagged as such, we still need + to update the cache. */ + + if (res > 0 + && inf != NULL + && writebuf != NULL + && !region->attrib.cache + && stack_cache_enabled_p + && object != TARGET_OBJECT_STACK_MEMORY) + { + dcache_update (target_dcache, memaddr, (void *) writebuf, reg_len); + } + /* If we still haven't got anything, return the last error. We give up. */ return res;