[llvm] [llvm-objcopy] Support SREC output format (PR #75874)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 19 11:52:36 PST 2024


================
@@ -45,26 +29,164 @@
 # CHECK-NEXT: S30A8000100000010203045B
 # CHECK-NEXT: S70500000000FA
 
-# PADDR: S00400002DCE
-# PADDR-NEXT: S214100000000102030405060708090A0B0C0D0E0F63
-# PADDR-NEXT: S20910001010111213147C
-# PADDR-NEXT: S20F10001830313233343536373839407B
-# PADDR-NEXT: S20810002840414243B9
-# PADDR-NEXT: S20F100030505152535455565758596003
-# PADDR-NEXT: S20720FFF8000000E1
-# PADDR-NEXT: S804100000EB
+# ENTRY: S00400002DCE
+# ENTRY-NEXT: S705F00000000A
+
+# BAD_START: entry point address 0xf00000000 overflows 32 bits
+
+# BAD_EXTENDED_START: entry point address 0xffffffff0f000000 overflows 32 bits
 
-# BAD-ADDR: Section '.text1' address range [0xfffffff8, 0x100000000] is not 32 bit
-# BAD-ADDR2: Section '.text2' address range [0xffffffff0, 0xffffffff4] is not 32 bit
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_EXEC
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .data1
+# Records for this section should come last.
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Content:         "11111111111111111111"
+    Address:         0xEFFFFF
+  - Name:            .data2
+# This section overlaps 24-bit address boundary, so we expect
+# its record type to be S3.
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Content:         "3031323334353637383940"
+    Address:         0xFFFFF8
+# Sign-extended addresses are OK.
+  - Name:            .data3
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0xFFFFFFFF80001000
+    Content:         "0001020304"
+  - Name:            .text
+# This section's contents exceeds default line length of 16 bytes
+# so we expect two lines created for it. Records for this section
+# should appear before records for the previous section.
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x1000
+    Content:         "000102030405060708090A0B0C0D0E0F1011121314"
+  - Name:            .bss
+# NOBITS sections are not written.
+    Type:            SHT_NOBITS
+    Flags:           [ SHF_ALLOC ]
+    Address:         0x10100
+    Size:            0x1000
+  - Name:            .dummy
+# Non-allocatable sections are not written.
+    Type:            SHT_PROGBITS
+    Flags:           [ ]
+    Address:         0x20FFF8
+    Size:            65536
+
+## Check that section address range overlapping 32 bit range
+## triggers an error
+# RUN: yaml2obj %s --docnum=2 -o %t.err
+# RUN: not llvm-objcopy -O srec --only-section=.text1 %t.err - 2>&1 \
+#   RUN: | FileCheck %s --check-prefix=BAD-ADDR
+# RUN: not llvm-objcopy -O srec --only-section=.text2 %t.err - 2>&1 \
+#   RUN: | FileCheck %s --check-prefix=BAD-ADDR2
+
+## Check that zero length section is not written
+# RUN: llvm-objcopy -O srec --only-section=.text %t.err - \
+#   RUN:| FileCheck %s --check-prefix=ZERO_SIZE_SEC
+
+# BAD-ADDR: section '.text1' address range [0xfffffff8, 0x100000000] is not 32 bit
+# BAD-ADDR2: section '.text2' address range [0xffffffff0, 0xffffffff4] is not 32 bit
 
 # there should be no records besides header and terminator
 # ZERO_SIZE_SEC-NOT: {{S[1-8]}}
----------------
quic-areg wrote:

Used the latter approach

https://github.com/llvm/llvm-project/pull/75874


More information about the llvm-commits mailing list