X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fbfin%2Fdv-bfin_wp.c;h=5ab4729b4deae7b4b64812cc2d589e14a3a434ec;hb=160f8a8f32f5566077e4a4b13943bc7c70bc5da2;hp=ba40026e9bd46c9899e760d7e077434d9933f6d1;hpb=990d19fd6d925da5856de50fd84d8656e762b83c;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/dv-bfin_wp.c b/sim/bfin/dv-bfin_wp.c index ba40026e9b..5ab4729b4d 100644 --- a/sim/bfin/dv-bfin_wp.c +++ b/sim/bfin/dv-bfin_wp.c @@ -1,6 +1,6 @@ /* Blackfin Watchpoint (WP) model. - Copyright (C) 2010-2011 Free Software Foundation, Inc. + Copyright (C) 2010-2020 Free Software Foundation, Inc. Contributed by Analog Devices, Inc. This file is part of simulators. @@ -77,6 +77,10 @@ bfin_wp_io_write_buffer (struct hw *me, const void *source, int space, bu32 value; bu32 *valuep; + /* Invalid access mode is higher priority than missing register. */ + if (!dv_bfin_mmr_require_32 (me, addr, nr_bytes, true)) + return 0; + value = dv_load_4 (source); mmr_off = addr - wp->base; valuep = (void *)((unsigned long)wp + mmr_base() + mmr_off); @@ -99,7 +103,7 @@ bfin_wp_io_write_buffer (struct hw *me, const void *source, int space, break; default: dv_bfin_mmr_invalid (me, addr, nr_bytes, true); - break; + return 0; } return nr_bytes; @@ -114,6 +118,10 @@ bfin_wp_io_read_buffer (struct hw *me, void *dest, int space, bu32 value; bu32 *valuep; + /* Invalid access mode is higher priority than missing register. */ + if (!dv_bfin_mmr_require_32 (me, addr, nr_bytes, false)) + return 0; + mmr_off = addr - wp->base; valuep = (void *)((unsigned long)wp + mmr_base() + mmr_off); @@ -131,9 +139,8 @@ bfin_wp_io_read_buffer (struct hw *me, void *dest, int space, value = *valuep; break; default: - while (1) /* Core MMRs -> exception -> doesn't return. */ - dv_bfin_mmr_invalid (me, addr, nr_bytes, false); - break; + dv_bfin_mmr_invalid (me, addr, nr_bytes, false); + return 0; } dv_store_4 (dest, value); @@ -183,7 +190,8 @@ bfin_wp_finish (struct hw *me) attach_bfin_wp_regs (me, wp); } -const struct hw_descriptor dv_bfin_wp_descriptor[] = { +const struct hw_descriptor dv_bfin_wp_descriptor[] = +{ {"bfin_wp", bfin_wp_finish,}, {NULL, NULL}, };