X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=driver%2Fsplit%2Fghc-split.lprl;h=d54e1b206e453813726663fda36c94d271197d40;hb=430453c5131592b6147a80202dc5f7fbe3f3d5fd;hp=4d159ec04fecb9e14a549016d443a85042b0bb38;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/driver/split/ghc-split.lprl b/driver/split/ghc-split.lprl index 4d159ec..d54e1b2 100644 --- a/driver/split/ghc-split.lprl +++ b/driver/split/ghc-split.lprl @@ -25,6 +25,7 @@ exit(0); \begin{code} sub split_asm_file { local($asm_file) = @_; + my @pieces = (); open(TMPI, "< $asm_file") || &tidy_up_and_die(1,"$Pgm: failed to open `$asm_file' (to read)\n"); @@ -54,34 +55,37 @@ sub split_asm_file { # grab and de-mangle a section of the .s file... $s_stuff = &ReadTMPIUpToAMarker ( $_, $octr ); - $this_piece = &process_asm_block ( $s_stuff ); + $pieces[$octr] = &process_asm_block ( $s_stuff ); + } - # output to a file of its own - # open a new output file... - $ofname = "${Tmp_prefix}__${octr}.s"; - open(OUTF, "> $ofname") || die "$Pgm: can't open output file: $ofname\n"; + # Make sure that we still have some output when the input file is empty + if ($octr == 0) { + $octr = 1; + $pieces[$octr] = ''; + } - print OUTF $prologue_stuff; - print OUTF $this_piece; + $NoOfSplitFiles = $octr; - close(OUTF) - || &tidy_up_and_die(1,"$Pgm:Failed writing ${Tmp_prefix}__${octr}.s\n"); + if ($pieces[$NoOfSplitFiles] =~ /(\n[ \t]*\.section[ \t]+\.note\.GNU-stack,[^\n]*\n)/) { + $note_gnu_stack = $1; + for $octr (1..($NoOfSplitFiles - 1)) { + $pieces[$octr] .= $note_gnu_stack; + } } - # Make sure that we still have some output when the input file is empty - if ( $octr == 0 ) { - $octr = 1; + for $octr (1..$NoOfSplitFiles) { + # output to a file of its own + # open a new output file... $ofname = "${Tmp_prefix}__${octr}.s"; open(OUTF, "> $ofname") || die "$Pgm: can't open output file: $ofname\n"; print OUTF $prologue_stuff; + print OUTF $pieces[$octr]; close(OUTF) || &tidy_up_and_die(1,"$Pgm:Failed writing ${Tmp_prefix}__${octr}.s\n"); } - $NoOfSplitFiles = $octr; - close(TMPI) || &tidy_up_and_die(1,"Failed reading $asm_file\n"); }