On Tue, Dec 17, 2013 at 10:29 AM, Sriraman Tallam <tmsri...@google.com> wrote: > On Fri, Dec 13, 2013 at 5:06 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Mon, Dec 2, 2013 at 6:46 PM, Sriraman Tallam <tmsri...@google.com> wrote: >>> On Thu, Nov 28, 2013 at 9:36 PM, Bernd Edlinger >>> <bernd.edlin...@hotmail.de> wrote: >>>> Hi, >>>> >>>> On Wed, 27 Nov 2013 19:49:39, Uros Bizjak wrote: >>>>> >>>>> On Mon, Nov 25, 2013 at 10:08 PM, Sriraman Tallam <tmsri...@google.com> >>>>> wrote: >>>>> >>>>>> I have attached a patch to fix this bug : >>>>>> >>>>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58944 >>>>>> >>>>>> A similar problem was also reported here: >>>>>> http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01050.html >>>>>> >>>>>> >>>>>> Recently, ix86_valid_target_attribute_tree in config/i386/i386.c was >>>>>> refactored to not depend on global_options structure and to be able to >>>>>> use any gcc_options structure. One clean way to fix this is by having >>>>>> target_option_default_node save all the default target options which >>>>>> can be restored to any gcc_options structure. The root cause of the >>>>>> above bugs was that ix86_arch_string and ix86_tune_string was not >>>>>> saved in target_option_deault_node in PR58944 and >>>>>> ix86_preferred_stack_boundary_arg was not saved in the latter case. >>>>>> >>>>>> This patch saves all the target options used in i386.opt which are >>>>>> either obtained from the command-line or set to some default. Is this >>>>>> patch alright? >>>>> >>>>> Things looks rather complicated, but I see no other solution that save >>>>> and restore the way you propose. >>>>> >>>>> Please wait 24h if somebody has a different idea, otherwise please go >>>>> ahead and commit the patch to mainline. >>>>> >>>> >>>> Maybe you should also look at the handling or preferred_stack_boundary_arg >>>> versus incoming_stack_boundary_arg in ix86_option_override_internal: >>>> >>>> Remember ix86_incoming_stack_boundary_arg is defined to >>>> global_options.x_ix86_incoming_stack_boundary_arg. >>>> >>>> like this? >>>> >>>> if (opts_set->x_ix86_incoming_stack_boundary_arg) >>>> { >>>> - if (ix86_incoming_stack_boundary_arg >>>> + if (opts->x_ix86_incoming_stack_boundary_arg >>>> < (TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2) >>>> - || ix86_incoming_stack_boundary_arg> 12) >>>> + || opts->x_ix86_incoming_stack_boundary_arg> 12) >>>> error ("-mincoming-stack-boundary=%d is not between %d and 12", >>>> - ix86_incoming_stack_boundary_arg, >>>> + opts->x_ix86_incoming_stack_boundary_arg, >>>> TARGET_64BIT_P (opts->x_ix86_isa_flags) ? 4 : 2); >>>> else >>>> { >>>> ix86_user_incoming_stack_boundary >>>> - = (1 << ix86_incoming_stack_boundary_arg) * BITS_PER_UNIT; >>>> + = (1 << opts->x_ix86_incoming_stack_boundary_arg) * >>>> BITS_PER_UNIT; >>>> ix86_incoming_stack_boundary >>>> = ix86_user_incoming_stack_boundary; >>>> } >>>> >>> >>> Thanks for catching this. I will make this change in the same patch. >>> >> >> Your change caused: >> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59492 > > Thanks for fixing this. This is making me wonder if I am missing some
-g? > other important flags. Is there a way to detect this? I originally > looked at everything in i386.opt to form my list. > You should check all options in ./ada/gcc-interface/lang.opt ./c-family/c.opt ./common.opt ./lto/lang.opt ./go/lang.opt ./fortran/lang.opt ./java/lang.opt to see if any options in them are relevant and should be preserved. -- H.J.