[llvm] 6503aad - [llvm-objcopy][test] Improve empty section tests

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 26 08:58:46 PST 2020


Author: Fangrui Song
Date: 2020-02-26T08:57:23-08:00
New Revision: 6503aadcc6c96aecfd3489da5dc3887216948a47

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

LOG: [llvm-objcopy][test] Improve empty section tests

empty-sections.test: add two tests adapted from @jhenderson's https://reviews.llvm.org/D74755#1882221
strip-non-alloc.test: improve. D74755 will change the attribution of an empty section.

They mostly test the behavior of Object.cpp:sectionWithinSegment : how we attribute sections to segments.
`ParentSegment` can affect some subtle layout decisions.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D74879

Added: 
    

Modified: 
    llvm/test/tools/llvm-objcopy/ELF/empty-section.test
    llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-objcopy/ELF/empty-section.test b/llvm/test/tools/llvm-objcopy/ELF/empty-section.test
index 4216c5d9b57c..3ad1b7cae39c 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/empty-section.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/empty-section.test
@@ -1,55 +1,94 @@
-# RUN: yaml2obj %s -o %t
-# RUN: llvm-objcopy %t %t2
-# RUN: llvm-readobj --sections %t2 | FileCheck %s
+## .empty is not covered by a segment. Its offset is moved to 0x200 to fill the gap.
+# RUN: yaml2obj --docnum=1 %s -o %t1
+# RUN: llvm-objcopy %t1 %t1.out
+# RUN: llvm-readelf -S %t1.out | FileCheck --check-prefix=CHECK1 %s
 
-!ELF
+# CHECK1:      Name         Type     Address          Off
+# CHECK1-NEXT:              NULL     0000000000000000 000000
+# CHECK1-NEXT: .foo         PROGBITS 0000000000000000 000100
+# CHECK1-NEXT: .empty       PROGBITS 0000000000001000 000200
+# CHECK1-NEXT: .baz         PROGBITS 0000000000001000 001000
+
+--- !ELF
 FileHeader:
-  Class:           ELFCLASS64
-  Data:            ELFDATA2LSB
-  Type:            ET_EXEC
-  Machine:         EM_X86_64
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
 Sections:
-  - Name:            .text
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-    Address:         0x0
-    AddressAlign:    0x0000000000001000
-    Content:         "00000000"
-  - Name:            .empty
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC ]
-    Address:         0x1000
-    AddressAlign:    0x0000000000001000
-    Content:         ""
-  - Name:            .data
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC ]
-    Address:         0x1000
-    AddressAlign:    0x0000000000001000
-    Content:         "00000000"
+  - Name:         gap
+    Type:         Fill
+    Size:         0xE00
+  - Name:         .foo
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x100
+    Address:      0
+    Size:         0x100
+  - Name:         .empty
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    Address:      0x1000
+  - Name:         .baz
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x1000
+    Address:      0x1000
+    Size:         0x100
 
+## Test that we attribute .empty to the second segment. Its offset is assigned according to
+## the p_offset of the second segment.
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: llvm-objcopy %t2 %t2.out
+# RUN: llvm-readelf -S -l %t2.out | FileCheck --check-prefix=CHECK2 %s
 
-# CHECK:      Name: .text
-# CHECK-NEXT: Type: SHT_PROGBITS
-# CHECK-NEXT: Flags [
-# CHECK-NEXT:   SHF_ALLOC
-# CHECK-NEXT:   SHF_EXECINSTR
-# CHECK-NEXT: ]
+# CHECK2:      Name         Type     Address          Off
+# CHECK2-NEXT:              NULL     0000000000000000 000000
+# CHECK2-NEXT: .foo         PROGBITS 0000000000000000 000100
+# CHECK2-NEXT: .empty       PROGBITS 0000000000001000 001000
+# CHECK2-NEXT: .baz         PROGBITS 0000000000001000 001000
 
