aboutsummaryrefslogtreecommitdiff
path: root/test/ELF
diff options
context:
space:
mode:
Diffstat (limited to 'test/ELF')
-rw-r--r--test/ELF/Inputs/exclude-libs.s3
-rw-r--r--test/ELF/arm-gnu-ifunc-plt.s6
-rw-r--r--test/ELF/arm-got-relative.s16
-rw-r--r--test/ELF/arm-thumb-branch.s2
-rw-r--r--test/ELF/arm-thumb-plt-reloc.s4
-rw-r--r--test/ELF/defsym.s4
-rw-r--r--test/ELF/exclude-libs.s30
-rw-r--r--test/ELF/global-offset-table-position-aarch64.s30
-rw-r--r--test/ELF/global-offset-table-position-arm.s35
-rw-r--r--test/ELF/global-offset-table-position-i386.s31
-rw-r--r--test/ELF/global-offset-table-position-mips.s33
-rw-r--r--test/ELF/global-offset-table-position.s31
-rw-r--r--test/ELF/global_offset_table_shared.s9
-rw-r--r--test/ELF/invalid-z.s9
-rw-r--r--test/ELF/linkerscript/discard-section-err.s23
-rw-r--r--test/ELF/linkerscript/sections.s6
-rw-r--r--test/ELF/linkerscript/segment-none.s39
-rw-r--r--test/ELF/linkerscript/ttext-script.s11
-rw-r--r--test/ELF/lto/cache.ll11
-rw-r--r--test/ELF/lto/wrap-2.ll2
-rw-r--r--test/ELF/mips-got16-relocatable.s8
-rw-r--r--test/ELF/mips-npic-call-pic-os.s32
-rw-r--r--test/ELF/mips-npic-call-pic-script.s170
-rw-r--r--test/ELF/mips-npic-call-pic.s32
-rw-r--r--test/ELF/mips-plt-r6.s4
-rw-r--r--test/ELF/wrap.s8
26 files changed, 440 insertions, 149 deletions
diff --git a/test/ELF/Inputs/exclude-libs.s b/test/ELF/Inputs/exclude-libs.s
new file mode 100644
index 000000000000..6d05c5e3aa91
--- /dev/null
+++ b/test/ELF/Inputs/exclude-libs.s
@@ -0,0 +1,3 @@
+.globl fn
+fn:
+ nop
diff --git a/test/ELF/arm-gnu-ifunc-plt.s b/test/ELF/arm-gnu-ifunc-plt.s
index 2561a4d34bed..efcaee1e9889 100644
--- a/test/ELF/arm-gnu-ifunc-plt.s
+++ b/test/ELF/arm-gnu-ifunc-plt.s
@@ -61,9 +61,9 @@
// DISASM: $d:
// DISASM-NEXT: 11050: c0 0f 00 00 .word 0x00000fc0
// Alignment to 16 byte boundary not strictly necessary on ARM, but harmless
-// DISASM-NEXT: 11054: 00 00 00 00 .word 0x00000000
-// DISASM-NEXT: 11058: 00 00 00 00 .word 0x00000000
-// DISASM-NEXT: 1105c: 00 00 00 00 .word 0x00000000
+// DISASM-NEXT: 11054: d4 d4 d4 d4 .word 0xd4d4d4d4
+// DISASM-NEXT: 11058: d4 d4 d4 d4 .word 0xd4d4d4d4
+// DISASM-NEXT: 1105c: d4 d4 d4 d4 .word 0xd4d4d4d4
// DISASM: $a:
// DISASM-NEXT: 11060: 04 c0 9f e5 ldr r12, [pc, #4]
// DISASM-NEXT: 11064: 0f c0 8c e0 add r12, r12, pc
diff --git a/test/ELF/arm-got-relative.s b/test/ELF/arm-got-relative.s
index db76711fe68e..46a3ca97d080 100644
--- a/test/ELF/arm-got-relative.s
+++ b/test/ELF/arm-got-relative.s
@@ -16,9 +16,9 @@ _start:
bx lr
.align 2
.LGOT:
- // gas implicitly uses (GOT_PREL) for _GLOBAL_OFFSET_TABLE_ in PIC
- // llvm-mc needs the (GOT_PREL) suffix or it generates R_ARM_REL32
- .word _GLOBAL_OFFSET_TABLE_(GOT_PREL) - (.LPIC+8)
+ // gas implicitly uses (R_ARM_BASE_PREL) for _GLOBAL_OFFSET_TABLE_ in PIC
+ // llvm-mc generates R_ARM_REL32, this will need updating when MC changes
+ .word _GLOBAL_OFFSET_TABLE_ - (.LPIC+8)
.word function(GOT)
.globl function
@@ -28,17 +28,17 @@ function:
bx lr
// CHECK: Dynamic Relocations {
-// CHECK-NEXT: 0x204C R_ARM_GLOB_DAT function 0x0
+// CHECK-NEXT: 0x2048 R_ARM_GLOB_DAT function 0x0
// CHECK: Name: _GLOBAL_OFFSET_TABLE_
-// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Value: 0x2048
// CHECK-NEXT: Size:
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other [
// CHECK-NEXT: STV_HIDDEN
// CHECK-NEXT: ]
-// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: Section: .got
// CODE: Disassembly of section .text:
// CODE-NEXT: _start:
@@ -49,5 +49,5 @@ function:
// CODE:$d.1:
// (_GLOBAL_OFFSET_TABLE_ = 0x2048) - (0x1008 + 8) 0x1038
// CODE-NEXT: 1010: 38 10 00 00
-// (Got(function) - GotBase = 0x4
-// CODE-NEXT: 1014: 04 00 00 00
+// (Got(function) - GotBase = 0x0
+// CODE-NEXT: 1014: 00 00 00 00
diff --git a/test/ELF/arm-thumb-branch.s b/test/ELF/arm-thumb-branch.s
index 4dc0280b22f6..81bf7a3c68a9 100644
--- a/test/ELF/arm-thumb-branch.s
+++ b/test/ELF/arm-thumb-branch.s
@@ -54,7 +54,7 @@ callee_high:
// CHECK-NEXT: 1001c: ff f3 fd 97 b.w #16777210
// CHECK-NEXT: 10020: 3f f3 ff af bgt.w #1048574
// CHECK-NEXT: 10024: 70 47 bx lr
-// CHECK-NEXT: 10026: 00 00 movs r0, r0
+// CHECK-NEXT: 10026:
// CHECK-NEXT: Disassembly of section .callee2:
// CHECK-NEXT: callee_high:
// CHECK-NEXT: 10028: 70 47 bx lr
diff --git a/test/ELF/arm-thumb-plt-reloc.s b/test/ELF/arm-thumb-plt-reloc.s
index 95a6e9e7af79..f9afbb9c0ce1 100644
--- a/test/ELF/arm-thumb-plt-reloc.s
+++ b/test/ELF/arm-thumb-plt-reloc.s
@@ -30,7 +30,7 @@ _start:
// CHECK-NEXT: 11002: 70 47 bx lr
// CHECK: func3:
// CHECK-NEXT: 11004: 70 47 bx lr
-// CHECK-NEXT: 11006: 00 00 movs r0, r0
+// CHECK-NEXT: 11006: d4 d4
// CHECK: _start:
// 11008 + 4 -12 = 0x11000 = func1
// CHECK-NEXT: 11008: ff f7 fa ff bl #-12
@@ -49,7 +49,7 @@ _start:
// DSOTHUMB-NEXT: 1002: 70 47 bx lr
// DSOTHUMB: func3:
// DSOTHUMB-NEXT: 1004: 70 47 bx lr
-// DSOTHUMB-NEXT: 1006: 00 00 movs r0, r0
+// DSOTHUMB-NEXT: 1006: d4 d4
// DSOTHUMB: _start:
// 0x1008 + 0x28 + 4 = 0x1034 = PLT func1
// DSOTHUMB-NEXT: 1008: 00 f0 14 e8 blx #40
diff --git a/test/ELF/defsym.s b/test/ELF/defsym.s
index 778180dc9324..253d5d8f408d 100644
--- a/test/ELF/defsym.s
+++ b/test/ELF/defsym.s
@@ -9,8 +9,6 @@
# RUN: llvm-readobj -t -s %t2 | FileCheck %s
# RUN: llvm-objdump -d -print-imm-hex %t2 | FileCheck %s --check-prefix=USE
-## In compare with GNU linkers, symbol defined with --defsym does
-## not get aliased name in symbol table:
# CHECK: Symbol {
# CHECK: Name: foo1
# CHECK-NEXT: Value: 0x123
@@ -21,7 +19,7 @@
# CHECK-NEXT: Section: Absolute
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: foo1
+# CHECK-NEXT: Name: foo2
# CHECK-NEXT: Value: 0x123
# CHECK-NEXT: Size:
# CHECK-NEXT: Binding: Global
diff --git a/test/ELF/exclude-libs.s b/test/ELF/exclude-libs.s
new file mode 100644
index 000000000000..c36081f40e54
--- /dev/null
+++ b/test/ELF/exclude-libs.s
@@ -0,0 +1,30 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+// RUN: %p/Inputs/exclude-libs.s -o %t2.o
+// RUN: mkdir -p %t.dir
+// RUN: rm -f %t.dir/exc.a
+// RUN: llvm-ar rcs %t.dir/exc.a %t2.o
+
+// RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe
+// RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=DEFAULT %s
+
+// RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe --exclude-libs=foo,bar
+// RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=DEFAULT %s
+
+// RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe --exclude-libs foo,bar,exc.a
+// RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=EXCLUDE %s
+
+// RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe --exclude-libs foo:bar:exc.a
+// RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=EXCLUDE %s
+
+// RUN: ld.lld -shared %t.o %t.dir/exc.a -o %t.exe --exclude-libs=ALL
+// RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck --check-prefix=EXCLUDE %s
+
+// DEFAULT: Name: fn
+// EXCLUDE-NOT: Name: fn
+
+.globl fn
+foo:
+ call fn@PLT
diff --git a/test/ELF/global-offset-table-position-aarch64.s b/test/ELF/global-offset-table-position-aarch64.s
new file mode 100644
index 000000000000..624e9b516fed
--- /dev/null
+++ b/test/ELF/global-offset-table-position-aarch64.s
@@ -0,0 +1,30 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: aarch64
+.globl a
+.type a,@object
+.comm a,4,4
+
+.globl f
+.type f,@function
+f:
+ adrp x0, :got:a
+ ldr x0, [x0, #:got_lo12:a]
+
+.global _start
+.type _start,@function
+_start:
+ bl f
+.data
+.long _GLOBAL_OFFSET_TABLE_ - .
+
+// CHECK: Name: _GLOBAL_OFFSET_TABLE_ (11)
+// CHECK-NEXT: Value: 0x30090
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local (0x0)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other [ (0x2)
+// CHECK-NEXT: STV_HIDDEN (0x2)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got
diff --git a/test/ELF/global-offset-table-position-arm.s b/test/ELF/global-offset-table-position-arm.s
new file mode 100644
index 000000000000..781d8ce5222f
--- /dev/null
+++ b/test/ELF/global-offset-table-position-arm.s
@@ -0,0 +1,35 @@
+// RUN: llvm-mc -filetype=obj -triple=armv7a-linux-gnueabihf %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: arm
+
+// The ARM _GLOBAL_OFFSET_TABLE_ should be defined at the start of the .got
+.globl a
+.type a,%object
+.comm a,4,4
+
+.globl f
+.type f,%function
+f:
+ ldr r2, .L1
+.L0:
+ add r2, pc
+.L1:
+.word _GLOBAL_OFFSET_TABLE_ - (.L0+4)
+.word a(GOT)
+
+.global _start
+.type _start,%function
+_start:
+ bl f
+.data
+
+// CHECK: Name: _GLOBAL_OFFSET_TABLE_
+// CHECK-NEXT: Value: 0x3068
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other [ (0x2)
+// CHECK-NEXT: STV_HIDDEN (0x2)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got
diff --git a/test/ELF/global-offset-table-position-i386.s b/test/ELF/global-offset-table-position-i386.s
new file mode 100644
index 000000000000..907105edcff0
--- /dev/null
+++ b/test/ELF/global-offset-table-position-i386.s
@@ -0,0 +1,31 @@
+// RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+// The X86 _GLOBAL_OFFSET_TABLE_ is defined at the end of the .got section.
+.globl a
+.type a,@object
+.comm a,4,4
+
+.globl f
+.type f,@function
+f:
+addl $_GLOBAL_OFFSET_TABLE_, %eax
+movl a@GOT(%eax), %eax
+
+.global _start
+.type _start,@function
+_start:
+addl $_GLOBAL_OFFSET_TABLE_, %eax
+calll f@PLT
+
+// CHECK: Name: _GLOBAL_OFFSET_TABLE_ (1)
+// CHECK-NEXT: Value: 0x306C
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local (0x0)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other [ (0x2)
+// CHECK-NEXT: STV_HIDDEN (0x2)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got (0xA)
diff --git a/test/ELF/global-offset-table-position-mips.s b/test/ELF/global-offset-table-position-mips.s
new file mode 100644
index 000000000000..92daed1c7914
--- /dev/null
+++ b/test/ELF/global-offset-table-position-mips.s
@@ -0,0 +1,33 @@
+// RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+
+// REQUIRES: mips
+
+// The Mips _GLOBAL_OFFSET_TABLE_ should be defined at the start of the .got
+
+.globl a
+.hidden a
+.type a,@object
+.comm a,4,4
+
+.globl f
+.type f,@function
+f:
+ ld $v0,%got_page(a)($gp)
+ daddiu $v0,$v0,%got_ofst(a)
+
+.global _start
+.type _start,@function
+_start:
+ lw $t0,%call16(f)($gp)
+ .word _GLOBAL_OFFSET_TABLE_ - .
+// CHECK: Name: _GLOBAL_OFFSET_TABLE_ (1)
+// CHECK-NEXT: Value: 0x20000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local (0x0)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other [ (0x2)
+// CHECK-NEXT: STV_HIDDEN (0x2)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got (0x9)
diff --git a/test/ELF/global-offset-table-position.s b/test/ELF/global-offset-table-position.s
new file mode 100644
index 000000000000..b3317c7edd8b
--- /dev/null
+++ b/test/ELF/global-offset-table-position.s
@@ -0,0 +1,31 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+// The X86_64 _GLOBAL_OFFSET_TABLE_ is defined at the end of the .got section.
+.globl a
+.type a,@object
+.comm a,4,4
+
+.globl f
+.type f,@function
+f:
+movq a@GOTPCREL(%rip), %rax
+
+.global _start
+.type _start,@function
+_start:
+callq f@PLT
+.data
+.long _GLOBAL_OFFSET_TABLE_ - .
+
+// CHECK: Name: _GLOBAL_OFFSET_TABLE_
+// CHECK-NEXT: Value: 0x30D8
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other [
+// CHECK-NEXT: STV_HIDDEN
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got
diff --git a/test/ELF/global_offset_table_shared.s b/test/ELF/global_offset_table_shared.s
index 7935925ae2b3..1ebc0110d4d7 100644
--- a/test/ELF/global_offset_table_shared.s
+++ b/test/ELF/global_offset_table_shared.s
@@ -1,9 +1,14 @@
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
// RUN: ld.lld -shared %t -o %t2
// RUN: llvm-readobj -t %t2 | FileCheck %s
-.long _GLOBAL_OFFSET_TABLE_
+.long _GLOBAL_OFFSET_TABLE_ - .
// CHECK: Name: _GLOBAL_OFFSET_TABLE_
-// CHECK-NEXT: Value:
+// CHECK-NEXT: Value: 0x2060
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other [ (0x2)
+// CHECK-NEXT: STV_HIDDEN (0x2)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Section: .got
diff --git a/test/ELF/invalid-z.s b/test/ELF/invalid-z.s
new file mode 100644
index 000000000000..a5343c93e677
--- /dev/null
+++ b/test/ELF/invalid-z.s
@@ -0,0 +1,9 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: not ld.lld %t.o -o %t -z max-page-size 2>&1 | FileCheck %s
+# CHECK: invalid max-page-size
+# CHECK-NOT: error
+
+.global _start
+_start:
+ nop
diff --git a/test/ELF/linkerscript/discard-section-err.s b/test/ELF/linkerscript/discard-section-err.s
new file mode 100644
index 000000000000..5d9955545d92
--- /dev/null
+++ b/test/ELF/linkerscript/discard-section-err.s
@@ -0,0 +1,23 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.shstrtab) } }" > %t.script
+# RUN: not ld.lld -o %t --script %t.script %t.o 2>&1 | \
+# RUN: FileCheck -check-prefix=SHSTRTAB %s
+# SHSTRTAB: discarding .shstrtab section is not allowed
+
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.dynamic) } }" > %t.script
+# RUN: not ld.lld -pie -o %t --script %t.script %t.o 2>&1 | \
+# RUN: FileCheck -check-prefix=DYNAMIC %s
+# DYNAMIC: discarding .dynamic section is not allowed
+
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.dynsym) } }" > %t.script
+# RUN: not ld.lld -pie -o %t --script %t.script %t.o 2>&1 | \
+# RUN: FileCheck -check-prefix=DYNSYM %s
+# DYNSYM: discarding .dynsym section is not allowed
+
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.dynstr) } }" > %t.script
+# RUN: not ld.lld -pie -o %t --script %t.script %t.o 2>&1 | \
+# RUN: FileCheck -check-prefix=DYNSTR %s
+# DYNSTR: discarding .dynstr section is not allowed
diff --git a/test/ELF/linkerscript/sections.s b/test/ELF/linkerscript/sections.s
index d5645c303754..dd4b12f42b89 100644
--- a/test/ELF/linkerscript/sections.s
+++ b/test/ELF/linkerscript/sections.s
@@ -67,12 +67,6 @@
# SEC-SWAP-NAMES: 7 .shstrtab 0000003b {{[0-9a-f]*}}
# SEC-SWAP-NAMES: 8 .strtab 00000008 {{[0-9a-f]*}}
-# Attemp to discard .shstrtab section.
-# RUN: echo "SECTIONS { /DISCARD/ : { *(.shstrtab) } }" > %t.script
-# RUN: not ld.lld -o %t5 --script %t.script %t 2>&1 | \
-# RUN: FileCheck -check-prefix=SEC-DISCARD %s
-# SEC-DISCARD: discarding .shstrtab section is not allowed
-
# Multiple SECTIONS command specifying additional input section descriptions
# for the same output section description - input sections are merged into
# one output section.
diff --git a/test/ELF/linkerscript/segment-none.s b/test/ELF/linkerscript/segment-none.s
new file mode 100644
index 000000000000..d54e835a0c22
--- /dev/null
+++ b/test/ELF/linkerscript/segment-none.s
@@ -0,0 +1,39 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+
+## Test that section .foo is not placed in any segment when assigned to segment
+## NONE in the linker script and segment NONE is not defined.
+# RUN: echo "PHDRS {text PT_LOAD;} \
+# RUN: SECTIONS { \
+# RUN: .text : {*(.text .text*)} :text \
+# RUN: .foo : {*(.foo)} :NONE \
+# RUN: }" > %t.script
+# RUN: ld.lld -o %t --script %t.script %t.o
+# RUN: llvm-readobj -elf-output-style=GNU -s -l %t | FileCheck %s
+
+## Test that section .foo is placed in segment NONE when assigned to segment
+## NONE in the linker script and segment NONE is defined.
+# RUN: echo "PHDRS {text PT_LOAD; NONE PT_LOAD;} \
+# RUN: SECTIONS { \
+# RUN: .text : {*(.text .text*)} :text \
+# RUN: .foo : {*(.foo)} :NONE \
+# RUN: }" > %t.script
+# RUN: ld.lld -o %t --script %t.script %t.o
+# RUN: llvm-readobj -elf-output-style=GNU -s -l %t | FileCheck --check-prefix=DEFINED %s
+
+# CHECK: Section to Segment mapping:
+# CHECK-NEXT: Segment Sections...
+# CHECK-NOT: .foo
+
+# DEFINED: Section to Segment mapping:
+# DEFINED-NEXT: Segment Sections...
+# DEFINED-NEXT: 00 .text
+# DEFINED-NEXT: 01 .foo
+
+.global _start
+_start:
+ nop
+
+.section .foo,"a"
+foo:
+ .long 0
diff --git a/test/ELF/linkerscript/ttext-script.s b/test/ELF/linkerscript/ttext-script.s
new file mode 100644
index 000000000000..9dcde9bb13c5
--- /dev/null
+++ b/test/ELF/linkerscript/ttext-script.s
@@ -0,0 +1,11 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: echo "SECTIONS { .text 0x200000 : { *(.text) } }" > %t.script
+# RUN: ld.lld -T %t.script -Ttext 0x100000 %t.o -o %t
+# RUN: llvm-readobj --elf-output-style=GNU -s %t | FileCheck %s
+
+# CHECK: .text PROGBITS 0000000000100000
+
+.global _start
+_start:
+nop
diff --git a/test/ELF/lto/cache.ll b/test/ELF/lto/cache.ll
index 55e3a3d6f6cd..6731f522606f 100644
--- a/test/ELF/lto/cache.ll
+++ b/test/ELF/lto/cache.ll
@@ -12,6 +12,17 @@
; Two cached objects, plus a timestamp file and "foo", minus the file we removed.
; RUN: ls %t.cache | count 4
+; Create a file of size 64KB.
+; RUN: %python -c "print(' ' * 65536)" > %t.cache/llvmcache-foo
+
+; This should leave the file in place.
+; RUN: ld.lld --thinlto-cache-dir=%t.cache --thinlto-cache-policy cache_size_bytes=128k -o %t3 %t2.o %t.o
+; RUN: ls %t.cache | count 5
+
+; This should remove it.
+; RUN: ld.lld --thinlto-cache-dir=%t.cache --thinlto-cache-policy cache_size_bytes=32k -o %t3 %t2.o %t.o
+; RUN: ls %t.cache | count 4
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
diff --git a/test/ELF/lto/wrap-2.ll b/test/ELF/lto/wrap-2.ll
index b2e33f83138e..b318b7f65f2d 100644
--- a/test/ELF/lto/wrap-2.ll
+++ b/test/ELF/lto/wrap-2.ll
@@ -10,8 +10,8 @@
; CHECK: foo:
; CHECK-NEXT: pushq %rax
-; CHECK-NEXT: callq{{.*}}<__wrap_bar>
; CHECK-NEXT: callq{{.*}}<bar>
+; CHECK-NEXT: callq{{.*}}<__real_bar>
; Check that bar and __wrap_bar retain their original binding.
; BIND: Name: bar
diff --git a/test/ELF/mips-got16-relocatable.s b/test/ELF/mips-got16-relocatable.s
index 963efeb4686e..bbacfdbaa682 100644
--- a/test/ELF/mips-got16-relocatable.s
+++ b/test/ELF/mips-got16-relocatable.s
@@ -15,8 +15,8 @@
# OBJ-NEXT: 00000000: R_MIPS_GOT16 .data
# OBJ-NEXT: 4: 27 24 00 00 addiu $4, $25, 0
# OBJ-NEXT: 00000004: R_MIPS_LO16 .data
-# OBJ-NEXT: 8: 00 00 00 00 nop
-# OBJ-NEXT: c: 00 00 00 00 nop
+# OBJ-NEXT: 8: ef ef ef ef <unknown>
+# OBJ-NEXT: c: ef ef ef ef <unknown>
# OBJ-NEXT: 10: 8f 99 00 00 lw $25, 0($gp)
# OBJ-NEXT: 00000010: R_MIPS_GOT16 .data
# OBJ-NEXT: 14: 27 24 00 10 addiu $4, $25, 16
@@ -26,8 +26,8 @@
# SO-NEXT: .text:
# SO-NEXT: 10000: 8f 99 80 18 lw $25, -32744($gp)
# SO-NEXT: 10004: 27 24 00 00 addiu $4, $25, 0
-# SO-NEXT: 10008: 00 00 00 00 nop
-# SO-NEXT: 1000c: 00 00 00 00 nop
+# SO-NEXT: 10008: ef ef ef ef <unknown>
+# SO-NEXT: 1000c: ef ef ef ef <unknown>
# SO-NEXT: 10010: 8f 99 80 18 lw $25, -32744($gp)
# SO-NEXT: 10014: 27 24 00 10 addiu $4, $25, 16
diff --git a/test/ELF/mips-npic-call-pic-os.s b/test/ELF/mips-npic-call-pic-os.s
index 131289e596e8..aea0fa1221dc 100644
--- a/test/ELF/mips-npic-call-pic-os.s
+++ b/test/ELF/mips-npic-call-pic-os.s
@@ -33,8 +33,8 @@
# CHECK-NEXT: 2002c: 08 00 80 10 j 131136 <foo2>
# CHECK-NEXT: 20030: 27 39 00 40 addiu $25, $25, 64
# CHECK-NEXT: 20034: 00 00 00 00 nop
-# CHECK-NEXT: 20038: 00 00 00 00 nop
-# CHECK-NEXT: 2003c: 00 00 00 00 nop
+# CHECK-NEXT: 20038: ef ef ef ef <unknown>
+# CHECK-NEXT: 2003c: ef ef ef ef <unknown>
# CHECK: foo2:
# CHECK-NEXT: 20040: 00 00 00 00 nop
# CHECK: __LA25Thunk_fpic:
@@ -42,14 +42,14 @@
# CHECK-NEXT: 20048: 08 00 80 18 j 131168 <fpic>
# CHECK-NEXT: 2004c: 27 39 00 60 addiu $25, $25, 96
# CHECK-NEXT: 20050: 00 00 00 00 nop
-# CHECK-NEXT: 20054: 00 00 00 00 nop
-# CHECK-NEXT: 20058: 00 00 00 00 nop
-# CHECK-NEXT: 2005c: 00 00 00 00 nop
+# CHECK-NEXT: 20054: ef ef ef ef <unknown>
+# CHECK-NEXT: 20058: ef ef ef ef <unknown>
+# CHECK-NEXT: 2005c: ef ef ef ef <unknown>
# CHECK: fpic:
# CHECK-NEXT: 20060: 00 00 00 00 nop
-# CHECK-NEXT: 20064: 00 00 00 00 nop
-# CHECK-NEXT: 20068: 00 00 00 00 nop
-# CHECK-NEXT: 2006c: 00 00 00 00 nop
+# CHECK-NEXT: 20064: ef ef ef ef <unknown>
+# CHECK-NEXT: 20068: ef ef ef ef <unknown>
+# CHECK-NEXT: 2006c: ef ef ef ef <unknown>
# CHECK: fnpic:
# CHECK-NEXT: 20070: 00 00 00 00 nop
# CHECK-NEXT: Disassembly of section differentos:
@@ -93,13 +93,13 @@
# REVERSE-NEXT: 2002c: 08 00 80 10 j 131136 <foo2>
# REVERSE-NEXT: 20030: 27 39 00 40 addiu $25, $25, 64
# REVERSE-NEXT: 20034: 00 00 00 00 nop
-# REVERSE-NEXT: 20038: 00 00 00 00 nop
-# REVERSE-NEXT: 2003c: 00 00 00 00 nop
+# REVERSE-NEXT: 20038: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2003c: ef ef ef ef <unknown>
# REVERSE: foo2:
# REVERSE-NEXT: 20040: 00 00 00 00 nop
-# REVERSE-NEXT: 20044: 00 00 00 00 nop
-# REVERSE-NEXT: 20048: 00 00 00 00 nop
-# REVERSE-NEXT: 2004c: 00 00 00 00 nop
+# REVERSE-NEXT: 20044: ef ef ef ef <unknown>
+# REVERSE-NEXT: 20048: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2004c: ef ef ef ef <unknown>
# REVERSE: __LA25Thunk_fpic:
# REVERSE-NEXT: 20050: 3c 19 00 02 lui $25, 2
# REVERSE-NEXT: 20054: 08 00 80 18 j 131168 <fpic>
@@ -107,9 +107,9 @@
# REVERSE-NEXT: 2005c: 00 00 00 00 nop
# REVERSE: fpic:
# REVERSE-NEXT: 20060: 00 00 00 00 nop
-# REVERSE-NEXT: 20064: 00 00 00 00 nop
-# REVERSE-NEXT: 20068: 00 00 00 00 nop
-# REVERSE-NEXT: 2006c: 00 00 00 00 nop
+# REVERSE-NEXT: 20064: ef ef ef ef <unknown>
+# REVERSE-NEXT: 20068: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2006c: ef ef ef ef <unknown>
# REVERSE: fnpic:
# REVERSE-NEXT: 20070: 00 00 00 00 nop
# REVERSE-NEXT: Disassembly of section differentos:
diff --git a/test/ELF/mips-npic-call-pic-script.s b/test/ELF/mips-npic-call-pic-script.s
index 6028989ee4cb..230704459463 100644
--- a/test/ELF/mips-npic-call-pic-script.s
+++ b/test/ELF/mips-npic-call-pic-script.s
@@ -33,77 +33,77 @@
# CHECK-NEXT: 2002c: 08 00 80 10 j 131136 <foo2>
# CHECK-NEXT: 20030: 27 39 00 40 addiu $25, $25, 64
# CHECK-NEXT: 20034: 00 00 00 00 nop
-# CHECK-NEXT: 20038: 00 00 00 00 nop
-# CHECK-NEXT: 2003c: 00 00 00 00 nop
+# CHECK-NEXT: 20038: ef ef ef ef <unknown>
+# CHECK-NEXT: 2003c: ef ef ef ef <unknown>
# CHECK: foo2:
# CHECK-NEXT: 20040: 00 00 00 00 nop
-# CHECK-NEXT: 20044: 00 00 00 00 nop
-# CHECK-NEXT: 20048: 00 00 00 00 nop
-# CHECK-NEXT: 2004c: 00 00 00 00 nop
-# CHECK-NEXT: 20050: 00 00 00 00 nop
-# CHECK-NEXT: 20054: 00 00 00 00 nop
-# CHECK-NEXT: 20058: 00 00 00 00 nop
-# CHECK-NEXT: 2005c: 00 00 00 00 nop
-# CHECK-NEXT: 20060: 00 00 00 00 nop
-# CHECK-NEXT: 20064: 00 00 00 00 nop
-# CHECK-NEXT: 20068: 00 00 00 00 nop
-# CHECK-NEXT: 2006c: 00 00 00 00 nop
-# CHECK-NEXT: 20070: 00 00 00 00 nop
-# CHECK-NEXT: 20074: 00 00 00 00 nop
-# CHECK-NEXT: 20078: 00 00 00 00 nop
-# CHECK-NEXT: 2007c: 00 00 00 00 nop
-# CHECK-NEXT: 20080: 00 00 00 00 nop
-# CHECK-NEXT: 20084: 00 00 00 00 nop
-# CHECK-NEXT: 20088: 00 00 00 00 nop
-# CHECK-NEXT: 2008c: 00 00 00 00 nop
-# CHECK-NEXT: 20090: 00 00 00 00 nop
-# CHECK-NEXT: 20094: 00 00 00 00 nop
-# CHECK-NEXT: 20098: 00 00 00 00 nop
-# CHECK-NEXT: 2009c: 00 00 00 00 nop
-# CHECK-NEXT: 200a0: 00 00 00 00 nop
-# CHECK-NEXT: 200a4: 00 00 00 00 nop
-# CHECK-NEXT: 200a8: 00 00 00 00 nop
-# CHECK-NEXT: 200ac: 00 00 00 00 nop
-# CHECK-NEXT: 200b0: 00 00 00 00 nop
-# CHECK-NEXT: 200b4: 00 00 00 00 nop
-# CHECK-NEXT: 200b8: 00 00 00 00 nop
-# CHECK-NEXT: 200bc: 00 00 00 00 nop
-# CHECK-NEXT: 200c0: 00 00 00 00 nop
-# CHECK-NEXT: 200c4: 00 00 00 00 nop
-# CHECK-NEXT: 200c8: 00 00 00 00 nop
-# CHECK-NEXT: 200cc: 00 00 00 00 nop
-# CHECK-NEXT: 200d0: 00 00 00 00 nop
-# CHECK-NEXT: 200d4: 00 00 00 00 nop
-# CHECK-NEXT: 200d8: 00 00 00 00 nop
-# CHECK-NEXT: 200dc: 00 00 00 00 nop
-# CHECK-NEXT: 200e0: 00 00 00 00 nop
-# CHECK-NEXT: 200e4: 00 00 00 00 nop
-# CHECK-NEXT: 200e8: 00 00 00 00 nop
-# CHECK-NEXT: 200ec: 00 00 00 00 nop
-# CHECK-NEXT: 200f0: 00 00 00 00 nop
-# CHECK-NEXT: 200f4: 00 00 00 00 nop
-# CHECK-NEXT: 200f8: 00 00 00 00 nop
-# CHECK-NEXT: 200fc: 00 00 00 00 nop
-# CHECK-NEXT: 20100: 00 00 00 00 nop
-# CHECK-NEXT: 20104: 00 00 00 00 nop
-# CHECK-NEXT: 20108: 00 00 00 00 nop
-# CHECK-NEXT: 2010c: 00 00 00 00 nop
-# CHECK-NEXT: 20110: 00 00 00 00 nop
-# CHECK-NEXT: 20114: 00 00 00 00 nop
-# CHECK-NEXT: 20118: 00 00 00 00 nop
-# CHECK-NEXT: 2011c: 00 00 00 00 nop
-# CHECK-NEXT: 20120: 00 00 00 00 nop
-# CHECK-NEXT: 20124: 00 00 00 00 nop
-# CHECK-NEXT: 20128: 00 00 00 00 nop
-# CHECK-NEXT: 2012c: 00 00 00 00 nop
-# CHECK-NEXT: 20130: 00 00 00 00 nop
-# CHECK-NEXT: 20134: 00 00 00 00 nop
-# CHECK-NEXT: 20138: 00 00 00 00 nop
-# CHECK-NEXT: 2013c: 00 00 00 00 nop
-# CHECK-NEXT: 20140: 00 00 00 00 nop
-# CHECK-NEXT: 20144: 00 00 00 00 nop
-# CHECK-NEXT: 20148: 00 00 00 00 nop
-# CHECK-NEXT: 2014c: 00 00 00 00 nop
+# CHECK-NEXT: 20044: ef ef ef ef <unknown>
+# CHECK-NEXT: 20048: ef ef ef ef <unknown>
+# CHECK-NEXT: 2004c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20050: ef ef ef ef <unknown>
+# CHECK-NEXT: 20054: ef ef ef ef <unknown>
+# CHECK-NEXT: 20058: ef ef ef ef <unknown>
+# CHECK-NEXT: 2005c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20060: ef ef ef ef <unknown>
+# CHECK-NEXT: 20064: ef ef ef ef <unknown>
+# CHECK-NEXT: 20068: ef ef ef ef <unknown>
+# CHECK-NEXT: 2006c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20070: ef ef ef ef <unknown>
+# CHECK-NEXT: 20074: ef ef ef ef <unknown>
+# CHECK-NEXT: 20078: ef ef ef ef <unknown>
+# CHECK-NEXT: 2007c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20080: ef ef ef ef <unknown>
+# CHECK-NEXT: 20084: ef ef ef ef <unknown>
+# CHECK-NEXT: 20088: ef ef ef ef <unknown>
+# CHECK-NEXT: 2008c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20090: ef ef ef ef <unknown>
+# CHECK-NEXT: 20094: ef ef ef ef <unknown>
+# CHECK-NEXT: 20098: ef ef ef ef <unknown>
+# CHECK-NEXT: 2009c: ef ef ef ef <unknown>
+# CHECK-NEXT: 200a0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200a4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200a8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200ac: ef ef ef ef <unknown>
+# CHECK-NEXT: 200b0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200b4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200b8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200bc: ef ef ef ef <unknown>
+# CHECK-NEXT: 200c0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200c4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200c8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200cc: ef ef ef ef <unknown>
+# CHECK-NEXT: 200d0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200d4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200d8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200dc: ef ef ef ef <unknown>
+# CHECK-NEXT: 200e0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200e4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200e8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200ec: ef ef ef ef <unknown>
+# CHECK-NEXT: 200f0: ef ef ef ef <unknown>
+# CHECK-NEXT: 200f4: ef ef ef ef <unknown>
+# CHECK-NEXT: 200f8: ef ef ef ef <unknown>
+# CHECK-NEXT: 200fc: ef ef ef ef <unknown>
+# CHECK-NEXT: 20100: ef ef ef ef <unknown>
+# CHECK-NEXT: 20104: ef ef ef ef <unknown>
+# CHECK-NEXT: 20108: ef ef ef ef <unknown>
+# CHECK-NEXT: 2010c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20110: ef ef ef ef <unknown>
+# CHECK-NEXT: 20114: ef ef ef ef <unknown>
+# CHECK-NEXT: 20118: ef ef ef ef <unknown>
+# CHECK-NEXT: 2011c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20120: ef ef ef ef <unknown>
+# CHECK-NEXT: 20124: ef ef ef ef <unknown>
+# CHECK-NEXT: 20128: ef ef ef ef <unknown>
+# CHECK-NEXT: 2012c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20130: ef ef ef ef <unknown>
+# CHECK-NEXT: 20134: ef ef ef ef <unknown>
+# CHECK-NEXT: 20138: ef ef ef ef <unknown>
+# CHECK-NEXT: 2013c: ef ef ef ef <unknown>
+# CHECK-NEXT: 20140: ef ef ef ef <unknown>
+# CHECK-NEXT: 20144: ef ef ef ef <unknown>
+# CHECK-NEXT: 20148: ef ef ef ef <unknown>
+# CHECK-NEXT: 2014c: ef ef ef ef <unknown>
# CHECK: __start:
# CHECK-NEXT: 20150: 0c 00 80 00 jal 131072 <__LA25Thunk_foo1a>
# CHECK-NEXT: 20154: 00 00 00 00 nop
@@ -124,9 +124,9 @@
# CHECK-NEXT: 2018c: 00 00 00 00 nop
# CHECK: fpic:
# CHECK-NEXT: 20190: 00 00 00 00 nop
-# CHECK-NEXT: 20194: 00 00 00 00 nop
-# CHECK-NEXT: 20198: 00 00 00 00 nop
-# CHECK-NEXT: 2019c: 00 00 00 00 nop
+# CHECK-NEXT: 20194: ef ef ef ef <unknown>
+# CHECK-NEXT: 20198: ef ef ef ef <unknown>
+# CHECK-NEXT: 2019c: ef ef ef ef <unknown>
# CHECK: fnpic:
# CHECK-NEXT: 201a0: 00 00 00 00 nop
@@ -166,9 +166,9 @@ __start:
# ORPH1-NEXT: 2003c: 00 00 00 00 nop
# ORPH1: fpic:
# ORPH1-NEXT: 20040: 00 00 00 00 nop
-# ORPH1-NEXT: 20044: 00 00 00 00 nop
-# ORPH1-NEXT: 20048: 00 00 00 00 nop
-# ORPH1-NEXT: 2004c: 00 00 00 00 nop
+# ORPH1-NEXT: 20044: ef ef ef ef <unknown>
+# ORPH1-NEXT: 20048: ef ef ef ef <unknown>
+# ORPH1-NEXT: 2004c: ef ef ef ef <unknown>
# ORPH1: fnpic:
# ORPH1-NEXT: 20050: 00 00 00 00 nop
# ORPH1: __LA25Thunk_foo1a:
@@ -181,9 +181,9 @@ __start:
# ORPH1-NEXT: 20068: 08 00 80 21 j 131204 <foo1b>
# ORPH1-NEXT: 2006c: 27 39 00 84 addiu $25, $25, 132
# ORPH1-NEXT: 20070: 00 00 00 00 nop
-# ORPH1-NEXT: 20074: 00 00 00 00 nop
-# ORPH1-NEXT: 20078: 00 00 00 00 nop
-# ORPH1-NEXT: 2007c: 00 00 00 00 nop
+# ORPH1-NEXT: 20074: ef ef ef ef <unknown>
+# ORPH1-NEXT: 20078: ef ef ef ef <unknown>
+# ORPH1-NEXT: 2007c: ef ef ef ef <unknown>
# ORPH1: foo1a:
# ORPH1-NEXT: 20080: 00 00 00 00 nop
# ORPH1: foo1b:
@@ -193,8 +193,8 @@ __start:
# ORPH1-NEXT: 2008c: 08 00 80 28 j 131232 <foo2>
# ORPH1-NEXT: 20090: 27 39 00 a0 addiu $25, $25, 160
# ORPH1-NEXT: 20094: 00 00 00 00 nop
-# ORPH1-NEXT: 20098: 00 00 00 00 nop
-# ORPH1-NEXT: 2009c: 00 00 00 00 nop
+# ORPH1-NEXT: 20098: ef ef ef ef <unknown>
+# ORPH1-NEXT: 2009c: ef ef ef ef <unknown>
# ORPH1: foo2:
# ORPH1-NEXT: 200a0: 00 00 00 00 nop
@@ -224,9 +224,9 @@ __start:
# ORPH2-NEXT: 2003c: 00 00 00 00 nop
# ORPH2: fpic:
# ORPH2-NEXT: 20040: 00 00 00 00 nop
-# ORPH2-NEXT: 20044: 00 00 00 00 nop
-# ORPH2-NEXT: 20048: 00 00 00 00 nop
-# ORPH2-NEXT: 2004c: 00 00 00 00 nop
+# ORPH2-NEXT: 20044: ef ef ef ef <unknown>
+# ORPH2-NEXT: 20048: ef ef ef ef <unknown>
+# ORPH2-NEXT: 2004c: ef ef ef ef <unknown>
# ORPH2: fnpic:
# ORPH2-NEXT: 20050: 00 00 00 00 nop
# ORPH2-NEXT: Disassembly of section .text:
@@ -249,7 +249,7 @@ __start:
# ORPH2-NEXT: 2008c: 08 00 80 28 j 131232 <foo2>
# ORPH2-NEXT: 20090: 27 39 00 a0 addiu $25, $25, 160
# ORPH2-NEXT: 20094: 00 00 00 00 nop
-# ORPH2-NEXT: 20098: 00 00 00 00 nop
-# ORPH2-NEXT: 2009c: 00 00 00 00 nop
+# ORPH2-NEXT: 20098: ef ef ef ef <unknown>
+# ORPH2-NEXT: 2009c: ef ef ef ef <unknown>
# ORPH2: foo2:
# ORPH2-NEXT: 200a0: 00 00 00 00 nop
diff --git a/test/ELF/mips-npic-call-pic.s b/test/ELF/mips-npic-call-pic.s
index a5a99d719983..c3c94d783410 100644
--- a/test/ELF/mips-npic-call-pic.s
+++ b/test/ELF/mips-npic-call-pic.s
@@ -51,8 +51,8 @@
# CHECK-NEXT: 2005c: 08 00 80 1c j 131184 <foo2>
# CHECK-NEXT: 20060: 27 39 00 70 addiu $25, $25, 112
# CHECK-NEXT: 20064: 00 00 00 00 nop
-# CHECK-NEXT: 20068: 00 00 00 00 nop
-# CHECK-NEXT: 2006c: 00 00 00 00 nop
+# CHECK-NEXT: 20068: ef ef ef ef <unknown>
+# CHECK-NEXT: 2006c: ef ef ef ef <unknown>
# CHECK: foo2:
# CHECK-NEXT: 20070: 00 00 00 00 nop
@@ -62,15 +62,15 @@
# CHECK-NEXT: 20078: 08 00 80 24 j 131216 <fpic>
# CHECK-NEXT: 2007c: 27 39 00 90 addiu $25, $25, 144
# CHECK-NEXT: 20080: 00 00 00 00 nop
-# CHECK-NEXT: 20084: 00 00 00 00 nop
-# CHECK-NEXT: 20088: 00 00 00 00 nop
-# CHECK-NEXT: 2008c: 00 00 00 00 nop
+# CHECK-NEXT: 20084: ef ef ef ef <unknown>
+# CHECK-NEXT: 20088: ef ef ef ef <unknown>
+# CHECK-NEXT: 2008c: ef ef ef ef <unknown>
# CHECK: fpic:
# CHECK-NEXT: 20090: 00 00 00 00 nop
-# CHECK-NEXT: 20094: 00 00 00 00 nop
-# CHECK-NEXT: 20098: 00 00 00 00 nop
-# CHECK-NEXT: 2009c: 00 00 00 00 nop
+# CHECK-NEXT: 20094: ef ef ef ef <unknown>
+# CHECK-NEXT: 20098: ef ef ef ef <unknown>
+# CHECK-NEXT: 2009c: ef ef ef ef <unknown>
# CHECK: fnpic:
# CHECK-NEXT: 200a0: 00 00 00 00 nop
@@ -101,13 +101,13 @@
# REVERSE-NEXT: 2002c: 08 00 80 10 j 131136 <foo2>
# REVERSE-NEXT: 20030: 27 39 00 40 addiu $25, $25, 64
# REVERSE-NEXT: 20034: 00 00 00 00 nop
-# REVERSE-NEXT: 20038: 00 00 00 00 nop
-# REVERSE-NEXT: 2003c: 00 00 00 00 nop
+# REVERSE-NEXT: 20038: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2003c: ef ef ef ef <unknown>
# REVERSE: foo2:
# REVERSE-NEXT: 20040: 00 00 00 00 nop
-# REVERSE-NEXT: 20044: 00 00 00 00 nop
-# REVERSE-NEXT: 20048: 00 00 00 00 nop
-# REVERSE-NEXT: 2004c: 00 00 00 00 nop
+# REVERSE-NEXT: 20044: ef ef ef ef <unknown>
+# REVERSE-NEXT: 20048: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2004c: ef ef ef ef <unknown>
# REVERSE: __start:
# REVERSE-NEXT: 20050: 0c 00 80 00 jal 131072 <__LA25Thunk_foo1a>
# REVERSE-NEXT: 20054: 00 00 00 00 nop
@@ -128,9 +128,9 @@
# REVERSE-NEXT: 2008c: 00 00 00 00 nop
# REVERSE: fpic:
# REVERSE-NEXT: 20090: 00 00 00 00 nop
-# REVERSE-NEXT: 20094: 00 00 00 00 nop
-# REVERSE-NEXT: 20098: 00 00 00 00 nop
-# REVERSE-NEXT: 2009c: 00 00 00 00 nop
+# REVERSE-NEXT: 20094: ef ef ef ef <unknown>
+# REVERSE-NEXT: 20098: ef ef ef ef <unknown>
+# REVERSE-NEXT: 2009c: ef ef ef ef <unknown>
# REVERSE: fnpic:
# REVERSE-NEXT: 200a0: 00 00 00 00 nop
diff --git a/test/ELF/mips-plt-r6.s b/test/ELF/mips-plt-r6.s
index ccf233cc73cd..4bab21c32eb9 100644
--- a/test/ELF/mips-plt-r6.s
+++ b/test/ELF/mips-plt-r6.s
@@ -18,7 +18,7 @@
#
# CHECK-NEXT: Disassembly of section .plt:
# CHECK-NEXT: .plt:
-# CHECK-NEXT: 20010: 3c 1c 00 03 aui $zero, $gp, 3
+# CHECK-NEXT: 20010: 3c 1c 00 03 aui $gp, $zero, 3
# CHECK-NEXT: 20014: 8f 99 00 04 lw $25, 4($gp)
# CHECK-NEXT: 20018: 27 9c 00 04 addiu $gp, $gp, 4
# CHECK-NEXT: 2001c: 03 1c c0 23 subu $24, $24, $gp
@@ -27,7 +27,7 @@
# CHECK-NEXT: 20028: 03 20 f8 09 jalr $25
# CHECK-NEXT: 2002c: 27 18 ff fe addiu $24, $24, -2
-# CHECK-NEXT: 20030: 3c 0f 00 03 aui $zero, $15, 3
+# CHECK-NEXT: 20030: 3c 0f 00 03 aui $15, $zero, 3
# CHECK-NEXT: 20034: 8d f9 00 0c lw $25, 12($15)
# CHECK-NEXT: 20038: 03 20 00 09 jr $25
# CHECK-NEXT: 2003c: 25 f8 00 0c addiu $24, $15, 12
diff --git a/test/ELF/wrap.s b/test/ELF/wrap.s
index 17aac2db6e18..d8d802bb8ca4 100644
--- a/test/ELF/wrap.s
+++ b/test/ELF/wrap.s
@@ -12,6 +12,14 @@
// CHECK-NEXT: movl $0x11010, %edx
// CHECK-NEXT: movl $0x11000, %edx
+// RUN: llvm-readobj -t -s %t3 | FileCheck -check-prefix=SYM %s
+// SYM: Name: __real_foo
+// SYM-NEXT: Value: 0x11000
+// SYM: Name: __wrap_foo
+// SYM-NEXT: Value: 0x11010
+// SYM: Name: foo
+// SYM-NEXT: Value: 0x11010
+
.global _start
_start:
movl $foo, %edx