Commit 693ee8cf by Anthony Green Committed by Anthony Green

Fix moxie tramponline alignment problem

From-SVN: r156465
parent bf8e3b77
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
......
/* 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) ...@@ -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) ...@@ -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);
} }
......
/* 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 ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment