#!/usr/bin/perl -w

use strict;


########################################################################


my @asm = ('/usr/bin/as');
my $objcopy = '/usr/bin/objcopy';

my $verbose;
my $outfile;

my $saved_cfg;
my $saved_dataflow;
my $saved_site_info;
my $saved_implications;


my %flag_specs =
    (
     # Sampler Options
     '-fsave-blast-spec' => sub { shift @ARGV },
     '-fsave-cfg' => sub { $saved_cfg = shift @ARGV },
     '-fsave-dataflow' => sub { $saved_dataflow = shift @ARGV },
     '-fsave-site-info' => sub { $saved_site_info = shift @ARGV },
     '-fsave-implications' => sub { $saved_implications = shift @ARGV },

     # Overall Options
     '-o' => sub { $outfile = shift @ARGV; push @asm, $_, $outfile },
     '--verbose' => sub { $verbose = 1 },
     );


while (@ARGV) {
    local $_ = shift;

    if (exists $flag_specs{$_}) {
	my $handler = $flag_specs{$_};
	$handler->($_);
    } else {
	push @asm, $_;
    }
}


########################################################################


sub run_stage (@) {
    warn "  @_\n" if $verbose;
    system {$_[0]} @_;
    exit ($? >> 8 || $? & 127 || 1) if $?;
}


run_stage @asm;

my @objcopy;
push @objcopy, '--add-section', ".debug_sampler_cfg=$saved_cfg" unless -z $saved_cfg;
push @objcopy, '--add-section', ".debug_site_info=$saved_site_info" unless -z $saved_site_info;
push @objcopy, '--add-section', ".debug_sampler_dataflow=$saved_dataflow" if $saved_dataflow && -s $saved_dataflow;
push @objcopy, '--add-section', ".debug_sampler_implications=$saved_implications" if $saved_implications && -s $saved_implications;
run_stage $objcopy, @objcopy, $outfile if @objcopy && defined $outfile;


exit 0;
