Skip to content

Commit ffecd72

Browse files
[llvm-objcopy] Let --change-section-lma change segments wth filesz=0,… (#127724)
… 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. Additionally, segments with file size > 0 and memory size = 0 will no longer be modified for the purposes of --change-section-lma as they shouldn't be part of the loaded memory image. Fixes #124680
1 parent 1618d09 commit ffecd72

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
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.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: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,21 @@
1313
# RUN: not llvm-objcopy --change-section-lma *+0x100000000 %t 2>&1 | FileCheck %s --check-prefix=ERR-OVERFLOW
1414

1515
# CHECK-PLUS-PROGRAMS: Type Offset VirtAddr PhysAddr FileSiz MemSiz
16-
# 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
19-
# CHECK-PLUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x0000000000001220 0x000010 0x000000
16+
# CHECK-PLUS-PROGRAMS: PHDR 0x000002 0x0000000000001102 0x0000000000001122 0x000038 0x000038
17+
# CHECK-PLUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x0000000000001120 0x0002c8 0x0002c8
18+
# CHECK-PLUS-PROGRAMS: LOAD 0x0002c8 0xffffffff00005100 0xffffffff00006120 0x000100 0x000100
19+
# CHECK-PLUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x0000000000001220 0x000010 0x000010
2020
# CHECK-PLUS-PROGRAMS: NOTE 0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
21+
# CHECK-PLUS-PROGRAMS: LOAD 0x0003c8 0x0000000000001300 0x0000000000001320 0x000000 0x000010
22+
# CHECK-PLUS-PROGRAMS: NOTE 0x000378 0x0000000000000000 0x0000000000000000 0x000010 0x000000
2123

22-
# 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
25-
# CHECK-MINUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x00000000000011d0 0x000010 0x000000
24+
# CHECK-MINUS-PROGRAMS: PHDR 0x000002 0x0000000000001102 0x00000000000010d2 0x000038 0x000038
25+
# CHECK-MINUS-PROGRAMS: LOAD 0x000000 0x0000000000001100 0x00000000000010d0 0x0002c8 0x0002c8
26+
# CHECK-MINUS-PROGRAMS: LOAD 0x0002c8 0xffffffff00005100 0xffffffff000060d0 0x000100 0x000100
27+
# CHECK-MINUS-PROGRAMS: NOTE 0x000358 0x0000000000001200 0x00000000000011d0 0x000010 0x000010
2628
# CHECK-MINUS-PROGRAMS: NOTE 0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
29+
# CHECK-MINUS-PROGRAMS: LOAD 0x0003c8 0x0000000000001300 0x00000000000012d0 0x000000 0x000010
30+
# CHECK-MINUS-PROGRAMS: NOTE 0x000378 0x0000000000000000 0x0000000000000000 0x000010 0x000000
2731

2832
# CHECK-PLUS-SECTIONS: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
2933
# CHECK-PLUS-SECTIONS: .text1
@@ -55,9 +59,13 @@ Sections:
5559
- Name: .text2
5660
Type: SHT_PROGBITS
5761
Size: 0x100
62+
- Name: .bss1
63+
Type: SHT_NOBITS
64+
Size: 0x10
5865
ProgramHeaders:
5966
- Type: PT_PHDR
6067
FileSize: 0x38
68+
MemSize: 0x38
6169
Offset: 0x2
6270
VAddr: 0x1102
6371
- Type: PT_LOAD
@@ -72,8 +80,18 @@ ProgramHeaders:
7280
LastSec: .text2
7381
- Type: PT_NOTE
7482
FileSize: 0x10
83+
MemSize: 0x10
7584
VAddr: 0x1200
7685
Offset: 0x358
7786
- Type: PT_NOTE
7887
FileSize: 0x0
88+
MemSize: 0x0
7989
Offset: 0x368
90+
- Type: PT_LOAD
91+
VAddr: 0x1300
92+
FirstSec: .bss1
93+
LastSec: .bss1
94+
- Type: PT_NOTE
95+
FileSize: 0x10
96+
MemSize: 0x0
97+
Offset: 0x378

0 commit comments

Comments
 (0)