Fix moxie tramponline alignment problem

From-SVN: r156465
This commit is contained in:
Anthony Green 2010-02-03 11:36:30 +00:00 committed by Anthony Green
parent bf8e3b779b
commit 693ee8cf85
3 changed files with 17 additions and 5 deletions

View File

@ -1,3 +1,14 @@
2010-02-03 Anthony Green <green@moxielogic.com>
* config/moxie/moxie.c (moxie_asm_trampoline_template): Introduce
nop padding in order to maintain alignment of storage location of
target function address.
(moxie_trampoline_init): Store target function address at newly
aligned location.
* config/moxie/moxie.h (TRAMPOLINE_ALIGNMENT): Increase alignment
to 32.
(TRAMPOLINE_SIZE): Increase size by 2 bytes for alignment padding.
2010-02-03 Richard Guenther <rguenther@suse.de>
PR middle-end/42927

View File

@ -1,5 +1,5 @@
/* Target Code for moxie
Copyright (C) 2008, 2009 Free Software Foundation
Copyright (C) 2008, 2009, 2010 Free Software Foundation
Contributed by Anthony Green.
This file is part of GCC.
@ -483,6 +483,7 @@ moxie_asm_trampoline_template (FILE *f)
fprintf (f, "\tldi.l $r0, 0x0\n");
fprintf (f, "\tsto.l 0x8($fp), $r0\n");
fprintf (f, "\tpop $sp, $r0\n");
fprintf (f, "\tnop\n");
fprintf (f, "\tjmpa 0x0\n");
}
@ -498,7 +499,7 @@ moxie_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
mem = adjust_address (m_tramp, SImode, 4);
emit_move_insn (mem, chain_value);
mem = adjust_address (m_tramp, SImode, 18);
mem = adjust_address (m_tramp, SImode, 20);
emit_move_insn (mem, fnaddr);
}

View File

@ -1,5 +1,5 @@
/* Target Definitions for moxie.
Copyright (C) 2008, 2009 Free Software Foundation, Inc.
Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
Contributed by Anthony Green.
This file is part of GCC.
@ -386,10 +386,10 @@ enum reg_class
#define FUNCTION_PROFILER(FILE,LABELNO) (abort (), 0)
/* Trampolines for Nested Functions. */
#define TRAMPOLINE_SIZE (2 + 6 + 6 + 2 + 6)
#define TRAMPOLINE_SIZE (2 + 6 + 6 + 2 + 2 + 6)
/* Alignment required for trampolines, in bits. */
#define TRAMPOLINE_ALIGNMENT 16
#define TRAMPOLINE_ALIGNMENT 32
/* An alias for the machine mode for pointers. */
#define Pmode SImode