-# CHECK:      Name: .empty
-# CHECK-NEXT: Type: SHT_PROGBITS
-# CHECK-NEXT: Flags [
-# CHECK-NEXT:   SHF_ALLOC
-# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x1000
-# CHECK-NEXT: Offset: 0x2000
-# CHECK-NEXT: Size: 0
+# CHECK2:      Type  Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
+# CHECK2-NEXT: LOAD  0x000100 0x0000000000000000 0x0000000000000000 0x000100 0x000100     0x100
+# CHECK2-NEXT: LOAD  0x001000 0x0000000000001000 0x0000000000001000 0x000100 0x000100     0x1000
 
-# CHECK:      Name: .data
-# CHECK-NEXT: Type: SHT_PROGBITS
-# CHECK-NEXT: Flags [
-# CHECK-NEXT:   SHF_ALLOC
-# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x1000
-# CHECK-NEXT: Offset: 0x2000
-# CHECK-NEXT: Size: 4
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:         gap
+    Type:         Fill
+    Size:         0xE00
+  - Name:         .foo
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x100
+    Address:      0
+    Size:         0x100
+  - Name:         .empty
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    Address:      0x1000
+  - Name:         .baz
+    Type:         SHT_PROGBITS
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x1000
+    Address:      0x1000
+    Size:         0x100
+ProgramHeaders:
+  - Type:  PT_LOAD
+    VAddr: 0
+    PAddr: 0
+    Align: 0x100
+    Sections:
+      - Section: .foo
+  - Type:  PT_LOAD
+    VAddr: 0x1000
+    PAddr: 0x1000
+    Align: 0x1000
+    Sections:
+      - Section: .empty
+      - Section: .baz

diff  --git a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
index cf6561d0891a..1cfb596ea5cf 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/strip-non-alloc.test
@@ -1,8 +1,14 @@
-# RUN: yaml2obj %s -o %t
-# RUN: llvm-objcopy --strip-non-alloc %t %t2
-# RUN: llvm-readobj --file-headers --sections %t2 | FileCheck %s
+# RUN: yaml2obj --docnum=1 %s -o %t
+# RUN: llvm-objcopy --strip-non-alloc %t %t.out
+# RUN: llvm-readobj --file-headers --sections %t.out | FileCheck %s
 
-!ELF
+# CHECK: SectionHeaderCount: 5
+# CHECK: Name: non_alloc_in_segment
+# CHECK: Name: .bss
+# CHECK: Name: .text
+# CHECK: Name: .shstrtab
+
+--- !ELF
 FileHeader:
   Class:           ELFCLASS64
   Data:            ELFDATA2LSB
@@ -19,18 +25,38 @@ Sections:
   - Name:            .text
     Type:            SHT_PROGBITS
     Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-  - Name:            .blarg
-    Type:            SHT_PROGBITS
-    Flags:           [ ]
 ProgramHeaders:
   # Use an arbitrary segment type to show that the segment type is unimportant.
   - Type: 0x61234567
     Sections:
       - Section: non_alloc_in_segment
 
-# CHECK: SectionHeaderCount: 5
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: llvm-objcopy --strip-non-alloc %t2 %t2.out
+# RUN: llvm-readobj --file-headers --sections %t2.out | FileCheck --check-prefix=CHECK2 %s
 
-# CHECK: Name: non_alloc_in_segment
-# CHECK: Name: .bss
-# CHECK: Name: .text
-# CHECK: Name: .shstrtab
+# CHECK2: SectionHeaderCount: 3
+# CHECK2: Name: .text
+# CHECK2: Name: .shstrtab
+
+--- !ELF
+FileHeader:
+  Class:     ELFCLASS64
+  Data:      ELFDATA2LSB
+  Type:      ET_REL
+  Machine:   EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
+## empty_trailing_non_alloc is considered included by the segment,
+## so it will be retained.
+  - Name:    empty_trailing_non_alloc
+    Type:    SHT_PROGBITS
+  - Name:    trailing_non_alloc
+    Type:    SHT_PROGBITS
+    Content: 00
+ProgramHeaders:
+  - Type: 0x61234567
+    Sections:
+      - Section: .text


        


More information about the llvm-commits mailing list