This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH COMMITTED: Fix PR 46084: Allow for alignment with split stack
- From: Ian Lance Taylor <iant at google dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Fri, 05 Nov 2010 17:05:54 -0700
- Subject: Re: PATCH COMMITTED: Fix PR 46084: Allow for alignment with split stack
- References: <mcrhbfv8h83.fsf@google.com> <4CD49965.2060900@redhat.com>
Richard Henderson <rth@redhat.com> writes:
> On 11/05/2010 04:48 PM, Ian Lance Taylor wrote:
>> + /* The __morestack_allocate_stack_space function will allocate
>> + memory using malloc. We don't know that the alignment of the
>> + memory returned by malloc will meet REQUIRED_ALIGN. Increase
>> + SIZE to make sure we allocate enough space. */
>> + ask = expand_binop (Pmode, add_optab, size,
>> + GEN_INT (required_align / BITS_PER_UNIT - 1),
>> + NULL_RTX, 1, OPTAB_LIB_WIDEN);
>
> We do have MALLOC_ABI_ALIGNMENT.
Oh yeah, thanks.
Testing this patch.
Ian
Index: explow.c
===================================================================
--- explow.c (revision 166383)
+++ explow.c (working copy)
@@ -1356,13 +1356,18 @@ allocate_dynamic_stack_space (rtx size,
#endif
/* The __morestack_allocate_stack_space function will allocate
- memory using malloc. We don't know that the alignment of the
- memory returned by malloc will meet REQUIRED_ALIGN. Increase
- SIZE to make sure we allocate enough space. */
- ask = expand_binop (Pmode, add_optab, size,
- GEN_INT (required_align / BITS_PER_UNIT - 1),
- NULL_RTX, 1, OPTAB_LIB_WIDEN);
- must_align = true;
+ memory using malloc. If the alignment of the memory returned
+ by malloc does not meet REQUIRED_ALIGN, we increase SIZE to
+ make sure we allocate enough space. */
+ if (MALLOC_ABI_ALIGNMENT <= required_align)
+ ask = size;
+ else
+ {
+ ask = expand_binop (Pmode, add_optab, size,
+ GEN_INT (required_align / BITS_PER_UNIT - 1),
+ NULL_RTX, 1, OPTAB_LIB_WIDEN);
+ must_align = true;
+ }
func = init_one_libfunc ("__morestack_allocate_stack_space");