From e6a3149428ef2d42d9a9df78a19c2e52496f3deb Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 22 May 2009 09:42:20 +0100 Subject: gcc: Add 4.3.3 and switch to for Moblin Signed-off-by: Richard Purdie --- .../gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 meta/packages/gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch (limited to 'meta/packages/gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch') diff --git a/meta/packages/gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch b/meta/packages/gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch new file mode 100644 index 000000000..e9ae1bc30 --- /dev/null +++ b/meta/packages/gcc/gcc-4.3.3/fedora/gcc43-ppc32-retaddr.patch @@ -0,0 +1,86 @@ +2005-11-28 Jakub Jelinek + + * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, + read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx + instead of doing an extran indirection from frame_pointer_rtx. + + * gcc.dg/20051128-1.c: New test. + +--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 ++++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 +@@ -13166,17 +13166,22 @@ rs6000_return_addr (int count, rtx frame + don't try to be too clever here. */ + if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic)) + { ++ rtx x; + cfun->machine->ra_needs_full_frame = 1; + +- return +- gen_rtx_MEM +- (Pmode, +- memory_address +- (Pmode, +- plus_constant (copy_to_reg +- (gen_rtx_MEM (Pmode, +- memory_address (Pmode, frame))), +- RETURN_ADDRESS_OFFSET))); ++ if (count == 0) ++ { ++ gcc_assert (frame == frame_pointer_rtx); ++ x = arg_pointer_rtx; ++ } ++ else ++ { ++ x = memory_address (Pmode, frame); ++ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); ++ } ++ ++ x = plus_constant (x, RETURN_ADDRESS_OFFSET); ++ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); + } + + cfun->machine->ra_need_lr = 1; +--- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 ++++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 +@@ -0,0 +1,41 @@ ++/* { dg-do run } */ ++/* { dg-options "-O2 -fpic" } */ ++ ++extern void exit (int); ++extern void abort (void); ++ ++int b; ++ ++struct A ++{ ++ void *pad[147]; ++ void *ra, *h; ++ long o; ++}; ++ ++void ++__attribute__((noinline)) ++foo (struct A *a, void *x) ++{ ++ __builtin_memset (a, 0, sizeof (a)); ++ if (!b) ++ exit (0); ++} ++ ++void ++__attribute__((noinline)) ++bar (void) ++{ ++ struct A a; ++ ++ __builtin_unwind_init (); ++ foo (&a, __builtin_return_address (0)); ++} ++ ++int ++main (void) ++{ ++ bar (); ++ abort (); ++ return 0; ++} -- cgit v1.2.3