[llvm] ffecd72 - [llvm-objcopy] Let --change-section-lma change segments wth filesz=0,… (#127724)

via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 27 13:45:08 PST 2025


Author: Jonathon Penix
Date: 2025-02-27T13:45:04-08:00
New Revision: ffecd7247921512255ce4ba46c2a76eeca4e95fb

URL: https://github.com/llvm/llvm-project/commit/ffecd7247921512255ce4ba46c2a76eeca4e95fb
DIFF: https://github.com/llvm/llvm-project/commit/ffecd7247921512255ce4ba46c2a76eeca4e95fb.diff

LOG: [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

Added: 
    

Modified: 
    llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp
    llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp b/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp
index 9c78f7433ad33..1a31bfa2e0db3 100644
--- a/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp
+++ b/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp
@@ -824,7 +824,7 @@ static Error handleArgs(const CommonConfig &Config, const ELFConfig &ELFConfig,
 
   if (Config.ChangeSectionLMAValAll != 0) {
     for (Segment &Seg : Obj.segments()) {
-      if (Seg.FileSize > 0) {
+      if (Seg.MemSize > 0) {
         if (Config.ChangeSectionLMAValAll > 0 &&
             Seg.PAddr > std::numeric_limits<uint64_t>::max() -
                             Config.ChangeSectionLMAValAll) {

diff  --git a/llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test b/llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test
index c1cd1eb46d949..ee4648dc7aa81 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/change-section-lma.test
@@ -13,17 +13,21 @@
 # RUN: not llvm-objcopy --change-section-lma *+0x100000000 %t  2>&1 | FileCheck %s --check-prefix=ERR-OVERFLOW
 
 # CHECK-PLUS-PROGRAMS:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz
-# CHECK-PLUS-PROGRAMS:  PHDR           0x000002 0x0000000000001102 0x0000000000001122 0x000038 0x000000
-# CHECK-PLUS-PROGRAMS:  LOAD           0x000000 0x0000000000001100 0x0000000000001120 0x000258 0x000258
-# CHECK-PLUS-PROGRAMS:  LOAD           0x000258 0xffffffff00005100 0xffffffff00006120 0x000100 0x000100
-# CHECK-PLUS-PROGRAMS:  NOTE           0x000358 0x0000000000001200 0x0000000000001220 0x000010 0x000000
+# CHECK-PLUS-PROGRAMS:  PHDR           0x000002 0x0000000000001102 0x0000000000001122 0x000038 0x000038
+# CHECK-PLUS-PROGRAMS:  LOAD           0x000000 0x0000000000001100 0x0000000000001120 0x0002c8 0x0002c8
+# CHECK-PLUS-PROGRAMS:  LOAD           0x0002c8 0xffffffff00005100 0xffffffff00006120 0x000100 0x000100
+# CHECK-PLUS-PROGRAMS:  NOTE           0x000358 0x0000000000001200 0x0000000000001220 0x000010 0x000010
 # CHECK-PLUS-PROGRAMS:  NOTE           0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
+# CHECK-PLUS-PROGRAMS:  LOAD           0x0003c8 0x0000000000001300 0x0000000000001320 0x000000 0x000010
+# CHECK-PLUS-PROGRAMS:  NOTE           0x000378 0x0000000000000000 0x0000000000000000 0x000010 0x000000
 
-# CHECK-MINUS-PROGRAMS:  PHDR           0x000002 0x0000000000001102 0x00000000000010d2 0x000038 0x000000
-# CHECK-MINUS-PROGRAMS:  LOAD           0x000000 0x0000000000001100 0x00000000000010d0 0x000258 0x000258
-# CHECK-MINUS-PROGRAMS:  LOAD           0x000258 0xffffffff00005100 0xffffffff000060d0 0x000100 0x000100
-# CHECK-MINUS-PROGRAMS:  NOTE           0x000358 0x0000000000001200 0x00000000000011d0 0x000010 0x000000
+# CHECK-MINUS-PROGRAMS:  PHDR           0x000002 0x0000000000001102 0x00000000000010d2 0x000038 0x000038
+# CHECK-MINUS-PROGRAMS:  LOAD           0x000000 0x0000000000001100 0x00000000000010d0 0x0002c8 0x0002c8
+# CHECK-MINUS-PROGRAMS:  LOAD           0x0002c8 0xffffffff00005100 0xffffffff000060d0 0x000100 0x000100
+# CHECK-MINUS-PROGRAMS:  NOTE           0x000358 0x0000000000001200 0x00000000000011d0 0x000010 0x000010
 # CHECK-MINUS-PROGRAMS:  NOTE           0x000368 0x0000000000000000 0x0000000000000000 0x000000 0x000000
+# CHECK-MINUS-PROGRAMS:  LOAD           0x0003c8 0x0000000000001300 0x00000000000012d0 0x000000 0x000010
+# CHECK-MINUS-PROGRAMS:  NOTE           0x000378 0x0000000000000000 0x0000000000000000 0x000010 0x000000
 
 # CHECK-PLUS-SECTIONS:      [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
 # CHECK-PLUS-SECTIONS:           .text1
@@ -55,9 +59,13 @@ Sections:
   - Name:          .text2
     Type:          SHT_PROGBITS
     Size:          0x100
+  - Name:          .bss1
+    Type:          SHT_NOBITS
+    Size:          0x10
 ProgramHeaders:
   - Type:          PT_PHDR
     FileSize:      0x38
+    MemSize:       0x38
     Offset:        0x2
     VAddr:         0x1102
   - Type:          PT_LOAD
@@ -72,8 +80,18 @@ ProgramHeaders:
     LastSec:       .text2
   - Type:          PT_NOTE
     FileSize:      0x10
+    MemSize:       0x10
     VAddr:         0x1200
     Offset:        0x358
   - Type:          PT_NOTE
     FileSize:      0x0
+    MemSize:       0x0
     Offset:        0x368
+  - Type:          PT_LOAD
+    VAddr:         0x1300
+    FirstSec:      .bss1
+    LastSec:       .bss1
+  - Type:          PT_NOTE
+    FileSize:      0x10
+    MemSize:       0x0
+    Offset:        0x378


        


More information about the llvm-commits mailing list