From 0f700e89f7b95faba1dffc5b836f58c0a97e3149 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Tue, 29 Oct 2019 20:05:05 +0000 Subject: [PATCH] [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. 2019-10-29 Iain Sandoe Backport from mainline 2019-10-05 Iain Sandoe 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: r277584 --- gcc/ChangeLog | 13 ++++++++++++- gcc/config/darwin.c | 7 ++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 047de28e51d6..86aef482247a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,15 @@ -2019-10-18 Iain Sandoe +2019-10-29 Iain Sandoe + + Backport from mainline + 2019-10-05 Iain Sandoe + + 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-29 Iain Sandoe Backport from mainline 2019-09-21 Iain Sandoe diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 17beaf01cf59..7d89fd8bac1d 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -1255,12 +1255,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 * @@ -1553,7 +1554,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: -- 2.47.2