aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Conner <jconner@apple.com>2006-02-13 18:12:17 +0000
committerJosh Conner <jconner@gcc.gnu.org>2006-02-13 18:12:17 +0000
commit4c553323a6f4d90e48002ea23b7f779c106ad620 (patch)
tree6029d89fb50bcba47971911b85b26ad5671431a7
parente98aa197b7f0810908fd4f8504fe87cb615eaeea (diff)
downloadgcc-4c553323a6f4d90e48002ea23b7f779c106ad620.zip
gcc-4c553323a6f4d90e48002ea23b7f779c106ad620.tar.gz
gcc-4c553323a6f4d90e48002ea23b7f779c106ad620.tar.bz2
re PR target/25376 (section attribute doesn't work on darwin)
PR target/25376 * varasm.c (function_section): Check for section name before calling select_section on targets that define USE_SELECT_SECTION_FOR_FUNCTIONS. On other targets, use unlikely_text_section instead of hot_function_section if first_function_block_is_cold. * gcc.dg/pr25376.c: New test. * gcc.c-torture/compile/pr23237.c: Only compile test -- don't assemble. * lib/target-supports.exp (check_named_sections_available): Only compile named-sections test -- don't assemble. From-SVN: r110917
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr23237.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr25376.c9
-rw-r--r--gcc/testsuite/lib/target-supports.exp2
-rw-r--r--gcc/varasm.c21
6 files changed, 49 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 30cea15..2c8fe95 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2006-02-13 Josh Conner <jconner@apple.com>
+
+ PR target/25376
+ * varasm.c (function_section): Check for section name before
+ calling select_section on targets that define
+ USE_SELECT_SECTION_FOR_FUNCTIONS. On other targets, use
+ unlikely_text_section instead of hot_function_section if
+ first_function_block_is_cold.
+
2006-02-13 J"orn Rennecke <joern.rennecke@st.com>
PR middle-end/25335
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 686a223..3338042 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2006-02-13 Josh Conner <jconner@apple.com>
+
+ PR target/25376
+ * gcc.dg/pr25376.c: New test.
+
+ * gcc.c-torture/compile/pr23237.c: Only compile test -- don't
+ assemble.
+ * lib/target-supports.exp (check_named_sections_available):
+ Only compile named-sections test -- don't assemble.
+
2006-02-12 Gabriel Dos Reis <gdr@integrable-solutions.net>
* g++.dg/warn/no-write-strings.C: New test.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr23237.c b/gcc/testsuite/gcc.c-torture/compile/pr23237.c
index bbb3483..955cdd0 100644
--- a/gcc/testsuite/gcc.c-torture/compile/pr23237.c
+++ b/gcc/testsuite/gcc.c-torture/compile/pr23237.c
@@ -1,5 +1,9 @@
/* { dg-require-effective-target named_sections } */
+/* Don't assemble, as this section syntax may not be valid on all platforms
+ (e.g., Darwin). */
+/* { dg-do compile } */
+
static __attribute__ ((__section__ (".init.data"))) char *message;
static __attribute__ ((__section__ (".init.data"))) int (*actions[])(void) = {};
void unpack_to_rootfs(void)
diff --git a/gcc/testsuite/gcc.dg/pr25376.c b/gcc/testsuite/gcc.dg/pr25376.c
new file mode 100644
index 0000000..3008b09
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr25376.c
@@ -0,0 +1,9 @@
+/* PR25376. Verify that a named section is honored. */
+/* { dg-require-named-sections "" } */
+
+void simple (void) __attribute__((section("my_named_section")));
+void simple (void)
+{
+}
+
+/* { dg-final { scan-assembler "my_named_section" } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index f9ca1a1..88794a3 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -637,7 +637,7 @@ proc check_iconv_available { test_what } {
# the same test run.
proc check_named_sections_available { } {
verbose "check_named_sections_available: compiling source" 2
- set answer [string match "" [get_compiler_messages named object {
+ set answer [string match "" [get_compiler_messages named assembly {
int __attribute__ ((section("whatever"))) foo;
}]]
verbose "check_named_sections_available: returning $answer" 2
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 68bd026..bddf1ad 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -440,9 +440,14 @@ function_section (tree decl)
reloc = 1;
#ifdef USE_SELECT_SECTION_FOR_FUNCTIONS
- return targetm.asm_out.select_section (decl, reloc, DECL_ALIGN (decl));
+ if (decl != NULL_TREE
+ && DECL_SECTION_NAME (decl) != NULL_TREE)
+ return reloc ? unlikely_text_section ()
+ : get_named_section (decl, NULL, 0);
+ else
+ return targetm.asm_out.select_section (decl, reloc, DECL_ALIGN (decl));
#else
- return hot_function_section (decl);
+ return reloc ? unlikely_text_section () : hot_function_section (decl);
#endif
}
@@ -450,9 +455,15 @@ section *
current_function_section (void)
{
#ifdef USE_SELECT_SECTION_FOR_FUNCTIONS
- return targetm.asm_out.select_section (current_function_decl,
- in_cold_section_p,
- DECL_ALIGN (current_function_decl));
+ if (current_function_decl != NULL_TREE
+ && DECL_SECTION_NAME (current_function_decl) != NULL_TREE)
+ return in_cold_section_p ? unlikely_text_section ()
+ : get_named_section (current_function_decl,
+ NULL, 0);
+ else
+ return targetm.asm_out.select_section (current_function_decl,
+ in_cold_section_p,
+ DECL_ALIGN (current_function_decl));
#else
return (in_cold_section_p
? unlikely_text_section ()