diff options
Diffstat (limited to 'gcc-4.4.3/gcc/config/i386/i386.c')
-rw-r--r-- | gcc-4.4.3/gcc/config/i386/i386.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/gcc-4.4.3/gcc/config/i386/i386.c b/gcc-4.4.3/gcc/config/i386/i386.c index b237ed869..2ca822040 100644 --- a/gcc-4.4.3/gcc/config/i386/i386.c +++ b/gcc-4.4.3/gcc/config/i386/i386.c @@ -1810,6 +1810,9 @@ extern int ix86_force_align_arg_pointer; static const char ix86_force_align_arg_pointer_string[] = "force_align_arg_pointer"; +/* Stack protector option. */ +enum stack_protector_guard ix86_stack_protector_guard; + static rtx (*ix86_gen_leave) (void); static rtx (*ix86_gen_pop1) (rtx); static rtx (*ix86_gen_add3) (rtx, rtx, rtx); @@ -3435,6 +3438,22 @@ override_options (bool main_args_p) flag_stack_check = 0; target_flags |= MASK_STACK_PROBE; } + + /* Handle stack protector */ + if (ix86_stack_protector_guard_string != 0) + { + if (!strcmp (ix86_stack_protector_guard_string, "tls")) + ix86_stack_protector_guard = SSP_TLS; + else if (!strcmp (ix86_stack_protector_guard_string, "global")) + ix86_stack_protector_guard = SSP_GLOBAL; + else + error ("bad value (%s) for %sstack-protector-guard=%s %s", + ix86_stack_protector_guard, prefix, suffix, sw); + } + else + { + ix86_stack_protector_guard = TARGET_HAS_BIONIC? SSP_GLOBAL : SSP_TLS; + } } /* Update register usage after having seen the compiler flags. */ @@ -29392,7 +29411,7 @@ static bool ix86_scalar_mode_supported_p (enum machine_mode mode) { if (DECIMAL_FLOAT_MODE_P (mode)) - return true; + return default_decimal_float_supported_p (); else if (mode == TFmode) return true; else |