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> 2010-02-03 Richard Guenther <rguenther@suse.de>
PR middle-end/42927 PR middle-end/42927

View File

@ -1,5 +1,5 @@
/* Target Code for moxie /* Target Code for moxie
Copyright (C) 2008, 2009 Free Software Foundation Copyright (C) 2008, 2009, 2010 Free Software Foundation
Contributed by Anthony Green. Contributed by Anthony Green.
This file is part of GCC. 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, "\tldi.l $r0, 0x0\n");
fprintf (f, "\tsto.l 0x8($fp), $r0\n"); fprintf (f, "\tsto.l 0x8($fp), $r0\n");
fprintf (f, "\tpop $sp, $r0\n"); fprintf (f, "\tpop $sp, $r0\n");
fprintf (f, "\tnop\n");
fprintf (f, "\tjmpa 0x0\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); mem = adjust_address (m_tramp, SImode, 4);
emit_move_insn (mem, chain_value); 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); emit_move_insn (mem, fnaddr);
} }

View File

@ -1,5 +1,5 @@
/* Target Definitions for moxie. /* 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. Contributed by Anthony Green.
This file is part of GCC. This file is part of GCC.
@ -386,10 +386,10 @@ enum reg_class
#define FUNCTION_PROFILER(FILE,LABELNO) (abort (), 0) #define FUNCTION_PROFILER(FILE,LABELNO) (abort (), 0)
/* Trampolines for Nested Functions. */ /* 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. */ /* Alignment required for trampolines, in bits. */
#define TRAMPOLINE_ALIGNMENT 16 #define TRAMPOLINE_ALIGNMENT 32
/* An alias for the machine mode for pointers. */ /* An alias for the machine mode for pointers. */
#define Pmode SImode #define Pmode SImode