[gcc/devel/omp/gcc-9] [Darwin] Amend section for constants with relocations.

Tobias Burnus burnus@gcc.gnu.org
Thu Mar 5 14:10:00 GMT 2020


https://gcc.gnu.org/g:5b236c5474161ec727697a4d64cf9d786697a9b4

commit 5b236c5474161ec727697a4d64cf9d786697a9b4
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Fri Oct 18 08:42:41 2019 +0000

    [Darwin] Amend section for constants with relocations.
    
    Darwin's linker doesn't like text section relocations (they require special
    enabling).  The Fortran FE, at least, seems to generate cases where the
    initialiser for a pointer constant can need a relocation.  We can handle
    this by special-casing SECCAT_RODATA when the relocation is present by
    placing the constant in the .const_data section.
    
    gcc/
    
    2019-10-18  Iain Sandoe  <iain@sandoe.co.uk>
    
    	Backport from mainline
    	2019-10-05  Iain Sandoe  <iain@sandoe.co.uk>
    
    	PR target/59888
    	* config/darwin.c (darwin_rodata_section): Add relocation flag,
    	choose const_data section for constants with relocations.
    	(machopic_select_section): Pass relocation flag to
    	darwin_rodata_section ().
    
    From-SVN: r277145

Diff:
---
 gcc/ChangeLog       | 11 +++++++++++
 gcc/config/darwin.c |  7 ++++---
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ae17be5..9179ad4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,17 @@
 2019-10-18  Iain Sandoe  <iain@sandoe.co.uk>
 
 	Backport from mainline
+	2019-10-05  Iain Sandoe  <iain@sandoe.co.uk>
+
+	PR target/59888
+	* config/darwin.c (darwin_rodata_section): Add relocation flag,
+	choose const_data section for constants with relocations.
+	(machopic_select_section): Pass relocation flag to
+	darwin_rodata_section ().
+
+2019-10-18  Iain Sandoe  <iain@sandoe.co.uk>
+
+	Backport from mainline
 	2019-09-21  Iain Sandoe  <iain@sandoe.co.uk>
 
 	* config/darwin.c (machopic_legitimize_pic_address): Check
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 5e0110c..55759df 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -1252,12 +1252,13 @@ darwin_mark_decl_preserved (const char *name)
 }
 
 static section *
-darwin_rodata_section (int use_coal, bool zsize)
+darwin_rodata_section (int use_coal, bool zsize, int reloc)
 {
   return (use_coal
 	  ? darwin_sections[const_coal_section]
 	  : (zsize ? darwin_sections[zobj_const_section]
-		   : darwin_sections[const_section]));
+		   : reloc ? darwin_sections[const_data_section]
+			   : darwin_sections[const_section]));
 }
 
 static section *
@@ -1550,7 +1551,7 @@ machopic_select_section (tree decl,
 
     case SECCAT_RODATA:
     case SECCAT_SRODATA:
-      base_section = darwin_rodata_section (use_coal, zsize);
+      base_section = darwin_rodata_section (use_coal, zsize, reloc);
       break;
 
     case SECCAT_RODATA_MERGE_STR:



More information about the Gcc-cvs mailing list