@@ -813,7 +813,8 @@ Error RewriteInstance::run() {
813813 if (opts::Instrument && !BC->IsStaticExecutable ) {
814814 if (Error E = updateRtInitReloc ())
815815 return E;
816- updateRtFiniReloc ();
816+ if (Error E = updateRtFiniReloc ())
817+ return E;
817818 }
818819
819820 if (opts::OutputFilename == " /dev/null" ) {
@@ -1592,26 +1593,29 @@ Error RewriteInstance::updateRtInitReloc() {
15921593 return Error::success ();
15931594}
15941595
1595- void RewriteInstance::updateRtFiniReloc () {
1596+ Error RewriteInstance::updateRtFiniReloc () {
15961597 // Updating DT_FINI is handled by patchELFDynamic.
15971598 if (BC->FiniAddress )
1598- return ;
1599+ return Error::success () ;
15991600
16001601 const RuntimeLibrary *RT = BC->getRuntimeLibrary ();
16011602 if (!RT || !RT->getRuntimeFiniAddress ())
1602- return ;
1603+ return Error::success () ;
16031604
1604- assert (BC->FiniArrayAddress && BC->FiniArraySize &&
1605- " inconsistent .fini_array state" );
1605+ if (!BC->FiniArrayAddress || !BC->FiniArraySize )
1606+ return createStringError (std::errc::not_supported,
1607+ " inconsistent .fini_array state" );
16061608
16071609 ErrorOr<BinarySection &> FiniArraySection =
16081610 BC->getSectionForAddress (*BC->FiniArrayAddress );
1609- assert (FiniArraySection && " .fini_array removed" );
1611+ if (!FiniArraySection)
1612+ return createStringError (std::errc::not_supported, " .fini_array removed" );
16101613
16111614 if (std::optional<Relocation> Reloc =
16121615 FiniArraySection->takeDynamicRelocationAt (0 )) {
1613- assert (Reloc->Addend == BC->FiniFunctionAddress &&
1614- " inconsistent .fini_array dynamic relocation" );
1616+ if (Reloc->Addend != BC->FiniFunctionAddress )
1617+ return createStringError (std::errc::not_supported,
1618+ " inconsistent .fini_array dynamic relocation" );
16151619 Reloc->Addend = RT->getRuntimeFiniAddress ();
16161620 FiniArraySection->addDynamicRelocation (*Reloc);
16171621 }
@@ -1624,6 +1628,7 @@ void RewriteInstance::updateRtFiniReloc() {
16241628 FiniArraySection->addPendingRelocation (Relocation{
16251629 /* Offset*/ 0 , /* Symbol*/ nullptr , /* Type*/ Relocation::getAbs64 (),
16261630 /* Addend*/ RT->getRuntimeFiniAddress (), /* Value*/ 0 });
1631+ return Error::success ();
16271632}
16281633
16291634void RewriteInstance::registerFragments () {
0 commit comments