How do disable generation of LDRD in ARM

Roger Cruz
Wed Dec 26 06:22:00 GMT 2012

I am compiling this piece of code from an open source project that I wish not to have to change.  The problem is that when compiled for ARM, it generates an LDRD instruction, which when executed, causes a bus error since the address in ptr is not doubleword aligned.  I know I can change the code but I prefer to leave it intact as there may be many more instances of this and I don't wish to maintain the code.  I found the compiler option -mfix-cortex-m3-ldrd but the code still being generated with the LDRD instruction.  Any suggestions on how to tell the compiler to avoid LDRD instructions?

248    static DWORD64 dwarf2_get_u8(const unsigned char* ptr)
249    {
250        return *(const UINT64*)ptr;
251    }

(gdb) x/5i $pc
=> 0x4325ffd4 <dwarf2_get_u8+20>:    ldrd    r2, [r3]
gdb) p ptr
$6 = (const unsigned char *) 0x435a2fa5 ""
(gdb) p $r3
$7 = 0x435a2fa5

Happy Holidays,
Roger R. Cruz

More information about the Gcc mailing list