View | Details | Raw Unified
Collapse All | Expand All

(-) ghc-6.2.2/ghc/driver/split/ghc-split.lprl (-5 / +39 lines)
 Lines 30-36    Link Here 
    &collectExports_hppa() if $TargetPlatform =~ /^hppa/;
    &collectExports_hppa() if $TargetPlatform =~ /^hppa/;
    &collectExports_mips() if $TargetPlatform =~ /^mips/;
    &collectExports_mips() if $TargetPlatform =~ /^mips/;
    &collectDyldStuff_powerpc() if $TargetPlatform =~ /^powerpc-apple/;
    &collectDyldStuff_powerpc_darwin() if $TargetPlatform =~ /^powerpc-apple-darwin/;
    $octr = 0;	# output file counter
    $octr = 0;	# output file counter
    $* = 1; 	# multi-line matches are OK
    $* = 1; 	# multi-line matches are OK
 Lines 107-113    Link Here 
    seek(TMPI, 0, 0);
    seek(TMPI, 0, 0);
}
}
sub collectDyldStuff_powerpc { # Note: Darwin/PowerPC only
sub collectDyldStuff_powerpc_darwin {
    local($chunk_label,$label,$cur_section,$section,$chunk,$alignment,$cur_alignment);
    local($chunk_label,$label,$cur_section,$section,$chunk,$alignment,$cur_alignment);
    
    
    %DyldChunks = (); # NB: global table
    %DyldChunks = (); # NB: global table
 Lines 212-218    Link Here 
    return(&process_asm_block_alpha($str)) if $TargetPlatform =~ /^alpha-/;
    return(&process_asm_block_alpha($str)) if $TargetPlatform =~ /^alpha-/;
    return(&process_asm_block_hppa($str))  if $TargetPlatform =~ /^hppa/;
    return(&process_asm_block_hppa($str))  if $TargetPlatform =~ /^hppa/;
    return(&process_asm_block_mips($str))   if $TargetPlatform =~ /^mips-/;
    return(&process_asm_block_mips($str))   if $TargetPlatform =~ /^mips-/;
    return(&process_asm_block_powerpc($str))   if $TargetPlatform =~ /^powerpc-apple-/;
    return(&process_asm_block_powerpc_darwin($str))
                            if $TargetPlatform =~ /^powerpc-apple-darwin/;
    return(&process_asm_block_powerpc_linux($str))
                            if $TargetPlatform =~ /^powerpc-[^-]+-linux/;
    # otherwise...
    # otherwise...
    &tidy_up_and_die(1,"$Pgm: no process_asm_block for $TargetPlatform\n");
    &tidy_up_and_die(1,"$Pgm: no process_asm_block for $TargetPlatform\n");
 Lines 477-483    Link Here 
\end{code}
\end{code}
\begin{code}
\begin{code}
sub process_asm_block_powerpc {
sub process_asm_block_powerpc_darwin {
    local($str) = @_;
    local($str) = @_;
    local($dyld_stuff) = '';
    local($dyld_stuff) = '';
 Lines 516-522    Link Here 
    $str .= "\n" . $dyld_stuff;
    $str .= "\n" . $dyld_stuff;
    print STDERR "### STRIPPED BLOCK (powerpc):\n$str" if $Dump_asm_splitting_info;
    print STDERR "### STRIPPED BLOCK (powerpc darwin):\n$str" if $Dump_asm_splitting_info;
    $str;
}
\end{code}
\begin{code}
sub process_asm_block_powerpc_linux {
    local($str) = @_;
    # strip the marker
    $str =~ s/__stg_split_marker.*\n//;
    # remove/record any literal constants defined here
    while ( $str =~ s/^(\s+.section\s+\.rodata\n\s+\.align.*\n(\.LC\d+):\n(\s\.(byte|short|long|quad|2byte|4byte|8byte|fill|space|ascii|string).*\n)+)// ) {
	local($label) = $2;
	local($body)  = $1;
	&tidy_up_and_die(1,"Local constant label $label already defined!\n")
	    if $LocalConstant{$label};
	$LocalConstant{$label} = $body;
    }
    # inject definitions for any local constants now used herein
    foreach $k (keys %LocalConstant) {
	if ( $str =~ /[\s,]$k\b/ ) {
	    $str = $LocalConstant{$k} . $str;
	}
    }
    
    print STDERR "### STRIPPED BLOCK (powerpc linux):\n$str" if $Dump_asm_splitting_info;
    $str;
    $str;
}
}