On 23.12.15 11:22, Richard Earnshaw (lists) wrote:
On 22/12/15 19:53, Andreas Tobler wrote:
Hi all,
the commit for PR68617 broke boostrap on armv6*-*-freebsd*.
We still have unaligned_access = 0 on armv6 here on FreeBSD.
The commit from the above PR overrides my SUBTARGET_OVERRIDE_OPTIONS I
called in arm_option_override. And it sets the unaligned_access to 1.
The attached patch fixes this, bootstrap ongoing but passed the breaking
stage where genmddeps bus errored.
Is this patch ok for trunk once bootstrap completes?
TIA,
Andreas
2015-12-22 Andreas Tobler <andre...@gcc.gnu.org>
* config/arm/freebsd.h (SUBTARGET_OVERRIDE_OPTIONS): Adjust to
check unaligned_access on the gcc_options set.
* config/arm/arm.c (arm_option_override): Move
SUBTARGET_OVERRIDE_OPTIONS from here to
(arm_option_override_internal).
Moving this hunk to a different place potentially affects VXWORKS (the
only other target that uses this hook). I'd like to see confirmation
from the VxWorks maintainers (Nathan?) that this doesn't cause any
problems for them. If it does, then I think you need to create a new
subtarget hook (SUBTARGET_OVERRIDE_INTERNAL_OPTIONS?) and change FreeBSD
to use that rather than the existing hook.
I noticed this morning that VxWorks might be affected. To be on the safe
side I'd like to propose the attached version since it makes clear where
the override belongs to and I don't think hijacking
SUBTARGET_OVERRIDE_OPTIONS is a good idea here.
I need the override in the arm_option_override_internal function after
the default has been set.
What do you think?
Thanks,
Andreas
2015-12-23 Andreas Tobler <andre...@gcc.gnu.org>
* config/arm/freebsd.h: Rename SUBTARGET_OVERRIDE_OPTIONS to
SUBTARGET_OVERRIDE_INTERNAL_OPTIONS. Adjust to check
unaligned_access on the gcc_options set.
* config/arm/arm.c (arm_option_override_internal): Use
SUBTARGET_OVERRIDE_INTERNAL_OPTIONS.
Index: freebsd.h
===================================================================
--- freebsd.h (revision 231903)
+++ freebsd.h (working copy)
@@ -120,10 +120,10 @@
#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9
#endif
-#define SUBTARGET_OVERRIDE_OPTIONS \
+#define SUBTARGET_OVERRIDE_INTERNAL_OPTIONS \
do { \
- if (unaligned_access) \
- unaligned_access = 0; \
+ if (opts->x_unaligned_access) \
+ opts->x_unaligned_access = 0; \
} while (0)
#undef MAX_SYNC_LIBFUNC_SIZE
Index: arm.c
===================================================================
--- arm.c (revision 231903)
+++ arm.c (working copy)
@@ -2954,6 +2954,10 @@
/* Thumb2 inline assembly code should always use unified syntax.
This will apply to ARM and Thumb1 eventually. */
opts->x_inline_asm_unified = TARGET_THUMB2_P (opts->x_target_flags);
+
+#ifdef SUBTARGET_OVERRIDE_INTERNAL_OPTIONS
+ SUBTARGET_OVERRIDE_INTERNAL_OPTIONS;
+#endif
}
/* Fix up any incompatible options that the user has specified. */