summaryrefslogtreecommitdiffstats
path: root/main/gcc/09_all_gcc-4.5-Wtrampolines.patch
blob: 9c95c1e940df193a9ae9ddd17526f88e5cc2b994 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
2010-07-15  Magnus Granberg  <zorry@gentoo.org>
            Kevin F. Quinn  <kevquinn@gentoo.org>

            * builtins.c (expand_builtin_init_trampoline): If
              -Wtrampolines make a warning.
            * common.opt:  Add -Wtrampolines.
            * doc/invoke.texi:  Add -Wtrampolines.

2010-07-31	Magnus Granberg <zorry@gentoo.org>

            #328451 set -Wtrampolines as default

http://gcc.gnu.org/viewcvs?view=revision&revision=162205

--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5155,6 +5155,10 @@ expand_builtin_init_trampoline (tree exp)
   targetm.calls.trampoline_init (m_tramp, t_func, r_chain);
 
   trampolines_created = 1;
+
+  warning_at (DECL_SOURCE_LOCATION (t_func), OPT_Wtrampolines,
+              "trampoline generated for nested function %qD", t_func);
+
   return const0_rtx;
 }
 
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -192,6 +192,10 @@ Wsystem-headers
 Common Var(warn_system_headers) Warning
 Do not suppress warnings from system headers
 
+Wtrampolines
+Common Var(warn_trampolines) Init(1) Warning
+Warn whenever a trampoline is generated
+
 Wtype-limits
 Common Var(warn_type_limits) Init(-1) Warning
 Warn if a comparison is always true or always false due to the limited range of the data type
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -3611,6 +3611,21 @@ code.  However, note that using @option{-Wall} in conjunction with this
 option will @emph{not} warn about unknown pragmas in system
 headers---for that, @option{-Wunknown-pragmas} must also be used.
 
+@item -Wtrampolines
+@opindex Wtrampolines
+@opindex Wno-trampolines
+ Warn about trampolines generated for pointers to nested functions.
+ 
+ NOTE: In Gentoo, @option{-Wtrampolines} is set by default.
+ To disable, specify @option{-Wno-trampolines}
+
+ A trampoline is a small piece of data or code that is created at run
+ time on the stack when the address of a nested function is taken, and
+ is used to call the nested function indirectly.  For some targets, it
+ is made up of data only and thus requires no special treatment.  But,
+ for most targets, it is made up of code and thus requires the stack
+ to be made executable in order for the program to work properly.
+
 @item -Wfloat-equal
 @opindex Wfloat-equal
 @opindex Wno-float-equal