[llvm] [llvm-objcopy] Add --change-section-address (PR #98664)
James Henderson via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 19 02:40:11 PDT 2024
================
@@ -745,6 +745,52 @@ static Error handleArgs(const CommonConfig &Config, const ELFConfig &ELFConfig,
}
}
+ if (!Config.ChangeSectionAddress.empty()) {
+ if (Obj.isRelocatable()) {
+ StringMap<AddressUpdate> SectionsToUpdateAddress;
+ for (const SectionPatternAddressUpdate &PatternUpdate :
+ make_range(Config.ChangeSectionAddress.rbegin(),
+ Config.ChangeSectionAddress.rend())) {
+ for (SectionBase &Sec : Obj.sections()) {
+ if (PatternUpdate.SectionPattern.matches(Sec.Name)) {
+ if (SectionsToUpdateAddress
+ .try_emplace(Sec.Name, PatternUpdate.Update)
+ .second) {
+ if (PatternUpdate.Update.Absolute) {
+ Sec.Addr = PatternUpdate.Update.Value;
+ } else if (PatternUpdate.Update.Negative &&
+ Sec.Addr < PatternUpdate.Update.Value) {
+ return createStringError(
+ errc::invalid_argument,
+ "address 0x" + Twine::utohexstr(Sec.Addr) +
+ " cannot be decreased by 0x" +
+ Twine::utohexstr(PatternUpdate.Update.Value) +
+ ". The result would underflow");
+ } else if (!PatternUpdate.Update.Negative &&
----------------
jh7370 wrote:
Reorganise these into:
```
if (CaseThatTriggersAnError) {
return error
}
if (OtherCaseThatTriggersAnError) {
return error
}
...Remaining code...
```
https://github.com/llvm/llvm-project/pull/98664
More information about the llvm-commits
mailing list