1. 13 May, 2024 3 commits
  2. 09 May, 2024 2 commits
  3. 07 May, 2024 4 commits
  4. 06 May, 2024 5 commits
  5. 03 May, 2024 1 commit
  6. 01 May, 2024 4 commits
  7. 28 Apr, 2024 1 commit
  8. 26 Apr, 2024 1 commit
  9. 25 Apr, 2024 1 commit
    • J. Neuschäfer's avatar
      py/nlrthumb: Make non-Thumb2 long-jump workaround opt-in. · 7b050b36
      J. Neuschäfer authored
      Although the original motivation given for the workaround[1] is correct,
      nlr.o and nlrthumb.o are linked with a small enough distance that the
      problem does not occur, and the workaround isn't necessary. The distance
      between the b instruction and its target (nlr_push_tail) is just 64
      bytes[2], well within the ±2046 byte range addressable by an
      unconditional branch instruction in Thumb mode.
      
      The workaround induces a relocation in the text section (textrel), which
      isn't supported everywhere, notably not on musl-libc[3], where it causes
      a crash on start-up. With the workaround removed, micropython works on an
      ARMv5T Linux system built with musl-libc.
      
      This commit changes nlrthumb.c to use a direct jump by default, but
      leaves the long jump workaround as an option for those cases where it's
      actually needed.
      
      [1]: commit dd376a23
      
      Author: Damien George <damien.p.george@gmail.com>
      Date:   Fri Sep 1 15:25:29 2017 +1000
      
          py/nlrthumb: Get working again on standard Thumb arch (ie not Thumb2).
      
          "b" on Thumb might not be long enough for the jump to nlr_push_tail so
          it must be done indirectly.
      
      [2]: Excerpt from objdump -d micropython:
      
      000095c4 <nlr_push_tail>:
          95c4:       b510            push    {r4, lr}
          95c6:       0004            movs    r4, r0
          95c8:       f02d fd42       bl      37050 <mp_thread_get_state>
          95cc:       6943            ldr     r3, [r0, #20]
          95ce:       6023            str     r3, [r4, #0]
          95d0:       6144            str     r4, [r0, #20]
          95d2:       2000            movs    r0, #0
          95d4:       bd10            pop     {r4, pc}
      
      000095d6 <nlr_pop>:
          95d6:       b510            push    {r4, lr}
          95d8:       f02d fd3a       bl      37050 <mp_thread_get_state>
          95dc:       6943            ldr     r3, [r0, #20]
          95de:       681b            ldr     r3, [r3, #0]
          95e0:       6143            str     r3, [r0, #20]
          95e2:       bd10            pop     {r4, pc}
      
      000095e4 <nlr_push>:
          95e4:       60c4            str     r4, [r0, #12]
          95e6:       6105            str     r5, [r0, #16]
          95e8:       6146            str     r6, [r0, #20]
          95ea:       6187            str     r7, [r0, #24]
          95ec:       4641            mov     r1, r8
          95ee:       61c1            str     r1, [r0, #28]
          95f0:       4649            mov     r1, r9
          95f2:       6201            str     r1, [r0, #32]
          95f4:       4651            mov     r1, sl
          95f6:       6241            str     r1, [r0, #36]   @ 0x24
          95f8:       4659            mov     r1, fp
          95fa:       6281            str     r1, [r0, #40]   @ 0x28
          95fc:       4669            mov     r1, sp
          95fe:       62c1            str     r1, [r0, #44]   @ 0x2c
          9600:       4671            mov     r1, lr
          9602:       6081            str     r1, [r0, #8]
          9604:       e7de            b.n     95c4 <nlr_push_tail>
      
      [3]: https://www.openwall.com/lists/musl/2020/09/25/4Signed-off-by: default avatarJ. Neuschäfer <j.ne@posteo.net>
      7b050b36
  10. 24 Apr, 2024 9 commits
  11. 22 Apr, 2024 7 commits
  12. 20 Apr, 2024 1 commit
  13. 17 Apr, 2024 1 commit
    • Angus Gratton's avatar
      shared/tinyusb: Fix dynamic USB control callbacks for wLength==0. · d11ca092
      Angus Gratton authored
      In the case where an OUT control transfer triggers with wLength==0 (i.e.
      all data sent in the SETUP phase, and no additional data phase) the
      callbacks were previously implemented to return b"" (i.e. an empty buffer
      for the data phase).
      
      However this didn't actually work as intended because b"" can't provide a
      RW buffer (needed for OUT transfers with a data phase to write data into),
      so actually the endpoint would stall.
      
      The symptom was often that the device process the request (if processing
      it in the SETUP phase when all information was already available), but the
      host sees the endpoint stall and eventually returns an error.
      
      This commit changes the behaviour so returning True from the SETUP phase of
      a control transfer queues a zero length status response.
      Signed-off-by: default avatarAngus Gratton <angus@redyak.com.au>
      d11ca092