X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=driver%2Fsplit%2Fghc-split.lprl;h=175061387533d2bd3a1f3ad3da90fbf384037018;hb=bca74f3e6bde807d688e39e6de28112ebcb4fa49;hp=d54e1b206e453813726663fda36c94d271197d40;hpb=fb8d5b043f01340a70c49cee4bb9533a42beba6a;p=ghc-hetmet.git diff --git a/driver/split/ghc-split.lprl b/driver/split/ghc-split.lprl index d54e1b2..1750613 100644 --- a/driver/split/ghc-split.lprl +++ b/driver/split/ghc-split.lprl @@ -138,7 +138,7 @@ sub collectDyldStuff_darwin { while ( 1 ) { $_ = ; - if ( $_ eq '' || /^L(_.+)\$.+:/ ) { + if ( $_ eq '' || (/^L(_.+)\$.+:/ && !(/^L(.*)\$stub_binder:/))) { if ( $label ne '' ) { $DyldChunksDefined{$label} .= $section . $alignment . $chunk_label . $ chunk; if( $section =~ s/\.data/\.non_lazy_symbol_pointer/ ) { @@ -155,7 +155,7 @@ sub collectDyldStuff_darwin { $section = $cur_section; $alignment = $cur_alignment; print STDERR "label: $label\n" if $Dump_asm_splitting_info; - } elsif ( /^\s*\.(symbol_stub|picsymbol_stub|lazy_symbol_pointer|non_lazy_symbol_pointer|data|section __IMPORT,.*)/ ) { + } elsif ( /^\s*\.(symbol_stub|picsymbol_stub|lazy_symbol_pointer|non_lazy_symbol_pointer|data|section __IMPORT,.*|section __DATA, __la_sym_ptr(2|3),lazy_symbol_pointers)/ ) { $cur_section = $_; printf STDERR "section: $cur_section\n" if $Dump_asm_splitting_info; $cur_alignment = '' @@ -369,7 +369,7 @@ sub process_asm_block_iX86 { # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/' # -- ccshan 2002-09-05] - while ( ($str =~ /(\.?(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) { + while ( ($str =~ /((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) { local($label) = $2; local($body) = $1; local($prefix, $suffix, $*) = ($`, $', 0); @@ -407,7 +407,7 @@ sub process_asm_block_x86_64 { # http://bugs6.perl.org/rt2/Ticket/Display.html?id=1760 and illustrated # by the seg fault of perl -e '("x\n" x 5000) =~ /(.*\n)+/' # -- ccshan 2002-09-05] - while ( ($str =~ /(\.?(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) { + while ( ($str =~ /((?:^|\.)(LC\d+):\n(\t\.(ascii|string).*\n|\s*\.byte.*\n){1,100})/ )) { local($label) = $2; local($body) = $1; local($prefix, $suffix, $*) = ($`, $', 0); @@ -502,7 +502,7 @@ sub process_asm_block_mips { } # remove/record any literal constants defined here - while ( $str =~ /(\t\.rdata\n\t\.align \d\n)?(\$(LC\d+):\n(\t\.byte\t.*\n)+)/ ) { + while ( $str =~ /(\t\.rdata\n\t\.align \d\n)?^(\$(LC\d+):\n(\t\.byte\t.*\n)+)/ ) { local($label) = $3; local($body) = $2;