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"); +}