diff options
author | 2009-10-15 23:13:14 +0000 | |
---|---|---|
committer | 2009-10-15 23:13:14 +0000 | |
commit | 17c8d4a9eab03ad258e65e443b2b27f926825356 (patch) | |
tree | 9f0df81a1fa5ee3120d19757e61b8c8192af651e | |
parent | teach gcc about our kprintf and syslog format attributes (diff) | |
download | wireguard-openbsd-17c8d4a9eab03ad258e65e443b2b27f926825356.tar.xz wireguard-openbsd-17c8d4a9eab03ad258e65e443b2b27f926825356.zip |
merge some gcc-local(1) changes:
- disable -fident by default
- disable -fstrict-aliasing with -O2
- add support for -Wstack-larger-than-N (only for i386 and amd64 for now)
-rw-r--r-- | gnu/gcc/gcc/common.opt | 6 | ||||
-rw-r--r-- | gnu/gcc/gcc/config/i386/i386.c | 6 | ||||
-rw-r--r-- | gnu/gcc/gcc/flags.h | 6 | ||||
-rw-r--r-- | gnu/gcc/gcc/opts.c | 14 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gnu/gcc/gcc/common.opt b/gnu/gcc/gcc/common.opt index 23da331b927..360a4827b2c 100644 --- a/gnu/gcc/gcc/common.opt +++ b/gnu/gcc/gcc/common.opt @@ -97,6 +97,10 @@ Wlarger-than- Common RejectNegative Joined UInteger -Wlarger-than-<number> Warn if an object is larger than <number> bytes +Wstack-larger-than- +Common RejectNegative Joined UInteger +-Wstack-larger-than-<number> Warn if a function is using more than <number> bytes of stack space for their local variables. + Wunsafe-loop-optimizations Common Var(warn_unsafe_loop_optimizations) Warn if the loop cannot be optimized due to nontrivial assumptions. @@ -486,7 +490,7 @@ Enable guessing of branch probabilities ; On SVR4 targets, it also controls whether or not to emit a ; string identifying the compiler. fident -Common Report Var(flag_no_ident,0) +Common Report Var(flag_no_ident,1) Process #ident directives fif-conversion diff --git a/gnu/gcc/gcc/config/i386/i386.c b/gnu/gcc/gcc/config/i386/i386.c index 729dd408d7c..59d8220f7e6 100644 --- a/gnu/gcc/gcc/config/i386/i386.c +++ b/gnu/gcc/gcc/config/i386/i386.c @@ -1023,6 +1023,8 @@ struct ix86_frame HOST_WIDE_INT hard_frame_pointer_offset; HOST_WIDE_INT stack_pointer_offset; + HOST_WIDE_INT local_size; + /* When save_regs_using_mov is set, emit prologue using move instead of push instructions. */ bool save_regs_using_mov; @@ -5082,6 +5084,7 @@ ix86_compute_frame_layout (struct ix86_frame *frame) unsigned int preferred_alignment; HOST_WIDE_INT size = get_frame_size (); + frame->local_size = size; frame->nregs = ix86_nsaved_regs (); total_size = size; @@ -5419,6 +5422,9 @@ ix86_expand_prologue (void) REG_NOTES (insn) = x; } + if (warn_stack_larger_than && frame.local_size > stack_larger_than_size) + warning (0, "stack usage is %d bytes", frame.local_size); + /* Note: AT&T enter does NOT have reversed args. Enter is probably slower on all targets. Also sdb doesn't like it. */ diff --git a/gnu/gcc/gcc/flags.h b/gnu/gcc/gcc/flags.h index 226fb603110..9dd81ef1f1b 100644 --- a/gnu/gcc/gcc/flags.h +++ b/gnu/gcc/gcc/flags.h @@ -109,6 +109,12 @@ extern void set_Wunused (int setting); extern bool warn_larger_than; extern HOST_WIDE_INT larger_than_size; +/* Nonzero means warn about any function whose stack usage is larger + than N bytes. The value N is in `stack_larger_than_size'. */ + +extern int warn_stack_larger_than; +extern HOST_WIDE_INT stack_larger_than_size; + /* Nonzero means warn about constructs which might not be strict aliasing safe. */ diff --git a/gnu/gcc/gcc/opts.c b/gnu/gcc/gcc/opts.c index 3c2abad7f8b..34d01c287e9 100644 --- a/gnu/gcc/gcc/opts.c +++ b/gnu/gcc/gcc/opts.c @@ -57,6 +57,11 @@ bool extra_warnings; bool warn_larger_than; HOST_WIDE_INT larger_than_size; +/* Nonzero means warn about any function whose stack usage is larger + than N bytes. The value N is in `stack_larger_than_size'. */ +int warn_stack_larger_than; +HOST_WIDE_INT stack_larger_than_size; + /* Nonzero means warn about constructs which might not be strict-aliasing safe. */ int warn_strict_aliasing; @@ -492,9 +497,11 @@ decode_options (unsigned int argc, const char **argv) flag_schedule_insns_after_reload = 1; #endif flag_regmove = 1; - flag_strict_aliasing = 1; + flag_strict_aliasing = 0; flag_strict_overflow = 1; +#if !defined(OPENBSD_NATIVE) && !defined(OPENBSD_CROSS) flag_delete_null_pointer_checks = 1; +#endif flag_reorder_blocks = 1; flag_reorder_functions = 1; flag_tree_store_ccp = 1; @@ -720,6 +727,11 @@ common_handle_option (size_t scode, const char *arg, int value, warn_larger_than = value != -1; break; + case OPT_Wstack_larger_than_: + stack_larger_than_size = value; + warn_stack_larger_than = stack_larger_than_size != -1; + break; + case OPT_Wstrict_aliasing: case OPT_Wstrict_aliasing_: warn_strict_aliasing = value; |