The test code for this issue is as below: int main(int argc, char *argv[]) { uint8_t abc[40] = {0}; uint8_t def[40] = {1}; for (uint32_t i = 0; i < sizeof(abc); ++ i) { printf("Copying %u bytes, Dest Address: %p, Source Address: %p\n", sizeof(def) - i, &abc[i], &def[i]); memcpy(&abc[i], &def[i], sizeof(def) - i); } }
If &abc[i] or &def[i] is not 4 bytes aligned, the whole system hangs.
On Fri, Nov 10, 2017 at 4:04 PM Yupeng Chang changyp6@gmail.com wrote:
Hi Linaro Team, I'm currently using toolchain gcc-linaro-7.1.1-2017.08-x86_64_arm-eabi.tar.xz https://releases.linaro.org/components/toolchain/binaries/latest/arm-eabi/gcc-linaro-7.1.1-2017.08-x86_64_arm-eabi.tar.xz to develop my bera-metal programs. My compile option is "-marm -march=armv7-a -mtune=cortex-a9 -mlittle-endian -mfloat-abi=hard -mfpu=neon"
I found an issue, when I use memcpy, and if the DEST or SOURCE address is not 4 bytes aligned, the system hangs. It seems that this toolchain doesn't support using hard float and NEON ?
My question is does this toolchain support hard float and NEON in the newlib C library? If I want to use hard float and NEON, how can I do that?
Your reply is more appreciated!!