aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2004-12-02 02:21:28 +0000
committerAlan Modra <amodra@gcc.gnu.org>2004-12-02 12:51:28 +1030
commit84dcde01bdb678f5fca3a237d798fe9d7b297215 (patch)
tree805f03fd9d276e15def70e8fcc1492fd825b99e3 /gcc
parent1270d6334aa627f82d5b00840f10381fc72b8b82 (diff)
downloadgcc-84dcde01bdb678f5fca3a237d798fe9d7b297215.zip
gcc-84dcde01bdb678f5fca3a237d798fe9d7b297215.tar.gz
gcc-84dcde01bdb678f5fca3a237d798fe9d7b297215.tar.bz2
re PR target/16952 (GCC for powerpc cross target with -mrelocatable reports error)
PR target/16952 * config/rs6000/rs6000.c (rs6000_assemble_integer): Replace #ifdef RELOCATABLE_NEEDS_FIXUP with if. * config/rs6000/linux.h (RELOCATABLE_NEEDS_FIXUP): Define in terms of target_flags_explicit. * config/rs6000/linux64.h (RELOCATABLE_NEEDS_FIXUP): Ditto for biarch case. Define as 0 for non-biarch. From-SVN: r91605
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/rs6000/linux.h5
-rw-r--r--gcc/config/rs6000/linux64.h12
-rw-r--r--gcc/config/rs6000/rs6000.c8
4 files changed, 26 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 132b1e1..88593cf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2004-12-02 Alan Modra <amodra@bigpond.net.au>
+
+ PR target/16952
+ * config/rs6000/rs6000.c (rs6000_assemble_integer): Replace
+ #ifdef RELOCATABLE_NEEDS_FIXUP with if.
+ * config/rs6000/linux.h (RELOCATABLE_NEEDS_FIXUP): Define in terms
+ of target_flags_explicit.
+ * config/rs6000/linux64.h (RELOCATABLE_NEEDS_FIXUP): Ditto for biarch
+ case. Define as 0 for non-biarch.
+
2004-12-01 Zack Weinberg <zack@codesourcery.com>
* config/rs6000/t-aix43, config/rs6000/t-aix52 (SHLIB_LINK):
diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h
index d4ce105..e35f033 100644
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -99,8 +99,11 @@
#undef TARGET_64BIT
#define TARGET_64BIT 0
-/* We don't need to generate entries in .fixup. */
+/* We don't need to generate entries in .fixup, except when
+ -mrelocatable or -mrelocatable-lib is given. */
#undef RELOCATABLE_NEEDS_FIXUP
+#define RELOCATABLE_NEEDS_FIXUP \
+ (target_flags & target_flags_explicit & MASK_RELOCATABLE)
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 8168cd3..2cfabb6 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -62,8 +62,11 @@ extern int dot_symbols;
#undef PROCESSOR_DEFAULT64
#define PROCESSOR_DEFAULT64 PROCESSOR_POWER4
-#undef TARGET_RELOCATABLE
-#define TARGET_RELOCATABLE (!TARGET_64BIT && (target_flags & MASK_RELOCATABLE))
+/* We don't need to generate entries in .fixup, except when
+ -mrelocatable or -mrelocatable-lib is given. */
+#undef RELOCATABLE_NEEDS_FIXUP
+#define RELOCATABLE_NEEDS_FIXUP \
+ (target_flags & target_flags_explicit & MASK_RELOCATABLE)
#undef RS6000_ABI_NAME
#define RS6000_ABI_NAME "linux"
@@ -198,6 +201,8 @@ extern int dot_symbols;
#define TARGET_EABI 0
#undef TARGET_PROTOTYPE
#define TARGET_PROTOTYPE 0
+#undef RELOCATABLE_NEEDS_FIXUP
+#define RELOCATABLE_NEEDS_FIXUP 0
#endif
@@ -222,9 +227,6 @@ extern int dot_symbols;
#define PROFILE_HOOK(LABEL) \
do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0)
-/* We don't need to generate entries in .fixup. */
-#undef RELOCATABLE_NEEDS_FIXUP
-
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
#undef ADJUST_FIELD_ALIGN
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index d9b363a..89f5335 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -11124,6 +11124,10 @@ print_operand_address (FILE *file, rtx x)
abort ();
}
+#ifndef RELOCATABLE_NEEDS_FIXUP
+#define RELOCATABLE_NEEDS_FIXUP 0
+#endif
+
/* Target hook for assembling integer objects. The PowerPC version has
to handle fixup entries for relocatable code if RELOCATABLE_NEEDS_FIXUP
is defined. It also needs to handle DI-mode objects on 64-bit
@@ -11132,9 +11136,8 @@ print_operand_address (FILE *file, rtx x)
static bool
rs6000_assemble_integer (rtx x, unsigned int size, int aligned_p)
{
-#ifdef RELOCATABLE_NEEDS_FIXUP
/* Special handling for SI values. */
- if (size == 4 && aligned_p)
+ if (RELOCATABLE_NEEDS_FIXUP && size == 4 && aligned_p)
{
extern int in_toc_section (void);
static int recurse = 0;
@@ -11182,7 +11185,6 @@ rs6000_assemble_integer (rtx x, unsigned int size, int aligned_p)
return true;
}
}
-#endif /* RELOCATABLE_NEEDS_FIXUP */
return default_assemble_integer (x, size, aligned_p);
}