X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=util%2Fincore;h=26fcf95033fca7d79db11080de5a35409b0ca299;hp=4adb7e0573e98269305620e635205d160a0db89e;hb=73a9f60dd127df9ca05bec7afd835ff7c9bee9ae;hpb=b7724f6f55b7859c7f3173146b85680862f6cd49 diff --git a/util/incore b/util/incore index 4adb7e0573..26fcf95033 100755 --- a/util/incore +++ b/util/incore @@ -1,7 +1,11 @@ -#!/usr/bin/env perl -# -# Copyrifgr (c) 2011 The OpenSSL Project. +#! /usr/bin/env perl +# Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. # +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + # The script embeds fingerprint into ELF executable object, either # application binary or shared library. @@ -34,6 +38,7 @@ @e_ident{magic,class,data,version,osabi,abiver,pad}= unpack("a4C*",$elf); + $!=42; # signal fipsld to revert to two-step link die "not ELF file" if ($e_ident{magic} ne chr(0177)."ELF"); my $elf_bits = $e_ident{class}*32; # 32 or 64 @@ -377,13 +382,14 @@ $FIPS_text_endX = $exe->Lookup("FIPS_text_endX"); if (!$legacy_mode) { if (!$FIPS_text_startX || !$FIPS_text_endX) { print STDERR "@ARGV[$#ARGV] is not cross-compiler aware.\n"; - exit(1); + exit(42); # signal fipsld to revert to two-step link } $FINGERPRINT_ascii_value - = $exe->Lookup("FINGERPRINT_ascii_value") or die; + = $exe->Lookup("FINGERPRINT_ascii_value"); -} elsif ($FIPS_text_startX && $FIPS_text_endX) { +} +if ($FIPS_text_startX && $FIPS_text_endX) { $FIPS_text_start = $FIPS_text_startX; $FIPS_text_end = $FIPS_text_endX; } @@ -437,9 +443,12 @@ $fingerprint = FIPS_incore_fingerprint(); if ($legacy_mode) { print unpack("H*",$fingerprint); -} else { +} elsif (defined($FINGERPRINT_ascii_value)) { seek(FD,$FINGERPRINT_ascii_value->{st_offset},0) or die "$!"; print FD unpack("H*",$fingerprint) or die "$!"; +} else { + seek(FD,$FIPS_signature->{st_offset},0) or die "$!"; + print FD $fingerprint or die "$!"; } close (FD);