aix: Use lcomm for TLS static data.
authorDavid Edelsohn <dje.gcc@gmail.com>
Thu, 11 Mar 2021 16:41:24 +0000 (11:41 -0500)
committerDavid Edelsohn <dje.gcc@gmail.com>
Thu, 11 Mar 2021 21:57:24 +0000 (16:57 -0500)
GCC on AIX generates thread local uninitialized data in the common section,
which could conflict with another module.

This patch changes the code generation to place static uninitialized
thread local data into the local common section specified with .lcomm.
This change also removes the need to create a file-local name for the TBSS
data.

gcc/ChangeLog:

2021-03-11  David Edelsohn  <dje.gcc@gmail.com>

PR target/99094
* config/rs6000/rs6000.c (rs6000_xcoff_file_start): Don't create
xcoff_tbss_section_name.
* config/rs6000/xcoff.h (ASM_OUTPUT_TLS_COMMON): Use .lcomm.
* xcoffout.c (xcoff_tbss_section_name): Delete.
* xcoffout.h (xcoff_tbss_section_name): Delete.

gcc/config/rs6000/rs6000.c
gcc/config/rs6000/xcoff.h
gcc/xcoffout.c
gcc/xcoffout.h

index 35ecf5a..46ddf49 100644 (file)
@@ -21261,8 +21261,6 @@ rs6000_xcoff_file_start (void)
                           main_input_filename, ".ro_");
   rs6000_gen_section_name (&xcoff_tls_data_section_name,
                           main_input_filename, ".tls_");
-  rs6000_gen_section_name (&xcoff_tbss_section_name,
-                          main_input_filename, ".tbss_[UL]");
 
   fputs ("\t.file\t", asm_out_file);
   output_quoted_string (asm_out_file, main_input_filename);
index c016678..cb9aae7 100644 (file)
      } while (0)
 
 #ifdef HAVE_AS_TLS
-#define ASM_OUTPUT_TLS_COMMON(FILE, DECL, NAME, SIZE)  \
-  do { fputs (COMMON_ASM_OP, (FILE));                  \
-       RS6000_OUTPUT_BASENAME ((FILE), (NAME));                \
-       fprintf ((FILE), "[UL]," HOST_WIDE_INT_PRINT_UNSIGNED"\n", \
-       (SIZE));                                                \
+#define ASM_OUTPUT_TLS_COMMON(FILE, DECL, NAME, SIZE)   \
+  do { fputs (LOCAL_COMMON_ASM_OP, (FILE));             \
+       fprintf ((FILE), "%s," HOST_WIDE_INT_PRINT_UNSIGNED",%s[UL],3\n", \
+               (*targetm.strip_name_encoding) (NAME), (SIZE),  \
+               (*targetm.strip_name_encoding) (NAME)); \
   } while (0)
 #endif
 
index d07c2fb..3dbea04 100644 (file)
@@ -66,7 +66,6 @@ char *xcoff_bss_section_name;
 char *xcoff_private_data_section_name;
 char *xcoff_private_rodata_section_name;
 char *xcoff_tls_data_section_name;
-char *xcoff_tbss_section_name;
 char *xcoff_read_only_section_name;
 
 /* Last source file name mentioned in a NOTE insn.  */
index 10a583b..ae6aee0 100644 (file)
@@ -129,7 +129,6 @@ extern char *xcoff_bss_section_name;
 extern char *xcoff_private_data_section_name;
 extern char *xcoff_private_rodata_section_name;
 extern char *xcoff_tls_data_section_name;
-extern char *xcoff_tbss_section_name;
 extern char *xcoff_read_only_section_name;
 
 /* Last source file name mentioned in a NOTE insn.  */