diff options
author | Josh Conner <jconner@apple.com> | 2006-02-13 18:12:17 +0000 |
---|---|---|
committer | Josh Conner <jconner@gcc.gnu.org> | 2006-02-13 18:12:17 +0000 |
commit | 4c553323a6f4d90e48002ea23b7f779c106ad620 (patch) | |
tree | 6029d89fb50bcba47971911b85b26ad5671431a7 | |
parent | e98aa197b7f0810908fd4f8504fe87cb615eaeea (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr23237.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr25376.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 21 |
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 () |