diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b691ac991bde..96883830929e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2020-03-22 Iain Sandoe + + * config/i386/darwin.h (JUMP_TABLES_IN_TEXT_SECTION): Remove + references to Darwin. + * config/i386/i386.h (JUMP_TABLES_IN_TEXT_SECTION): Define this + unconditionally and comment on why. + 2020-03-21 Iain Sandoe * config/darwin.c (darwin_mergeable_constant_section): Collect diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index 1b94cb88c985..5faa1f40089c 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -239,6 +239,16 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_ASM_OUTPUT_IDENT #define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive +/* We always want jump tables in the text section: + * for PIC code, we need the subtracted symbol to be defined at + assembly-time. + * for mdynamic-no-pic, we cannot support jump tables in the .const + section for weak functions, this looks to ld64 like direct access + to the weak symbol from an anonymous atom. */ + +#undef JUMP_TABLES_IN_TEXT_SECTION +#define JUMP_TABLES_IN_TEXT_SECTION 1 + /* Darwin profiling -- call mcount. If we need a stub, then we unconditionally mark it as used. */ #undef FUNCTION_PROFILER diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 98235f75a9e6..b8dddfc1594b 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2285,11 +2285,10 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; /* Under some conditions we need jump tables in the text section, because the assembler cannot handle label differences between - sections. This is the case for x86_64 on Mach-O for example. */ + sections. */ #define JUMP_TABLES_IN_TEXT_SECTION \ - (flag_pic && ((TARGET_MACHO && TARGET_64BIT) \ - || (!TARGET_64BIT && !HAVE_AS_GOTOFF_IN_DATA))) + (flag_pic && !(TARGET_64BIT || HAVE_AS_GOTOFF_IN_DATA)) /* Switch to init or fini section via SECTION_OP, emit a call to FUNC, and switch back. For x86 we do this only to save a few bytes that