From f88c65f7e37e6842e6ea3c84022a16f9fa9492c8 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 16 Oct 2001 18:39:47 -0700 Subject: [PATCH] configure.in (HAVE_AS_GOTOFF_IN_DATA): New x86 check. * configure.in (HAVE_AS_GOTOFF_IN_DATA): New x86 check. * configure, config.in: Rebuild. * config/i386/i386.c (ix86_output_addr_vec_elt): New. (ix86_output_addr_diff_elt): New. * config/i386/i386.h (ASM_OUTPUT_ADDR_VEC_ELT): Use them. (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. (JUMP_TABLES_IN_TEXT_SECTION): New. * config/i386/i386.md (tablejump): Handle HAVE_AS_GOTOFF_IN_DATA. * config/i386/i386-protos.h: Update. * config/i386/386bsd.h, config/i386/beos-elf.h, config/i386/freebsd-aout.h, config/i386/freebsd.h, config/i386/i386-interix.h, config/i386/i386elf.h, config/i386/linux.h, config/i386/netbsd-elf.h, config/i386/netbsd.h, config/i386/openbsd.h, config/i386/ptx4-i.h, config/i386/rtemself.h, config/i386/sco5.h, config/i386/sysv4.h, config/i386/x86-64.h (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION): Remove. From-SVN: r46303 --- gcc/ChangeLog | 22 ++++++++++++++++++++++ gcc/config.in | 9 ++++++--- gcc/config/i386/386bsd.h | 16 ---------------- gcc/config/i386/beos-elf.h | 11 ----------- gcc/config/i386/freebsd-aout.h | 16 ---------------- gcc/config/i386/freebsd.h | 11 ----------- gcc/config/i386/i386-interix.h | 15 --------------- gcc/config/i386/i386-protos.h | 4 ++++ gcc/config/i386/i386.c | 34 ++++++++++++++++++++++++++++++++++ gcc/config/i386/i386.h | 18 ++++++++++-------- gcc/config/i386/i386.md | 7 +++++++ gcc/config/i386/i386elf.h | 13 ------------- gcc/config/i386/linux.h | 11 ----------- gcc/config/i386/netbsd-elf.h | 10 ---------- gcc/config/i386/netbsd.h | 16 ---------------- gcc/config/i386/openbsd.h | 18 ------------------ gcc/config/i386/ptx4-i.h | 13 ------------- gcc/config/i386/rtemself.h | 11 ----------- gcc/config/i386/sco5.h | 12 ------------ gcc/config/i386/sysv4.h | 13 ------------- gcc/config/i386/x86-64.h | 14 -------------- gcc/configure | 34 +++++++++++++++++++++++++++++++--- gcc/configure.in | 26 ++++++++++++++++++++++++++ 23 files changed, 140 insertions(+), 214 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d3b83a..bd706c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2001-10-16 Richard Henderson + + * configure.in (HAVE_AS_GOTOFF_IN_DATA): New x86 check. + * configure, config.in: Rebuild. + + * config/i386/i386.c (ix86_output_addr_vec_elt): New. + (ix86_output_addr_diff_elt): New. + * config/i386/i386.h (ASM_OUTPUT_ADDR_VEC_ELT): Use them. + (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise. + (JUMP_TABLES_IN_TEXT_SECTION): New. + * config/i386/i386.md (tablejump): Handle HAVE_AS_GOTOFF_IN_DATA. + * config/i386/i386-protos.h: Update. + + * config/i386/386bsd.h, config/i386/beos-elf.h, + config/i386/freebsd-aout.h, config/i386/freebsd.h, + config/i386/i386-interix.h, config/i386/i386elf.h, + config/i386/linux.h, config/i386/netbsd-elf.h, + config/i386/netbsd.h, config/i386/openbsd.h, + config/i386/ptx4-i.h, config/i386/rtemself.h, + config/i386/sco5.h, config/i386/sysv4.h, config/i386/x86-64.h + (ASM_OUTPUT_ADDR_DIFF_ELT, JUMP_TABLES_IN_TEXT_SECTION): Remove. + 2001-10-16 Florian Weimer * stmt.c (expand_asm_operands): Update commentary. diff --git a/gcc/config.in b/gcc/config.in index 1c0238b..46ea801 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -1,4 +1,4 @@ -/* config.in. Generated automatically from configure.in by autoheader 2.13. */ +/* config.in. Generated automatically from configure.in by autoheader. */ /* Define if using alloca.c. */ #undef C_ALLOCA @@ -75,7 +75,7 @@ #undef vfork /* Define if your assembler supports specifying the maximum number - of bytes to skip when using the GAS .p2align command. */ + of bytes to skip when using the GAS .p2align command. */ #undef HAVE_GAS_MAX_SKIP_P2ALIGN /* Define if your assembler supports .balign and .p2align. */ @@ -87,7 +87,7 @@ /* Define to `int' if doesn't define. */ #undef ssize_t -/* Define if cpp should also search $prefix/include. */ +/* Define if cpp should also search $prefix/include. */ #undef PREFIX_INCLUDE_DIR /* Define if you have the __argz_count function. */ @@ -552,6 +552,9 @@ /* Define if your assembler supports offsetable %lo(). */ #undef HAVE_AS_OFFSETABLE_LO10 +/* Define true if the assembler supports '.long foo@GOTOFF'. */ +#undef HAVE_AS_GOTOFF_IN_DATA + /* Define if your assembler supports dwarf2 .file/.loc directives, and preserves file table indicies exactly as given. */ #undef HAVE_AS_DWARF2_DEBUG_LINE diff --git a/gcc/config/i386/386bsd.h b/gcc/config/i386/386bsd.h index 84d1794..a34e6e5 100644 --- a/gcc/config/i386/386bsd.h +++ b/gcc/config/i386/386bsd.h @@ -47,22 +47,6 @@ #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" - -/* The following macros are stolen from i386v4.h */ -/* These have to be defined to get PIC code correct */ - -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 /* Don't default to pcc-struct-return, because gcc is the only compiler, and we want to retain compatibility with older gcc versions. */ diff --git a/gcc/config/i386/beos-elf.h b/gcc/config/i386/beos-elf.h index be948a3..d4c0de4 100644 --- a/gcc/config/i386/beos-elf.h +++ b/gcc/config/i386/beos-elf.h @@ -37,17 +37,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) diff --git a/gcc/config/i386/freebsd-aout.h b/gcc/config/i386/freebsd-aout.h index a2c318f..6dc0a1d 100644 --- a/gcc/config/i386/freebsd-aout.h +++ b/gcc/config/i386/freebsd-aout.h @@ -76,22 +76,6 @@ Boston, MA 02111-1307, USA. */ /* FreeBSD using a.out does not support DWARF2 unwinding mechanisms. */ #define DWARF2_UNWIND_INFO 0 -/* The following macros are stolen from i386v4.h */ -/* These have to be defined to get PIC code correct */ - -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 - /* Don't default to pcc-struct-return, because in FreeBSD we prefer the superior nature of the older gcc way. */ #define DEFAULT_PCC_STRUCT_RETURN 0 diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h index 2d34117..ba15268 100644 --- a/gcc/config/i386/freebsd.h +++ b/gcc/config/i386/freebsd.h @@ -38,17 +38,6 @@ Boston, MA 02111-1307, USA. */ #undef SET_ASM_OP #define SET_ASM_OP "\t.set\t" -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf ((FILE), "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) diff --git a/gcc/config/i386/i386-interix.h b/gcc/config/i386/i386-interix.h index 5b114106..3da0807 100644 --- a/gcc/config/i386/i386-interix.h +++ b/gcc/config/i386/i386-interix.h @@ -227,21 +227,6 @@ Boston, MA 02111-1307, USA. */ } \ while (0) -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. - PE format differs on what PC-relative offsets look like (see - coff_i386_rtype_to_howto), and we need to compensate (by one word) here. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long __GLOBAL_OFFSET_TABLE_+[.-%s%d+4]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 - /* Emit code to check the stack when allocating more that 4000 bytes in one go. */ diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 410b84e..111dc16 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -36,6 +36,9 @@ extern void ix86_expand_epilogue PARAMS ((int)); extern void ix86_output_function_block_profiler PARAMS ((FILE *, int)); extern void ix86_output_block_profiler PARAMS ((FILE *, int)); +extern void ix86_output_addr_vec_elt PARAMS ((FILE *, int)); +extern void ix86_output_addr_diff_elt PARAMS ((FILE *, int, int)); + #ifdef RTX_CODE extern int ix86_aligned_p PARAMS ((rtx)); @@ -94,6 +97,7 @@ extern void print_operand PARAMS ((FILE*, rtx, int)); extern void print_operand_address PARAMS ((FILE*, rtx)); extern void split_di PARAMS ((rtx[], int, rtx[], rtx[])); +extern void split_ti PARAMS ((rtx[], int, rtx[], rtx[])); extern const char *output_387_binary_op PARAMS ((rtx, rtx*)); extern const char *output_fix_trunc PARAMS ((rtx, rtx*)); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 00b28a9..6be389c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -6659,6 +6659,40 @@ ix86_output_block_profiler (file, blockno) break; } } + +void +ix86_output_addr_vec_elt (file, value) + FILE *file; + int value; +{ + const char *directive = ASM_LONG; + + if (TARGET_64BIT) + { +#ifdef ASM_QUAD + directive = ASM_QUAD; +#else + abort (); +#endif + } + + fprintf (file, "%s%s%d\n", directive, LPREFIX, value); +} + +void +ix86_output_addr_diff_elt (file, value, rel) + FILE *file; + int value, rel; +{ + if (TARGET_64BIT) + fprintf (file, "%s%s%d-.+4+(.-%s%d)\n", + ASM_LONG, LPREFIX, value, LPREFIX, rel); + else if (HAVE_AS_GOTOFF_IN_DATA) + fprintf (file, "%s%s%d@GOTOFF\n", ASM_LONG, LPREFIX, value); + else + asm_fprintf (file, "%s%U_GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", + ASM_LONG, LPREFIX, value); +} void ix86_expand_move (mode, operands) diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 75b72d8..49c1b27 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2979,19 +2979,21 @@ do { long l; \ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ asm_fprintf (FILE, "\tpop{l}\t%%e%s\n", reg_names[REGNO]) -/* This is how to output an element of a case-vector that is absolute. - */ +/* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ - fprintf (FILE, "%s%s%d\n", TARGET_64BIT ? ASM_QUAD : ASM_LONG, LPREFIX, VALUE) + ix86_output_addr_vec_elt (FILE, VALUE) -/* This is how to output an element of a case-vector that is relative. - We don't use these on the 386 yet, because the ATT assembler can't do - forward reference the differences. - */ +/* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "%s%s%d-%s%d\n",ASM_LONG, LPREFIX, VALUE, LPREFIX, REL) + ix86_output_addr_diff_elt (FILE, VALUE, REL) + +/* Under some conditions we need jump tables in the text section, because + the assembler cannot handle label differences between sections. */ + +#define JUMP_TABLES_IN_TEXT_SECTION \ + (!TARGET_64BIT && flag_pic && !HAVE_AS_GOTOFF_IN_DATA) /* A C statement that outputs an address constant appropriate to for DWARF debugging. */ diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c02702a..e12c4bd 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -13123,6 +13123,13 @@ gen_rtx_LABEL_REF (Pmode, operands[1]), NULL_RTX, 0, OPTAB_DIRECT); + else if (HAVE_AS_GOTOFF_IN_DATA) + { + operands[0] = expand_simple_binop (Pmode, PLUS, operands[0], + pic_offset_table_rtx, NULL_RTX, + 1, OPTAB_DIRECT); + current_function_uses_pic_offset_table = 1; + } else { operands[0] = expand_simple_binop (Pmode, MINUS, pic_offset_table_rtx, diff --git a/gcc/config/i386/i386elf.h b/gcc/config/i386/i386elf.h index 34ceed5..2f47573 100644 --- a/gcc/config/i386/i386elf.h +++ b/gcc/config/i386/i386elf.h @@ -156,19 +156,6 @@ do { long value[3]; \ } \ while (0) -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 - #define LOCAL_LABEL_PREFIX "." /* Switch into a generic section. */ diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index c80a3fe..9ace75f 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -43,17 +43,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) diff --git a/gcc/config/i386/netbsd-elf.h b/gcc/config/i386/netbsd-elf.h index 48d8129..e37b1c1 100644 --- a/gcc/config/i386/netbsd-elf.h +++ b/gcc/config/i386/netbsd-elf.h @@ -168,16 +168,6 @@ Boston, MA 02111-1307, USA. */ } #endif -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf ((FILE), "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - /* * We always use gas here, so we don't worry about ECOFF assembler problems. */ diff --git a/gcc/config/i386/netbsd.h b/gcc/config/i386/netbsd.h index 8ff61bc..8f5ba20 100644 --- a/gcc/config/i386/netbsd.h +++ b/gcc/config/i386/netbsd.h @@ -35,22 +35,6 @@ #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" - -/* The following macros are stolen from i386v4.h */ -/* These have to be defined to get PIC code correct */ - -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 /* Don't default to pcc-struct-return, because gcc is the only compiler, and we want to retain compatibility with older gcc versions. */ diff --git a/gcc/config/i386/openbsd.h b/gcc/config/i386/openbsd.h index 4705775..a07ee15 100644 --- a/gcc/config/i386/openbsd.h +++ b/gcc/config/i386/openbsd.h @@ -59,24 +59,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" -/* The following macros were originally stolen from i386v4.h. - These have to be defined to get PIC code correct. */ - -/* Assembler format: dispatch tables. */ - -/* How to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Assembler format: sections. */ - -/* Indicate when jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - /* Stack & calling: aggregate returns. */ /* Don't default to pcc-struct-return, because gcc is the only compiler, and diff --git a/gcc/config/i386/ptx4-i.h b/gcc/config/i386/ptx4-i.h index 735408e..ad2df8e 100644 --- a/gcc/config/i386/ptx4-i.h +++ b/gcc/config/i386/ptx4-i.h @@ -150,16 +150,3 @@ do { long value[3]; \ fprintf ((FILE), "\n"); \ } \ while (0) - -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION 1 diff --git a/gcc/config/i386/rtemself.h b/gcc/config/i386/rtemself.h index 003f248..ce59e7f 100644 --- a/gcc/config/i386/rtemself.h +++ b/gcc/config/i386/rtemself.h @@ -38,17 +38,6 @@ Boston, MA 02111-1307, USA. */ #undef DEFAULT_PCC_STRUCT_RETURN #define DEFAULT_PCC_STRUCT_RETURN 1 -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h index 16d5fcf..b406512 100644 --- a/gcc/config/i386/sco5.h +++ b/gcc/config/i386/sco5.h @@ -237,15 +237,6 @@ do { \ sprintf (LABEL, ".%s%d", (PREFIX), (NUM)); \ } while (0) -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ -do { \ - if (TARGET_ELF) \ - fprintf (FILE, "%s_GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", ASM_LONG, LPREFIX, VALUE); \ - else \ - fprintf (FILE, "%s%s%d-%s%d\n", ASM_LONG, LPREFIX,VALUE,LPREFIX,REL); \ -} while (0) - #undef ASM_OUTPUT_ALIGNED_COMMON #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ do { \ @@ -533,9 +524,6 @@ init_section () \ ((TARGET_ELF) ? 0 : \ (current_function_calls_setjmp || current_function_calls_longjmp)) -#undef JUMP_TABLES_IN_TEXT_SECTION -#define JUMP_TABLES_IN_TEXT_SECTION (TARGET_ELF && flag_pic) - #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX \ ((TARGET_ELF) ? "" : ".") diff --git a/gcc/config/i386/sysv4.h b/gcc/config/i386/sysv4.h index f56d583..56cd238 100644 --- a/gcc/config/i386/sysv4.h +++ b/gcc/config/i386/sysv4.h @@ -159,19 +159,6 @@ do { long value[3]; \ } \ while (0) -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ - -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) - /* A C statement (sans semicolon) to output to the stdio stream FILE the assembler definition of uninitialized global DECL named NAME whose size is SIZE bytes and alignment is ALIGN bytes. diff --git a/gcc/config/i386/x86-64.h b/gcc/config/i386/x86-64.h index baf5b24..8c9912d 100644 --- a/gcc/config/i386/x86-64.h +++ b/gcc/config/i386/x86-64.h @@ -27,20 +27,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_COMMENT_START #define ASM_COMMENT_START "#" -/* This is how to output an element of a case-vector that is relative. - This is only used for PIC code. See comments by the `casesi' insn in - i386.md for an explanation of the expression this outputs. */ -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - if (TARGET_64BIT) \ - fprintf (FILE, "\t.long %s%d-.+4+(.-%s%d)\n", LPREFIX, VALUE, LPREFIX, REL); \ - else \ - fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) - -/* Indicate that jump tables go in the text section. This is - necessary when compiling PIC code. */ -#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic && !TARGET_64BIT) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) diff --git a/gcc/configure b/gcc/configure index 413db87..e177db9 100755 --- a/gcc/configure +++ b/gcc/configure @@ -2057,7 +2057,7 @@ EOF fi # Find some useful tools -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -7487,11 +7487,39 @@ EOF fi echo "$ac_t""$gcc_cv_as_instructions" 1>&6 + + echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6 +echo "configure:7493: checking assembler GOTOFF in data directives" >&5 + gcc_cv_as_gotoff_in_data=no + if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x + then + if test "$gcc_cv_gas_major_version" -eq 2 \ + -a "$gcc_cv_gas_minor_version" -ge 11 \ + -o "$gcc_cv_gas_major_version" -gt 2; then + gcc_cv_as_gotoff_in_data=yes + fi + elif test x$gcc_cv_as != x; then + cat > conftest.s < /dev/null 2>&1; then + gcc_cv_as_gotoff_in_data=yes + fi + fi + cat >> confdefs.h <&6 ;; esac echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6 -echo "configure:7495: checking assembler dwarf2 debug_line support" >&5 +echo "configure:7523: checking assembler dwarf2 debug_line support" >&5 gcc_cv_as_dwarf2_debug_line=no # ??? Not all targets support dwarf2 debug_line, even within a version # of gas. Moreover, we need to emit a valid instruction to trigger any @@ -7683,7 +7711,7 @@ fi echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 -echo "configure:7687: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo "configure:7715: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" diff --git a/gcc/configure.in b/gcc/configure.in index 6ce9d2c..babc720 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -1631,6 +1631,32 @@ changequote([,])dnl AC_DEFINE_UNQUOTED(HAVE_GAS_`echo "$gcc_cv_as_instructions" | sed -e 's/ $//' | tr '[a-z ]' '[A-Z_]'`) fi AC_MSG_RESULT($gcc_cv_as_instructions) + + AC_MSG_CHECKING(assembler GOTOFF in data directives) + gcc_cv_as_gotoff_in_data=no + if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x + then + if test "$gcc_cv_gas_major_version" -eq 2 \ + -a "$gcc_cv_gas_minor_version" -ge 11 \ + -o "$gcc_cv_gas_major_version" -gt 2; then + gcc_cv_as_gotoff_in_data=yes + fi + elif test x$gcc_cv_as != x; then + cat > conftest.s < /dev/null 2>&1; then + gcc_cv_as_gotoff_in_data=yes + fi + fi + AC_DEFINE_UNQUOTED(HAVE_AS_GOTOFF_IN_DATA, + [`if test $gcc_cv_as_gotoff_in_data = yes; then echo 1; else echo 0; fi`], + [Define true if the assembler supports '.long foo@GOTOFF'.]) + AC_MSG_RESULT($gcc_cv_as_gotoff_in_data) ;; esac -- 2.7.4