diff options
| author | Ilya Yanok <yanok@emcraft.com> | 2011-07-19 03:00:54 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-07-20 15:27:35 +0100 |
| commit | 44f59d24d9cc3d8a15fd796d170233dc122d13b1 (patch) | |
| tree | 29773aa7177ccd4d92bda36fe393d250a40a3f50 /meta/recipes-devtools | |
| parent | 94a6e47402afe416d1c5657d6c60999b5b6e417f (diff) | |
| download | poky-44f59d24d9cc3d8a15fd796d170233dc122d13b1.tar.gz | |
gcc_4.5.1: add pr44290.patch
Add fix for PR44290 as proposed in
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44290
(From OE-Core rev: 94311ba57cd95b6b163d162587c6318da8c3b16a)
Signed-off-by: Ilya Yanok <yanok@emcraft.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
| -rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.5.1.inc | 1 | ||||
| -rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.5.1/pr44290.patch | 119 |
2 files changed, 120 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.5.1.inc b/meta/recipes-devtools/gcc/gcc-4.5.1.inc index efed414004..99f2ad61c4 100644 --- a/meta/recipes-devtools/gcc/gcc-4.5.1.inc +++ b/meta/recipes-devtools/gcc/gcc-4.5.1.inc | |||
| @@ -59,6 +59,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ | |||
| 59 | file://COLLECT_GCC_OPTIONS.patch \ | 59 | file://COLLECT_GCC_OPTIONS.patch \ |
| 60 | file://use-defaults.h-and-t-oe-in-B.patch \ | 60 | file://use-defaults.h-and-t-oe-in-B.patch \ |
| 61 | file://pr43810.patch \ | 61 | file://pr43810.patch \ |
| 62 | file://pr44290.patch \ | ||
| 62 | " | 63 | " |
| 63 | 64 | ||
| 64 | SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " | 65 | SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 " |
diff --git a/meta/recipes-devtools/gcc/gcc-4.5.1/pr44290.patch b/meta/recipes-devtools/gcc/gcc-4.5.1/pr44290.patch new file mode 100644 index 0000000000..9cf187a423 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.5.1/pr44290.patch | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | From cb13264f07c419149b86e19c2187729bda8dd47d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: jiez <jiez@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
| 3 | Date: Fri, 23 Jul 2010 14:47:46 +0000 | ||
| 4 | Subject: [PATCH 2/6] PR target/44290 * attribs.c (decl_attributes): Insert "noinline" and "noclone" if "naked". * tree-sra.c (ipa_sra_preliminary_function_checks): Return false if ! tree_versionable_function_p. | ||
| 5 | |||
| 6 | testsuite/ | ||
| 7 | PR target/44290 | ||
| 8 | * gcc.dg/pr44290-1.c: New test. | ||
| 9 | * gcc.dg/pr44290-2.c: New test. | ||
| 10 | |||
| 11 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162466 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
| 12 | --- | ||
| 13 | gcc/attribs.c | 13 +++++++++++++ | ||
| 14 | gcc/testsuite/gcc.dg/pr44290-1.c | 18 ++++++++++++++++++ | ||
| 15 | gcc/testsuite/gcc.dg/pr44290-2.c | 24 ++++++++++++++++++++++++ | ||
| 16 | gcc/tree-sra.c | 7 +++++++ | ||
| 17 | 4 files changed, 62 insertions(+), 0 deletions(-) | ||
| 18 | create mode 100644 gcc/testsuite/gcc.dg/pr44290-1.c | ||
| 19 | create mode 100644 gcc/testsuite/gcc.dg/pr44290-2.c | ||
| 20 | |||
| 21 | diff --git a/gcc/attribs.c b/gcc/attribs.c | ||
| 22 | index 4d91a0d..2e06608 100644 | ||
| 23 | --- a/gcc/attribs.c | ||
| 24 | +++ b/gcc/attribs.c | ||
| 25 | @@ -278,6 +278,19 @@ decl_attributes (tree *node, tree attributes, int flags) | ||
| 26 | TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr)); | ||
| 27 | } | ||
| 28 | |||
| 29 | + /* A "naked" function attribute implies "noinline" and "noclone" for | ||
| 30 | + those targets that support it. */ | ||
| 31 | + if (TREE_CODE (*node) == FUNCTION_DECL | ||
| 32 | + && lookup_attribute_spec (get_identifier ("naked")) | ||
| 33 | + && lookup_attribute ("naked", attributes) != NULL) | ||
| 34 | + { | ||
| 35 | + if (lookup_attribute ("noinline", attributes) == NULL) | ||
| 36 | + attributes = tree_cons (get_identifier ("noinline"), NULL, attributes); | ||
| 37 | + | ||
| 38 | + if (lookup_attribute ("noclone", attributes) == NULL) | ||
| 39 | + attributes = tree_cons (get_identifier ("noclone"), NULL, attributes); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | targetm.insert_attributes (*node, &attributes); | ||
| 43 | |||
| 44 | for (a = attributes; a; a = TREE_CHAIN (a)) | ||
| 45 | diff --git a/gcc/testsuite/gcc.dg/pr44290-1.c b/gcc/testsuite/gcc.dg/pr44290-1.c | ||
| 46 | new file mode 100644 | ||
| 47 | index 0000000..071a271 | ||
| 48 | --- /dev/null | ||
| 49 | +++ b/gcc/testsuite/gcc.dg/pr44290-1.c | ||
| 50 | @@ -0,0 +1,18 @@ | ||
| 51 | +/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */ | ||
| 52 | +/* { dg-options "-O2 -fdump-tree-optimized" } */ | ||
| 53 | + | ||
| 54 | +static void __attribute__((naked)) | ||
| 55 | +foo(void *from, void *to) | ||
| 56 | +{ | ||
| 57 | + asm volatile("dummy"::"r"(from), "r"(to)); | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +unsigned int fie[2]; | ||
| 61 | + | ||
| 62 | +void fum(void *to) | ||
| 63 | +{ | ||
| 64 | + foo(fie, to); | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +/* { dg-final { scan-tree-dump "foo \\\(void \\\* from, void \\\* to\\\)" "optimized" } } */ | ||
| 68 | +/* { dg-final { cleanup-tree-dump "optimized" } } */ | ||
| 69 | diff --git a/gcc/testsuite/gcc.dg/pr44290-2.c b/gcc/testsuite/gcc.dg/pr44290-2.c | ||
| 70 | new file mode 100644 | ||
| 71 | index 0000000..1951a51 | ||
| 72 | --- /dev/null | ||
| 73 | +++ b/gcc/testsuite/gcc.dg/pr44290-2.c | ||
| 74 | @@ -0,0 +1,24 @@ | ||
| 75 | +/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */ | ||
| 76 | +/* { dg-options "-O2 -fdump-tree-optimized" } */ | ||
| 77 | + | ||
| 78 | +static unsigned long __attribute__((naked)) | ||
| 79 | +foo (unsigned long base) | ||
| 80 | +{ | ||
| 81 | + asm volatile ("dummy"); | ||
| 82 | +} | ||
| 83 | +unsigned long | ||
| 84 | +bar (void) | ||
| 85 | +{ | ||
| 86 | + static int start, set; | ||
| 87 | + | ||
| 88 | + if (!set) | ||
| 89 | + { | ||
| 90 | + set = 1; | ||
| 91 | + start = foo (0); | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + return foo (start); | ||
| 95 | +} | ||
| 96 | + | ||
| 97 | +/* { dg-final { scan-tree-dump "foo \\\(long unsigned int base\\\)" "optimized" } } */ | ||
| 98 | +/* { dg-final { cleanup-tree-dump "optimized" } } */ | ||
| 99 | diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c | ||
| 100 | index 6a5b577..ea37d97 100644 | ||
| 101 | --- a/gcc/tree-sra.c | ||
| 102 | +++ b/gcc/tree-sra.c | ||
| 103 | @@ -4126,6 +4126,13 @@ modify_function (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments) | ||
| 104 | static bool | ||
| 105 | ipa_sra_preliminary_function_checks (struct cgraph_node *node) | ||
| 106 | { | ||
| 107 | + if (!tree_versionable_function_p (current_function_decl)) | ||
| 108 | + { | ||
| 109 | + if (dump_file) | ||
| 110 | + fprintf (dump_file, "Function isn't allowed to be versioned.\n"); | ||
| 111 | + return false; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | if (!cgraph_node_can_be_local_p (node)) | ||
| 115 | { | ||
| 116 | if (dump_file) | ||
| 117 | -- | ||
| 118 | 1.7.4 | ||
| 119 | |||
