arm2gnu.pl: Fix GNU ARM .type directive
authorMark Harris <mark.hsj@gmail.com>
Sun, 5 Feb 2017 00:57:41 +0000 (16:57 -0800)
committerMark Harris <mark.hsj@gmail.com>
Sun, 5 Feb 2017 01:23:46 +0000 (17:23 -0800)
Broken by 76e831d.  Without the .type directive, SIGILL may be produced
if the C code is compiled in Thumb mode, because the compiler may assume
that the asm symbol is also Thumb and call it using a BL instruction.

celt/arm/arm2gnu.pl

index 6c922ac..a2895f7 100755 (executable)
@@ -164,11 +164,11 @@ while (<>) {
         $prefix = "";
         if ($proc)
         {
-            $prefix = $prefix.sprintf("\t.type\t%s, %%function; ",$proc) unless ($apple);
+            $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 = "; ";
+            $prefix = $prefix."; ";
             push(@proc_stack, $proc);
             s/^[A-Za-z_\.]\w+/$symprefix$&:/;
         }