On Wed, 22 Jan 2014, Janne Grunau wrote:
Makes sure all local function symbols are declared as .thumb_func even if they are not directly called. fft4|65536_neon in libavcodec/arm/fft_neon.S are only accessed through saved offset in a table for example. Fixes fate-mdct-4 tests in libav on iOS. --- gas-preprocessor.pl | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)diff --git a/gas-preprocessor.pl b/gas-preprocessor.pl index 2072ca3..834b28d 100755 --- a/gas-preprocessor.pl +++ b/gas-preprocessor.pl @@ -50,6 +50,7 @@ if ((grep /^-c$/, @gcc_cmd) && !(grep /^-o/, @gcc_cmd)) { my $comm; my $aarch64 = 0; +my $thumb = 0; # detect architecture from gcc binary name if ($gcc_cmd[0] =~ /arm64|aarch64/) { @@ -118,9 +119,11 @@ while (<ASMFILE>) { # remove all comments (to avoid interfering with evaluating directives) s/(?<!\\)$comm.*//x; + $thumb = 1 if /\.code\s+16|\.thumb/; + $thumb = 0 if /\.code\s+32|\.arm/; + # comment out unsupported directives s/\.type/$comm$&/x; - s/\.func/$comm$&/x; s/\.endfunc/$comm$&/x; s/\.ltorg/$comm$&/x; s/\.size/$comm$&/x; @@ -128,6 +131,13 @@ while (<ASMFILE>) { s/\.arch/$comm$&/x; s/\.object_arch/$comm$&/x; + # recycle the '.func' directive for '.thumb_func' otherwise comment it out + if ($thumb) { + s/\.func/.thumb_func/x; + } else { + s/\.func/$comm$&/x; + } + # the syntax for these is a little different s/\.global/.globl/x; # also catch .section .rodata since the equivalent to .const_data is .section __DATA,__const @@ -410,8 +420,6 @@ my @rept_lines; my %literal_labels; # for ldr <reg>, =<expr> my $literal_num = 0; -my $thumb = 0; - my %thumb_labels; my %call_targets; @@ -436,9 +444,6 @@ foreach my $line (@pass1_lines) { push(@sections, $line); } - $thumb = 1 if $line =~ /\.code\s+16|\.thumb/; - $thumb = 0 if $line =~ /\.code\s+32|\.arm/; - # handle ldr <reg>, =<expr> if ($line =~ /(.*)\s*ldr([\w\s\d]+)\s*,\s*=(.*)/) { my $label = $literal_labels{$3}; -- 1.8.5.3
Probably ok. In general I prefer to move more things to the later stages (since some processing can't be done before macros have been expanded etc), but these should probably be safe to handle at that point - assuming nobody does anything odd like hiding alternating .thumb/.arm statements within macros or so.
// Martin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
