Patchwork make it possible for the target to rename ".tm_clone_table"

login
register
mail settings
Submitter IainS
Date Nov. 20, 2011, 3:34 p.m.
Message ID <684BE489-AF8F-4110-8C23-4A362504B2FA@sandoe-acoustics.co.uk>
Download mbox | patch
Permalink /patch/126653/
State New
Headers show

Comments

IainS - Nov. 20, 2011, 3:34 p.m.
Hi Richard,

On 19 Nov 2011, at 18:43, Richard Henderson wrote:

> On 11/19/2011 02:04 AM, Iain Sandoe wrote:
>> It should be possible for Rainer to define
>> TARGET_ASM_TM_CLONE_TABLE_SECTION_NAME to NULL, and have varasm use
>> the normal data section for tm_clone_table sections.    One might
>> wish to re-adjust testsuite/gcc.dg/tm/20100615.c if that is done.
>
> Well, not really.  OSF is going to need an extension to collect2 in
> order to create a single table, or changes to other bits of the
> compiler to invoke _ITM_registerTMCloneTable for each object file's
> table.
>
> ... actually, there seems to be some sort of merge error.  I don't
> see the crtstuff.c changes that called _ITM_registerTMCloneTable in
> the first place.

This might go some way to explaining my confusion  :-)
.. I did try to find any other reference to .tm_clone_table in the  
code and failed ...

(varasm.c and the testsuite entry are the only two refs I can see).

> I'd prefer we return a section object instead.  I.e. pull the
> call to get_named_section into the hook as well.

as per attached?
Iain


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.
	* 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.
Richard Henderson - Nov. 21, 2011, 12:17 a.m.
On 11/20/2011 05:34 AM, Iain Sandoe wrote:
> 
> 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.
>     * 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.

Ok.


r~
Pedro Alves - Nov. 21, 2011, 11:47 a.m.
On Sunday 20 November 2011 15:34:54, Iain Sandoe wrote:
> +#undef  TARGET_ASM_TM_CLONE_TABLE_SECTION_NAME
> +#define TARGET_ASM_TM_CLONE_TABLE_SECTION darwin_tm_clone_table_section

#undef  TARGET_ASM_TM_CLONE_TABLE_SECTION

probably.

Patch

Index: gcc/varasm.c
===================================================================
--- gcc/varasm.c	(revision 181530)
+++ gcc/varasm.c	(working copy)
@@ -5961,7 +5961,7 @@  dump_tm_clone_pairs (VEC(tm_alias_pair,heap) *tm_a
 
       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_a
     }
 }
 
+/* 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.  */
 
Index: gcc/target.def
===================================================================
--- gcc/target.def	(revision 181530)
+++ gcc/target.def	(working copy)
@@ -305,6 +305,13 @@  section names for mergeable constant data.  Define
 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: gcc/config/darwin.h
===================================================================
--- gcc/config/darwin.h	(revision 181530)
+++ gcc/config/darwin.h	(working copy)
@@ -697,6 +697,10 @@  extern GTY(()) section * darwin_sections[NUM_DARWI
 #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_NAME
+#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: gcc/config/darwin.c
===================================================================
--- gcc/config/darwin.c	(revision 181530)
+++ gcc/config/darwin.c	(working copy)
@@ -1265,6 +1265,12 @@  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", 3);
+}
+
 int
 machopic_reloc_rw_mask (void)
 {
Index: gcc/config/darwin-protos.h
===================================================================
--- gcc/config/darwin-protos.h	(revision 181530)
+++ gcc/config/darwin-protos.h	(working copy)
@@ -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: gcc/doc/tm.texi.in
===================================================================
--- gcc/doc/tm.texi.in	(revision 181530)
+++ gcc/doc/tm.texi.in	(working copy)
@@ -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: gcc/testsuite/gcc.dg/tm/20100615.c
===================================================================
--- gcc/testsuite/gcc.dg/tm/20100615.c	(revision 181530)
+++ gcc/testsuite/gcc.dg/tm/20100615.c	(working copy)
@@ -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__);