summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-05-22 00:01:23 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-05-22 00:01:23 +0000
commit6b5be7f827690496b8c08b919d6bf027a2588508 (patch)
tree153516bd040cf0c86fb3a0f124e0631e29761483 /gcc
parent3bcd23c4f5baa294317ec9fcdff4d7eb596ca969 (diff)
downloadgcc-6b5be7f827690496b8c08b919d6bf027a2588508.tar.gz
* final.c (JUMP_TABLES_IN_TEXT_SECTION): Provide a default value.
(shorten_branches, final_scan_insn): Test value of JUMP_TABLES_IN_TEXT_SECTION instead of just testing whether it is defined. * tm.texi (JUMP_TABLES_IN_TEXT_SECTION): Corresponding changes. * arm/coff.h: Define JUMP_TABLES_IN_TEXT_SECTION to 1. coff.h: Likewise. * i386/386bsd.h: Likewise. * i386/freebsd-elf.h: Likewise. * i386/freebsd.h: Likewise. * i386/netbsd.h: Likewise. * i386/ptx4-i.h: Likewise. * i386/sysv4.h: Likewise. * pa/pa.h: Likewise. * rs6000/linux.h: Likewise. * rs6000/rs6000.h: Likewise. * sh/sh.h: Likewise. * sparc/sp64-elf.h: Likewise. * v850/v850.h: Likewise. * rs6000/sysv4.h: Define JUMP_TABLES_IN_TEXT_SECTION to 0. * i386/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION to (flag_pic). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@19940 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/config/arm/coff.h4
-rw-r--r--gcc/config/arm/tcoff.h2
-rw-r--r--gcc/config/i386/386bsd.h2
-rw-r--r--gcc/config/i386/freebsd-elf.h2
-rw-r--r--gcc/config/i386/freebsd.h2
-rw-r--r--gcc/config/i386/linux.h2
-rw-r--r--gcc/config/i386/netbsd.h2
-rw-r--r--gcc/config/i386/ptx4-i.h2
-rw-r--r--gcc/config/i386/sysv4.h2
-rw-r--r--gcc/config/pa/pa.h2
-rw-r--r--gcc/config/rs6000/linux.h2
-rw-r--r--gcc/config/rs6000/rs6000.h2
-rw-r--r--gcc/config/rs6000/sysv4.h1
-rw-r--r--gcc/config/sh/sh.h2
-rw-r--r--gcc/config/sparc/sp64-elf.h2
-rw-r--r--gcc/config/v850/v850.h2
-rw-r--r--gcc/final.c88
-rw-r--r--gcc/tm.texi7
19 files changed, 99 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8e88702c367..a4c79291d3d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,27 @@
+Fri May 22 00:57:00 1998 Bernd Schmidt (crux@pool.informatik.rwth-aachen.de>
+
+ * final.c (JUMP_TABLES_IN_TEXT_SECTION): Provide a default value.
+ (shorten_branches, final_scan_insn): Test value of
+ JUMP_TABLES_IN_TEXT_SECTION instead of just testing whether it
+ is defined.
+ * tm.texi (JUMP_TABLES_IN_TEXT_SECTION): Corresponding changes.
+ * arm/coff.h: Define JUMP_TABLES_IN_TEXT_SECTION to 1.
+ coff.h: Likewise.
+ * i386/386bsd.h: Likewise.
+ * i386/freebsd-elf.h: Likewise.
+ * i386/freebsd.h: Likewise.
+ * i386/netbsd.h: Likewise.
+ * i386/ptx4-i.h: Likewise.
+ * i386/sysv4.h: Likewise.
+ * pa/pa.h: Likewise.
+ * rs6000/linux.h: Likewise.
+ * rs6000/rs6000.h: Likewise.
+ * sh/sh.h: Likewise.
+ * sparc/sp64-elf.h: Likewise.
+ * v850/v850.h: Likewise.
+ * rs6000/sysv4.h: Define JUMP_TABLES_IN_TEXT_SECTION to 0.
+ * i386/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION to (flag_pic).
+
Thu May 21 19:50:13 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* regmove.c (gen_add3_insn): New function.
diff --git a/gcc/config/arm/coff.h b/gcc/config/arm/coff.h
index abba7c6b787..4e568cb7941 100644
--- a/gcc/config/arm/coff.h
+++ b/gcc/config/arm/coff.h
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
point the default. NOT --nfp! --with{enable?} is supposed to replace it
(right?), so let's stop using it. */
#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT /*+ TARGET_CPU_DEFAULT*/)
+#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
/* ??? Is a big-endian default intended to be supported? */
#if 0 /*TARGET_CPU_DEFAULT & ARM_FLAG_BIG_END*/
@@ -104,7 +104,7 @@ do { \
/* Define this macro if jump tables (for `tablejump' insns) should be
output in the text section, along with the assembler instructions.
Otherwise, the readonly data section is used. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
#undef READONLY_DATA_SECTION
#define READONLY_DATA_SECTION rdata_section
diff --git a/gcc/config/arm/tcoff.h b/gcc/config/arm/tcoff.h
index 5fabe5dd555..fe047e7cd27 100644
--- a/gcc/config/arm/tcoff.h
+++ b/gcc/config/arm/tcoff.h
@@ -87,7 +87,7 @@ do { \
/* Define this macro if jump tables (for `tablejump' insns) should be
output in the text section, along with the assembler instructions.
Otherwise, the readonly data section is used. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
#undef READONLY_DATA_SECTION
#define READONLY_DATA_SECTION rdata_section
diff --git a/gcc/config/i386/386bsd.h b/gcc/config/i386/386bsd.h
index 25994376aea..7962321325c 100644
--- a/gcc/config/i386/386bsd.h
+++ b/gcc/config/i386/386bsd.h
@@ -69,7 +69,7 @@
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#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/freebsd-elf.h b/gcc/config/i386/freebsd-elf.h
index 196a76a18f9..6f99a886e87 100644
--- a/gcc/config/i386/freebsd-elf.h
+++ b/gcc/config/i386/freebsd-elf.h
@@ -38,7 +38,7 @@ Boston, MA 02111-1307, USA. */
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* Copy this from the svr4 specifications... */
/* Define the register numbers to be used in Dwarf debugging information.
diff --git a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h
index d5deacdc348..40f703ec6c6 100644
--- a/gcc/config/i386/freebsd.h
+++ b/gcc/config/i386/freebsd.h
@@ -84,7 +84,7 @@ Boston, MA 02111-1307, USA. */
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#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/linux.h b/gcc/config/i386/linux.h
index e1780156454..50341bd4ef1 100644
--- a/gcc/config/i386/linux.h
+++ b/gcc/config/i386/linux.h
@@ -49,7 +49,7 @@ Boston, MA 02111-1307, USA. */
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
/* Copy this from the svr4 specifications... */
/* Define the register numbers to be used in Dwarf debugging information.
diff --git a/gcc/config/i386/netbsd.h b/gcc/config/i386/netbsd.h
index c7aeddf6605..5978aec5c4b 100644
--- a/gcc/config/i386/netbsd.h
+++ b/gcc/config/i386/netbsd.h
@@ -50,7 +50,7 @@
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#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/ptx4-i.h b/gcc/config/i386/ptx4-i.h
index 36836f6ed30..1537b4a4cee 100644
--- a/gcc/config/i386/ptx4-i.h
+++ b/gcc/config/i386/ptx4-i.h
@@ -244,4 +244,4 @@ do { long value[3]; \
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
diff --git a/gcc/config/i386/sysv4.h b/gcc/config/i386/sysv4.h
index 3a72cdd7dcf..0127d69cbb6 100644
--- a/gcc/config/i386/sysv4.h
+++ b/gcc/config/i386/sysv4.h
@@ -242,7 +242,7 @@ do { long value[3]; \
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* A C statement (sans semicolon) to output to the stdio stream
FILE the assembler definition of uninitialized global DECL named
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 6f9c9be86b1..5e506a4f410 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -2321,7 +2321,7 @@ DTORS_SECTION_FUNCTION
fprintf (FILE, "\tb L$%04d\n\tnop\n", VALUE)
/* Jump tables are executable code and live in the TEXT section on the PA. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* This is how to output an element of a case-vector that is relative.
This must be defined correctly as it is used when generating PIC code.
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index 21d9bc8dbfb..1843fb82faf 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -69,4 +69,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#endif
#undef JUMP_TABLES_IN_TEXT_SECTION
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 7ac3cf60c9c..66756a0b975 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2375,7 +2375,7 @@ extern int rs6000_trunc_used;
/* Indicate that jump tables go in the text section. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* Define the routines to implement these extra sections. */
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 9cbb597b8b5..1a7439a3383 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -331,6 +331,7 @@ do { \
/* Put jump tables in read-only memory, rather than in .text. */
#undef JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 0
/* Disable AIX-ism that disables turning -B into -L if the argument specifies a
relative file name. This breaks setting GCC_EXEC_PREFIX to D:\path under
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index dce9acb1acd..5c347fcdff5 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -1518,7 +1518,7 @@ dtors_section() \
/* Define this so that jump tables go in same section as the current function,
which could be text or it could be a user defined section. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* A C statement to output something to the assembler file to switch to section
NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
diff --git a/gcc/config/sparc/sp64-elf.h b/gcc/config/sparc/sp64-elf.h
index a6f3e72c1df..24828664496 100644
--- a/gcc/config/sparc/sp64-elf.h
+++ b/gcc/config/sparc/sp64-elf.h
@@ -104,7 +104,7 @@ crtbegin.o%s \
tables from other label refs (when we need to). */
/* ??? Revisit this. */
#undef JUMP_TABLES_IN_TEXT_SECTION
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* System V Release 4 uses DWARF debugging info.
GDB doesn't support 64 bit stabs yet and the desired debug format is DWARF
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 0161379f409..2ccbe98925b 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -1326,7 +1326,7 @@ do { char dstr[30]; \
/* The switch instruction requires that the jump table immediately follow
it. */
-#define JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 1
/* svr4.h defines this assuming that 4 byte alignment is required. */
#undef ASM_OUTPUT_BEFORE_CASE_LABEL
diff --git a/gcc/final.c b/gcc/final.c
index f6f6670f174..d30e5b24d81 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -130,6 +130,10 @@ Boston, MA 02111-1307, USA. */
#define IS_ASM_LOGICAL_LINE_SEPARATOR(C) ((C) == ';')
#endif
+#ifndef JUMP_TABLES_IN_TEXT_SECTION
+#define JUMP_TABLES_IN_TEXT_SECTION 0
+#endif
+
/* Nonzero means this function is a leaf function, with no function calls.
This variable exists to be examined in FUNCTION_PROLOGUE
and FUNCTION_EPILOGUE. Always zero, unless set by some action. */
@@ -1062,23 +1066,27 @@ shorten_branches (first)
max_skip = LABEL_ALIGN_MAX_SKIP;
}
next = NEXT_INSN (insn);
-/* ADDR_VECs only take room if read-only data goes into the text section. */
-#if !defined(READONLY_DATA_SECTION) || defined(JUMP_TABLES_IN_TEXT_SECTION)
- if (next && GET_CODE (next) == JUMP_INSN)
- {
- rtx nextbody = PATTERN (next);
- if (GET_CODE (nextbody) == ADDR_VEC
- || GET_CODE (nextbody) == ADDR_DIFF_VEC)
- {
- log = ADDR_VEC_ALIGN (next);
- if (max_log < log)
- {
- max_log = log;
- max_skip = LABEL_ALIGN_MAX_SKIP;
- }
- }
- }
+ /* ADDR_VECs only take room if read-only data goes into the text
+ section. */
+ if (JUMP_TABLES_IN_TEXT_SECTION
+#if !defined(READONLY_DATA_SECTION)
+ || 1
#endif
+ )
+ if (next && GET_CODE (next) == JUMP_INSN)
+ {
+ rtx nextbody = PATTERN (next);
+ if (GET_CODE (nextbody) == ADDR_VEC
+ || GET_CODE (nextbody) == ADDR_DIFF_VEC)
+ {
+ log = ADDR_VEC_ALIGN (next);
+ if (max_log < log)
+ {
+ max_log = log;
+ max_skip = LABEL_ALIGN_MAX_SKIP;
+ }
+ }
+ }
LABEL_TO_ALIGNMENT (insn) = max_log;
LABEL_TO_MAX_SKIP (insn) = max_skip;
max_log = 0;
@@ -1254,11 +1262,15 @@ shorten_branches (first)
{
/* This only takes room if read-only data goes into the text
section. */
-#if !defined(READONLY_DATA_SECTION) || defined(JUMP_TABLES_IN_TEXT_SECTION)
- insn_lengths[uid] = (XVECLEN (body, GET_CODE (body) == ADDR_DIFF_VEC)
- * GET_MODE_SIZE (GET_MODE (body)));
+ if (JUMP_TABLES_IN_TEXT_SECTION
+#if !defined(READONLY_DATA_SECTION)
+ || 1
+#endif
+ )
+ insn_lengths[uid] = (XVECLEN (body,
+ GET_CODE (body) == ADDR_DIFF_VEC)
+ * GET_MODE_SIZE (GET_MODE (body)));
/* Alignment is handled by ADDR_VEC_ALIGN. */
-#endif
}
else if (asm_noperands (body) >= 0)
insn_lengths[uid] = asm_insn_count (body) * insn_default_length (insn);
@@ -1449,13 +1461,19 @@ shorten_branches (first)
PUT_MODE (body, CASE_VECTOR_SHORTEN_MODE (min_addr - rel_addr,
max_addr - rel_addr,
body));
-#if !defined(READONLY_DATA_SECTION) || defined(JUMP_TABLES_IN_TEXT_SECTION)
- insn_lengths[uid]
- = (XVECLEN (body, 1) * GET_MODE_SIZE (GET_MODE (body)));
- insn_current_address += insn_lengths[uid];
- if (insn_lengths[uid] != old_length)
- something_changed = 1;
+ if (JUMP_TABLES_IN_TEXT_SECTION
+#if !defined(READONLY_DATA_SECTION)
+ || 1
#endif
+ )
+ {
+ insn_lengths[uid]
+ = (XVECLEN (body, 1) * GET_MODE_SIZE (GET_MODE (body)));
+ insn_current_address += insn_lengths[uid];
+ if (insn_lengths[uid] != old_length)
+ something_changed = 1;
+ }
+
continue;
}
#endif /* CASE_VECTOR_SHORTEN_MODE */
@@ -2307,16 +2325,18 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
if (GET_CODE (nextbody) == ADDR_VEC
|| GET_CODE (nextbody) == ADDR_DIFF_VEC)
{
-#ifndef JUMP_TABLES_IN_TEXT_SECTION
- readonly_data_section ();
+ if (! JUMP_TABLES_IN_TEXT_SECTION)
+ {
+ readonly_data_section ();
#ifdef READONLY_DATA_SECTION
- ASM_OUTPUT_ALIGN (file,
- exact_log2 (BIGGEST_ALIGNMENT
- / BITS_PER_UNIT));
+ ASM_OUTPUT_ALIGN (file,
+ exact_log2 (BIGGEST_ALIGNMENT
+ / BITS_PER_UNIT));
#endif /* READONLY_DATA_SECTION */
-#else /* JUMP_TABLES_IN_TEXT_SECTION */
- function_section (current_function_decl);
-#endif /* JUMP_TABLES_IN_TEXT_SECTION */
+ }
+ else
+ function_section (current_function_decl);
+
#ifdef ASM_OUTPUT_CASE_LABEL
ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn),
NEXT_INSN (insn));
diff --git a/gcc/tm.texi b/gcc/tm.texi
index 120b497dbdb..0968754821a 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -4826,9 +4826,10 @@ data section.
@findex JUMP_TABLES_IN_TEXT_SECTION
@item JUMP_TABLES_IN_TEXT_SECTION
-Define this macro if jump tables (for @code{tablejump} insns) should be
-output in the text section, along with the assembler instructions.
-Otherwise, the readonly data section is used.
+Define this macro to be an expression with a non-zero value if jump
+tables (for @code{tablejump} insns) should be output in the text
+section, along with the assembler instructions. Otherwise, the
+readonly data section is used.
This macro is irrelevant if there is no separate readonly data section.