mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-22 08:32:23 +00:00
[LinkerScript] Fix bug in Segment::assignVirtualAddress()
When calculating the start address and size of a segment, lld mistakenly attributed the start address of the last segment slice to the whole segment when it should consider the start address of the first slice. In this case, in a multi-slice segment, Segment::assignVirtualAddress() will return a wrong segment start address to TargetLayout::assignVirtualAddress(). The effect of this miscalculation is to allocate some program headers in unnecessarily far away addresses. This commit fixes this. Differential Revision: http://reviews.llvm.org/D10951 llvm-svn: 242089
This commit is contained in:
parent
8a4145411f
commit
a4917f74eb
@ -362,7 +362,7 @@ template <class ELFT> void Segment<ELFT>::assignVirtualAddress(uint64_t addr) {
|
||||
|
||||
// Set the segment memory size and the virtual address.
|
||||
this->setMemSize(curSliceAddress - startAddr + curSliceSize);
|
||||
this->setVirtualAddr(curSliceAddress);
|
||||
this->setVirtualAddr(startAddr);
|
||||
std::stable_sort(_segmentSlices.begin(), _segmentSlices.end(),
|
||||
SegmentSlice<ELFT>::compare_slices);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user