[PATCH] D104186: [llvm-objcopy] Make ihex writer similar to binary writer
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 15 19:03:45 PDT 2021
MaskRay updated this revision to Diff 352319.
MaskRay edited the summary of this revision.
MaskRay added a comment.
add a test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104186/new/
https://reviews.llvm.org/D104186
Files:
llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-segments.yaml
llvm/test/tools/llvm-objcopy/ELF/ihex-writer.test
llvm/tools/llvm-objcopy/ELF/Object.cpp
Index: llvm/tools/llvm-objcopy/ELF/Object.cpp
===================================================================
--- llvm/tools/llvm-objcopy/ELF/Object.cpp
+++ llvm/tools/llvm-objcopy/ELF/Object.cpp
@@ -2666,32 +2666,15 @@
}
Error IHexWriter::finalize() {
- bool UseSegments = false;
- auto ShouldWrite = [](const SectionBase &Sec) {
- return (Sec.Flags & ELF::SHF_ALLOC) && Sec.Type != ELF::SHT_NOBITS &&
- Sec.Size > 0;
- };
- auto IsInPtLoad = [](const SectionBase &Sec) {
- return Sec.ParentSegment && Sec.ParentSegment->Type == ELF::PT_LOAD;
- };
-
// We can't write 64-bit addresses.
if (addressOverflows32bit(Obj.Entry))
return createStringError(errc::invalid_argument,
"Entry point address 0x%llx overflows 32 bits",
Obj.Entry);
- // If any section we're to write has segment then we
- // switch to using physical addresses. Otherwise we
- // use section virtual address.
for (const SectionBase &Sec : Obj.sections())
- if (ShouldWrite(Sec) && IsInPtLoad(Sec)) {
- UseSegments = true;
- break;
- }
-
- for (const SectionBase &Sec : Obj.sections())
- if (ShouldWrite(Sec) && (!UseSegments || IsInPtLoad(Sec))) {
+ if ((Sec.Flags & ELF::SHF_ALLOC) && Sec.Type != ELF::SHT_NOBITS &&
+ Sec.Size > 0) {
if (Error E = checkSection(Sec))
return E;
Sections.insert(&Sec);
Index: llvm/test/tools/llvm-objcopy/ELF/ihex-writer.test
===================================================================
--- llvm/test/tools/llvm-objcopy/ELF/ihex-writer.test
+++ llvm/test/tools/llvm-objcopy/ELF/ihex-writer.test
@@ -57,8 +57,11 @@
# SEGMENTS-NEXT: :0B001800303132333435363738394090
# SEGMENTS-NEXT: :0400280040414243CE
# SEGMENTS-NEXT: :0B003000505152535455565758596018
+# SEGMENTS-NEXT: :020000040020DA
+# SEGMENTS-NEXT: :03FFF80000000006
# SEGMENTS-NEXT: :0400000500100000E7
# SEGMENTS-NEXT: :00000001FF
+# SEGMENTS-NOT: {{.}}
# 'ExtendedAddr' (04) record shouldn't be created
# PT_NULL-NOT: :02000004
Index: llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-segments.yaml
===================================================================
--- llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-segments.yaml
+++ llvm/test/tools/llvm-objcopy/ELF/Inputs/ihex-elf-segments.yaml
@@ -43,10 +43,15 @@
AddressAlign: 0x8
- Name: .dummy
Type: SHT_PROGBITS
- Flags: [ ]
+ Flags: [ SHF_ALLOC ]
Address: 0x20FFF8
- Size: 65536
+ Size: 3
AddressAlign: 0x8
+ - Name: .nonalloc
+ Type: SHT_PROGBITS
+ Flags: [ ]
+ Address: 0x300000
+ Size: 1
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104186.352319.patch
Type: text/x-patch
Size: 2844 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210616/efa7c19c/attachment.bin>
More information about the llvm-commits
mailing list