target.def (tm_clone_table_section): New hook.
authorIain Sandoe <iains@gcc.gnu.org>
Tue, 22 Nov 2011 10:19:19 +0000 (10:19 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Tue, 22 Nov 2011 10:19:19 +0000 (10:19 +0000)
gcc:

* target.def (tm_clone_table_section): New hook.
* doc/tm.texi.in (TARGET_ASM_TM_CLONE_TABLE_SECTION): Define.
* doc/tm.texi: Regenerate.
* varasm.c (dump_tm_clone_pairs): Use target tm_clone_table_section.
* output.h (default_clone_table_section): New prototype.
* config/darwin.h (TARGET_ASM_TM_CLONE_TABLE_SECTION): New.
* config/darwin-protos.h (darwin_tm_clone_table_section): New prototype.
* config/darwin.c (darwin_tm_clone_table_section): New.

gcc/testsuite:

     * gcc.dg/tm/20100615.c: Adjust for Darwin tm_clone_table section name.

From-SVN: r181613

gcc/ChangeLog
gcc/config/darwin-protos.h
gcc/config/darwin.c
gcc/config/darwin.h
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/output.h
gcc/target.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tm/20100615.c
gcc/varasm.c

index 8c776dc3c730522a1a47a17b11f0a58b9a9321ed..7b8b19fe518ae8abddb7b0da6291e4f85a60f434 100644 (file)
@@ -1,3 +1,14 @@
+2011-11-22  Iain Sandoe  <iains@gcc.gnu.org>
+
+       * target.def (tm_clone_table_section): New hook.
+       * doc/tm.texi.in (TARGET_ASM_TM_CLONE_TABLE_SECTION): Define.
+       * doc/tm.texi: Regenerate.
+       * varasm.c (dump_tm_clone_pairs): Use target tm_clone_table_section.
+       * output.h (default_clone_table_section): New prototype.
+       * config/darwin.h (TARGET_ASM_TM_CLONE_TABLE_SECTION): New.
+       * config/darwin-protos.h (darwin_tm_clone_table_section): New prototype.
+       * config/darwin.c (darwin_tm_clone_table_section): New.
+
 2011-11-21  Torvald Riegel  <triegel@redhat.com>
 
        * trans-mem.c (diagnose_tm_1): Print an expression instead of a
index 21092af66e2f8625055d0fefddf9994ce1a8e517..e0220864facf7f556bdee3a2ff0559d621f80b35 100644 (file)
@@ -58,6 +58,7 @@ extern int machopic_reloc_rw_mask (void);
 extern section *machopic_select_section (tree, int, unsigned HOST_WIDE_INT);
 
 extern section *darwin_function_section (tree, enum node_frequency, bool, bool); 
+extern section *darwin_tm_clone_table_section (void);
 extern void darwin_function_switched_text_sections (FILE *, tree, bool);
 
 extern void darwin_unique_section (tree decl, int reloc);
index 7c33a533fff1ab18c91e7fe2235638be29c9fb47..b1038f406601527b4f0855d4b4969ac7cb91726c 100644 (file)
@@ -1265,6 +1265,14 @@ darwin_mergeable_constant_section (tree exp,
   return readonly_data_section;
 }
 
+section *
+darwin_tm_clone_table_section (void)
+{
+  return get_named_section (NULL,
+                           "__DATA,__tm_clone_table,regular,no_dead_strip",
+                           3);
+}
+
 int
 machopic_reloc_rw_mask (void)
 {
index 7ae751972f9598fed27cc0a1392847f508149148..efff4c9a4355577accc4463548d046270d40dc2e 100644 (file)
@@ -697,6 +697,10 @@ extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
 #define TARGET_ASM_UNIQUE_SECTION darwin_unique_section
 #undef  TARGET_ASM_FUNCTION_RODATA_SECTION
 #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
+
+#undef  TARGET_ASM_TM_CLONE_TABLE_SECTION
+#define TARGET_ASM_TM_CLONE_TABLE_SECTION darwin_tm_clone_table_section
+
 #undef  TARGET_ASM_RELOC_RW_MASK
 #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
 
index 10fd876fd09d11578371f3dd22c452b81be6f3d9..c079ce29b7e3d0d9b3c637eb62826e0821c2ec2b 100644 (file)
@@ -7090,6 +7090,10 @@ section names for mergeable constant data.  Define this macro to override
 the string if a different section name should be used.
 @end deftypevr
 
+@deftypefn {Target Hook} {section *} TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
+Return the section that should be used for transactional memory clone  tables.
+@end deftypefn
+
 @deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_RTX_SECTION (enum machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align})
 Return the section into which a constant @var{x}, of mode @var{mode},
 should be placed.  You can assume that @var{x} is some kind of
index cebeb1fa7776f939607dd2fd7b29e465a10b68c4..d03d7f656a2f2d039c3f736e4b4c1eb7af185470 100644 (file)
@@ -7013,6 +7013,8 @@ otherwise.
 
 @hook TARGET_ASM_MERGEABLE_RODATA_PREFIX
 
+@hook TARGET_ASM_TM_CLONE_TABLE_SECTION
+
 @hook TARGET_ASM_SELECT_RTX_SECTION
 Return the section into which a constant @var{x}, of mode @var{mode},
 should be placed.  You can assume that @var{x} is some kind of
index 2cabaaa4499148863ab76570d04ea9d2dd092de2..bc8c9d97825d561ba62d2c3eeb92eb7bf2dbb125 100644 (file)
@@ -638,6 +638,7 @@ extern section *default_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
 extern void default_unique_section (tree, int);
 extern section *default_function_rodata_section (tree);
 extern section *default_no_function_rodata_section (tree);
+extern section *default_clone_table_section (void);
 extern section *default_select_rtx_section (enum machine_mode, rtx,
                                            unsigned HOST_WIDE_INT);
 extern section *default_elf_select_rtx_section (enum machine_mode, rtx,
index 62bd06e976fbdf8a732149ff7fac4eaf44debc00..f5a5d54904af6e11a55d2019c984578e0c5237c9 100644 (file)
@@ -305,6 +305,13 @@ section names for mergeable constant data.  Define this macro to override\n\
 the string if a different section name should be used.",
  const char *, ".rodata")
 
+/* Return the section to be used for transactional memory clone tables.  */
+DEFHOOK
+(tm_clone_table_section,
+ "Return the section that should be used for transactional memory clone\
+  tables.",
+ section *, (void), default_clone_table_section)
+
 /* Output a constructor for a symbol with a given priority.  */
 DEFHOOK
 (constructor,
index 086c1fb7e6bddf4b76ef756142cb8071dafb229a..9e3d5c843616d1c36dde95e111c9e5b5592a80a3 100644 (file)
@@ -1,3 +1,7 @@
+2011-11-22  Iain Sandoe  <iains@gcc.gnu.org>
+
+     * gcc.dg/tm/20100615.c: Adjust for Darwin tm_clone_table section name.
+
 2011-11-22  Iain Sandoe  <iains@gcc.gnu.org>
 
        * gcc.misc-tests/gcov-16.c: Adjust scan-assembler for Darwin.
index 3d9e4684e5d39bc1875a46fea5139cb55b800789..26964d43367cde92a03342cb1672768b7cb8bc1f 100644 (file)
@@ -3,7 +3,8 @@
 
 /* Since the non TM version of new_node() gets optimized away, it
    shouldn't appear in the clone table either.  */
-/* { dg-final { scan-assembler-not "tm_clone_table" } } */
+/* { dg-final { scan-assembler-not "tm_clone_table" { target { ! *-*-darwin*  } } } } */
+/* { dg-final { scan-assembler-not "__DATA,__tm_clone_table" { target *-*-darwin*  } } } */
 
 #define NULL 0
 extern void *malloc (__SIZE_TYPE__);
index cfbb9ca1f2e42e2b9a64947a2d7129c1eb6cb887..2c31af91b9aad10dcc9fc9ef3e7f1d8d2f9939be 100644 (file)
@@ -5961,7 +5961,7 @@ dump_tm_clone_pairs (VEC(tm_alias_pair,heap) *tm_alias_pairs)
 
       if (!switched)
        {
-         switch_to_section (get_named_section (NULL, ".tm_clone_table", 3));
+         switch_to_section (targetm.asm_out.tm_clone_table_section ());
          assemble_align (POINTER_SIZE);
          switched = true;
        }
@@ -5973,6 +5973,14 @@ dump_tm_clone_pairs (VEC(tm_alias_pair,heap) *tm_alias_pairs)
     }
 }
 
+/* Provide a default for the tm_clone_table section.  */
+
+section *
+default_clone_table_section (void)
+{
+  return get_named_section (NULL, ".tm_clone_table", 3);
+}
+
 /* Helper comparison function for qsorting by the DECL_UID stored in
    alias_pair->emitted_diags.  */