Question
thumb misalignment? [was: memcpy oddness]
Posted on August 03, 2016 at 05:47
Hi Guys,
I've recently started working with the STM32F0 series of microcontrollers, took a while to get a fully functional build chain up and running, but now everything looks good on that front. I've run into an oddball issue with memcpy, initially I thought it was an issue with one of the libraries I'm importing, but I've since dropped that and I'm seeing the issue in user code. It appears that the __memcpy_from_thumb stub is misaligned somehow, I've disassembled the code in IDA and it all looks fine, but when I step through it in GDB things look very weird. Segment in question in IDA;.text:08002640 CODE16
.text:08002640
.text:08002640 ; =============== S U B R O U T I N E =======================================
.text:08002640
.text:08002640 ; Attributes: thunk
.text:08002640
.text:08002640 __memcpy_from_thumb ; CODE XREF: wc_Md5Update+3Cp
.text:08002640 ; wc_Md5Final+ACp ...
.text:08002640 BX PC
.text:08002640 ; ---------------------------------------------------------------------------
.text:08002642 ALIGN 4
.text:08002644 CODE32
.text:08002644
.text:08002644 loc_8002644 ; CODE XREF: __memcpy_from_thumbj
.text:08002644 B memcpy
.text:08002644 ; End of function __memcpy_from_thumb
.text:08002644 Everything looks good, drilling through to memcpy leads me to something that looks very much like a memcpy function, so it looks like IDA is doing the business.
However, when I load the code to my target (STM32F051R8 on the STM32F0DISCOVERY) and step through it in GDB I get the following;
0x8002640 <
__memcpy_from_thumb
> bx pc
0x8002642 <
__memcpy_from_thumb
+2> nop ; (mov r8, r8)
0x8002644 <
__memcpy_from_thumb
+4> ; <
UNDEFINED
> instruction: 0xff81eaff Stepping through the code lands me in the HardFault handler. This looks for all the world like it's misaligned but I've no idea where to start with troubleshooting this issue.
Any assistance would be greatly appreciated.
Thanks,
-J