|
| 1 | +## Show that llvm-objcopy adds a new section into the object if |
| 2 | +## --add-section is given. |
| 3 | + |
| 4 | +# RUN: yaml2obj --docnum=1 %s -o %t.64bit |
| 5 | +# RUN: yaml2obj --docnum=2 %s -o %t.32bit |
| 6 | +# RUN: echo -n abcdefg > %t.data |
| 7 | + |
| 8 | +## Error case 1: Nonexistent input file is specified by --add-section. |
| 9 | +# RUN: not llvm-objcopy --add-section __TEXT,__text=%t.missing %t.64bit %t.nonexistent-file 2>&1 \ |
| 10 | +# RUN: | FileCheck %s -DINPUT=%t.64bit -DSECTION_DATA_FILE=%t.missing --check-prefix=NONEXSITENT-FILE |
| 11 | +# NONEXSITENT-FILE: error: '[[INPUT]]': '[[SECTION_DATA_FILE]]': {{[Nn]}}o such file or directory |
| 12 | + |
| 13 | +## Error case 2: Too long segment name. |
| 14 | +# RUN: not llvm-objcopy --add-section __TOOOOOOOOO_LONG,__text=%t.data %t.64bit %t.too-long-seg-name 2>&1 \ |
| 15 | +# RUN: | FileCheck %s -DINPUT=%t.64bit --check-prefix=TOO-LONG-SEG-NAME |
| 16 | +# TOO-LONG-SEG-NAME: error: '[[INPUT]]': too long segment name: '__TOOOOOOOOO_LONG' |
| 17 | + |
| 18 | +## Case 1: Add a new section into an existing segment. |
| 19 | +# RUN: llvm-objcopy --add-section __TEXT,__text=%t.data %t.64bit %t.out1.64bit |
| 20 | +# RUN: llvm-objcopy --add-section __TEXT,__text=%t.data %t.32bit %t.out1.32bit |
| 21 | +# RUN: llvm-readobj --sections --section-data %t.out1.64bit \ |
| 22 | +# RUN: | FileCheck %s --check-prefixes=64BIT,COMMON,CASE1 |
| 23 | +# RUN: llvm-readobj --sections --section-data %t.out1.32bit \ |
| 24 | +# RUN: | FileCheck %s --check-prefixes=32BIT,COMMON,CASE1 |
| 25 | + |
| 26 | +## Case 2: Add a new section into a nonexistent segment. |
| 27 | +# RUN: llvm-objcopy --add-section __FOO,__bar=%t.data %t.64bit %t.out2.64bit |
| 28 | +# RUN: llvm-objcopy --add-section __FOO,__bar=%t.data %t.32bit %t.out2.32bit |
| 29 | +# RUN: llvm-readobj --sections --section-data --macho-segment %t.out2.64bit \ |
| 30 | +# RUN: | FileCheck %s --check-prefixes=64BIT,COMMON,CASE2,CASE2-64BIT |
| 31 | +# RUN: llvm-readobj --sections --section-data --macho-segment %t.out2.32bit \ |
| 32 | +# RUN: | FileCheck %s --check-prefixes=32BIT,COMMON,CASE2,CASE2-32BIT |
| 33 | + |
| 34 | +## Case 3: Add a new section with /dev/null. |
| 35 | +# RUN: llvm-objcopy --add-section __TEXT,__text=/dev/null %t.64bit %t.devnull |
| 36 | +# RUN: llvm-readobj --sections --section-data %t.devnull \ |
| 37 | +# RUN: | FileCheck %s --check-prefixes=64BIT,COMMON,DEVNULL |
| 38 | + |
| 39 | +## 64-bit binary |
| 40 | +--- !mach-o |
| 41 | +FileHeader: |
| 42 | + magic: 0xFEEDFACF |
| 43 | + cputype: 0x01000007 |
| 44 | + cpusubtype: 0x00000003 |
| 45 | + filetype: 0x00000001 |
| 46 | + ncmds: 1 |
| 47 | + sizeofcmds: 152 |
| 48 | + flags: 0x00002000 |
| 49 | + reserved: 0x00000000 |
| 50 | +LoadCommands: |
| 51 | + - cmd: LC_SEGMENT_64 |
| 52 | + cmdsize: 152 |
| 53 | + segname: '' |
| 54 | + vmaddr: 0 |
| 55 | + vmsize: 4 |
| 56 | + fileoff: 184 |
| 57 | + filesize: 4 |
| 58 | + maxprot: 7 |
| 59 | + initprot: 7 |
| 60 | + nsects: 1 |
| 61 | + flags: 0 |
| 62 | + Sections: |
| 63 | + - sectname: __text |
| 64 | + segname: __TEXT |
| 65 | + addr: 0x0000000000000000 |
| 66 | + content: 'AABBCCDD' |
| 67 | + size: 4 |
| 68 | + offset: 184 |
| 69 | + align: 0 |
| 70 | + reloff: 0x00000000 |
| 71 | + nreloc: 0 |
| 72 | + flags: 0x80000400 |
| 73 | + reserved1: 0x00000000 |
| 74 | + reserved2: 0x00000000 |
| 75 | + reserved3: 0x00000000 |
| 76 | + |
| 77 | +## 32-bit binary |
| 78 | +--- !mach-o |
| 79 | +FileHeader: |
| 80 | + magic: 0xFEEDFACE |
| 81 | + cputype: 0x00000007 |
| 82 | + cpusubtype: 0x00000003 |
| 83 | + filetype: 0x00000001 |
| 84 | + ncmds: 1 |
| 85 | + sizeofcmds: 124 |
| 86 | + flags: 0x00002000 |
| 87 | +LoadCommands: |
| 88 | + - cmd: LC_SEGMENT |
| 89 | + cmdsize: 124 |
| 90 | + segname: '' |
| 91 | + vmaddr: 0 |
| 92 | + vmsize: 4 |
| 93 | + fileoff: 184 |
| 94 | + filesize: 4 |
| 95 | + maxprot: 7 |
| 96 | + initprot: 7 |
| 97 | + nsects: 1 |
| 98 | + flags: 0 |
| 99 | + Sections: |
| 100 | + - sectname: __text |
| 101 | + segname: __TEXT |
| 102 | + addr: 0x0000000000000000 |
| 103 | + content: 'AABBCCDD' |
| 104 | + size: 4 |
| 105 | + offset: 184 |
| 106 | + align: 0 |
| 107 | + reloff: 0x00000000 |
| 108 | + nreloc: 0 |
| 109 | + flags: 0x80000400 |
| 110 | + reserved1: 0x00000000 |
| 111 | + reserved2: 0x00000000 |
| 112 | + reserved3: 0x00000000 |
| 113 | + |
| 114 | +# COMMON: Index: 0 |
| 115 | +# COMMON-NEXT: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| 116 | +# COMMON-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| 117 | +# COMMON: Index: 1 |
| 118 | +# CASE1-NEXT: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| 119 | +# CASE1-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| 120 | +# CASE2-NEXT: Name: __bar (5F 5F 62 61 72 00 00 00 00 00 00 00 00 00 00 00) |
| 121 | +# CASE2-NEXT: Segment: __FOO (5F 5F 46 4F 4F 00 00 00 00 00 00 00 00 00 00 00) |
| 122 | +# DEVNULL-NEXT: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00) |
| 123 | +# DEVNULL-NEXT: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) |
| 124 | +# COMMON-NEXT: Address: 0x0 |
| 125 | +# CASE1-NEXT: Size: 0x7 |
| 126 | +# CASE2-NEXT: Size: 0x7 |
| 127 | +# DEVNULL-NEXT: Size: 0x0 |
| 128 | +# 64BIT-NEXT: Offset: 340 |
| 129 | +# 32BIT-NEXT: Offset: 280 |
| 130 | +# COMMON-NEXT: Alignment: 0 |
| 131 | +# COMMON-NEXT: RelocationOffset: 0x0 |
| 132 | +# COMMON-NEXT: RelocationCount: 0 |
| 133 | +# COMMON-NEXT: Type: Regular (0x0) |
| 134 | +# COMMON-NEXT: Attributes [ (0x0) |
| 135 | +# COMMON-NEXT: ] |
| 136 | +# COMMON-NEXT: Reserved1: 0x0 |
| 137 | +# COMMON-NEXT: Reserved2: 0x0 |
| 138 | +# 64BIT-NEXT: Reserved3: 0x0 |
| 139 | +# COMMON-NEXT: SectionData ( |
| 140 | +# CASE1-NEXT: 0000: 61626364 656667 |abcdefg| |
| 141 | +# CASE2-NEXT: 0000: 61626364 656667 |abcdefg| |
| 142 | +# COMMON-NEXT: ) |
| 143 | + |
| 144 | +# CASE2: Segment { |
| 145 | +# CASE2-64BIT-NEXT: Cmd: LC_SEGMENT_64 |
| 146 | +# CASE2-32BIT-NEXT: Cmd: LC_SEGMENT{{$}} |
| 147 | +# CASE2-NEXT: Name: |
| 148 | +# CASE2-64BIT-NEXT: Size: 152 |
| 149 | +# CASE2-32BIT-NEXT: Size: 124 |
| 150 | +# CASE2-NEXT: vmaddr: 0x0 |
| 151 | +# CASE2-NEXT: vmsize: 0x4 |
| 152 | +# CASE2-64BIT-NEXT: fileoff: 336 |
| 153 | +# CASE2-32BIT-NEXT: fileoff: 276 |
| 154 | +# CASE2-NEXT: filesize: 4 |
| 155 | +# CASE2-NEXT: maxprot: rwx |
| 156 | +# CASE2-NEXT: initprot: rwx |
| 157 | +# CASE2-NEXT: nsects: 1 |
| 158 | +# CASE2-NEXT: flags: 0x0 |
| 159 | +# CASE2-NEXT: } |
| 160 | +# CASE2-NEXT: Segment { |
| 161 | +# CASE2-64BIT-NEXT: Cmd: LC_SEGMENT_64 |
| 162 | +# CASE2-32BIT-NEXT: Cmd: LC_SEGMENT{{$}} |
| 163 | +# CASE2-NEXT: Name: __FOO |
| 164 | +# CASE2-64BIT-NEXT: Size: 152 |
| 165 | +# CASE2-32BIT-NEXT: Size: 124 |
| 166 | +# CASE2-NEXT: vmaddr: 0x0 |
| 167 | +# CASE2-NEXT: vmsize: 0x7 |
| 168 | +# CASE2-64BIT-NEXT: fileoff: 340 |
| 169 | +# CASE2-32BIT-NEXT: fileoff: 280 |
| 170 | +# CASE2-NEXT: filesize: 7 |
| 171 | +# CASE2-NEXT: maxprot: --- |
| 172 | +# CASE2-NEXT: initprot: --- |
| 173 | +# CASE2-NEXT: nsects: 1 |
| 174 | +# CASE2-NEXT: flags: 0x0 |
| 175 | +# CASE2-NEXT: } |
0 commit comments