On 23/12/15 19:28, Andreas Tobler wrote: > 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. > >
This is OK. One question, though, is whether you should explicitly override a user request for unaligned accesses without at least warning that this is being done. R. > > > > > > x_opts_unaligned2.diff > > > 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. */ >