$T_POST_LBL = ':';
$T_MOVE_DIRVS = '^(\s*\.(globl|text|data|section|align|size|type|ident|local)\s+.*\n)';
- $T_COPY_DIRVS = '\.(globl|local)';
+ $T_COPY_DIRVS = '\.(globl|type|size|local)';
$T_DOT_WORD = '\.(quad|long|value|byte|zero)';
$T_DOT_GLOBAL = '\.global';
|| /^\s*\.section __TEXT,__symbol_stub\d,.*/
|| /^\s*\.section __TEXT,__symbolstub\d,.*/
|| /^\s*\.lazy_symbol_pointer/
- || /^\s*\.non_lazy_symbol_pointer/ ))
+ || /^\s*\.non_lazy_symbol_pointer/
+ || /^\s*\.section __IMPORT.*/))
{
$chk[++$i] = $_;
$chkcat[$i] = 'dyld';
$chksymb[$i] = '';
+ $dyld_section = $_;
} elsif ( $TargetPlatform =~ /^.*-apple-darwin.*/ && $chkcat[$i] eq 'dyld' && /^\s*\.data/)
{ # non_lazy_symbol_ptrs that point to local symbols
$chk[++$i] = $_;
$chkcat[$i] = 'dyld';
$chksymb[$i] = '';
+ $dyld_section = $_;
+ } elsif ( $TargetPlatform =~ /^.*-apple-darwin.*/ && $chkcat[$i] eq 'dyld' && /^\s*\.align/)
+ { # non_lazy_symbol_ptrs that point to local symbols
+ $dyld_section .= $_;
+ } elsif ( $TargetPlatform =~ /^.*-apple-darwin.*/ && $chkcat[$i] eq 'dyld' && /^L_.*:$/)
+ { # non_lazy_symbol_ptrs that point to local symbols
+ $chk[++$i] = $dyld_section . $_;
+ $chkcat[$i] = 'dyld';
+ $chksymb[$i] = '';
} elsif ( /^\s+/ ) { # most common case first -- a simple line!
# duplicated from the bottom
$p =~ s/^\tstdu 1,-\d+\(1\)\n//;
$p =~ s/^\tstd \d+,-?\d+\(1\)\n//g;
- # GCC's "large-model" PIC (-fPIC)
- $pcrel_label = $p;
- $pcrel_label =~ s/(.|\n)*^.LCF(\d+):\n(.|\n)*/$2/ or $pcrel_label = "";
-
- $p =~ s/^\tbcl 20,31,.LCF\d+\n//;
- $p =~ s/^.LCF\d+:\n//;
- $p =~ s/^\tmflr 30\n//;
- $p =~ s/^\tlwz 0,\.LCL\d+-\.LCF\d+\(30\)\n//;
- $p =~ s/^\tadd 30,0,30\n//;
-
# This is bad: GCC 3 seems to zero-fill some local variables in the prologue
# under some circumstances, only when generating position dependent code.
# I have no idea why, and I don't think it is necessary, so let's toss it.