This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2] Clean up check_pf allocation pattern. addresses
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: libc-alpha at sourceware dot org
- Date: Thu, 5 Jun 2014 13:51:39 +0200
- Subject: Re: [PATCH v2] Clean up check_pf allocation pattern. addresses
- Authentication-results: sourceware.org; auth=none
- References: <mvm61n3puag dot fsf at hawking dot suse dot de> <20140324165711 dot GA6719 at domone dot podge> <87k3bjzcpb dot fsf at igel dot home> <20140325214344 dot GA23074 at domone dot podge> <mvmfvm5l20i dot fsf at hawking dot suse dot de> <20140527205640 dot GB21440 at domone dot podge> <mvmmwe2jilf dot fsf at hawking dot suse dot de> <20140528105823 dot GA2269 at domone dot podge> <mvmiooqjhe5 dot fsf at hawking dot suse dot de>
On Wed, May 28, 2014 at 01:02:10PM +0200, Andreas Schwab wrote:
> OndÅej BÃlka <neleai@seznam.cz> writes:
>
> > No, that would not be problem if gcc optimized alloca alignment which it
> > does not do now.
>
> What do you mean with "alloca alignment"?
>
How that does expand in assembly, you need to align pointers to 16
bytes. A following fragment
int main()
{
char *x = alloca (42);
foo (x);
}
with stack pointer named sp growing downward gets expanded to
int main()
{
register char *tmp = sp;
sp -= 64;
char *x = (sp + 15) & (-16);
foo (x);
sp = tmp;
}
but when there is array
int main()
{
char *x[42];
foo (x);
}
then code becomes
int main()
{
sp -= 56;
x = sp;
foo (x);
sp += 56;
}