@@ -206,7 +206,7 @@ template <class ELFT> class ELFState {
206
206
NameToIdxMap DynSymN2I;
207
207
ELFYAML::Object &Doc;
208
208
209
- std::vector<std::pair<unsigned , ELFYAML::Section>>
209
+ std::vector<std::pair<Elf_Shdr * , ELFYAML::Section>>
210
210
SectionHeadersOverrideHelper;
211
211
212
212
StringSet<> ExcludedSectionHeaders;
@@ -849,7 +849,7 @@ void ELFState<ELFT>::initSectionHeaders(std::vector<Elf_Shdr> &SHeaders,
849
849
}
850
850
851
851
LocationCounter += SHeader.sh_size ;
852
- SectionHeadersOverrideHelper.push_back ({SN2I. get (Sec-> Name ) , *Sec});
852
+ SectionHeadersOverrideHelper.push_back ({&SHeader , *Sec});
853
853
continue ;
854
854
}
855
855
@@ -903,15 +903,15 @@ void ELFState<ELFT>::initSectionHeaders(std::vector<Elf_Shdr> &SHeaders,
903
903
}
904
904
905
905
LocationCounter += SHeader.sh_size ;
906
- SectionHeadersOverrideHelper.push_back ({SN2I. get (Sec-> Name ) , *Sec});
906
+ SectionHeadersOverrideHelper.push_back ({&SHeader , *Sec});
907
907
}
908
908
}
909
909
910
910
template <class ELFT >
911
911
void ELFState<ELFT>::overrideSectionHeaders(std::vector<Elf_Shdr> &SHeaders) {
912
- for (std::pair<unsigned , ELFYAML::Section> &IndexAndSec :
912
+ for (std::pair<Elf_Shdr * , ELFYAML::Section> &HeaderAndSec :
913
913
SectionHeadersOverrideHelper)
914
- overrideFields<ELFT>(&IndexAndSec .second , SHeaders[IndexAndSec .first ] );
914
+ overrideFields<ELFT>(&HeaderAndSec .second , *HeaderAndSec .first );
915
915
}
916
916
917
917
template <class ELFT >
@@ -2099,7 +2099,9 @@ bool ELFState<ELFT>::writeELF(raw_ostream &OS, ELFYAML::Object &Doc,
2099
2099
// Now we can decide segment offsets.
2100
2100
State.setProgramHeaderLayout (PHeaders, SHeaders);
2101
2101
2102
- // Override section fields if requested.
2102
+ // Override section fields, if requested. This needs to happen after program
2103
+ // header layout happens, because otherwise the layout will use the new
2104
+ // values.
2103
2105
State.overrideSectionHeaders (SHeaders);
2104
2106
2105
2107
bool ReachedLimit = CBA.getOffset () > MaxSize;
0 commit comments