diff options
author | 2021-02-09 17:44:18 +0000 | |
---|---|---|
committer | 2021-02-09 17:44:18 +0000 | |
commit | 2281fd667a05f6fc6e9a12d8045cff49687a13ad (patch) | |
tree | 7628b69a29f6a41d07338a2b8694106524de8f53 | |
parent | c714cdf20e012280a5c722d190a121a6bce10ddc (diff) | |
parent | fdc3ab0b4817faa9f99f507afc6a4a992134fb48 (diff) | |
download | cortex-m-2281fd667a05f6fc6e9a12d8045cff49687a13ad.tar.gz cortex-m-2281fd667a05f6fc6e9a12d8045cff49687a13ad.tar.zst cortex-m-2281fd667a05f6fc6e9a12d8045cff49687a13ad.zip |
Merge #328
328: Prevent underflow when calling delay(n) with n<2 r=jonas-schievink a=ovidiusabou
Calling delay(1) causes a very long wait (freeze) otherwise.
86cd463788b97ca3894936101c6cf4f3512f0fbc introduced this behaviour by
changing the cycle count from n / 4 + 1 to n / 2 which forces an
underflow when n<2.
Co-authored-by: Ovidiu Sabou <ovidiu@sabou.org>
Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
-rw-r--r-- | asm/inline.rs | 3 | ||||
-rw-r--r-- | bin/thumbv6m-none-eabi-lto.a | bin | 11772 -> 11788 bytes | |||
-rw-r--r-- | bin/thumbv6m-none-eabi.a | bin | 16332 -> 16344 bytes | |||
-rw-r--r-- | bin/thumbv7em-none-eabi-lto.a | bin | 15916 -> 15928 bytes | |||
-rw-r--r-- | bin/thumbv7em-none-eabi.a | bin | 21524 -> 21532 bytes | |||
-rw-r--r-- | bin/thumbv7em-none-eabihf-lto.a | bin | 16880 -> 16892 bytes | |||
-rw-r--r-- | bin/thumbv7em-none-eabihf.a | bin | 22820 -> 22828 bytes | |||
-rw-r--r-- | bin/thumbv7m-none-eabi-lto.a | bin | 14892 -> 14908 bytes | |||
-rw-r--r-- | bin/thumbv7m-none-eabi.a | bin | 20180 -> 20184 bytes | |||
-rw-r--r-- | bin/thumbv8m.base-none-eabi-lto.a | bin | 15036 -> 15056 bytes | |||
-rw-r--r-- | bin/thumbv8m.base-none-eabi.a | bin | 20760 -> 20772 bytes | |||
-rw-r--r-- | bin/thumbv8m.main-none-eabi-lto.a | bin | 19536 -> 19552 bytes | |||
-rw-r--r-- | bin/thumbv8m.main-none-eabi.a | bin | 27132 -> 27136 bytes | |||
-rw-r--r-- | bin/thumbv8m.main-none-eabihf-lto.a | bin | 20508 -> 20528 bytes | |||
-rw-r--r-- | bin/thumbv8m.main-none-eabihf.a | bin | 28400 -> 28404 bytes |
15 files changed, 2 insertions, 1 deletions
diff --git a/asm/inline.rs b/asm/inline.rs index ef203cd..5887baf 100644 --- a/asm/inline.rs +++ b/asm/inline.rs @@ -55,7 +55,8 @@ pub unsafe fn __delay(cyc: u32) { // The loop will normally take 3 to 4 CPU cycles per iteration, but superscalar cores // (eg. Cortex-M7) can potentially do it in 2, so we use that as the lower bound, since delaying // for more cycles is okay. - let real_cyc = cyc / 2; + // Add 1 to prevent an integer underflow which would cause a long freeze + let real_cyc = 1 + cyc / 2; asm!( // Use local labels to avoid R_ARM_THM_JUMP8 relocations which fail on thumbv6m. "1:", diff --git a/bin/thumbv6m-none-eabi-lto.a b/bin/thumbv6m-none-eabi-lto.a Binary files differindex 6506bd8..6136ec6 100644 --- a/bin/thumbv6m-none-eabi-lto.a +++ b/bin/thumbv6m-none-eabi-lto.a diff --git a/bin/thumbv6m-none-eabi.a b/bin/thumbv6m-none-eabi.a Binary files differindex 48fe997..c42f579 100644 --- a/bin/thumbv6m-none-eabi.a +++ b/bin/thumbv6m-none-eabi.a diff --git a/bin/thumbv7em-none-eabi-lto.a b/bin/thumbv7em-none-eabi-lto.a Binary files differindex ce6bd4c..c2c040a 100644 --- a/bin/thumbv7em-none-eabi-lto.a +++ b/bin/thumbv7em-none-eabi-lto.a diff --git a/bin/thumbv7em-none-eabi.a b/bin/thumbv7em-none-eabi.a Binary files differindex 637a884..660360f 100644 --- a/bin/thumbv7em-none-eabi.a +++ b/bin/thumbv7em-none-eabi.a diff --git a/bin/thumbv7em-none-eabihf-lto.a b/bin/thumbv7em-none-eabihf-lto.a Binary files differindex 6f7edb3..eba1984 100644 --- a/bin/thumbv7em-none-eabihf-lto.a +++ b/bin/thumbv7em-none-eabihf-lto.a diff --git a/bin/thumbv7em-none-eabihf.a b/bin/thumbv7em-none-eabihf.a Binary files differindex f25d0ef..1561fa4 100644 --- a/bin/thumbv7em-none-eabihf.a +++ b/bin/thumbv7em-none-eabihf.a diff --git a/bin/thumbv7m-none-eabi-lto.a b/bin/thumbv7m-none-eabi-lto.a Binary files differindex 485219b..d964314 100644 --- a/bin/thumbv7m-none-eabi-lto.a +++ b/bin/thumbv7m-none-eabi-lto.a diff --git a/bin/thumbv7m-none-eabi.a b/bin/thumbv7m-none-eabi.a Binary files differindex d3a1213..f541274 100644 --- a/bin/thumbv7m-none-eabi.a +++ b/bin/thumbv7m-none-eabi.a diff --git a/bin/thumbv8m.base-none-eabi-lto.a b/bin/thumbv8m.base-none-eabi-lto.a Binary files differindex bd79b05..8a6ed42 100644 --- a/bin/thumbv8m.base-none-eabi-lto.a +++ b/bin/thumbv8m.base-none-eabi-lto.a diff --git a/bin/thumbv8m.base-none-eabi.a b/bin/thumbv8m.base-none-eabi.a Binary files differindex 130e413..33cd908 100644 --- a/bin/thumbv8m.base-none-eabi.a +++ b/bin/thumbv8m.base-none-eabi.a diff --git a/bin/thumbv8m.main-none-eabi-lto.a b/bin/thumbv8m.main-none-eabi-lto.a Binary files differindex 4be0c0d..8e6ff0a 100644 --- a/bin/thumbv8m.main-none-eabi-lto.a +++ b/bin/thumbv8m.main-none-eabi-lto.a diff --git a/bin/thumbv8m.main-none-eabi.a b/bin/thumbv8m.main-none-eabi.a Binary files differindex 74a5786..898fea7 100644 --- a/bin/thumbv8m.main-none-eabi.a +++ b/bin/thumbv8m.main-none-eabi.a diff --git a/bin/thumbv8m.main-none-eabihf-lto.a b/bin/thumbv8m.main-none-eabihf-lto.a Binary files differindex 2920ea4..d9a636a 100644 --- a/bin/thumbv8m.main-none-eabihf-lto.a +++ b/bin/thumbv8m.main-none-eabihf-lto.a diff --git a/bin/thumbv8m.main-none-eabihf.a b/bin/thumbv8m.main-none-eabihf.a Binary files differindex b547b0f..b0513b7 100644 --- a/bin/thumbv8m.main-none-eabihf.a +++ b/bin/thumbv8m.main-none-eabihf.a |