[ELF][HEXAGON] Set DefaultMaxPageSize to 64K

Update testcase to reflect the change.

llvm-svn: 342662
This commit is contained in:
Sid Manning 2018-09-20 16:32:19 +00:00
parent 6dde0d4283
commit 6d0e4fce1a
2 changed files with 56 additions and 50 deletions

View File

@ -25,6 +25,7 @@ using namespace lld::elf;
namespace { namespace {
class Hexagon final : public TargetInfo { class Hexagon final : public TargetInfo {
public: public:
Hexagon();
uint32_t calcEFlags() const override; uint32_t calcEFlags() const override;
RelExpr getRelExpr(RelType Type, const Symbol &S, RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override; const uint8_t *Loc) const override;
@ -32,6 +33,11 @@ public:
}; };
} // namespace } // namespace
Hexagon::Hexagon() {
// Hexagon Linux uses 64K pages by default.
DefaultMaxPageSize = 0x10000;
}
// Support V60 only at the moment. // Support V60 only at the moment.
uint32_t Hexagon::calcEFlags() const { return 0x60; } uint32_t Hexagon::calcEFlags() const { return 0x60; }

View File

@ -4,89 +4,89 @@
# RUN: ld.lld %t2 %t -o %t3 # RUN: ld.lld %t2 %t -o %t3
# RUN: llvm-objdump -d %t3 | FileCheck %s # RUN: llvm-objdump -d %t3 | FileCheck %s
# Note: 69632 == 0x11000 # Note: 131072 == 0x20000
# R_HEX_32_6_X # R_HEX_32_6_X
# R_HEX_12_X # R_HEX_12_X
if (p0) r0 = ##_start if (p0) r0 = ##_start
# CHECK: immext(#69632) # CHECK: immext(#131072)
# CHECK: if (p0) r0 = ##69632 # CHECK: if (p0) r0 = ##131072
# R_HEX_B15_PCREL # R_HEX_B15_PCREL
if (p0) jump:nt #_start if (p0) jump:nt #_start
# CHECK: if (p0) jump:nt 0x11000 # CHECK: if (p0) jump:nt 0x20000
# R_HEX_B32_PCREL_X # R_HEX_B32_PCREL_X
# R_HEX_B15_PCREL_X # R_HEX_B15_PCREL_X
if (p0) jump:nt ##_start if (p0) jump:nt ##_start
# CHECK: if (p0) jump:nt 0x11000 # CHECK: if (p0) jump:nt 0x20000
# R_HEX_B22_PCREL # R_HEX_B22_PCREL
call #_start call #_start
# CHECK: call 0x11000 # CHECK: call 0x20000
# R_HEX_B32_PCREL_X # R_HEX_B32_PCREL_X
# R_HEX_B22_PCREL_X # R_HEX_B22_PCREL_X
call ##_start call ##_start
# CHECK: immext(#4294967232) # CHECK: immext(#4294967232)
# CHECK: call 0x11000 # CHECK: call 0x20000
# R_HEX_6_X tests: # R_HEX_6_X tests:
# One test for each mask in the lookup table. # One test for each mask in the lookup table.
#0x38000000 #0x38000000
if (!P0) memw(r0+#8)=##_start if (!P0) memw(r0+#8)=##_start
# CHECK: 38c0c100 if (!p0) memw(r0+#8) = ##69632 } # CHECK: 38c0c100 if (!p0) memw(r0+#8) = ##131072 }
#0x39000000 #0x39000000
{ p0 = p1 { p0 = p1
if (!P0.new) memw(r0+#0)=##_start } if (!P0.new) memw(r0+#0)=##_start }
# CHECK: 39c0c000 if (!p0.new) memw(r0+#0) = ##69632 } # CHECK: 39c0c000 if (!p0.new) memw(r0+#0) = ##131072 }
#0x3e000000 #0x3e000000
memw(r0+##_start)+=r1 memw(r0+##_start)+=r1
# CHECK: 3e40c001 memw(r0+##69632) += r1 } # CHECK: 3e40c001 memw(r0+##131072) += r1 }
#0x3f000000 #0x3f000000
memw(r0+##_start)+=#4 memw(r0+##_start)+=#4
# CHECK: 3f40c004 memw(r0+##69632) += #4 } # CHECK: 3f40c004 memw(r0+##131072) += #4 }
#0x40000000 #0x40000000
{ r0 = r1 { r0 = r1
if (p0) memb(r0+##_start)=r0.new } if (p0) memb(r0+##_start)=r0.new }
# CHECK: 40a0c200 if (p0) memb(r0+##69632) = r0.new } # CHECK: 40a0c200 if (p0) memb(r0+##131072) = r0.new }
#0x41000000 #0x41000000
if (p0) r0=memb(r1+##_start) if (p0) r0=memb(r1+##_start)
# CHECK: 4101c000 if (p0) r0 = memb(r1+##69632) } # CHECK: 4101c000 if (p0) r0 = memb(r1+##131072) }
#0x42000000 #0x42000000
{ r0 = r1 { r0 = r1
p0 = p1 p0 = p1
if (p0.new) memb(r0+##_start)=r0.new } if (p0.new) memb(r0+##_start)=r0.new }
# CHECK: 42a0c200 if (p0.new) memb(r0+##69632) = r0.new } # CHECK: 42a0c200 if (p0.new) memb(r0+##131072) = r0.new }
#0x43000000 #0x43000000
{ p0 = p1 { p0 = p1
if (P0.new) r0=memb(r0+##_start) } if (P0.new) r0=memb(r0+##_start) }
# CHECK: 4300c000 if (p0.new) r0 = memb(r0+##69632) } # CHECK: 4300c000 if (p0.new) r0 = memb(r0+##131072) }
#0x44000000 #0x44000000
if (!p0) memb(r0+##_start)=r1 if (!p0) memb(r0+##_start)=r1
# CHECK: 4400c100 if (!p0) memb(r0+##69632) = r1 } # CHECK: 4400c100 if (!p0) memb(r0+##131072) = r1 }
#0x45000000 #0x45000000
if (!p0) r0=memb(r1+##_start) if (!p0) r0=memb(r1+##_start)
# CHECK: 4501c000 if (!p0) r0 = memb(r1+##69632) } # CHECK: 4501c000 if (!p0) r0 = memb(r1+##131072) }
#0x46000000 #0x46000000
{ p0 = p1 { p0 = p1
if (!p0.new) memb(r0+##_start)=r1 } if (!p0.new) memb(r0+##_start)=r1 }
# CHECK: 4600c100 if (!p0.new) memb(r0+##69632) = r1 } # CHECK: 4600c100 if (!p0.new) memb(r0+##131072) = r1 }
#0x47000000 #0x47000000
{ p0 = p1 { p0 = p1
if (!p0.new) r0=memb(r1+##_start) } if (!p0.new) r0=memb(r1+##_start) }
# CHECK: 4701c000 if (!p0.new) r0 = memb(r1+##69632) } # CHECK: 4701c000 if (!p0.new) r0 = memb(r1+##131072) }
#0x6a000000 -- Note 4294967132 == -0xa4 the distance between #0x6a000000 -- Note 4294967132 == -0xa4 the distance between
# here and _start, so this will change if # here and _start, so this will change if
@ -96,128 +96,128 @@ r0=add(pc,##_start@pcrel)
#0x7c000000 #0x7c000000
r1:0=combine(#8,##_start) r1:0=combine(#8,##_start)
# CHECK: 7c80c100 r1:0 = combine(#8,##69632) } # CHECK: 7c80c100 r1:0 = combine(#8,##131072) }
#0x9a000000 #0x9a000000
r1:0=memb_fifo(r2=##_start) r1:0=memb_fifo(r2=##_start)
# CHECK: 9a82d000 r1:0 = memb_fifo(r2=##69632) } # CHECK: 9a82d000 r1:0 = memb_fifo(r2=##131072) }
#0x9b000000 #0x9b000000
r0=memb(r1=##_start) r0=memb(r1=##_start)
# CHECK: 9b01d000 r0 = memb(r1=##69632) } # CHECK: 9b01d000 r0 = memb(r1=##131072) }
#0x9c000000 #0x9c000000
r1:0=memb_fifo(r2<<#2+##_start) r1:0=memb_fifo(r2<<#2+##_start)
# CHECK: 9c82f000 r1:0 = memb_fifo(r2<<#2+##69632) } # CHECK: 9c82f000 r1:0 = memb_fifo(r2<<#2+##131072) }
#0x9d000000 #0x9d000000
r0=memb(r1<<#2+##_start) r0=memb(r1<<#2+##_start)
# CHECK: 9d01f000 r0 = memb(r1<<#2+##69632) } # CHECK: 9d01f000 r0 = memb(r1<<#2+##131072) }
#0x9f000000 #0x9f000000
if (!p0) r0=memb(##_start) if (!p0) r0=memb(##_start)
# CHECK: 9f00e880 if (!p0) r0 = memb(##69632) } # CHECK: 9f00e880 if (!p0) r0 = memb(##131072) }
#0xab000000 #0xab000000
memb(r0=##_start)=r1 memb(r0=##_start)=r1
# CHECK: ab00c180 memb(r0=##69632) = r1 } # CHECK: ab00c180 memb(r0=##131072) = r1 }
#0xad000000 #0xad000000
memb(r0<<#2+##_start)=r1 memb(r0<<#2+##_start)=r1
# CHECK: ad00e180 memb(r0<<#2+##69632) = r1 } # CHECK: ad00e180 memb(r0<<#2+##131072) = r1 }
#0xaf000000 #0xaf000000
if (!p0) memb(##_start)=r1 if (!p0) memb(##_start)=r1
# CHECK: af00c184 if (!p0) memb(##69632) = r1 } # CHECK: af00c184 if (!p0) memb(##131072) = r1 }
#0xd7000000 #0xd7000000
r0=add(##_start,mpyi(r1,r2)) r0=add(##_start,mpyi(r1,r2))
# CHECK: d701c200 r0 = add(##69632,mpyi(r1,r2)) } # CHECK: d701c200 r0 = add(##131072,mpyi(r1,r2)) }
#0xd8000000 #0xd8000000
R0=add(##_start,mpyi(r0,#2)) R0=add(##_start,mpyi(r0,#2))
# CHECK: d800c002 r0 = add(##69632,mpyi(r0,#2)) } # CHECK: d800c002 r0 = add(##131072,mpyi(r0,#2)) }
#0xdb000000 #0xdb000000
r0=add(r1,add(r2,##_start)) r0=add(r1,add(r2,##_start))
# CHECK: db01c002 r0 = add(r1,add(r2,##69632)) } # CHECK: db01c002 r0 = add(r1,add(r2,##131072)) }
#0xdf000000 #0xdf000000
r0=add(r1,mpyi(r2,##_start)) r0=add(r1,mpyi(r2,##_start))
# CHECK: df82c001 r0 = add(r1,mpyi(r2,##69632)) } # CHECK: df82c001 r0 = add(r1,mpyi(r2,##131072)) }
# Duplex form of R_HEX_6_X # Duplex form of R_HEX_6_X
# R_HEX_32_6_X # R_HEX_32_6_X
# R_HEX_6_X # R_HEX_6_X
{ r0 = ##_start; r2 = r16 } { r0 = ##_start; r2 = r16 }
# CHECK: 28003082 r0 = ##69632; r2 = r16 } # CHECK: 28003082 r0 = ##131072; r2 = r16 }
# R_HEX_HI16 # R_HEX_HI16
r0.h = #HI(_start) r0.h = #HI(_start)
# CHECK: r0.h = #1 # CHECK: r0.h = #2
# R_HEX_LO16 # R_HEX_LO16
r0.l = #LO(_start) r0.l = #LO(_start)
# CHECK: r0.l = #4096 # CHECK: r0.l = #0
# R_HEX_8_X has 3 relocation mask variations # R_HEX_8_X has 3 relocation mask variations
#0xde000000 #0xde000000
r0=sub(##_start, asl(r0, #1)) r0=sub(##_start, asl(r0, #1))
# CHECK: de00c106 r0 = sub(##69632,asl(r0,#1)) } # CHECK: de00c106 r0 = sub(##131072,asl(r0,#1)) }
#0x3c000000 #0x3c000000
memw(r0+#0) = ##_start memw(r0+#0) = ##_start
# CHECK: 3c40c000 memw(r0+#0) = ##69632 } # CHECK: 3c40c000 memw(r0+#0) = ##131072 }
# The rest: # The rest:
r1:0=combine(r2,##_start); r1:0=combine(r2,##_start);
# CHECK: 7302e000 r1:0 = combine(r2,##69632) } # CHECK: 7302e000 r1:0 = combine(r2,##131072) }
# R_HEX_32: # R_HEX_32:
r_hex_32: r_hex_32:
.word _start .word _start
# CHECK: 00011000 # CHECK: 00020000
# R_HEX_16_X has 4 relocation mask variations # R_HEX_16_X has 4 relocation mask variations
# 0x48000000 # 0x48000000
memw(##_start) = r0 memw(##_start) = r0
# CHECK: 4880c000 memw(##69632) = r0 } # CHECK: 4880c000 memw(##131072) = r0 }
# 0x49000000 # 0x49000000
r0 = memw(##_start) r0 = memw(##_start)
# CHECK: 4980c000 r0 = memw(##69632) # CHECK: 4980c000 r0 = memw(##131072)
# 0x78000000 # 0x78000000
r0 = ##_start r0 = ##_start
# CHECK: 7800c000 r0 = ##69632 } # CHECK: 7800c000 r0 = ##131072 }
# 0xb0000000 # 0xb0000000
r0 = add(r1, ##_start) r0 = add(r1, ##_start)
# CHECK: b001c000 r0 = add(r1,##69632) } # CHECK: b001c000 r0 = add(r1,##131072) }
# R_HEX_B9_PCREL: # R_HEX_B9_PCREL:
{r0=#1 ; jump #_start} {r0=#1 ; jump #_start}
# CHECK: jump 0x11000 # CHECK: jump 0x20000
# R_HEX_B9_PCREL_X: # R_HEX_B9_PCREL_X:
{r0=#1 ; jump ##_start} {r0=#1 ; jump ##_start}
# CHECK: jump 0x11000 # CHECK: jump 0x20000
# R_HEX_B13_PCREL # R_HEX_B13_PCREL
if (r0 == #0) jump:t #_start if (r0 == #0) jump:t #_start
# CHECK: if (r0==#0) jump:t 0x11000 # CHECK: if (r0==#0) jump:t 0x20000
# R_HEX_9_X # R_HEX_9_X
p0 = !cmp.gtu(r0, ##_start) p0 = !cmp.gtu(r0, ##_start)
# CHECK: p0 = !cmp.gtu(r0,##69632) # CHECK: p0 = !cmp.gtu(r0,##131072)
# R_HEX_10_X # R_HEX_10_X
p0 = !cmp.gt(r0, ##_start) p0 = !cmp.gt(r0, ##_start)
# CHECK: p0 = !cmp.gt(r0,##69632) # CHECK: p0 = !cmp.gt(r0,##131072)
# R_HEX_11_X # R_HEX_11_X
r0 = memw(r1+##_start) r0 = memw(r1+##_start)
# CHECK: r0 = memw(r1+##69632) # CHECK: r0 = memw(r1+##131072)
memw(r0+##_start) = r1 memw(r0+##_start) = r1
# CHECK: memw(r0+##69632) = r1 # CHECK: memw(r0+##131072) = r1