What does an “alignment trap” error means?

前端 未结 2 753
灰色年华
灰色年华 2021-01-16 12:06

One of my friends is having a big problem trying to debug a code that started showing \"alignment trap\" errors. The problem happens when a global structure is accessed by a

相关标签:
2条回答
  • 2021-01-16 12:44

    It is operating system and processor specific (and ABI specific too).

    You have some memory corruption, or memory leak or buffer overflow, etc..., or you are dereferencing some bad pointer (either uninitialized, or computed wrongly) - e.g. a pointer to double which is not a multiple of 8 (or, on some architectures, a pointer to int which is not multiple of 4), or perhaps you are jumping to some invalid address (e.g. to a bad function pointer).

    On Linux, I would suggest to compile with gcc -Wall -g and to use the debugger (gdb) and valgrind. You might be interested in using -fsanitize=address or -fsanitize=undefined compilation flags (with GCC 4.9). They both instrument (so modify) the generated code.

    Read about undefined behavior. You surely got some.

    0 讨论(0)
  • 2021-01-16 12:45

    An alignment trap is triggered by ARM whenever an unaligned access is made. What is an unaligned access? It's when a multibyte value is accessed where its pointer is not a multiple of its alignment, e.g. when a uint32_t is accessed by dereferencing a pointer that isn't a multiple of 4.

    You can get them if you have __attribute__((packed)) data structures like this:

    struct foo {
        uint8_t a;
        uint32_t b;
    } __attribute__((packed));
    

    Accesses to b will be unaligned and therefore will cause an alignment trap. You have to memcpy the data into an aligned value, and then access it.

    0 讨论(0)
提交回复
热议问题