X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fbfin%2Fdv-bfin_wp.c;h=5ab4729b4deae7b4b64812cc2d589e14a3a434ec;hb=160f8a8f32f5566077e4a4b13943bc7c70bc5da2;hp=9f35ac698b0b41d0657086c407d1960c3e22dfcd;hpb=81d126c3be15c1104b082683104856bede936d47;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/bfin/dv-bfin_wp.c b/sim/bfin/dv-bfin_wp.c index 9f35ac698b..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);