Comment 18 for bug 789198

Revision history for this message
Dave Martin (dave-martin-arm) wrote :

It looks like the underlying cause may be a bug in gas, which causes the wrong alignment to be set for code sections -- upstream binutils bug raised and cross-referenced from this bug.

When building firefox for Thumb, .text contains a mixture of Thumb code and ARM code (the ARM code comes from the */arm/*.asm files). The ARM code sections don't declare an appropriate alignment requirement in the objects output from the assembler, and end up in the final link aligned on an odd halfword offset.

Disassembling /usr/lib/firefox-5.0/libxul.so shows the boundary between compiler-generated Thumb code and the hand-written ARM assembler, with the ARM instructions on an invalid, non-word-aligned offset:

  61e6f2: 9201 str r2, [sp, #4]
  61e6f4: 6a5a ldr r2, [r3, #36] ; 0x24
  61e6f6: 695b ldr r3, [r3, #20]
  61e6f8: f42f efd0 blx 24e69c <_init+0x5da4>
  61e6fc: bd0e pop {r1, r2, r3, pc}

0061e6fe <vp8_decode_mb_tokens_v6>:
  61e6fe: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  61e702: e24dd040 sub sp, sp, #64 ; 0x40
  61e706: e1a07001 mov r7, r1
  61e70a: e1a09000 mov r9, r0