summaryrefslogtreecommitdiffstats
path: root/media/libtheora/bug752139-r18031.patch
blob: 62ea87632b1fe1ea805040cc6b4db3a0f9222e80 (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
diff --git a/media/libtheora/lib/arm/arm2gnu.pl b/media/libtheora/lib/arm/arm2gnu.pl
--- a/media/libtheora/lib/arm/arm2gnu.pl
+++ b/media/libtheora/lib/arm/arm2gnu.pl
@@ -1,11 +1,14 @@
 #!/usr/bin/perl
 
 my $bigend;  # little/big endian
+my $nxstack;
+
+$nxstack = 0;
 
 eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
     if $running_under_some_shell;
 
 while ($ARGV[0] =~ /^-/) {
     $_ = shift;
   last if /^--/;
     if (/^-n/) {
@@ -77,16 +80,19 @@ while (<>) {
     if ( /\bMEND\b/ ) {
       s/\bMEND\b/.endm/;
       $n=0;
     }
 
     # ".rdata" doesn't work in 'as' version 2.13.2, as it is ".rodata" there.
     #
     if ( /\bAREA\b/ ) {
+        if ( /CODE/ ) {
+            $nxstack = 1;
+        }
         s/^(.+)CODE(.+)READONLY(.*)/    .text/;
         s/^(.+)DATA(.+)READONLY(.*)/    .section .rdata\n    .align 2/;
         s/^(.+)\|\|\.data\|\|(.+)/    .data\n    .align 2/;
         s/^(.+)\|\|\.bss\|\|(.+)/    .bss/;
     }
 
     s/\|\|\.constdata\$(\d+)\|\|/.L_CONST$1/;       # ||.constdata$3||
     s/\|\|\.bss\$(\d+)\|\|/.L_BSS$1/;               # ||.bss$2||
@@ -263,9 +269,13 @@ while (<>) {
 } continue {
     printf ("%s", $_) if $printit;
     if ($addPadding != 0)
     {
         printf ("   mov r0,r0\n");
         $addPadding = 0;
     }
 }
-
+#If we had a code section, mark that this object doesn't need an executable
+# stack.
+if ($nxstack) {
+    printf ("    .section\t.note.GNU-stack,\"\",\%\%progbits\n");
+}