From: Josh Conner Date: Mon, 13 Feb 2006 18:12:17 +0000 (+0000) Subject: re PR target/25376 (section attribute doesn't work on darwin) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4c553323a6f4d90e48002ea23b7f779c106ad620;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30cea158738..2c8fe9527c9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2006-02-13 Josh Conner + + 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 PR middle-end/25335 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 686a2234ede..3338042a72c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2006-02-13 Josh Conner + + 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 * 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 bbb3483a557..955cdd060ff 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 00000000000..3008b091dc2 --- /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 f9ca1a1652d..88794a3cb98 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 68bd026a279..bddf1ad9853 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 ()