[PATCH] D55555: [LLD][ELF][ARM] Add support for architecture v6m thunks

Peter Smith via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 11 05:28:36 PST 2018


peter.smith created this revision.
peter.smith added reviewers: ruiu, grimar.
Herald added subscribers: kristof.beyls, arichardson, javed.absar, emaste.
Herald added a reviewer: espindola.

ARM Architecture v6m is used by the smallest microcontrollers such as the cortex-m0. It is Thumb only (no Thumb 2) which prevents it from using the existing Thumb 2 range extension thunks as these use the Thumb 2 movt/movw instructions. Range extension thunks are not usually needed for microcontrollers due to the small amount of flash and ram on the device, however if code is copied from flash into ram then a range extension thunk is required to call that code.

      

This change adds support for v6m range extension thunks. The procedure call standard APCS permits a thunk to corrupt the intra-procedural scratch register r12 (referred to as ip in the APCS). Most Thumb instructions do not permit access to high registers (r8 - r15) so the thunks must spill some low registers (r0 - r7) to perform the control transfer. The thunks here preserve the APCS 8-byte stack alignment so may appear to spill 1 more register than they need to.

      

Fixes pr39922 (https://bugs.llvm.org/show_bug.cgi?id=39922)

      


https://reviews.llvm.org/D55555

Files:
  ELF/Thunks.cpp
  test/ELF/arm-thumb-nov6thunk.s
  test/ELF/arm-thumb-thunk-v6m.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55555.177695.patch
Type: text/x-patch
Size: 9377 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181211/75a0d868/attachment.bin>


More information about the llvm-commits mailing list