summaryrefslogtreecommitdiff
path: root/celt/arm
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2014-03-19 21:36:39 +0200
committerTimothy B. Terriberry <tterribe@xiph.org>2014-03-19 16:33:03 -0700
commit76e831d917fffc55854ba2dc68b61f51c8ba61b7 (patch)
tree254f123494762f044a5725b4acd9825d112a9450 /celt/arm
parentac0e294b52ecc600c05b4b67f74e0f3ccf30a030 (diff)
downloadopus-76e831d917fffc55854ba2dc68b61f51c8ba61b7.tar.gz
Make the arm2gnu.pl converter handle apple specific details
This allows building the arm assembly for iOS. This checks for the __APPLE__ preprocessor built-in define to determine whether this extra handling should be enabled. Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
Diffstat (limited to 'celt/arm')
-rwxr-xr-xcelt/arm/arm2gnu.pl23
1 files changed, 17 insertions, 6 deletions
diff --git a/celt/arm/arm2gnu.pl b/celt/arm/arm2gnu.pl
index e3139041..54f7129b 100755
--- a/celt/arm/arm2gnu.pl
+++ b/celt/arm/arm2gnu.pl
@@ -26,6 +26,8 @@
my $bigend; # little/big endian
my $nxstack;
+my $apple = 0;
+my $symprefix = "";
$nxstack = 0;
@@ -39,6 +41,11 @@ while ($ARGV[0] =~ /^-/) {
$nflag++;
next;
}
+ if (/^--apple/) {
+ $apple = 1;
+ $symprefix = "_";
+ next;
+ }
die "I don't recognize this switch: $_\\n";
}
$printit++ unless $nflag;
@@ -79,7 +86,7 @@ while (<>) {
s/\bINCLUDE[ \t]*([^ \t\n]+)/.include \"$1\"/;
s/\bGET[ \t]*([^ \t\n]+)/.include \"${ my $x=$1; $x =~ s|\.s|-gnu.S|; \$x }\"/;
s/\bIMPORT\b/.extern/;
- s/\bEXPORT\b/.global/;
+ s/\bEXPORT\b\s*/.global $symprefix/;
s/^(\s+)\[/$1IF/;
s/^(\s+)\|/$1ELSE/;
s/^(\s+)\]/$1ENDIF/;
@@ -135,7 +142,7 @@ while (<>) {
# won't match the original source file (we could use the .line
# directive, which is documented to be obsolete, but then gdb will
# show the wrong line in the translated source file).
- s/$/; .arch armv7-a\n .fpu neon\n .object_arch armv4t/;
+ s/$/; .arch armv7-a\n .fpu neon\n .object_arch armv4t/ unless ($apple);
}
}
@@ -157,9 +164,13 @@ while (<>) {
$prefix = "";
if ($proc)
{
- $prefix = $prefix.sprintf("\t.type\t%s, %%function; ",$proc);
+ $prefix = $prefix.sprintf("\t.type\t%s, %%function; ",$proc) unless ($apple);
+ # Make sure we $prefix isn't empty here (for the $apple case).
+ # We handle mangling the label here, make sure it doesn't match
+ # the label handling below (if $prefix would be empty).
+ $prefix = "; ";
push(@proc_stack, $proc);
- s/^[A-Za-z_\.]\w+/$&:/;
+ s/^[A-Za-z_\.]\w+/$symprefix$&:/;
}
$prefix = $prefix."\t.thumb_func; " if ($thumb);
s/\bPROC\b/@ $&/;
@@ -172,7 +183,7 @@ while (<>) {
my $proc;
s/\bENDP\b/@ $&/;
$proc = pop(@proc_stack);
- $_ = "\t.size $proc, .-$proc".$_ if ($proc);
+ $_ = "\t.size $proc, .-$proc".$_ if ($proc && !$apple);
}
s/\bSUBT\b/@ $&/;
s/\bDATA\b/@ $&/; # DATA directive is deprecated -- Asm guide, p.7-25
@@ -337,6 +348,6 @@ while (<>) {
}
#If we had a code section, mark that this object doesn't need an executable
# stack.
-if ($nxstack) {
+if ($nxstack && !$apple) {
printf (" .section\t.note.GNU-stack,\"\",\%\%progbits\n");
}