in maxas/MaxAs/Cubin.pm [638:683]
sub write
{
my ($cubin, $file) = @_;
open my $fh, ">$file" or die "Error: could not open $file for writing: $!";
binmode($fh);
my $elfHdr = $cubin->{elfHdr};
my $class = $elfHdr->{fileClass};
# write elf header
print $fh pack $elfHdrT[$class], @{$elfHdr}{@{$elfHdrC[$class]}};
my $pos = $elfHdr->{ehSize};
# write section data
foreach my $secHdr (@{$cubin->{secHdrs}})
{
# Skip NULL and NOBITS data sections
next if $secHdr->{size} == 0 || $secHdr->{type} == 8;
# Add any needed padding between sections
my $pad = $pos % $secHdr->{align};
if ($pad > 0)
{
$pad = $secHdr->{align} - $pad;
print $fh join '', "\0" x $pad;
$pos += $pad;
}
print $fh pack 'H*', $secHdr->{Data};
$pos += $secHdr->{size};
}
# write section headers
foreach my $secHdr (@{$cubin->{secHdrs}})
{
print $fh pack $secHdrT[$class], @{$secHdr}{@{$secHdrC[$class]}};
}
#write program headers
foreach my $prgHdr (@{$cubin->{prgHdrs}})
{
print $fh pack $prgHdrT[$class], @{$prgHdr}{@{$prgHdrC[$class]}};
}
close $fh;
}