Skip to content

Commit 5e39ac8

Browse files
committed
[llvm-objcopy] Let --change-section-lma change segments wth filesz=0, memsz>0
Currently, segments with a file size of 0 are ignored for the purposes of --change-section-lma, regardless of their memory size. It seems reasonable to me to modify such segments given that we're changing the LMA for all sections and these LMAs may be used during loading. GNU objcopy also seems to adjust such segments. Fixes #124680
1 parent 5ecce45 commit 5e39ac8

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,7 @@ static Error handleArgs(const CommonConfig &Config, const ELFConfig &ELFConfig,
824824

825825
if (Config.ChangeSectionLMAValAll != 0) {
826826
for (Segment &Seg : Obj.segments()) {
827-
if (Seg.FileSize > 0) {
827+
if (Seg.FileSize > 0 || Seg.MemSize > 0) {
828828
if (Config.ChangeSectionLMAValAll > 0 &&
829829
Seg.PAddr > std::numeric_limits<uint64_t>::max() -
830830
Config.ChangeSectionLMAValAll) {

llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@
1414

1515
# CHECK-PLUS-PROGRAMS: Type Offset VirtAddr PhysAddr FileSiz MemSiz
1616
# CHECK-PLUS-PROGRAMS: PHDR 0x000002 0x0000000000001102 0x0000000000001122 0x000038 0x000000
17-
# CHECK-PLUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x0000000000001120 0x000258 0x000258
18-
# CHECK-PLUS-PROGRAMS: LOAD 0x000258 0xffffffff00005100 0xffffffff00006120 0x000100 0x000100
17+
# CHECK-PLUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x0000000000001120 0x000290 0x000290
18+
# CHECK-PLUS-PROGRAMS: LOAD 0x000290 0xffffffff00005100 0xffffffff00006120 0x000100 0x000100
1919
# CHECK-PLUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x0000000000001220 0x000010 0x000000
2020
# CHECK-PLUS-PROGRAMS: NOTE 0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
21+
# CHECK-PLUS-PROGRAMS: LOAD 0x000390 0x0000000000001300 0x0000000000001320 0x000000 0x000010
2122

2223
# CHECK-MINUS-PROGRAMS: PHDR 0x000002 0x0000000000001102 0x00000000000010d2 0x000038 0x000000
23-
# CHECK-MINUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x00000000000010d0 0x000258 0x000258
24-
# CHECK-MINUS-PROGRAMS: LOAD 0x000258 0xffffffff00005100 0xffffffff000060d0 0x000100 0x000100
24+
# CHECK-MINUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x00000000000010d0 0x000290 0x000290
25+
# CHECK-MINUS-PROGRAMS: LOAD 0x000290 0xffffffff00005100 0xffffffff000060d0 0x000100 0x000100
2526
# CHECK-MINUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x00000000000011d0 0x000010 0x000000
2627
# CHECK-MINUS-PROGRAMS: NOTE 0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
28+
# CHECK-MINUS-PROGRAMS: LOAD 0x000390 0x0000000000001300 0x00000000000012d0 0x000000 0x000010
2729

2830
# CHECK-PLUS-SECTIONS: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
2931
# CHECK-PLUS-SECTIONS: .text1
@@ -55,6 +57,9 @@ Sections:
5557
- Name: .text2
5658
Type: SHT_PROGBITS
5759
Size: 0x100
60+
- Name: .bss1
61+
Type: SHT_NOBITS
62+
Size: 0x10
5863
ProgramHeaders:
5964
- Type: PT_PHDR
6065
FileSize: 0x38
@@ -77,3 +82,7 @@ ProgramHeaders:
7782
- Type: PT_NOTE
7883
FileSize: 0x0
7984
Offset: 0x368
85+
- Type: PT_LOAD
86+
VAddr: 0x1300
87+
FirstSec: .bss1
88+
LastSec: .bss1

0 commit comments

Comments
 (0)