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
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel