From 4b8608586d2ab59f12ec925b7ffc9b8176dc11e8 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 16 Apr 2010 02:55:30 +0000 Subject: [PATCH] toolchain/gcc: add a 3.4.6 patch fixing a g++ bug where it generates local references to linkonce (see http://gcc.gnu.org/PR16276, closes: #7014) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20900 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../gcc/patches/3.4.6/701-pr16276-fix.patch | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 toolchain/gcc/patches/3.4.6/701-pr16276-fix.patch diff --git a/toolchain/gcc/patches/3.4.6/701-pr16276-fix.patch b/toolchain/gcc/patches/3.4.6/701-pr16276-fix.patch new file mode 100644 index 000000000..69d7373f6 --- /dev/null +++ b/toolchain/gcc/patches/3.4.6/701-pr16276-fix.patch @@ -0,0 +1,61 @@ +http://gcc.gnu.org/PR16276 + +2004-07-08 H.J. Lu + + PR c++/16276 + * final.c (PUT_JUMP_TABLES_IN_TEXT_SECTION): New. + (shorten_branches): Replace JUMP_TABLES_IN_TEXT_SECTION with + PUT_JUMP_TABLES_IN_TEXT_SECTION. + (final_scan_insn): Likewise. + +--- a/gcc/final.c 2003-12-03 09:42:25.000000000 -0800 ++++ b/gcc/final.c 2004-07-08 14:45:07.900366938 -0700 +@@ -100,6 +100,9 @@ Software Foundation, 59 Temple Place - S + #define JUMP_TABLES_IN_TEXT_SECTION 0 + #endif + ++#define PUT_JUMP_TABLES_IN_TEXT_SECTION \ ++ (JUMP_TABLES_IN_TEXT_SECTION || DECL_ONE_ONLY (current_function_decl)) ++ + #if defined(READONLY_DATA_SECTION) || defined(READONLY_DATA_SECTION_ASM_OP) + #define HAVE_READONLY_DATA_SECTION 1 + #else +@@ -1119,7 +1122,8 @@ shorten_branches (first) + next = NEXT_INSN (insn); + /* ADDR_VECs only take room if read-only data goes into the text + section. */ +- if (JUMP_TABLES_IN_TEXT_SECTION || !HAVE_READONLY_DATA_SECTION) ++ if (PUT_JUMP_TABLES_IN_TEXT_SECTION ++ || !HAVE_READONLY_DATA_SECTION) + if (next && GET_CODE (next) == JUMP_INSN) + { + rtx nextbody = PATTERN (next); +@@ -1282,7 +1286,8 @@ shorten_branches (first) + { + /* This only takes room if read-only data goes into the text + section. */ +- if (JUMP_TABLES_IN_TEXT_SECTION || !HAVE_READONLY_DATA_SECTION) ++ if (PUT_JUMP_TABLES_IN_TEXT_SECTION ++ || !HAVE_READONLY_DATA_SECTION) + insn_lengths[uid] = (XVECLEN (body, + GET_CODE (body) == ADDR_DIFF_VEC) + * GET_MODE_SIZE (GET_MODE (body))); +@@ -1483,7 +1488,8 @@ shorten_branches (first) + PUT_MODE (body, CASE_VECTOR_SHORTEN_MODE (min_addr - rel_addr, + max_addr - rel_addr, + body)); +- if (JUMP_TABLES_IN_TEXT_SECTION || !HAVE_READONLY_DATA_SECTION) ++ if (PUT_JUMP_TABLES_IN_TEXT_SECTION ++ || !HAVE_READONLY_DATA_SECTION) + { + insn_lengths[uid] + = (XVECLEN (body, 1) * GET_MODE_SIZE (GET_MODE (body))); +@@ -2254,7 +2260,7 @@ final_scan_insn (insn, file, optimize, p + target, so don't output the label at all. Leave that + to the back end macros. */ + #else +- if (! JUMP_TABLES_IN_TEXT_SECTION) ++ if (! PUT_JUMP_TABLES_IN_TEXT_SECTION) + { + int log_align; +