SW4STM32 and SW4Linux fully supports the STM32MP1 asymmetric multicore Cortex/A7+M4 MPUs

   With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world. And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
You can get more information from the ac6-tools website and download (registration required) various documents highlighting:

System Workbench for STM32

generating position independent code problem on STM32F4


Hi Sylvain,

In fact function calls are never generated using absolute addressses, except whan calling a function through a pointer, where the pointer must, obviously, contain the absolute address of the function. All function calls (using the BL instruction) are using relative addresses, limited to +-16MB.

Only if the function is farther than 16MB from the call will the linker generate a veneer which loads an absolute address in the r12 register and branch using a BX instruction; the original BL will then call the veneer that will redirect to the proper function.

For a PIC driver, all your internal calls will thus be using relative addressing; however, if you need to call other functions, then you should create yourself (probably in the code providing these functions) a structure containing pointers to functions that will be used to call them from PIC code.

Bernard (Ac6)