Skip to content
  1. Feb 19, 2014
  2. Feb 18, 2014
  3. Feb 17, 2014
  4. Feb 16, 2014
    • Mark Seaborn's avatar
      Use 16 byte stack alignment for NaCl on ARM · be266aa3
      Mark Seaborn authored
      NaCl's ARM ABI uses 16 byte stack alignment, so set that in
      ARMSubtarget.cpp.
      
      Using 16 byte alignment exposes an issue in code generation in which a
      varargs function leaves a 4 byte gap between the values of r1-r3 saved
      to the stack and the following arguments that were passed on the
      stack.  (Previously, this code only needed to support 4 byte and 8
      byte alignment.)
      
      With this issue, llc generated:
      
      varargs_func:
              sub     sp, sp, #16
              push    {lr}
              sub     sp, sp, #12
              add     r0, sp, #16   // Should be 20
              stm     r0, {r1, r2, r3}
              ldr     r0, .LCPI0_0  // Address of va_list
              add     r1, sp, #16
              str     r1, [r0]
              bl      external_func
      
      Fix the bug by checking for "Align > 4".  Also simplify the code by
      using OffsetToAlignment(), and update comments.
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D2677
      
      llvm-svn: 201497
      be266aa3
Loading