aboutsummaryrefslogtreecommitdiffstats
path: root/testing/ocaml/010_all_execstacks.patch
blob: fa47d0c309ec16072d432976a974e02f2030655f (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Fix the EXEC_STACK in ocaml compiled binaries (#153382)

Index: ocaml-4.02.2/asmrun/sparc.S
===================================================================
--- ocaml-4.02.2.orig/asmrun/sparc.S
+++ ocaml-4.02.2/asmrun/sparc.S
@@ -356,3 +356,8 @@ caml_system__frametable:
         .type caml_raise_exception, #function
         .type caml_system__frametable, #object
 #endif
+
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif
+
Index: ocaml-4.02.2/asmcomp/arm/emit.mlp
===================================================================
--- ocaml-4.02.2.orig/asmcomp/arm/emit.mlp
+++ ocaml-4.02.2/asmcomp/arm/emit.mlp
@@ -888,6 +888,13 @@ let data l =
   `	.data\n`;
   List.iter emit_item l
 
+(* Mark stack as non executable *)
+let nx_stack() =
+  if Config.system = "linux" then
+    `  .section .note.GNU-stack,\"\",%progbits\n`
+
+
+
 (* Beginning / end of an assembly file *)
 
 let begin_assembly() =
@@ -920,6 +927,7 @@ let begin_assembly() =
   `{emit_symbol lbl_begin}:\n`
 
 let end_assembly () =
+  nx_stack();
   let lbl_end = Compilenv.make_symbol (Some "code_end") in
   `	.text\n`;
   `	.globl	{emit_symbol lbl_end}\n`;
Index: ocaml-4.02.2/asmcomp/power/emit.mlp
===================================================================
--- ocaml-4.02.2.orig/asmcomp/power/emit.mlp
+++ ocaml-4.02.2/asmcomp/power/emit.mlp
@@ -882,6 +882,12 @@ let data l =
   emit_string data_space;
   List.iter emit_item l
 
+(* Mark stack as non executable *)
+let nx_stack() =
+  if Config.system = "elf" then
+      `  .section .note.GNU-stack,\"\",%progbits\n`
+
+
 (* Beginning / end of an assembly file *)
 
 let begin_assembly() =
@@ -898,6 +904,7 @@ let begin_assembly() =
   `{emit_symbol lbl_begin}:\n`
 
 let end_assembly() =
+  nx_stack();
   if pic_externals then
     (* Emit the pointers to external functions *)
     StringSet.iter emit_external !external_functions;
Index: ocaml-4.02.2/asmcomp/sparc/emit.mlp
===================================================================
--- ocaml-4.02.2.orig/asmcomp/sparc/emit.mlp
+++ ocaml-4.02.2/asmcomp/sparc/emit.mlp
@@ -724,6 +724,12 @@ let data l =
   `	.data\n`;
   List.iter emit_item l
 
+(* Mark stack as non executable *)
+let nx_stack() =
+  if Config.system = "linux" then
+      `  .section .note.GNU-stack,\"\",%progbits\n`
+
+
 (* Beginning / end of an assembly file *)
 
 let begin_assembly() =
@@ -737,6 +743,7 @@ let begin_assembly() =
   `{emit_symbol lbl_begin}:\n`
 
 let end_assembly() =
+  nx_stack();
   `	.text\n`;
   let lbl_end = Compilenv.make_symbol (Some "code_end") in
   `	.global	{emit_symbol lbl_end}\n`;
Index: ocaml-4.02.2/asmrun/power-elf.S
===================================================================
--- ocaml-4.02.2.orig/asmrun/power-elf.S
+++ ocaml-4.02.2/asmrun/power-elf.S
@@ -478,3 +478,8 @@ caml_system__frametable:
         .long   .L105 + 4       /* return address into callback */
         .short  -1              /* negative size count => use callback link */
         .short  0               /* no roots here */
+
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif
+
Index: ocaml-4.02.2/asmrun/arm.S
===================================================================
--- ocaml-4.02.2.orig/asmrun/arm.S
+++ ocaml-4.02.2/asmrun/arm.S
@@ -498,3 +498,7 @@ caml_system__frametable:
         .align  2
         .type   caml_system__frametable, %object
         .size   caml_system__frametable, .-caml_system__frametable
+
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif