]> gcc.gnu.org Git - gcc.git/commitdiff
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 35ecf5ac9ab76f1e3d6f6576d165c376697a724b..46ddf49d34bebe526bba7ad621571fbb1d427da8 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 c01667809a515cc6cf5c40a569c769a0b62ae9a6..cb9aae753b2b6ca1cf81d89c5129ec0e2bd8a102 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 d07c2fba44ebcc68695920ffc28deedc4803d788..3dbea04ea5d21569ff6b3f609844fad4f6bab806 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 10a583b48e06d338375af8878300feb9246059c2..ae6aee0af2abb24c18a706761854ac131518dcf3 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.  */
This page took 0.088414 seconds and 5 git commands to generate.