diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h --- a/lld/ELF/LinkerScript.h +++ b/lld/ELF/LinkerScript.h @@ -109,11 +109,11 @@ 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. diff --git a/lld/test/ELF/map-file-64bit.s b/lld/test/ELF/map-file-64bit.s new file mode 100644 --- /dev/null +++ b/lld/test/ELF/map-file-64bit.s @@ -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 = .; +}