Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm-objcopy][MachO] Handle relocation entries where r_extern is zero
Fix handling of relocations with r_extern == 0. If r_extern == 0 then r_symbolnum is an index of a section rather than a symbol index. Patch by Seiya Nuta and Alexander Shaposhnikov. Test plan: make check-all Differential revision: https://reviews.llvm.org/D78946
- Loading branch information
Alexander Shaposhnikov
committed
Apr 28, 2020
1 parent
bc03423
commit 0db3a5a
Showing
5 changed files
with
130 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
# RUN: yaml2obj %s -o %t | ||
|
||
## Show that llvm-objcopy copies relocation entries where r_extern = 0. | ||
# RUN: llvm-objcopy %t %t2 | ||
# RUN: cmp %t %t2 | ||
|
||
## Show that llvm-objcopy updates section indices properly. | ||
# RUN: llvm-objcopy --remove-section=__DATA,__foo %t %t3 | ||
# RUN: llvm-objdump --macho --reloc %t3 | FileCheck %s | ||
|
||
# CHECK: Relocation information (__DATA,__bar) 2 entries | ||
# CHECK-NEXT: address pcrel length extern type scattered symbolnum/value | ||
# CHECK-NEXT: 00000000 False quad False SUB False 2 (__DATA,__bar) | ||
# CHECK-NEXT: 00000000 False quad False UNSIGND False 1 (__TEXT,__text) | ||
|
||
--- !mach-o | ||
FileHeader: | ||
magic: 0xFEEDFACF | ||
cputype: 0x01000007 | ||
cpusubtype: 0x00000003 | ||
filetype: 0x00000001 | ||
ncmds: 1 | ||
sizeofcmds: 312 | ||
flags: 0x00000000 | ||
reserved: 0x00000000 | ||
LoadCommands: | ||
- cmd: LC_SEGMENT_64 | ||
cmdsize: 312 | ||
segname: '' | ||
vmaddr: 0 | ||
vmsize: 24 | ||
fileoff: 344 | ||
filesize: 24 | ||
maxprot: 7 | ||
initprot: 7 | ||
nsects: 3 | ||
flags: 0 | ||
Sections: | ||
- sectname: __text | ||
segname: __TEXT | ||
addr: 0x0000000000000000 | ||
size: 8 | ||
offset: 0x00000158 | ||
align: 0 | ||
reloff: 0x00000000 | ||
nreloc: 0 | ||
flags: 0x80000000 | ||
reserved1: 0x00000000 | ||
reserved2: 0x00000000 | ||
reserved3: 0x00000000 | ||
content: '0000000000000000' | ||
- sectname: __foo | ||
segname: __DATA | ||
addr: 0x0000000000000008 | ||
size: 8 | ||
offset: 0x00000160 | ||
align: 0 | ||
reloff: 0x00000000 | ||
nreloc: 0 | ||
flags: 0x00000000 | ||
reserved1: 0x00000000 | ||
reserved2: 0x00000000 | ||
reserved3: 0x00000000 | ||
content: '0000000000000000' | ||
- sectname: __bar | ||
segname: __DATA | ||
addr: 0x0000000000000010 | ||
size: 8 | ||
offset: 0x00000168 | ||
align: 0 | ||
reloff: 0x00000170 | ||
nreloc: 2 | ||
flags: 0x00000000 | ||
reserved1: 0x00000000 | ||
reserved2: 0x00000000 | ||
reserved3: 0x00000000 | ||
content: F0FFFFFFFFFFFFFF | ||
relocations: | ||
- address: 0x00000000 | ||
symbolnum: 3 | ||
pcrel: false | ||
length: 3 | ||
extern: false | ||
type: 5 | ||
scattered: false | ||
value: 0 | ||
- address: 0x00000000 | ||
symbolnum: 1 | ||
pcrel: false | ||
length: 3 | ||
extern: false | ||
type: 0 | ||
scattered: false | ||
value: 0 | ||
... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters