+Wed May 26 02:19:31 1999 Philip Blundell <pb@nexus.co.uk>
+
+ * arm.h (NEED_PLT_GOT): Fix mistake in last change.
+ (GOT_PCREL): New macro. Define to 1 if not already defined.
+ * arm/elf.h (GOT_PCREL): Define to 0.
+ * arm.c (arm_finalize_pic): Take into account the setting of
+ GOT_PCREL.
+
Tue May 25 14:06:06 1999 Jeffrey A Law (law@cygnus.com)
* output.h (STRIP_NAME_ENCODING): Provide default definition.
/* On the ARM the PC register contains 'dot + 8' at the time of the
addition. */
pic_tmp = plus_constant (gen_rtx_LABEL_REF (Pmode, l1), 8);
- pic_tmp2 = gen_rtx_CONST (VOIDmode,
+ if (GOT_PCREL)
+ pic_tmp2 = gen_rtx_CONST (VOIDmode,
gen_rtx_PLUS (Pmode, global_offset_table, pc_rtx));
+ else
+ pic_tmp2 = gen_rtx_CONST (VOIDmode, global_offset_table);
pic_rtx = gen_rtx_CONST (Pmode, gen_rtx_MINUS (Pmode, pic_tmp2, pic_tmp));
#ifndef NEED_PLT_GOT
#define NEED_PLT_GOT 0
#endif
+
+/* Nonzero if we need to refer to the GOT with a PC-relative
+ offset. In other words, generate
+
+ .word _GLOBAL_OFFSET_TABLE_ - [. - (.Lxx + 8)]
+
+ rather than
+
+ .word _GLOBAL_OFFSET_TABLE_ - (.Lxx + 8)
+
+ The default is true, which matches NetBSD. Subtargets can
+ override this if required. */
+#ifndef GOT_PCREL
+#define GOT_PCREL 1
+#endif
\f
/* Target machine storage Layout. */
/* For PIC code we need to explicitly specify (PLT) and (GOT) relocs. */
#define NEED_PLT_GOT flag_pic
+/* The ELF assembler handles GOT addressing differently to NetBSD. */
+#define GOT_PCREL 0
+
#include "arm/aout.h"