mirror of
git://git.yoctoproject.org/poky
synced 2026-10-02 18:31:18 +00:00
Having one monolithic packages directory makes it hard to find things and is generally overwhelming. This commit splits it into several logical sections roughly based on function, recipes.txt gives more information about the classifications used. The opportunity is also used to switch from "packages" to "recipes" as used in OpenEmbedded as the term "packages" can be confusing to people and has many different meanings. Not all recipes have been classified yet, this is just a first pass at separating things out. Some packages are moved to meta-extras as they're no longer actively used or maintained. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
87 lines
1.9 KiB
Diff
87 lines
1.9 KiB
Diff
2005-11-28 Jakub Jelinek <jakub@redhat.com>
|
|
|
|
* 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;
|
|
+}
|