mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 08:57:43 +08:00
[ELF] -M/-Map: fix VMA/LMA/Size columns of symbol assignments when address/size>=2**32
SymbolAssignment::addr stores the location counter. The type should be uint64_t instead of unsigned. The upper half of the address space is commonly used by operating system kernels. Similarly, SymbolAssignment::size should be an uint64_t. A kernel linker script can move the location counter from 0 to the upper half of the address space. Reviewed By: grimar Differential Revision: https://reviews.llvm.org/D77445
This commit is contained in:
@@ -109,11 +109,11 @@ struct SymbolAssignment : BaseCommand {
|
||||
std::string commandString;
|
||||
|
||||
// Address of this assignment command.
|
||||
unsigned addr;
|
||||
uint64_t addr;
|
||||
|
||||
// Size of this assignment command. This is usually 0, but if
|
||||
// you move '.' this may be greater than 0.
|
||||
unsigned size;
|
||||
uint64_t size;
|
||||
};
|
||||
|
||||
// Linker scripts allow additional constraints to be put on output sections.
|
||||
|
||||
19
lld/test/ELF/map-file-64bit.s
Normal file
19
lld/test/ELF/map-file-64bit.s
Normal file
@@ -0,0 +1,19 @@
|
||||
# REQUIRES: x86
|
||||
## Test how we display the upper half of the address space, which is commonly
|
||||
## used by operating system kernels.
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o
|
||||
# RUN: ld.lld -M -T %s %t.o -o /dev/null | FileCheck %s --match-full-lines --strict-whitespace
|
||||
|
||||
## . = 0xffffffff80000000; has a misaligned Size column.
|
||||
# CHECK: VMA LMA Size Align Out In Symbol
|
||||
# CHECK-NEXT: 0 0 ffffffff80000000 1 . = 0xffffffff80000000
|
||||
# CHECK-NEXT:ffffffff80000000 0 100000 1 . += 0x100000
|
||||
# CHECK-NEXT:ffffffff80100000 0 0 1 _text = .
|
||||
# CHECK-NEXT:ffffffff80100000 ffffffff80100000 0 4 .text
|
||||
|
||||
SECTIONS {
|
||||
. = 0xffffffff80000000;
|
||||
. += 0x100000;
|
||||
_text = .;
|
||||
}
|
||||
Reference in New Issue
Block a user