diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-01-13 01:21:22 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-01-13 05:52:51 -0500 |
commit | 62fe7512a78962a9eda0db7fde0c8a76cf535714 (patch) | |
tree | 4b54cc93bf9f772c360ea2db2c44dfa60e122f64 | |
parent | 4180301e81fbc8eae6e55630f93bc14e045b1c78 (diff) | |
download | fsf-binutils-gdb-62fe7512a78962a9eda0db7fde0c8a76cf535714.zip fsf-binutils-gdb-62fe7512a78962a9eda0db7fde0c8a76cf535714.tar.gz fsf-binutils-gdb-62fe7512a78962a9eda0db7fde0c8a76cf535714.tar.bz2 |
sim: watch: fix pc watchpoints on little endian host systems
My change 1ac72f0659d64d6a14da862242db0d841d2878d0 ("sim: convert to
bfd_endian") subtly broke the watchpoint module on little endian host
systems. The old code used 0 to mean "whatever the host endian is",
and while that was changed to use BFD_ENDIAN_UNKNOWN, this caller was
missed. Since its API used an int instead of an enum, the coercion
from 0 to the BFD endian enum was silently missed, and 0 happens to
be BFD_ENDIAN_BIG.
Instead of restoring the old logic by passing in BFD_ENDIAN_UNKNOWN,
we know the right host endian at compile time, so use that directly.
-rw-r--r-- | sim/common/ChangeLog | 9 | ||||
-rw-r--r-- | sim/common/sim-events.c | 4 | ||||
-rw-r--r-- | sim/common/sim-events.h | 4 | ||||
-rw-r--r-- | sim/common/sim-watch.c | 2 |
4 files changed, 14 insertions, 5 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 608a085..539bab6 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,12 @@ +2021-01-13 Mike Frysinger <vapier@gentoo.org> + + * sim-events.c (sim_events_watch_sim): Change byte_order type to + enum bfd_endian. + (sim_events_watch_core): Likewise. + * sim-events.h (sim_events_watch_sim, sim_events_watch_core): Likewise. + * sim-watch.c (schedule_watchpoint): Change 0 to HOST_BYTE_ORDER in + call to sim_events_watch_sim. + 2021-01-12 Mike Frysinger <vapier@gentoo.org> * sim-profile.h [!WITH_PROFILE]: Rewrite to use #error. diff --git a/sim/common/sim-events.c b/sim/common/sim-events.c index db05caf..6dd0474 100644 --- a/sim/common/sim-events.c +++ b/sim/common/sim-events.c @@ -613,7 +613,7 @@ sim_event * sim_events_watch_sim (SIM_DESC sd, void *host_addr, int nr_bytes, - int byte_order, + enum bfd_endian byte_order, int is_within, unsigned64 lb, unsigned64 ub, @@ -692,7 +692,7 @@ sim_events_watch_core (SIM_DESC sd, address_word core_addr, unsigned core_map, int nr_bytes, - int byte_order, + enum bfd_endian byte_order, int is_within, unsigned64 lb, unsigned64 ub, diff --git a/sim/common/sim-events.h b/sim/common/sim-events.h index ecd7c59..823fd8c 100644 --- a/sim/common/sim-events.h +++ b/sim/common/sim-events.h @@ -161,7 +161,7 @@ extern sim_event *sim_events_watch_sim (SIM_DESC sd, void *host_addr, int nr_bytes, - int byte_order, + enum bfd_endian byte_order, int is_within, unsigned64 lb, unsigned64 ub, @@ -182,7 +182,7 @@ extern sim_event *sim_events_watch_core address_word core_addr, unsigned map, int nr_bytes, - int byte_order, + enum bfd_endian byte_order, int is_within, unsigned64 lb, unsigned64 ub, diff --git a/sim/common/sim-watch.c b/sim/common/sim-watch.c index bbd5be4..d69d42c 100644 --- a/sim/common/sim-watch.c +++ b/sim/common/sim-watch.c @@ -173,7 +173,7 @@ schedule_watchpoint (SIM_DESC sd, point->event = sim_events_watch_sim (sd, watch->pc, watch->sizeof_pc, - 0/* host-endian */, + HOST_BYTE_ORDER, point->is_within, point->arg0, point->arg1, /* PC in arg0..arg1 */ |