forked from OSchip/llvm-project
[lld][MachO] Fix LC_SEGEMENT[_64] filesize computation in -r mode.
Using vmsize to populate this file works when outputing MachO images, but fails when outputting relocatable objects. This patch fixes the computation to use file offsets, which works for both output types. Fixes <rdar://problem/27727666> llvm-svn: 278297
This commit is contained in:
parent
2ff5935a95
commit
8c2406b1fc
|
@ -643,7 +643,9 @@ llvm::Error MachOFileLayout::writeSingleSegmentLoadCommand(uint8_t *&lc) {
|
|||
seg->vmsize = _file.sections.back().address
|
||||
+ _file.sections.back().content.size();
|
||||
seg->fileoff = _endOfLoadCommands;
|
||||
seg->filesize = seg->vmsize;
|
||||
seg->filesize = _sectInfo[&_file.sections.back()].fileOffset +
|
||||
_file.sections.back().content.size() -
|
||||
_sectInfo[&_file.sections.front()].fileOffset;
|
||||
seg->maxprot = VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE;
|
||||
seg->initprot = VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE;
|
||||
seg->nsects = _file.sections.size();
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# RUN: lld -flavor darwin -arch x86_64 -r -o %t %s && llvm-objdump -private-headers %t | FileCheck %s
|
||||
|
||||
# CHECK: filesize 19
|
||||
|
||||
--- !mach-o
|
||||
arch: x86_64
|
||||
file-type: MH_OBJECT
|
||||
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
|
||||
sections:
|
||||
- segment: __TEXT
|
||||
section: __text
|
||||
type: S_REGULAR
|
||||
attributes: [ S_ATTR_PURE_INSTRUCTIONS ]
|
||||
alignment: 16
|
||||
address: 0x0000000000000000
|
||||
content: [ 0x00, 0x00, 0x00 ]
|
||||
- segment: __TEXT
|
||||
section: __alt
|
||||
type: S_REGULAR
|
||||
attributes: [ S_ATTR_PURE_INSTRUCTIONS ]
|
||||
alignment: 16
|
||||
address: 0x0000000000000010
|
||||
content: [ 0x00, 0x00, 0x00 ]
|
||||
global-symbols:
|
||||
- name: _main
|
||||
type: N_SECT
|
||||
scope: [ N_EXT ]
|
||||
sect: 1
|
||||
value: 0x0000000000000000
|
||||
page-size: 0x00000000
|
||||
...
|
Loading…
Reference in New Issue