X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdriver%2Fmangler%2Fghc-asm.lprl;h=902593ea7f1a52467fe9a9f79e6f84ffce6b89db;hb=28a464a75e14cece5db40f2765a29348273ff2d2;hp=19c3012c0870a8334f45123125e30cd6d23103f2;hpb=8b4568eb029afb98bc7ef6d0b3ef28d573908f14;p=ghc-hetmet.git diff --git a/ghc/driver/mangler/ghc-asm.lprl b/ghc/driver/mangler/ghc-asm.lprl index 19c3012..902593e 100644 --- a/ghc/driver/mangler/ghc-asm.lprl +++ b/ghc/driver/mangler/ghc-asm.lprl @@ -219,7 +219,7 @@ sub init_TARGET_STUFF { $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'; @@ -588,17 +588,28 @@ sub mangle_asm { || /^\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