зеркало из https://github.com/mozilla/gecko-dev.git
Bug 752139 - Mark stacks non-executable in the libtheora ARM asm. r=glandium
This commit is contained in:
Родитель
0cd2da2404
Коммит
2eab8f88ba
|
@ -0,0 +1,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");
|
||||
+}
|
|
@ -1,6 +1,9 @@
|
|||
#!/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;
|
||||
|
@ -82,6 +85,9 @@ while (<>) {
|
|||
# ".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/;
|
||||
|
@ -268,4 +274,8 @@ while (<>) {
|
|||
$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");
|
||||
}
|
||||
|
|
|
@ -80,3 +80,4 @@ cp $1/include/theora/theoraenc.h ./include/theora/theoraenc.h
|
|||
cp $1/include/theora/codec.h ./include/theora/codec.h
|
||||
patch -p3 < ./bug625773-r17780.patch
|
||||
patch -p3 < ./bug468275-r18219.patch
|
||||
patch -p3 < ./bug752139-r18031.patch
|
||||
|
|
Загрузка…
Ссылка в новой задаче