summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2016-08-17 02:10:51 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2016-08-17 02:10:51 +0000
commite2cc07bc0b232a25a0f07456abb7d18090049790 (patch)
tree7ac62f058c05dd8b462d656780e7ad0b5c982a2d
parent53d55f45a1fde4683e2ebc0fc83c39c2a36a99d7 (diff)
downloadbcm5719-llvm-e2cc07bc0b232a25a0f07456abb7d18090049790.tar.gz
bcm5719-llvm-e2cc07bc0b232a25a0f07456abb7d18090049790.zip
[ELF] Set MAXPAGESIZE to 2MiB on x86-64 to match bfd and gold.
The FreeBSD kernel relies on this behavior to not overwrite the boot loader. llvm-svn: 278889
-rw-r--r--lld/ELF/LinkerScript.cpp4
-rw-r--r--lld/ELF/Target.cpp1
-rw-r--r--lld/ELF/Target.h1
-rw-r--r--lld/test/ELF/linkerscript-outsections-addr.s2
-rw-r--r--lld/test/ELF/linkerscript/linkerscript-data-segment-relro.s4
-rw-r--r--lld/test/ELF/linkerscript/linkerscript-locationcounter.s4
-rw-r--r--lld/test/ELF/linkerscript/linkerscript-symbol-assignexpr.s6
7 files changed, 13 insertions, 9 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 7195d8f6c41..df400a4d0d2 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -1138,8 +1138,10 @@ Expr ScriptParser::readExpr1(Expr Lhs, int MinPrec) {
}
uint64_t static getConstant(StringRef S) {
- if (S == "COMMONPAGESIZE" || S == "MAXPAGESIZE")
+ if (S == "COMMONPAGESIZE")
return Target->PageSize;
+ if (S == "MAXPAGESIZE")
+ return Target->MaxPageSize;
error("unknown constant: " + S);
return 0;
}
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index ab71de35716..88461377b4b 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -545,6 +545,7 @@ void X86TargetInfo::relaxTlsLdToLe(uint8_t *Loc, uint32_t Type,
}
template <class ELFT> X86_64TargetInfo<ELFT>::X86_64TargetInfo() {
+ MaxPageSize = 0x200000; // 2MiB
CopyRel = R_X86_64_COPY;
GotRel = R_X86_64_GLOB_DAT;
PltRel = R_X86_64_JUMP_SLOT;
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index 67bf3a27ff7..de5a101be06 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -62,6 +62,7 @@ public:
unsigned TlsGdRelaxSkip = 1;
unsigned PageSize = 4096;
+ unsigned MaxPageSize = 4096;
// On freebsd x86_64 the first page cannot be mmaped.
// On linux that is controled by vm.mmap_min_addr. At least on some x86_64
diff --git a/lld/test/ELF/linkerscript-outsections-addr.s b/lld/test/ELF/linkerscript-outsections-addr.s
index 100eba7542e..b305724979d 100644
--- a/lld/test/ELF/linkerscript-outsections-addr.s
+++ b/lld/test/ELF/linkerscript-outsections-addr.s
@@ -80,7 +80,7 @@
#CHECK: Flags [
#CHECK: SHF_ALLOC
#CHECK: ]
-#CHECK: Address: 0x4008
+#CHECK: Address: 0x203008
#CHECK: Offset: 0x2008
#CHECK: Size: 8
#CHECK: Link: 0
diff --git a/lld/test/ELF/linkerscript/linkerscript-data-segment-relro.s b/lld/test/ELF/linkerscript/linkerscript-data-segment-relro.s
index 559113e6706..94734110ca0 100644
--- a/lld/test/ELF/linkerscript/linkerscript-data-segment-relro.s
+++ b/lld/test/ELF/linkerscript/linkerscript-data-segment-relro.s
@@ -31,7 +31,7 @@
# CHECK-NEXT: SHF_ALLOC
# CHECK-NEXT: SHF_WRITE
# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x10F0
+# CHECK-NEXT: Address: 0x2000F0
# CHECK-NEXT: Offset: 0x10F0
# CHECK-NEXT: Size:
# CHECK-NEXT: Link:
@@ -47,7 +47,7 @@
# CHECK-NEXT: SHF_ALLOC
# CHECK-NEXT: SHF_WRITE
# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x2000
+# CHECK-NEXT: Address: 0x201000
# CHECK-NEXT: Offset: 0x2000
# CHECK-NEXT: Size:
# CHECK-NEXT: Link:
diff --git a/lld/test/ELF/linkerscript/linkerscript-locationcounter.s b/lld/test/ELF/linkerscript/linkerscript-locationcounter.s
index f70e78d8729..94af0ce3840 100644
--- a/lld/test/ELF/linkerscript/linkerscript-locationcounter.s
+++ b/lld/test/ELF/linkerscript/linkerscript-locationcounter.s
@@ -261,7 +261,7 @@
# CHECK-NEXT: Flags [
# CHECK-NEXT: SHF_ALLOC
# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x24000
+# CHECK-NEXT: Address: 0x4800000
# CHECK-NEXT: Offset:
# CHECK-NEXT: Size:
# CHECK-NEXT: Link:
@@ -291,7 +291,7 @@
# CHECK-NEXT: Flags [
# CHECK-NEXT: SHF_ALLOC
# CHECK-NEXT: ]
-# CHECK-NEXT: Address: 0x26000
+# CHECK-NEXT: Address: 0x200000
# CHECK-NEXT: Offset:
# CHECK-NEXT: Size:
# CHECK-NEXT: Link:
diff --git a/lld/test/ELF/linkerscript/linkerscript-symbol-assignexpr.s b/lld/test/ELF/linkerscript/linkerscript-symbol-assignexpr.s
index 353800b6de6..80c4e89424e 100644
--- a/lld/test/ELF/linkerscript/linkerscript-symbol-assignexpr.s
+++ b/lld/test/ELF/linkerscript/linkerscript-symbol-assignexpr.s
@@ -13,9 +13,9 @@
# CHECK-NEXT: 0000000000000000 *UND* 00000000
# CHECK-NEXT: 0000000000000120 .text 00000000 _start
# CHECK-NEXT: 0000000000000121 .text 00000000 foo
-# CHECK-NEXT: 0000000000001000 *ABS* 00000000 symbol
-# CHECK-NEXT: 0000000000002234 *ABS* 00000000 symbol2
-# CHECK-NEXT: 0000000000002234 *ABS* 00000000 symbol3
+# CHECK-NEXT: 0000000000200000 *ABS* 00000000 symbol
+# CHECK-NEXT: 0000000000201234 *ABS* 00000000 symbol2
+# CHECK-NEXT: 0000000000201234 *ABS* 00000000 symbol3
# RUN: echo "SECTIONS { \
# RUN: symbol2 = symbol; \
OpenPOWER on IntegriCloud