@@ -1311,6 +1311,7 @@ void ElfFile<ElfFileParamNames>::modifySoname(sonameMode op, const std::string &
1311
1311
}
1312
1312
1313
1313
changed = true ;
1314
+ this ->rewriteSections ();
1314
1315
}
1315
1316
1316
1317
template <ElfFileParams>
@@ -1319,6 +1320,7 @@ void ElfFile<ElfFileParamNames>::setInterpreter(const std::string & newInterpret
1319
1320
std::string & section = replaceSection (" .interp" , newInterpreter.size () + 1 );
1320
1321
setSubstr (section, 0 , newInterpreter + ' \0 ' );
1321
1322
changed = true ;
1323
+ this ->rewriteSections ();
1322
1324
}
1323
1325
1324
1326
@@ -1395,6 +1397,7 @@ void ElfFile<ElfFileParamNames>::removeRPath(Elf_Shdr & shdrDynamic) {
1395
1397
}
1396
1398
}
1397
1399
memset (last, 0 , sizeof (Elf_Dyn) * (dyn - last));
1400
+ this ->rewriteSections ();
1398
1401
}
1399
1402
1400
1403
template <ElfFileParams>
@@ -1541,6 +1544,7 @@ void ElfFile<ElfFileParamNames>::modifyRPath(RPathOp op,
1541
1544
newDyn.d_un .d_val = shdrDynStr.sh_size ;
1542
1545
setSubstr (newDynamic, 0 , std::string ((char *) &newDyn, sizeof (Elf_Dyn)));
1543
1546
}
1547
+ this ->rewriteSections ();
1544
1548
}
1545
1549
1546
1550
@@ -1570,6 +1574,8 @@ void ElfFile<ElfFileParamNames>::removeNeeded(const std::set<std::string> & libs
1570
1574
}
1571
1575
1572
1576
memset (last, 0 , sizeof (Elf_Dyn) * (dyn - last));
1577
+
1578
+ this ->rewriteSections ();
1573
1579
}
1574
1580
1575
1581
template <ElfFileParams>
@@ -1693,6 +1699,8 @@ void ElfFile<ElfFileParamNames>::replaceNeeded(const std::map<std::string, std::
1693
1699
--verNeedNum;
1694
1700
}
1695
1701
}
1702
+
1703
+ this ->rewriteSections ();
1696
1704
}
1697
1705
1698
1706
template <ElfFileParams>
@@ -1743,6 +1751,8 @@ void ElfFile<ElfFileParamNames>::addNeeded(const std::set<std::string> & libs)
1743
1751
}
1744
1752
1745
1753
changed = true ;
1754
+
1755
+ this ->rewriteSections ();
1746
1756
}
1747
1757
1748
1758
template <ElfFileParams>
@@ -1799,6 +1809,7 @@ void ElfFile<ElfFileParamNames>::noDefaultLib()
1799
1809
setSubstr (newDynamic, 0 , std::string ((char *) &newDyn, sizeof (Elf_Dyn)));
1800
1810
}
1801
1811
1812
+ this ->rewriteSections ();
1802
1813
changed = true ;
1803
1814
}
1804
1815
@@ -1828,6 +1839,7 @@ void ElfFile<ElfFileParamNames>::clearSymbolVersions(const std::set<std::string>
1828
1839
}
1829
1840
}
1830
1841
changed = true ;
1842
+ this ->rewriteSections ();
1831
1843
}
1832
1844
1833
1845
static bool printInterpreter = false ;
@@ -1878,28 +1890,15 @@ static void patchElf2(ElfFile && elfFile, const FileContents & fileContents, con
1878
1890
1879
1891
if (printNeeded) elfFile.printNeededLibs ();
1880
1892
1881
- if (!neededLibsToRemove.empty ()) {
1882
- elfFile.removeNeeded (neededLibsToRemove);
1883
- elfFile.rewriteSections ();
1884
- }
1885
- if (!neededLibsToReplace.empty ()) {
1886
- elfFile.replaceNeeded (neededLibsToReplace);
1887
- elfFile.rewriteSections ();
1888
- }
1889
- if (!neededLibsToAdd.empty ()) {
1890
- elfFile.addNeeded (neededLibsToAdd);
1891
- elfFile.rewriteSections ();
1892
- }
1893
- if (!symbolsToClearVersion.empty ()) {
1894
- elfFile.clearSymbolVersions (symbolsToClearVersion);
1895
- elfFile.rewriteSections ();
1896
- }
1893
+ elfFile.removeNeeded (neededLibsToRemove);
1894
+ elfFile.replaceNeeded (neededLibsToReplace);
1895
+ elfFile.addNeeded (neededLibsToAdd);
1896
+ elfFile.clearSymbolVersions (symbolsToClearVersion);
1897
1897
1898
1898
if (noDefaultLib)
1899
1899
elfFile.noDefaultLib ();
1900
1900
1901
1901
if (elfFile.isChanged ()){
1902
- elfFile.rewriteSections ();
1903
1902
writeFile (fileName, elfFile.fileContents );
1904
1903
} else if (alwaysWrite) {
1905
1904
debug (" not modified, but alwaysWrite=true\n " );
0 commit comments