summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobert <robert@openbsd.org>2009-10-15 23:13:14 +0000
committerrobert <robert@openbsd.org>2009-10-15 23:13:14 +0000
commit17c8d4a9eab03ad258e65e443b2b27f926825356 (patch)
tree9f0df81a1fa5ee3120d19757e61b8c8192af651e
parentteach gcc about our kprintf and syslog format attributes (diff)
downloadwireguard-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.opt6
-rw-r--r--gnu/gcc/gcc/config/i386/i386.c6
-rw-r--r--gnu/gcc/gcc/flags.h6
-rw-r--r--gnu/gcc/gcc/opts.c14
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;