aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt4
-rw-r--r--test/COFF/Inputs/armnt-executable.obj.yaml29
-rw-r--r--test/COFF/Inputs/armnt-executable.s13
-rw-r--r--test/COFF/Inputs/conflict.ll6
-rw-r--r--test/COFF/Inputs/entry-mangled.ll6
-rw-r--r--test/COFF/Inputs/export.ll18
-rw-r--r--test/COFF/Inputs/export.yaml57
-rw-r--r--test/COFF/Inputs/export2.yaml29
-rw-r--r--test/COFF/Inputs/hello32.yaml82
-rw-r--r--test/COFF/Inputs/hello64.asm24
-rw-r--r--test/COFF/Inputs/hello64.objbin0 -> 682 bytes
-rw-r--r--test/COFF/Inputs/import.yaml41
-rw-r--r--test/COFF/Inputs/imports-mangle.libbin0 -> 2114 bytes
-rw-r--r--test/COFF/Inputs/include1a.yaml33
-rw-r--r--test/COFF/Inputs/include1b.yaml33
-rw-r--r--test/COFF/Inputs/include1c.yaml29
-rwxr-xr-xtest/COFF/Inputs/library.lib (renamed from test/pecoff/Inputs/library.lib)bin1694 -> 1694 bytes
-rw-r--r--test/COFF/Inputs/lto-chkstk-chkstk.s3
-rw-r--r--test/COFF/Inputs/lto-chkstk-foo.s3
-rw-r--r--test/COFF/Inputs/lto-comdat1.ll13
-rw-r--r--test/COFF/Inputs/lto-comdat2.ll13
-rw-r--r--test/COFF/Inputs/lto-dep.ll10
-rw-r--r--test/COFF/Inputs/machine-x64.yaml29
-rw-r--r--test/COFF/Inputs/machine-x86.yaml29
-rw-r--r--[-rwxr-xr-x]test/COFF/Inputs/resource.res (renamed from test/pecoff/Inputs/resource.res)bin108 -> 108 bytes
-rw-r--r--test/COFF/Inputs/ret42.libbin0 -> 550 bytes
-rw-r--r--test/COFF/Inputs/ret42.objbin0 -> 408 bytes
-rw-r--r--test/COFF/Inputs/ret42.yaml45
-rw-r--r--test/COFF/Inputs/std32.libbin0 -> 1898 bytes
-rw-r--r--test/COFF/Inputs/std64.libbin0 -> 2068 bytes
-rw-r--r--test/COFF/Inputs/weak-external.ll6
-rw-r--r--test/COFF/Inputs/weak-external2.ll6
-rw-r--r--test/COFF/Inputs/weak-external3.ll8
-rw-r--r--test/COFF/alternatename.test61
-rw-r--r--test/COFF/ar-comdat.test38
-rw-r--r--test/COFF/armnt-blx23t.test66
-rw-r--r--test/COFF/armnt-branch24t.test59
-rw-r--r--test/COFF/armnt-entry-point.test5
-rw-r--r--test/COFF/armnt-imports.test51
-rw-r--r--test/COFF/armnt-mov32t-exec.test60
-rw-r--r--test/COFF/armnt-movt32t.test72
-rw-r--r--test/COFF/base.test57
-rw-r--r--test/COFF/baserel.test215
-rw-r--r--test/COFF/common.test102
-rw-r--r--test/COFF/conflict.test41
-rw-r--r--test/COFF/debug.test38
-rw-r--r--test/COFF/defparser.test13
-rw-r--r--test/COFF/delayimports.test41
-rw-r--r--test/COFF/delayimports32.test86
-rw-r--r--test/COFF/dll.test53
-rw-r--r--test/COFF/dllorder.test65
-rw-r--r--test/COFF/driver.test3
-rw-r--r--test/COFF/entry-inference.test50
-rw-r--r--test/COFF/entry-inference2.test39
-rw-r--r--test/COFF/entry-inference32.test35
-rw-r--r--test/COFF/entry-mangled.test35
-rw-r--r--test/COFF/entrylib.ll11
-rw-r--r--test/COFF/export-exe.test11
-rw-r--r--test/COFF/export.test82
-rw-r--r--test/COFF/export32.test133
-rw-r--r--test/COFF/failifmismatch.test11
-rw-r--r--test/COFF/filetype.test4
-rw-r--r--test/COFF/force.test43
-rw-r--r--test/COFF/heap.test25
-rw-r--r--test/COFF/hello32.test129
-rw-r--r--test/COFF/help.test3
-rw-r--r--test/COFF/icf-circular.test81
-rw-r--r--test/COFF/icf-circular2.test69
-rw-r--r--test/COFF/icf-different-align.test61
-rw-r--r--test/COFF/icf-local.test66
-rw-r--r--test/COFF/icf-simple.test71
-rw-r--r--test/COFF/imports-mangle.test66
-rw-r--r--test/COFF/imports.test35
-rw-r--r--test/COFF/include.test83
-rw-r--r--test/COFF/include2.test14
-rw-r--r--test/COFF/internal.test42
-rw-r--r--test/COFF/invalid-obj.test14
-rw-r--r--test/COFF/largeaddressaware.test21
-rw-r--r--test/COFF/libpath.test18
-rw-r--r--test/COFF/linkenv.test4
-rw-r--r--test/COFF/lldmap.test8
-rw-r--r--test/COFF/loadcfg.ll15
-rw-r--r--test/COFF/loadcfg.test59
-rw-r--r--test/COFF/loadcfg32.test42
-rw-r--r--test/COFF/locally-imported.test61
-rw-r--r--test/COFF/locally-imported32.test50
-rw-r--r--test/COFF/long-section-name.test58
-rw-r--r--test/COFF/lto-chkstk.ll17
-rw-r--r--test/COFF/lto-comdat.ll131
-rw-r--r--test/COFF/lto-linker-opts.ll11
-rw-r--r--test/COFF/lto-new-symbol.ll16
-rw-r--r--test/COFF/lto-opt-level.ll21
-rw-r--r--test/COFF/lto-parallel.ll20
-rw-r--r--test/COFF/lto.ll130
-rw-r--r--test/COFF/machine.test30
-rw-r--r--test/COFF/manifest.test61
-rw-r--r--test/COFF/merge.test53
-rw-r--r--test/COFF/nodefaultlib.test30
-rw-r--r--test/COFF/noentry.test11
-rw-r--r--test/COFF/opt.test69
-rw-r--r--test/COFF/options.test51
-rw-r--r--test/COFF/order.test15
-rw-r--r--test/COFF/out.test16
-rw-r--r--test/COFF/reloc-arm.test71
-rw-r--r--test/COFF/reloc-x64.test102
-rw-r--r--test/COFF/reloc-x86.test82
-rw-r--r--test/COFF/resource.test14
-rw-r--r--test/COFF/responsefile.test7
-rw-r--r--test/COFF/safeseh.test51
-rw-r--r--test/COFF/seh.test70
-rw-r--r--test/COFF/sort-debug.test296
-rw-r--r--test/COFF/stack.test25
-rw-r--r--test/COFF/subsystem-inference.test74
-rw-r--r--test/COFF/subsystem.test19
-rw-r--r--test/COFF/symtab.test254
-rw-r--r--test/COFF/tls.test43
-rw-r--r--test/COFF/tls32.test43
-rw-r--r--test/COFF/unwind.test198
-rw-r--r--test/COFF/version.test19
-rw-r--r--test/COFF/weak-external.test36
-rw-r--r--test/COFF/weak-external2.test30
-rw-r--r--test/COFF/weak-external3.test32
-rw-r--r--test/Driver/def-lib-search.test4
-rw-r--r--test/Driver/flavor-option.test2
-rw-r--r--test/Driver/lib-search.test10
-rw-r--r--test/Driver/so-whole-archive.test4
-rw-r--r--test/Driver/trivial-driver.test2
-rw-r--r--test/Driver/undef-basic.objtxt2
-rw-r--r--test/ELF/Inputs/abs.s4
-rw-r--r--test/ELF/Inputs/abs255.s2
-rw-r--r--test/ELF/Inputs/abs256.s2
-rw-r--r--test/ELF/Inputs/abs257.s2
-rw-r--r--test/ELF/Inputs/allow-multiple-definition.s4
-rw-r--r--test/ELF/Inputs/allow-shlib-undefined.s3
-rw-r--r--test/ELF/Inputs/archive.s5
-rw-r--r--test/ELF/Inputs/archive2.s2
-rw-r--r--test/ELF/Inputs/archive3.s2
-rw-r--r--test/ELF/Inputs/archive4.s1
-rw-r--r--test/ELF/Inputs/comdat.s3
-rw-r--r--test/ELF/Inputs/common.s3
-rw-r--r--test/ELF/Inputs/discard-merge-unnamed.obin0 -> 584 bytes
-rw-r--r--test/ELF/Inputs/dynamic-reloc.s2
-rw-r--r--test/ELF/Inputs/invalid-binding.elfbin0 -> 536 bytes
-rw-r--r--test/ELF/Inputs/invalid-data-encoding.abin0 -> 156 bytes
-rw-r--r--test/ELF/Inputs/invalid-file-class.abin0 -> 156 bytes
-rw-r--r--test/ELF/Inputs/invalid-multiple-eh-relocs.elfbin0 -> 784 bytes
-rw-r--r--test/ELF/Inputs/invalid-section-index.elfbin0 -> 544 bytes
-rw-r--r--test/ELF/Inputs/invalid-shentsize-zero.elfbin0 -> 512 bytes
-rwxr-xr-xtest/ELF/Inputs/invalid-shstrndx.sobin0 -> 13032 bytes
-rw-r--r--test/ELF/Inputs/invalid-symtab-sh_info.elfbin0 -> 512 bytes
-rw-r--r--test/ELF/Inputs/libsearch-dyn.s3
-rw-r--r--test/ELF/Inputs/libsearch-st.s3
-rw-r--r--test/ELF/Inputs/merge.s6
-rw-r--r--test/ELF/Inputs/mips-dynamic.s4
-rw-r--r--test/ELF/Inputs/no-symtab.o (renamed from test/elf/Inputs/stripped-empty.x86_64)bin416 -> 416 bytes
-rw-r--r--test/ELF/Inputs/relocation-copy-align.s9
-rw-r--r--test/ELF/Inputs/relocation-copy.s22
-rw-r--r--test/ELF/Inputs/relocation-size-shared.s6
-rw-r--r--test/ELF/Inputs/resolution.s107
-rw-r--r--test/ELF/Inputs/shared-ppc64.s9
-rw-r--r--test/ELF/Inputs/shared.s6
-rw-r--r--test/ELF/Inputs/shared2.s6
-rw-r--r--test/ELF/Inputs/shared3.s3
-rw-r--r--test/ELF/Inputs/tls-got.s14
-rw-r--r--test/ELF/Inputs/tls-mismatch.s4
-rw-r--r--test/ELF/Inputs/tls-opt-gdie.s20
-rw-r--r--test/ELF/Inputs/tls-opt-gdiele-i686.s20
-rw-r--r--test/ELF/Inputs/tls-opt-iele-i686-nopic.s15
-rw-r--r--test/ELF/Inputs/visibility.s13
-rw-r--r--test/ELF/Inputs/whole-archive.s2
-rw-r--r--test/ELF/aarch64-abs16.s27
-rw-r--r--test/ELF/aarch64-abs32.s27
-rw-r--r--test/ELF/aarch64-call26-error.s11
-rw-r--r--test/ELF/aarch64-copy.s93
-rw-r--r--test/ELF/aarch64-data-relocs.s23
-rw-r--r--test/ELF/aarch64-fpic-abs16.s7
-rw-r--r--test/ELF/aarch64-fpic-add_abs_lo12_nc.s10
-rw-r--r--test/ELF/aarch64-fpic-adr_prel_lo21.s10
-rw-r--r--test/ELF/aarch64-fpic-adr_prel_pg_hi21.s10
-rw-r--r--test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s10
-rw-r--r--test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s10
-rw-r--r--test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s10
-rw-r--r--test/ELF/aarch64-fpic-prel16.s7
-rw-r--r--test/ELF/aarch64-fpic-prel32.s7
-rw-r--r--test/ELF/aarch64-fpic-prel64.s7
-rw-r--r--test/ELF/aarch64-hi21-error.s10
-rw-r--r--test/ELF/aarch64-jump26-error.s11
-rw-r--r--test/ELF/aarch64-lo21-error.s10
-rw-r--r--test/ELF/aarch64-prel16.s31
-rw-r--r--test/ELF/aarch64-prel32.s31
-rw-r--r--test/ELF/aarch64-relocs.s122
-rw-r--r--test/ELF/allow-multiple-definition.s29
-rw-r--r--test/ELF/allow-shlib-undefined.s25
-rw-r--r--test/ELF/archive.s36
-rw-r--r--test/ELF/as-needed.s44
-rw-r--r--test/ELF/basic-aarch64.s193
-rw-r--r--test/ELF/basic-freebsd.s25
-rw-r--r--test/ELF/basic-mips.s272
-rw-r--r--test/ELF/basic.s216
-rw-r--r--test/ELF/basic32.s163
-rw-r--r--test/ELF/basic64be.s260
-rw-r--r--test/ELF/bss.s27
-rw-r--r--test/ELF/comdat.s72
-rw-r--r--test/ELF/common.s56
-rw-r--r--test/ELF/default-output.s16
-rw-r--r--test/ELF/discard-locals.s50
-rw-r--r--test/ELF/discard-merge-locals.s24
-rw-r--r--test/ELF/discard-merge-unnamed.s16
-rw-r--r--test/ELF/discard-none.s54
-rw-r--r--test/ELF/dt_flags.s21
-rw-r--r--test/ELF/duplicate-internal.s11
-rw-r--r--test/ELF/dynamic-reloc-index.s21
-rw-r--r--test/ELF/dynamic-reloc-weak.s33
-rw-r--r--test/ELF/dynamic-reloc.s64
-rw-r--r--test/ELF/eh-align-cie.s57
-rw-r--r--test/ELF/eh-frame-merge.s58
-rw-r--r--test/ELF/eh-frame-plt.s16
-rw-r--r--test/ELF/eh-frame-rel.s7
-rw-r--r--test/ELF/eh-frame-type.test16
-rw-r--r--test/ELF/ehframe-relocation.s29
-rw-r--r--test/ELF/empty-archive.s3
-rw-r--r--test/ELF/emulation.s177
-rw-r--r--test/ELF/end-preserve.s16
-rw-r--r--test/ELF/end-update.s29
-rw-r--r--test/ELF/end.s79
-rw-r--r--test/ELF/entry.s21
-rw-r--r--test/ELF/gc-sections-eh.s19
-rw-r--r--test/ELF/gc-sections-print.s23
-rw-r--r--test/ELF/gc-sections.s102
-rw-r--r--test/ELF/global_offset_table.s5
-rw-r--r--test/ELF/gnu-hash-table.s195
-rw-r--r--test/ELF/gnu-ifunc-i386.s130
-rw-r--r--test/ELF/gnu-ifunc-nosym-i386.s29
-rw-r--r--test/ELF/gnu-ifunc-nosym.s29
-rw-r--r--test/ELF/gnu-ifunc.s126
-rw-r--r--test/ELF/gnu-unique.s24
-rw-r--r--test/ELF/gnustack.s30
-rw-r--r--test/ELF/got-aarch64.s40
-rw-r--r--test/ELF/got-i386.s56
-rw-r--r--test/ELF/got.s45
-rw-r--r--test/ELF/incompatible-ar-first.s11
-rw-r--r--test/ELF/incompatible.s58
-rw-r--r--test/ELF/init-fini.s43
-rw-r--r--test/ELF/invalid-cie-length.s9
-rw-r--r--test/ELF/invalid-cie-length2.s9
-rw-r--r--test/ELF/invalid-cie-length3.s9
-rw-r--r--test/ELF/invalid-cie-length4.s10
-rw-r--r--test/ELF/invalid-cie-length5.s10
-rw-r--r--test/ELF/invalid-cie-reference.s32
-rw-r--r--test/ELF/invalid-elf.test34
-rw-r--r--test/ELF/invalid-fde-rel.s32
-rw-r--r--test/ELF/invalid-relocations.test22
-rw-r--r--test/ELF/libsearch.s83
-rw-r--r--test/ELF/linkerscript-ouputformat.s10
-rw-r--r--test/ELF/linkerscript-outputarch.s10
-rw-r--r--test/ELF/linkerscript-sections.s119
-rw-r--r--test/ELF/linkerscript.s114
-rw-r--r--test/ELF/linkerscript2.s11
-rw-r--r--test/ELF/lit.local.cfg2
-rw-r--r--test/ELF/local-dynamic.s83
-rw-r--r--test/ELF/local-got-shared.s35
-rw-r--r--test/ELF/local-got.s48
-rw-r--r--test/ELF/local.s82
-rw-r--r--test/ELF/many-sections.s116
-rw-r--r--test/ELF/merge-invalid-size.s7
-rw-r--r--test/ELF/merge-shared.s26
-rw-r--r--test/ELF/merge-string-align.s39
-rw-r--r--test/ELF/merge-string-error.s11
-rw-r--r--test/ELF/merge-string-no-null.s8
-rw-r--r--test/ELF/merge-string.s85
-rw-r--r--test/ELF/merge-sym.s21
-rw-r--r--test/ELF/merge.s109
-rw-r--r--test/ELF/mips-call16.s40
-rw-r--r--test/ELF/mips-dynamic.s91
-rw-r--r--test/ELF/mips-dynsym-sort.s43
-rw-r--r--test/ELF/mips-elf-flags.s27
-rw-r--r--test/ELF/mips-gnu-hash.s15
-rw-r--r--test/ELF/mips-got-relocs.s99
-rw-r--r--test/ELF/mips-gprel32-relocs.s31
-rw-r--r--test/ELF/mips-hilo-gp-disp.s42
-rw-r--r--test/ELF/mips-hilo-hi-only.s28
-rw-r--r--test/ELF/mips-hilo.s53
-rw-r--r--test/ELF/mips-jalr.test47
-rw-r--r--test/ELF/mips-pc-relocs.s38
-rw-r--r--test/ELF/mips-reginfo.s26
-rw-r--r--test/ELF/mips-relocs.s42
-rw-r--r--test/ELF/new-dtags.test15
-rw-r--r--test/ELF/no-inhibit-exec.s15
-rw-r--r--test/ELF/no-obj.s8
-rw-r--r--test/ELF/no-symtab.s4
-rw-r--r--test/ELF/no-undefined.s7
-rw-r--r--test/ELF/output-section.s34
-rw-r--r--test/ELF/plt-aarch64.s205
-rw-r--r--test/ELF/plt-i686.s158
-rw-r--r--test/ELF/plt.s119
-rw-r--r--test/ELF/ppc64-addr16-error.s7
-rw-r--r--test/ELF/ppc64-rel-calls.s42
-rw-r--r--test/ELF/ppc64-relocs.s130
-rw-r--r--test/ELF/ppc64-shared-rel-toc.s27
-rw-r--r--test/ELF/ppc64-toc-restore.s62
-rw-r--r--test/ELF/ppc64-weak-undef-call-shared.s16
-rw-r--r--test/ELF/ppc64-weak-undef-call.s27
-rw-r--r--test/ELF/pre_init_fini_array.s140
-rw-r--r--test/ELF/pre_init_fini_array_missing.s30
-rw-r--r--test/ELF/progname.s20
-rw-r--r--test/ELF/program-header-layout.s98
-rw-r--r--test/ELF/relative-dynamic-reloc-ppc64.s66
-rw-r--r--test/ELF/relative-dynamic-reloc.s69
-rw-r--r--test/ELF/relocatable.s9
-rw-r--r--test/ELF/relocation-absolute.s12
-rw-r--r--test/ELF/relocation-common.s14
-rw-r--r--test/ELF/relocation-copy-align.s31
-rw-r--r--test/ELF/relocation-copy-i686.s63
-rw-r--r--test/ELF/relocation-copy.s63
-rw-r--r--test/ELF/relocation-i686.s84
-rw-r--r--test/ELF/relocation-in-merge.s7
-rw-r--r--test/ELF/relocation-local.s38
-rw-r--r--test/ELF/relocation-past-merge-end.s7
-rw-r--r--test/ELF/relocation-size-shared.s78
-rw-r--r--test/ELF/relocation-size.s123
-rw-r--r--test/ELF/relocation-undefined-weak.s27
-rw-r--r--test/ELF/relocation.s117
-rw-r--r--test/ELF/relro.s242
-rw-r--r--test/ELF/resolution.s430
-rw-r--r--test/ELF/section-align-0.test19
-rw-r--r--test/ELF/section-layout.s54
-rw-r--r--test/ELF/section-name.s37
-rw-r--r--test/ELF/section-symbol.s29
-rw-r--r--test/ELF/shared-be.s35
-rw-r--r--test/ELF/shared.s294
-rw-r--r--test/ELF/soname.s11
-rw-r--r--test/ELF/soname2.s8
-rw-r--r--test/ELF/startstop-shared.s18
-rw-r--r--test/ELF/startstop.s61
-rw-r--r--test/ELF/string-table.s80
-rw-r--r--test/ELF/strip-all.s25
-rw-r--r--test/ELF/symbols.s182
-rw-r--r--test/ELF/sysroot.s36
-rw-r--r--test/ELF/tls-align.s21
-rw-r--r--test/ELF/tls-dynamic-i686.s92
-rw-r--r--test/ELF/tls-dynamic.s81
-rw-r--r--test/ELF/tls-error.s12
-rw-r--r--test/ELF/tls-got.s58
-rw-r--r--test/ELF/tls-i686.s69
-rw-r--r--test/ELF/tls-mismatch.s9
-rw-r--r--test/ELF/tls-opt-gdie.s55
-rw-r--r--test/ELF/tls-opt-gdiele-i686.s59
-rw-r--r--test/ELF/tls-opt-i686.s69
-rw-r--r--test/ELF/tls-opt-iele-i686-nopic.s159
-rw-r--r--test/ELF/tls-opt-local.s52
-rw-r--r--test/ELF/tls-opt.s93
-rw-r--r--test/ELF/tls-static.s13
-rw-r--r--test/ELF/tls.s170
-rw-r--r--test/ELF/undef-start.s4
-rw-r--r--test/ELF/undef.s8
-rw-r--r--test/ELF/undefined-opt.s55
-rw-r--r--test/ELF/valid-cie-length-dw64.s13
-rw-r--r--test/ELF/visibility.s108
-rw-r--r--test/ELF/whole-archive.s34
-rw-r--r--test/ELF/writable-merge.s6
-rw-r--r--test/ELF/x86-64-reloc-32-error.s8
-rw-r--r--test/ELF/x86-64-reloc-32S-error.s7
-rw-r--r--test/LinkerScript/phdrs-sections.test29
-rw-r--r--test/LinkerScript/sections.test6
-rw-r--r--test/Makefile71
-rw-r--r--test/core/Inputs/archive-basic.objtxt21
-rw-r--r--test/core/Inputs/archive-chain.objtxt24
-rw-r--r--test/core/Inputs/archive-chain2.objtxt21
-rw-r--r--test/core/Inputs/archive-tentdef-search.objtxt11
-rw-r--r--test/core/Inputs/associates.objtxt8
-rw-r--r--test/core/Inputs/auto-hide-coalesce.objtxt20
-rw-r--r--test/core/Inputs/code-model-attributes.objtxt4
-rw-r--r--test/core/Inputs/code-model-attributes2.objtxt4
-rw-r--r--test/core/Inputs/code-model-attributes3.objtxt4
-rw-r--r--test/core/Inputs/code-model-attributes4.objtxt4
-rw-r--r--test/core/Inputs/code-model-attributes5.objtxt4
-rw-r--r--test/core/Inputs/constants-coalesce.objtxt9
-rw-r--r--test/core/Inputs/constants-coalesce2.objtxt10
-rw-r--r--test/core/Inputs/cstring-coalesce.objtxt6
-rw-r--r--test/core/Inputs/cstring-coalesce2.objtxt6
-rw-r--r--test/core/Inputs/custom-section-coalesce.objtxt15
-rw-r--r--test/core/Inputs/custom-section-coalesce2.objtxt13
-rw-r--r--test/core/Inputs/dead-strip-attributes.objtxt4
-rw-r--r--test/core/Inputs/dead-strip-attributes2.objtxt4
-rw-r--r--test/core/Inputs/dead-strip-basic.objtxt9
-rw-r--r--test/core/Inputs/dead-strip-basic2.objtxt8
-rw-r--r--test/core/Inputs/dead-strip-globals.objtxt9
-rw-r--r--test/core/Inputs/dead-strip-globals2.objtxt8
-rw-r--r--test/core/Inputs/error-duplicate-absolutes.objtxt5
-rw-r--r--test/core/Inputs/gnulinkonce-rearrange-resolve.objtxt26
-rw-r--r--test/core/Inputs/gnulinkonce-remaining-undef.objtxt34
-rw-r--r--test/core/Inputs/gnulinkonce-remaining-undef2.objtxt4
-rw-r--r--test/core/Inputs/gnulinkonce-resolve.objtxt25
-rw-r--r--test/core/Inputs/gnulinkonce-simple.objtxt4
-rw-r--r--test/core/Inputs/inline-coalesce.objtxt6
-rw-r--r--test/core/Inputs/inline-coalesce2.objtxt6
-rw-r--r--test/core/Inputs/multiple-def-error.objtxt5
-rw-r--r--test/core/Inputs/sectiongroup-deadstrip.objtxt3
-rw-r--r--test/core/Inputs/sectiongroup-gnulinkonce-error.objtxt26
-rw-r--r--test/core/Inputs/sectiongroup-rearrange-resolve.objtxt25
-rw-r--r--test/core/Inputs/sectiongroup-remaining-undef.objtxt34
-rw-r--r--test/core/Inputs/sectiongroup-remaining-undef2.objtxt4
-rw-r--r--test/core/Inputs/sectiongroup-resolve.objtxt26
-rw-r--r--test/core/Inputs/sectiongroup-simple.objtxt4
-rw-r--r--test/core/Inputs/shared-library-coalesce.objtxt28
-rw-r--r--test/core/Inputs/tent-merge.objtxt6
-rw-r--r--test/core/Inputs/undef-coalesce-error.objtxt8
-rw-r--r--test/core/Inputs/undef-coalesce-error2.objtxt8
-rw-r--r--test/core/Inputs/undef-coalesce.objtxt8
-rw-r--r--test/core/Inputs/undef-coalesce2.objtxt8
-rw-r--r--test/core/Inputs/undef-fallback.objtxt7
-rw-r--r--test/core/Inputs/undef-weak-coalesce.objtxt20
-rw-r--r--test/core/Inputs/weak-coalesce.objtxt5
-rw-r--r--test/core/Inputs/weak-coalesce2.objtxt6
-rw-r--r--test/core/archive-basic.objtxt23
-rw-r--r--test/core/archive-chain.objtxt49
-rw-r--r--test/core/archive-tentdef-search.objtxt16
-rw-r--r--test/core/associates.objtxt11
-rw-r--r--test/core/auto-hide-coalesce.objtxt23
-rw-r--r--test/core/code-model-attributes.objtxt27
-rw-r--r--test/core/constants-coalesce.objtxt22
-rw-r--r--test/core/cstring-coalesce.objtxt12
-rw-r--r--test/core/custom-section-coalesce.objtxt32
-rw-r--r--test/core/dead-strip-attributes.objtxt11
-rw-r--r--test/core/dead-strip-basic.objtxt21
-rw-r--r--test/core/dead-strip-globals.objtxt21
-rw-r--r--test/core/error-duplicate-absolutes.objtxt7
-rw-r--r--test/core/gnulinkonce-rearrange-resolve.objtxt28
-rw-r--r--test/core/gnulinkonce-remaining-undef.objtxt41
-rw-r--r--test/core/gnulinkonce-resolve.objtxt28
-rw-r--r--test/core/gnulinkonce-simple.objtxt6
-rw-r--r--test/core/inline-coalesce.objtxt14
-rw-r--r--test/core/multiple-def-error.objtxt7
-rw-r--r--test/core/sectiongroup-deadstrip.objtxt6
-rw-r--r--test/core/sectiongroup-gnulinkonce-error.objtxt28
-rw-r--r--test/core/sectiongroup-rearrange-resolve.objtxt28
-rw-r--r--test/core/sectiongroup-remaining-undef.objtxt40
-rw-r--r--test/core/sectiongroup-resolve.objtxt26
-rw-r--r--test/core/sectiongroup-simple.objtxt4
-rw-r--r--test/core/shared-library-coalesce.objtxt31
-rw-r--r--test/core/tent-merge.objtxt8
-rw-r--r--test/core/undef-coalesce-error.objtxt20
-rw-r--r--test/core/undef-coalesce.objtxt18
-rw-r--r--test/core/undef-fallback.objtxt10
-rw-r--r--test/core/undef-weak-coalesce.objtxt22
-rw-r--r--test/core/weak-coalesce.objtxt18
-rw-r--r--test/darwin/Inputs/native-and-mach-o.objtxt17
-rw-r--r--test/darwin/Inputs/native-and-mach-o2.objtxt19
-rw-r--r--test/darwin/native-and-mach-o.objtxt44
-rw-r--r--test/elf/AArch64/defsym.test22
-rw-r--r--test/elf/AArch64/dontignorezerosize-sections.test9
-rw-r--r--test/elf/AArch64/dynlib-nointerp-section.test5
-rw-r--r--test/elf/AArch64/initfini.test23
-rw-r--r--test/elf/AArch64/rel-abs32-overflow.test53
-rw-r--r--test/elf/AArch64/rel-abs32.test59
-rw-r--r--test/elf/AArch64/rel-abs64.test59
-rw-r--r--test/elf/AArch64/rel-bad.test44
-rw-r--r--test/elf/ARM/arm-symbols.test52
-rw-r--r--test/elf/ARM/defsym.test51
-rw-r--r--test/elf/ARM/entry-point.test77
-rw-r--r--test/elf/ARM/missing-symbol.test39
-rw-r--r--test/elf/ARM/rel-abs32.test59
-rw-r--r--test/elf/ARM/rel-arm-call.test60
-rw-r--r--test/elf/ARM/rel-arm-jump24-veneer-b.test101
-rw-r--r--test/elf/ARM/rel-arm-jump24-veneer-bl.test100
-rw-r--r--test/elf/ARM/rel-arm-jump24.test58
-rw-r--r--test/elf/ARM/rel-arm-mov.test64
-rw-r--r--test/elf/ARM/rel-arm-prel31.test47
-rw-r--r--test/elf/ARM/rel-arm-thm-interwork.test123
-rw-r--r--test/elf/ARM/rel-rel32.test57
-rw-r--r--test/elf/ARM/rel-thm-call.test61
-rw-r--r--test/elf/ARM/rel-thm-jump11.test141
-rw-r--r--test/elf/ARM/rel-thm-jump24-veneer.test100
-rw-r--r--test/elf/ARM/rel-thm-jump24.test59
-rw-r--r--test/elf/ARM/rel-thm-mov.test70
-rw-r--r--test/elf/ARM/rel-tls-ie32.test109
-rw-r--r--test/elf/ARM/rel-tls-le32.test61
-rw-r--r--test/elf/ARM/thm-symbols.test52
-rw-r--r--test/elf/ARM/undef-lazy-symbol.test135
-rw-r--r--test/elf/Hexagon/dynlib-data.test9
-rw-r--r--test/elf/Hexagon/dynlib-gotoff.test128
-rw-r--r--test/elf/Hexagon/dynlib-hash.test9
-rw-r--r--test/elf/Hexagon/dynlib-rela.test9
-rw-r--r--test/elf/Hexagon/dynlib-syms.test7
-rw-r--r--test/elf/Hexagon/dynlib.test36
-rw-r--r--test/elf/Hexagon/hexagon-got-plt-order.test5
-rw-r--r--test/elf/Hexagon/hexagon-plt-setup.test12
-rw-r--r--test/elf/Hexagon/maxalignment.test8
-rw-r--r--test/elf/Hexagon/rela-order.test9
-rw-r--r--test/elf/Hexagon/sda-base.test4
-rw-r--r--test/elf/Hexagon/zerofillquick-sdata.test18
-rw-r--r--test/elf/Inputs/consecutive-weak-defs.o.yaml66
-rw-r--r--test/elf/Inputs/init_array.x86-64bin3440 -> 0 bytes
-rw-r--r--test/elf/Inputs/main-with-global-def.o.yaml56
-rw-r--r--test/elf/Inputs/undef2-so.o.yaml50
-rw-r--r--test/elf/Mips/base-address-64.test78
-rw-r--r--test/elf/Mips/base-address.test109
-rw-r--r--test/elf/Mips/ctors-order.test163
-rw-r--r--test/elf/Mips/dt-textrel-64.test74
-rw-r--r--test/elf/Mips/dt-textrel.test74
-rw-r--r--test/elf/Mips/dynlib-dynamic.test110
-rw-r--r--test/elf/Mips/dynlib-dynsym-micro.test208
-rw-r--r--test/elf/Mips/dynlib-dynsym.test202
-rw-r--r--test/elf/Mips/dynlib-fileheader-64.test72
-rw-r--r--test/elf/Mips/dynlib-fileheader-micro-64.test75
-rw-r--r--test/elf/Mips/dynlib-fileheader-micro.test82
-rw-r--r--test/elf/Mips/dynlib-fileheader.test80
-rw-r--r--test/elf/Mips/dynsym-table-1.test127
-rw-r--r--test/elf/Mips/dynsym-table-2.test105
-rw-r--r--test/elf/Mips/e-flags-merge-1-64.test30
-rw-r--r--test/elf/Mips/e-flags-merge-1.test56
-rw-r--r--test/elf/Mips/e-flags-merge-10.test43
-rw-r--r--test/elf/Mips/e-flags-merge-11.test43
-rw-r--r--test/elf/Mips/e-flags-merge-2-64.test33
-rw-r--r--test/elf/Mips/e-flags-merge-2.test35
-rw-r--r--test/elf/Mips/e-flags-merge-3-64.test130
-rw-r--r--test/elf/Mips/e-flags-merge-3.test134
-rw-r--r--test/elf/Mips/e-flags-merge-4-64.test64
-rw-r--r--test/elf/Mips/e-flags-merge-4.test65
-rw-r--r--test/elf/Mips/e-flags-merge-5-64.test42
-rw-r--r--test/elf/Mips/e-flags-merge-5.test42
-rw-r--r--test/elf/Mips/e-flags-merge-6-64.test79
-rw-r--r--test/elf/Mips/e-flags-merge-6.test80
-rw-r--r--test/elf/Mips/e-flags-merge-7-64.test42
-rw-r--r--test/elf/Mips/e-flags-merge-7.test42
-rw-r--r--test/elf/Mips/e-flags-merge-8.test65
-rw-r--r--test/elf/Mips/e-flags-merge-9.test43
-rw-r--r--test/elf/Mips/entry-name.test26
-rw-r--r--test/elf/Mips/exe-dynamic.test108
-rw-r--r--test/elf/Mips/exe-dynsym-micro.test94
-rw-r--r--test/elf/Mips/exe-dynsym.test91
-rw-r--r--test/elf/Mips/exe-fileheader-64.test66
-rw-r--r--test/elf/Mips/exe-fileheader-micro-64.test68
-rw-r--r--test/elf/Mips/exe-fileheader-micro.test69
-rw-r--r--test/elf/Mips/exe-fileheader.test105
-rw-r--r--test/elf/Mips/exe-got-micro.test115
-rw-r--r--test/elf/Mips/exe-got.test116
-rw-r--r--test/elf/Mips/got-page-32.test203
-rw-r--r--test/elf/Mips/got-page-64.test203
-rw-r--r--test/elf/Mips/got16-2.test73
-rw-r--r--test/elf/Mips/got16-micro.test165
-rw-r--r--test/elf/Mips/got16.test196
-rw-r--r--test/elf/Mips/gotsym.test43
-rw-r--r--test/elf/Mips/gp-sym-1-micro.test88
-rw-r--r--test/elf/Mips/gp-sym-1.test86
-rw-r--r--test/elf/Mips/gp-sym-2.test103
-rw-r--r--test/elf/Mips/hilo16-1.test44
-rw-r--r--test/elf/Mips/hilo16-2.test68
-rw-r--r--test/elf/Mips/hilo16-3.test45
-rw-r--r--test/elf/Mips/hilo16-4.test93
-rw-r--r--test/elf/Mips/hilo16-5.test103
-rw-r--r--test/elf/Mips/hilo16-8-micro.test81
-rw-r--r--test/elf/Mips/hilo16-9-micro.test68
-rw-r--r--test/elf/Mips/initfini-micro.test45
-rw-r--r--test/elf/Mips/interpreter-64.test26
-rw-r--r--test/elf/Mips/interpreter.test26
-rw-r--r--test/elf/Mips/invalid-reginfo.test28
-rw-r--r--test/elf/Mips/jalx-align-err.test46
-rw-r--r--test/elf/Mips/jump-fix-err.test45
-rw-r--r--test/elf/Mips/la25-stub-micro.test140
-rw-r--r--test/elf/Mips/la25-stub.test133
-rw-r--r--test/elf/Mips/mips-options-gp0.test78
-rw-r--r--test/elf/Mips/n64-rel-chain.test134
-rw-r--r--test/elf/Mips/opt-emulation.test41
-rw-r--r--test/elf/Mips/pc23-range.test56
-rw-r--r--test/elf/Mips/plt-entry-mixed-1.test114
-rw-r--r--test/elf/Mips/plt-entry-mixed-2.test93
-rw-r--r--test/elf/Mips/plt-entry-mixed-3.test98
-rw-r--r--test/elf/Mips/plt-entry-mixed-4.test85
-rw-r--r--test/elf/Mips/plt-entry-r6.test109
-rw-r--r--test/elf/Mips/plt-header-micro.test108
-rw-r--r--test/elf/Mips/plt-header-mixed.test105
-rw-r--r--test/elf/Mips/plt-header.test99
-rw-r--r--test/elf/Mips/r26-1-micro.test131
-rw-r--r--test/elf/Mips/r26-1.test132
-rw-r--r--test/elf/Mips/r26-2-micro.test88
-rw-r--r--test/elf/Mips/r26-2.test82
-rw-r--r--test/elf/Mips/rel-32.test59
-rw-r--r--test/elf/Mips/rel-64.test61
-rw-r--r--test/elf/Mips/rel-copy-micro.test159
-rw-r--r--test/elf/Mips/rel-copy-pc.test113
-rw-r--r--test/elf/Mips/rel-copy.test177
-rw-r--r--test/elf/Mips/rel-dynamic-01-micro.test201
-rw-r--r--test/elf/Mips/rel-dynamic-01.test237
-rw-r--r--test/elf/Mips/rel-dynamic-02.test82
-rw-r--r--test/elf/Mips/rel-dynamic-03-micro.test133
-rw-r--r--test/elf/Mips/rel-dynamic-03.test129
-rw-r--r--test/elf/Mips/rel-dynamic-04-micro.test211
-rw-r--r--test/elf/Mips/rel-dynamic-04.test206
-rw-r--r--test/elf/Mips/rel-dynamic-05-micro.test192
-rw-r--r--test/elf/Mips/rel-dynamic-05.test188
-rw-r--r--test/elf/Mips/rel-dynamic-06-64.test101
-rw-r--r--test/elf/Mips/rel-dynamic-06.test103
-rw-r--r--test/elf/Mips/rel-dynamic-07-64.test261
-rw-r--r--test/elf/Mips/rel-dynamic-07.test276
-rw-r--r--test/elf/Mips/rel-dynamic-08-64.test233
-rw-r--r--test/elf/Mips/rel-dynamic-08-micro.test236
-rw-r--r--test/elf/Mips/rel-dynamic-08.test233
-rw-r--r--test/elf/Mips/rel-dynamic-09-micro.test109
-rw-r--r--test/elf/Mips/rel-dynamic-09.test107
-rw-r--r--test/elf/Mips/rel-dynamic-10-micro.test166
-rw-r--r--test/elf/Mips/rel-dynamic-10.test160
-rw-r--r--test/elf/Mips/rel-dynamic-11.test110
-rw-r--r--test/elf/Mips/rel-dynamic-12.test213
-rw-r--r--test/elf/Mips/rel-gprel16.test104
-rw-r--r--test/elf/Mips/rel-gprel32-64.test70
-rw-r--r--test/elf/Mips/rel-gprel32.test84
-rw-r--r--test/elf/Mips/rel-pc-hilo.test70
-rw-r--r--test/elf/Mips/rel-pc18-s3.test54
-rw-r--r--test/elf/Mips/rel-pc19-s2.test54
-rw-r--r--test/elf/Mips/rel-pc21-s2.test54
-rw-r--r--test/elf/Mips/rel-pc26-s2.test54
-rw-r--r--test/elf/Mips/rel-pc32.test59
-rw-r--r--test/elf/Mips/rel-pc7-10-16-23.test86
-rw-r--r--test/elf/Mips/rel-sub.test61
-rw-r--r--test/elf/Mips/st-other.test90
-rw-r--r--test/elf/Mips/tls-1-micro.test65
-rw-r--r--test/elf/Mips/tls-1.test63
-rw-r--r--test/elf/Mips/tls-2-64.test69
-rw-r--r--test/elf/Mips/tls-2-micro.test70
-rw-r--r--test/elf/Mips/tls-2.test69
-rw-r--r--test/elf/Mips/tls-3-micro.test183
-rw-r--r--test/elf/Mips/tls-3.test180
-rw-r--r--test/elf/Mips/tls-4-micro.test126
-rw-r--r--test/elf/Mips/tls-4.test123
-rw-r--r--test/elf/Mips/tls-5-64.test71
-rw-r--r--test/elf/Mips/tls-5-micro.test70
-rw-r--r--test/elf/Mips/tls-5.test69
-rw-r--r--test/elf/X86_64/ExampleTarget/triple.test32
-rw-r--r--test/elf/X86_64/Inputs/generaltls-so.o.yaml68
-rw-r--r--test/elf/X86_64/alignoffset.test119
-rw-r--r--test/elf/X86_64/debug.test57
-rw-r--r--test/elf/X86_64/defsym.test22
-rw-r--r--test/elf/X86_64/demangle.test12
-rw-r--r--test/elf/X86_64/dontignorezerosize-sections.test9
-rw-r--r--test/elf/X86_64/dynamicvars.test124
-rw-r--r--test/elf/X86_64/dynlib-nointerp-section.test4
-rw-r--r--test/elf/X86_64/dynlib-search.test6
-rw-r--r--test/elf/X86_64/dynsym-weak.test118
-rw-r--r--test/elf/X86_64/extern-tls.test16
-rw-r--r--test/elf/X86_64/general-dynamic-tls.test129
-rw-r--r--test/elf/X86_64/imagebase.test94
-rw-r--r--test/elf/X86_64/initfini-order.test10
-rw-r--r--test/elf/X86_64/initfini.test23
-rw-r--r--test/elf/X86_64/largebss.test20
-rw-r--r--test/elf/X86_64/layoutpass-order.test14
-rw-r--r--test/elf/X86_64/maxpagesize.test113
-rw-r--r--test/elf/X86_64/mergesimilarstrings.test47
-rw-r--r--test/elf/X86_64/multi-weak-layout.test52
-rw-r--r--test/elf/X86_64/multi-weak-override.test16
-rw-r--r--test/elf/X86_64/multi-weak-syms-order.test13
-rw-r--r--test/elf/X86_64/nmagic.test91
-rw-r--r--test/elf/X86_64/noalignsegments.test95
-rw-r--r--test/elf/X86_64/note-sections-ro_plus_rw.test42
-rw-r--r--test/elf/X86_64/note-sections.test23
-rw-r--r--test/elf/X86_64/omagic.test237
-rw-r--r--test/elf/X86_64/outputsegments.test189
-rw-r--r--test/elf/X86_64/reloc_r_x86_64_16.test60
-rw-r--r--test/elf/X86_64/reloc_r_x86_64_pc16.test61
-rw-r--r--test/elf/X86_64/reloc_r_x86_64_pc64.test61
-rw-r--r--test/elf/X86_64/rodata.test9
-rw-r--r--test/elf/X86_64/sectionchoice.test7
-rw-r--r--test/elf/X86_64/sectionmap.test22
-rw-r--r--test/elf/X86_64/startGroupEndGroup.test48
-rw-r--r--test/elf/X86_64/startGroupEndGroupWithDynlib.test10
-rw-r--r--test/elf/X86_64/staticlib-search.test6
-rw-r--r--test/elf/X86_64/undef.test18
-rw-r--r--test/elf/X86_64/underscore-end.test81
-rw-r--r--test/elf/X86_64/weak-override.test45
-rw-r--r--test/elf/X86_64/weak-zero-sized.test26
-rw-r--r--test/elf/X86_64/weaksym.test78
-rw-r--r--test/elf/X86_64/yamlinput.test166
-rw-r--r--test/elf/abs-dup.objtxt19
-rw-r--r--test/elf/abs.test19
-rw-r--r--test/elf/allowduplicates.objtxt51
-rw-r--r--test/elf/archive-elf-forceload.test43
-rw-r--r--test/elf/archive-elf.test38
-rw-r--r--test/elf/as-needed.test15
-rw-r--r--test/elf/branch.test34
-rw-r--r--test/elf/check.test39
-rw-r--r--test/elf/checkrodata.test9
-rw-r--r--test/elf/common.test10
-rw-r--r--test/elf/consecutive-weak-sym-defs.test81
-rw-r--r--test/elf/defsym.objtxt28
-rw-r--r--test/elf/dynamic-segorder.test17
-rw-r--r--test/elf/dynamic-undef.test34
-rw-r--r--test/elf/dynamic.test80
-rw-r--r--test/elf/eh_frame_hdr.test30
-rw-r--r--test/elf/entry.objtxt58
-rw-r--r--test/elf/export-dynamic.test99
-rw-r--r--test/elf/filenotfound.test3
-rw-r--r--test/elf/gnulinkonce/gnulinkonce-report-discarded-reference.test147
-rw-r--r--test/elf/gnulinkonce/gnulinkonce-report-undef.test129
-rw-r--r--test/elf/gnulinkonce/gnulinkonce.test151
-rw-r--r--test/elf/gotpcrel.test21
-rw-r--r--test/elf/gottpoff.test120
-rw-r--r--test/elf/group-cmd-search.test134
-rw-r--r--test/elf/hexagon-quickdata-sort.test12
-rw-r--r--test/elf/hexagon-quickdata-sortcommon.test16
-rw-r--r--test/elf/ifunc.test69
-rw-r--r--test/elf/ignore-unknownoption.test5
-rw-r--r--test/elf/init_array-order.test67
-rw-r--r--test/elf/init_array.test6
-rw-r--r--test/elf/initfini-options.test-1.test33
-rw-r--r--test/elf/initfini-options.test-2.test47
-rw-r--r--test/elf/initfini-options.test-3.test53
-rw-r--r--test/elf/librarynotfound.test5
-rw-r--r--test/elf/linker-as-ld.test16
-rw-r--r--test/elf/linkerscript/Inputs/prog1.o.yaml88
-rw-r--r--test/elf/linkerscript/Inputs/prog2.o.yaml89
-rw-r--r--test/elf/linkerscript/Inputs/prog3.o.yaml52
-rw-r--r--test/elf/linkerscript/Inputs/simple.o.yaml52
-rw-r--r--test/elf/linkerscript/externs.objtxt21
-rw-r--r--test/elf/linkerscript/invalid-script-cli-1.test10
-rw-r--r--test/elf/linkerscript/invalid-script-cli-2.test6
-rw-r--r--test/elf/linkerscript/invalid.test5
-rw-r--r--test/elf/linkerscript/sections-order.test97
-rw-r--r--test/elf/linkerscript/sections-with-wildcards.test88
-rw-r--r--test/elf/linkerscript/symbol-definition.test54
-rw-r--r--test/elf/linkerscript/valid-script-cli.objtxt23
-rw-r--r--test/elf/loginputfiles.test28
-rw-r--r--test/elf/mergeatoms.test6
-rw-r--r--test/elf/mergeconstants.test20
-rw-r--r--test/elf/mergeglobalatoms.test11
-rw-r--r--test/elf/note.test49
-rw-r--r--test/elf/options/dynamic-linker.test17
-rw-r--r--test/elf/phdr.test99
-rw-r--r--test/elf/quickdata.test15
-rw-r--r--test/elf/reloc.test38
-rw-r--r--test/elf/responsefile.test6
-rw-r--r--test/elf/rodata.test5
-rw-r--r--test/elf/rosegment.test26
-rw-r--r--test/elf/sectionGroups/sectiongroup-new-members.test153
-rw-r--r--test/elf/sectionGroups/sectiongroup-simple.test146
-rw-r--r--test/elf/sectionGroups/sectiongroup-undef-member-other.test158
-rw-r--r--test/elf/sectionGroups/sectiongroup-undef-member.test144
-rw-r--r--test/elf/sectionGroups/sectiongroup-with-globalsymbols.test253
-rw-r--r--test/elf/sectionGroups/sectiongroup-with-undef-external-reference.test239
-rw-r--r--test/elf/sectionGroups/sectiongroup-with-undef-signature.test222
-rw-r--r--test/elf/sections.test142
-rw-r--r--test/elf/sh_addralign.test38
-rw-r--r--test/elf/soname.test6
-rw-r--r--test/elf/strip-all.test107
-rw-r--r--test/elf/stripped-empty.test4
-rw-r--r--test/elf/symbols.test33
-rw-r--r--test/elf/tls.test43
-rw-r--r--test/elf/tlsAddr.test7
-rw-r--r--test/elf/undef-from-dso-to-main.test52
-rw-r--r--test/elf/undef-from-main-dso.test43
-rw-r--r--test/elf/weaksym.test7
-rw-r--r--test/elf/wrap.test279
-rw-r--r--test/elf/x86-64-dynamic-relocs.test26
-rw-r--r--test/elf/x86-64-dynamic.test79
-rw-r--r--test/elf/x86.test38
-rw-r--r--test/elf/x86_64-kinds.test23
-rw-r--r--test/lit.cfg87
-rw-r--r--test/mach-o/Inputs/PIE.yaml6
-rw-r--r--test/mach-o/Inputs/arm-interworking.yaml83
-rw-r--r--test/mach-o/Inputs/arm-shims.yaml60
-rw-r--r--test/mach-o/Inputs/cstring-sections.yaml25
-rw-r--r--test/mach-o/Inputs/got-order.yaml53
-rw-r--r--test/mach-o/Inputs/got-order2.yaml11
-rw-r--r--test/mach-o/Inputs/hello-world-arm64.yaml8
-rw-r--r--test/mach-o/Inputs/hello-world-armv6.yaml7
-rw-r--r--test/mach-o/Inputs/hello-world-armv7.yaml7
-rw-r--r--test/mach-o/Inputs/hello-world-x86.yaml7
-rw-r--r--test/mach-o/Inputs/hello-world-x86_64.yaml8
-rw-r--r--test/mach-o/Inputs/hw.raw_bytes1
-rw-r--r--test/mach-o/Inputs/interposing-section.yaml6
-rw-r--r--test/mach-o/Inputs/lazy-bind-x86_64-2.yaml8
-rw-r--r--test/mach-o/Inputs/lazy-bind-x86_64-3.yaml8
-rw-r--r--test/mach-o/Inputs/lazy-bind-x86_64.yaml8
-rw-r--r--test/mach-o/Inputs/linker-as-ld.yaml6
-rw-r--r--test/mach-o/Inputs/re-exported-dylib-ordinal.yaml21
-rw-r--r--test/mach-o/Inputs/re-exported-dylib-ordinal2.yaml18
-rw-r--r--test/mach-o/Inputs/re-exported-dylib-ordinal3.yaml19
-rw-r--r--test/mach-o/Inputs/unwind-info-simple-arm64.yaml13
-rw-r--r--test/mach-o/Inputs/use-simple-dylib.yaml58
-rw-r--r--test/mach-o/Inputs/write-final-sections.yaml20
-rw-r--r--test/mach-o/Inputs/wrong-arch-error.yaml24
-rw-r--r--test/mach-o/PIE.yaml16
-rw-r--r--test/mach-o/align_text.yaml10
-rw-r--r--test/mach-o/arm-interworking-movw.yaml20
-rw-r--r--test/mach-o/arm-interworking.yaml160
-rw-r--r--test/mach-o/arm-shims.yaml83
-rw-r--r--test/mach-o/arm-subsections-via-symbols.yaml4
-rw-r--r--test/mach-o/arm64-reloc-negDelta32-fixup.yaml124
-rw-r--r--test/mach-o/arm64-relocs-errors-delta64-offset.yaml65
-rw-r--r--test/mach-o/cstring-sections.yaml26
-rw-r--r--test/mach-o/data-only-dylib.yaml2
-rw-r--r--test/mach-o/demangle.yaml2
-rw-r--r--test/mach-o/dylib-exports.yaml41
-rw-r--r--test/mach-o/executable-exports.yaml46
-rw-r--r--test/mach-o/exported_symbols_list-dylib.yaml2
-rw-r--r--test/mach-o/exported_symbols_list-obj.yaml2
-rw-r--r--test/mach-o/exported_symbols_list-undef.yaml2
-rw-r--r--test/mach-o/fat-archive.yaml8
-rw-r--r--test/mach-o/flat_namespace_undef_error.yaml17
-rw-r--r--test/mach-o/flat_namespace_undef_suppress.yaml17
-rw-r--r--test/mach-o/force_load-dylib.yaml4
-rw-r--r--test/mach-o/force_load-x86_64.yaml4
-rw-r--r--test/mach-o/framework-user-paths.yaml2
-rw-r--r--test/mach-o/gcc_except_tab-got-arm64.yaml53
-rw-r--r--test/mach-o/got-order.yaml85
-rw-r--r--test/mach-o/hello-world-arm64.yaml14
-rw-r--r--test/mach-o/hello-world-armv6.yaml10
-rw-r--r--test/mach-o/hello-world-armv7.yaml25
-rw-r--r--test/mach-o/hello-world-x86.yaml19
-rw-r--r--test/mach-o/hello-world-x86_64.yaml55
-rw-r--r--test/mach-o/image-base.yaml13
-rw-r--r--test/mach-o/infer-arch.yaml2
-rw-r--r--test/mach-o/interposing-section.yaml25
-rw-r--r--test/mach-o/keep_private_externs.yaml2
-rw-r--r--test/mach-o/lazy-bind-x86_64.yaml31
-rw-r--r--test/mach-o/library-order.yaml6
-rw-r--r--test/mach-o/library-rescan.yaml6
-rw-r--r--test/mach-o/linker-as-ld.yaml11
-rw-r--r--test/mach-o/objc_export_list.yaml18
-rw-r--r--test/mach-o/parse-aliases.yaml2
-rw-r--r--test/mach-o/parse-arm-relocs.yaml14
-rw-r--r--test/mach-o/parse-cfstring64.yaml8
-rw-r--r--test/mach-o/parse-data-in-code-armv7.yaml12
-rw-r--r--test/mach-o/parse-data-relocs-x86_64.yaml184
-rw-r--r--test/mach-o/parse-eh-frame-relocs-x86_64.yaml176
-rw-r--r--test/mach-o/parse-eh-frame-x86-anon.yaml50
-rw-r--r--test/mach-o/parse-eh-frame-x86-labeled.yaml58
-rw-r--r--test/mach-o/parse-function.yaml6
-rw-r--r--test/mach-o/parse-initializers64.yaml10
-rw-r--r--test/mach-o/parse-literals-error.yaml2
-rw-r--r--test/mach-o/parse-literals.yaml22
-rw-r--r--test/mach-o/parse-relocs-x86.yaml30
-rw-r--r--test/mach-o/parse-tentative-defs.yaml10
-rw-r--r--test/mach-o/parse-text-relocs-x86_64.yaml42
-rw-r--r--test/mach-o/parse-tlv-relocs-x86-64.yaml100
-rw-r--r--test/mach-o/re-exported-dylib-ordinal.yaml67
-rw-r--r--test/mach-o/rpath.yaml2
-rw-r--r--test/mach-o/run-tlv-pass-x86-64.yaml144
-rw-r--r--test/mach-o/sectalign.yaml4
-rw-r--r--test/mach-o/sectcreate.yaml12
-rw-r--r--test/mach-o/stack-size.yaml24
-rw-r--r--test/mach-o/twolevel_namespace_undef_dynamic_lookup.yaml17
-rw-r--r--test/mach-o/twolevel_namespace_undef_warning_suppress.yaml23
-rw-r--r--test/mach-o/unwind-info-simple-arm64.yaml89
-rw-r--r--test/mach-o/unwind-info-simple-x86_64.yaml23
-rw-r--r--test/mach-o/upward-dylib-load-command.yaml4
-rw-r--r--test/mach-o/use-simple-dylib.yaml62
-rw-r--r--test/mach-o/write-final-sections.yaml48
-rw-r--r--test/mach-o/wrong-arch-error.yaml25
-rw-r--r--test/old-elf/AArch64/Inputs/fn.c (renamed from test/elf/AArch64/Inputs/fn.c)0
-rw-r--r--test/old-elf/AArch64/Inputs/fn.o (renamed from test/elf/AArch64/Inputs/fn.o)bin899 -> 899 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/general-dyn-tls-0.yaml64
-rw-r--r--test/old-elf/AArch64/Inputs/initfini-option.c (renamed from test/elf/AArch64/Inputs/initfini-option.c)0
-rw-r--r--test/old-elf/AArch64/Inputs/initfini-option.o (renamed from test/elf/AArch64/Inputs/initfini-option.o)bin1552 -> 1552 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/initfini.c (renamed from test/elf/AArch64/Inputs/initfini.c)0
-rw-r--r--test/old-elf/AArch64/Inputs/initfini.o (renamed from test/elf/AArch64/Inputs/initfini.o)bin2056 -> 2056 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/initial-exec-tls-1.yaml77
-rw-r--r--test/old-elf/AArch64/Inputs/main.c (renamed from test/elf/AArch64/Inputs/main.c)0
-rw-r--r--test/old-elf/AArch64/Inputs/main.o (renamed from test/elf/AArch64/Inputs/main.o)bin1064 -> 1064 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/no-interp-section.c (renamed from test/elf/AArch64/Inputs/no-interp-section.c)0
-rw-r--r--test/old-elf/AArch64/Inputs/no-interp-section.o (renamed from test/elf/AArch64/Inputs/no-interp-section.o)bin903 -> 903 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/zerosizedsection.o (renamed from test/elf/AArch64/Inputs/zerosizedsection.o)bin816 -> 816 bytes
-rw-r--r--test/old-elf/AArch64/Inputs/zerosizedsection.s (renamed from test/elf/AArch64/Inputs/zerosizedsection.s)0
-rw-r--r--test/old-elf/AArch64/defsym.test22
-rw-r--r--test/old-elf/AArch64/dontignorezerosize-sections.test9
-rw-r--r--test/old-elf/AArch64/dynamicvars.test113
-rw-r--r--test/old-elf/AArch64/dynlib-nointerp-section.test5
-rw-r--r--test/old-elf/AArch64/general-dyn-tls-0.test103
-rw-r--r--test/old-elf/AArch64/initfini.test23
-rw-r--r--test/old-elf/AArch64/initial-exec-tls-0.test146
-rw-r--r--test/old-elf/AArch64/local-tls.test184
-rw-r--r--test/old-elf/AArch64/rel-abs16-overflow.test44
-rw-r--r--test/old-elf/AArch64/rel-abs16.test53
-rw-r--r--test/old-elf/AArch64/rel-abs32-overflow.test53
-rw-r--r--test/old-elf/AArch64/rel-abs32.test59
-rw-r--r--test/old-elf/AArch64/rel-abs64.test59
-rw-r--r--test/old-elf/AArch64/rel-adr_prel_lo21-overflow.test45
-rw-r--r--test/old-elf/AArch64/rel-adr_prel_lo21.test51
-rw-r--r--test/old-elf/AArch64/rel-adr_prel_pg_hi21-overflow.test45
-rw-r--r--test/old-elf/AArch64/rel-adr_prel_pg_hi21.test52
-rw-r--r--test/old-elf/AArch64/rel-bad.test44
-rw-r--r--test/old-elf/AArch64/rel-prel16-overflow.test53
-rw-r--r--test/old-elf/AArch64/rel-prel16.test59
-rw-r--r--test/old-elf/AArch64/rel-prel32-overflow.test53
-rw-r--r--test/old-elf/AArch64/rel-prel32.test59
-rw-r--r--test/old-elf/AArch64/rel-prel64.test59
-rw-r--r--test/old-elf/AMDGPU/hsa.test53
-rw-r--r--test/old-elf/ARM/Inputs/fn.c1
-rwxr-xr-xtest/old-elf/ARM/Inputs/libfn.sobin0 -> 4972 bytes
-rwxr-xr-xtest/old-elf/ARM/Inputs/libobj.sobin0 -> 5067 bytes
-rw-r--r--test/old-elf/ARM/Inputs/obj.c4
-rw-r--r--test/old-elf/ARM/arm-symbols.test51
-rw-r--r--test/old-elf/ARM/defsym.test50
-rw-r--r--test/old-elf/ARM/dynamic-symbols.test83
-rw-r--r--test/old-elf/ARM/entry-point.test113
-rw-r--r--test/old-elf/ARM/exidx.test254
-rw-r--r--test/old-elf/ARM/header-flags.test57
-rw-r--r--test/old-elf/ARM/mapping-code-model.test160
-rw-r--r--test/old-elf/ARM/mapping-symbols.test122
-rw-r--r--test/old-elf/ARM/missing-symbol.test38
-rw-r--r--test/old-elf/ARM/plt-dynamic.test200
-rw-r--r--test/old-elf/ARM/plt-ifunc-interwork.test396
-rw-r--r--test/old-elf/ARM/plt-ifunc-mapping.test109
-rw-r--r--test/old-elf/ARM/rel-abs32.test58
-rw-r--r--test/old-elf/ARM/rel-arm-call.test112
-rw-r--r--test/old-elf/ARM/rel-arm-jump24-veneer-b.test122
-rw-r--r--test/old-elf/ARM/rel-arm-jump24-veneer-bl.test120
-rw-r--r--test/old-elf/ARM/rel-arm-jump24.test108
-rw-r--r--test/old-elf/ARM/rel-arm-mov.test64
-rw-r--r--test/old-elf/ARM/rel-arm-prel31.test90
-rw-r--r--test/old-elf/ARM/rel-arm-target1.test114
-rw-r--r--test/old-elf/ARM/rel-arm-thm-interwork.test121
-rw-r--r--test/old-elf/ARM/rel-base-prel.test61
-rw-r--r--test/old-elf/ARM/rel-copy.test60
-rw-r--r--test/old-elf/ARM/rel-glob-dat.test57
-rw-r--r--test/old-elf/ARM/rel-got-brel.test63
-rw-r--r--test/old-elf/ARM/rel-group-relocs.test71
-rw-r--r--test/old-elf/ARM/rel-ifunc.test101
-rw-r--r--test/old-elf/ARM/rel-jump-slot.test50
-rw-r--r--test/old-elf/ARM/rel-rel32.test56
-rw-r--r--test/old-elf/ARM/rel-thm-call.test114
-rw-r--r--test/old-elf/ARM/rel-thm-jump11.test209
-rw-r--r--test/old-elf/ARM/rel-thm-jump24-veneer.test120
-rw-r--r--test/old-elf/ARM/rel-thm-jump24.test110
-rw-r--r--test/old-elf/ARM/rel-thm-mov.test70
-rw-r--r--test/old-elf/ARM/rel-tls-ie32.test125
-rw-r--r--test/old-elf/ARM/rel-tls-le32.test73
-rw-r--r--test/old-elf/ARM/rel-v4bx.test72
-rw-r--r--test/old-elf/ARM/thm-symbols.test51
-rw-r--r--test/old-elf/ARM/two-got-for-symbol.test62
-rw-r--r--test/old-elf/ARM/undef-lazy-symbol.test133
-rw-r--r--test/old-elf/ARM/veneer-mapping.test92
-rw-r--r--test/old-elf/ARM/weak-branch.test221
-rw-r--r--test/old-elf/Hexagon/Inputs/dynobj-data.c (renamed from test/elf/Hexagon/Inputs/dynobj-data.c)0
-rw-r--r--test/old-elf/Hexagon/Inputs/dynobj-data.o (renamed from test/elf/Hexagon/Inputs/dynobj-data.o)bin916 -> 916 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/dynobj.c (renamed from test/elf/Hexagon/Inputs/dynobj.c)0
-rw-r--r--test/old-elf/Hexagon/Inputs/dynobj.o (renamed from test/elf/Hexagon/Inputs/dynobj.o)bin1288 -> 1288 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/got-plt-order.c (renamed from test/elf/Hexagon/Inputs/got-plt-order.c)0
-rw-r--r--test/old-elf/Hexagon/Inputs/got-plt-order.o (renamed from test/elf/Hexagon/Inputs/got-plt-order.o)bin964 -> 964 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/libMaxAlignment.a (renamed from test/elf/Hexagon/Inputs/libMaxAlignment.a)bin1010 -> 1010 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/sda-base.o (renamed from test/elf/Hexagon/Inputs/sda-base.o)bin1469 -> 1469 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/sdata1.c (renamed from test/elf/Hexagon/Inputs/sdata1.c)0
-rw-r--r--test/old-elf/Hexagon/Inputs/sdata1.o (renamed from test/elf/Hexagon/Inputs/sdata1.o)bin684 -> 684 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/sdata2.c (renamed from test/elf/Hexagon/Inputs/sdata2.c)0
-rw-r--r--test/old-elf/Hexagon/Inputs/sdata2.o (renamed from test/elf/Hexagon/Inputs/sdata2.o)bin829 -> 829 bytes
-rw-r--r--test/old-elf/Hexagon/Inputs/use-shared.hexagon (renamed from test/elf/Hexagon/Inputs/use-shared.hexagon)bin872 -> 872 bytes
-rw-r--r--test/old-elf/Hexagon/dynlib-data.test9
-rw-r--r--test/old-elf/Hexagon/dynlib-gotoff.test128
-rw-r--r--test/old-elf/Hexagon/dynlib-hash.test9
-rw-r--r--test/old-elf/Hexagon/dynlib-rela.test9
-rw-r--r--test/old-elf/Hexagon/dynlib-syms.test7
-rw-r--r--test/old-elf/Hexagon/dynlib.test36
-rw-r--r--test/old-elf/Hexagon/hexagon-got-plt-order.test5
-rw-r--r--test/old-elf/Hexagon/hexagon-plt-setup.test12
-rw-r--r--test/old-elf/Hexagon/maxalignment.test8
-rw-r--r--test/old-elf/Hexagon/rela-order.test9
-rw-r--r--test/old-elf/Hexagon/sda-base.test4
-rw-r--r--test/old-elf/Hexagon/zerofillquick-sdata.test18
-rw-r--r--test/old-elf/Inputs/abs-test.i386 (renamed from test/elf/Inputs/abs-test.i386)bin504 -> 504 bytes
-rw-r--r--test/old-elf/Inputs/allowduplicates.objtxt12
-rw-r--r--test/old-elf/Inputs/bar.o.x86-64 (renamed from test/elf/Inputs/bar.o.x86-64)bin1240 -> 1240 bytes
-rw-r--r--test/old-elf/Inputs/branch-test.hexagon (renamed from test/elf/Inputs/branch-test.hexagon)bin700 -> 700 bytes
-rw-r--r--test/old-elf/Inputs/branch-test.ppc (renamed from test/elf/Inputs/branch-test.ppc)bin852 -> 852 bytes
-rw-r--r--test/old-elf/Inputs/consecutive-weak-defs.o.yaml65
-rw-r--r--test/old-elf/Inputs/constants-merge.x86-64 (renamed from test/elf/Inputs/constants-merge.x86-64)bin1232 -> 1232 bytes
-rw-r--r--test/old-elf/Inputs/constdata.x86-64 (renamed from test/elf/Inputs/constdata.x86-64)bin1688 -> 1688 bytes
-rw-r--r--test/old-elf/Inputs/foo.o.x86-64 (renamed from test/elf/Inputs/foo.o.x86-64)bin1240 -> 1240 bytes
-rw-r--r--test/old-elf/Inputs/globalconst.c (renamed from test/elf/Inputs/globalconst.c)0
-rw-r--r--test/old-elf/Inputs/globalconst.o.x86-64 (renamed from test/elf/Inputs/globalconst.o.x86-64)bin1072 -> 1072 bytes
-rw-r--r--test/old-elf/Inputs/gotpcrel.S (renamed from test/elf/Inputs/gotpcrel.S)0
-rw-r--r--test/old-elf/Inputs/gotpcrel.x86-64 (renamed from test/elf/Inputs/gotpcrel.x86-64)bin904 -> 904 bytes
-rw-r--r--test/old-elf/Inputs/group-cmd-search-1.ls (renamed from test/elf/Inputs/group-cmd-search-1.ls)0
-rw-r--r--test/old-elf/Inputs/group-cmd-search-2.ls (renamed from test/elf/Inputs/group-cmd-search-2.ls)0
-rw-r--r--test/old-elf/Inputs/group-cmd-search-3.ls (renamed from test/elf/Inputs/group-cmd-search-3.ls)0
-rw-r--r--test/old-elf/Inputs/ifunc.S (renamed from test/elf/Inputs/ifunc.S)0
-rw-r--r--test/old-elf/Inputs/ifunc.cpp (renamed from test/elf/Inputs/ifunc.cpp)0
-rw-r--r--test/old-elf/Inputs/ifunc.cpp.x86-64 (renamed from test/elf/Inputs/ifunc.cpp.x86-64)bin1224 -> 1224 bytes
-rw-r--r--test/old-elf/Inputs/ifunc.x86-64 (renamed from test/elf/Inputs/ifunc.x86-64)bin912 -> 912 bytes
-rw-r--r--test/old-elf/Inputs/libfnarchive.a (renamed from test/elf/Inputs/libfnarchive.a)bin2656 -> 2656 bytes
-rw-r--r--test/old-elf/Inputs/libifunc.x86-64.so (renamed from test/elf/Inputs/libifunc.x86-64.so)bin2512 -> 2512 bytes
-rw-r--r--test/old-elf/Inputs/libundef.so (renamed from test/elf/Inputs/libundef.so)bin11128 -> 11128 bytes
-rwxr-xr-xtest/old-elf/Inputs/libweaksym.so (renamed from test/elf/Inputs/libweaksym.so)bin2160 -> 2160 bytes
-rw-r--r--test/old-elf/Inputs/main-with-global-def.o.yaml55
-rw-r--r--test/old-elf/Inputs/mainobj.x86_64 (renamed from test/elf/Inputs/mainobj.x86_64)bin1360 -> 1360 bytes
-rw-r--r--test/old-elf/Inputs/no-unique-section-names.x86-64bin0 -> 2128 bytes
-rw-r--r--test/old-elf/Inputs/object-test.elf-hexagon (renamed from test/elf/Inputs/object-test.elf-hexagon)bin1532 -> 1532 bytes
-rw-r--r--test/old-elf/Inputs/object-test.elf-i386 (renamed from test/elf/Inputs/object-test.elf-i386)bin1784 -> 1784 bytes
-rw-r--r--test/old-elf/Inputs/phdr.i386 (renamed from test/elf/Inputs/phdr.i386)bin17536 -> 17536 bytes
-rw-r--r--test/old-elf/Inputs/quickdata-sort-test.o.elf-hexagon (renamed from test/elf/Inputs/quickdata-sort-test.o.elf-hexagon)bin1385 -> 1385 bytes
-rw-r--r--test/old-elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon (renamed from test/elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon)bin1469 -> 1469 bytes
-rw-r--r--test/old-elf/Inputs/quickdata-test.elf-hexagon (renamed from test/elf/Inputs/quickdata-test.elf-hexagon)bin891 -> 891 bytes
-rw-r--r--test/old-elf/Inputs/reloc-test.elf-i386 (renamed from test/elf/Inputs/reloc-test.elf-i386)bin1076 -> 1076 bytes
-rw-r--r--test/old-elf/Inputs/reloc-xb.x86 (renamed from test/elf/Inputs/reloc-xb.x86)bin568 -> 568 bytes
-rw-r--r--test/old-elf/Inputs/reloc-xt.x86 (renamed from test/elf/Inputs/reloc-xt.x86)bin548 -> 548 bytes
-rw-r--r--test/old-elf/Inputs/relocs-dynamic.x86-64 (renamed from test/elf/Inputs/relocs-dynamic.x86-64)bin864 -> 864 bytes
-rw-r--r--test/old-elf/Inputs/relocs.x86-64 (renamed from test/elf/Inputs/relocs.x86-64)bin1536 -> 1536 bytes
-rw-r--r--test/old-elf/Inputs/responsefile (renamed from test/elf/Inputs/responsefile)0
-rw-r--r--test/old-elf/Inputs/rodata-test.hexagon (renamed from test/elf/Inputs/rodata-test.hexagon)bin669 -> 669 bytes
-rw-r--r--test/old-elf/Inputs/rodata-test.i386 (renamed from test/elf/Inputs/rodata-test.i386)bin537 -> 537 bytes
-rw-r--r--test/old-elf/Inputs/rodata.c (renamed from test/elf/Inputs/rodata.c)0
-rw-r--r--test/old-elf/Inputs/rodata.o (renamed from test/elf/Inputs/rodata.o)bin1568 -> 1568 bytes
-rw-r--r--test/old-elf/Inputs/section-test.i386 (renamed from test/elf/Inputs/section-test.i386)bin717 -> 717 bytes
-rw-r--r--test/old-elf/Inputs/shared.c (renamed from test/elf/Inputs/shared.c)0
-rw-r--r--test/old-elf/Inputs/shared.so-x86-64 (renamed from test/elf/Inputs/shared.so-x86-64)bin7536 -> 7536 bytes
-rw-r--r--test/old-elf/Inputs/shndx.o-x86_64bin0 -> 624 bytes
-rw-r--r--test/old-elf/Inputs/stripped-empty.x86_64bin0 -> 416 bytes
-rw-r--r--test/old-elf/Inputs/target-test.hexagon (renamed from test/elf/Inputs/target-test.hexagon)bin676 -> 676 bytes
-rw-r--r--test/old-elf/Inputs/target-test.ppc (renamed from test/elf/Inputs/target-test.ppc)bin552 -> 552 bytes
-rw-r--r--test/old-elf/Inputs/tls-tbss-size.yaml59
-rw-r--r--test/old-elf/Inputs/tls.S (renamed from test/elf/Inputs/tls.S)0
-rw-r--r--test/old-elf/Inputs/tls.c (renamed from test/elf/Inputs/tls.c)0
-rw-r--r--test/old-elf/Inputs/tls.x86-64 (renamed from test/elf/Inputs/tls.x86-64)bin1424 -> 1424 bytes
-rw-r--r--test/old-elf/Inputs/tlsAddr.x86-64 (renamed from test/elf/Inputs/tlsAddr.x86-64)bin1752 -> 1752 bytes
-rw-r--r--test/old-elf/Inputs/tlsaddr.c (renamed from test/elf/Inputs/tlsaddr.c)0
-rw-r--r--test/old-elf/Inputs/undef-from-main-so.c (renamed from test/elf/Inputs/undef-from-main-so.c)0
-rw-r--r--test/old-elf/Inputs/undef-from-main.c (renamed from test/elf/Inputs/undef-from-main.c)0
-rw-r--r--test/old-elf/Inputs/undef-pc32.o (renamed from test/elf/Inputs/undef-pc32.o)bin1248 -> 1248 bytes
-rw-r--r--test/old-elf/Inputs/undef.o (renamed from test/elf/Inputs/undef.o)bin1264 -> 1264 bytes
-rw-r--r--test/old-elf/Inputs/undef2-so.o.yaml49
-rw-r--r--test/old-elf/Inputs/use-shared-32s.c (renamed from test/elf/Inputs/use-shared-32s.c)0
-rw-r--r--test/old-elf/Inputs/use-shared-32s.x86-64 (renamed from test/elf/Inputs/use-shared-32s.x86-64)bin1336 -> 1336 bytes
-rw-r--r--test/old-elf/Inputs/use-shared.c (renamed from test/elf/Inputs/use-shared.c)0
-rw-r--r--test/old-elf/Inputs/use-shared.x86-64 (renamed from test/elf/Inputs/use-shared.x86-64)bin1376 -> 1376 bytes
-rw-r--r--test/old-elf/Inputs/weaksym.o (renamed from test/elf/Inputs/weaksym.o)bin840 -> 840 bytes
-rw-r--r--test/old-elf/Inputs/writersyms.o (renamed from test/elf/Inputs/writersyms.o)bin868 -> 868 bytes
-rw-r--r--test/old-elf/Inputs/x86-64-relocs.S (renamed from test/elf/Inputs/x86-64-relocs.S)0
-rw-r--r--test/old-elf/Mips/abi-flags-01.test35
-rw-r--r--test/old-elf/Mips/abi-flags-02.test92
-rw-r--r--test/old-elf/Mips/abi-flags-03.test149
-rw-r--r--test/old-elf/Mips/abi-flags-04.test125
-rw-r--r--test/old-elf/Mips/abi-flags-05.test186
-rw-r--r--test/old-elf/Mips/abi-flags-06.test79
-rw-r--r--test/old-elf/Mips/abi-flags-07.test60
-rw-r--r--test/old-elf/Mips/abi-flags-08.test71
-rw-r--r--test/old-elf/Mips/abi-flags-09.test67
-rw-r--r--test/old-elf/Mips/abi-flags-10.test60
-rw-r--r--test/old-elf/Mips/abi-flags-11.test59
-rw-r--r--test/old-elf/Mips/base-address-64.test80
-rw-r--r--test/old-elf/Mips/base-address.test95
-rw-r--r--test/old-elf/Mips/ctors-order.test164
-rw-r--r--test/old-elf/Mips/driver-hash-style.test15
-rw-r--r--test/old-elf/Mips/dt-textrel-64.test74
-rw-r--r--test/old-elf/Mips/dt-textrel.test74
-rw-r--r--test/old-elf/Mips/dynamic-linking.test22
-rw-r--r--test/old-elf/Mips/dynamic-sym.test41
-rw-r--r--test/old-elf/Mips/dynlib-dynamic.test110
-rw-r--r--test/old-elf/Mips/dynlib-dynsym-micro.test208
-rw-r--r--test/old-elf/Mips/dynlib-dynsym.test202
-rw-r--r--test/old-elf/Mips/dynlib-fileheader-64.test72
-rw-r--r--test/old-elf/Mips/dynlib-fileheader-micro-64.test75
-rw-r--r--test/old-elf/Mips/dynlib-fileheader-micro.test79
-rw-r--r--test/old-elf/Mips/dynlib-fileheader.test76
-rw-r--r--test/old-elf/Mips/dynsym-table-1.test127
-rw-r--r--test/old-elf/Mips/dynsym-table-2.test105
-rw-r--r--test/old-elf/Mips/e-flags-merge-1-64.test30
-rw-r--r--test/old-elf/Mips/e-flags-merge-1.test56
-rw-r--r--test/old-elf/Mips/e-flags-merge-10.test43
-rw-r--r--test/old-elf/Mips/e-flags-merge-11.test43
-rw-r--r--test/old-elf/Mips/e-flags-merge-12.test44
-rw-r--r--test/old-elf/Mips/e-flags-merge-2-64.test33
-rw-r--r--test/old-elf/Mips/e-flags-merge-2.test35
-rw-r--r--test/old-elf/Mips/e-flags-merge-3-64.test130
-rw-r--r--test/old-elf/Mips/e-flags-merge-3.test134
-rw-r--r--test/old-elf/Mips/e-flags-merge-4-64.test64
-rw-r--r--test/old-elf/Mips/e-flags-merge-4.test65
-rw-r--r--test/old-elf/Mips/e-flags-merge-5-64.test42
-rw-r--r--test/old-elf/Mips/e-flags-merge-5.test42
-rw-r--r--test/old-elf/Mips/e-flags-merge-6-64.test79
-rw-r--r--test/old-elf/Mips/e-flags-merge-6.test80
-rw-r--r--test/old-elf/Mips/e-flags-merge-7-64.test42
-rw-r--r--test/old-elf/Mips/e-flags-merge-7.test42
-rw-r--r--test/old-elf/Mips/e-flags-merge-8.test65
-rw-r--r--test/old-elf/Mips/e-flags-merge-9.test43
-rw-r--r--test/old-elf/Mips/entry-name.test26
-rw-r--r--test/old-elf/Mips/exe-dynamic.test110
-rw-r--r--test/old-elf/Mips/exe-dynsym-micro.test94
-rw-r--r--test/old-elf/Mips/exe-dynsym.test91
-rw-r--r--test/old-elf/Mips/exe-fileheader-02.test62
-rw-r--r--test/old-elf/Mips/exe-fileheader-03.test72
-rw-r--r--test/old-elf/Mips/exe-fileheader-64.test66
-rw-r--r--test/old-elf/Mips/exe-fileheader-be-64.test60
-rw-r--r--test/old-elf/Mips/exe-fileheader-be.test60
-rw-r--r--test/old-elf/Mips/exe-fileheader-micro-64.test68
-rw-r--r--test/old-elf/Mips/exe-fileheader-micro.test69
-rw-r--r--test/old-elf/Mips/exe-fileheader-n32.test65
-rw-r--r--test/old-elf/Mips/exe-fileheader.test105
-rw-r--r--test/old-elf/Mips/exe-got-micro.test115
-rw-r--r--test/old-elf/Mips/exe-got.test116
-rw-r--r--test/old-elf/Mips/got-page-32-micro.test251
-rw-r--r--test/old-elf/Mips/got-page-32.test244
-rw-r--r--test/old-elf/Mips/got-page-64-micro.test210
-rw-r--r--test/old-elf/Mips/got-page-64.test203
-rw-r--r--test/old-elf/Mips/got16-2.test73
-rw-r--r--test/old-elf/Mips/got16-micro.test165
-rw-r--r--test/old-elf/Mips/got16.test196
-rw-r--r--test/old-elf/Mips/gotsym.test43
-rw-r--r--test/old-elf/Mips/gp-sym-1-micro.test88
-rw-r--r--test/old-elf/Mips/gp-sym-1.test86
-rw-r--r--test/old-elf/Mips/gp-sym-2.test103
-rw-r--r--test/old-elf/Mips/hilo16-1.test40
-rw-r--r--test/old-elf/Mips/hilo16-2.test70
-rw-r--r--test/old-elf/Mips/hilo16-3-overflow.test44
-rw-r--r--test/old-elf/Mips/hilo16-3.test74
-rw-r--r--test/old-elf/Mips/hilo16-4.test93
-rw-r--r--test/old-elf/Mips/hilo16-5.test103
-rw-r--r--test/old-elf/Mips/hilo16-8-micro.test81
-rw-r--r--test/old-elf/Mips/hilo16-9-micro.test142
-rw-r--r--test/old-elf/Mips/initfini-micro.test45
-rw-r--r--test/old-elf/Mips/interpreter-64.test26
-rw-r--r--test/old-elf/Mips/interpreter-n32.test27
-rw-r--r--test/old-elf/Mips/interpreter.test26
-rw-r--r--test/old-elf/Mips/invalid-reginfo.test28
-rw-r--r--test/old-elf/Mips/jalx-align-err.test46
-rw-r--r--test/old-elf/Mips/jalx-jalr.test47
-rw-r--r--test/old-elf/Mips/jalx.test71
-rw-r--r--test/old-elf/Mips/jump-fix-err.test45
-rw-r--r--test/old-elf/Mips/la25-stub-be.test113
-rw-r--r--test/old-elf/Mips/la25-stub-micro-be.test121
-rw-r--r--test/old-elf/Mips/la25-stub-micro.test136
-rw-r--r--test/old-elf/Mips/la25-stub-npic-01.test153
-rw-r--r--test/old-elf/Mips/la25-stub-npic-02.test123
-rw-r--r--test/old-elf/Mips/la25-stub-npic-shared.test152
-rw-r--r--test/old-elf/Mips/la25-stub-pic.test144
-rw-r--r--test/old-elf/Mips/la25-stub.test133
-rw-r--r--test/old-elf/Mips/mips-options-01.test34
-rw-r--r--test/old-elf/Mips/mips-options-02.test104
-rw-r--r--test/old-elf/Mips/mips-options-03.test41
-rw-r--r--test/old-elf/Mips/mips-options-04.test77
-rw-r--r--test/old-elf/Mips/mips-options-05.test119
-rw-r--r--test/old-elf/Mips/mips-options-gp0.test77
-rw-r--r--test/old-elf/Mips/n32-rela-chain.test68
-rw-r--r--test/old-elf/Mips/n64-rel-chain.test204
-rw-r--r--test/old-elf/Mips/n64-rel-shift.test48
-rw-r--r--test/old-elf/Mips/opt-emulation.test43
-rw-r--r--test/old-elf/Mips/pc23-range.test54
-rw-r--r--test/old-elf/Mips/plt-entry-mixed-1.test114
-rw-r--r--test/old-elf/Mips/plt-entry-mixed-2.test93
-rw-r--r--test/old-elf/Mips/plt-entry-mixed-3.test98
-rw-r--r--test/old-elf/Mips/plt-entry-mixed-4.test85
-rw-r--r--test/old-elf/Mips/plt-entry-r6-be.test109
-rw-r--r--test/old-elf/Mips/plt-entry-r6.test109
-rw-r--r--test/old-elf/Mips/plt-header-be.test104
-rw-r--r--test/old-elf/Mips/plt-header-micro-be.test105
-rw-r--r--test/old-elf/Mips/plt-header-micro.test108
-rw-r--r--test/old-elf/Mips/plt-header-mixed.test105
-rw-r--r--test/old-elf/Mips/plt-header.test99
-rw-r--r--test/old-elf/Mips/r26-1-micro.test131
-rw-r--r--test/old-elf/Mips/r26-1.test132
-rw-r--r--test/old-elf/Mips/r26-2-micro.test31
-rw-r--r--test/old-elf/Mips/r26-2.test31
-rw-r--r--test/old-elf/Mips/reginfo-01.test30
-rw-r--r--test/old-elf/Mips/reginfo-02.test107
-rw-r--r--test/old-elf/Mips/reginfo-03.test45
-rw-r--r--test/old-elf/Mips/reginfo-04.test81
-rw-r--r--test/old-elf/Mips/reginfo-05.test123
-rw-r--r--test/old-elf/Mips/rel-16-overflow.test45
-rw-r--r--test/old-elf/Mips/rel-16.test51
-rw-r--r--test/old-elf/Mips/rel-32-be.test60
-rw-r--r--test/old-elf/Mips/rel-32.test59
-rw-r--r--test/old-elf/Mips/rel-64.test61
-rw-r--r--test/old-elf/Mips/rel-call-hilo-01.test109
-rw-r--r--test/old-elf/Mips/rel-call-hilo-micro.test154
-rw-r--r--test/old-elf/Mips/rel-copy-micro.test159
-rw-r--r--test/old-elf/Mips/rel-copy-pc.test113
-rw-r--r--test/old-elf/Mips/rel-copy.test177
-rw-r--r--test/old-elf/Mips/rel-dynamic-01-micro.test201
-rw-r--r--test/old-elf/Mips/rel-dynamic-01.test261
-rw-r--r--test/old-elf/Mips/rel-dynamic-02.test101
-rw-r--r--test/old-elf/Mips/rel-dynamic-03-micro.test133
-rw-r--r--test/old-elf/Mips/rel-dynamic-03.test129
-rw-r--r--test/old-elf/Mips/rel-dynamic-04-micro.test226
-rw-r--r--test/old-elf/Mips/rel-dynamic-04.test221
-rw-r--r--test/old-elf/Mips/rel-dynamic-05-micro.test192
-rw-r--r--test/old-elf/Mips/rel-dynamic-05.test188
-rw-r--r--test/old-elf/Mips/rel-dynamic-06-64.test114
-rw-r--r--test/old-elf/Mips/rel-dynamic-06.test115
-rw-r--r--test/old-elf/Mips/rel-dynamic-07-64.test348
-rw-r--r--test/old-elf/Mips/rel-dynamic-07.test363
-rw-r--r--test/old-elf/Mips/rel-dynamic-08-64.test275
-rw-r--r--test/old-elf/Mips/rel-dynamic-08-micro.test278
-rw-r--r--test/old-elf/Mips/rel-dynamic-08.test275
-rw-r--r--test/old-elf/Mips/rel-dynamic-09-micro.test109
-rw-r--r--test/old-elf/Mips/rel-dynamic-09.test107
-rw-r--r--test/old-elf/Mips/rel-dynamic-10-micro.test166
-rw-r--r--test/old-elf/Mips/rel-dynamic-10.test160
-rw-r--r--test/old-elf/Mips/rel-dynamic-11.test110
-rw-r--r--test/old-elf/Mips/rel-dynamic-12.test237
-rw-r--r--test/old-elf/Mips/rel-dynamic-13.test94
-rw-r--r--test/old-elf/Mips/rel-dynamic-14.test94
-rw-r--r--test/old-elf/Mips/rel-dynamic-15.test81
-rw-r--r--test/old-elf/Mips/rel-eh-01.test186
-rw-r--r--test/old-elf/Mips/rel-eh-02.test130
-rw-r--r--test/old-elf/Mips/rel-eh-03.test128
-rw-r--r--test/old-elf/Mips/rel-got-hilo-01.test109
-rw-r--r--test/old-elf/Mips/rel-got-hilo-micro.test154
-rw-r--r--test/old-elf/Mips/rel-gprel16-micro-overflow.test57
-rw-r--r--test/old-elf/Mips/rel-gprel16-micro.test78
-rw-r--r--test/old-elf/Mips/rel-gprel16-overflow.test48
-rw-r--r--test/old-elf/Mips/rel-gprel16.test104
-rw-r--r--test/old-elf/Mips/rel-gprel32-64.test84
-rw-r--r--test/old-elf/Mips/rel-gprel32.test84
-rw-r--r--test/old-elf/Mips/rel-gprel7-micro-overflow.test48
-rw-r--r--test/old-elf/Mips/rel-gprel7-micro.test65
-rw-r--r--test/old-elf/Mips/rel-hi0-lo16-micro.test58
-rw-r--r--test/old-elf/Mips/rel-high-01.test25
-rw-r--r--test/old-elf/Mips/rel-high-02.test25
-rw-r--r--test/old-elf/Mips/rel-jalr-01.test101
-rw-r--r--test/old-elf/Mips/rel-jalr-02.test68
-rw-r--r--test/old-elf/Mips/rel-lit-micro.test59
-rw-r--r--test/old-elf/Mips/rel-lit.test57
-rw-r--r--test/old-elf/Mips/rel-pc-hilo.test70
-rw-r--r--test/old-elf/Mips/rel-pc16-align.test43
-rw-r--r--test/old-elf/Mips/rel-pc16-overflow.test45
-rw-r--r--test/old-elf/Mips/rel-pc16.test53
-rw-r--r--test/old-elf/Mips/rel-pc18-s3-align.test44
-rw-r--r--test/old-elf/Mips/rel-pc18-s3-micro.test56
-rw-r--r--test/old-elf/Mips/rel-pc18-s3.test54
-rw-r--r--test/old-elf/Mips/rel-pc19-s2-align.test44
-rw-r--r--test/old-elf/Mips/rel-pc19-s2-micro.test56
-rw-r--r--test/old-elf/Mips/rel-pc19-s2.test54
-rw-r--r--test/old-elf/Mips/rel-pc21-s2-align.test44
-rw-r--r--test/old-elf/Mips/rel-pc21-s2-micro.test56
-rw-r--r--test/old-elf/Mips/rel-pc21-s2-overflow.test45
-rw-r--r--test/old-elf/Mips/rel-pc21-s2.test54
-rw-r--r--test/old-elf/Mips/rel-pc26-s2-align.test44
-rw-r--r--test/old-elf/Mips/rel-pc26-s2-micro.test56
-rw-r--r--test/old-elf/Mips/rel-pc26-s2.test54
-rw-r--r--test/old-elf/Mips/rel-pc32.test59
-rw-r--r--test/old-elf/Mips/rel-pc7-10-16-23.test86
-rw-r--r--test/old-elf/Mips/rel-sub-micro.test62
-rw-r--r--test/old-elf/Mips/rel-sub.test61
-rw-r--r--test/old-elf/Mips/rld_map.test42
-rw-r--r--test/old-elf/Mips/sign-rela.test54
-rw-r--r--test/old-elf/Mips/st-other.test90
-rw-r--r--test/old-elf/Mips/static-01.test119
-rw-r--r--test/old-elf/Mips/tls-1-micro.test65
-rw-r--r--test/old-elf/Mips/tls-1.test63
-rw-r--r--test/old-elf/Mips/tls-2-64-static.test71
-rw-r--r--test/old-elf/Mips/tls-2-64.test69
-rw-r--r--test/old-elf/Mips/tls-2-micro.test70
-rw-r--r--test/old-elf/Mips/tls-2-static.test125
-rw-r--r--test/old-elf/Mips/tls-2.test69
-rw-r--r--test/old-elf/Mips/tls-3-64-static.test70
-rw-r--r--test/old-elf/Mips/tls-3-micro.test183
-rw-r--r--test/old-elf/Mips/tls-3-static.test67
-rw-r--r--test/old-elf/Mips/tls-3.test180
-rw-r--r--test/old-elf/Mips/tls-4-64-static.test71
-rw-r--r--test/old-elf/Mips/tls-4-micro.test126
-rw-r--r--test/old-elf/Mips/tls-4-static.test68
-rw-r--r--test/old-elf/Mips/tls-4.test123
-rw-r--r--test/old-elf/Mips/tls-5-64.test71
-rw-r--r--test/old-elf/Mips/tls-5-micro.test70
-rw-r--r--test/old-elf/Mips/tls-5.test69
-rw-r--r--test/old-elf/Mips/validate-rel-01.test82
-rw-r--r--test/old-elf/Mips/validate-rel-03.test56
-rw-r--r--test/old-elf/X86_64/ExampleTarget/triple.test32
-rw-r--r--test/old-elf/X86_64/Inputs/constint.c (renamed from test/elf/X86_64/Inputs/constint.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/constint.o (renamed from test/elf/X86_64/Inputs/constint.o)bin1062 -> 1062 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/debug0.c (renamed from test/elf/X86_64/Inputs/debug0.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/debug0.x86-64 (renamed from test/elf/X86_64/Inputs/debug0.x86-64)bin2704 -> 2704 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/debug1.c (renamed from test/elf/X86_64/Inputs/debug1.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/debug1.x86-64 (renamed from test/elf/X86_64/Inputs/debug1.x86-64)bin2584 -> 2584 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/externtls.c (renamed from test/elf/X86_64/Inputs/externtls.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/externtls.x86-64 (renamed from test/elf/X86_64/Inputs/externtls.x86-64)bin1424 -> 1424 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/fn.c (renamed from test/elf/X86_64/Inputs/fn.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/fn.o (renamed from test/elf/X86_64/Inputs/fn.o)bin1072 -> 1072 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/generaltls-so.o.yaml67
-rw-r--r--test/old-elf/X86_64/Inputs/group/1.c (renamed from test/elf/X86_64/Inputs/group/1.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/group/1.o (renamed from test/elf/X86_64/Inputs/group/1.o)bin1456 -> 1456 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn.c (renamed from test/elf/X86_64/Inputs/group/fn.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn.o (renamed from test/elf/X86_64/Inputs/group/fn.o)bin1360 -> 1360 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn1.c (renamed from test/elf/X86_64/Inputs/group/fn1.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn1.o (renamed from test/elf/X86_64/Inputs/group/fn1.o)bin1352 -> 1352 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn2.c (renamed from test/elf/X86_64/Inputs/group/fn2.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/group/fn2.o (renamed from test/elf/X86_64/Inputs/group/fn2.o)bin1224 -> 1224 bytes
-rwxr-xr-xtest/old-elf/X86_64/Inputs/group/group.sh (renamed from test/elf/X86_64/Inputs/group/group.sh)0
-rw-r--r--test/old-elf/X86_64/Inputs/group/libfn.a (renamed from test/elf/X86_64/Inputs/group/libfn.a)bin2792 -> 2792 bytes
-rwxr-xr-xtest/old-elf/X86_64/Inputs/group/libfn.so (renamed from test/elf/X86_64/Inputs/group/libfn.so)bin2516 -> 2516 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/group/libfn1.a (renamed from test/elf/X86_64/Inputs/group/libfn1.a)bin1492 -> 1492 bytes
-rwxr-xr-xtest/old-elf/X86_64/Inputs/group/libfn2.so (renamed from test/elf/X86_64/Inputs/group/libfn2.so)bin9624 -> 9624 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/initfini-option.c (renamed from test/elf/X86_64/Inputs/initfini-option.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/initfini-option.o (renamed from test/elf/X86_64/Inputs/initfini-option.o)bin1824 -> 1824 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/initfini.c (renamed from test/elf/X86_64/Inputs/initfini.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/initfini.o (renamed from test/elf/X86_64/Inputs/initfini.o)bin2256 -> 2256 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/largebss.c (renamed from test/elf/X86_64/Inputs/largebss.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/largebss.o (renamed from test/elf/X86_64/Inputs/largebss.o)bin1131 -> 1131 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/1.c (renamed from test/elf/X86_64/Inputs/layoutpass/1.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/1.o (renamed from test/elf/X86_64/Inputs/layoutpass/1.o)bin1448 -> 1448 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/2.c (renamed from test/elf/X86_64/Inputs/layoutpass/2.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/2.o (renamed from test/elf/X86_64/Inputs/layoutpass/2.o)bin1320 -> 1320 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/3.c (renamed from test/elf/X86_64/Inputs/layoutpass/3.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/3.o (renamed from test/elf/X86_64/Inputs/layoutpass/3.o)bin1216 -> 1216 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/layoutpass/lib2.a (renamed from test/elf/X86_64/Inputs/layoutpass/lib2.a)bin1464 -> 1464 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/libfn.a (renamed from test/elf/X86_64/Inputs/libfn.a)bin1364 -> 1364 bytes
-rwxr-xr-xtest/old-elf/X86_64/Inputs/libfn.so (renamed from test/elf/X86_64/Inputs/libfn.so)bin2008 -> 2008 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/main.c (renamed from test/elf/X86_64/Inputs/main.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/main.o (renamed from test/elf/X86_64/Inputs/main.o)bin1360 -> 1360 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/multi-ovrd.c (renamed from test/elf/X86_64/Inputs/multi-ovrd.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/multi-ovrd.o (renamed from test/elf/X86_64/Inputs/multi-ovrd.o)bin1648 -> 1648 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/multi-weak.c (renamed from test/elf/X86_64/Inputs/multi-weak.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/multi-weak.o (renamed from test/elf/X86_64/Inputs/multi-weak.o)bin1856 -> 1856 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/multiweaksyms.o (renamed from test/elf/X86_64/Inputs/multiweaksyms.o)bin928 -> 928 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/nmagic.c (renamed from test/elf/X86_64/Inputs/nmagic.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/nmagic.o (renamed from test/elf/X86_64/Inputs/nmagic.o)bin1528 -> 1528 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/no-interp-section.c (renamed from test/elf/X86_64/Inputs/no-interp-section.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/no-interp-section.o (renamed from test/elf/X86_64/Inputs/no-interp-section.o)bin975 -> 975 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/note.o (renamed from test/elf/X86_64/Inputs/note.o)bin785 -> 785 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/note.s (renamed from test/elf/X86_64/Inputs/note.s)0
-rw-r--r--test/old-elf/X86_64/Inputs/note_ro_rw.o (renamed from test/elf/X86_64/Inputs/note_ro_rw.o)bin905 -> 905 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/note_ro_rw.s (renamed from test/elf/X86_64/Inputs/note_ro_rw.s)0
-rw-r--r--test/old-elf/X86_64/Inputs/ovrd.c (renamed from test/elf/X86_64/Inputs/ovrd.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/ovrd.o (renamed from test/elf/X86_64/Inputs/ovrd.o)bin1488 -> 1488 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/rodata.c (renamed from test/elf/X86_64/Inputs/rodata.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/rodata.o (renamed from test/elf/X86_64/Inputs/rodata.o)bin1584 -> 1584 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/rodata.s (renamed from test/elf/X86_64/Inputs/rodata.s)0
-rw-r--r--test/old-elf/X86_64/Inputs/rwint.c (renamed from test/elf/X86_64/Inputs/rwint.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/rwint.o (renamed from test/elf/X86_64/Inputs/rwint.o)bin963 -> 963 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/sectionmap.c (renamed from test/elf/X86_64/Inputs/sectionmap.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/sectionmap.o (renamed from test/elf/X86_64/Inputs/sectionmap.o)bin1478 -> 1478 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/undefcpp.c (renamed from test/elf/X86_64/Inputs/undefcpp.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/undefcpp.o (renamed from test/elf/X86_64/Inputs/undefcpp.o)bin1344 -> 1344 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/weak-zero-sized.o (renamed from test/elf/X86_64/Inputs/weak-zero-sized.o)bin688 -> 688 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/weak.c (renamed from test/elf/X86_64/Inputs/weak.c)0
-rw-r--r--test/old-elf/X86_64/Inputs/weak.o (renamed from test/elf/X86_64/Inputs/weak.o)bin1712 -> 1712 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/weak.s (renamed from test/elf/X86_64/Inputs/weak.s)0
-rw-r--r--test/old-elf/X86_64/Inputs/zerosizedsection.o (renamed from test/elf/X86_64/Inputs/zerosizedsection.o)bin760 -> 760 bytes
-rw-r--r--test/old-elf/X86_64/Inputs/zerosizedsection.s (renamed from test/elf/X86_64/Inputs/zerosizedsection.s)0
-rw-r--r--test/old-elf/X86_64/alignoffset.test118
-rw-r--r--test/old-elf/X86_64/debug.test57
-rw-r--r--test/old-elf/X86_64/defsym.test22
-rw-r--r--test/old-elf/X86_64/demangle.test12
-rw-r--r--test/old-elf/X86_64/dontignorezerosize-sections.test9
-rw-r--r--test/old-elf/X86_64/dynamicvars.test123
-rw-r--r--test/old-elf/X86_64/dynlib-nointerp-section.test4
-rw-r--r--test/old-elf/X86_64/dynlib-search.test6
-rw-r--r--test/old-elf/X86_64/dynsym-weak.test118
-rw-r--r--test/old-elf/X86_64/extern-tls.test16
-rw-r--r--test/old-elf/X86_64/general-dynamic-tls.test128
-rw-r--r--test/old-elf/X86_64/imagebase.test94
-rw-r--r--test/old-elf/X86_64/initfini-order.test10
-rw-r--r--test/old-elf/X86_64/initfini.test23
-rw-r--r--test/old-elf/X86_64/largebss.test20
-rw-r--r--test/old-elf/X86_64/layoutpass-order.test14
-rw-r--r--test/old-elf/X86_64/maxpagesize.test113
-rw-r--r--test/old-elf/X86_64/mergesimilarstrings.test47
-rw-r--r--test/old-elf/X86_64/multi-weak-layout.test52
-rw-r--r--test/old-elf/X86_64/multi-weak-override.test16
-rw-r--r--test/old-elf/X86_64/multi-weak-syms-order.test13
-rw-r--r--test/old-elf/X86_64/nmagic.test91
-rw-r--r--test/old-elf/X86_64/noalignsegments.test95
-rw-r--r--test/old-elf/X86_64/note-sections-ro_plus_rw.test42
-rw-r--r--test/old-elf/X86_64/note-sections.test23
-rw-r--r--test/old-elf/X86_64/omagic.test237
-rw-r--r--test/old-elf/X86_64/outputsegments.test188
-rw-r--r--test/old-elf/X86_64/reloc_r_x86_64_16.test59
-rw-r--r--test/old-elf/X86_64/reloc_r_x86_64_pc16.test60
-rw-r--r--test/old-elf/X86_64/reloc_r_x86_64_pc64.test60
-rw-r--r--test/old-elf/X86_64/rodata.test9
-rw-r--r--test/old-elf/X86_64/sectionchoice.test7
-rw-r--r--test/old-elf/X86_64/sectionmap.test22
-rw-r--r--test/old-elf/X86_64/startGroupEndGroup.test48
-rw-r--r--test/old-elf/X86_64/startGroupEndGroupWithDynlib.test10
-rw-r--r--test/old-elf/X86_64/staticlib-search.test6
-rw-r--r--test/old-elf/X86_64/undef.test18
-rw-r--r--test/old-elf/X86_64/underscore-end.test81
-rw-r--r--test/old-elf/X86_64/weak-override.test45
-rw-r--r--test/old-elf/X86_64/weak-zero-sized.test26
-rw-r--r--test/old-elf/X86_64/weaksym.test77
-rw-r--r--test/old-elf/X86_64/yamlinput.test166
-rw-r--r--test/old-elf/abs-dup.objtxt19
-rw-r--r--test/old-elf/abs.test19
-rw-r--r--test/old-elf/allowduplicates.objtxt41
-rw-r--r--test/old-elf/archive-elf-forceload.test43
-rw-r--r--test/old-elf/archive-elf.test38
-rw-r--r--test/old-elf/as-needed.test15
-rw-r--r--test/old-elf/branch.test34
-rw-r--r--test/old-elf/check.test39
-rw-r--r--test/old-elf/checkrodata.test9
-rw-r--r--test/old-elf/common.test10
-rw-r--r--test/old-elf/consecutive-weak-sym-defs.test81
-rw-r--r--test/old-elf/defsym.objtxt31
-rw-r--r--test/old-elf/discard-all.test88
-rw-r--r--test/old-elf/discard-locals.test65
-rw-r--r--test/old-elf/dynamic-segorder.test17
-rw-r--r--test/old-elf/dynamic-undef.test38
-rw-r--r--test/old-elf/dynamic.test80
-rw-r--r--test/old-elf/eh_frame_hdr.test30
-rw-r--r--test/old-elf/entry.objtxt58
-rw-r--r--test/old-elf/export-dynamic.test98
-rw-r--r--test/old-elf/filenotfound.test3
-rw-r--r--test/old-elf/gnulinkonce/gnulinkonce-report-discarded-reference.test145
-rw-r--r--test/old-elf/gnulinkonce/gnulinkonce-report-undef.test127
-rw-r--r--test/old-elf/gnulinkonce/gnulinkonce.test149
-rw-r--r--test/old-elf/gotpcrel.test21
-rw-r--r--test/old-elf/gottpoff.test119
-rw-r--r--test/old-elf/group-cmd-search.test134
-rw-r--r--test/old-elf/hexagon-quickdata-sort.test12
-rw-r--r--test/old-elf/hexagon-quickdata-sortcommon.test16
-rw-r--r--test/old-elf/ifunc.test69
-rw-r--r--test/old-elf/ignore-unknownoption.test5
-rw-r--r--test/old-elf/init_array-order.test67
-rw-r--r--test/old-elf/init_array.test127
-rw-r--r--test/old-elf/initfini-options.test-1.test33
-rw-r--r--test/old-elf/initfini-options.test-2.test47
-rw-r--r--test/old-elf/initfini-options.test-3.test53
-rw-r--r--test/old-elf/librarynotfound.test5
-rw-r--r--test/old-elf/linker-as-ld.test16
-rw-r--r--test/old-elf/linkerscript/Inputs/externs.ls (renamed from test/elf/linkerscript/Inputs/externs.ls)0
-rw-r--r--test/old-elf/linkerscript/Inputs/invalid.ls (renamed from test/elf/linkerscript/Inputs/invalid.ls)0
-rw-r--r--test/old-elf/linkerscript/Inputs/prog1.o.yaml87
-rw-r--r--test/old-elf/linkerscript/Inputs/prog2.o.yaml88
-rw-r--r--test/old-elf/linkerscript/Inputs/prog3.o.yaml51
-rw-r--r--test/old-elf/linkerscript/Inputs/simple-pic.o.yaml32
-rw-r--r--test/old-elf/linkerscript/Inputs/simple.o.yaml51
-rw-r--r--test/old-elf/linkerscript/Inputs/valid.ls (renamed from test/elf/linkerscript/Inputs/valid.ls)0
-rw-r--r--test/old-elf/linkerscript/externs.objtxt21
-rw-r--r--test/old-elf/linkerscript/filename-with-wildcards.test49
-rw-r--r--test/old-elf/linkerscript/invalid-script-cli-1.test10
-rw-r--r--test/old-elf/linkerscript/invalid-script-cli-2.test6
-rw-r--r--test/old-elf/linkerscript/invalid.test5
-rw-r--r--test/old-elf/linkerscript/phdrs-all-none.test26
-rw-r--r--test/old-elf/linkerscript/phdrs-custom-none.test36
-rw-r--r--test/old-elf/linkerscript/phdrs-default.test82
-rw-r--r--test/old-elf/linkerscript/phdrs-different.test45
-rw-r--r--test/old-elf/linkerscript/phdrs-extra-program.test27
-rw-r--r--test/old-elf/linkerscript/phdrs-flags.test46
-rw-r--r--test/old-elf/linkerscript/phdrs-has-program.test33
-rw-r--r--test/old-elf/linkerscript/phdrs-invalid.test63
-rw-r--r--test/old-elf/linkerscript/phdrs-misplaced-program.test26
-rw-r--r--test/old-elf/linkerscript/phdrs-no-program.test25
-rw-r--r--test/old-elf/linkerscript/phdrs-one-none.test36
-rw-r--r--test/old-elf/linkerscript/phdrs-program-flags.test33
-rw-r--r--test/old-elf/linkerscript/phdrs-program-good-phdrs.test34
-rw-r--r--test/old-elf/linkerscript/phdrs-program-no-phdrs.test26
-rw-r--r--test/old-elf/linkerscript/phdrs-program-wrong-phdrs.test26
-rw-r--r--test/old-elf/linkerscript/phdrs-same-flags.test35
-rw-r--r--test/old-elf/linkerscript/phdrs-same.test36
-rw-r--r--test/old-elf/linkerscript/phdrs/sections-empty-phdrs.script11
-rw-r--r--test/old-elf/linkerscript/phdrs/sections-no-phdrs.script7
-rw-r--r--test/old-elf/linkerscript/phdrs/sections-none-phdrs.script11
-rw-r--r--test/old-elf/linkerscript/phdrs/undef-empty-phdrs.script11
-rw-r--r--test/old-elf/linkerscript/phdrs/undef-id-phdrs.script12
-rw-r--r--test/old-elf/linkerscript/phdrs/undef-no-phdrs.script7
-rw-r--r--test/old-elf/linkerscript/sections-order.test113
-rw-r--r--test/old-elf/linkerscript/sections-with-wildcards.test88
-rw-r--r--test/old-elf/linkerscript/symbol-definition-so.test32
-rw-r--r--test/old-elf/linkerscript/symbol-definition.test54
-rw-r--r--test/old-elf/linkerscript/valid-script-cli.objtxt23
-rw-r--r--test/old-elf/loginputfiles.test28
-rw-r--r--test/old-elf/mergeatoms.test6
-rw-r--r--test/old-elf/mergeconstants.test20
-rw-r--r--test/old-elf/mergeglobalatoms.test11
-rw-r--r--test/old-elf/no-unique-section-names.test19
-rw-r--r--test/old-elf/note.test50
-rw-r--r--test/old-elf/options/dynamic-linker.test17
-rw-r--r--test/old-elf/options/target-specific-args.test5
-rw-r--r--test/old-elf/phdr.test99
-rw-r--r--test/old-elf/quickdata.test15
-rw-r--r--test/old-elf/reloc.test38
-rw-r--r--test/old-elf/responsefile.test6
-rw-r--r--test/old-elf/rodata.test5
-rw-r--r--test/old-elf/rosegment.test26
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-new-members.test151
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-simple.test144
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-undef-member-other.test156
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-undef-member.test142
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-with-globalsymbols.test250
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-with-undef-external-reference.test236
-rw-r--r--test/old-elf/sectionGroups/sectiongroup-with-undef-signature.test219
-rw-r--r--test/old-elf/sections.test142
-rw-r--r--test/old-elf/sh_addralign.test37
-rw-r--r--test/old-elf/shndx.test18
-rw-r--r--test/old-elf/soname.test6
-rw-r--r--test/old-elf/start-stop-sym.test108
-rw-r--r--test/old-elf/strip-all.test108
-rw-r--r--test/old-elf/stripped-empty.test4
-rw-r--r--test/old-elf/symbols.test33
-rw-r--r--test/old-elf/tls-tbss-size.test176
-rw-r--r--test/old-elf/tls.test43
-rw-r--r--test/old-elf/tlsAddr.test7
-rw-r--r--test/old-elf/undef-from-dso-to-main.test52
-rw-r--r--test/old-elf/undef-from-main-dso.test43
-rw-r--r--test/old-elf/weaksym.test7
-rw-r--r--test/old-elf/wrap.test276
-rw-r--r--test/old-elf/x86-64-dynamic-relocs.test26
-rw-r--r--test/old-elf/x86-64-dynamic.test79
-rw-r--r--test/old-elf/x86.test38
-rw-r--r--test/old-elf/x86_64-kinds.test23
-rw-r--r--test/old-elf/zoption_dtflags.test89
-rw-r--r--test/pecoff/Inputs/abs.obj.yaml11
-rw-r--r--test/pecoff/Inputs/alignment.obj.yaml103
-rw-r--r--test/pecoff/Inputs/alternatename1.obj.yaml23
-rw-r--r--test/pecoff/Inputs/alternatename2.obj.yaml23
-rw-r--r--test/pecoff/Inputs/alternatename3.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-ImageBase.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-ImageBase.s16
-rw-r--r--test/pecoff/Inputs/armnt-addr32-exec.obj.yaml55
-rw-r--r--test/pecoff/Inputs/armnt-addr32-exec.s24
-rw-r--r--test/pecoff/Inputs/armnt-addr32.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-addr32.s18
-rw-r--r--test/pecoff/Inputs/armnt-blx23t.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-blx23t.s33
-rw-r--r--test/pecoff/Inputs/armnt-branch24t.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-branch24t.s26
-rw-r--r--test/pecoff/Inputs/armnt-exports.def4
-rw-r--r--test/pecoff/Inputs/armnt-exports.obj.yaml35
-rw-r--r--test/pecoff/Inputs/armnt-import.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-import.s21
-rw-r--r--test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml39
-rw-r--r--test/pecoff/Inputs/armnt-mov32t-exec.s30
-rw-r--r--test/pecoff/Inputs/armnt-mov32t.obj.yaml55
-rw-r--r--test/pecoff/Inputs/armnt-mov32t.s24
-rw-r--r--test/pecoff/Inputs/armnt-obj.s12
-rw-r--r--test/pecoff/Inputs/armnt-obj.yaml29
-rw-r--r--test/pecoff/Inputs/associative1.obj.yaml53
-rw-r--r--test/pecoff/Inputs/associative3.obj.yaml33
-rw-r--r--test/pecoff/Inputs/basereloc.obj.yaml164
-rw-r--r--test/pecoff/Inputs/bss.asm20
-rw-r--r--test/pecoff/Inputs/bss.objbin683 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/comdat.obj.yaml53
-rw-r--r--test/pecoff/Inputs/common-symbol.obj.yaml85
-rw-r--r--test/pecoff/Inputs/drectve.obj.yaml79
-rw-r--r--test/pecoff/Inputs/drectve2.obj.yaml45
-rw-r--r--test/pecoff/Inputs/drectve3.libbin462 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/entry.obj.yaml40
-rw-r--r--test/pecoff/Inputs/executable.obj.yaml29
-rw-r--r--test/pecoff/Inputs/executable.s17
-rw-r--r--test/pecoff/Inputs/export.obj.yaml69
-rw-r--r--test/pecoff/Inputs/exports.def6
-rw-r--r--test/pecoff/Inputs/exports2.def6
-rw-r--r--test/pecoff/Inputs/grouped-sections.asm18
-rw-r--r--test/pecoff/Inputs/grouped-sections.obj.yaml83
-rw-r--r--test/pecoff/Inputs/hello.asm24
-rw-r--r--test/pecoff/Inputs/hello.obj.yaml111
-rw-r--r--test/pecoff/Inputs/hello64.asm22
-rw-r--r--test/pecoff/Inputs/hello64.obj.yaml110
-rw-r--r--test/pecoff/Inputs/hello64lib.asm14
-rw-r--r--test/pecoff/Inputs/hello64lib.libbin1938 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/imagebase.obj.yaml55
-rw-r--r--test/pecoff/Inputs/machine-type-unknown.obj.yaml38
-rw-r--r--test/pecoff/Inputs/main.obj.yaml70
-rw-r--r--test/pecoff/Inputs/merge-largest1.obj.yaml30
-rw-r--r--test/pecoff/Inputs/merge-largest2.obj.yaml30
-rw-r--r--test/pecoff/Inputs/merge-same-size1.obj.yaml30
-rw-r--r--test/pecoff/Inputs/merge-same-size2.obj.yaml30
-rw-r--r--test/pecoff/Inputs/merge-same-size3.obj.yaml30
-rw-r--r--test/pecoff/Inputs/nonstandard-sections.obj.yaml53
-rw-r--r--test/pecoff/Inputs/nop.asm9
-rw-r--r--test/pecoff/Inputs/nop.obj.yaml51
-rw-r--r--test/pecoff/Inputs/nop64.obj.yaml67
-rw-r--r--test/pecoff/Inputs/reloc.obj.yaml82
-rw-r--r--test/pecoff/Inputs/reloc64.obj.yaml63
-rw-r--r--test/pecoff/Inputs/resource.rc4
-rw-r--r--test/pecoff/Inputs/responsefile.txt1
-rw-r--r--test/pecoff/Inputs/secrel1.obj.yaml69
-rw-r--r--test/pecoff/Inputs/secrel2.obj.yaml47
-rw-r--r--test/pecoff/Inputs/seh.c13
-rw-r--r--test/pecoff/Inputs/seh.obj.yaml387
-rw-r--r--test/pecoff/Inputs/static-data1.obj.yaml67
-rw-r--r--test/pecoff/Inputs/static-data2.obj.yaml67
-rw-r--r--test/pecoff/Inputs/static.libbin1120 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/subsystem.main.yaml35
-rw-r--r--test/pecoff/Inputs/subsystem.winmain.yaml35
-rw-r--r--test/pecoff/Inputs/tlsused.obj.yaml29
-rw-r--r--test/pecoff/Inputs/unknown-drectve.obj.yaml42
-rw-r--r--test/pecoff/Inputs/unwind.obj.yaml129
-rw-r--r--test/pecoff/Inputs/vars-main-x64.obj.yaml63
-rw-r--r--test/pecoff/Inputs/vars-main-x86.obj.yaml69
-rw-r--r--test/pecoff/Inputs/vars-main.c7
-rw-r--r--test/pecoff/Inputs/vars.c20
-rw-r--r--test/pecoff/Inputs/vars.dll.yaml19
-rw-r--r--test/pecoff/Inputs/vars.libbin1994 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/vars64.libbin2016 -> 0 bytes
-rw-r--r--test/pecoff/Inputs/weak-externals.asm25
-rw-r--r--test/pecoff/Inputs/weak-externals.obj.yaml91
-rw-r--r--test/pecoff/alignment.test22
-rw-r--r--test/pecoff/alternatename.test44
-rw-r--r--test/pecoff/armnt-ImageBase.test14
-rw-r--r--test/pecoff/armnt-addr32-exec.test11
-rw-r--r--test/pecoff/armnt-addr32.test11
-rw-r--r--test/pecoff/armnt-address-of-entry-point.test6
-rw-r--r--test/pecoff/armnt-blx23t.test27
-rw-r--r--test/pecoff/armnt-branch24t.test20
-rw-r--r--test/pecoff/armnt-exports.s28
-rw-r--r--test/pecoff/armnt-exports.test10
-rw-r--r--test/pecoff/armnt-imports.test11
-rw-r--r--test/pecoff/armnt-mov32t-exec.test21
-rw-r--r--test/pecoff/armnt-movt32t.test17
-rw-r--r--test/pecoff/armnt.test6
-rw-r--r--test/pecoff/associative.test10
-rw-r--r--test/pecoff/base-reloc.test78
-rw-r--r--test/pecoff/baseaddr.test18
-rw-r--r--test/pecoff/bss-section.test21
-rw-r--r--test/pecoff/comdat.test12
-rw-r--r--test/pecoff/common-symbol.test14
-rw-r--r--test/pecoff/conflicting-machine.test6
-rw-r--r--test/pecoff/delayimport.test54
-rw-r--r--test/pecoff/dll.test7
-rw-r--r--test/pecoff/dosstub.test11
-rw-r--r--test/pecoff/drectve.test39
-rw-r--r--test/pecoff/dynamic.test11
-rw-r--r--test/pecoff/dynamicbase.test24
-rw-r--r--test/pecoff/entry.test41
-rw-r--r--test/pecoff/export-warning.test19
-rw-r--r--test/pecoff/export.test90
-rw-r--r--test/pecoff/exportlib.test32
-rw-r--r--test/pecoff/exportlib2.test21
-rw-r--r--test/pecoff/grouped-sections.test17
-rw-r--r--test/pecoff/hello.test51
-rw-r--r--test/pecoff/hello64.test22
-rw-r--r--test/pecoff/help.test4
-rw-r--r--test/pecoff/imagebase.test15
-rw-r--r--test/pecoff/importlib.test55
-rw-r--r--test/pecoff/include.test8
-rw-r--r--test/pecoff/lib.test15
-rw-r--r--test/pecoff/libarg.test9
-rw-r--r--test/pecoff/localyimported.test15
-rw-r--r--test/pecoff/long-section-name.test7
-rw-r--r--test/pecoff/machinetype.test13
-rw-r--r--test/pecoff/manifest.test63
-rw-r--r--test/pecoff/merge-largest.test24
-rw-r--r--test/pecoff/merge-same-size.test32
-rw-r--r--test/pecoff/multi.test17
-rw-r--r--test/pecoff/noentry.test10
-rw-r--r--test/pecoff/nonstandard-sections.test75
-rw-r--r--test/pecoff/options.test40
-rw-r--r--test/pecoff/pe32plus.test87
-rw-r--r--test/pecoff/reloc.test16
-rw-r--r--test/pecoff/reloc64.test20
-rw-r--r--test/pecoff/resource.test16
-rw-r--r--test/pecoff/responsefile.test7
-rw-r--r--test/pecoff/safeseh.test9
-rw-r--r--test/pecoff/secrel.test16
-rw-r--r--test/pecoff/section-attribute.test45
-rw-r--r--test/pecoff/section-renaming.test61
-rw-r--r--test/pecoff/seh.test31
-rw-r--r--test/pecoff/seh64.test57
-rw-r--r--test/pecoff/subsystem.test12
-rw-r--r--test/pecoff/tls.test14
-rw-r--r--test/pecoff/trivial.test103
-rw-r--r--test/pecoff/unknown-drectve.test6
-rw-r--r--test/pecoff/weak-external.test9
1641 files changed, 55865 insertions, 30571 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index e29f5f4c5a90..b92489e2cc8d 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -20,9 +20,9 @@ configure_lit_site_cfg(
)
set(LLD_TEST_DEPS
- FileCheck not llvm-nm
+ FileCheck not llvm-ar llvm-as llvm-nm llc
lld llvm-config llvm-objdump llvm-readobj yaml2obj obj2yaml
- linker-script-test macho-dump llvm-mc llvm-nm
+ linker-script-test llvm-mc llvm-nm llvm-lib
)
if (LLVM_INCLUDE_TESTS)
set(LLD_TEST_DEPS ${LLD_TEST_DEPS} LLDUnitTests)
diff --git a/test/COFF/Inputs/armnt-executable.obj.yaml b/test/COFF/Inputs/armnt-executable.obj.yaml
new file mode 100644
index 000000000000..33b2c886b860
--- /dev/null
+++ b/test/COFF/Inputs/armnt-executable.obj.yaml
@@ -0,0 +1,29 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: '7047'
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 2
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: mainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/armnt-executable.s b/test/COFF/Inputs/armnt-executable.s
new file mode 100644
index 000000000000..7e1a8ce82120
--- /dev/null
+++ b/test/COFF/Inputs/armnt-executable.s
@@ -0,0 +1,13 @@
+# void mainCRTStartup() {}
+ .syntax unified
+ .thumb
+ .text
+ .def mainCRTStartup
+ .scl 2
+ .type 32
+ .endef
+ .global mainCRTStartup
+ .align 2
+ .thumb_func
+mainCRTStartup:
+ bx lr
diff --git a/test/COFF/Inputs/conflict.ll b/test/COFF/Inputs/conflict.ll
new file mode 100644
index 000000000000..8cd7d706e5fb
--- /dev/null
+++ b/test/COFF/Inputs/conflict.ll
@@ -0,0 +1,6 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @foo() {
+ ret void
+}
diff --git a/test/COFF/Inputs/entry-mangled.ll b/test/COFF/Inputs/entry-mangled.ll
new file mode 100644
index 000000000000..b6fac214dfc1
--- /dev/null
+++ b/test/COFF/Inputs/entry-mangled.ll
@@ -0,0 +1,6 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc18.0.0"
+
+define void @"\01?main@@YAHXZ"() {
+ ret void
+}
diff --git a/test/COFF/Inputs/export.ll b/test/COFF/Inputs/export.ll
new file mode 100644
index 000000000000..d254683cdd6f
--- /dev/null
+++ b/test/COFF/Inputs/export.ll
@@ -0,0 +1,18 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @_DllMainCRTStartup() {
+ ret void
+}
+
+define void @exportfn1() {
+ ret void
+}
+
+define void @exportfn2() {
+ ret void
+}
+
+define dllexport void @exportfn3() {
+ ret void
+}
diff --git a/test/COFF/Inputs/export.yaml b/test/COFF/Inputs/export.yaml
new file mode 100644
index 000000000000..25b57288a1bf
--- /dev/null
+++ b/test/COFF/Inputs/export.yaml
@@ -0,0 +1,57 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f6578706f72743a6578706f7274666e3300 # /export:exportfn3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _DllMainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: exportfn1
+ Value: 8
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: exportfn2
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: exportfn3
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: '?mangled@@YAHXZ'
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/export2.yaml b/test/COFF/Inputs/export2.yaml
new file mode 100644
index 000000000000..592b76526ffa
--- /dev/null
+++ b/test/COFF/Inputs/export2.yaml
@@ -0,0 +1,29 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: '?mangled2@@YAHXZ'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/hello32.yaml b/test/COFF/Inputs/hello32.yaml
new file mode 100644
index 000000000000..ea5a5c84c4f1
--- /dev/null
+++ b/test/COFF/Inputs/hello32.yaml
@@ -0,0 +1,82 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 33DB538D0500000000508D05000000005053E80000000050E800000000
+ Relocations:
+ - VirtualAddress: 5
+ SymbolName: caption
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 12
+ SymbolName: message
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 19
+ SymbolName: '_MessageBoxA@16'
+ Type: IMAGE_REL_I386_REL32
+ - VirtualAddress: 25
+ SymbolName: '_ExitProcess@4'
+ Type: IMAGE_REL_I386_REL32
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 16
+ SectionData: 48656C6C6F0048656C6C6F20576F726C642100
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 29
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 19
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: '_ExitProcess@4'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: '_MessageBoxA@16'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: message
+ Value: 6
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: caption
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: '_main@0'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/hello64.asm b/test/COFF/Inputs/hello64.asm
new file mode 100644
index 000000000000..6605213224bc
--- /dev/null
+++ b/test/COFF/Inputs/hello64.asm
@@ -0,0 +1,24 @@
+;; ml64 hello64.asm /link /subsystem:windows /defaultlib:kernel32 \
+;; /defaultlib:user32 /out:hello64.exe /entry:main
+
+extern ExitProcess : PROC
+extern MessageBoxA : PROC
+extern ImportByOrdinal: PROC
+
+.data
+ caption db 'Hello', 0
+ message db 'Hello World!', 0
+
+.code
+main PROC
+ sub rsp,28h
+ mov rcx, 0
+ lea rdx, message
+ lea r8, caption
+ mov r9d, 0
+ call MessageBoxA
+ mov ecx, 0
+ call ExitProcess
+ call ImportByOrdinal
+main ENDP
+END
diff --git a/test/COFF/Inputs/hello64.obj b/test/COFF/Inputs/hello64.obj
new file mode 100644
index 000000000000..90c1ce4aa4cf
--- /dev/null
+++ b/test/COFF/Inputs/hello64.obj
Binary files differ
diff --git a/test/COFF/Inputs/import.yaml b/test/COFF/Inputs/import.yaml
new file mode 100644
index 000000000000..2c5fdc545b48
--- /dev/null
+++ b/test/COFF/Inputs/import.yaml
@@ -0,0 +1,41 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 0000000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: exportfn1
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: exportfn2
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/imports-mangle.lib b/test/COFF/Inputs/imports-mangle.lib
new file mode 100644
index 000000000000..f3c722ad0746
--- /dev/null
+++ b/test/COFF/Inputs/imports-mangle.lib
Binary files differ
diff --git a/test/COFF/Inputs/include1a.yaml b/test/COFF/Inputs/include1a.yaml
new file mode 100644
index 000000000000..7fca9833cb7b
--- /dev/null
+++ b/test/COFF/Inputs/include1a.yaml
@@ -0,0 +1,33 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f696e636c7564653a666f6f00 # /include:foo
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/include1b.yaml b/test/COFF/Inputs/include1b.yaml
new file mode 100644
index 000000000000..e4151be27cc3
--- /dev/null
+++ b/test/COFF/Inputs/include1b.yaml
@@ -0,0 +1,33 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f696e636c7564653a62617200 # /include:bar
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/include1c.yaml b/test/COFF/Inputs/include1c.yaml
new file mode 100644
index 000000000000..78dd29659e22
--- /dev/null
+++ b/test/COFF/Inputs/include1c.yaml
@@ -0,0 +1,29 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: bar
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/pecoff/Inputs/library.lib b/test/COFF/Inputs/library.lib
index 2f4207d7983d..2f4207d7983d 100755
--- a/test/pecoff/Inputs/library.lib
+++ b/test/COFF/Inputs/library.lib
Binary files differ
diff --git a/test/COFF/Inputs/lto-chkstk-chkstk.s b/test/COFF/Inputs/lto-chkstk-chkstk.s
new file mode 100644
index 000000000000..292b30d5ffab
--- /dev/null
+++ b/test/COFF/Inputs/lto-chkstk-chkstk.s
@@ -0,0 +1,3 @@
+.globl __chkstk
+__chkstk:
+ret
diff --git a/test/COFF/Inputs/lto-chkstk-foo.s b/test/COFF/Inputs/lto-chkstk-foo.s
new file mode 100644
index 000000000000..a69f870a1b60
--- /dev/null
+++ b/test/COFF/Inputs/lto-chkstk-foo.s
@@ -0,0 +1,3 @@
+.globl foo
+foo:
+ret
diff --git a/test/COFF/Inputs/lto-comdat1.ll b/test/COFF/Inputs/lto-comdat1.ll
new file mode 100644
index 000000000000..7a9f50c0f9db
--- /dev/null
+++ b/test/COFF/Inputs/lto-comdat1.ll
@@ -0,0 +1,13 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+$comdat = comdat any
+
+define void @f1() {
+ call void @comdat()
+ ret void
+}
+
+define linkonce_odr void @comdat() comdat {
+ ret void
+}
diff --git a/test/COFF/Inputs/lto-comdat2.ll b/test/COFF/Inputs/lto-comdat2.ll
new file mode 100644
index 000000000000..c2af2a4de597
--- /dev/null
+++ b/test/COFF/Inputs/lto-comdat2.ll
@@ -0,0 +1,13 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+$comdat = comdat any
+
+define void @f2() {
+ call void @comdat()
+ ret void
+}
+
+define linkonce_odr void @comdat() comdat {
+ ret void
+}
diff --git a/test/COFF/Inputs/lto-dep.ll b/test/COFF/Inputs/lto-dep.ll
new file mode 100644
index 000000000000..d6d47f234917
--- /dev/null
+++ b/test/COFF/Inputs/lto-dep.ll
@@ -0,0 +1,10 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @foo() {
+ ret void
+}
+
+define internal void @internal() {
+ ret void
+}
diff --git a/test/COFF/Inputs/machine-x64.yaml b/test/COFF/Inputs/machine-x64.yaml
new file mode 100644
index 000000000000..d70e0808a2e1
--- /dev/null
+++ b/test/COFF/Inputs/machine-x64.yaml
@@ -0,0 +1,29 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/machine-x86.yaml b/test/COFF/Inputs/machine-x86.yaml
new file mode 100644
index 000000000000..6b6cfae09c57
--- /dev/null
+++ b/test/COFF/Inputs/machine-x86.yaml
@@ -0,0 +1,29 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/pecoff/Inputs/resource.res b/test/COFF/Inputs/resource.res
index f1c799fbbb08..f1c799fbbb08 100755..100644
--- a/test/pecoff/Inputs/resource.res
+++ b/test/COFF/Inputs/resource.res
Binary files differ
diff --git a/test/COFF/Inputs/ret42.lib b/test/COFF/Inputs/ret42.lib
new file mode 100644
index 000000000000..f60a9cdf6f90
--- /dev/null
+++ b/test/COFF/Inputs/ret42.lib
Binary files differ
diff --git a/test/COFF/Inputs/ret42.obj b/test/COFF/Inputs/ret42.obj
new file mode 100644
index 000000000000..1765f0e7c36e
--- /dev/null
+++ b/test/COFF/Inputs/ret42.obj
Binary files differ
diff --git a/test/COFF/Inputs/ret42.yaml b/test/COFF/Inputs/ret42.yaml
new file mode 100644
index 000000000000..2b38cc7f0d6b
--- /dev/null
+++ b/test/COFF/Inputs/ret42.yaml
@@ -0,0 +1,45 @@
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: B82A000000C3
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 16
+ SectionData: ''
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/Inputs/std32.lib b/test/COFF/Inputs/std32.lib
new file mode 100644
index 000000000000..7401ff3faf9e
--- /dev/null
+++ b/test/COFF/Inputs/std32.lib
Binary files differ
diff --git a/test/COFF/Inputs/std64.lib b/test/COFF/Inputs/std64.lib
new file mode 100644
index 000000000000..bbd223c59f40
--- /dev/null
+++ b/test/COFF/Inputs/std64.lib
Binary files differ
diff --git a/test/COFF/Inputs/weak-external.ll b/test/COFF/Inputs/weak-external.ll
new file mode 100644
index 000000000000..4775d50456c9
--- /dev/null
+++ b/test/COFF/Inputs/weak-external.ll
@@ -0,0 +1,6 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @g() {
+ ret void
+}
diff --git a/test/COFF/Inputs/weak-external2.ll b/test/COFF/Inputs/weak-external2.ll
new file mode 100644
index 000000000000..2102c3b6a526
--- /dev/null
+++ b/test/COFF/Inputs/weak-external2.ll
@@ -0,0 +1,6 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @f() {
+ ret void
+}
diff --git a/test/COFF/Inputs/weak-external3.ll b/test/COFF/Inputs/weak-external3.ll
new file mode 100644
index 000000000000..f9a51360a89d
--- /dev/null
+++ b/test/COFF/Inputs/weak-external3.ll
@@ -0,0 +1,8 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+@f = weak alias void(), void()* @g
+
+define void @g() {
+ ret void
+}
diff --git a/test/COFF/alternatename.test b/test/COFF/alternatename.test
new file mode 100644
index 000000000000..5b9dc470af16
--- /dev/null
+++ b/test/COFF/alternatename.test
@@ -0,0 +1,61 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+# RUN: lld-link /entry:foo /subsystem:console \
+# RUN: /alternatename:foo=main /out:%t.exe %t.obj
+# RUN: lld-link /entry:foo /subsystem:console \
+# RUN: /alternatename:foo=main \
+# RUN: /alternatename:foo=main \
+# RUN: /alternatename:nosuchsym1=nosuchsym2 \
+# RUN: /out:%t.exe %t.obj
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /entry:foo /subsystem:console /out:%t.exe %t.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: B82A000000C3
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 16
+ SectionData: ''
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f616c7465726e6174656e616d653a666f6f3d6d61696e00 # /alternatename:foo=main
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/ar-comdat.test b/test/COFF/ar-comdat.test
new file mode 100644
index 000000000000..af7d732ea3c0
--- /dev/null
+++ b/test/COFF/ar-comdat.test
@@ -0,0 +1,38 @@
+# RUN: yaml2obj %s > %t1.obj
+# RUN: yaml2obj %s > %t2.obj
+# RUN: llvm-lib /out:%t.lib %t1.obj %t2.obj
+# RUN: lld-link /out:%t.exe /lldmap:%t.map /entry:main /subsystem:console %p/Inputs/ret42.obj %t.lib
+# RUN: FileCheck %s < %t.map
+
+# CHECK-NOT: .lib
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: .bss
+ Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: ''
+symbols:
+ - Name: .bss
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: x
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/armnt-blx23t.test b/test/COFF/armnt-blx23t.test
new file mode 100644
index 000000000000..fdc2bf51afb3
--- /dev/null
+++ b/test/COFF/armnt-blx23t.test
@@ -0,0 +1,66 @@
+# REQUIRES: arm
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
+# RUN: lld-link /entry:function /subsystem:console /out:%t.exe %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
+
+# BEFORE: Disassembly of section .text:
+# BEFORE: 0: 70 47 bx lr
+# BEFORE: 2: 00 bf nop
+# BEFORE: 4: 2d e9 00 48 push.w {r11, lr}
+# BEFORE: 8: eb 46 mov r11, sp
+# BEFORE: a: 20 20 movs r0, #32
+# BEFORE: c: 00 f0 00 f8 bl #0
+# BEFORE: 10: 01 30 adds r0, #1
+# BEFORE: 12: bd e8 00 88 pop.w {r11, pc}
+
+# AFTER: Disassembly of section .text:
+# AFTER: 1000: 70 47 bx lr
+# AFTER: 1002: 00 bf nop
+# AFTER: 1004: 2d e9 00 48 push.w {r11, lr}
+# AFTER: 1008: eb 46 mov r11, sp
+# AFTER: 100a: 20 20 movs r0, #32
+# AFTER: 100c: ff f7 f8 ff bl #-16
+# AFTER: 1010: 01 30 adds r0, #1
+# AFTER: 1012: bd e8 00 88 pop.w {r11, pc}
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 704700BF2DE90048EB46202000F000F80130BDE80088
+ Relocations:
+ - VirtualAddress: 12
+ SymbolName: identity
+ Type: 21
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 22
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: identity
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: function
+ Value: 4
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/armnt-branch24t.test b/test/COFF/armnt-branch24t.test
new file mode 100644
index 000000000000..358b603303b3
--- /dev/null
+++ b/test/COFF/armnt-branch24t.test
@@ -0,0 +1,59 @@
+# REQUIRES: arm
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
+# RUN: lld-link /entry:function /subsystem:console /out:%t.exe %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
+
+# BEFORE: Disassembly of section .text:
+# BEFORE: 0: 70 47 bx lr
+# BEFORE: 2: 00 bf nop
+# BEFORE: 4: 20 20 movs r0, #32
+# BEFORE: 6: 00 f0 00 b8 b.w #0
+
+# AFTER: Disassembly of section .text:
+# AFTER: .text:
+# AFTER: 1000: 70 47 bx lr
+# AFTER: 1002: 00 bf nop
+# AFTER: 1004: 20 20 movs r0, #32
+# AFTER: 1006: ff f7 fb bf b.w #-10
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 704700BF202000F000B8
+ Relocations:
+ - VirtualAddress: 6
+ SymbolName: identity
+ Type: 20
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 10
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: identity
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: function
+ Value: 4
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/armnt-entry-point.test b/test/COFF/armnt-entry-point.test
new file mode 100644
index 000000000000..7b1bd100e083
--- /dev/null
+++ b/test/COFF/armnt-entry-point.test
@@ -0,0 +1,5 @@
+# RUN: yaml2obj < %p/Inputs/armnt-executable.obj.yaml > %t.obj
+# RUN: lld-link /out:%t.exe /entry:mainCRTStartup /subsystem:console %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+CHECK: AddressOfEntryPoint: 0x1001
diff --git a/test/COFF/armnt-imports.test b/test/COFF/armnt-imports.test
new file mode 100644
index 000000000000..3842259a7a72
--- /dev/null
+++ b/test/COFF/armnt-imports.test
@@ -0,0 +1,51 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /subsystem:console %t.obj \
+# RUN: /entry:mainCRTStartup %p/Inputs/library.lib
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
+
+# CHECK: Import {
+# CHECK: Name: library.dll
+# CHECK: ImportLookupTableRVA: 0x2028
+# CHECK: ImportAddressTableRVA: 0x2030
+# CHECK: Symbol: function (0)
+# CHECK: }
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 40F20000C0F2000000680047
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: __imp_function
+ Type: 17
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 12
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: mainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __imp_function
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/armnt-mov32t-exec.test b/test/COFF/armnt-mov32t-exec.test
new file mode 100644
index 000000000000..7fa9952e9547
--- /dev/null
+++ b/test/COFF/armnt-mov32t-exec.test
@@ -0,0 +1,60 @@
+# REQUIRES: arm
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
+# RUN: lld-link /out:%t.exe /subsystem:console /entry:get_function %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
+
+# BEFORE: Disassembly of section .text:
+# BEFORE: 0: 70 47 bx lr
+# BEFORE: 2: 00 bf nop
+# BEFORE: 4: 40 f2 00 00 movw r0, #0
+# BEFORE: 8: c0 f2 00 00 movt r0, #0
+# BEFORE: c: 70 47 bx lr
+
+# AFTER: Disassembly of section .text:
+# AFTER: 1000: 70 47 bx lr
+# AFTER: 1002: 00 bf nop
+# AFTER: 1004: 41 f2 01 00 movw r0, #4097
+# AFTER: 1008: c0 f2 40 00 movt r0, #64
+# AFTER: 100c: 70 47 bx lr
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 704700BF40F20000C0F200007047
+ Relocations:
+ - VirtualAddress: 4
+ SymbolName: function
+ Type: 17
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: function
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: get_function
+ Value: 4
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/armnt-movt32t.test b/test/COFF/armnt-movt32t.test
new file mode 100644
index 000000000000..be292cb39300
--- /dev/null
+++ b/test/COFF/armnt-movt32t.test
@@ -0,0 +1,72 @@
+# REQUIRES: arm
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
+# RUN: lld-link /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
+
+# BEFORE: Disassembly of section .text:
+# BEFORE: 0: 40 f2 00 00 movw r0, #0
+# BEFORE: 4: c0 f2 00 00 movt r0, #0
+# BEFORE: 8: 70 47 bx lr
+
+# AFTER: Disassembly of section .text:
+# AFTER: 0: 41 f2 00 00 movw r0, #4096
+# AFTER: 4: c0 f2 40 00 movt r0, #64
+# AFTER: 8: 70 47 bx lr
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 40F20000C0F200007047
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: buffer
+ Type: 17
+ - Name: .rdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: '62756666657200'
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 10
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: .rdata
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 7
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 2
+ - Name: get_buffer
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: buffer
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+...
diff --git a/test/COFF/base.test b/test/COFF/base.test
new file mode 100644
index 000000000000..f03e321fc23a
--- /dev/null
+++ b/test/COFF/base.test
@@ -0,0 +1,57 @@
+# RUN: yaml2obj < %s > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT-HEADER %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=DEFAULT-TEXT %s
+
+# DEFAULT-HEADER: ImageBase: 0x140000000
+# DEFAULT-TEXT: Contents of section .text:
+# DEFAULT-TEXT-NEXT: 1000 00000040 01000000
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /base:0x280000000
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BASE-HEADER %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=BASE-TEXT %s
+
+# BASE-HEADER: ImageBase: 0x280000000
+# BASE-TEXT: Contents of section .text:
+# BASE-TEXT-NEXT: 1000 00000080 02000000
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: 0000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_ADDR64
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __ImageBase
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/baserel.test b/test/COFF/baserel.test
new file mode 100644
index 000000000000..bac9c22cbc3d
--- /dev/null
+++ b/test/COFF/baserel.test
@@ -0,0 +1,215 @@
+# RUN: yaml2obj < %s > %t.obj
+#
+# RUN: lld-link /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s -check-prefix=BASEREL
+#
+# RUN: lld-link /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s -check-prefix=NOBASEREL
+#
+# BASEREL: BaseReloc [
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x2007
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x200C
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x201E
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: ABSOLUTE
+# BASEREL-NEXT: Address: 0x2000
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x3007
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x300C
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x301E
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: ABSOLUTE
+# BASEREL-NEXT: Address: 0x3000
+# BASEREL-NEXT: }
+#
+# NOBASEREL: BaseReloc [
+# NOBASEREL-NEXT: ]
+#
+# RUN: lld-link /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -file-headers -sections %t.exe | FileCheck %s \
+# RUN: --check-prefix=BASEREL-HEADER
+#
+# RN: lld-link /out:%t.exe /entry:main /fixed %t.obj %p/Inputs/std64.lib
+# RN: llvm-readobj -file-headers %t.exe | FileCheck %s \
+# RN: --check-prefix=NOBASEREL-HEADER
+#
+# BASEREL-HEADER-NOT: IMAGE_FILE_RELOCS_STRIPPED
+#
+# NOBASEREL-HEADER: IMAGE_FILE_RELOCS_STRIPPED
+#
+# BASEREL-HEADER: BaseRelocationTableRVA: 0x5000
+# BASEREL-HEADER: BaseRelocationTableSize: 0x20
+# BASEREL-HEADER: Name: .reloc (2E 72 65 6C 6F 63 00 00)
+# BASEREL-HEADER-NEXT: VirtualSize: 0x20
+# BASEREL-HEADER-NEXT: VirtualAddress: 0x5000
+# BASEREL-HEADER-NEXT: RawDataSize: 512
+# BASEREL-HEADER-NEXT: PointerToRawData: 0xC00
+# BASEREL-HEADER-NEXT: PointerToRelocations: 0x0
+# BASEREL-HEADER-NEXT: PointerToLineNumbers: 0x0
+# BASEREL-HEADER-NEXT: RelocationCount: 0
+# BASEREL-HEADER-NEXT: LineNumberCount: 0
+# BASEREL-HEADER-NEXT: Characteristics [ (0x42000040)
+# BASEREL-HEADER-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
+# BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
+# BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
+# BASEREL-HEADER-NEXT: ]
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: abs_symbol
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 7
+ SymbolName: caption
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 12
+ SymbolName: message
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 18
+ SymbolName: MessageBoxA
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 24
+ SymbolName: ExitProcess
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 30
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_ADDR64
+ - Name: .text2
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: abs_symbol
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 7
+ SymbolName: caption
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 12
+ SymbolName: message
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 18
+ SymbolName: MessageBoxA
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 24
+ SymbolName: ExitProcess
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 30
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_ADDR64
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: 48656C6C6F0048656C6C6F20576F726C6400
+symbols:
+ - Name: "@comp.id"
+ Value: 10394907
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 6
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .text2
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 6
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 18
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: MessageBoxA
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: ExitProcess
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: message
+ Value: 6
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: caption
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: abs_symbol
+ Value: 0xDEADBEEF
+ SectionNumber: -1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __ImageBase
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/common.test b/test/COFF/common.test
new file mode 100644
index 000000000000..de25848674ed
--- /dev/null
+++ b/test/COFF/common.test
@@ -0,0 +1,102 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# Operands of B8 (MOV EAX) are common symbols
+# CHECK: 3000: b8 00 10 00 40
+# CHECK: 3005: b8 04 10 00 40
+# CHECK: 300a: b8 20 10 00 40
+# CHECK: 300f: b8 60 10 00 40
+# CHECK: 3014: b8 80 10 00 40
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: b800000000b800000000b800000000b800000000b800000000
+ Relocations:
+ - VirtualAddress: 1
+ SymbolName: bssdata4
+ Type: IMAGE_REL_AMD64_ADDR32
+ - VirtualAddress: 6
+ SymbolName: bsspad1
+ Type: IMAGE_REL_AMD64_ADDR32
+ - VirtualAddress: 11
+ SymbolName: bssdata64
+ Type: IMAGE_REL_AMD64_ADDR32
+ - VirtualAddress: 16
+ SymbolName: bsspad2
+ Type: IMAGE_REL_AMD64_ADDR32
+ - VirtualAddress: 21
+ SymbolName: bssdata16
+ Type: IMAGE_REL_AMD64_ADDR32
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: 03000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 5
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bssdata4
+ Value: 4
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bsspad1
+ Value: 1
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bssdata64
+ Value: 64
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bsspad2
+ Value: 1
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bssdata16
+ Value: 16
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/conflict.test b/test/COFF/conflict.test
new file mode 100644
index 000000000000..3d5725ab79ee
--- /dev/null
+++ b/test/COFF/conflict.test
@@ -0,0 +1,41 @@
+# RUN: yaml2obj < %s > %t1.obj
+# RUN: yaml2obj < %s > %t2.obj
+# RUN: not lld-link /out:%t.exe %t1.obj %t2.obj >& %t.log
+# RUN: FileCheck %s < %t.log
+
+# RUN: llvm-as -o %t.lto1.obj %S/Inputs/conflict.ll
+# RUN: llvm-as -o %t.lto2.obj %S/Inputs/conflict.ll
+# RUN: not lld-link /out:%t.exe %t.lto1.obj %t.lto2.obj >& %t.log
+# RUN: FileCheck %s < %t.log
+
+# CHECK: duplicate symbol: foo {{.+}}1.obj and foo {{.+}}2.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/debug.test b/test/COFF/debug.test
new file mode 100644
index 000000000000..52e0f60fe3f5
--- /dev/null
+++ b/test/COFF/debug.test
@@ -0,0 +1,38 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console %t.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: debug
+ Value: 0
+ SectionNumber: -2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/defparser.test b/test/COFF/defparser.test
new file mode 100644
index 000000000000..2e5223a699df
--- /dev/null
+++ b/test/COFF/defparser.test
@@ -0,0 +1,13 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: echo -e "LIBRARY foo\nEXPORTS ? @" > %t.def
+# RUN: not lld-link /def:%t.def %t.obj
+
+# RUN: echo -e "LIBRARY foo\nHEAP abc" > %t.def
+# RUN: not lld-link /def:%t.def %t.obj
+
+# RUN: echo -e "LIBRARY foo\nSTACK abc" > %t.def
+# RUN: not lld-link /def:%t.def %t.obj
+
+# RUN: echo -e "foo" > %t.def
+# RUN: not lld-link /def:%t.def %t.obj
diff --git a/test/COFF/delayimports.test b/test/COFF/delayimports.test
new file mode 100644
index 000000000000..2c27d58dc793
--- /dev/null
+++ b/test/COFF/delayimports.test
@@ -0,0 +1,41 @@
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console \
+# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /delayload:STD64.DLL \
+# RUN: /alternatename:__delayLoadHelper2=main
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
+
+IMPORT: DelayImport {
+IMPORT-NEXT: Name: std64.dll
+IMPORT-NEXT: Attributes: 0x1
+IMPORT-NEXT: ModuleHandle: 0x1018
+IMPORT-NEXT: ImportAddressTable: 0x1020
+IMPORT-NEXT: ImportNameTable: 0x3040
+IMPORT-NEXT: BoundDelayImportTable: 0x0
+IMPORT-NEXT: UnloadDelayImportTable: 0x0
+IMPORT-NEXT: Import {
+IMPORT-NEXT: Symbol: ExitProcess (0)
+IMPORT-NEXT: Address: 0x140002066
+IMPORT-NEXT: }
+IMPORT-NEXT: Import {
+IMPORT-NEXT: Symbol: (50)
+IMPORT-NEXT: Address: 0x1400020BD
+IMPORT-NEXT: }
+IMPORT-NEXT: Import {
+IMPORT-NEXT: Symbol: MessageBoxA (0)
+IMPORT-NEXT: Address: 0x140002114
+IMPORT-NEXT: }
+IMPORT-NEXT: }
+
+BASEREL: BaseReloc [
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: DIR64
+BASEREL-NEXT: Address: 0x1020
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: DIR64
+BASEREL-NEXT: Address: 0x1028
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: DIR64
+BASEREL-NEXT: Address: 0x1030
+BASEREL-NEXT: }
diff --git a/test/COFF/delayimports32.test b/test/COFF/delayimports32.test
new file mode 100644
index 000000000000..328b34504ac5
--- /dev/null
+++ b/test/COFF/delayimports32.test
@@ -0,0 +1,86 @@
+# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
+# RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: /entry:main@0 /alternatename:___delayLoadHelper2@8=_main@0 \
+# RUN: /debug /delayload:std32.dll /out:%t.exe
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
+# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=DISASM %s
+
+IMPORT: Format: COFF-i386
+IMPORT-NEXT: Arch: i386
+IMPORT-NEXT: AddressSize: 32bit
+IMPORT-NEXT: DelayImport {
+IMPORT-NEXT: Name: std32.dll
+IMPORT-NEXT: Attributes: 0x1
+IMPORT-NEXT: ModuleHandle: 0x1018
+IMPORT-NEXT: ImportAddressTable: 0x1020
+IMPORT-NEXT: ImportNameTable: 0x3040
+IMPORT-NEXT: BoundDelayImportTable: 0x0
+IMPORT-NEXT: UnloadDelayImportTable: 0x0
+IMPORT-NEXT: Import {
+IMPORT-NEXT: Symbol: ExitProcess (0)
+IMPORT-NEXT: Address: 0x402029
+IMPORT-NEXT: }
+IMPORT-NEXT: Import {
+IMPORT-NEXT: Symbol: MessageBoxA (0)
+IMPORT-NEXT: Address: 0x40203E
+IMPORT-NEXT: }
+IMPORT-NEXT: }
+
+BASEREL: BaseReloc [
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x1020
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x1024
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x2005
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x200C
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x201F
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x2025
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x202C
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x2031
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x2041
+BASEREL-NEXT: }
+BASEREL-NEXT: Entry {
+BASEREL-NEXT: Type: HIGHLOW
+BASEREL-NEXT: Address: 0x2046
+BASEREL-NEXT: }
+BASEREL-NEXT: ]
+
+DISASM: 202b: 68 20 10 40 00 pushl $4198432
+DISASM-NEXT: 2030: 68 00 30 40 00 pushl $4206592
+DISASM-NEXT: 2035: e8 c6 ff ff ff calll -58 <_main@0>
+DISASM-NEXT: 203a: 5a popl %edx
+DISASM-NEXT: 203b: 59 popl %ecx
+DISASM-NEXT: 203c: ff e0 jmpl *%eax
+DISASM-NEXT: 203e: 51 pushl %ecx
+DISASM-NEXT: 203f: 52 pushl %edx
+DISASM-NEXT: 2040: 68 24 10 40 00 pushl $4198436
+DISASM-NEXT: 2045: 68 00 30 40 00 pushl $4206592
+DISASM-NEXT: 204a: e8 b1 ff ff ff calll -79 <_main@0>
+DISASM-NEXT: 204f: 5a popl %edx
+DISASM-NEXT: 2050: 59 popl %ecx
+DISASM-NEXT: 2051: ff e0 jmpl *%eax
diff --git a/test/COFF/dll.test b/test/COFF/dll.test
new file mode 100644
index 000000000000..bafd3c233c87
--- /dev/null
+++ b/test/COFF/dll.test
@@ -0,0 +1,53 @@
+# REQUIRES: winres
+# REQUIRES: winlib
+
+# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: /export:mangled
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=EXPORT %s
+
+EXPORT: Export Table:
+EXPORT: DLL name: dll.test.tmp.dll
+EXPORT: Ordinal RVA Name
+EXPORT-NEXT: 0 0
+EXPORT-NEXT: 1 0x1008 exportfn1
+EXPORT-NEXT: 2 0x1010 exportfn2
+EXPORT-NEXT: 3 0x1010 exportfn3
+EXPORT-NEXT: 4 0x1010 mangled
+
+# RUN: yaml2obj < %p/Inputs/export2.yaml > %t5.obj
+# RUN: rm -f %t5.lib
+# RUN: llvm-ar cru %t5.lib %t5.obj
+# RUN: lld-link /out:%t5.dll /dll %t.obj %t5.lib /export:mangled2
+# RUN: llvm-objdump -p %t5.dll | FileCheck -check-prefix=EXPORT2 %s
+
+EXPORT2: Export Table:
+EXPORT2: DLL name: dll.test.tmp5.dll
+EXPORT2: Ordinal RVA Name
+EXPORT2-NEXT: 0 0
+EXPORT2-NEXT: 1 0x1010 exportfn3
+EXPORT2-NEXT: 2 0x101c mangled2
+
+# RUN: llvm-as -o %t.lto.obj %p/Inputs/export.ll
+# RUN: lld-link /out:%t.lto.dll /dll %t.lto.obj /export:exportfn1 /export:exportfn2
+# RUN: llvm-objdump -p %t.lto.dll | FileCheck -check-prefix=EXPORT-LTO %s
+
+EXPORT-LTO: Export Table:
+EXPORT-LTO: DLL name: dll.test.tmp.lto.dll
+EXPORT-LTO: Ordinal RVA Name
+EXPORT-LTO-NEXT: 0 0
+EXPORT-LTO-NEXT: 1 0x1010 exportfn1
+EXPORT-LTO-NEXT: 2 0x1020 exportfn2
+EXPORT-LTO-NEXT: 3 0x1030 exportfn3
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /implib:%t2.lib \
+# RUN: /export:exportfn1 /export:exportfn2
+# RUN: yaml2obj < %p/Inputs/import.yaml > %t2.obj
+# RUN: lld-link /out:%t2.exe /entry:main %t2.obj %t2.lib
+# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s
+
+# RUN: lld-link /out:%t2.lto.exe /entry:main %t2.obj %t.lto.lib
+# RUN: llvm-readobj -coff-imports %t2.lto.exe | FileCheck -check-prefix=IMPORT %s
+
+IMPORT: Symbol: exportfn1
+IMPORT: Symbol: exportfn2
diff --git a/test/COFF/dllorder.test b/test/COFF/dllorder.test
new file mode 100644
index 000000000000..417483d33086
--- /dev/null
+++ b/test/COFF/dllorder.test
@@ -0,0 +1,65 @@
+# REQUIRES: winlib
+
+# RUN: yaml2obj < %s > %t.obj
+# RUN: mkdir -p %tlib
+# RUN: rm -f %tlib/lib1.lib
+# RUN: rm -f %tlib/lib2.lib
+
+# RUN: echo EXPORTS sym1 > %t1.def
+# RUN: echo EXPORTS sym2 > %t2.def
+# RUN: lib /nologo /machine:amd64 /def:%t1.def /out:%tlib\lib1.lib
+# RUN: lib /nologo /machine:amd64 /def:%t2.def /out:%tlib\lib2.lib
+
+# RUN: lld-link /out:%t1.exe /entry:main /libpath:%tlib %t.obj /defaultlib:lib1 /defaultlib:lib2
+# RUN: lld-link /out:%t2.exe /entry:main /libpath:%tlib %t.obj /defaultlib:lib2 /defaultlib:lib1
+
+# RUN: llvm-readobj -coff-imports %t1.exe | FileCheck -check-prefix=CHECK1 %s
+# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=CHECK2 %s
+
+# CHECK1: Name: dllorder.test.tmp1.dll
+# CHECK1: Name: dllorder.test.tmp2.dll
+
+# CHECK2: Name: dllorder.test.tmp2.dll
+# CHECK2: Name: dllorder.test.tmp1.dll
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: 0000000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __imp_sym1
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __imp_sym2
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/driver.test b/test/COFF/driver.test
new file mode 100644
index 000000000000..0832350a4f30
--- /dev/null
+++ b/test/COFF/driver.test
@@ -0,0 +1,3 @@
+# RUN: not lld-link nosuchfile.obj >& %t.log
+# RUN: FileCheck -check-prefix=MISSING %s < %t.log
+MISSING: nosuchfile.obj: {{[Nn]}}o such file or directory
diff --git a/test/COFF/entry-inference.test b/test/COFF/entry-inference.test
new file mode 100644
index 000000000000..2063f28edc77
--- /dev/null
+++ b/test/COFF/entry-inference.test
@@ -0,0 +1,50 @@
+# RUN: sed -e s/ENTRYNAME/main/ %s | yaml2obj > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=MAIN %s < %t.log
+
+# RUN: sed s/ENTRYNAME/wmain/ %s | yaml2obj > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=WMAIN %s < %t.log
+
+# RUN: sed s/ENTRYNAME/WinMain/ %s | yaml2obj > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
+
+# RUN: sed s/ENTRYNAME/wWinMain/ %s | yaml2obj > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=WWINMAIN %s < %t.log
+
+# MAIN: <root>: undefined symbol: mainCRTStartup
+# WMAIN: <root>: undefined symbol: wmainCRTStartup
+# WINMAIN: <root>: undefined symbol: WinMainCRTStartup
+# WWINMAIN: <root>: undefined symbol: wWinMainCRTStartup
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: ENTRYNAME
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/entry-inference2.test b/test/COFF/entry-inference2.test
new file mode 100644
index 000000000000..afac80859d10
--- /dev/null
+++ b/test/COFF/entry-inference2.test
@@ -0,0 +1,39 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj /verbose > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK: Entry name inferred: WinMainCRTStartup
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f616c7465726e6174656e616d653a6d61696e3d57696e4d61696e00 # /alternatename:main=WinMain
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: WinMain
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/entry-inference32.test b/test/COFF/entry-inference32.test
new file mode 100644
index 000000000000..6e1a5f925180
--- /dev/null
+++ b/test/COFF/entry-inference32.test
@@ -0,0 +1,35 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: not lld-link /out:%t.exe %t.obj /verbose > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK: Entry name inferred: _WinMainCRTStartup
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _WinMain@16
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/entry-mangled.test b/test/COFF/entry-mangled.test
new file mode 100644
index 000000000000..41620336513e
--- /dev/null
+++ b/test/COFF/entry-mangled.test
@@ -0,0 +1,35 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-as -o %t.lto.obj %S/Inputs/entry-mangled.ll
+# RUN: lld-link /out:%t.exe /entry:main %t.lto.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: '?main@@YAHXZ'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/entrylib.ll b/test/COFF/entrylib.ll
new file mode 100644
index 000000000000..4ffa42c44a3e
--- /dev/null
+++ b/test/COFF/entrylib.ll
@@ -0,0 +1,11 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: rm -f %t.lib
+; RUN: llvm-ar cru %t.lib %t.obj
+; RUN: lld-link /out:%t.exe /entry:main %t.lib
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define i32 @main() {
+ ret i32 0
+}
diff --git a/test/COFF/export-exe.test b/test/COFF/export-exe.test
new file mode 100644
index 000000000000..7a345160faa9
--- /dev/null
+++ b/test/COFF/export-exe.test
@@ -0,0 +1,11 @@
+# REQUIRES: winlib
+# RUN: lld-link /entry:main /out:%t.exe /subsystem:windows \
+# RUN: %p/Inputs/ret42.obj /export:main
+# RUN: llvm-objdump -p %t.exe | FileCheck %s
+
+CHECK: Export Table:
+CHECK-NEXT: DLL name: export-exe.test.tmp.exe
+CHECK-NEXT: Ordinal base: 0
+CHECK-NEXT: Ordinal RVA Name
+CHECK-NEXT: 0 0
+CHECK-NEXT: 1 0x1000 main
diff --git a/test/COFF/export.test b/test/COFF/export.test
new file mode 100644
index 000000000000..a3ea0ab9bca2
--- /dev/null
+++ b/test/COFF/export.test
@@ -0,0 +1,82 @@
+# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
+#
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK1 %s
+# REQUIRES: winlib
+
+CHECK1: Export Table:
+CHECK1: DLL name: export.test.tmp.dll
+CHECK1: Ordinal RVA Name
+CHECK1-NEXT: 0 0
+CHECK1-NEXT: 1 0x1008 exportfn1
+CHECK1-NEXT: 2 0x1010 exportfn2
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5 /export:exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s
+
+CHECK2: Export Table:
+CHECK2: DLL name: export.test.tmp.dll
+CHECK2: Ordinal RVA Name
+CHECK2-NEXT: 0 0
+CHECK2-NEXT: 1 0
+CHECK2-NEXT: 2 0
+CHECK2-NEXT: 3 0
+CHECK2-NEXT: 4 0
+CHECK2-NEXT: 5 0x1008 exportfn1
+CHECK2-NEXT: 6 0x1010 exportfn2
+CHECK2-NEXT: 7 0x1010 exportfn3
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s
+
+CHECK3: Export Table:
+CHECK3: DLL name: export.test.tmp.dll
+CHECK3: Ordinal RVA Name
+CHECK3-NEXT: 0 0
+CHECK3-NEXT: 1 0
+CHECK3-NEXT: 2 0
+CHECK3-NEXT: 3 0
+CHECK3-NEXT: 4 0
+CHECK3-NEXT: 5 0x1008
+CHECK3-NEXT: 6 0x1010 exportfn2
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK4 %s
+
+CHECK4: Export Table:
+CHECK4: DLL name: export.test.tmp.dll
+CHECK4: Ordinal RVA Name
+CHECK4-NEXT: 0 0
+CHECK4-NEXT: 1 0x1010 exportfn3
+CHECK4-NEXT: 2 0x1008 f1
+CHECK4-NEXT: 3 0x1010 f2
+
+# RUN: echo "EXPORTS exportfn1 @3" > %t.def
+# RUN: echo "fn2=exportfn2 @2" >> %t.def
+# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK5 %s
+
+CHECK5: Export Table:
+CHECK5: DLL name: export.test.tmp.dll
+CHECK5: Ordinal RVA Name
+CHECK5-NEXT: 0 0
+CHECK5-NEXT: 1 0
+CHECK5-NEXT: 2 0x1010 fn2
+CHECK5-NEXT: 3 0x1008 exportfn1
+CHECK5-NEXT: 4 0x1010 exportfn3
+
+# RUN: lld-link /out:%t.DLL /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: /export:exportfn1 /export:exportfn2,@5 >& %t.log
+# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
+
+CHECK6: duplicate /export option: exportfn2
+CHECK6-NOT: duplicate /export option: exportfn1
+
+# RUN: llvm-nm -M %t.lib | FileCheck --check-prefix=SYMTAB %s
+
+SYMTAB: __imp_exportfn1 in export.test.tmp.DLL
+SYMTAB: exportfn1 in export.test.tmp.DLL
+SYMTAB: __imp_exportfn2 in export.test.tmp.DLL
+SYMTAB: exportfn2 in export.test.tmp.DLL
+SYMTAB: __imp_exportfn3 in export.test.tmp.DLL
+SYMTAB: exportfn3 in export.test.tmp.DLL
diff --git a/test/COFF/export32.test b/test/COFF/export32.test
new file mode 100644
index 000000000000..5d7b2708dcba
--- /dev/null
+++ b/test/COFF/export32.test
@@ -0,0 +1,133 @@
+# RUN: yaml2obj < %s > %t.obj
+#
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK1 %s
+# REQUIRES: winlib
+
+# CHECK1: Export Table:
+# CHECK1: DLL name: export32.test.tmp.dll
+# CHECK1: Ordinal RVA Name
+# CHECK1-NEXT: 0 0
+# CHECK1-NEXT: 1 0x1008 exportfn1
+# CHECK1-NEXT: 2 0x1010 exportfn2
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5 \
+# RUN: /export:exportfn2 /export:mangled
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s
+
+# CHECK2: Export Table:
+# CHECK2: DLL name: export32.test.tmp.dll
+# CHECK2: Ordinal RVA Name
+# CHECK2-NEXT: 0 0
+# CHECK2-NEXT: 1 0
+# CHECK2-NEXT: 2 0
+# CHECK2-NEXT: 3 0
+# CHECK2-NEXT: 4 0
+# CHECK2-NEXT: 5 0x1008 exportfn1
+# CHECK2-NEXT: 6 0x1010 exportfn2
+# CHECK2-NEXT: 7 0x1010 exportfn3
+# CHECK2-NEXT: 8 0x1010 mangled
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s
+
+# CHECK3: Export Table:
+# CHECK3: DLL name: export32.test.tmp.dll
+# CHECK3: Ordinal RVA Name
+# CHECK3-NEXT: 0 0
+# CHECK3-NEXT: 1 0
+# CHECK3-NEXT: 2 0
+# CHECK3-NEXT: 3 0
+# CHECK3-NEXT: 4 0
+# CHECK3-NEXT: 5 0x1008
+# CHECK3-NEXT: 6 0x1010 exportfn2
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:f1=exportfn1 /export:f2=exportfn2
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK4 %s
+
+# CHECK4: Export Table:
+# CHECK4: DLL name: export32.test.tmp.dll
+# CHECK4: Ordinal RVA Name
+# CHECK4-NEXT: 0 0
+# CHECK4-NEXT: 1 0x1010 exportfn3
+# CHECK4-NEXT: 2 0x1008 f1
+# CHECK4-NEXT: 3 0x1010 f2
+
+# RUN: echo "EXPORTS exportfn1 @3" > %t.def
+# RUN: echo "fn2=exportfn2 @2" >> %t.def
+# RUN: lld-link /out:%t.dll /dll %t.obj /def:%t.def
+# RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK5 %s
+
+# CHECK5: Export Table:
+# CHECK5: DLL name: export32.test.tmp.dll
+# CHECK5: Ordinal RVA Name
+# CHECK5-NEXT: 0 0
+# CHECK5-NEXT: 1 0
+# CHECK5-NEXT: 2 0x1010 fn2
+# CHECK5-NEXT: 3 0x1008 exportfn1
+# CHECK5-NEXT: 4 0x1010 exportfn3
+
+# RUN: lld-link /out:%t.dll /dll %t.obj /export:exportfn1 /export:exportfn2 \
+# RUN: /export:exportfn1 /export:exportfn2,@5 >& %t.log
+# RUN: FileCheck -check-prefix=CHECK6 %s < %t.log
+
+# CHECK6: duplicate /export option: _exportfn2
+# CHECK6-NOT: duplicate /export option: _exportfn1
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B800000000506800000000680000000050E80000000050E800000000
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f6578706f72743a5f6578706f7274666e3300 # /export:_exportfn3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: __DllMainCRTStartup@12
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _exportfn1
+ Value: 8
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _exportfn2@4
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _exportfn3
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: '?mangled@@YAHXZ'
+ Value: 16
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/failifmismatch.test b/test/COFF/failifmismatch.test
new file mode 100644
index 000000000000..021d91b644c4
--- /dev/null
+++ b/test/COFF/failifmismatch.test
@@ -0,0 +1,11 @@
+# RUN: lld-link /entry:main /subsystem:console /out:%t.exe \
+# RUN: %p/Inputs/ret42.obj
+
+# RUN: lld-link /entry:main /subsystem:console /out:%t.exe \
+# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k2=v1
+
+# RUN: lld-link /entry:main /subsystem:console /out:%t.exe \
+# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k1=v1
+
+# RUN: not lld-link /entry:main /subsystem:console /out:%t.exe \
+# RUN: %p/Inputs/ret42.obj /failifmismatch:k1=v1 /failifmismatch:k1=v2
diff --git a/test/COFF/filetype.test b/test/COFF/filetype.test
new file mode 100644
index 000000000000..e161910ec2c8
--- /dev/null
+++ b/test/COFF/filetype.test
@@ -0,0 +1,4 @@
+# Make sure input file type is detected by file magic and not by extension.
+
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.lib
+# RUN: lld-link /out:%t.exe /entry:main %t.lib
diff --git a/test/COFF/force.test b/test/COFF/force.test
new file mode 100644
index 000000000000..44e5722dab5d
--- /dev/null
+++ b/test/COFF/force.test
@@ -0,0 +1,43 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: not lld-link /out:%t.exe /entry:main %t.obj >& %t.log
+# RUN: FileCheck %s < %t.log
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /force >& %t.log
+# RUN: FileCheck %s < %t.log
+
+# CHECK: .obj: undefined symbol: foo
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: foo
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/heap.test b/test/COFF/heap.test
new file mode 100644
index 000000000000..1eb70a2f1953
--- /dev/null
+++ b/test/COFF/heap.test
@@ -0,0 +1,25 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
+
+DEFAULT: SizeOfHeapReserve: 1048576
+DEFAULT: SizeOfHeapCommit: 4096
+
+# RUN: lld-link /out:%t.exe /entry:main /heap:0x3000 %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+# RUN: echo "HEAPSIZE 12288" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+
+CHECK1: SizeOfHeapReserve: 12288
+CHECK1: SizeOfHeapCommit: 4096
+
+# RUN: lld-link /out:%t.exe /entry:main /heap:0x5000,0x3000 %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: echo "HEAPSIZE 20480,12288" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+
+CHECK2: SizeOfHeapReserve: 20480
+CHECK2: SizeOfHeapCommit: 12288
diff --git a/test/COFF/hello32.test b/test/COFF/hello32.test
new file mode 100644
index 000000000000..4307d4bf89a9
--- /dev/null
+++ b/test/COFF/hello32.test
@@ -0,0 +1,129 @@
+# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
+# RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: /entry:main@0 /out:%t.exe
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORTS %s
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
+
+HEADER: Format: COFF-i386
+HEADER-NEXT: Arch: i386
+HEADER-NEXT: AddressSize: 32bit
+HEADER-NEXT: ImageFileHeader {
+HEADER-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C)
+HEADER-NEXT: SectionCount: 4
+HEADER-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0)
+HEADER-NEXT: PointerToSymbolTable: 0x0
+HEADER-NEXT: SymbolCount: 0
+HEADER-NEXT: OptionalHeaderSize: 224
+HEADER-NEXT: Characteristics [ (0x102)
+HEADER-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100)
+HEADER-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
+HEADER-NEXT: ]
+HEADER-NEXT: }
+HEADER-NEXT: ImageOptionalHeader {
+HEADER-NEXT: MajorLinkerVersion: 0
+HEADER-NEXT: MinorLinkerVersion: 0
+HEADER-NEXT: SizeOfCode: 512
+HEADER-NEXT: SizeOfInitializedData: 1536
+HEADER-NEXT: SizeOfUninitializedData: 0
+HEADER-NEXT: AddressOfEntryPoint: 0x2000
+HEADER-NEXT: BaseOfCode: 0x2000
+HEADER-NEXT: BaseOfData: 0x0
+HEADER-NEXT: ImageBase: 0x400000
+HEADER-NEXT: SectionAlignment: 4096
+HEADER-NEXT: FileAlignment: 512
+HEADER-NEXT: MajorOperatingSystemVersion: 6
+HEADER-NEXT: MinorOperatingSystemVersion: 0
+HEADER-NEXT: MajorImageVersion: 0
+HEADER-NEXT: MinorImageVersion: 0
+HEADER-NEXT: MajorSubsystemVersion: 6
+HEADER-NEXT: MinorSubsystemVersion: 0
+HEADER-NEXT: SizeOfImage: 16896
+HEADER-NEXT: SizeOfHeaders: 512
+HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
+HEADER-NEXT: Characteristics [ (0x8140)
+HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40)
+HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100)
+HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000)
+HEADER-NEXT: ]
+HEADER-NEXT: SizeOfStackReserve: 1048576
+HEADER-NEXT: SizeOfStackCommit: 4096
+HEADER-NEXT: SizeOfHeapReserve: 1048576
+HEADER-NEXT: SizeOfHeapCommit: 4096
+HEADER-NEXT: NumberOfRvaAndSize: 16
+HEADER-NEXT: DataDirectory {
+HEADER-NEXT: ExportTableRVA: 0x0
+HEADER-NEXT: ExportTableSize: 0x0
+HEADER-NEXT: ImportTableRVA: 0x3000
+HEADER-NEXT: ImportTableSize: 0x28
+HEADER-NEXT: ResourceTableRVA: 0x0
+HEADER-NEXT: ResourceTableSize: 0x0
+HEADER-NEXT: ExceptionTableRVA: 0x0
+HEADER-NEXT: ExceptionTableSize: 0x0
+HEADER-NEXT: CertificateTableRVA: 0x0
+HEADER-NEXT: CertificateTableSize: 0x0
+HEADER-NEXT: BaseRelocationTableRVA: 0x4000
+HEADER-NEXT: BaseRelocationTableSize: 0x10
+HEADER-NEXT: DebugRVA: 0x0
+HEADER-NEXT: DebugSize: 0x0
+HEADER-NEXT: ArchitectureRVA: 0x0
+HEADER-NEXT: ArchitectureSize: 0x0
+HEADER-NEXT: GlobalPtrRVA: 0x0
+HEADER-NEXT: GlobalPtrSize: 0x0
+HEADER-NEXT: TLSTableRVA: 0x0
+HEADER-NEXT: TLSTableSize: 0x0
+HEADER-NEXT: LoadConfigTableRVA: 0x0
+HEADER-NEXT: LoadConfigTableSize: 0x0
+HEADER-NEXT: BoundImportRVA: 0x0
+HEADER-NEXT: BoundImportSize: 0x0
+HEADER-NEXT: IATRVA: 0x3034
+HEADER-NEXT: IATSize: 0xC
+HEADER-NEXT: DelayImportDescriptorRVA: 0x0
+HEADER-NEXT: DelayImportDescriptorSize: 0x0
+HEADER-NEXT: CLRRuntimeHeaderRVA: 0x0
+HEADER-NEXT: CLRRuntimeHeaderSize: 0x0
+HEADER-NEXT: ReservedRVA: 0x0
+HEADER-NEXT: ReservedSize: 0x0
+HEADER-NEXT: }
+HEADER-NEXT: }
+HEADER-NEXT: DOSHeader {
+HEADER-NEXT: Magic: MZ
+HEADER-NEXT: UsedBytesInTheLastPage: 0
+HEADER-NEXT: FileSizeInPages: 0
+HEADER-NEXT: NumberOfRelocationItems: 0
+HEADER-NEXT: HeaderSizeInParagraphs: 0
+HEADER-NEXT: MinimumExtraParagraphs: 0
+HEADER-NEXT: MaximumExtraParagraphs: 0
+HEADER-NEXT: InitialRelativeSS: 0
+HEADER-NEXT: InitialSP: 0
+HEADER-NEXT: Checksum: 0
+HEADER-NEXT: InitialIP: 0
+HEADER-NEXT: InitialRelativeCS: 0
+HEADER-NEXT: AddressOfRelocationTable: 64
+HEADER-NEXT: OverlayNumber: 0
+HEADER-NEXT: OEMid: 0
+HEADER-NEXT: OEMinfo: 0
+HEADER-NEXT: AddressOfNewExeHeader: 64
+HEADER-NEXT: }
+
+IMPORTS: Format: COFF-i386
+IMPORTS: Arch: i386
+IMPORTS: AddressSize: 32bit
+IMPORTS: Import {
+IMPORTS: Name: std32.dll
+IMPORTS: ImportLookupTableRVA: 0x3028
+IMPORTS: ImportAddressTableRVA: 0x3034
+IMPORTS: Symbol: ExitProcess (0)
+IMPORTS: Symbol: MessageBoxA (1)
+IMPORTS: }
+
+BASEREL: BaseReloc [
+BASEREL: Entry {
+BASEREL: Type: HIGHLOW
+BASEREL: Address: 0x2005
+BASEREL: }
+BASEREL: Entry {
+BASEREL: Type: HIGHLOW
+BASEREL: Address: 0x200C
+BASEREL: }
+BASEREL: ]
diff --git a/test/COFF/help.test b/test/COFF/help.test
new file mode 100644
index 000000000000..d36fe6d785fa
--- /dev/null
+++ b/test/COFF/help.test
@@ -0,0 +1,3 @@
+# RUN: lld-link /help | FileCheck %s
+
+CHECK: OVERVIEW: LLVM Linker
diff --git a/test/COFF/icf-circular.test b/test/COFF/icf-circular.test
new file mode 100644
index 000000000000..7319e135e2e6
--- /dev/null
+++ b/test/COFF/icf-circular.test
@@ -0,0 +1,81 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose %t.obj > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK: Selected foo
+# CHECK: Removed bar
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+ Relocations:
+ - VirtualAddress: 5
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 10
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_REL32
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+ Relocations:
+ - VirtualAddress: 5
+ SymbolName: bar
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 10
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_REL32
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __ImageBase
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/icf-circular2.test b/test/COFF/icf-circular2.test
new file mode 100644
index 000000000000..e7598c124365
--- /dev/null
+++ b/test/COFF/icf-circular2.test
@@ -0,0 +1,69 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose %t.obj > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK: Selected foo
+# CHECK: Removed bar
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+ Relocations:
+ - VirtualAddress: 5
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+ Relocations:
+ - VirtualAddress: 5
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/icf-different-align.test b/test/COFF/icf-different-align.test
new file mode 100644
index 000000000000..6876048a5d40
--- /dev/null
+++ b/test/COFF/icf-different-align.test
@@ -0,0 +1,61 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose %t.obj > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK-NOT: Selected foo
+# CHECK-NOT: Removed bar
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 8
+ SectionData: 4883EC28E8000000004883C428C3
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/icf-local.test b/test/COFF/icf-local.test
new file mode 100644
index 000000000000..a0b4c91559a3
--- /dev/null
+++ b/test/COFF/icf-local.test
@@ -0,0 +1,66 @@
+# COMDAT sections with non-external linkage should not be merged by ICF.
+
+# RUN: yaml2obj < %s > %t1.obj
+# RUN: sed s/foo/main/ %s | yaml2obj > %t2.obj
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console /verbose \
+# RUN: %t1.obj %t2.obj > %t.log 2>&1
+# RUN: FileCheck %s < %t.log
+
+# CHECK-NOT: Removed bar
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 488D0500000000C3
+ Relocations:
+ - VirtualAddress: 3
+ SymbolName: bar
+ Type: IMAGE_REL_AMD64_REL32
+ - Name: .rdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+ Alignment: 8
+ SectionData: 2A000000000000002B00000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 1092178131
+ Number: 1
+ - Name: .rdata
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 16
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 1200668497
+ Number: 5
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+...
diff --git a/test/COFF/icf-simple.test b/test/COFF/icf-simple.test
new file mode 100644
index 000000000000..ae72fd9d9d73
--- /dev/null
+++ b/test/COFF/icf-simple.test
@@ -0,0 +1,71 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=ICF %s < %t.log
+
+# ICF: Selected foo
+# ICF: Removed bar
+
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose /opt:noicf %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=NOICF %s < %t.log
+# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
+# RUN: /verbose /opt:noref,noicf %t.obj > %t.log 2>&1
+# RUN: FileCheck -check-prefix=NOICF %s < %t.log
+
+# NOICF-NOT: Removed foo
+# NOICF-NOT: Removed bar
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 4883EC28E8000000004883C428C3
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 14
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 1682752513
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/imports-mangle.test b/test/COFF/imports-mangle.test
new file mode 100644
index 000000000000..35b385559005
--- /dev/null
+++ b/test/COFF/imports-mangle.test
@@ -0,0 +1,66 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /opt:noref /entry:main \
+# RUN: %t.obj %p/Inputs/imports-mangle.lib
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
+
+# CHECK: Import {
+# CHECK: Symbol: sym4 (0)
+# CHECK: Symbol: _sym3 (1)
+# CHECK: Symbol: sym1 (2)
+# CHECK: Symbol: (2)
+# CHECK: }
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: sym1
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: sym2
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __sym3
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: '?sym4@@YAHH@Z'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/imports.test b/test/COFF/imports.test
new file mode 100644
index 000000000000..584c24eb1b76
--- /dev/null
+++ b/test/COFF/imports.test
@@ -0,0 +1,35 @@
+# Verify that the lld can handle .lib files and emit .idata sections.
+#
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console \
+# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib
+# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=TEXT %s
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
+
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console \
+# RUN: %p/Inputs/hello64.obj %p/Inputs/std64.lib /include:ExitProcess
+# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=TEXT %s
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck -check-prefix=IMPORT %s
+
+TEXT: Disassembly of section .text:
+TEXT-NEXT: .text:
+TEXT-NEXT: subq $40, %rsp
+TEXT-NEXT: movq $0, %rcx
+TEXT-NEXT: leaq -4108(%rip), %rdx
+TEXT-NEXT: leaq -4121(%rip), %r8
+TEXT-NEXT: movl $0, %r9d
+TEXT-NEXT: callq 60
+TEXT-NEXT: movl $0, %ecx
+TEXT-NEXT: callq 18
+TEXT-NEXT: callq 29
+TEXT: jmpq *4098(%rip)
+TEXT: jmpq *4090(%rip)
+TEXT: jmpq *4082(%rip)
+
+IMPORT: Import {
+IMPORT-NEXT: Name: std64.dll
+IMPORT-NEXT: ImportLookupTableRVA: 0x3028
+IMPORT-NEXT: ImportAddressTableRVA: 0x3048
+IMPORT-NEXT: Symbol: ExitProcess (0)
+IMPORT-NEXT: Symbol: (50)
+IMPORT-NEXT: Symbol: MessageBoxA (1)
+IMPORT-NEXT: }
diff --git a/test/COFF/include.test b/test/COFF/include.test
new file mode 100644
index 000000000000..b9e5f49b4fb6
--- /dev/null
+++ b/test/COFF/include.test
@@ -0,0 +1,83 @@
+# RUN: yaml2obj < %s > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /verbose >& %t.log
+### FileCheck doesn't like empty input, so write something.
+# RUN: echo dummy >> %t.log
+# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /verbose /include:unused >& %t.log
+# RUN: echo dummy >> %t.log
+# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
+
+# CHECK1: Discarded unused
+# CHECK1-NOT: Discarded used
+# CHECK2-NOT: Discarded unused
+# CHECK2-NOT: Discarded used
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: .drectve
+ Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+ Alignment: 2147483648
+ SectionData: 2f696e636c7564653a7573656400 # /include:used
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: used
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: unused
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/include2.test b/test/COFF/include2.test
new file mode 100644
index 000000000000..f2379eaede40
--- /dev/null
+++ b/test/COFF/include2.test
@@ -0,0 +1,14 @@
+# RUN: yaml2obj < %p/Inputs/include1a.yaml > %t1.obj
+# RUN: yaml2obj < %p/Inputs/include1b.yaml > %t2.obj
+# RUN: yaml2obj < %p/Inputs/include1c.yaml > %t3.obj
+# RUN: rm -f %t2.lib %t3.lib
+# RUN: llvm-ar cru %t2.lib %t2.obj
+# RUN: llvm-ar cru %t3.lib %t3.obj
+# RUN: lld-link /out:%t.exe /entry:main %t1.obj %t2.lib %t3.lib /verbose >& %t.log
+# RUN: FileCheck %s < %t.log
+
+CHECK: include2.test.tmp1.obj
+CHECK: include2.test.tmp2.lib
+CHECK: include2.test.tmp3.lib
+CHECK: include2.test.tmp2.lib(include2.test.tmp2.obj) for foo
+CHECK: include2.test.tmp3.lib(include2.test.tmp3.obj) for bar
diff --git a/test/COFF/internal.test b/test/COFF/internal.test
new file mode 100644
index 000000000000..80a5332847de
--- /dev/null
+++ b/test/COFF/internal.test
@@ -0,0 +1,42 @@
+# Test that non-external symbols don't conflict
+
+# RUN: yaml2obj < %s > %t1.obj
+# RUN: yaml2obj < %s > %t2.obj
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t3.obj
+# RUN: lld-link /out:%t.exe /entry:main %t1.obj %t2.obj %t3.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: defined
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: absolute
+ Value: 0xdeadbeef
+ SectionNumber: -1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+...
diff --git a/test/COFF/invalid-obj.test b/test/COFF/invalid-obj.test
new file mode 100644
index 000000000000..fd63f7874cc1
--- /dev/null
+++ b/test/COFF/invalid-obj.test
@@ -0,0 +1,14 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: not lld-link %t.obj 2>&1 | FileCheck %s
+
+# CHECK: getSectionName failed: #1:
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '/1'
+ Characteristics: []
+ SectionData: 00
+symbols:
diff --git a/test/COFF/largeaddressaware.test b/test/COFF/largeaddressaware.test
new file mode 100644
index 000000000000..d035e7ce9993
--- /dev/null
+++ b/test/COFF/largeaddressaware.test
@@ -0,0 +1,21 @@
+# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
+# RUN: lld-link %t.obj %p/Inputs/std32.lib /subsystem:console \
+# RUN: /entry:main@0 /out:%t.exe /largeaddressaware
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
+
+HEADER: Format: COFF-i386
+HEADER-NEXT: Arch: i386
+HEADER-NEXT: AddressSize: 32bit
+HEADER-NEXT: ImageFileHeader {
+HEADER-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C)
+HEADER-NEXT: SectionCount: 4
+HEADER-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0)
+HEADER-NEXT: PointerToSymbolTable: 0x0
+HEADER-NEXT: SymbolCount: 0
+HEADER-NEXT: OptionalHeaderSize: 224
+HEADER-NEXT: Characteristics [ (0x122)
+HEADER-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100)
+HEADER-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
+HEADER-NEXT: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20)
+HEADER-NEXT: ]
+HEADER-NEXT: }
diff --git a/test/COFF/libpath.test b/test/COFF/libpath.test
new file mode 100644
index 000000000000..da465bc556bc
--- /dev/null
+++ b/test/COFF/libpath.test
@@ -0,0 +1,18 @@
+# RUN: mkdir -p %t/a %t/b %t/c
+# RUN: cp %p/Inputs/std64.lib %t/a/
+# RUN: cp %p/Inputs/std64.lib %t/b/
+# RUN: cp %p/Inputs/std64.lib %t/c/
+
+# RUN: env LIB=%t/a lld-link /out:%t.exe /entry:main /verbose \
+# RUN: std64.lib /subsystem:console %p/Inputs/hello64.obj \
+# RUN: /libpath:%t/b /libpath:%t/c > %t.log
+# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
+
+CHECK1: b{{[/\\]}}std64.lib
+
+# RUN: lld-link /out:%t.exe /entry:main /verbose \
+# RUN: std64.lib /subsystem:console %p/Inputs/hello64.obj \
+# RUN: /libpath:%t/a /libpath:%t/b /libpath:%t/c > %t.log
+# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
+
+CHECK2: a{{[/\\]}}std64.lib
diff --git a/test/COFF/linkenv.test b/test/COFF/linkenv.test
new file mode 100644
index 000000000000..5dfb875a7daf
--- /dev/null
+++ b/test/COFF/linkenv.test
@@ -0,0 +1,4 @@
+# RUN: env LINK=-help lld-link > %t.log
+# RUN: FileCheck %s < %t.log
+
+CHECK: OVERVIEW: LLVM Linker
diff --git a/test/COFF/lldmap.test b/test/COFF/lldmap.test
new file mode 100644
index 000000000000..a4c2da09ca33
--- /dev/null
+++ b/test/COFF/lldmap.test
@@ -0,0 +1,8 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main /lldmap:%t.map %t.obj
+# RUN: FileCheck %s < %t.map
+
+# CHECK: .obj:
+# CHECK-NEXT: 140001000 .text$mn
+# CHECK-NEXT: 140001000 .data
+# CHECK-NEXT: 140001000 main
diff --git a/test/COFF/loadcfg.ll b/test/COFF/loadcfg.ll
new file mode 100644
index 000000000000..3166881032b4
--- /dev/null
+++ b/test/COFF/loadcfg.ll
@@ -0,0 +1,15 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld-link /out:%t.exe %t.obj /entry:main /subsystem:console
+; RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+; CHECK: LoadConfigTableRVA: 0x1000
+; CHECK: LoadConfigTableSize: 0x70
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+@_load_config_used = constant i32 1
+
+define void @main() {
+ ret void
+}
diff --git a/test/COFF/loadcfg.test b/test/COFF/loadcfg.test
new file mode 100644
index 000000000000..a84f864b4b53
--- /dev/null
+++ b/test/COFF/loadcfg.test
@@ -0,0 +1,59 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj /entry:main /subsystem:console
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: LoadConfigTableRVA: 0x1008
+# CHECK: LoadConfigTableSize: 0x70
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .text
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _load_config_used
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/loadcfg32.test b/test/COFF/loadcfg32.test
new file mode 100644
index 000000000000..f7780e1d0373
--- /dev/null
+++ b/test/COFF/loadcfg32.test
@@ -0,0 +1,42 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj /entry:main /subsystem:console
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: LoadConfigTableRVA: 0x1000
+# CHECK: LoadConfigTableSize: 0x40
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __load_config_used
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/locally-imported.test b/test/COFF/locally-imported.test
new file mode 100644
index 000000000000..7c43666c8c1e
--- /dev/null
+++ b/test/COFF/locally-imported.test
@@ -0,0 +1,61 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck -check-prefix=BASEREL %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 1000 00200000
+# CHECK: Contents of section .rdata:
+# CHECK-NEXT: 2000 04100040 01000000
+
+# BASEREL: BaseReloc [
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: DIR64
+# BASEREL-NEXT: Address: 0x2000
+# BASEREL-NEXT: }
+# BASEREL-NEXT: Entry {
+# BASEREL-NEXT: Type: ABSOLUTE
+# BASEREL-NEXT: Address: 0x2000
+# BASEREL-NEXT: }
+# BASEREL-NEXT: ]
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 00000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: __imp_main
+ Type: IMAGE_REL_AMD64_ADDR32NB
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 4
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __imp_main
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/locally-imported32.test b/test/COFF/locally-imported32.test
new file mode 100644
index 000000000000..7f604d2a0495
--- /dev/null
+++ b/test/COFF/locally-imported32.test
@@ -0,0 +1,50 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 1000 00200000
+
+# CHECK: Contents of section .rdata:
+# CHECK-NEXT: 2000 04104000
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 00000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: __imp__main
+ Type: IMAGE_REL_I386_DIR32NB
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: _main
+ Value: 4
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __imp__main
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/long-section-name.test b/test/COFF/long-section-name.test
new file mode 100644
index 000000000000..a3dad33ec2cf
--- /dev/null
+++ b/test/COFF/long-section-name.test
@@ -0,0 +1,58 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /debug /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -sections %t.exe | FileCheck %s
+
+# CHECK: Name: .data_long_section_name
+# CHECK: Name: .text_long_section_name
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: .text_long_section_name
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: .data_long_section_name
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: "00"
+symbols:
+ - Name: "@comp.id"
+ Value: 10394907
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text_long_section_name
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data_long_section_name
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/lto-chkstk.ll b/test/COFF/lto-chkstk.ll
new file mode 100644
index 000000000000..43b0bff164e3
--- /dev/null
+++ b/test/COFF/lto-chkstk.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/lto-chkstk-foo.obj %S/Inputs/lto-chkstk-foo.s
+; RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %T/lto-chkstk-chkstk.obj %S/Inputs/lto-chkstk-chkstk.s
+; RUN: llvm-ar cru %t.lib %T/lto-chkstk-chkstk.obj
+; RUN: lld-link /out:%t.exe /entry:main /subsystem:console %t.obj %T/lto-chkstk-foo.obj %t.lib
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @main() {
+entry:
+ %array4096 = alloca [4096 x i8]
+ call void @foo([4096 x i8]* %array4096)
+ ret void
+}
+
+declare void @foo([4096 x i8]*)
diff --git a/test/COFF/lto-comdat.ll b/test/COFF/lto-comdat.ll
new file mode 100644
index 000000000000..aaa7a16c4afb
--- /dev/null
+++ b/test/COFF/lto-comdat.ll
@@ -0,0 +1,131 @@
+; RUN: llvm-as -o %T/comdat-main.lto.obj %s
+; RUN: llvm-as -o %T/comdat1.lto.obj %S/Inputs/lto-comdat1.ll
+; RUN: llvm-as -o %T/comdat2.lto.obj %S/Inputs/lto-comdat2.ll
+; RUN: rm -f %T/comdat.lto.lib
+; RUN: llvm-ar cru %T/comdat.lto.lib %T/comdat1.lto.obj %T/comdat2.lto.obj
+
+; RUN: llc -filetype=obj -o %T/comdat-main.obj %s
+; RUN: llc -filetype=obj -o %T/comdat1.obj %S/Inputs/lto-comdat1.ll
+; RUN: llc -filetype=obj -o %T/comdat2.obj %S/Inputs/lto-comdat2.ll
+; RUN: rm -f %T/comdat.lib
+; RUN: llvm-ar cru %T/comdat.lib %T/comdat1.obj %T/comdat2.obj
+
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-11 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-11 %s
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lto.lib
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-11 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-11 %s
+
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat1.lto.obj %T/comdat2.lto.obj
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-01 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-01 %s
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.obj %T/comdat.lto.lib
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-01 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-01 %s
+
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat1.obj %T/comdat2.obj
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-10 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-10 %s
+; RUN: lld-link /out:%T/comdat-main.exe /entry:main /subsystem:console %T/comdat-main.lto.obj %T/comdat.lib
+; RUN: llvm-readobj -file-headers %T/comdat-main.exe | FileCheck -check-prefix=HEADERS-10 %s
+; RUN: llvm-objdump -d %T/comdat-main.exe | FileCheck -check-prefix=TEXT-10 %s
+
+; HEADERS-11: AddressOfEntryPoint: 0x1000
+; TEXT-11: Disassembly of section .text:
+; TEXT-11-NEXT: .text:
+; TEXT-11-NEXT: xorl %eax, %eax
+; TEXT-11-NEXT: retq
+
+; HEADERS-01: AddressOfEntryPoint: 0x2000
+; TEXT-01: Disassembly of section .text:
+; TEXT-01-NEXT: .text:
+; TEXT-01-NEXT: subq $40, %rsp
+; TEXT-01-NEXT: callq 39
+; TEXT-01-NEXT: callq 50
+; TEXT-01-NEXT: callq 13
+; TEXT-01-NEXT: xorl %eax, %eax
+; TEXT-01-NEXT: addq $40, %rsp
+; TEXT-01-NEXT: retq
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: retq
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: retq
+; TEXT-01-NEXT: nopw %cs:(%rax,%rax)
+; TEXT-01-NEXT: retq
+
+; HEADERS-10: AddressOfEntryPoint: 0x2030
+; TEXT-10: Disassembly of section .text:
+; TEXT-10-NEXT: .text:
+; TEXT-10-NEXT: subq $40, %rsp
+; TEXT-10-NEXT: callq 7
+; TEXT-10-NEXT: nop
+; TEXT-10-NEXT: addq $40, %rsp
+; TEXT-10-NEXT: retq
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: retq
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: subq $40, %rsp
+; TEXT-10-NEXT: callq -25
+; TEXT-10-NEXT: nop
+; TEXT-10-NEXT: addq $40, %rsp
+; TEXT-10-NEXT: retq
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: subq $40, %rsp
+; TEXT-10-NEXT: callq -57
+; TEXT-10-NEXT: callq -30
+; TEXT-10-NEXT: xorl %eax, %eax
+; TEXT-10-NEXT: addq $40, %rsp
+; TEXT-10-NEXT: retq
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+$comdat = comdat any
+
+define i32 @main() {
+ call void @f1()
+ call void @f2()
+ call void @comdat()
+ ret i32 0
+}
+
+define linkonce_odr void @comdat() comdat {
+ ret void
+}
+
+declare void @f1()
+declare void @f2()
diff --git a/test/COFF/lto-linker-opts.ll b/test/COFF/lto-linker-opts.ll
new file mode 100644
index 000000000000..0c183701b686
--- /dev/null
+++ b/test/COFF/lto-linker-opts.ll
@@ -0,0 +1,11 @@
+; RUN: llvm-as -o %T/lto-linker-opts.obj %s
+; RUN: env LIB=%S/Inputs lld-link /out:%T/lto-linker-opts.exe /entry:main /subsystem:console %T/lto-linker-opts.obj
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+!llvm.module.flags = !{!0}
+
+!0 = !{i32 6, !"Linker Options", !1}
+!1 = !{!2}
+!2 = !{!"/DEFAULTLIB:ret42.lib"}
diff --git a/test/COFF/lto-new-symbol.ll b/test/COFF/lto-new-symbol.ll
new file mode 100644
index 000000000000..d9e14eb93264
--- /dev/null
+++ b/test/COFF/lto-new-symbol.ll
@@ -0,0 +1,16 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld-link /out:%t.exe /entry:foo /subsystem:console %t.obj
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define void @foo(<4 x i32>* %p, <4 x float>* %q, i1 %t) nounwind {
+entry:
+ br label %loop
+loop:
+ store <4 x i32><i32 1073741824, i32 1073741824, i32 1073741824, i32 1073741824>, <4 x i32>* %p
+ store <4 x float><float 2.0, float 2.0, float 2.0, float 2.0>, <4 x float>* %q
+ br i1 %t, label %loop, label %ret
+ret:
+ ret void
+}
diff --git a/test/COFF/lto-opt-level.ll b/test/COFF/lto-opt-level.ll
new file mode 100644
index 000000000000..674b6cc0f934
--- /dev/null
+++ b/test/COFF/lto-opt-level.ll
@@ -0,0 +1,21 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld-link /out:%t0.exe /entry:main /subsystem:console /opt:lldlto=0 /debug %t.obj
+; RUN: llvm-nm %t0.exe | FileCheck --check-prefix=CHECK-O0 %s
+; RUN: lld-link /out:%t2.exe /entry:main /subsystem:console /opt:lldlto=2 /debug %t.obj
+; RUN: llvm-nm %t2.exe | FileCheck --check-prefix=CHECK-O2 %s
+; RUN: lld-link /out:%t2a.exe /entry:main /subsystem:console /debug %t.obj
+; RUN: llvm-nm %t2a.exe | FileCheck --check-prefix=CHECK-O2 %s
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+; CHECK-O0: foo
+; CHECK-O2-NOT: foo
+define internal void @foo() {
+ ret void
+}
+
+define void @main() {
+ call void @foo()
+ ret void
+}
diff --git a/test/COFF/lto-parallel.ll b/test/COFF/lto-parallel.ll
new file mode 100644
index 000000000000..2303797019a5
--- /dev/null
+++ b/test/COFF/lto-parallel.ll
@@ -0,0 +1,20 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld-link /out:%t.exe /entry:foo /include:bar /opt:lldltojobs=2 /subsystem:console /lldmap:%t.map %t.obj
+; RUN: FileCheck %s < %t.map
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+; CHECK: <lto object>:
+; CHECK: foo
+define void @foo() {
+ call void @bar()
+ ret void
+}
+
+; CHECK: <lto object>:
+; CHECK: bar
+define void @bar() {
+ call void @foo()
+ ret void
+}
diff --git a/test/COFF/lto.ll b/test/COFF/lto.ll
new file mode 100644
index 000000000000..b8f8d7063343
--- /dev/null
+++ b/test/COFF/lto.ll
@@ -0,0 +1,130 @@
+; RUN: llvm-as -o %T/main.lto.obj %s
+; RUN: llvm-as -o %T/foo.lto.obj %S/Inputs/lto-dep.ll
+; RUN: rm -f %T/foo.lto.lib
+; RUN: llvm-ar cru %T/foo.lto.lib %T/foo.lto.obj
+
+; RUN: llc -filetype=obj -o %T/main.obj %s
+; RUN: llc -filetype=obj -o %T/foo.obj %S/Inputs/lto-dep.ll
+; RUN: rm -f %T/foo.lib
+; RUN: llvm-ar cru %T/foo.lib %T/foo.obj
+
+; RUN: lld-link /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.obj
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-11 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-11 %s
+; RUN: lld-link /out:%T/main.exe /entry:main /include:f2 /subsystem:console %T/main.lto.obj %T/foo.lto.lib /verbose 2>&1 | FileCheck -check-prefix=VERBOSE %s
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-11 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-11 %s
+
+; RUN: lld-link /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.obj
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-01 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-01 %s
+; RUN: lld-link /out:%T/main.exe /entry:main /subsystem:console %T/main.obj %T/foo.lto.lib
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-01 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-01 %s
+
+; RUN: lld-link /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.obj
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-10 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-10 %s
+; RUN: lld-link /out:%T/main.exe /entry:main /subsystem:console %T/main.lto.obj %T/foo.lib
+; RUN: llvm-readobj -file-headers %T/main.exe | FileCheck -check-prefix=HEADERS-10 %s
+; RUN: llvm-objdump -d %T/main.exe | FileCheck -check-prefix=TEXT-10 %s
+
+; VERBOSE: foo.lto.lib({{.*}}foo.lto.obj)
+
+; HEADERS-11: AddressOfEntryPoint: 0x1000
+; TEXT-11: Disassembly of section .text:
+; TEXT-11-NEXT: .text:
+; TEXT-11-NEXT: xorl %eax, %eax
+; TEXT-11-NEXT: retq
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: int3
+; TEXT-11-NEXT: movl $2, %eax
+; TEXT-11-NEXT: retq
+
+; HEADERS-01: AddressOfEntryPoint: 0x2000
+; TEXT-01: Disassembly of section .text:
+; TEXT-01-NEXT: .text:
+; TEXT-01-NEXT: subq $40, %rsp
+; TEXT-01-NEXT: callq 23
+; TEXT-01-NEXT: xorl %eax, %eax
+; TEXT-01-NEXT: addq $40, %rsp
+; TEXT-01-NEXT: retq
+; TEXT-01-NEXT: retq
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: int3
+; TEXT-01-NEXT: retq
+
+; HEADERS-10: AddressOfEntryPoint: 0x2020
+; TEXT-10: Disassembly of section .text:
+; TEXT-10-NEXT: .text:
+; TEXT-10-NEXT: retq
+; TEXT-10-NEXT: nopw %cs:(%rax,%rax)
+; TEXT-10-NEXT: retq
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: int3
+; TEXT-10-NEXT: subq $40, %rsp
+; TEXT-10-NEXT: callq -41
+; TEXT-10-NEXT: xorl %eax, %eax
+; TEXT-10-NEXT: addq $40, %rsp
+; TEXT-10-NEXT: retq
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+define i32 @main() {
+ call void @foo()
+ ret i32 0
+}
+
+declare void @foo()
+
+$f1 = comdat any
+define i32 @f1() comdat($f1) {
+ ret i32 1
+}
+
+$f2 = comdat any
+define i32 @f2() comdat($f2) {
+ ret i32 2
+}
+
+define internal void @internal() {
+ ret void
+}
diff --git a/test/COFF/machine.test b/test/COFF/machine.test
new file mode 100644
index 000000000000..847018f20fbd
--- /dev/null
+++ b/test/COFF/machine.test
@@ -0,0 +1,30 @@
+# RUN: yaml2obj %p/Inputs/machine-x64.yaml > %t.obj
+# RUN: lld-link /entry:main /subsystem:console /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=AMD64 %s
+# RUN: lld-link /entry:main /subsystem:console /machine:x64 \
+# RUN: /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=AMD64 %s
+
+AMD64: Machine: IMAGE_FILE_MACHINE_AMD64
+
+# RUN: yaml2obj %p/Inputs/machine-x86.yaml > %t.obj
+# RUN: lld-link /entry:main /subsystem:console /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=I386 %s
+# RUN: lld-link /entry:main /subsystem:console /machine:x86 \
+# RUN: /out:%t.exe %t.obj /fixed
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=I386 %s
+
+I386: Machine: IMAGE_FILE_MACHINE_I386
+
+# RUN: yaml2obj %p/Inputs/machine-x64.yaml > %t.obj
+# RUN: not lld-link /entry:main /subsystem:console /machine:x86 \
+# RUN: /out:%t.exe %t.obj /fixed >& %t.log
+# RUN: FileCheck -check-prefix=INCOMPAT %s < %t.log
+
+# RUN: yaml2obj %p/Inputs/machine-x86.yaml > %t1.obj
+# RUN: sed -e s/main/foo/ %p/Inputs/machine-x64.yaml | yaml2obj > %t2.obj
+# RUN: not lld-link /entry:main /subsystem:console /out:%t.exe \
+# RUN: %t1.obj %t2.obj >& %t.log
+# RUN: FileCheck -check-prefix=INCOMPAT %s < %t.log
+
+INCOMPAT: .obj: machine type x64 conflicts with x86
diff --git a/test/COFF/manifest.test b/test/COFF/manifest.test
new file mode 100644
index 000000000000..33e80e75a4d5
--- /dev/null
+++ b/test/COFF/manifest.test
@@ -0,0 +1,61 @@
+# RUN: yaml2obj %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: FileCheck -check-prefix=MANIFEST %s < %t.exe.manifest
+
+MANIFEST: <?xml version="1.0" standalone="yes"?>
+MANIFEST: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
+MANIFEST: manifestVersion="1.0">
+MANIFEST: <trustInfo>
+MANIFEST: <security>
+MANIFEST: <requestedPrivileges>
+MANIFEST: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
+MANIFEST: </requestedPrivileges>
+MANIFEST: </security>
+MANIFEST: </trustInfo>
+MANIFEST: </assembly>
+
+# RUN: lld-link /out:%t.exe /entry:main \
+# RUN: /manifestuac:"level='requireAdministrator' uiAccess='true'" %t.obj
+# RUN: FileCheck -check-prefix=UAC %s < %t.exe.manifest
+
+UAC: <?xml version="1.0" standalone="yes"?>
+UAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
+UAC: manifestVersion="1.0">
+UAC: <trustInfo>
+UAC: <security>
+UAC: <requestedPrivileges>
+UAC: <requestedExecutionLevel level='requireAdministrator' uiAccess='true'/>
+UAC: </requestedPrivileges>
+UAC: </security>
+UAC: </trustInfo>
+UAC: </assembly>
+
+# RUN: lld-link /out:%t.exe /entry:main \
+# RUN: /manifestdependency:"foo='bar'" %t.obj
+# RUN: FileCheck -check-prefix=DEPENDENCY %s < %t.exe.manifest
+
+DEPENDENCY: <?xml version="1.0" standalone="yes"?>
+DEPENDENCY: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
+DEPENDENCY: manifestVersion="1.0">
+DEPENDENCY: <trustInfo>
+DEPENDENCY: <security>
+DEPENDENCY: <requestedPrivileges>
+DEPENDENCY: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
+DEPENDENCY: </requestedPrivileges>
+DEPENDENCY: </security>
+DEPENDENCY: </trustInfo>
+DEPENDENCY: <dependency>
+DEPENDENCY: <dependentAssembly>
+DEPENDENCY: <assemblyIdentity foo='bar' />
+DEPENDENCY: </dependentAssembly>
+DEPENDENCY: </dependency>
+DEPENDENCY: </assembly>
+
+# RUN: lld-link /out:%t.exe /entry:main /manifestuac:no %t.obj
+# RUN: FileCheck -check-prefix=NOUAC %s < %t.exe.manifest
+
+NOUAC: <?xml version="1.0" standalone="yes"?>
+NOUAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
+NOUAC: manifestVersion="1.0">
+NOUAC: </assembly>
diff --git a/test/COFF/merge.test b/test/COFF/merge.test
new file mode 100644
index 000000000000..45ab4efe37a8
--- /dev/null
+++ b/test/COFF/merge.test
@@ -0,0 +1,53 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main /subsystem:console /force \
+# RUN: /merge:.foo=.abc /merge:.bar=.def %t.obj /debug
+# RUN: llvm-readobj -sections %t.exe | FileCheck %s
+
+# CHECK: Name: .def
+# CHECK: Name: .abc
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .foo
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: 000000000000
+ - Name: .bar
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: 000000000000
+symbols:
+ - Name: .foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .bar
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/nodefaultlib.test b/test/COFF/nodefaultlib.test
new file mode 100644
index 000000000000..867dc8f18e78
--- /dev/null
+++ b/test/COFF/nodefaultlib.test
@@ -0,0 +1,30 @@
+# RUN: cp %p/Inputs/hello64.obj %T
+# RUN: cp %p/Inputs/std64.lib %T
+
+# RUN: not lld-link /out:%t.exe /entry:main /subsystem:console \
+# RUN: hello64.obj /defaultlib:std64.lib >& %t.log
+# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
+
+# RUN: not lld-link /out:%t.exe /entry:main /subsystem:console \
+# RUN: hello64 /defaultlib:std64.lib >& %t.log
+# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
+
+# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \
+# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib \
+# RUN: /nodefaultlib:std64.lib >& %t.log || true
+# RUN: FileCheck -check-prefix=CHECK3 %s < %t.log
+
+# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \
+# RUN: /subsystem:console hello64.obj /defaultlib:std64 \
+# RUN: /nodefaultlib:std64.lib >& %t.log || true
+# RUN: FileCheck -check-prefix=CHECK3 %s < %t.log
+
+CHECK1: hello64.obj: {{[Nn]}}o such file or directory
+CHECK2: hello64: {{[Nn]}}o such file or directory
+CHECK3: hello64.obj: undefined symbol: MessageBoxA
+
+# RUN: lld-link /libpath:%T /out:%t.exe /entry:main \
+# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib
+
+# RUN: env LIB=%T lld-link /out:%t.exe /entry:main \
+# RUN: /subsystem:console hello64.obj /defaultlib:std64.lib
diff --git a/test/COFF/noentry.test b/test/COFF/noentry.test
new file mode 100644
index 000000000000..80f387fe03c8
--- /dev/null
+++ b/test/COFF/noentry.test
@@ -0,0 +1,11 @@
+# REQUIRES: winres
+# REQUIRES: winlib
+
+# RUN: yaml2obj < %p/Inputs/export.yaml > %t.obj
+# RUN: lld-link /out:%t.dll /dll %t.obj
+# RUN: llvm-readobj -file-headers %t.dll | FileCheck -check-prefix=ENTRY %s
+# RUN: lld-link /out:%t.dll /dll /noentry %t.obj
+# RUN: llvm-readobj -file-headers %t.dll | FileCheck -check-prefix=NOENTRY %s
+
+ENTRY: AddressOfEntryPoint: 0x1000
+NOENTRY: AddressOfEntryPoint: 0x0
diff --git a/test/COFF/opt.test b/test/COFF/opt.test
new file mode 100644
index 000000000000..652734b2f68a
--- /dev/null
+++ b/test/COFF/opt.test
@@ -0,0 +1,69 @@
+# RUN: yaml2obj < %s > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj \
+# RUN: /verbose >& %t.log
+### FileCheck doesn't like empty input, so write something.
+# RUN: echo dummy >> %t.log
+# RUN: FileCheck -check-prefix=CHECK1 %s < %t.log
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj \
+# RUN: /verbose /opt:noref >& %t.log
+# RUN: echo dummy >> %t.log
+# RUN: FileCheck -check-prefix=CHECK2 %s < %t.log
+
+# CHECK1: Discarded unused
+# CHECK2-NOT: Discarded unused
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+ - Name: '.text$mn'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: '.text$mn'
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: unused
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/options.test b/test/COFF/options.test
new file mode 100644
index 000000000000..39f944beddbc
--- /dev/null
+++ b/test/COFF/options.test
@@ -0,0 +1,51 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s
+# RUN: lld-link /allowbind /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=BIND %s
+BIND-NOT: IMAGE_DLL_CHARACTERISTICS_NO_BIND
+
+# RUN: lld-link /allowbind:no /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOBIND %s
+NOBIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s
+# RUN: lld-link /allowisolation /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ISO %s
+ISO-NOT: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
+
+# RUN: lld-link /allowisolation:no /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOISO %s
+NOISO: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
+# RUN: lld-link /out:%t.exe /entry:main /highentropyva %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
+ENT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
+
+# RUN: lld-link /out:%t.exe /highentropyva:no /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOENT %s
+NOENT-NOT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NXCOMPAT %s
+# RUN: lld-link /out:%t.exe /entry:main /nxcompat %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NXCOMPAT %s
+NXCOMPAT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
+
+# RUN: lld-link /out:%t.exe /nxcompat:no /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NONXCOMPAT %s
+NONXCOMPAT-NOT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=TSAWARE %s
+# RUN: lld-link /out:%t.exe /entry:main /tsaware %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=TSAWARE %s
+TSAWARE: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE
+
+# RUN: lld-link /tsaware:no /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOTSAWARE %s
+NOTSAWARE-NOT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE
diff --git a/test/COFF/order.test b/test/COFF/order.test
new file mode 100644
index 000000000000..6a0cee8a32ea
--- /dev/null
+++ b/test/COFF/order.test
@@ -0,0 +1,15 @@
+# RUN: yaml2obj < %p/Inputs/include1a.yaml > %t1.obj
+# RUN: yaml2obj < %p/Inputs/include1b.yaml > %t2.obj
+# RUN: yaml2obj < %p/Inputs/include1c.yaml > %t3.obj
+# RUN: rm -f %t2.lib %t3.lib
+# RUN: llvm-ar cru %t2.lib %t2.obj
+# RUN: llvm-ar cru %t3.lib %t3.obj
+# RUN: lld-link /out:%t.exe /entry:main \
+# RUN: %t1.obj %t2.lib %t3.obj %t3.lib /verbose >& %t.log
+# RUN: FileCheck %s < %t.log
+
+CHECK: order.test.tmp1.obj
+CHECK: order.test.tmp3.obj
+CHECK: order.test.tmp2.lib
+CHECK: order.test.tmp3.lib
+CHECK: order.test.tmp2.lib(order.test.tmp2.obj) for foo
diff --git a/test/COFF/out.test b/test/COFF/out.test
new file mode 100644
index 000000000000..a216fc9add8f
--- /dev/null
+++ b/test/COFF/out.test
@@ -0,0 +1,16 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: mkdir -p %T/out/tmp
+# RUN: cp %t.obj %T/out/out1.obj
+# RUN: cp %t.obj %T/out/tmp/out2
+# RUN: cp %t.obj %T/out/tmp/out3.xyz
+
+# RUN: lld-link /entry:main %T/out/out1.obj
+# RUN: lld-link /entry:main %T/out/tmp/out2
+# RUN: lld-link /entry:main %T/out/tmp/out3.xyz
+
+# RUN: llvm-readobj out1.exe | FileCheck %s
+# RUN: llvm-readobj out2.exe | FileCheck %s
+# RUN: llvm-readobj out3.exe | FileCheck %s
+
+CHECK: File:
diff --git a/test/COFF/reloc-arm.test b/test/COFF/reloc-arm.test
new file mode 100644
index 000000000000..b44c0822bb7f
--- /dev/null
+++ b/test/COFF/reloc-arm.test
@@ -0,0 +1,71 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: .text:
+# CHECK: 402000 01104000 00000000 00000000 00000000
+# CHECK: 402010 01100000 00000000 00000000 00000000
+# CHECK: 402020 01000100 00004000 00000000 00000000
+# CHECK: 402030 fe07e62f 00000000 00000000 00000000
+# CHECK: 402040 3e04de2f 00000000 00000000 00000000
+# CHECK: 402050 fe07d62f 00000000 00000000 00000000
+# CHECK: 402060 00000000 00000000 00000000 00000000
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_ARMNT
+ Characteristics: []
+sections:
+ - Name: .aaa
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: 0000000000000000
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: foo
+ Type: 1 # IMAGE_REL_ARM_ADDR32
+ - VirtualAddress: 16
+ SymbolName: foo
+ Type: 2 # IMAGE_REL_ARM_ADDR32NB
+ - VirtualAddress: 32
+ SymbolName: foo
+ Type: 17 # IMAGE_REL_AMD64_MOV32T
+ - VirtualAddress: 48
+ SymbolName: foo
+ Type: 20 # IMAGE_REL_AMD64_BRANCH24T
+ - VirtualAddress: 64
+ SymbolName: foo
+ Type: 18 # IMAGE_REL_ARM_BRANCH20T
+ - VirtualAddress: 80
+ SymbolName: foo
+ Type: 21 # IMAGE_REL_AMD64_BLX23T
+symbols:
+ - Name: .aaa
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: foo
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/reloc-x64.test b/test/COFF/reloc-x64.test
new file mode 100644
index 000000000000..5513f2eaa647
--- /dev/null
+++ b/test/COFF/reloc-x64.test
@@ -0,0 +1,102 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: .text:
+# CHECK: 1000: a1 03 20 00 40 00 00 00 00
+# CHECK: 1009: a1 03 20 00 40 01 00 00 00
+# CHECK: 1012: a1 03 20 00 00 00 00 00 00
+# CHECK: 101b: a1 e3 0f 00 00 00 00 00 00
+# CHECK: 1024: a1 d9 0f 00 00 00 00 00 00
+# CHECK: 102d: a1 cf 0f 00 00 00 00 00 00
+# CHECK: 1036: a1 c5 0f 00 00 00 00 00 00
+# CHECK: 103f: a1 bb 0f 00 00 00 00 00 00
+# CHECK: 1048: a1 b1 0f 00 00 00 00 00 00
+# CHECK: 1051: a1 02 00 00 00 00 00 00 00
+# CHECK: 105a: a1 03 00 00 00 00 00 00 00
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000A10000000000000000
+ Relocations:
+ - VirtualAddress: 1
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_ADDR32
+ - VirtualAddress: 10
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 19
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 28
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 37
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32_1
+ - VirtualAddress: 46
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32_2
+ - VirtualAddress: 55
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32_3
+ - VirtualAddress: 64
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32_4
+ - VirtualAddress: 73
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_REL32_5
+ - VirtualAddress: 82
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_SECTION
+ - VirtualAddress: 91
+ SymbolName: foo
+ Type: IMAGE_REL_AMD64_SECREL
+ - Name: .zzz
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4096
+ SectionData: 0000000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .zzz
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: foo
+ Value: 3
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/reloc-x86.test b/test/COFF/reloc-x86.test
new file mode 100644
index 000000000000..d189ca02f015
--- /dev/null
+++ b/test/COFF/reloc-x86.test
@@ -0,0 +1,82 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main /base:0x400000 %t.obj
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: .text:
+# CHECK: 1000: a1 00 00 00 00
+# CHECK: 1005: a1 03 20 40 00
+# CHECK: 100a: a1 03 20 00 00
+# CHECK: 100f: a1 ef 0f 00 00
+# CHECK: 1014: a1 00 00 02 00
+# CHECK: 1019: a1 03 00 00 00
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: A100000000A100000000A100000000A100000000A100000000A100000000
+ Relocations:
+ - VirtualAddress: 1
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_ABSOLUTE
+ - VirtualAddress: 6
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 11
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_DIR32NB
+ - VirtualAddress: 16
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_REL32
+ - VirtualAddress: 23
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_SECTION
+ - VirtualAddress: 26
+ SymbolName: _foo
+ Type: IMAGE_REL_I386_SECREL
+ - Name: .zzz
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4096
+ SectionData: 0000000000000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .zzz
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _foo
+ Value: 3
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/resource.test b/test/COFF/resource.test
new file mode 100644
index 000000000000..7b6090d89f65
--- /dev/null
+++ b/test/COFF/resource.test
@@ -0,0 +1,14 @@
+# REQUIRES: winres
+
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj %p/Inputs/resource.res
+
+# Check if the binary contains UTF-16LE string "Hello" copied from resource.res.
+# RUN: FileCheck --check-prefix=EXE %s < %t.exe
+
+EXE: {{H.e.l.l.o}}
+
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck --check-prefix=HEADER %s
+
+HEADER: ResourceTableRVA: 0x1000
+HEADER: ResourceTableSize: 0x88
diff --git a/test/COFF/responsefile.test b/test/COFF/responsefile.test
new file mode 100644
index 000000000000..fd4d221c20dc
--- /dev/null
+++ b/test/COFF/responsefile.test
@@ -0,0 +1,7 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: echo /out:%t.exe /entry:main %t.obj > %t.rsp
+# RUN: lld-link @%t.rsp /heap:0x3000
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+CHECK: SizeOfHeapReserve: 12288
diff --git a/test/COFF/safeseh.test b/test/COFF/safeseh.test
new file mode 100644
index 000000000000..f8308a6131b6
--- /dev/null
+++ b/test/COFF/safeseh.test
@@ -0,0 +1,51 @@
+# RUN: sed s/FEAT_VALUE/1/ %s | yaml2obj > %t.obj
+# RUN: lld-link /out:%t.exe /subsystem:console /entry:main /safeseh %t.obj
+
+# RUN: sed s/FEAT_VALUE/0/ %s | yaml2obj > %t.obj
+# RUN: not lld-link /out:%t.exe /subsystem:console /entry:main \
+# RUN: /safeseh %t.obj >& %t.log
+# RUN: FileCheck %s < %t.log
+
+# CHECK: /safeseh: {{.*}} is not compatible with SEH
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 0000000000000000
+symbols:
+ - Name: '@comp.id'
+ Value: 14766605
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: '@feat.00'
+ Value: FEAT_VALUE
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/seh.test b/test/COFF/seh.test
new file mode 100644
index 000000000000..b3ff66cf09b8
--- /dev/null
+++ b/test/COFF/seh.test
@@ -0,0 +1,70 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /subsystem:console /entry:main %t.obj
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .rdata:
+# CHECK: 1000 00200000 02200000
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 0000000000000000
+ - Name: .sxdata
+ Characteristics: [ IMAGE_SCN_LNK_INFO ]
+ Alignment: 4
+ SectionData: 0600000007000000
+symbols:
+ - Name: '@comp.id'
+ Value: 14766605
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: '@feat.00'
+ Value: 2147484049
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .sxdata
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 8
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _foo
+ Value: 2
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/sort-debug.test b/test/COFF/sort-debug.test
new file mode 100644
index 000000000000..c099f2dc19b1
--- /dev/null
+++ b/test/COFF/sort-debug.test
@@ -0,0 +1,296 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /debug /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -sections %t.exe | FileCheck %s
+
+# CHECK: Name: .text
+# CHECK: Name: .debug_abbrev
+# CHECK: Name: .debug_info
+# CHECK: Name: .debug_line
+# CHECK: Name: .debug_pubnames
+# CHECK: Name: .debug_pubtypes
+# CHECK: Name: .reloc
+
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 508D0500000000C70424000000005AC3
+ Relocations:
+ - VirtualAddress: 3
+ SymbolName: '?x@@3HA'
+ Type: IMAGE_REL_I386_DIR32
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: ''
+ - Name: .bss
+ Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: ''
+ - Name: '.debug$S'
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 04000000F1000000300000002A00471100000000000000000000000010000000000000000000000000000000000000000000006D61696E0002004F11F200000024000000000000000000010010000000000000000100000018000000000000000100000000000000F4000000080000000100000000000000F30000003C000000005C7573725C6C6F63616C5C676F6F676C655C686F6D655C6D616A6E656D65725C6C6C766D5C7372635C746F6F6C735C6C6C645C3C737464696E3E00
+ Relocations:
+ - VirtualAddress: 44
+ SymbolName: _main
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 48
+ SymbolName: _main
+ Type: IMAGE_REL_I386_SECTION
+ - VirtualAddress: 68
+ SymbolName: _main
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 72
+ SymbolName: _main
+ Type: IMAGE_REL_I386_SECTION
+ - Name: .debug_str
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: ''
+ - Name: .debug_loc
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: ''
+ - Name: .debug_abbrev
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 011101250E1305030E10171B0E110112060000023400030E49133F193A0B3B0B02186E0E0000032400030E3E0B0B0B0000042E0011011206E77F194018030E3A0B3B0B49133F19000000
+ - Name: .debug_info
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 54000000040000000000040100000000040037000000000000003F000000000000001000000002720000003B0000000101050300000000780000000374000000050404000000001000000001548000000001013B00000000
+ Relocations:
+ - VirtualAddress: 6
+ SymbolName: .debug_abbrev
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 12
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 18
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 22
+ SymbolName: .debug_line
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 26
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 30
+ SymbolName: .text
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 39
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 51
+ SymbolName: '?x@@3HA'
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 55
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 60
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - VirtualAddress: 67
+ SymbolName: .text
+ Type: IMAGE_REL_I386_DIR32
+ - VirtualAddress: 77
+ SymbolName: .debug_str
+ Type: IMAGE_REL_I386_SECREL
+ - Name: .debug_ranges
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: ''
+ - Name: .debug_pubnames
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 1D00000002000000000058000000420000006D61696E0026000000780000000000
+ Relocations:
+ - VirtualAddress: 6
+ SymbolName: .debug_info
+ Type: IMAGE_REL_I386_SECREL
+ - Name: .debug_pubtypes
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 16000000020000000000580000003B000000696E740000000000
+ Relocations:
+ - VirtualAddress: 6
+ SymbolName: .debug_info
+ Type: IMAGE_REL_I386_SECREL
+ - Name: .debug_line
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 3300000002001E0000000101FB0E0D000101010100000001000001003C737464696E3E000000000000050200000000010AD60202000101
+ Relocations:
+ - VirtualAddress: 43
+ SymbolName: .text
+ Type: IMAGE_REL_I386_DIR32
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 16
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: .data
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 2
+ - Name: .bss
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 3
+ - Name: '.debug$S'
+ Value: 0
+ SectionNumber: 4
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 188
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 4
+ - Name: .debug_str
+ Value: 0
+ SectionNumber: 5
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 133
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 5
+ - Name: .debug_loc
+ Value: 0
+ SectionNumber: 6
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 6
+ - Name: .debug_abbrev
+ Value: 0
+ SectionNumber: 7
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 74
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 7
+ - Name: .debug_info
+ Value: 0
+ SectionNumber: 8
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 88
+ NumberOfRelocations: 12
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 8
+ - Name: .debug_ranges
+ Value: 0
+ SectionNumber: 9
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 0
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 9
+ - Name: .debug_pubnames
+ Value: 0
+ SectionNumber: 10
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 33
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 10
+ - Name: .debug_pubtypes
+ Value: 0
+ SectionNumber: 11
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 26
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 11
+ - Name: .debug_line
+ Value: 0
+ SectionNumber: 12
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 55
+ NumberOfRelocations: 1
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 12
+ - Name: '@feat.00'
+ Value: 1
+ SectionNumber: -1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: '?x@@3HA'
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/stack.test b/test/COFF/stack.test
new file mode 100644
index 000000000000..df066b16c20d
--- /dev/null
+++ b/test/COFF/stack.test
@@ -0,0 +1,25 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
+
+DEFAULT: SizeOfStackReserve: 1048576
+DEFAULT: SizeOfStackCommit: 4096
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /stack:0x3000
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+# RUN: echo "STACKSIZE 12288" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+
+CHECK1: SizeOfStackReserve: 12288
+CHECK1: SizeOfStackCommit: 4096
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /stack:0x5000,0x3000
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+# RUN: echo "STACKSIZE 20480,12288" > %t.def
+# RUN: lld-link /out:%t.exe /entry:main /def:%t.def %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+
+CHECK2: SizeOfStackReserve: 20480
+CHECK2: SizeOfStackCommit: 12288
diff --git a/test/COFF/subsystem-inference.test b/test/COFF/subsystem-inference.test
new file mode 100644
index 000000000000..da4f573c2e02
--- /dev/null
+++ b/test/COFF/subsystem-inference.test
@@ -0,0 +1,74 @@
+# RUN: sed -e s/ENTRYNAME/main/ %s | yaml2obj > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAIN %s
+
+# RUN: sed s/ENTRYNAME/wmain/ %s | yaml2obj > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WMAIN %s
+
+# RUN: sed s/ENTRYNAME/WinMain/ %s | yaml2obj > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WINMAIN %s
+
+# RUN: sed s/ENTRYNAME/wWinMain/ %s | yaml2obj > %t.obj
+# RUN: lld-link /out:%t.exe %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=WWINMAIN %s
+
+# MAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
+# WMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
+# WINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
+# WWINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: B82A000000C3
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 6
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: ENTRYNAME
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: mainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: wmainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: WinMainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: wWinMainCRTStartup
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/subsystem.test b/test/COFF/subsystem.test
new file mode 100644
index 000000000000..5e72706dd1cb
--- /dev/null
+++ b/test/COFF/subsystem.test
@@ -0,0 +1,19 @@
+# RUN: lld-link /entry:main /out:%t.exe /subsystem:windows \
+# RUN: %p/Inputs/ret42.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+
+CHECK1: MajorOperatingSystemVersion: 6
+CHECK1: MinorOperatingSystemVersion: 0
+CHECK1: MajorSubsystemVersion: 6
+CHECK1: MinorSubsystemVersion: 0
+CHECK1: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
+
+# RUN: lld-link /entry:main /out:%t.exe /subsystem:windows,8.9 \
+# RUN: %p/Inputs/ret42.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+
+CHECK2: MajorOperatingSystemVersion: 8
+CHECK2: MinorOperatingSystemVersion: 9
+CHECK2: MajorSubsystemVersion: 8
+CHECK2: MinorSubsystemVersion: 9
+CHECK2: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
diff --git a/test/COFF/symtab.test b/test/COFF/symtab.test
new file mode 100644
index 000000000000..14ae9a3e816c
--- /dev/null
+++ b/test/COFF/symtab.test
@@ -0,0 +1,254 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /debug /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -symbols %t.exe | FileCheck %s
+# RUN: lld-link /debug /opt:noref /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -symbols %t.exe | FileCheck %s
+
+# RUN: lld-link /debug /nosymtab /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib
+# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=NO %s
+
+# CHECK: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: .text
+# CHECK-NEXT: Value: 0
+# CHECK-NEXT: Section: .text (2)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: Static (0x3)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: .text2
+# CHECK-NEXT: Value: 0
+# CHECK-NEXT: Section: .text (2)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: Static (0x3)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: .data
+# CHECK-NEXT: Value: 0
+# CHECK-NEXT: Section: .data (1)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: Static (0x3)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: message
+# CHECK-NEXT: Value: 6
+# CHECK-NEXT: Section: .text2 (3)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: Static (0x3)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: main
+# CHECK-NEXT: Value: 0
+# CHECK-NEXT: Section: .text (2)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: caption
+# CHECK-NEXT: Value: 0
+# CHECK-NEXT: Section: .text2 (3)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: Static (0x3)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: abs_symbol
+# CHECK-NEXT: Value: 2662186735
+# CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: __imp_ExitProcess
+# CHECK-NEXT: Value: 64
+# CHECK-NEXT: Section: .idata (4)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: ExitProcess
+# CHECK-NEXT: Value: 64
+# CHECK-NEXT: Section: .text (2)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: __imp_MessageBoxA
+# CHECK-NEXT: Value: 72
+# CHECK-NEXT: Section: .idata (4)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: MessageBoxA
+# CHECK-NEXT: Value: 80
+# CHECK-NEXT: Section: .text (2)
+# CHECK-NEXT: BaseType: Null (0x0)
+# CHECK-NEXT: ComplexType: Null (0x0)
+# CHECK-NEXT: StorageClass: External (0x2)
+# CHECK-NEXT: AuxSymbolCount: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# NO: Symbols [
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: abs_symbol
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 7
+ SymbolName: caption
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 12
+ SymbolName: message
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 18
+ SymbolName: MessageBoxA
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 24
+ SymbolName: ExitProcess
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 30
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_ADDR64
+ - Name: .text2
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4096
+ SectionData: B800000000000000005068000000000000000068000000000000000050E8000000000000000050E8000000000000000050E80000000000000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: abs_symbol
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 7
+ SymbolName: caption
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 12
+ SymbolName: message
+ Type: IMAGE_REL_AMD64_ADDR64
+ - VirtualAddress: 18
+ SymbolName: MessageBoxA
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 24
+ SymbolName: ExitProcess
+ Type: IMAGE_REL_AMD64_REL32
+ - VirtualAddress: 30
+ SymbolName: __ImageBase
+ Type: IMAGE_REL_AMD64_ADDR64
+ - Name: .data
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+ Alignment: 4
+ SectionData: 48656C6C6F0048656C6C6F20576F726C6400
+symbols:
+ - Name: "@comp.id"
+ Value: 10394907
+ SectionNumber: 65535
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 6
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .text2
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 28
+ NumberOfRelocations: 6
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: .data
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 18
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ - Name: MessageBoxA
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: ExitProcess
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: message
+ Value: 6
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: caption
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ - Name: abs_symbol
+ Value: 0xDEADBEEF
+ SectionNumber: -1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __ImageBase
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/tls.test b/test/COFF/tls.test
new file mode 100644
index 000000000000..395916dfdd67
--- /dev/null
+++ b/test/COFF/tls.test
@@ -0,0 +1,43 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: TLSTableRVA: 0x1000
+# CHECK: TLSTableSize: 0x28
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 00000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: _tls_used
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/tls32.test b/test/COFF/tls32.test
new file mode 100644
index 000000000000..4fe020eb9e10
--- /dev/null
+++ b/test/COFF/tls32.test
@@ -0,0 +1,43 @@
+# RUN: yaml2obj < %s > %t.obj
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: TLSTableRVA: 0x1000
+# CHECK: TLSTableSize: 0x28
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_I386
+ Characteristics: []
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 00000000
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 4
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 0
+ Selection: IMAGE_COMDAT_SELECT_ANY
+ - Name: _main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __tls_used
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/unwind.test b/test/COFF/unwind.test
new file mode 100644
index 000000000000..48e94165b9bd
--- /dev/null
+++ b/test/COFF/unwind.test
@@ -0,0 +1,198 @@
+# RUN: yaml2obj < %s > %t.obj
+#
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
+# RUN: llvm-objdump -unwind-info %t.exe | FileCheck -check-prefix=UNWIND %s
+#
+# HEADER: ExceptionTableRVA: 0x1000
+#
+# UNWIND: Function Table:
+# UNWIND: Start Address: 0x2000
+# UNWIND: End Address: 0x201b
+# UNWIND: Unwind Info Address: 0x3000
+# UNWIND: Version: 1
+# UNWIND: Flags: 1 UNW_ExceptionHandler
+# UNWIND: Size of prolog: 18
+# UNWIND: Number of Codes: 8
+# UNWIND: Frame register: RBX
+# UNWIND: Frame offset: 0
+# UNWIND: Unwind Codes:
+# UNWIND: 0x12: UOP_SetFPReg
+# UNWIND: 0x0f: UOP_PushNonVol RBX
+# UNWIND: 0x0e: UOP_SaveXMM128 XMM8 [0x0000]
+# UNWIND: 0x09: UOP_SaveNonVol RSI [0x0010]
+# UNWIND: 0x04: UOP_AllocSmall 24
+# UNWIND: 0x00: UOP_PushMachFrame w/o error code
+# UNWIND: Function Table:
+# UNWIND: Start Address: 0x2012
+# UNWIND: End Address: 0x2012
+# UNWIND: Unwind Info Address: 0x301c
+# UNWIND: Version: 1
+# UNWIND: Flags: 4 UNW_ChainInfo
+# UNWIND: Size of prolog: 0
+# UNWIND: Number of Codes: 0
+# UNWIND: No frame pointer used
+# UNWIND: Function Table:
+# UNWIND: Start Address: 0x201b
+# UNWIND: End Address: 0x201c
+# UNWIND: Unwind Info Address: 0x302c
+# UNWIND: Version: 1
+# UNWIND: Flags: 0
+# UNWIND: Size of prolog: 0
+# UNWIND: Number of Codes: 0
+# UNWIND: No frame pointer used
+# UNWIND: Function Table:
+# UNWIND: Start Address: 0x201c
+# UNWIND: End Address: 0x2039
+# UNWIND: Unwind Info Address: 0x3034
+# UNWIND: Version: 1
+# UNWIND: Flags: 0
+# UNWIND: Size of prolog: 14
+# UNWIND: Number of Codes: 6
+# UNWIND: No frame pointer used
+# UNWIND: Unwind Codes:
+# UNWIND: 0x0e: UOP_AllocLarge 8454128
+# UNWIND: 0x07: UOP_AllocLarge 8190
+# UNWIND: 0x00: UOP_PushMachFrame w/o error code
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: .text
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 4883EC184889742410440F110424534889E3488D235B4883C418C3C34881ECF0FF00004881ECF0FF80004881C4F0FF80004881C4F0FF0000C3
+ - Name: .xdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 0912080312030F300E880000096402000422001A000000000000000021000000000000001B000000000000000100000000000000010E06000E11F0FF80000701FE1F001A
+ Relocations:
+ - VirtualAddress: 20
+ SymbolName: __C_specific_handler
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 32
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 36
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 40
+ SymbolName: .xdata
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - Name: .pdata
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+ Alignment: 4
+ SectionData: 000000001B0000000000000012000000120000001C00000000000000010000002C000000000000001D00000034000000
+ Relocations:
+ - VirtualAddress: 0
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 4
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 8
+ SymbolName: .xdata
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 12
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 16
+ SymbolName: func
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 20
+ SymbolName: .xdata
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 24
+ SymbolName: smallFunc
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 28
+ SymbolName: smallFunc
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 32
+ SymbolName: .xdata
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 36
+ SymbolName: allocFunc
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 40
+ SymbolName: allocFunc
+ Type: IMAGE_REL_AMD64_ADDR32NB
+ - VirtualAddress: 44
+ SymbolName: .xdata
+ Type: IMAGE_REL_AMD64_ADDR32NB
+symbols:
+ - Name: .text
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 57
+ NumberOfRelocations: 0
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 1
+ - Name: .xdata
+ Value: 0
+ SectionNumber: 2
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 68
+ NumberOfRelocations: 4
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 2
+ - Name: .pdata
+ Value: 0
+ SectionNumber: 3
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_STATIC
+ SectionDefinition:
+ Length: 48
+ NumberOfRelocations: 12
+ NumberOfLinenumbers: 0
+ CheckSum: 0
+ Number: 3
+ - Name: func
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __C_specific_handler
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: smallFunc
+ Value: 27
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: allocFunc
+ Value: 28
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: main
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: __C_specific_handler
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_NULL
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/version.test b/test/COFF/version.test
new file mode 100644
index 000000000000..69fa93394a0f
--- /dev/null
+++ b/test/COFF/version.test
@@ -0,0 +1,19 @@
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=DEFAULT %s
+
+DEFAULT: MajorImageVersion: 0
+DEFAULT: MinorImageVersion: 0
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /version:11
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s
+
+CHECK1: MajorImageVersion: 11
+CHECK1: MinorImageVersion: 0
+
+# RUN: lld-link /out:%t.exe /entry:main %t.obj /version:11.22
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=CHECK2 %s
+
+CHECK2: MajorImageVersion: 11
+CHECK2: MinorImageVersion: 22
diff --git a/test/COFF/weak-external.test b/test/COFF/weak-external.test
new file mode 100644
index 000000000000..3997170b897a
--- /dev/null
+++ b/test/COFF/weak-external.test
@@ -0,0 +1,36 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external.ll
+# RUN: lld-link /out:%t1.exe /entry:g /subsystem:console %t.obj
+# RUN: lld-link /out:%t2.exe /entry:g /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
+# RUN: FileCheck %s < %t2.map
+
+# CHECK: <lto object>:
+# CHECK-NOT: :
+# CHECK: {{ g$}}
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: '.text'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 00
+symbols:
+ - Name: 'g'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
+ WeakExternal:
+ TagIndex: 2
+ Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
+ - Name: 'f'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/COFF/weak-external2.test b/test/COFF/weak-external2.test
new file mode 100644
index 000000000000..6afaac29219d
--- /dev/null
+++ b/test/COFF/weak-external2.test
@@ -0,0 +1,30 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external2.ll
+# RUN: lld-link /out:%t.exe /entry:g /subsystem:console %t.obj %t.lto.obj
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: '.text'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 00
+symbols:
+ - Name: 'f'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+ - Name: 'g'
+ Value: 0
+ SectionNumber: 0
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
+ WeakExternal:
+ TagIndex: 0
+ Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
+...
diff --git a/test/COFF/weak-external3.test b/test/COFF/weak-external3.test
new file mode 100644
index 000000000000..9ba32982d505
--- /dev/null
+++ b/test/COFF/weak-external3.test
@@ -0,0 +1,32 @@
+# RUN: yaml2obj %s > %t.obj
+# RUN: llvm-as -o %t.lto.obj %S/Inputs/weak-external3.ll
+# RUN: lld-link /out:%t1.exe /entry:f /subsystem:console /lldmap:%t1.map %t.lto.obj
+# RUN: FileCheck --check-prefix=CHECK1 %s < %t1.map
+# RUN: lld-link /out:%t2.exe /entry:f /subsystem:console /lldmap:%t2.map %t.obj %t.lto.obj
+# RUN: FileCheck --check-prefix=CHECK2 %s < %t2.map
+
+# CHECK1: <lto object>:
+# CHECK1-NOT: :
+# CHECK1: {{ g$}}
+
+# CHECK2: weak-external3{{.*}}:
+# CHECK2-NOT: :
+# CHECK2: {{ f$}}
+
+---
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+ Characteristics: [ ]
+sections:
+ - Name: '.text'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 16
+ SectionData: 00
+symbols:
+ - Name: 'f'
+ Value: 0
+ SectionNumber: 1
+ SimpleType: IMAGE_SYM_TYPE_NULL
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL
+...
diff --git a/test/Driver/def-lib-search.test b/test/Driver/def-lib-search.test
index 818cbfe6ad61..15d5dbbea9ff 100644
--- a/test/Driver/def-lib-search.test
+++ b/test/Driver/def-lib-search.test
@@ -1,7 +1,7 @@
# Check that search paths explicitly provided by the -L option
-# are used in search before default paths.
+# are used in search before default paths.
-RUN: not lld -flavor gnu -target x86_64 -t -ltest \
+RUN: not lld -flavor old-gnu -target x86_64 -t -ltest \
RUN: --sysroot=%p/Inputs -L%p/Inputs 2> %t
RUN: FileCheck %s < %t
diff --git a/test/Driver/flavor-option.test b/test/Driver/flavor-option.test
index 2ca3b410cbe2..2471bc09519b 100644
--- a/test/Driver/flavor-option.test
+++ b/test/Driver/flavor-option.test
@@ -2,7 +2,7 @@
# argument in the command line (bug 20975);
# b) UniversalDriver correctly removes -flavor along with its value and the
# underlying linker does not get a corrupted command line (bug 20977).
-RUN: lld --help -flavor gnu | FileCheck %s
+RUN: lld --help -flavor old-gnu | FileCheck %s
CHECK: --noinhibit-exec
CHECK: --output-filetype
diff --git a/test/Driver/lib-search.test b/test/Driver/lib-search.test
index 9d3666f63c36..255b17b1a55e 100644
--- a/test/Driver/lib-search.test
+++ b/test/Driver/lib-search.test
@@ -1,16 +1,16 @@
-RUN: not lld -flavor gnu -t -ltest -L%p/Inputs 2> %t.err
+RUN: not lld -flavor old-gnu -t -ltest -L%p/Inputs 2> %t.err
RUN: FileCheck %s < %t.err
-RUN: not lld -flavor gnu -target x86_64--netbsd -t -ltest \
+RUN: not lld -flavor old-gnu -target x86_64--netbsd -t -ltest \
RUN: --sysroot=%p/Inputs 2> %t2
RUN: FileCheck -check-prefix=NETBSD-AMD64 %s < %t2
-RUN: not lld -flavor gnu -target x86_64--netbsd -nostdlib -t -ltest \
+RUN: not lld -flavor old-gnu -target x86_64--netbsd -nostdlib -t -ltest \
RUN: --sysroot=%p/Inputs 2> %t3
RUN: FileCheck -check-prefix=NETBSD-AMD64-NS %s < %t3
-RUN: not lld -flavor gnu -target i386--netbsd -t -ltest \
+RUN: not lld -flavor old-gnu -target i386--netbsd -t -ltest \
RUN: --sysroot=%p/Inputs 2> %t4
RUN: FileCheck -check-prefix=NETBSD-I386 %s < %t4
-RUN: not lld -flavor gnu -target x86_64--netbsd -m elf_i386 -t -ltest \
+RUN: not lld -flavor old-gnu -target x86_64--netbsd -m elf_i386 -t -ltest \
RUN: --sysroot=%p/Inputs 2> %t5
RUN: FileCheck -check-prefix=NETBSD-AMD64_32 %s < %t5
diff --git a/test/Driver/so-whole-archive.test b/test/Driver/so-whole-archive.test
index 0732c35a7a92..8ab879082bf1 100644
--- a/test/Driver/so-whole-archive.test
+++ b/test/Driver/so-whole-archive.test
@@ -3,8 +3,8 @@
# RUN: yaml2obj -format=elf -docnum=1 %s > %t-so.o
# RUN: yaml2obj -format=elf -docnum=2 %s > %t-exe.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: lld -flavor gnu -target mipsel -o %t.exe %t-exe.o --whole-archive %t.so
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t-exe.o --whole-archive %t.so
# so.o
---
diff --git a/test/Driver/trivial-driver.test b/test/Driver/trivial-driver.test
index 196d6cfa9d4d..46de60c543f6 100644
--- a/test/Driver/trivial-driver.test
+++ b/test/Driver/trivial-driver.test
@@ -1,5 +1,5 @@
# This test, tests the Gnu lld option --help
-RUN: lld -flavor gnu --help | FileCheck %s
+RUN: lld -flavor old-gnu --help | FileCheck %s
CHECK: --noinhibit-exec
CHECK: --output-filetype
diff --git a/test/Driver/undef-basic.objtxt b/test/Driver/undef-basic.objtxt
index f942d5c8e904..7b11a7e8c982 100644
--- a/test/Driver/undef-basic.objtxt
+++ b/test/Driver/undef-basic.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -flavor gnu -u undefinedsymbol -e entrysymbol %s \
+# RUN: lld -flavor old-gnu -u undefinedsymbol -e entrysymbol %s \
# RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
#
diff --git a/test/ELF/Inputs/abs.s b/test/ELF/Inputs/abs.s
new file mode 100644
index 000000000000..dc7f67a3c251
--- /dev/null
+++ b/test/ELF/Inputs/abs.s
@@ -0,0 +1,4 @@
+.global abs
+abs = 0x42
+.global big
+big = 0x1000000000
diff --git a/test/ELF/Inputs/abs255.s b/test/ELF/Inputs/abs255.s
new file mode 100644
index 000000000000..844ae7d863d2
--- /dev/null
+++ b/test/ELF/Inputs/abs255.s
@@ -0,0 +1,2 @@
+.global foo
+foo = 255
diff --git a/test/ELF/Inputs/abs256.s b/test/ELF/Inputs/abs256.s
new file mode 100644
index 000000000000..3f53bc5ec9f6
--- /dev/null
+++ b/test/ELF/Inputs/abs256.s
@@ -0,0 +1,2 @@
+.global foo
+foo = 256
diff --git a/test/ELF/Inputs/abs257.s b/test/ELF/Inputs/abs257.s
new file mode 100644
index 000000000000..4ae7fe8fe5ef
--- /dev/null
+++ b/test/ELF/Inputs/abs257.s
@@ -0,0 +1,2 @@
+.global foo
+foo = 257
diff --git a/test/ELF/Inputs/allow-multiple-definition.s b/test/ELF/Inputs/allow-multiple-definition.s
new file mode 100644
index 000000000000..c2655a437ae3
--- /dev/null
+++ b/test/ELF/Inputs/allow-multiple-definition.s
@@ -0,0 +1,4 @@
+.globl _bar
+.type _bar, @function
+_bar:
+ mov $2, %eax
diff --git a/test/ELF/Inputs/allow-shlib-undefined.s b/test/ELF/Inputs/allow-shlib-undefined.s
new file mode 100644
index 000000000000..e2fb7de2301a
--- /dev/null
+++ b/test/ELF/Inputs/allow-shlib-undefined.s
@@ -0,0 +1,3 @@
+.globl _shared
+_shared:
+ call _unresolved
diff --git a/test/ELF/Inputs/archive.s b/test/ELF/Inputs/archive.s
new file mode 100644
index 000000000000..42ccfd47b48b
--- /dev/null
+++ b/test/ELF/Inputs/archive.s
@@ -0,0 +1,5 @@
+.globl _start;
+_start:
+
+.globl end;
+end:
diff --git a/test/ELF/Inputs/archive2.s b/test/ELF/Inputs/archive2.s
new file mode 100644
index 000000000000..ade79556db7b
--- /dev/null
+++ b/test/ELF/Inputs/archive2.s
@@ -0,0 +1,2 @@
+.global foo
+foo:
diff --git a/test/ELF/Inputs/archive3.s b/test/ELF/Inputs/archive3.s
new file mode 100644
index 000000000000..3e11d4314104
--- /dev/null
+++ b/test/ELF/Inputs/archive3.s
@@ -0,0 +1,2 @@
+.global bar
+bar:
diff --git a/test/ELF/Inputs/archive4.s b/test/ELF/Inputs/archive4.s
new file mode 100644
index 000000000000..e842874f187c
--- /dev/null
+++ b/test/ELF/Inputs/archive4.s
@@ -0,0 +1 @@
+.quad bar
diff --git a/test/ELF/Inputs/comdat.s b/test/ELF/Inputs/comdat.s
new file mode 100644
index 000000000000..467bfa4b8da2
--- /dev/null
+++ b/test/ELF/Inputs/comdat.s
@@ -0,0 +1,3 @@
+ .section .text3,"axG",@progbits,zed,comdat,unique,0
+ .global abc
+abc:
diff --git a/test/ELF/Inputs/common.s b/test/ELF/Inputs/common.s
new file mode 100644
index 000000000000..ea8ba91cb156
--- /dev/null
+++ b/test/ELF/Inputs/common.s
@@ -0,0 +1,3 @@
+.comm sym1,8,4
+.comm sym2,4,4
+.comm sym4,4,16
diff --git a/test/ELF/Inputs/discard-merge-unnamed.o b/test/ELF/Inputs/discard-merge-unnamed.o
new file mode 100644
index 000000000000..040addf04f4e
--- /dev/null
+++ b/test/ELF/Inputs/discard-merge-unnamed.o
Binary files differ
diff --git a/test/ELF/Inputs/dynamic-reloc.s b/test/ELF/Inputs/dynamic-reloc.s
new file mode 100644
index 000000000000..82fa7a17f078
--- /dev/null
+++ b/test/ELF/Inputs/dynamic-reloc.s
@@ -0,0 +1,2 @@
+.global main
+main:
diff --git a/test/ELF/Inputs/invalid-binding.elf b/test/ELF/Inputs/invalid-binding.elf
new file mode 100644
index 000000000000..61b5af9b456c
--- /dev/null
+++ b/test/ELF/Inputs/invalid-binding.elf
Binary files differ
diff --git a/test/ELF/Inputs/invalid-data-encoding.a b/test/ELF/Inputs/invalid-data-encoding.a
new file mode 100644
index 000000000000..ff2b37318c1e
--- /dev/null
+++ b/test/ELF/Inputs/invalid-data-encoding.a
Binary files differ
diff --git a/test/ELF/Inputs/invalid-file-class.a b/test/ELF/Inputs/invalid-file-class.a
new file mode 100644
index 000000000000..f0ce607b4fdc
--- /dev/null
+++ b/test/ELF/Inputs/invalid-file-class.a
Binary files differ
diff --git a/test/ELF/Inputs/invalid-multiple-eh-relocs.elf b/test/ELF/Inputs/invalid-multiple-eh-relocs.elf
new file mode 100644
index 000000000000..62914596256a
--- /dev/null
+++ b/test/ELF/Inputs/invalid-multiple-eh-relocs.elf
Binary files differ
diff --git a/test/ELF/Inputs/invalid-section-index.elf b/test/ELF/Inputs/invalid-section-index.elf
new file mode 100644
index 000000000000..ec5adcf3b0b8
--- /dev/null
+++ b/test/ELF/Inputs/invalid-section-index.elf
Binary files differ
diff --git a/test/ELF/Inputs/invalid-shentsize-zero.elf b/test/ELF/Inputs/invalid-shentsize-zero.elf
new file mode 100644
index 000000000000..5fa7df245619
--- /dev/null
+++ b/test/ELF/Inputs/invalid-shentsize-zero.elf
Binary files differ
diff --git a/test/ELF/Inputs/invalid-shstrndx.so b/test/ELF/Inputs/invalid-shstrndx.so
new file mode 100755
index 000000000000..dc332b9292ea
--- /dev/null
+++ b/test/ELF/Inputs/invalid-shstrndx.so
Binary files differ
diff --git a/test/ELF/Inputs/invalid-symtab-sh_info.elf b/test/ELF/Inputs/invalid-symtab-sh_info.elf
new file mode 100644
index 000000000000..aa63d582d757
--- /dev/null
+++ b/test/ELF/Inputs/invalid-symtab-sh_info.elf
Binary files differ
diff --git a/test/ELF/Inputs/libsearch-dyn.s b/test/ELF/Inputs/libsearch-dyn.s
new file mode 100644
index 000000000000..c0c33f92944d
--- /dev/null
+++ b/test/ELF/Inputs/libsearch-dyn.s
@@ -0,0 +1,3 @@
+.globl _bar,_dynamic;
+_bar:
+_dynamic:
diff --git a/test/ELF/Inputs/libsearch-st.s b/test/ELF/Inputs/libsearch-st.s
new file mode 100644
index 000000000000..c02ee741c803
--- /dev/null
+++ b/test/ELF/Inputs/libsearch-st.s
@@ -0,0 +1,3 @@
+.globl _bar,_static;
+_bar:
+_static:
diff --git a/test/ELF/Inputs/merge.s b/test/ELF/Inputs/merge.s
new file mode 100644
index 000000000000..a8e1144fbc27
--- /dev/null
+++ b/test/ELF/Inputs/merge.s
@@ -0,0 +1,6 @@
+ .section .mysec,"aM",@progbits,4
+ .align 4
+ .long 0x42
+
+ .text
+ movl .mysec, %eax
diff --git a/test/ELF/Inputs/mips-dynamic.s b/test/ELF/Inputs/mips-dynamic.s
new file mode 100644
index 000000000000..eba5b7f327b4
--- /dev/null
+++ b/test/ELF/Inputs/mips-dynamic.s
@@ -0,0 +1,4 @@
+ .text
+ .globl _foo
+_foo:
+ nop
diff --git a/test/elf/Inputs/stripped-empty.x86_64 b/test/ELF/Inputs/no-symtab.o
index 7368ba280d79..7368ba280d79 100644
--- a/test/elf/Inputs/stripped-empty.x86_64
+++ b/test/ELF/Inputs/no-symtab.o
Binary files differ
diff --git a/test/ELF/Inputs/relocation-copy-align.s b/test/ELF/Inputs/relocation-copy-align.s
new file mode 100644
index 000000000000..83dedc7218d5
--- /dev/null
+++ b/test/ELF/Inputs/relocation-copy-align.s
@@ -0,0 +1,9 @@
+.data
+ .balign 16
+ .zero 12
+
+ .type x,@object
+ .globl x
+x:
+ .long 0
+ .size x, 4
diff --git a/test/ELF/Inputs/relocation-copy.s b/test/ELF/Inputs/relocation-copy.s
new file mode 100644
index 000000000000..6b113aba294e
--- /dev/null
+++ b/test/ELF/Inputs/relocation-copy.s
@@ -0,0 +1,22 @@
+.bss
+
+.type x,@object
+.globl x
+.balign 16
+x:
+.long 0
+.size x, 4
+
+.type y,@object
+.globl y
+.balign 16
+y:
+.long 0
+.size y, 4
+
+.type z,@object
+.globl z
+.balign 4
+z:
+.long 0
+.size z, 4
diff --git a/test/ELF/Inputs/relocation-size-shared.s b/test/ELF/Inputs/relocation-size-shared.s
new file mode 100644
index 000000000000..02b4cf027b58
--- /dev/null
+++ b/test/ELF/Inputs/relocation-size-shared.s
@@ -0,0 +1,6 @@
+.data
+.global fooshared
+.type fooshared,%object
+.size fooshared,26
+fooshared:
+.zero 26
diff --git a/test/ELF/Inputs/resolution.s b/test/ELF/Inputs/resolution.s
new file mode 100644
index 000000000000..70afb163278f
--- /dev/null
+++ b/test/ELF/Inputs/resolution.s
@@ -0,0 +1,107 @@
+local:
+
+.weak RegularWeak_with_RegularWeak
+.size RegularWeak_with_RegularWeak, 32
+RegularWeak_with_RegularWeak:
+
+.global RegularWeak_with_RegularStrong
+.size RegularWeak_with_RegularStrong, 33
+RegularWeak_with_RegularStrong:
+
+.weak RegularStrong_with_RegularWeak
+.size RegularStrong_with_RegularWeak, 34
+RegularStrong_with_RegularWeak:
+
+.weak RegularWeak_with_UndefWeak
+.size RegularWeak_with_UndefWeak, 35
+.quad RegularWeak_with_UndefWeak
+
+.size RegularWeak_with_UndefStrong, 36
+.quad RegularWeak_with_UndefStrong
+
+.weak RegularStrong_with_UndefWeak
+.size RegularStrong_with_UndefWeak, 37
+.quad RegularStrong_with_UndefWeak
+
+.size RegularStrong_with_UndefStrong, 38
+.quad RegularStrong_with_UndefStrong
+
+.weak RegularWeak_with_CommonWeak
+.comm RegularWeak_with_CommonWeak,39,4
+
+.comm RegularWeak_with_CommonStrong,40,4
+
+.weak RegularStrong_with_CommonWeak
+.comm RegularStrong_with_CommonWeak,41,4
+
+.comm RegularStrong_with_CommonStrong,42,4
+
+.weak UndefWeak_with_RegularWeak
+.size UndefWeak_with_RegularWeak, 43
+UndefWeak_with_RegularWeak:
+
+.global UndefWeak_with_RegularStrong
+.size UndefWeak_with_RegularStrong, 44
+UndefWeak_with_RegularStrong:
+
+.weak UndefStrong_with_RegularWeak
+.size UndefStrong_with_RegularWeak, 45
+UndefStrong_with_RegularWeak:
+
+.global UndefStrong_with_RegularStrong
+.size UndefStrong_with_RegularStrong, 46
+UndefStrong_with_RegularStrong:
+
+.weak UndefWeak_with_UndefWeak
+.size UndefWeak_with_UndefWeak, 47
+.quad UndefWeak_with_UndefWeak
+
+.weak UndefWeak_with_CommonWeak
+.comm UndefWeak_with_CommonWeak,48,4
+
+.comm UndefWeak_with_CommonStrong,49,4
+
+.weak UndefStrong_with_CommonWeak
+.comm UndefStrong_with_CommonWeak,50,4
+
+.comm UndefStrong_with_CommonStrong,51,4
+
+.weak CommonWeak_with_RegularWeak
+.size CommonWeak_with_RegularWeak, 52
+CommonWeak_with_RegularWeak:
+
+.global CommonWeak_with_RegularStrong
+.size CommonWeak_with_RegularStrong, 53
+CommonWeak_with_RegularStrong:
+
+.weak CommonStrong_with_RegularWeak
+.size CommonStrong_with_RegularWeak, 54
+CommonStrong_with_RegularWeak:
+
+.global CommonStrong_with_RegularStrong
+.size CommonStrong_with_RegularStrong, 55
+CommonStrong_with_RegularStrong:
+
+.weak CommonWeak_with_UndefWeak
+.size CommonWeak_with_UndefWeak, 56
+.quad CommonWeak_with_UndefWeak
+
+.size CommonWeak_with_UndefStrong, 57
+.quad CommonWeak_with_UndefStrong
+
+.weak CommonStrong_with_UndefWeak
+.size CommonStrong_with_UndefWeak, 58
+.quad CommonStrong_with_UndefWeak
+
+.size CommonStrong_with_UndefStrong, 59
+.quad CommonStrong_with_UndefStrong
+
+.weak CommonWeak_with_CommonWeak
+.comm CommonWeak_with_CommonWeak,60,4
+
+.comm CommonWeak_with_CommonStrong,61,4
+
+.weak CommonStrong_with_CommonWeak
+.comm CommonStrong_with_CommonWeak,62,4
+
+.comm CommonStrong_with_CommonStrong,63,4
diff --git a/test/ELF/Inputs/shared-ppc64.s b/test/ELF/Inputs/shared-ppc64.s
new file mode 100644
index 000000000000..b0117ac42963
--- /dev/null
+++ b/test/ELF/Inputs/shared-ppc64.s
@@ -0,0 +1,9 @@
+.section ".opd","aw"
+.global bar
+bar:
+.quad .Lbar,.TOC.@tocbase,0
+.quad .Lbar,0,0
+
+.text
+.Lbar:
+ blr
diff --git a/test/ELF/Inputs/shared.s b/test/ELF/Inputs/shared.s
new file mode 100644
index 000000000000..1cfebbfaf373
--- /dev/null
+++ b/test/ELF/Inputs/shared.s
@@ -0,0 +1,6 @@
+.global bar
+.type bar, @function
+bar:
+
+.global zed
+zed:
diff --git a/test/ELF/Inputs/shared2.s b/test/ELF/Inputs/shared2.s
new file mode 100644
index 000000000000..a723902e890e
--- /dev/null
+++ b/test/ELF/Inputs/shared2.s
@@ -0,0 +1,6 @@
+.global bar2
+.type bar2, @function
+bar2:
+
+.global zed2
+zed2:
diff --git a/test/ELF/Inputs/shared3.s b/test/ELF/Inputs/shared3.s
new file mode 100644
index 000000000000..d1f6ffea1332
--- /dev/null
+++ b/test/ELF/Inputs/shared3.s
@@ -0,0 +1,3 @@
+.global baz
+.type barz, @function
+baz:
diff --git a/test/ELF/Inputs/tls-got.s b/test/ELF/Inputs/tls-got.s
new file mode 100644
index 000000000000..5681d001fd9d
--- /dev/null
+++ b/test/ELF/Inputs/tls-got.s
@@ -0,0 +1,14 @@
+.type tls0,@object
+.section .tbss,"awT",@nobits
+.globl tls0
+.align 4
+tls0:
+ .long 0
+ .size tls0, 4
+
+.type tls1,@object
+.globl tls1
+.align 4
+tls1:
+ .long 0
+ .size tls1, 4
diff --git a/test/ELF/Inputs/tls-mismatch.s b/test/ELF/Inputs/tls-mismatch.s
new file mode 100644
index 000000000000..8c14f58a742f
--- /dev/null
+++ b/test/ELF/Inputs/tls-mismatch.s
@@ -0,0 +1,4 @@
+.tbss
+.globl tlsvar
+tlsvar:
+ .space 4
diff --git a/test/ELF/Inputs/tls-opt-gdie.s b/test/ELF/Inputs/tls-opt-gdie.s
new file mode 100644
index 000000000000..361578f21407
--- /dev/null
+++ b/test/ELF/Inputs/tls-opt-gdie.s
@@ -0,0 +1,20 @@
+.type tlsshared0,@object
+.section .tbss,"awT",@nobits
+.globl tlsshared0
+.align 4
+tlsshared0:
+ .long 0
+ .size tlsshared0, 4
+
+.type tlsshared1,@object
+.globl tlsshared1
+.align 4
+tlsshared1:
+ .long 0
+ .size tlsshared1, 4
+
+.text
+.globl __tls_get_addr
+.align 16, 0x90
+.type __tls_get_addr,@function
+__tls_get_addr:
diff --git a/test/ELF/Inputs/tls-opt-gdiele-i686.s b/test/ELF/Inputs/tls-opt-gdiele-i686.s
new file mode 100644
index 000000000000..ab72b9d7cb74
--- /dev/null
+++ b/test/ELF/Inputs/tls-opt-gdiele-i686.s
@@ -0,0 +1,20 @@
+.type tlsshared0,@object
+.section .tbss,"awT",@nobits
+.globl tlsshared0
+.align 4
+tlsshared0:
+ .long 0
+ .size tlsshared0, 4
+
+.type tlsshared1,@object
+.globl tlsshared1
+.align 4
+tlsshared1:
+ .long 0
+ .size tlsshared1, 4
+
+.text
+ .globl __tls_get_addr
+ .align 16, 0x90
+ .type __tls_get_addr,@function
+__tls_get_addr:
diff --git a/test/ELF/Inputs/tls-opt-iele-i686-nopic.s b/test/ELF/Inputs/tls-opt-iele-i686-nopic.s
new file mode 100644
index 000000000000..a090065ecf9a
--- /dev/null
+++ b/test/ELF/Inputs/tls-opt-iele-i686-nopic.s
@@ -0,0 +1,15 @@
+.type tlsshared0,@object
+.section .tbss,"awT",@nobits
+.globl tlsshared0
+.align 4
+tlsshared0:
+ .long 0
+ .size tlsshared0, 4
+
+.type tlsshared1,@object
+.section .tbss,"awT",@nobits
+.globl tlsshared1
+.align 4
+tlsshared1:
+ .long 0
+ .size tlsshared1, 4
diff --git a/test/ELF/Inputs/visibility.s b/test/ELF/Inputs/visibility.s
new file mode 100644
index 000000000000..6ef027d315fa
--- /dev/null
+++ b/test/ELF/Inputs/visibility.s
@@ -0,0 +1,13 @@
+.quad default
+
+.protected protected
+.quad protected
+
+.hidden hidden
+.quad hidden
+
+.internal internal
+.quad internal
+
+.hidden protected_with_hidden
+.quad protected_with_hidden
diff --git a/test/ELF/Inputs/whole-archive.s b/test/ELF/Inputs/whole-archive.s
new file mode 100644
index 000000000000..f9d56fc2fa21
--- /dev/null
+++ b/test/ELF/Inputs/whole-archive.s
@@ -0,0 +1,2 @@
+.globl _bar;
+_bar:
diff --git a/test/ELF/aarch64-abs16.s b/test/ELF/aarch64-abs16.s
new file mode 100644
index 000000000000..e41abc43ee0d
--- /dev/null
+++ b/test/ELF/aarch64-abs16.s
@@ -0,0 +1,27 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs255.s -o %t255.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs256.s -o %t256.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs257.s -o %t257.o
+
+.globl _start
+_start:
+.data
+ .hword foo + 0xfeff
+ .hword foo - 0x8100
+
+// RUN: ld.lld %t.o %t256.o -o %t2
+// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s
+
+// CHECK: Contents of section .data:
+// 11000: S = 0x100, A = 0xfeff
+// S + A = 0xffff
+// 11002: S = 0x100, A = -0x8100
+// S + A = 0x8000
+// CHECK-NEXT: 11000 ffff0080
+
+// RUN: not ld.lld %t.o %t255.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// RUN: not ld.lld %t.o %t257.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// OVERFLOW: Relocation R_AARCH64_ABS16 out of range
diff --git a/test/ELF/aarch64-abs32.s b/test/ELF/aarch64-abs32.s
new file mode 100644
index 000000000000..c2460d15e825
--- /dev/null
+++ b/test/ELF/aarch64-abs32.s
@@ -0,0 +1,27 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs255.s -o %t255.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs256.s -o %t256.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs257.s -o %t257.o
+
+.globl _start
+_start:
+.data
+ .word foo + 0xfffffeff
+ .word foo - 0x80000100
+
+// RUN: ld.lld %t.o %t256.o -o %t2
+// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s
+
+// CHECK: Contents of section .data:
+// 11000: S = 0x100, A = 0xfffffeff
+// S + A = 0xffffffff
+// 11004: S = 0x100, A = -0x80000100
+// S + A = 0x80000000
+// CHECK-NEXT: 11000 ffffffff 00000080
+
+// RUN: not ld.lld %t.o %t255.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// RUN: not ld.lld %t.o %t257.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// OVERFLOW: Relocation R_AARCH64_ABS32 out of range
diff --git a/test/ELF/aarch64-call26-error.s b/test/ELF/aarch64-call26-error.s
new file mode 100644
index 000000000000..4b666c69011a
--- /dev/null
+++ b/test/ELF/aarch64-call26-error.s
@@ -0,0 +1,11 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t
+// RUN: not ld.lld %t %tabs -o %t2 2>&1 | FileCheck %s
+// REQUIRES: aarch64
+
+.text
+.globl _start
+_start:
+ bl big
+
+// CHECK: R_AARCH64_CALL26 out of range
diff --git a/test/ELF/aarch64-copy.s b/test/ELF/aarch64-copy.s
new file mode 100644
index 000000000000..86d972057df0
--- /dev/null
+++ b/test/ELF/aarch64-copy.s
@@ -0,0 +1,93 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %p/Inputs/relocation-copy.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t3
+// RUN: llvm-readobj -s -r --expand-relocs -symbols %t3 | FileCheck %s
+// RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=CODE %s
+// RUN: llvm-objdump -s -section=.data %t3 | FileCheck -check-prefix=DATA %s
+
+.text
+.globl _start
+_start:
+ adr x1, x
+ adrp x2, y
+ add x2, x2, :lo12:y
+.data
+ .word z
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x13010
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 24
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment: 16
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset: 0x13010
+// CHECK-NEXT: Type: R_AARCH64_COPY
+// CHECK-NEXT: Symbol: x
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset: 0x13020
+// CHECK-NEXT: Type: R_AARCH64_COPY
+// CHECK-NEXT: Symbol: y
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset: 0x13024
+// CHECK-NEXT: Type: R_AARCH64_COPY
+// CHECK-NEXT: Symbol: z
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: Symbols [
+// CHECK: Name: x
+// CHECK-NEXT: Value: 0x13010
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: .bss
+// CHECK: Name: y
+// CHECK-NEXT: Value: 0x13020
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: .bss
+// CHECK: Name: z
+// CHECK-NEXT: Value: 0x13024
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: .bss
+// CHECK: ]
+
+// CODE: Disassembly of section .text:
+// CODE-NEXT: _start:
+// S(x) = 0x13010, A = 0, P = 0x11000
+// S + A - P = 0x10B0 = 8208
+// CODE-NEXT: 11000: {{.*}} adr x1, #8208
+// S(y) = 0x13020, A = 0, P = 0x11004
+// Page(S + A) - Page(P) = 0x13000 - 0x11000 = 0x2000 = 8192
+// CODE-NEXT: 11004: {{.*}} adrp x2, #8192
+// S(y) = 0x13020, A = 0
+// (S + A) & 0xFFF = 0x20 = 32
+// CODE-NEXT: 11008: {{.*}} add x2, x2, #32
+
+// DATA: Contents of section .data:
+// S(z) = 0x13024
+// DATA-NEXT: 13000 24300100
diff --git a/test/ELF/aarch64-data-relocs.s b/test/ELF/aarch64-data-relocs.s
new file mode 100644
index 000000000000..30770836f787
--- /dev/null
+++ b/test/ELF/aarch64-data-relocs.s
@@ -0,0 +1,23 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs256.s -o %t256.o
+// RUN: ld.lld %t %t256.o -o %t2
+// RUN: llvm-objdump -s %t2 | FileCheck %s
+// REQUIRES: aarch64
+
+.globl _start
+_start:
+.section .R_AARCH64_ABS64, "ax",@progbits
+ .xword foo + 0x24
+
+// S = 0x100, A = 0x24
+// S + A = 0x124
+// CHECK: Contents of section .R_AARCH64_ABS64:
+// CHECK-NEXT: 11000 24010000 00000000
+
+.section .R_AARCH64_PREL64, "ax",@progbits
+ .xword foo - . + 0x24
+
+// S = 0x100, A = 0x24, P = 0x11008
+// S + A - P = 0xfffffffffffef11c
+// CHECK: Contents of section .R_AARCH64_PREL64:
+// CHECK-NEXT: 11008 1cf1feff ffffffff
diff --git a/test/ELF/aarch64-fpic-abs16.s b/test/ELF/aarch64-fpic-abs16.s
new file mode 100644
index 000000000000..02ac90d3a1f2
--- /dev/null
+++ b/test/ELF/aarch64-fpic-abs16.s
@@ -0,0 +1,7 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_ABS16 cannot be used when making a shared object; recompile with -fPIC.
+
+.data
+ .hword foo
diff --git a/test/ELF/aarch64-fpic-add_abs_lo12_nc.s b/test/ELF/aarch64-fpic-add_abs_lo12_nc.s
new file mode 100644
index 000000000000..9e3216b1e090
--- /dev/null
+++ b/test/ELF/aarch64-fpic-add_abs_lo12_nc.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_ADD_ABS_LO12_NC cannot be used when making a shared object; recompile with -fPIC.
+
+ add x0, x0, :lo12:dat
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-adr_prel_lo21.s b/test/ELF/aarch64-fpic-adr_prel_lo21.s
new file mode 100644
index 000000000000..2246b64c6a71
--- /dev/null
+++ b/test/ELF/aarch64-fpic-adr_prel_lo21.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_ADR_PREL_LO21 cannot be used when making a shared object; recompile with -fPIC.
+
+ adr x0, dat
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s b/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s
new file mode 100644
index 000000000000..af6ebfc3e879
--- /dev/null
+++ b/test/ELF/aarch64-fpic-adr_prel_pg_hi21.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used when making a shared object; recompile with -fPIC.
+
+ adrp x0, dat
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s b/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s
new file mode 100644
index 000000000000..2b1e6769e1a0
--- /dev/null
+++ b/test/ELF/aarch64-fpic-ldst32_abs_lo12_nc.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_LDST32_ABS_LO12_NC cannot be used when making a shared object; recompile with -fPIC.
+
+ ldr s4, [x0, :lo12:dat]
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s b/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s
new file mode 100644
index 000000000000..f2553879cf37
--- /dev/null
+++ b/test/ELF/aarch64-fpic-ldst64_abs_lo12_nc.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_LDST64_ABS_LO12_NC cannot be used when making a shared object; recompile with -fPIC.
+
+ ldr x0, [x0, :lo12:dat]
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s b/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s
new file mode 100644
index 000000000000..f7b465731b46
--- /dev/null
+++ b/test/ELF/aarch64-fpic-ldst8_abs_lo12_nc.s
@@ -0,0 +1,10 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_LDST8_ABS_LO12_NC cannot be used when making a shared object; recompile with -fPIC.
+
+ ldrsb x0, [x1, :lo12:dat]
+.data
+.globl dat
+dat:
+ .word 0
diff --git a/test/ELF/aarch64-fpic-prel16.s b/test/ELF/aarch64-fpic-prel16.s
new file mode 100644
index 000000000000..d80b6e88a67a
--- /dev/null
+++ b/test/ELF/aarch64-fpic-prel16.s
@@ -0,0 +1,7 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_PREL16 cannot be used when making a shared object; recompile with -fPIC.
+
+.data
+ .hword foo - .
diff --git a/test/ELF/aarch64-fpic-prel32.s b/test/ELF/aarch64-fpic-prel32.s
new file mode 100644
index 000000000000..af540ce734bb
--- /dev/null
+++ b/test/ELF/aarch64-fpic-prel32.s
@@ -0,0 +1,7 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_PREL32 cannot be used when making a shared object; recompile with -fPIC.
+
+.data
+ .word foo - .
diff --git a/test/ELF/aarch64-fpic-prel64.s b/test/ELF/aarch64-fpic-prel64.s
new file mode 100644
index 000000000000..2cf4cc916b3e
--- /dev/null
+++ b/test/ELF/aarch64-fpic-prel64.s
@@ -0,0 +1,7 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: Relocation R_AARCH64_PREL64 cannot be used when making a shared object; recompile with -fPIC.
+
+.data
+ .xword foo - .
diff --git a/test/ELF/aarch64-hi21-error.s b/test/ELF/aarch64-hi21-error.s
new file mode 100644
index 000000000000..9e2b283ea118
--- /dev/null
+++ b/test/ELF/aarch64-hi21-error.s
@@ -0,0 +1,10 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t
+// RUN: not ld.lld %tabs %t -o %t2 2>&1 | FileCheck %s
+// REQUIRES: aarch64
+
+.globl _start
+_start:
+adrp x0, big
+
+#CHECK: R_AARCH64_ADR_PREL_PG_HI21 out of range
diff --git a/test/ELF/aarch64-jump26-error.s b/test/ELF/aarch64-jump26-error.s
new file mode 100644
index 000000000000..81fbba1f4551
--- /dev/null
+++ b/test/ELF/aarch64-jump26-error.s
@@ -0,0 +1,11 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t
+// RUN: not ld.lld %t %tabs -o %t2 2>&1 | FileCheck %s
+// REQUIRES: aarch64
+
+.text
+.globl _start
+_start:
+ b big
+
+// CHECK: R_AARCH64_JUMP26 out of range
diff --git a/test/ELF/aarch64-lo21-error.s b/test/ELF/aarch64-lo21-error.s
new file mode 100644
index 000000000000..055f8948f6a3
--- /dev/null
+++ b/test/ELF/aarch64-lo21-error.s
@@ -0,0 +1,10 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t
+// RUN: not ld.lld %tabs %t -o %t2 2>&1 | FileCheck %s
+// REQUIRES: aarch64
+
+.globl _start
+_start:
+adr x0, big
+
+#CHECK: R_AARCH64_ADR_PREL_LO21 out of range
diff --git a/test/ELF/aarch64-prel16.s b/test/ELF/aarch64-prel16.s
new file mode 100644
index 000000000000..083cda908608
--- /dev/null
+++ b/test/ELF/aarch64-prel16.s
@@ -0,0 +1,31 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs255.s -o %t255.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs256.s -o %t256.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs257.s -o %t257.o
+
+.globl _start
+_start:
+.data
+ .hword foo - . + 0x20eff
+ .hword foo - . + 0x8f02
+
+// Note: If this test fails, it probably happens because of
+// the change of the address of the .data section.
+// You may found the correct address in the aarch64_abs16.s test,
+// if it is already fixed. Then, update addends accordingly.
+// RUN: ld.lld %t.o %t256.o -o %t2
+// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s
+
+// CHECK: Contents of section .data:
+// 11000: S = 0x100, A = 0x20eff, P = 0x11000
+// S + A - P = 0xffff
+// 11002: S = 0x100, A = 0x8f02, P = 0x11002
+// S + A - P = 0x8000
+// CHECK-NEXT: 11000 ffff0080
+
+// RUN: not ld.lld %t.o %t255.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// RUN: not ld.lld %t.o %t257.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// OVERFLOW: Relocation R_AARCH64_PREL16 out of range
diff --git a/test/ELF/aarch64-prel32.s b/test/ELF/aarch64-prel32.s
new file mode 100644
index 000000000000..c440b984eaa6
--- /dev/null
+++ b/test/ELF/aarch64-prel32.s
@@ -0,0 +1,31 @@
+// REQUIRES: aarch64
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs255.s -o %t255.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs256.s -o %t256.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-none-freebsd %S/Inputs/abs257.s -o %t257.o
+
+.globl _start
+_start:
+.data
+ .word foo - . + 0x100010eff
+ .word foo - . - 0x7ffef0fc
+
+// Note: If this test fails, it probably happens because of
+// the change of the address of the .data section.
+// You may found the correct address in the aarch64_abs32.s test,
+// if it is already fixed. Then, update addends accordingly.
+// RUN: ld.lld %t.o %t256.o -o %t2
+// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s
+
+// CHECK: Contents of section .data:
+// 11000: S = 0x100, A = 0x100010eff, P = 0x11000
+// S + A - P = 0xffffffff
+// 11004: S = 0x100, A = -0x7ffef0fc, P = 0x11004
+// S + A - P = 0x80000000
+// CHECK-NEXT: 11000 ffffffff 00000080
+
+// RUN: not ld.lld %t.o %t255.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// RUN: not ld.lld %t.o %t257.o -o %t2
+// | FileCheck %s --check-prefix=OVERFLOW
+// OVERFLOW: Relocation R_AARCH64_PREL32 out of range
diff --git a/test/ELF/aarch64-relocs.s b/test/ELF/aarch64-relocs.s
new file mode 100644
index 000000000000..56b04a679111
--- /dev/null
+++ b/test/ELF/aarch64-relocs.s
@@ -0,0 +1,122 @@
+# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s
+# REQUIRES: aarch64
+
+.section .R_AARCH64_ADR_PREL_LO21,"ax",@progbits
+.globl _start
+_start:
+ adr x1,msg
+msg: .asciz "Hello, world\n"
+msgend:
+
+# CHECK: Disassembly of section .R_AARCH64_ADR_PREL_LO21:
+# CHECK: _start:
+# CHECK: 0: 21 00 00 10 adr x1, #4
+# CHECK: msg:
+# CHECK: 4:
+# #4 is the adr immediate value.
+
+.section .R_AARCH64_ADR_PREL_PG_H121,"ax",@progbits
+ adrp x1,mystr
+mystr:
+ .asciz "blah"
+ .size mystr, 4
+
+# S = 0x11012, A = 0x4, P = 0x11012
+# PAGE(S + A) = 0x11000
+# PAGE(P) = 0x11000
+#
+# CHECK: Disassembly of section .R_AARCH64_ADR_PREL_PG_H121:
+# CHECK-NEXT: $x.2:
+# CHECK-NEXT: 11012: 01 00 00 90 adrp x1, #0
+
+.section .R_AARCH64_ADD_ABS_LO12_NC,"ax",@progbits
+ add x0, x0, :lo12:.L.str
+.L.str:
+ .asciz "blah"
+ .size mystr, 4
+
+# S = 0x1101b, A = 0x4
+# R = (S + A) & 0xFFF = 0x1f
+# R << 10 = 0x7c00
+#
+# CHECK: Disassembly of section .R_AARCH64_ADD_ABS_LO12_NC:
+# CHECK-NEXT: $x.4:
+# CHECK-NEXT: 1101b: 00 7c 00 91 add x0, x0, #31
+
+.section .R_AARCH64_LDST64_ABS_LO12_NC,"ax",@progbits
+ ldr x28, [x27, :lo12:foo]
+foo:
+ .asciz "foo"
+ .size mystr, 3
+
+# S = 0x11024, A = 0x4
+# R = ((S + A) & 0xFFF) << 7 = 0x00001400
+# 0x00001400 | 0xf940177c = 0xf940177c
+# CHECK: Disassembly of section .R_AARCH64_LDST64_ABS_LO12_NC:
+# CHECK-NEXT: $x.6:
+# CHECK-NEXT: 11024: 7c 17 40 f9 ldr x28, [x27, #40]
+
+.section .SUB,"ax",@progbits
+ nop
+sub:
+ nop
+
+# CHECK: Disassembly of section .SUB:
+# CHECK-NEXT: $x.8:
+# CHECK-NEXT: 1102c: 1f 20 03 d5 nop
+# CHECK: sub:
+# CHECK-NEXT: 11030: 1f 20 03 d5 nop
+
+.section .R_AARCH64_CALL26,"ax",@progbits
+call26:
+ bl sub
+
+# S = 0x1102c, A = 0x4, P = 0x11034
+# R = S + A - P = -0x4 = 0xfffffffc
+# (R & 0x0ffffffc) >> 2 = 0x03ffffff
+# 0x94000000 | 0x03ffffff = 0x97ffffff
+# CHECK: Disassembly of section .R_AARCH64_CALL26:
+# CHECK-NEXT: call26:
+# CHECK-NEXT: 11034: ff ff ff 97 bl #-4
+
+.section .R_AARCH64_JUMP26,"ax",@progbits
+jump26:
+ b sub
+
+# S = 0x1102c, A = 0x4, P = 0x11038
+# R = S + A - P = -0x8 = 0xfffffff8
+# (R & 0x0ffffffc) >> 2 = 0x03fffffe
+# 0x14000000 | 0x03fffffe = 0x17fffffe
+# CHECK: Disassembly of section .R_AARCH64_JUMP26:
+# CHECK-NEXT: jump26:
+# CHECK-NEXT: 11038: fe ff ff 17 b #-8
+
+.section .R_AARCH64_LDST32_ABS_LO12_NC,"ax",@progbits
+ldst32:
+ ldr s4, [x5, :lo12:foo32]
+foo32:
+ .asciz "foo"
+ .size mystr, 3
+
+# S = 0x1103c, A = 0x4
+# R = ((S + A) & 0xFFC) << 8 = 0x00004000
+# 0x00004000 | 0xbd4000a4 = 0xbd4040a4
+# CHECK: Disassembly of section .R_AARCH64_LDST32_ABS_LO12_NC:
+# CHECK-NEXT: ldst32:
+# CHECK-NEXT: 1103c: a4 40 40 bd ldr s4, [x5, #64]
+
+.section .R_AARCH64_LDST8_ABS_LO12_NC,"ax",@progbits
+ldst8:
+ ldrsb x11, [x13, :lo12:foo8]
+foo8:
+ .asciz "foo"
+ .size mystr, 3
+
+# S = 0x11044, A = 0x4
+# R = ((S + A) & 0xFFF) << 10 = 0x00012000
+# 0x00012000 | 0x398001ab = 0x398121ab
+# CHECK: Disassembly of section .R_AARCH64_LDST8_ABS_LO12_NC:
+# CHECK-NEXT: ldst8:
+# CHECK-NEXT: 11044: ab 21 81 39 ldrsb x11, [x13, #72]
diff --git a/test/ELF/allow-multiple-definition.s b/test/ELF/allow-multiple-definition.s
new file mode 100644
index 000000000000..89ea8c865822
--- /dev/null
+++ b/test/ELF/allow-multiple-definition.s
@@ -0,0 +1,29 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/allow-multiple-definition.s -o %t2
+# RUN: not ld.lld %t1 %t2 -o %t3
+# RUN: ld.lld --allow-multiple-definition %t1 %t2 -o %t3
+# RUN: ld.lld --allow-multiple-definition %t2 %t1 -o %t4
+# RUN: llvm-objdump -d %t3 | FileCheck %s
+# RUN: llvm-objdump -d %t4 | FileCheck -check-prefix=REVERT %s
+
+# inputs contain different constants for instuction movl.
+# Tests below checks that order of files in command line
+# affects on what symbol will be used.
+# If flag allow-multiple-definition is enabled the first
+# meet symbol should be used.
+
+# CHECK: _bar:
+# CHECK-NEXT: 11000: b8 01 00 00 00 movl $1, %eax
+
+# REVERT: _bar:
+# REVERT-NEXT: 11000: b8 02 00 00 00 movl $2, %eax
+
+.globl _bar
+.type _bar, @function
+_bar:
+ mov $1, %eax
+
+.globl _start
+_start:
diff --git a/test/ELF/allow-shlib-undefined.s b/test/ELF/allow-shlib-undefined.s
new file mode 100644
index 000000000000..541a7e12007b
--- /dev/null
+++ b/test/ELF/allow-shlib-undefined.s
@@ -0,0 +1,25 @@
+# --allow-shlib-undefined and --no-allow-shlib-undefined are fully
+# ignored in linker implementation.
+# --allow-shlib-undefined is set by default
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+# RUN: %p/Inputs/allow-shlib-undefined.s -o %t
+# RUN: ld.lld -shared %t -o %t.so
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
+
+# Executable: should link with DSO containing undefined symbols in any case.
+# RUN: ld.lld %t1 %t.so -o %t2
+# RUN: ld.lld --no-allow-shlib-undefined %t1 %t.so -o %t2
+# RUN: ld.lld --allow-shlib-undefined %t1 %t.so -o %t2
+
+# DSO with undefines:
+# should link with or without any of these options.
+# RUN: ld.lld -shared %t -o %t.so
+# RUN: ld.lld -shared --allow-shlib-undefined %t -o %t.so
+# RUN: ld.lld -shared --no-allow-shlib-undefined %t -o %t.so
+
+# Executable still should not link when have undefines inside.
+# RUN: not ld.lld %t -o %t.so
+
+.globl _start
+_start:
+ call _shared
diff --git a/test/ELF/archive.s b/test/ELF/archive.s
new file mode 100644
index 000000000000..41d74451cdd6
--- /dev/null
+++ b/test/ELF/archive.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/archive.s -o %t2
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/archive2.s -o %t3
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/archive3.s -o %t4
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/archive4.s -o %t5
+# RUN: llvm-ar rcs %tar %t2 %t3 %t4
+# RUN: ld.lld %t %tar %t5 -o %tout
+# RUN: llvm-nm %tout | FileCheck %s
+# REQUIRES: x86
+
+# Nothing here. Just needed for the linker to create a undefined _start symbol.
+
+.quad end
+
+.weak foo
+.quad foo
+
+.weak bar
+.quad bar
+
+
+# CHECK: T _start
+# CHECK-NEXT: T bar
+# CHECK-NEXT: T end
+# CHECK-NEXT: w foo
+
+
+# Test that the hitting the first object file after having a lazy symbol for
+# _start is handled correctly.
+# RUN: ld.lld %tar %t -o %tout
+# RUN: llvm-nm %tout | FileCheck --check-prefix=AR-FIRST %s
+
+# AR-FIRST: T _start
+# AR-FIRST-NEXT: w bar
+# AR-FIRST-NEXT: T end
+# AR-FIRST-NEXT: w foo
diff --git a/test/ELF/as-needed.s b/test/ELF/as-needed.s
new file mode 100644
index 000000000000..2c5174d54077
--- /dev/null
+++ b/test/ELF/as-needed.s
@@ -0,0 +1,44 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared2.s -o %t3.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared3.s -o %t4.o
+// RUN: ld.lld -shared %t2.o -soname shared1 -o %t2.so
+// RUN: ld.lld -shared %t3.o -soname shared2 -o %t3.so
+// RUN: ld.lld -shared %t4.o -soname shared3 -o %t4.so
+
+/// Check if --as-needed actually works.
+
+// RUN: ld.lld %t.o %t2.so %t3.so %t4.so -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
+
+// RUN: ld.lld --as-needed %t.o %t2.so %t3.so %t4.so -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck -check-prefix=CHECK2 %s
+
+// RUN: ld.lld --as-needed %t.o %t2.so --no-as-needed %t3.so %t4.so -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
+
+/// GROUP directive is the same as --as-needed.
+
+// RUN: echo "GROUP(" %t2.so %t3.so %t4.so ")" > %t.script
+// RUN: ld.lld %t.o %t.script -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
+
+// RUN: echo "GROUP(AS_NEEDED(" %t2.so %t3.so %t4.so "))" > %t.script
+// RUN: ld.lld %t.o %t.script -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck -check-prefix=CHECK2 %s
+
+// CHECK: NEEDED SharedLibrary (shared1)
+// CHECK: NEEDED SharedLibrary (shared2)
+// CHECK: NEEDED SharedLibrary (shared3)
+
+// CHECK2: NEEDED SharedLibrary (shared1)
+// CHECK2-NOT: NEEDED SharedLibrary (shared2)
+// CHECK2-NOT: NEEDED SharedLibrary (shared3)
+
+.global _start
+_start:
+.long bar
+.long zed
+.weak baz
+ call baz
diff --git a/test/ELF/basic-aarch64.s b/test/ELF/basic-aarch64.s
new file mode 100644
index 000000000000..28fb10d82edf
--- /dev/null
+++ b/test/ELF/basic-aarch64.s
@@ -0,0 +1,193 @@
+# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-freebsd %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t2 \
+# RUN: | FileCheck %s
+# REQUIRES: aarch64
+
+# exits with return code 42 on FreeBSD/AArch64
+.globl _start;
+_start:
+ mov x0, 42
+ mov x8, 1
+ svc 0
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 64-bit (0x2)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: FreeBSD (0x9)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_AARCH64 (0xB7)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: [[ENTRY:0x[0-9A-F]+]]
+# CHECK-NEXT: ProgramHeaderOffset: 0x40
+# CHECK-NEXT: SectionHeaderOffset: 0x1088
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 64
+# CHECK-NEXT: ProgramHeaderEntrySize: 56
+# CHECK-NEXT: ProgramHeaderCount: 4
+# CHECK-NEXT: SectionHeaderEntrySize: 64
+# CHECK-NEXT: SectionHeaderCount: 5
+# CHECK-NEXT: StringTableSectionIndex: 3
+# CHECK-NEXT: }
+# CHECK-NEXT: Sections [
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Type: SHT_NULL (0x0)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .text
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x11000
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: Size: 12
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .symtab
+# CHECK-NEXT: Type: SHT_SYMTAB (0x2)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1010
+# CHECK-NEXT: Size: 72
+# CHECK-NEXT: Link: 4
+# CHECK-NEXT: Info: 2
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 24
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 3
+# CHECK-NEXT: Name: .shstrtab
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1058
+# CHECK-NEXT: Size: 33
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 4
+# CHECK-NEXT: Name: .strtab (17)
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1079
+# CHECK-NEXT: Size: 13
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: $x.0
+# CHECK-NEXT: Value: 0x11000
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _start
+# CHECK-NEXT: Value: [[ENTRY]]
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x40
+# CHECK-NEXT: VirtualAddress: 0x10040
+# CHECK-NEXT: PhysicalAddress: 0x10040
+# CHECK-NEXT: FileSize: 224
+# CHECK-NEXT: MemSize: 224
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x10000
+# CHECK-NEXT: PhysicalAddress: 0x10000
+# CHECK-NEXT: FileSize: 288
+# CHECK-NEXT: MemSize: 288
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: VirtualAddress: 0x11000
+# CHECK-NEXT: PhysicalAddress: 0x11000
+# CHECK-NEXT: FileSize: 12
+# CHECK-NEXT: MemSize: 12
+# CHECK-NEXT: Flags [ (0x5)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_X (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
diff --git a/test/ELF/basic-freebsd.s b/test/ELF/basic-freebsd.s
new file mode 100644
index 000000000000..375fdb5f8078
--- /dev/null
+++ b/test/ELF/basic-freebsd.s
@@ -0,0 +1,25 @@
+# Verify that OSABI is set to the correct value.
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -file-headers %t2 | FileCheck %s
+# REQUIRES: x86
+
+.globl _start
+_start:
+ mov $1, %rax
+ mov $42, %rdi
+ syscall
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 64-bit (0x2)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: FreeBSD (0x9)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_X86_64 (0x3E)
diff --git a/test/ELF/basic-mips.s b/test/ELF/basic-mips.s
new file mode 100644
index 000000000000..0c8733f8c9c4
--- /dev/null
+++ b/test/ELF/basic-mips.s
@@ -0,0 +1,272 @@
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -o %t.exe
+# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t.exe \
+# RUN: | FileCheck %s
+
+# REQUIRES: mips
+
+# Exits with return code 1 on Linux.
+ .globl __start
+__start:
+ li $a0,1
+ li $v0,4001
+ syscall
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 32-bit (0x1)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_MIPS (0x8)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x20000
+# CHECK-NEXT: ProgramHeaderOffset: 0x34
+# CHECK-NEXT: SectionHeaderOffset: 0x20084
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: EF_MIPS_ABI_O32
+# CHECK-NEXT: EF_MIPS_ARCH_32R2
+# CHECK-NEXT: EF_MIPS_CPIC
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 52
+# CHECK-NEXT: ProgramHeaderEntrySize: 32
+# CHECK-NEXT: ProgramHeaderCount: 5
+# CHECK-NEXT: SectionHeaderEntrySize: 40
+# CHECK-NEXT: SectionHeaderCount: 9
+# CHECK-NEXT: StringTableSectionIndex: 7
+# CHECK-NEXT: }
+# CHECK-NEXT: Sections [
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Type: SHT_NULL (0x0)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .reginfo
+# CHECK-NEXT: Type: SHT_MIPS_REGINFO (0x70000006)
+# CHECK-NEXT: Flags [ (0x2)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x100D4
+# CHECK-NEXT: Offset: 0xD4
+# CHECK-NEXT: Size: 24
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 24
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .MIPS.abiflags
+# CHECK-NEXT: Type: SHT_MIPS_ABIFLAGS (0x7000002A)
+# CHECK-NEXT: Flags [ (0x2)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x100F0
+# CHECK-NEXT: Offset: 0xF0
+# CHECK-NEXT: Size: 24
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 3
+# CHECK-NEXT: Name: .text (1)
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x20000
+# CHECK-NEXT: Offset: 0x10000
+# CHECK-NEXT: Size: 12
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 16
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 4
+# CHECK-NEXT: Name: .data
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x3)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_WRITE (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x30000
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 16
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 5
+# CHECK-NEXT: Name: .bss (7)
+# CHECK-NEXT: Type: SHT_NOBITS (0x8)
+# CHECK-NEXT: Flags [ (0x3)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_WRITE (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x30000
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 16
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 6
+# CHECK-NEXT: Name: .symtab
+# CHECK-NEXT: Type: SHT_SYMTAB (0x2)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: Size: 48
+# CHECK-NEXT: Link: 8
+# CHECK-NEXT: Info: 1
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 16
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 7
+# CHECK-NEXT: Name: .shstrtab
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x20030
+# CHECK-NEXT: Size: 68
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 8
+# CHECK-NEXT: Name: .strtab (46)
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x20074
+# CHECK-NEXT: Size: 13
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _gp
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Absolute (0xFFF1)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: __start
+# CHECK-NEXT: Value: 0x20000
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x34
+# CHECK-NEXT: VirtualAddress: 0x10034
+# CHECK-NEXT: PhysicalAddress: 0x10034
+# CHECK-NEXT: FileSize: 160
+# CHECK-NEXT: MemSize: 160
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x10000
+# CHECK-NEXT: PhysicalAddress: 0x10000
+# CHECK-NEXT: FileSize: 264
+# CHECK-NEXT: MemSize: 264
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x10000
+# CHECK-NEXT: VirtualAddress: 0x20000
+# CHECK-NEXT: PhysicalAddress: 0x20000
+# CHECK-NEXT: FileSize: 12
+# CHECK-NEXT: MemSize: 12
+# CHECK-NEXT: Flags [ (0x5)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_X (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: VirtualAddress: 0x30000
+# CHECK-NEXT: PhysicalAddress: 0x30000
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT:]
diff --git a/test/ELF/basic.s b/test/ELF/basic.s
new file mode 100644
index 000000000000..47b28d41b5bb
--- /dev/null
+++ b/test/ELF/basic.s
@@ -0,0 +1,216 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t2 \
+# RUN: | FileCheck %s
+
+# exits with return code 42 on linux
+.globl _start;
+_start:
+ mov $60, %rax
+ mov $42, %rdi
+ syscall
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 64-bit (0x2)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_X86_64 (0x3E)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: [[ENTRY:0x[0-9A-F]+]]
+# CHECK-NEXT: ProgramHeaderOffset: 0x40
+# CHECK-NEXT: SectionHeaderOffset: 0x1070
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 64
+# CHECK-NEXT: ProgramHeaderEntrySize: 56
+# CHECK-NEXT: ProgramHeaderCount: 4
+# CHECK-NEXT: SectionHeaderEntrySize: 64
+# CHECK-NEXT: SectionHeaderCount: 5
+# CHECK-NEXT: StringTableSectionIndex: 3
+# CHECK-NEXT: }
+# CHECK-NEXT: Sections [
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Type: SHT_NULL (0x0)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .text
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x11000
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: Size: 16
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .symtab
+# CHECK-NEXT: Type: SHT_SYMTAB (0x2)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1010
+# CHECK-NEXT: Size: 48
+# CHECK-NEXT: Link: 4
+# CHECK-NEXT: Info: 1
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 24
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 3
+# CHECK-NEXT: Name: .shstrtab
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1040
+# CHECK-NEXT: Size: 33
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 4
+# CHECK-NEXT: Name: .strtab (17)
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x1061
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: Symbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: _start
+# CHECK-NEXT: Value: [[ENTRY]]
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x40
+# CHECK-NEXT: VirtualAddress: 0x10040
+# CHECK-NEXT: PhysicalAddress: 0x10040
+# CHECK-NEXT: FileSize: 224
+# CHECK-NEXT: MemSize: 224
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x10000
+# CHECK-NEXT: PhysicalAddress: 0x10000
+# CHECK-NEXT: FileSize: 288
+# CHECK-NEXT: MemSize: 288
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: VirtualAddress: 0x11000
+# CHECK-NEXT: PhysicalAddress: 0x11000
+# CHECK-NEXT: FileSize: 16
+# CHECK-NEXT: MemSize: 16
+# CHECK-NEXT: Flags [ (0x5)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_X (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# Test for the response file
+# RUN: echo " -o %t2" > %t.responsefile
+# RUN: ld.lld %t @%t.responsefile
+# RUN: llvm-readobj -file-headers -sections -program-headers -symbols %t2 \
+# RUN: | FileCheck %s
+
+# RUN: not ld.lld %t.foo -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=MISSING %s
+# MISSING: cannot open {{.*}}.foo: {{[Nn]}}o such file or directory
+
+# RUN: not ld.lld -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=NO_INPUT %s
+# NO_INPUT: no input files.
+
+# RUN: not ld.lld %t.no.such.file -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=CANNOT_OPEN %s
+# CANNOT_OPEN: cannot open {{.*}}.no.such.file: {{[Nn]}}o such file or directory
+
+# RUN: not ld.lld %t -o 2>&1 | FileCheck --check-prefix=NO_O_VAL %s
+# NO_O_VAL: missing arg value for "-o", expected 1 argument.
+
+# RUN: not ld.lld --foo 2>&1 | FileCheck --check-prefix=UNKNOWN %s
+# UNKNOWN: unknown argument: --foo
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld %t %t -o %t2 2>&1 | FileCheck --check-prefix=DUP %s
+# DUP: duplicate symbol: _start in {{.*}} and {{.*}}
+
+# RUN: not ld.lld %t -o %t -m wrong_emul 2>&1 | FileCheck --check-prefix=UNKNOWN_EMUL %s
+# UNKNOWN_EMUL: Unknown emulation: wrong_emul
diff --git a/test/ELF/basic32.s b/test/ELF/basic32.s
new file mode 100644
index 000000000000..e5b5c359d59f
--- /dev/null
+++ b/test/ELF/basic32.s
@@ -0,0 +1,163 @@
+# RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -file-headers -sections -program-headers %t2 | FileCheck %s
+# REQUIRES: x86
+
+# exits with return code 42 on linux
+.globl _start;
+_start:
+ mov $1, %eax
+ mov $42, %ebx
+ int $0x80
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 32-bit (0x1)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_386 (0x3)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x11000
+# CHECK-NEXT: ProgramHeaderOffset: 0x34
+# CHECK-NEXT: SectionHeaderOffset: 0x1058
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 52
+# CHECK-NEXT: ProgramHeaderEntrySize: 32
+# CHECK-NEXT: ProgramHeaderCount: 4
+# CHECK-NEXT: SectionHeaderEntrySize: 40
+# CHECK-NEXT: SectionHeaderCount: 5
+# CHECK-NEXT: StringTableSectionIndex: 3
+# CHECK-NEXT: }
+# CHECK-NEXT: Sections [
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Type: SHT_NULL (0x0)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .text
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x11000
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: Size: 12
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .symtab
+# CHECK-NEXT: Type: SHT_SYMTAB
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x100C
+# CHECK-NEXT: Size: 32
+# CHECK-NEXT: Link: 4
+# CHECK-NEXT: Info: 1
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 16
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 3
+# CHECK-NEXT: Name: .shstrtab
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x102C
+# CHECK-NEXT: Size: 33
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 4
+# CHECK-NEXT: Name: .strtab (17)
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x104D
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x34
+# CHECK-NEXT: VirtualAddress: 0x10034
+# CHECK-NEXT: PhysicalAddress: 0x10034
+# CHECK-NEXT: FileSize: 128
+# CHECK-NEXT: MemSize: 128
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x10000
+# CHECK-NEXT: PhysicalAddress: 0x10000
+# CHECK-NEXT: FileSize: 180
+# CHECK-NEXT: MemSize: 180
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x1000
+# CHECK-NEXT: VirtualAddress: 0x11000
+# CHECK-NEXT: PhysicalAddress: 0x11000
+# CHECK-NEXT: FileSize: 12
+# CHECK-NEXT: MemSize: 12
+# CHECK-NEXT: Flags [ (0x5)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_X (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4096
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
diff --git a/test/ELF/basic64be.s b/test/ELF/basic64be.s
new file mode 100644
index 000000000000..9534e05b47e0
--- /dev/null
+++ b/test/ELF/basic64be.s
@@ -0,0 +1,260 @@
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
+# RUN: ld.lld -discard-all %t -o %t2
+# RUN: llvm-readobj -file-headers -sections -section-data -program-headers %t2 | FileCheck %s
+# REQUIRES: ppc
+
+# exits with return code 42 on linux
+.section ".opd","aw"
+.global _start
+_start:
+.quad .Lfoo,.TOC.@tocbase,0
+
+# generate .toc and .toc1 sections to make sure that the ordering is as
+# intended (.toc before .toc1, and both before .opd).
+.section ".toc1","aw"
+.quad 22, 37, 89, 47
+
+.section ".toc","aw"
+.quad 45, 86, 72, 24
+
+.text
+.Lfoo:
+ li 0,1
+ li 3,42
+ sc
+
+# CHECK: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 64-bit (0x2)
+# CHECK-NEXT: DataEncoding: BigEndian (0x2)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_PPC64 (0x15)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x10020040
+# CHECK-NEXT: ProgramHeaderOffset: 0x40
+# CHECK-NEXT: SectionHeaderOffset: 0x200C8
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 64
+# CHECK-NEXT: ProgramHeaderEntrySize: 56
+# CHECK-NEXT: ProgramHeaderCount: 5
+# CHECK-NEXT: SectionHeaderEntrySize: 64
+# CHECK-NEXT: SectionHeaderCount: 8
+# CHECK-NEXT: StringTableSectionIndex: 6
+# CHECK-NEXT: }
+# CHECK-NEXT: Sections [
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 0
+# CHECK-NEXT: Name: (0)
+# CHECK-NEXT: Type: SHT_NULL (0x0)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 1
+# CHECK-NEXT: Name: .text (1)
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_EXECINSTR (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x10010000
+# CHECK-NEXT: Offset: 0x10000
+# CHECK-NEXT: Size: 12
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 2
+# CHECK-NEXT: Name: .toc
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x3)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_WRITE (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x10020000
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: Size: 32
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 00000000 0000002D 00000000 00000056 |.......-.......V|
+# CHECK-NEXT: 0010: 00000000 00000048 00000000 00000018 |.......H........|
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 3
+# CHECK-NEXT: Name: .toc1
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x3)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_WRITE (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x10020020
+# CHECK-NEXT: Offset: 0x20020
+# CHECK-NEXT: Size: 32
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 00000000 00000016 00000000 00000025 |...............%|
+# CHECK-NEXT: 0010: 00000000 00000059 00000000 0000002F |.......Y......./|
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 4
+# CHECK-NEXT: Name: .opd
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x3)
+# CHECK-NEXT: SHF_ALLOC (0x2)
+# CHECK-NEXT: SHF_WRITE (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x10020040
+# CHECK-NEXT: Offset: 0x20040
+# CHECK-NEXT: Size: 24
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 00000000 10010000 00000000 00008000 |................|
+# CHECK-NEXT: 0010: 00000000 00000000 |........|
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 5
+# CHECK-NEXT: Name: .symtab
+# CHECK-NEXT: Type: SHT_SYMTAB (0x2)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x20058
+# CHECK-NEXT: Size: 48
+# CHECK-NEXT: Link: 7
+# CHECK-NEXT: Info: 1
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 24
+# CHECK-NEXT: SectionData (
+# CHECK: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 6
+# CHECK-NEXT: Name: .shstrtab
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x20088
+# CHECK-NEXT: Size: 49
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK: )
+# CHECK-NEXT: }
+# CHECK-NEXT: Section {
+# CHECK-NEXT: Index: 7
+# CHECK-NEXT: Name: .strtab (27)
+# CHECK-NEXT: Type: SHT_STRTAB (0x3)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x200B9
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 1
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 005F7374 61727400 |._start.|
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+# CHECK-NEXT: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x40
+# CHECK-NEXT: VirtualAddress: 0x10000040
+# CHECK-NEXT: PhysicalAddress: 0x10000040
+# CHECK-NEXT: FileSize: 280
+# CHECK-NEXT: MemSize: 280
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x10000000
+# CHECK-NEXT: PhysicalAddress: 0x10000000
+# CHECK-NEXT: FileSize: 344
+# CHECK-NEXT: MemSize: 344
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x10000
+# CHECK-NEXT: VirtualAddress: 0x10010000
+# CHECK-NEXT: PhysicalAddress: 0x10010000
+# CHECK-NEXT: FileSize: 12
+# CHECK-NEXT: MemSize: 12
+# CHECK-NEXT: Flags [ (0x5)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_X (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x20000
+# CHECK-NEXT: VirtualAddress: 0x10020000
+# CHECK-NEXT: PhysicalAddress: 0x10020000
+# CHECK-NEXT: FileSize: 88
+# CHECK-NEXT: MemSize: 88
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_W (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 65536
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK (0x6474E551)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [ (0x6)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: PF_W (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ] \ No newline at end of file
diff --git a/test/ELF/bss.s b/test/ELF/bss.s
new file mode 100644
index 000000000000..d0b43ec5a262
--- /dev/null
+++ b/test/ELF/bss.s
@@ -0,0 +1,27 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-readobj -sections %t2 | FileCheck %s
+// REQUIRES: x86
+
+// Test that bss takes no space on disk.
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x11000
+// CHECK-NEXT: Offset: 0x1000
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: }
+
+ .global _start
+_start:
+
+ .bss
+ .zero 4
diff --git a/test/ELF/comdat.s b/test/ELF/comdat.s
new file mode 100644
index 000000000000..4f8955e289d5
--- /dev/null
+++ b/test/ELF/comdat.s
@@ -0,0 +1,72 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/comdat.s -o %t2.o
+// RUN: ld.lld -shared %t.o %t.o %t2.o -o %t
+// RUN: llvm-objdump -d %t | FileCheck %s
+// RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=READ %s
+// REQUIRES: x86
+
+ .section .text2,"axG",@progbits,foo,comdat,unique,0
+foo:
+ nop
+
+// CHECK: Disassembly of section .text2:
+// CHECK-NEXT: foo:
+// CHECK-NEXT: 1000: {{.*}} nop
+// CHECK-NOT: nop
+
+ .section bar, "ax"
+ call foo
+
+// CHECK: Disassembly of section bar:
+// CHECK-NEXT: bar:
+// 0x1000 - 0x1001 - 5 = -6
+// 0 - 0x1006 - 5 = -4107
+// CHECK-NEXT: 1001: {{.*}} callq -6
+// CHECK-NEXT: 1006: {{.*}} callq -4107
+
+ .section .text3,"axG",@progbits,zed,comdat,unique,0
+
+
+// READ: Name: .text2
+// READ-NEXT: Type: SHT_PROGBITS
+// READ-NEXT: Flags [
+// READ-NEXT: SHF_ALLOC
+// READ-NEXT: SHF_EXECINSTR
+// READ-NEXT: ]
+
+// READ: Name: .text3
+// READ-NEXT: Type: SHT_PROGBITS
+// READ-NEXT: Flags [
+// READ-NEXT: SHF_ALLOC
+// READ-NEXT: SHF_EXECINSTR
+// READ-NEXT: ]
+
+// READ: Symbols [
+// READ-NEXT: Symbol {
+// READ-NEXT: Name: (0)
+// READ-NEXT: Value: 0x0
+// READ-NEXT: Size: 0
+// READ-NEXT: Binding: Local
+// READ-NEXT: Type: None
+// READ-NEXT: Other: 0
+// READ-NEXT: Section: Undefined
+// READ-NEXT: }
+// READ-NEXT: Symbol {
+// READ-NEXT: Name: foo
+// READ-NEXT: Value
+// READ-NEXT: Size: 0
+// READ-NEXT: Binding: Local
+// READ-NEXT: Type: None
+// READ-NEXT: Other: 0
+// READ-NEXT: Section: .text
+// READ-NEXT: }
+// READ-NEXT: Symbol {
+// READ-NEXT: Name: abc
+// READ-NEXT: Value: 0x0
+// READ-NEXT: Size: 0
+// READ-NEXT: Binding: Global
+// READ-NEXT: Type: None
+// READ-NEXT: Other: 0
+// READ-NEXT: Section: Undefined
+// READ-NEXT: }
+// READ-NEXT: ]
diff --git a/test/ELF/common.s b/test/ELF/common.s
new file mode 100644
index 000000000000..67cedbccb866
--- /dev/null
+++ b/test/ELF/common.s
@@ -0,0 +1,56 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/common.s -o %t2
+// RUN: ld.lld %t %t2 -o %t3
+// RUN: llvm-readobj -t -s %t3 | FileCheck %s
+// REQUIRES: x86
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x11000
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 22
+
+// CHECK: Name: sym1
+// CHECK-NEXT: Value: 0x11004
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+
+// CHECK: Name: sym2
+// CHECK-NEXT: Value: 0x1100C
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+
+// CHECK: Name: sym3
+// CHECK-NEXT: Value: 0x11014
+// CHECK-NEXT: Size: 2
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+
+// CHECK: Name: sym4
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+
+
+.globl _start
+_start:
+
+.comm sym1,4,4
+.comm sym2,8,4
+.comm sym3,2,2
+.comm sym4,4,2
diff --git a/test/ELF/default-output.s b/test/ELF/default-output.s
new file mode 100644
index 000000000000..8da3bb40eac0
--- /dev/null
+++ b/test/ELF/default-output.s
@@ -0,0 +1,16 @@
+# REQUIRES: x86
+# Verify that default output filename is a.out.
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: mkdir -p %t.dir
+# RUN: cd %t.dir
+# RUN: rm -f a.out
+# RUN: not llvm-readobj a.out > /dev/null 2>&1
+# RUN: ld.lld %t
+# RUN: llvm-readobj a.out > /dev/null 2>&1
+
+.globl _start;
+_start:
+ mov $60, %rax
+ mov $42, %rdi
+ syscall
diff --git a/test/ELF/discard-locals.s b/test/ELF/discard-locals.s
new file mode 100644
index 000000000000..073e891c3143
--- /dev/null
+++ b/test/ELF/discard-locals.s
@@ -0,0 +1,50 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -save-temp-labels %s -o %t
+// RUN: ld.lld -discard-locals %t -o %t2
+// RUN: llvm-readobj -s -sd -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+
+.text
+.Lmyvar:
+.Lmyothervar:
+
+// CHECK: Section {
+// CHECK: Name: .strtab
+// CHECK-NEXT: Type: SHT_STRTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 005F7374 61727400 |._start.|
+// CHECK-NEXT: )
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECk-NEXT: ]
diff --git a/test/ELF/discard-merge-locals.s b/test/ELF/discard-merge-locals.s
new file mode 100644
index 000000000000..51676da192ca
--- /dev/null
+++ b/test/ELF/discard-merge-locals.s
@@ -0,0 +1,24 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %t2 -shared
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+ leaq .L.str(%rip), %rdi
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+.L.str:
+ .asciz "foobar"
+
+// Test that the .L symbol is omitted
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/discard-merge-unnamed.s b/test/ELF/discard-merge-unnamed.s
new file mode 100644
index 000000000000..bd0058cbd7db
--- /dev/null
+++ b/test/ELF/discard-merge-unnamed.s
@@ -0,0 +1,16 @@
+// RUN: ld.lld %p/Inputs/discard-merge-unnamed.o -o %t2 -shared
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+
+// Test that the unnamed symbol is SHF_MERGE is omitted.
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/discard-none.s b/test/ELF/discard-none.s
new file mode 100644
index 000000000000..a9d54bae9ace
--- /dev/null
+++ b/test/ELF/discard-none.s
@@ -0,0 +1,54 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -save-temp-labels %s -o %t
+// RUN: ld.lld -discard-none -shared %t -o %t2
+// RUN: llvm-readobj -s -sd -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+.text
+.Lmyvar:
+.Lmyothervar:
+
+// CHECK: Section {
+// CHECK: Name: .strtab
+// CHECK-NEXT: Type: SHT_STRTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 002E4C6D 79766172 002E4C6D 796F7468 |..Lmyvar..Lmyoth|
+// CHECK-NEXT: 0010: 65727661 7200 |ervar.|
+// CHECK-NEXT: )
+// CHECK-NEXT: }
+
+// CHECK: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: .Lmyothervar
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: .Lmyvar
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
diff --git a/test/ELF/dt_flags.s b/test/ELF/dt_flags.s
new file mode 100644
index 000000000000..a1d8d77433a5
--- /dev/null
+++ b/test/ELF/dt_flags.s
@@ -0,0 +1,21 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld -shared %t -o %t.so
+# RUN: ld.lld -z now -z nodelete -z origin -Bsymbolic %t %t.so -o %t1
+# RUN: ld.lld %t %t.so -o %t2
+# RUN: llvm-readobj -dynamic-table %t1 | FileCheck -check-prefix=FLAGS %s
+# RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s
+
+# FLAGS: DynamicSection [
+# FLAGS: 0x000000000000001E FLAGS ORIGIN SYMBOLIC BIND_NOW
+# FLAGS: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE ORIGIN
+# FLAGS: ]
+
+# CHECK: DynamicSection [
+# CHECK-NOT: 0x000000000000001E FLAGS ORIGIN SYMBOLIC BIND_NOW
+# CHECK-NOT: 0x000000006FFFFFFB FLAGS_1 NOW NODELETE ORIGIN
+# CHECK: ]
+
+.globl _start
+_start:
diff --git a/test/ELF/duplicate-internal.s b/test/ELF/duplicate-internal.s
new file mode 100644
index 000000000000..2395a6cae0db
--- /dev/null
+++ b/test/ELF/duplicate-internal.s
@@ -0,0 +1,11 @@
+# Should print an expected message in case of conflict with an internally generated symbol.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s
+
+# CHECK: duplicate symbol: _gp in (internal) and {{.*}}
+
+# REQUIRES: mips
+
+ .globl _gp
+_gp = 0
diff --git a/test/ELF/dynamic-reloc-index.s b/test/ELF/dynamic-reloc-index.s
new file mode 100644
index 000000000000..2d38c014a307
--- /dev/null
+++ b/test/ELF/dynamic-reloc-index.s
@@ -0,0 +1,21 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -r %t | FileCheck %s
+
+// We used to record the wrong symbol index for this test
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: 0x13018 R_X86_64_JUMP_SLOT bar 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+ .global foobar
+foobar:
+ .global zedx
+zedx:
+ .global _start
+_start:
+.quad bar
diff --git a/test/ELF/dynamic-reloc-weak.s b/test/ELF/dynamic-reloc-weak.s
new file mode 100644
index 000000000000..fe1b7eedb6d7
--- /dev/null
+++ b/test/ELF/dynamic-reloc-weak.s
@@ -0,0 +1,33 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -r %t | FileCheck %s
+// REQUIRES: x86
+
+ .globl _start
+_start:
+ .type sym1,@function
+ .weak sym1
+ .long sym1@gotpcrel
+
+ .type sym2,@function
+ .weak sym2
+ .long sym2@plt
+
+ .type sym3,@function
+ .weak sym3
+ .quad sym3
+
+// Both gold and bfd ld will produce a relocation for sym1 and sym2 only. That
+// That seems odd. If the dynamic linker must get a chance to resolve sym1
+// and sym2, that should also be the case for sym3.
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x{{.*}} R_X86_64_GLOB_DAT sym1 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: 0x{{.*}} R_X86_64_JUMP_SLOT sym2 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ] \ No newline at end of file
diff --git a/test/ELF/dynamic-reloc.s b/test/ELF/dynamic-reloc.s
new file mode 100644
index 000000000000..ab2a2405726b
--- /dev/null
+++ b/test/ELF/dynamic-reloc.s
@@ -0,0 +1,64 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/dynamic-reloc.s -o %t3.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t3.o %t2.so -o %t
+// RUN: llvm-readobj -dynamic-table -r --expand-relocs -s %t | FileCheck %s
+// REQUIRES: x86
+
+// CHECK: Index: 1
+// CHECK-NEXT: Name: .dynsym
+
+// CHECK: Name: .rela.plt
+// CHECK-NEXT: Type: SHT_RELA
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[RELAADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[RELASIZE:.*]]
+// CHECK-NEXT: Link: 1
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 24
+
+// CHECK: Name: .text
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x11000
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset: 0x13018
+// CHECK-NEXT: Type: R_X86_64_JUMP_SLOT
+// CHECK-NEXT: Symbol: bar
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: DynamicSection [
+// CHECK-NEXT: Tag Type Name/Value
+// CHECK-NEXT: 0x0000000000000017 JMPREL
+// CHECK-NEXT: 0x0000000000000002 PLTRELSZ 24 (bytes)
+// CHECK-NEXT: 0x0000000000000003 PLTGOT
+// CHECK-NEXT: 0x0000000000000014 PLTREL RELA
+// CHECK-NEXT: 0x0000000000000006 SYMTAB
+// CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes)
+// CHECK-NEXT: 0x0000000000000005 STRTAB
+// CHECK-NEXT: 0x000000000000000A STRSZ
+// CHECK-NEXT: 0x0000000000000004 HASH
+// CHECK-NEXT: 0x0000000000000001 NEEDED SharedLibrary ({{.*}}2.so)
+// CHECK-NEXT: 0x0000000000000000 NULL 0x0
+// CHECK-NEXT: ]
+
+.global _start
+_start:
+.quad bar + 0x42
+.weak foo
+.quad foo
+call main
diff --git a/test/ELF/eh-align-cie.s b/test/ELF/eh-align-cie.s
new file mode 100644
index 000000000000..e85cbd27d4fd
--- /dev/null
+++ b/test/ELF/eh-align-cie.s
@@ -0,0 +1,57 @@
+// REQUIRES: x86
+
+ .cfi_startproc
+ .cfi_personality 0x1b, bar
+ .cfi_endproc
+
+.global bar
+.hidden bar
+bar:
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-readobj -s -section-data %t.o | FileCheck --check-prefix=OBJ %s
+
+// Check the size of the CIE (0x18 + 4) an FDE (0x10 + 4)
+// OBJ: Name: .eh_frame
+// OBJ-NEXT: Type:
+// OBJ-NEXT: Flags [
+// OBJ-NEXT: SHF_ALLOC
+// OBJ-NEXT: ]
+// OBJ-NEXT: Address:
+// OBJ-NEXT: Offset:
+// OBJ-NEXT: Size:
+// OBJ-NEXT: Link:
+// OBJ-NEXT: Info:
+// OBJ-NEXT: AddressAlignment:
+// OBJ-NEXT: EntrySize:
+// OBJ-NEXT: SectionData (
+// OBJ-NEXT: 0000: 18000000 00000000 017A5052 00017810
+// OBJ-NEXT: 0010: 061B0000 00001B0C 07089001 10000000
+// OBJ-NEXT: 0020: 20000000 00000000 00000000 00000000
+// OBJ-NEXT: )
+
+
+// RUN: ld.lld %t.o -o %t -shared
+// RUN: llvm-readobj -s -section-data %t | FileCheck %s
+
+// Check that the size of the CIE was changed to (0x1C + 4) and the FDE one was
+// changed to (0x14 + 4)
+
+// CHECK: Name: .eh_frame
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Flags
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 1C000000 00000000 017A5052 00017810
+// CHECK-NEXT: 0010: 061B260E 00001B0C 07089001 00000000
+// CHECK-NEXT: 0020: 14000000 24000000 100E0000 00000000
+// CHECK-NEXT: 0030: 00000000 00000000
+// CHECK-NEXT: )
diff --git a/test/ELF/eh-frame-merge.s b/test/ELF/eh-frame-merge.s
new file mode 100644
index 000000000000..2b0e4a52822d
--- /dev/null
+++ b/test/ELF/eh-frame-merge.s
@@ -0,0 +1,58 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o %t.o -o %t -shared
+// RUN: llvm-readobj -s -section-data %t | FileCheck %s
+
+ .section foo,"ax",@progbits
+ .cfi_startproc
+ nop
+ .cfi_endproc
+
+ .section bar,"axG",@progbits,foo,comdat
+ .cfi_startproc
+ nop
+ nop
+ .cfi_endproc
+
+// FIXME: We could really use a .eh_frame parser.
+// The intention is to show that:
+// * There is only one copy of the CIE
+// * There are two copies of the first FDE
+// * There is only one copy of the second FDE
+
+// CHECK: Name: .eh_frame
+// CHECK-NEXT: Type: SHT_X86_64_UNWIND
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 96
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 14000000 00000000 017A5200 01781001 |
+// CHECK-NEXT: 0010: 1B0C0708 90010000 14000000 1C000000 |
+// CHECK-NEXT: 0020: 180E0000 01000000 00000000 00000000 |
+// CHECK-NEXT: 0030: 14000000 34000000 020E0000 02000000 |
+// CHECK-NEXT: 0040: 00000000 00000000 14000000 4C000000 |
+// CHECK-NEXT: 0050: E90D0000 01000000 00000000 00000000 |
+// CHECK-NEXT: )
+
+// CHECK: Name: foo
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1000
+
+// CHECK: Name: bar
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1002
diff --git a/test/ELF/eh-frame-plt.s b/test/ELF/eh-frame-plt.s
new file mode 100644
index 000000000000..e84d93c7f88b
--- /dev/null
+++ b/test/ELF/eh-frame-plt.s
@@ -0,0 +1,16 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/shared.s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t2.o
+// RUN: ld.lld %t2.o %t.so -o %t
+// RUN: llvm-readobj -r %t | FileCheck %s
+
+ .globl _start
+_start:
+ .cfi_startproc
+ .cfi_personality 3, bar
+ .cfi_endproc
+
+// CHECK: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: R_X86_64_JUMP_SLOT bar 0x0
+// CHECK-NEXT: }
diff --git a/test/ELF/eh-frame-rel.s b/test/ELF/eh-frame-rel.s
new file mode 100644
index 000000000000..a417dc126087
--- /dev/null
+++ b/test/ELF/eh-frame-rel.s
@@ -0,0 +1,7 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o %t.o -o %t -shared
+// We used to try to read the relocations as RELA and error out
+
+ .cfi_startproc
+ .cfi_endproc
diff --git a/test/ELF/eh-frame-type.test b/test/ELF/eh-frame-type.test
new file mode 100644
index 000000000000..f59ab116d7dd
--- /dev/null
+++ b/test/ELF/eh-frame-type.test
@@ -0,0 +1,16 @@
+# RUN: yaml2obj -format elf %s -o %t.o
+# RUN: ld.lld %t.o -o %t -shared
+# RUN: llvm-readobj -s %t | FileCheck %s
+
+# CHECK: Name: .eh_frame
+# CHECK-NEXT: Type: SHT_X86_64_UNWIND
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
diff --git a/test/ELF/ehframe-relocation.s b/test/ELF/ehframe-relocation.s
new file mode 100644
index 000000000000..f952ebc60865
--- /dev/null
+++ b/test/ELF/ehframe-relocation.s
@@ -0,0 +1,29 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t
+// RUN: llvm-readobj -s %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+// CHECK: Name: .eh_frame
+// CHECK-NEXT: Type: SHT_X86_64_UNWIND
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x10120
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 0
+
+// 0x10120 = 65824
+// 0x10120 + 5 = 65829
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: {{.*}} movq 65824, %rax
+// DISASM-NEXT: 11008: {{.*}} movq 65829, %rax
+
+.section .eh_frame,"ax",@unwind
+
+.section .text
+.globl _start
+_start:
+ movq .eh_frame, %rax
+ movq .eh_frame + 5, %rax
diff --git a/test/ELF/empty-archive.s b/test/ELF/empty-archive.s
new file mode 100644
index 000000000000..ffb0a7814419
--- /dev/null
+++ b/test/ELF/empty-archive.s
@@ -0,0 +1,3 @@
+// RUN: llvm-ar rc %t.a
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld -shared %t.o %t.a -o t
diff --git a/test/ELF/emulation.s b/test/ELF/emulation.s
new file mode 100644
index 000000000000..a8a8f398c42c
--- /dev/null
+++ b/test/ELF/emulation.s
@@ -0,0 +1,177 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %tx64
+# RUN: ld.lld -m elf_x86_64 %tx64 -o %t2x64
+# RUN: llvm-readobj -file-headers %t2x64 | FileCheck --check-prefix=X86-64 %s
+# RUN: ld.lld %tx64 -o %t3x64
+# RUN: llvm-readobj -file-headers %t3x64 | FileCheck --check-prefix=X86-64 %s
+# X86-64: ElfHeader {
+# X86-64-NEXT: Ident {
+# X86-64-NEXT: Magic: (7F 45 4C 46)
+# X86-64-NEXT: Class: 64-bit (0x2)
+# X86-64-NEXT: DataEncoding: LittleEndian (0x1)
+# X86-64-NEXT: FileVersion: 1
+# X86-64-NEXT: OS/ABI: SystemV (0x0)
+# X86-64-NEXT: ABIVersion: 0
+# X86-64-NEXT: Unused: (00 00 00 00 00 00 00)
+# X86-64-NEXT: }
+# X86-64-NEXT: Type: Executable (0x2)
+# X86-64-NEXT: Machine: EM_X86_64 (0x3E)
+# X86-64-NEXT: Version: 1
+# X86-64-NEXT: Entry:
+# X86-64-NEXT: ProgramHeaderOffset: 0x40
+# X86-64-NEXT: SectionHeaderOffset:
+# X86-64-NEXT: Flags [ (0x0)
+# X86-64-NEXT: ]
+# X86-64-NEXT: HeaderSize: 64
+# X86-64-NEXT: ProgramHeaderEntrySize: 56
+# X86-64-NEXT: ProgramHeaderCount:
+# X86-64-NEXT: SectionHeaderEntrySize: 64
+# X86-64-NEXT: SectionHeaderCount:
+# X86-64-NEXT: StringTableSectionIndex:
+# X86-64-NEXT: }
+
+# RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %tx86
+# RUN: ld.lld -m elf_i386 %tx86 -o %t2x86
+# RUN: llvm-readobj -file-headers %t2x86 | FileCheck --check-prefix=X86 %s
+# RUN: ld.lld %tx86 -o %t3x86
+# RUN: llvm-readobj -file-headers %t3x86 | FileCheck --check-prefix=X86 %s
+# X86: ElfHeader {
+# X86-NEXT: Ident {
+# X86-NEXT: Magic: (7F 45 4C 46)
+# X86-NEXT: Class: 32-bit (0x1)
+# X86-NEXT: DataEncoding: LittleEndian (0x1)
+# X86-NEXT: FileVersion: 1
+# X86-NEXT: OS/ABI: SystemV (0x0)
+# X86-NEXT: ABIVersion: 0
+# X86-NEXT: Unused: (00 00 00 00 00 00 00)
+# X86-NEXT: }
+# X86-NEXT: Type: Executable (0x2)
+# X86-NEXT: Machine: EM_386 (0x3)
+# X86-NEXT: Version: 1
+# X86-NEXT: Entry:
+# X86-NEXT: ProgramHeaderOffset: 0x34
+# X86-NEXT: SectionHeaderOffset:
+# X86-NEXT: Flags [ (0x0)
+# X86-NEXT: ]
+# X86-NEXT: HeaderSize: 52
+# X86-NEXT: ProgramHeaderEntrySize: 32
+# X86-NEXT: ProgramHeaderCount:
+# X86-NEXT: SectionHeaderEntrySize: 40
+# X86-NEXT: SectionHeaderCount:
+# X86-NEXT: StringTableSectionIndex:
+# X86-NEXT: }
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %tppc64
+# RUN: ld.lld -m elf64ppc %tppc64 -o %t2ppc64
+# RUN: llvm-readobj -file-headers %t2ppc64 | FileCheck --check-prefix=PPC64 %s
+# RUN: ld.lld %tppc64 -o %t3ppc64
+# RUN: llvm-readobj -file-headers %t3ppc64 | FileCheck --check-prefix=PPC64 %s
+# PPC64: ElfHeader {
+# PPC64-NEXT: Ident {
+# PPC64-NEXT: Magic: (7F 45 4C 46)
+# PPC64-NEXT: Class: 64-bit (0x2)
+# PPC64-NEXT: DataEncoding: BigEndian (0x2)
+# PPC64-NEXT: FileVersion: 1
+# PPC64-NEXT: OS/ABI: SystemV (0x0)
+# PPC64-NEXT: ABIVersion: 0
+# PPC64-NEXT: Unused: (00 00 00 00 00 00 00)
+# PPC64-NEXT: }
+# PPC64-NEXT: Type: Executable (0x2)
+# PPC64-NEXT: Machine: EM_PPC64 (0x15)
+# PPC64-NEXT: Version: 1
+# PPC64-NEXT: Entry:
+# PPC64-NEXT: ProgramHeaderOffset: 0x40
+# PPC64-NEXT: SectionHeaderOffset:
+# PPC64-NEXT: Flags [ (0x0)
+# PPC64-NEXT: ]
+# PPC64-NEXT: HeaderSize: 64
+# PPC64-NEXT: ProgramHeaderEntrySize: 56
+# PPC64-NEXT: ProgramHeaderCount:
+# PPC64-NEXT: SectionHeaderEntrySize: 64
+# PPC64-NEXT: SectionHeaderCount:
+# PPC64-NEXT: StringTableSectionIndex:
+# PPC64-NEXT: }
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %tmips
+# RUN: ld.lld -m elf32btsmip -e _start %tmips -o %t2mips
+# RUN: llvm-readobj -file-headers %t2mips | FileCheck --check-prefix=MIPS %s
+# RUN: ld.lld %tmips -e _start -o %t3mips
+# RUN: llvm-readobj -file-headers %t3mips | FileCheck --check-prefix=MIPS %s
+# MIPS: ElfHeader {
+# MIPS-NEXT: Ident {
+# MIPS-NEXT: Magic: (7F 45 4C 46)
+# MIPS-NEXT: Class: 32-bit (0x1)
+# MIPS-NEXT: DataEncoding: BigEndian (0x2)
+# MIPS-NEXT: FileVersion: 1
+# MIPS-NEXT: OS/ABI: SystemV (0x0)
+# MIPS-NEXT: ABIVersion: 0
+# MIPS-NEXT: Unused: (00 00 00 00 00 00 00)
+# MIPS-NEXT: }
+# MIPS-NEXT: Type: Executable (0x2)
+# MIPS-NEXT: Machine: EM_MIPS (0x8)
+# MIPS-NEXT: Version: 1
+# MIPS-NEXT: Entry:
+# MIPS-NEXT: ProgramHeaderOffset: 0x34
+# MIPS-NEXT: SectionHeaderOffset:
+# MIPS-NEXT: Flags [
+# MIPS-NEXT: EF_MIPS_ABI_O32
+# MIPS-NEXT: EF_MIPS_ARCH_32R2
+# MIPS-NEXT: EF_MIPS_CPIC
+# MIPS-NEXT: ]
+
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %tmipsel
+# RUN: ld.lld -m elf32ltsmip -e _start %tmipsel -o %t2mipsel
+# RUN: llvm-readobj -file-headers %t2mipsel | FileCheck --check-prefix=MIPSEL %s
+# RUN: ld.lld -melf32ltsmip -e _start %tmipsel -o %t2mipsel
+# RUN: llvm-readobj -file-headers %t2mipsel | FileCheck --check-prefix=MIPSEL %s
+# RUN: ld.lld %tmipsel -e _start -o %t3mipsel
+# RUN: llvm-readobj -file-headers %t3mipsel | FileCheck --check-prefix=MIPSEL %s
+# MIPSEL: ElfHeader {
+# MIPSEL-NEXT: Ident {
+# MIPSEL-NEXT: Magic: (7F 45 4C 46)
+# MIPSEL-NEXT: Class: 32-bit (0x1)
+# MIPSEL-NEXT: DataEncoding: LittleEndian (0x1)
+# MIPSEL-NEXT: FileVersion: 1
+# MIPSEL-NEXT: OS/ABI: SystemV (0x0)
+# MIPSEL-NEXT: ABIVersion: 0
+# MIPSEL-NEXT: Unused: (00 00 00 00 00 00 00)
+# MIPSEL-NEXT: }
+# MIPSEL-NEXT: Type: Executable (0x2)
+# MIPSEL-NEXT: Machine: EM_MIPS (0x8)
+# MIPSEL-NEXT: Version: 1
+# MIPSEL-NEXT: Entry:
+# MIPSEL-NEXT: ProgramHeaderOffset: 0x34
+# MIPSEL-NEXT: SectionHeaderOffset:
+# MIPSEL-NEXT: Flags [
+# MIPSEL-NEXT: EF_MIPS_ABI_O32
+# MIPSEL-NEXT: EF_MIPS_ARCH_32R2
+# MIPSEL-NEXT: EF_MIPS_CPIC
+# MIPSEL-NEXT: ]
+
+# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %taarch64
+# RUN: ld.lld -m aarch64linux %taarch64 -o %t2aarch64
+# RUN: llvm-readobj -file-headers %t2aarch64 | FileCheck --check-prefix=AARCH64 %s
+# RUN: ld.lld %taarch64 -o %t3aarch64
+# RUN: llvm-readobj -file-headers %t3aarch64 | FileCheck --check-prefix=AARCH64 %s
+# AARCH64: ElfHeader {
+# AARCH64-NEXT: Ident {
+# AARCH64-NEXT: Magic: (7F 45 4C 46)
+# AARCH64-NEXT: Class: 64-bit (0x2)
+# AARCH64-NEXT: DataEncoding: LittleEndian (0x1)
+# AARCH64-NEXT: FileVersion: 1
+# AARCH64-NEXT: OS/ABI: SystemV (0x0)
+# AARCH64-NEXT: ABIVersion: 0
+# AARCH64-NEXT: Unused: (00 00 00 00 00 00 00)
+# AARCH64-NEXT: }
+# AARCH64-NEXT: Type: Executable (0x2)
+# AARCH64-NEXT: Machine: EM_AARCH64 (0xB7)
+# AARCH64-NEXT: Version: 1
+# AARCH64-NEXT: Entry:
+# AARCH64-NEXT: ProgramHeaderOffset: 0x40
+# AARCH64-NEXT: SectionHeaderOffset:
+# AARCH64-NEXT: Flags [ (0x0)
+# AARCH64-NEXT: ]
+
+# REQUIRES: x86,ppc,mips,aarch64
+
+.globl _start;
+_start:
diff --git a/test/ELF/end-preserve.s b/test/ELF/end-preserve.s
new file mode 100644
index 000000000000..71d86d1c8faf
--- /dev/null
+++ b/test/ELF/end-preserve.s
@@ -0,0 +1,16 @@
+// Should preserve the value of the "end" symbol if it is defined.
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t
+// RUN: llvm-nm %t | FileCheck %s
+
+// CHECK: 0000000000000005 A end
+
+.global _start,end
+end = 5
+.text
+_start:
+ nop
+.bss
+ .space 6
diff --git a/test/ELF/end-update.s b/test/ELF/end-update.s
new file mode 100644
index 000000000000..8654ef1e92eb
--- /dev/null
+++ b/test/ELF/end-update.s
@@ -0,0 +1,29 @@
+// Should set the value of the "end" symbol if it is undefined.
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t
+// RUN: llvm-readobj -sections -symbols %t | FileCheck %s
+
+// CHECK: Sections [
+// CHECK: Name: .bss
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x12000
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 6
+// CHECK: ]
+// CHECK: Symbols [
+// CHECK: Name: end
+// CHECK-NEXT: Value: 0x12006
+// CHECK: ]
+
+.global _start,end
+.text
+_start:
+ nop
+.bss
+ .space 6
diff --git a/test/ELF/end.s b/test/ELF/end.s
new file mode 100644
index 000000000000..390e4445e2d8
--- /dev/null
+++ b/test/ELF/end.s
@@ -0,0 +1,79 @@
+// Should set the value of the "_end" symbol to the end of the data segment.
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+
+// By default, the .bss section is the latest section of the data segment.
+// RUN: ld.lld %t.o -o %t
+// RUN: llvm-readobj -sections -symbols %t | FileCheck %s --check-prefix=DEFAULT
+
+// DEFAULT: Sections [
+// DEFAULT: Name: .bss
+// DEFAULT-NEXT: Type:
+// DEFAULT-NEXT: Flags [
+// DEFAULT-NEXT: SHF_ALLOC
+// DEFAULT-NEXT: SHF_WRITE
+// DEFAULT-NEXT: ]
+// DEFAULT-NEXT: Address: 0x12002
+// DEFAULT-NEXT: Offset:
+// DEFAULT-NEXT: Size: 6
+// DEFAULT: ]
+// DEFAULT: Symbols [
+// DEFAULT: Name: _end
+// DEFAULT-NEXT: Value: 0x12008
+// DEFAULT: ]
+
+// If there is no .bss section, "_end" should point to the end of the .data section.
+// RUN: echo "SECTIONS { \
+// RUN: /DISCARD/ : { *(.bss) } }" > %t.script
+// RUN: ld.lld %t.o --script %t.script -o %t
+// RUN: llvm-readobj -sections -symbols %t | FileCheck %s --check-prefix=NOBSS
+
+// NOBSS: Sections [
+// NOBSS: Name: .data
+// NOBSS-NEXT: Type:
+// NOBSS-NEXT: Flags [
+// NOBSS-NEXT: SHF_ALLOC
+// NOBSS-NEXT: SHF_WRITE
+// NOBSS-NEXT: ]
+// NOBSS-NEXT: Address: 0x12000
+// NOBSS-NEXT: Offset:
+// NOBSS-NEXT: Size: 2
+// NOBSS: ]
+// NOBSS: Symbols [
+// NOBSS: Name: _end
+// NOBSS-NEXT: Value: 0x12002
+// NOBSS: ]
+
+// If the layout of the sections is changed, "_end" should point to the end of allocated address space.
+// RUN: echo "SECTIONS { \
+// RUN: .bss : { *(.bss) } \
+// RUN: .data : { *(.data) } \
+// RUN: .text : { *(.text) } }" > %t.script
+// RUN: ld.lld %t.o --script %t.script -o %t
+// RUN: llvm-readobj -sections -symbols %t | FileCheck %s --check-prefix=TEXTATEND
+
+// TEXTATEND: Sections [
+// TEXTATEND: Name: .text
+// TEXTATEND-NEXT: Type:
+// TEXTATEND-NEXT: Flags [
+// TEXTATEND-NEXT: SHF_ALLOC
+// TEXTATEND-NEXT: SHF_EXECINSTR
+// TEXTATEND-NEXT: ]
+// TEXTATEND-NEXT: Address: 0x12000
+// TEXTATEND-NEXT: Offset:
+// TEXTATEND-NEXT: Size: 1
+// TEXTATEND: ]
+// TEXTATEND: Symbols [
+// TEXTATEND: Name: _end
+// TEXTATEND-NEXT: Value: 0x12001
+// TEXTATEND: ]
+
+.global _start,_end
+.text
+_start:
+ nop
+.data
+ .word 1
+.bss
+ .space 6
diff --git a/test/ELF/entry.s b/test/ELF/entry.s
new file mode 100644
index 000000000000..c8758ece69eb
--- /dev/null
+++ b/test/ELF/entry.s
@@ -0,0 +1,21 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
+# RUN: not ld.lld %t1 -o %t2
+# RUN: ld.lld %t1 -o %t2 -e entry
+# RUN: llvm-readobj -file-headers %t2 | FileCheck -check-prefix=SYM %s
+# RUN: ld.lld %t1 -shared -o %t2 -e entry
+# RUN: llvm-readobj -file-headers %t2 | FileCheck -check-prefix=DSO %s
+# RUN: ld.lld %t1 -o %t2 -e 4096
+# RUN: llvm-readobj -file-headers %t2 | FileCheck -check-prefix=DEC %s
+# RUN: ld.lld %t1 -o %t2 -e 0xcafe
+# RUN: llvm-readobj -file-headers %t2 | FileCheck -check-prefix=HEX %s
+# RUN: ld.lld %t1 -o %t2 -e 0777
+# RUN: llvm-readobj -file-headers %t2 | FileCheck -check-prefix=OCT %s
+
+# SYM: Entry: 0x11000
+# DSO: Entry: 0x1000
+# DEC: Entry: 0x1000
+# HEX: Entry: 0xCAFE
+# OCT: Entry: 0x1FF
+
+.globl entry
+entry:
diff --git a/test/ELF/gc-sections-eh.s b/test/ELF/gc-sections-eh.s
new file mode 100644
index 000000000000..042b68ebdfe2
--- /dev/null
+++ b/test/ELF/gc-sections-eh.s
@@ -0,0 +1,19 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2 --gc-sections
+# RUN: llvm-readobj -t %t2 | FileCheck %s
+
+# CHECK-NOT: foo
+
+ .section .text,"ax",@progbits,unique,0
+ .globl foo
+foo:
+ .cfi_startproc
+ .cfi_endproc
+
+ .section .text,"ax",@progbits,unique,1
+ .globl _start
+_start:
+ .cfi_startproc
+ .cfi_endproc
diff --git a/test/ELF/gc-sections-print.s b/test/ELF/gc-sections-print.s
new file mode 100644
index 000000000000..59177a65367e
--- /dev/null
+++ b/test/ELF/gc-sections-print.s
@@ -0,0 +1,23 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t --gc-sections --print-gc-sections -o %t2 2>&1 | FileCheck -check-prefix=PRINT %s
+
+# PRINT: removing unused section from '.text.x' in file
+# PRINT-NEXT: removing unused section from '.text.y' in file
+
+.globl _start
+.protected a, x, y
+_start:
+ call a
+
+.section .text.a,"ax",@progbits
+a:
+ nop
+
+.section .text.x,"ax",@progbits
+x:
+ nop
+
+.section .text.y,"ax",@progbits
+y:
+ nop
diff --git a/test/ELF/gc-sections.s b/test/ELF/gc-sections.s
new file mode 100644
index 000000000000..93f7dc67023f
--- /dev/null
+++ b/test/ELF/gc-sections.s
@@ -0,0 +1,102 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=NOGC %s
+# RUN: ld.lld --gc-sections %t -o %t2
+# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=GC1 %s
+# RUN: ld.lld --export-dynamic --gc-sections %t -o %t2
+# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=GC2 %s
+
+# NOGC: Name: .eh_frame
+# NOGC: Name: .text
+# NOGC: Name: .ctors
+# NOGC: Name: .dtors
+# NOGC: Name: .init
+# NOGC: Name: .fini
+# NOGC: Name: a
+# NOGC: Name: b
+# NOGC: Name: c
+# NOGC: Name: x
+# NOGC: Name: y
+# NOGC: Name: __preinit_array_start
+# NOGC: Name: __preinit_array_end
+# NOGC: Name: d
+
+# GC1: Name: .eh_frame
+# GC1: Name: .text
+# GC1: Name: .ctors
+# GC1: Name: .dtors
+# GC1: Name: .init
+# GC1: Name: .fini
+# GC1: Name: a
+# GC1: Name: b
+# GC1: Name: c
+# GC1-NOT: Name: x
+# GC1-NOT: Name: y
+# GC1: Name: __preinit_array_start
+# GC1: Name: __preinit_array_end
+# GC1-NOT: Name: d
+
+# GC2: Name: .eh_frame
+# GC2: Name: .text
+# GC2: Name: .ctors
+# GC2: Name: .dtors
+# GC2: Name: .init
+# GC2: Name: .fini
+# GC2: Name: a
+# GC2: Name: b
+# GC2: Name: c
+# GC2-NOT: Name: x
+# GC2-NOT: Name: y
+# GC2: Name: __preinit_array_start
+# GC2: Name: __preinit_array_end
+# GC2: Name: d
+
+.globl _start, d
+.protected a, b, c, x, y
+_start:
+ call a
+
+.section .text.a,"ax",@progbits
+a:
+ call _start
+ call b
+
+.section .text.b,"ax",@progbits
+b:
+ call c
+
+.section .text.c,"ax",@progbits
+c:
+ nop
+
+.section .text.d,"ax",@progbits
+d:
+ nop
+
+.section .text.x,"ax",@progbits
+x:
+ call y
+
+.section .text.y,"ax",@progbits
+y:
+ call x
+
+.section .ctors,"aw",@progbits
+ .quad 0
+
+.section .dtors,"aw",@progbits
+ .quad 0
+
+.section .init,"aw",@init_array
+ .quad 0
+
+.section .fini,"aw",@fini_array
+ .quad 0
+
+.section .preinit_array,"aw",@preinit_array
+ .quad 0
+
+.section .eh_frame,"a",@unwind
+ .quad 0
diff --git a/test/ELF/global_offset_table.s b/test/ELF/global_offset_table.s
new file mode 100644
index 000000000000..47e95e9f9b84
--- /dev/null
+++ b/test/ELF/global_offset_table.s
@@ -0,0 +1,5 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+.global _start
+_start:
+.long _GLOBAL_OFFSET_TABLE_
diff --git a/test/ELF/gnu-hash-table.s b/test/ELF/gnu-hash-table.s
new file mode 100644
index 000000000000..4e845998f167
--- /dev/null
+++ b/test/ELF/gnu-hash-table.s
@@ -0,0 +1,195 @@
+# REQUIRES: x86,ppc
+
+# RUN: echo ".globl foo" > %te.s
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %te.s -o %te-i386.o
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %s -o %t-i386.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t-x86_64.o
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-pc-linux %s -o %t-ppc64.o
+
+# RUN: ld.lld -shared --hash-style=gnu -o %te-i386.so %te-i386.o
+# RUN: ld.lld -shared -hash-style=gnu -o %t-i386.so %t-i386.o
+# RUN: ld.lld -shared -hash-style=gnu -o %t-x86_64.so %t-x86_64.o
+# RUN: ld.lld -shared --hash-style both -o %t-ppc64.so %t-ppc64.o
+
+# RUN: llvm-readobj -dyn-symbols -gnu-hash-table %te-i386.so \
+# RUN: | FileCheck %s -check-prefix=EMPTY
+# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-i386.so \
+# RUN: | FileCheck %s -check-prefix=I386
+# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-x86_64.so \
+# RUN: | FileCheck %s -check-prefix=X86_64
+# RUN: llvm-readobj -sections -dyn-symbols -gnu-hash-table %t-ppc64.so \
+# RUN: | FileCheck %s -check-prefix=PPC64
+
+# EMPTY: DynamicSymbols [
+# EMPTY: Symbol {
+# EMPTY: Name: foo@
+# EMPTY-NEXT: Value: 0x0
+# EMPTY-NEXT: Size: 0
+# EMPTY-NEXT: Binding: Global
+# EMPTY-NEXT: Type: None
+# EMPTY-NEXT: Other: 0
+# EMPTY-NEXT: Section: Undefined
+# EMPTY-NEXT: }
+# EMPTY-NEXT: ]
+# EMPTY: GnuHashTable {
+# EMPTY-NEXT: Num Buckets: 0
+# EMPTY-NEXT: First Hashed Symbol Index: 2
+# EMPTY-NEXT: Num Mask Words: 1
+# EMPTY-NEXT: Shift Count: 5
+# EMPTY-NEXT: Bloom Filter: [0x0]
+# EMPTY-NEXT: Buckets: []
+# EMPTY-NEXT: Values: []
+# EMPTY-NEXT: }
+
+# I386: Format: ELF32-i386
+# I386: Arch: i386
+# I386: AddressSize: 32bit
+# I386: Sections [
+# I386: Name: .gnu.hash
+# I386-NEXT: Type: SHT_GNU_HASH
+# I386-NEXT: Flags [
+# I386-NEXT: SHF_ALLOC
+# I386-NEXT: ]
+# I386-NEXT: Address:
+# I386-NEXT: Offset:
+# I386-NEXT: Size: 32
+# I386-NEXT: Link:
+# I386-NEXT: Info: 0
+# I386-NEXT: AddressAlignment: 4
+# I386-NEXT: EntrySize: 4
+# I386: ]
+# I386: DynamicSymbols [
+# I386: Symbol {
+# I386: Name: @
+# I386: Binding: Local
+# I386: Section: Undefined
+# I386: }
+# I386: Symbol {
+# I386: Name: baz@
+# I386: Binding: Global
+# I386: Section: Undefined
+# I386: }
+# I386: Symbol {
+# I386: Name: bar@
+# I386: Binding: Global
+# I386: Section: .text
+# I386: }
+# I386: Symbol {
+# I386: Name: foo@
+# I386: Binding: Global
+# I386: Section: .text
+# I386: }
+# I386: ]
+# I386: GnuHashTable {
+# I386-NEXT: Num Buckets: 1
+# I386-NEXT: First Hashed Symbol Index: 2
+# I386-NEXT: Num Mask Words: 1
+# I386-NEXT: Shift Count: 5
+# I386-NEXT: Bloom Filter: [0x14000220]
+# I386-NEXT: Buckets: [2]
+# I386-NEXT: Values: [0xB8860BA, 0xB887389]
+# I386-NEXT: }
+
+# X86_64: Format: ELF64-x86-64
+# X86_64: Arch: x86_64
+# X86_64: AddressSize: 64bit
+# X86_64: Sections [
+# X86_64: Name: .gnu.hash
+# X86_64-NEXT: Type: SHT_GNU_HASH
+# X86_64-NEXT: Flags [
+# X86_64-NEXT: SHF_ALLOC
+# X86_64-NEXT: ]
+# X86_64-NEXT: Address:
+# X86_64-NEXT: Offset:
+# X86_64-NEXT: Size: 36
+# X86_64-NEXT: Link:
+# X86_64-NEXT: Info: 0
+# X86_64-NEXT: AddressAlignment: 8
+# X86_64-NEXT: EntrySize: 0
+# X86_64-NEXT: }
+# X86_64: ]
+# X86_64: DynamicSymbols [
+# X86_64: Symbol {
+# X86_64: Name: @
+# X86_64: Binding: Local
+# X86_64: Section: Undefined
+# X86_64: }
+# X86_64: Symbol {
+# X86_64: Name: baz@
+# X86_64: Binding: Global
+# X86_64: Section: Undefined
+# X86_64: }
+# X86_64: Symbol {
+# X86_64: Name: bar@
+# X86_64: Binding: Global
+# X86_64: Section: .text
+# X86_64: }
+# X86_64: Symbol {
+# X86_64: Name: foo@
+# X86_64: Binding: Global
+# X86_64: Section: .text
+# X86_64: }
+# X86_64: ]
+# X86_64: GnuHashTable {
+# X86_64-NEXT: Num Buckets: 1
+# X86_64-NEXT: First Hashed Symbol Index: 2
+# X86_64-NEXT: Num Mask Words: 1
+# X86_64-NEXT: Shift Count: 6
+# X86_64-NEXT: Bloom Filter: [0x400000000004204]
+# X86_64-NEXT: Buckets: [2]
+# X86_64-NEXT: Values: [0xB8860BA, 0xB887389]
+# X86_64-NEXT: }
+
+# PPC64: Format: ELF64-ppc64
+# PPC64: Arch: powerpc64
+# PPC64: AddressSize: 64bit
+# PPC64: Sections [
+# PPC64: Name: .gnu.hash
+# PPC64-NEXT: Type: SHT_GNU_HASH
+# PPC64-NEXT: Flags [
+# PPC64-NEXT: SHF_ALLOC
+# PPC64-NEXT: ]
+# PPC64-NEXT: Address: 0x228
+# PPC64-NEXT: Offset: 0x228
+# PPC64-NEXT: Size: 36
+# PPC64-NEXT: Link: 1
+# PPC64-NEXT: Info: 0
+# PPC64-NEXT: AddressAlignment: 8
+# PPC64-NEXT: EntrySize: 0
+# PPC64-NEXT: }
+# PPC64: ]
+# PPC64: DynamicSymbols [
+# PPC64: Symbol {
+# PPC64: Name: @
+# PPC64: Binding: Local
+# PPC64: Section: Undefined
+# PPC64: }
+# PPC64: Symbol {
+# PPC64: Name: baz@
+# PPC64: Binding: Global
+# PPC64: Section: Undefined
+# PPC64: }
+# PPC64: Symbol {
+# PPC64: Name: bar@
+# PPC64: Binding: Global
+# PPC64: Section: .text
+# PPC64: }
+# PPC64: Symbol {
+# PPC64: Name: foo@
+# PPC64: Binding: Global
+# PPC64: Section: .text
+# PPC64: }
+# PPC64: ]
+# PPC64: GnuHashTable {
+# PPC64-NEXT: Num Buckets: 1
+# PPC64-NEXT: First Hashed Symbol Index: 2
+# PPC64-NEXT: Num Mask Words: 1
+# PPC64-NEXT: Shift Count: 6
+# PPC64-NEXT: Bloom Filter: [0x400000000004204]
+# PPC64-NEXT: Buckets: [2]
+# PPC64-NEXT: Values: [0xB8860BA, 0xB887389]
+# PPC64-NEXT: }
+
+.globl foo,bar,baz
+foo:
+bar:
diff --git a/test/ELF/gnu-ifunc-i386.s b/test/ELF/gnu-ifunc-i386.s
new file mode 100644
index 000000000000..6dcdf256d70c
--- /dev/null
+++ b/test/ELF/gnu-ifunc-i386.s
@@ -0,0 +1,130 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld -static %t.o -o %tout
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DISASM
+// RUN: llvm-readobj -r -symbols -sections %tout | FileCheck %s --check-prefix=CHECK
+// REQUIRES: x86
+
+// CHECK: Sections [
+// CHECK: Section {
+// CHECK: Index: 1
+// CHECK-NEXT: Name: .rel.plt
+// CHECK-NEXT: Type: SHT_REL
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[RELA:.*]]
+// CHECK-NEXT: Offset: 0xD4
+// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Link: 5
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 8
+// CHECK-NEXT: }
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rel.plt {
+// CHECK-NEXT: 0x1200C R_386_IRELATIVE
+// CHECK-NEXT: 0x12010 R_386_IRELATIVE
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __rel_iplt_end
+// CHECK-NEXT: Value: 0x100E4
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __rel_iplt_start
+// CHECK-NEXT: Value: [[RELA]]
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11002
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar
+// CHECK-NEXT: Value: 0x11001
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT:]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: foo:
+// DISASM-NEXT: 11000: c3 retl
+// DISASM: bar:
+// DISASM-NEXT: 11001: c3 retl
+// DISASM: _start:
+// DISASM-NEXT: 11002: e8 29 00 00 00 calll 41
+// DISASM-NEXT: 11007: e8 34 00 00 00 calll 52
+// DISASM-NEXT: 1100c: ba d4 00 01 00 movl $65748, %edx
+// DISASM-NEXT: 11011: ba e4 00 01 00 movl $65764, %edx
+// DISASM-NEXT: Disassembly of section .plt:
+// DISASM-NEXT: .plt:
+// DISASM-NEXT: 11020: ff 35 04 20 01 00 pushl 73732
+// DISASM-NEXT: 11026: ff 25 08 20 01 00 jmpl *73736
+// DISASM-NEXT: 1102c: 90 nop
+// DISASM-NEXT: 1102d: 90 nop
+// DISASM-NEXT: 1102e: 90 nop
+// DISASM-NEXT: 1102f: 90 nop
+// DISASM-NEXT: 11030: ff 25 0c 20 01 00 jmpl *73740
+// DISASM-NEXT: 11036: 68 00 00 00 00 pushl $0
+// DISASM-NEXT: 1103b: e9 e0 ff ff ff jmp -32 <.plt>
+// DISASM-NEXT: 11040: ff 25 10 20 01 00 jmpl *73744
+// DISASM-NEXT: 11046: 68 08 00 00 00 pushl $8
+// DISASM-NEXT: 1104b: e9 d0 ff ff ff jmp -48 <.plt>
+
+.text
+.type foo STT_GNU_IFUNC
+.globl foo
+.type foo, @function
+foo:
+ ret
+
+.type bar STT_GNU_IFUNC
+.globl bar
+.type bar, @function
+bar:
+ ret
+
+.globl _start
+_start:
+ call foo
+ call bar
+ movl $__rel_iplt_start,%edx
+ movl $__rel_iplt_end,%edx
diff --git a/test/ELF/gnu-ifunc-nosym-i386.s b/test/ELF/gnu-ifunc-nosym-i386.s
new file mode 100644
index 000000000000..1101b6d763d5
--- /dev/null
+++ b/test/ELF/gnu-ifunc-nosym-i386.s
@@ -0,0 +1,29 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld -static %t.o -o %tout
+// RUN: llvm-readobj -symbols %tout | FileCheck %s
+// REQUIRES: x86
+
+// Check that no __rel_iplt_end/__rel_iplt_start
+// appear in symtab if there is no references to them.
+// CHECK: Symbols [
+// CHECK-NEXT-NOT: __rel_iplt_end
+// CHECK-NEXT-NOT: __rel_iplt_start
+// CHECK: ]
+
+.text
+.type foo STT_GNU_IFUNC
+.globl foo
+.type foo, @function
+foo:
+ ret
+
+.type bar STT_GNU_IFUNC
+.globl bar
+.type bar, @function
+bar:
+ ret
+
+.globl _start
+_start:
+ call foo
+ call bar
diff --git a/test/ELF/gnu-ifunc-nosym.s b/test/ELF/gnu-ifunc-nosym.s
new file mode 100644
index 000000000000..c97fd749c02b
--- /dev/null
+++ b/test/ELF/gnu-ifunc-nosym.s
@@ -0,0 +1,29 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld -static %t.o -o %tout
+// RUN: llvm-readobj -symbols %tout | FileCheck %s
+// REQUIRES: x86
+
+// Check that no __rela_iplt_end/__rela_iplt_start
+// appear in symtab if there is no references to them.
+// CHECK: Symbols [
+// CHECK-NEXT-NOT: __rela_iplt_end
+// CHECK-NEXT-NOT: __rela_iplt_start
+// CHECK: ]
+
+.text
+.type foo STT_GNU_IFUNC
+.globl foo
+.type foo, @function
+foo:
+ ret
+
+.type bar STT_GNU_IFUNC
+.globl bar
+.type bar, @function
+bar:
+ ret
+
+.globl _start
+_start:
+ call foo
+ call bar
diff --git a/test/ELF/gnu-ifunc.s b/test/ELF/gnu-ifunc.s
new file mode 100644
index 000000000000..b04f2758e22c
--- /dev/null
+++ b/test/ELF/gnu-ifunc.s
@@ -0,0 +1,126 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld -static %t.o -o %tout
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DISASM
+// RUN: llvm-readobj -r -symbols -sections %tout | FileCheck %s --check-prefix=CHECK
+// REQUIRES: x86
+
+// CHECK: Sections [
+// CHECK: Section {
+// CHECK: Index: 1
+// CHECK-NEXT: Name: .rela.plt
+// CHECK-NEXT: Type: SHT_RELA
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[RELA:.*]]
+// CHECK-NEXT: Offset: 0x158
+// CHECK-NEXT: Size: 48
+// CHECK-NEXT: Link: 5
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 24
+// CHECK-NEXT: }
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: 0x12018 R_X86_64_IRELATIVE
+// CHECK-NEXT: 0x12020 R_X86_64_IRELATIVE
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __rela_iplt_end
+// CHECK-NEXT: Value: 0x10188
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __rela_iplt_start
+// CHECK-NEXT: Value: [[RELA]]
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11002
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar
+// CHECK-NEXT: Value: 0x11001
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: GNU_IFunc
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: foo:
+// DISASM-NEXT: 11000: c3 retq
+// DISASM: bar:
+// DISASM-NEXT: 11001: c3 retq
+// DISASM: _start:
+// DISASM-NEXT: 11002: e8 29 00 00 00 callq 41
+// DISASM-NEXT: 11007: e8 34 00 00 00 callq 52
+// DISASM-NEXT: 1100c: ba 58 01 01 00 movl $65880, %edx
+// DISASM-NEXT: 11011: ba 88 01 01 00 movl $65928, %edx
+// DISASM-NEXT: Disassembly of section .plt:
+// DISASM-NEXT: .plt:
+// DISASM-NEXT: 11020: ff 35 e2 0f 00 00 pushq 4066(%rip)
+// DISASM-NEXT: 11026: ff 25 e4 0f 00 00 jmpq *4068(%rip)
+// DISASM-NEXT: 1102c: 0f 1f 40 00 nopl (%rax)
+// DISASM-NEXT: 11030: ff 25 e2 0f 00 00 jmpq *4066(%rip)
+// DISASM-NEXT: 11036: 68 00 00 00 00 pushq $0
+// DISASM-NEXT: 1103b: e9 e0 ff ff ff jmp -32
+// DISASM-NEXT: 11040: ff 25 da 0f 00 00 jmpq *4058(%rip)
+// DISASM-NEXT: 11046: 68 01 00 00 00 pushq $1
+// DISASM-NEXT: 1104b: e9 d0 ff ff ff jmp -48
+
+.text
+.type foo STT_GNU_IFUNC
+.globl foo
+.type foo, @function
+foo:
+ ret
+
+.type bar STT_GNU_IFUNC
+.globl bar
+.type bar, @function
+bar:
+ ret
+
+.globl _start
+_start:
+ call foo
+ call bar
+ movl $__rela_iplt_start,%edx
+ movl $__rela_iplt_end,%edx
diff --git a/test/ELF/gnu-unique.s b/test/ELF/gnu-unique.s
new file mode 100644
index 000000000000..f7206cf8c97f
--- /dev/null
+++ b/test/ELF/gnu-unique.s
@@ -0,0 +1,24 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -shared -o %tout.so
+// RUN: llvm-readobj -dyn-symbols %tout.so | FileCheck %s
+// REQUIRES: x86
+
+// Check that STB_GNU_UNIQUE is treated as a global and ends up in the dynamic
+// symbol table as STB_GNU_UNIQUE.
+
+.global _start
+.text
+_start:
+
+.data
+.type symb, @gnu_unique_object
+symb:
+
+# CHECK: Name: symb@
+# CHECK-NEXT: Value:
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Unique
+# CHECK-NEXT: Type: Object
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .data
+# CHECK-NEXT: }
diff --git a/test/ELF/gnustack.s b/test/ELF/gnustack.s
new file mode 100644
index 000000000000..6fc937354e69
--- /dev/null
+++ b/test/ELF/gnustack.s
@@ -0,0 +1,30 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1
+# RUN: ld.lld %t1 -z execstack -o %t
+# RUN: llvm-readobj --program-headers -s %t | FileCheck --check-prefix=RWX %s
+# RUN: ld.lld %t1 -o %t
+# RUN: llvm-readobj --program-headers -s %t | FileCheck --check-prefix=RW %s
+
+# RW: Sections [
+# RW-NOT: Name: .note.GNU-stack
+# RW: ProgramHeaders [
+# RW: ProgramHeader {
+# RW: Type: PT_GNU_STACK
+# RW-NEXT: Offset: 0x0
+# RW-NEXT: VirtualAddress: 0x0
+# RW-NEXT: PhysicalAddress: 0x0
+# RW-NEXT: FileSize: 0
+# RW-NEXT: MemSize: 0
+# RW-NEXT: Flags [
+# RW-NEXT: PF_R
+# RW-NEXT: PF_W
+# RW-NEXT: ]
+# RW-NEXT: Alignment: 0
+# RW-NEXT: }
+# RW-NEXT: ]
+
+# RWX-NOT: Name: .note.GNU-stack
+# RWX-NOT: Type: PT_GNU_STACK
+
+.globl _start
+_start:
diff --git a/test/ELF/got-aarch64.s b/test/ELF/got-aarch64.s
new file mode 100644
index 000000000000..b4aa456b4e81
--- /dev/null
+++ b/test/ELF/got-aarch64.s
@@ -0,0 +1,40 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %t.o
+// RUN: ld.lld -shared %t.o -o %t.so
+// RUN: llvm-readobj -s -r %t.so | FileCheck %s
+// RUN: llvm-objdump -d %t.so | FileCheck --check-prefix=DISASM %s
+// REQUIRES: aarch64
+
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x2090
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x2090 R_AARCH64_GLOB_DAT dat 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// Page(0x2098) - Page(0x1000) = 0x1000 = 4096
+// 0x2098 & 0xff8 = 0x98 = 152
+
+// DISASM: main:
+// DISASM-NEXT: 1000: {{.*}} adrp x0, #4096
+// DISASM-NEXT: 1004: {{.*}} ldr x0, [x0, #144]
+
+.global main,foo,dat
+.text
+main:
+ adrp x0, :got:dat
+ ldr x0, [x0, :got_lo12:dat]
+.data
+dat:
+ .word 42
diff --git a/test/ELF/got-i386.s b/test/ELF/got-i386.s
new file mode 100644
index 000000000000..679eb2e4f5ca
--- /dev/null
+++ b/test/ELF/got-i386.s
@@ -0,0 +1,56 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t
+// RUN: llvm-readobj -s -r -t %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+// REQUIRES: x86
+
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x12000
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+
+// CHECK: Symbol {
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x12000
+// CHECK-NEXT: Size: 10
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: obj
+// CHECK-NEXT: Value: 0x1200A
+// CHECK-NEXT: Size: 10
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+// CHECK-NEXT: }
+
+// 0x12000 - 0 = addr(.got) = 0x12000
+// 0x1200A - 10 = addr(.got) = 0x12000
+// 0x1200A + 5 - 15 = addr(.got) = 0x12000
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: c7 81 00 00 00 00 01 00 00 00 movl $1, (%ecx)
+// DISASM-NEXT: 1100a: c7 81 0a 00 00 00 02 00 00 00 movl $2, 10(%ecx)
+// DISASM-NEXT: 11014: c7 81 0f 00 00 00 03 00 00 00 movl $3, 15(%ecx)
+
+.global _start
+_start:
+ movl $1, bar@GOTOFF(%ecx)
+ movl $2, obj@GOTOFF(%ecx)
+ movl $3, obj+5@GOTOFF(%ecx)
+ .type bar, @object
+ .comm bar, 10
+ .type obj, @object
+ .comm obj, 10
diff --git a/test/ELF/got.s b/test/ELF/got.s
new file mode 100644
index 000000000000..5fa1c2a7251f
--- /dev/null
+++ b/test/ELF/got.s
@@ -0,0 +1,45 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -s -r %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+// REQUIRES: x86
+
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x120A0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x120A0 R_X86_64_GLOB_DAT bar 0x0
+// CHECK-NEXT: 0x120A8 R_X86_64_GLOB_DAT zed 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+
+// Unfortunately FileCheck can't do math, so we have to check for explicit
+// values:
+// 0x120A0 - (0x11000 + 2) - 4 = 4250
+// 0x120A0 - (0x11006 + 2) - 4 = 4244
+// 0x120A8 - (0x1100c + 2) - 4 = 4246
+
+// DISASM: _start:
+// DISASM-NEXT: 11000: {{.*}} jmpq *4250(%rip)
+// DISASM-NEXT: 11006: {{.*}} jmpq *4244(%rip)
+// DISASM-NEXT: 1100c: {{.*}} jmpq *4246(%rip)
+
+.global _start
+_start:
+ jmp *bar@GOTPCREL(%rip)
+ jmp *bar@GOTPCREL(%rip)
+ jmp *zed@GOTPCREL(%rip)
diff --git a/test/ELF/incompatible-ar-first.s b/test/ELF/incompatible-ar-first.s
new file mode 100644
index 000000000000..8a8aaec220dd
--- /dev/null
+++ b/test/ELF/incompatible-ar-first.s
@@ -0,0 +1,11 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/archive.s -o %ta.o
+// RUN: llvm-ar rc %t.a %ta.o
+// RUN: llvm-mc -filetype=obj -triple=i686-linux %s -o %tb.o
+// RUN: not ld.lld %t.a %tb.o 2>&1 | FileCheck %s
+
+// We used to crash when
+// * The first object seen by the symbol table is from an archive.
+// * -m was not used.
+// CHECK: a.o is incompatible with {{.*}}b.o
+
+// REQUIRES: x86
diff --git a/test/ELF/incompatible.s b/test/ELF/incompatible.s
new file mode 100644
index 000000000000..1696d83de7ac
--- /dev/null
+++ b/test/ELF/incompatible.s
@@ -0,0 +1,58 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %ta.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %tb.o
+// RUN: ld.lld -shared %tb.o -o %ti686.so
+// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %tc.o
+
+// RUN: not ld.lld %ta.o %tb.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=A-AND-B %s
+// A-AND-B: b.o is incompatible with {{.*}}a.o
+
+// RUN: not ld.lld %tb.o %tc.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=B-AND-C %s
+// B-AND-C: c.o is incompatible with {{.*}}b.o
+
+// RUN: not ld.lld %ta.o %ti686.so -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=A-AND-SO %s
+// A-AND-SO: i686.so is incompatible with {{.*}}a.o
+
+// RUN: not ld.lld %tc.o %ti686.so -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=C-AND-SO %s
+// C-AND-SO: i686.so is incompatible with {{.*}}c.o
+
+// RUN: not ld.lld %ti686.so %tc.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=SO-AND-C %s
+// SO-AND-C: c.o is incompatible with {{.*}}i686.so
+
+// RUN: not ld.lld -m elf64ppc %ta.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=A-ONLY %s
+// A-ONLY: a.o is incompatible with elf64ppc
+
+// RUN: not ld.lld -m elf64ppc %tb.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=B-ONLY %s
+// B-ONLY: b.o is incompatible with elf64ppc
+
+// RUN: not ld.lld -m elf64ppc %tc.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=C-ONLY %s
+// C-ONLY: c.o is incompatible with elf64ppc
+
+// RUN: not ld.lld -m elf_i386 %tc.o %ti686.so -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=C-AND-SO-I386 %s
+// C-AND-SO-I386: c.o is incompatible with elf_i386
+
+// RUN: not ld.lld -m elf_i386 %ti686.so %tc.o -o %t 2>&1 | \
+// RUN: FileCheck --check-prefix=SO-AND-C-I386 %s
+// SO-AND-C-I386: c.o is incompatible with elf_i386
+
+
+// We used to fail to identify this incompatibility and crash trying to
+// read a 64 bit file as a 32 bit one.
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/archive2.s -o %ta.o
+// RUN: llvm-ar rc %t.a %ta.o
+// RUN: llvm-mc -filetype=obj -triple=i686-linux %s -o %tb.o
+// RUN: not ld.lld %t.a %tb.o 2>&1 | FileCheck --check-prefix=ARCHIVE %s
+// ARCHIVE: a.o is incompatible with {{.*}}b.o
+.global _start
+_start:
+ .long foo
+
+// REQUIRES: x86,aarch64
diff --git a/test/ELF/init-fini.s b/test/ELF/init-fini.s
new file mode 100644
index 000000000000..d2b24088d1e1
--- /dev/null
+++ b/test/ELF/init-fini.s
@@ -0,0 +1,43 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+
+// Should use "_init" and "_fini" by default when fills dynamic table
+// RUN: ld.lld -shared %t -o %t2
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=BYDEF %s
+// BYDEF: INIT 0x11010
+// BYDEF: FINI 0x11020
+
+// -init and -fini override symbols to use
+// RUN: ld.lld -shared %t -o %t2 -init _foo -fini _bar
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=OVR %s
+// OVR: INIT 0x11030
+// OVR: FINI 0x11040
+
+// Check aliases as well
+// RUN: ld.lld -shared %t -o %t2 -init=_foo -fini=_bar
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=OVR %s
+
+// Should add a dynamic table entry even if a given symbol stay undefined
+// RUN: ld.lld -shared %t -o %t2 -init=_undef -fini=_undef
+// RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=UNDEF %s
+// UNDEF: INIT 0x0
+// UNDEF: FINI 0x0
+
+// Should not add new entries to the symbol table
+// and should not require given symbols to be resolved
+// RUN: ld.lld -shared %t -o %t2 -init=_unknown -fini=_unknown
+// RUN: llvm-readobj -symbols -dynamic-table %t2 | FileCheck --check-prefix=NOENTRY %s
+// NOENTRY: Symbols [
+// NOENTRY-NOT: Name: _unknown
+// NOENTRY: ]
+// NOENTRY: DynamicSection [
+// NOENTRY-NOT: INIT
+// NOENTRY-NOT: FINI
+// NOENTRY: ]
+
+.global _start,_init,_fini,_foo,_bar,_undef;
+_start:
+_init = 0x11010
+_fini = 0x11020
+_foo = 0x11030
+_bar = 0x11040
diff --git a/test/ELF/invalid-cie-length.s b/test/ELF/invalid-cie-length.s
new file mode 100644
index 000000000000..36d1e03fb567
--- /dev/null
+++ b/test/ELF/invalid-cie-length.s
@@ -0,0 +1,9 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .byte 0
+
+// CHECK: Truncated CIE/FDE length
diff --git a/test/ELF/invalid-cie-length2.s b/test/ELF/invalid-cie-length2.s
new file mode 100644
index 000000000000..94a677eb8913
--- /dev/null
+++ b/test/ELF/invalid-cie-length2.s
@@ -0,0 +1,9 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 42
+
+// CHECK: CIE/FIE ends past the end of the section
diff --git a/test/ELF/invalid-cie-length3.s b/test/ELF/invalid-cie-length3.s
new file mode 100644
index 000000000000..8f3ab1cf29d0
--- /dev/null
+++ b/test/ELF/invalid-cie-length3.s
@@ -0,0 +1,9 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0xFFFFFFFC
+
+// CHECK: CIE/FIE size is too large
diff --git a/test/ELF/invalid-cie-length4.s b/test/ELF/invalid-cie-length4.s
new file mode 100644
index 000000000000..4a51ca1f812d
--- /dev/null
+++ b/test/ELF/invalid-cie-length4.s
@@ -0,0 +1,10 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0xFFFFFFFF
+ .byte 0
+
+// CHECK: Truncated CIE/FDE length
diff --git a/test/ELF/invalid-cie-length5.s b/test/ELF/invalid-cie-length5.s
new file mode 100644
index 000000000000..14054a2dee84
--- /dev/null
+++ b/test/ELF/invalid-cie-length5.s
@@ -0,0 +1,10 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0xFFFFFFFF
+ .quad 0xFFFFFFFFFFFFFFF4
+
+// CHECK: CIE/FIE size is too large
diff --git a/test/ELF/invalid-cie-reference.s b/test/ELF/invalid-cie-reference.s
new file mode 100644
index 000000000000..1b099d19b7e1
--- /dev/null
+++ b/test/ELF/invalid-cie-reference.s
@@ -0,0 +1,32 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0x14
+ .long 0x0
+ .byte 0x01
+ .byte 0x7a
+ .byte 0x52
+ .byte 0x00
+ .byte 0x01
+ .byte 0x78
+ .byte 0x10
+ .byte 0x01
+ .byte 0x1b
+ .byte 0x0c
+ .byte 0x07
+ .byte 0x08
+ .byte 0x90
+ .byte 0x01
+ .short 0x0
+
+ .long 0x14
+ .long 0x1b
+ .long .text
+ .long 0x0
+ .long 0x0
+ .long 0x0
+
+// CHECK: Invalid CIE reference
diff --git a/test/ELF/invalid-elf.test b/test/ELF/invalid-elf.test
new file mode 100644
index 000000000000..05e95cab0d27
--- /dev/null
+++ b/test/ELF/invalid-elf.test
@@ -0,0 +1,34 @@
+# RUN: llvm-mc %s -o %t -filetype=obj -triple x86_64-pc-linux
+
+# RUN: not ld.lld %t %p/Inputs/invalid-data-encoding.a -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-DATA-ENC %s
+# INVALID-DATA-ENC: Invalid data encoding: test.o
+
+# RUN: not ld.lld %t %p/Inputs/invalid-file-class.a -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-FILE-CLASS %s
+# INVALID-FILE-CLASS: Invalid file class: test.o
+
+# RUN: not ld.lld %p/Inputs/invalid-symtab-sh_info.elf -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-SYMTAB-SHINFO %s
+# INVALID-SYMTAB-SHINFO: Invalid sh_info in symbol table
+
+# RUN: not ld.lld %p/Inputs/invalid-binding.elf -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-BINDING %s
+# INVALID-BINDING: unexpected binding
+
+# RUN: not ld.lld %p/Inputs/invalid-section-index.elf -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-SECTION-INDEX %s
+# INVALID-SECTION-INDEX: Invalid section index
+
+# RUN: not ld.lld %p/Inputs/invalid-shstrndx.so -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-SECTION-INDEX %s
+
+# RUN: not ld.lld %p/Inputs/invalid-shentsize-zero.elf -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-SHENTSIZE-ZERO %s
+# INVALID-SHENTSIZE-ZERO: SHF_MERGE section size must be a multiple of sh_entsize
+
+# RUN: not ld.lld %p/Inputs/invalid-multiple-eh-relocs.elf -o %t2 2>&1 | \
+# RUN: FileCheck --check-prefix=INVALID-EH-RELOCS %s
+# INVALID-EH-RELOCS: Multiple relocation sections to .eh_frame are not supported
+
+.long foo
diff --git a/test/ELF/invalid-fde-rel.s b/test/ELF/invalid-fde-rel.s
new file mode 100644
index 000000000000..9fb73d2158de
--- /dev/null
+++ b/test/ELF/invalid-fde-rel.s
@@ -0,0 +1,32 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0x14
+ .long 0x0
+ .byte 0x01
+ .byte 0x7a
+ .byte 0x52
+ .byte 0x00
+ .byte 0x01
+ .byte 0x78
+ .byte 0x10
+ .byte 0x01
+ .byte 0x1b
+ .byte 0x0c
+ .byte 0x07
+ .byte 0x08
+ .byte 0x90
+ .byte 0x01
+ .short 0x0
+
+ .long 0x14
+ .long 0x1c
+ .long 0x0
+ .long 0x0
+ .long 0x0
+ .long 0x0
+
+// CHECK: FDE doesn't reference another section
diff --git a/test/ELF/invalid-relocations.test b/test/ELF/invalid-relocations.test
new file mode 100644
index 000000000000..2b4a6c4a4210
--- /dev/null
+++ b/test/ELF/invalid-relocations.test
@@ -0,0 +1,22 @@
+# RUN: yaml2obj -format elf %s -o %t
+# RUN: not ld.lld %t -o %tout 2>&1 | FileCheck %s
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Type: SHT_PROGBITS
+ - Name: .rela.text
+ Type: SHT_RELA
+ Info: 12 # Invalid index
+ Relocations:
+ - Offset: 0x0000000000000001
+ Symbol: lulz
+ Type: R_X86_64_PC32
+Symbols:
+ Global:
+ - Name: lulz
+
+# CHECK: Invalid relocated section index
diff --git a/test/ELF/libsearch.s b/test/ELF/libsearch.s
new file mode 100644
index 000000000000..c965b9ba91fc
--- /dev/null
+++ b/test/ELF/libsearch.s
@@ -0,0 +1,83 @@
+// 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/libsearch-dyn.s -o %tdyn.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+// RUN: %p/Inputs/libsearch-st.s -o %tst.o
+// RUN: mkdir -p %t.dir
+// RUN: ld.lld -shared %tdyn.o -o %t.dir/libls.so
+// RUN: cp -f %t.dir/libls.so %t.dir/libls2.so
+// RUN: rm -f %t.dir/libls.a
+// RUN: llvm-ar rcs %t.dir/libls.a %tst.o
+// REQUIRES: x86
+
+// Should fail if no library specified
+// RUN: not ld.lld -l 2>&1 \
+// RUN: | FileCheck --check-prefix=NOLIBRARY %s
+// NOLIBRARY: missing arg value for "-l", expected 1 argument.
+
+// Should not link because of undefined symbol _bar
+// RUN: not ld.lld -o %t3 %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=UNDEFINED %s
+// UNDEFINED: undefined symbol: _bar
+
+// Should fail if cannot find specified library (without -L switch)
+// RUN: not ld.lld -o %t3 %t.o -lls 2>&1 \
+// RUN: | FileCheck --check-prefix=NOLIB %s
+// NOLIB: Unable to find library -lls
+
+// Should use explicitly specified static library
+// Also ensure that we accept -L <arg>
+// RUN: ld.lld -o %t3 %t.o -L %t.dir -l:libls.a
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+// STATIC: Symbols [
+// STATIC: Name: _static
+// STATIC: ]
+
+// Should use explicitly specified dynamic library
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -l:libls.so
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+// DYNAMIC: Symbols [
+// DYNAMIC-NOT: Name: _static
+// DYNAMIC: ]
+
+// Should prefer dynamic to static
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+
+// -L can be placed after -l
+// RUN: ld.lld -o %t3 %t.o -lls -L%t.dir
+
+// Check long forms as well
+// RUN: ld.lld -o %t3 %t.o --library-path=%t.dir --library=ls
+
+// Should not search for dynamic libraries if -Bstatic is specified
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -Bstatic -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+// RUN: not ld.lld -o %t3 %t.o -L%t.dir -Bstatic -lls2 2>&1 \
+// RUN: | FileCheck --check-prefix=NOLIB2 %s
+// NOLIB2: Unable to find library -lls2
+
+// -Bdynamic should restore default behaviour
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -Bstatic -Bdynamic -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+
+// -Bstatic and -Bdynamic should affect only libraries which follow them
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -lls -Bstatic -Bdynamic
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -Bstatic -lls -Bdynamic
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+
+// Check aliases as well
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -dn -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -non_shared -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -static -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -Bstatic -dy -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+// RUN: ld.lld -o %t3 %t.o -L%t.dir -Bstatic -call_shared -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+
+.globl _start,_bar;
+_start:
diff --git a/test/ELF/linkerscript-ouputformat.s b/test/ELF/linkerscript-ouputformat.s
new file mode 100644
index 000000000000..3c6cfdc8f966
--- /dev/null
+++ b/test/ELF/linkerscript-ouputformat.s
@@ -0,0 +1,10 @@
+# REQUIRES: x86
+# RUN: echo "OUTPUT_FORMAT(x, y, z)" > %t.script
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t1
+# RUN: ld.lld -shared -o %t2 %t1 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "OUTPUT_FORMAT(x, y)" > %t.script
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t1
+# RUN: not ld.lld -shared -o %t2 %t1 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
diff --git a/test/ELF/linkerscript-outputarch.s b/test/ELF/linkerscript-outputarch.s
new file mode 100644
index 000000000000..99089615cb17
--- /dev/null
+++ b/test/ELF/linkerscript-outputarch.s
@@ -0,0 +1,10 @@
+# REQUIRES: x86
+# RUN: echo "OUTPUT_ARCH(x)" > %t.script
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t1
+# RUN: ld.lld -shared -o %t2 %t1 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "OUTPUT_ARCH(x, y)" > %t.script
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t1
+# RUN: not ld.lld -shared -o %t2 %t1 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
diff --git a/test/ELF/linkerscript-sections.s b/test/ELF/linkerscript-sections.s
new file mode 100644
index 000000000000..ea9ae2b2726d
--- /dev/null
+++ b/test/ELF/linkerscript-sections.s
@@ -0,0 +1,119 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+
+# Empty SECTIONS command.
+# RUN: echo "SECTIONS {}" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t1 | \
+# RUN: FileCheck -check-prefix=SEC-DEFAULT %s
+
+# SECTIONS command with the same order as default.
+# RUN: echo "SECTIONS { \
+# RUN: .text : { *(.text) } \
+# RUN: .data : { *(.data) } }" > %t.script
+# RUN: ld.lld -o %t2 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t2 | \
+# RUN: FileCheck -check-prefix=SEC-DEFAULT %s
+
+# Idx Name Size
+# SEC-DEFAULT: 1 .text 0000000e {{[0-9a-f]*}} TEXT DATA
+# SEC-DEFAULT: 2 .data 00000020 {{[0-9a-f]*}} DATA
+# SEC-DEFAULT: 3 other 00000003 {{[0-9a-f]*}} DATA
+# SEC-DEFAULT: 4 .bss 00000002 {{[0-9a-f]*}} BSS
+# SEC-DEFAULT: 5 .shstrtab 00000002 {{[0-9a-f]*}}
+# SEC-DEFAULT: 6 .symtab 00000030 {{[0-9a-f]*}}
+# SEC-DEFAULT: 7 .shstrtab 00000032 {{[0-9a-f]*}}
+# SEC-DEFAULT: 8 .strtab 00000008 {{[0-9a-f]*}}
+
+# Sections are put in order specified in linker script.
+# RUN: echo "SECTIONS { \
+# RUN: .bss : { *(.bss) } \
+# RUN: other : { *(other) } \
+# RUN: .shstrtab : { *(.shstrtab) } \
+# RUN: .symtab : { *(.symtab) } \
+# RUN: .strtab : { *(.strtab) } \
+# RUN: .data : { *(.data) } \
+# RUN: .text : { *(.text) } }" > %t.script
+# RUN: ld.lld -o %t3 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t3 | \
+# RUN: FileCheck -check-prefix=SEC-ORDER %s
+
+# Idx Name Size
+# SEC-ORDER: 1 .bss 00000002 {{[0-9a-f]*}} BSS
+# SEC-ORDER: 2 other 00000003 {{[0-9a-f]*}} DATA
+# SEC-ORDER: 3 .shstrtab 00000002 {{[0-9a-f]*}}
+# SEC-ORDER: 4 .shstrtab 00000032 {{[0-9a-f]*}}
+# SEC-ORDER: 5 .symtab 00000030 {{[0-9a-f]*}}
+# SEC-ORDER: 6 .strtab 00000008 {{[0-9a-f]*}}
+# SEC-ORDER: 7 .data 00000020 {{[0-9a-f]*}} DATA
+# SEC-ORDER: 8 .text 0000000e {{[0-9a-f]*}} TEXT DATA
+
+# .text and .data have swapped names but proper sizes and types.
+# RUN: echo "SECTIONS { \
+# RUN: .data : { *(.text) } \
+# RUN: .text : { *(.data) } }" > %t.script
+# RUN: ld.lld -o %t4 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t4 | \
+# RUN: FileCheck -check-prefix=SEC-SWAP-NAMES %s
+
+# Idx Name Size
+# SEC-SWAP-NAMES: 1 .data 0000000e {{[0-9a-f]*}} TEXT DATA
+# SEC-SWAP-NAMES: 2 .text 00000020 {{[0-9a-f]*}} DATA
+# SEC-SWAP-NAMES: 3 other 00000003 {{[0-9a-f]*}} DATA
+# SEC-SWAP-NAMES: 4 .bss 00000002 {{[0-9a-f]*}} BSS
+# SEC-SWAP-NAMES: 5 .shstrtab 00000002 {{[0-9a-f]*}}
+# SEC-SWAP-NAMES: 6 .symtab 00000030 {{[0-9a-f]*}}
+# SEC-SWAP-NAMES: 7 .shstrtab 00000032 {{[0-9a-f]*}}
+# SEC-SWAP-NAMES: 8 .strtab 00000008 {{[0-9a-f]*}}
+
+# .shstrtab from the input object file is discarded.
+# RUN: echo "SECTIONS { \
+# RUN: /DISCARD/ : { *(.shstrtab) } }" > %t.script
+# RUN: ld.lld -o %t5 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t5 | \
+# RUN: FileCheck -check-prefix=SEC-DISCARD %s
+
+# Idx Name Size
+# SEC-DISCARD: 1 .text 0000000e {{[0-9a-f]*}} TEXT DATA
+# SEC-DISCARD: 2 .data 00000020 {{[0-9a-f]*}} DATA
+# SEC-DISCARD: 3 other 00000003 {{[0-9a-f]*}} DATA
+# SEC-DISCARD: 4 .bss 00000002 {{[0-9a-f]*}} BSS
+# SEC-DISCARD: 5 .symtab 00000030 {{[0-9a-f]*}}
+# SEC-DISCARD: 6 .shstrtab 00000032 {{[0-9a-f]*}}
+# SEC-DISCARD: 7 .strtab 00000008 {{[0-9a-f]*}}
+
+# Multiple SECTIONS command specifying additional input section descriptions
+# for the same output section description - input sections are merged into
+# one output section.
+# RUN: echo "SECTIONS { \
+# RUN: .text : { *(.text) } \
+# RUN: .data : { *(.data) } } \
+# RUN: SECTIONS { \
+# RUN: .data : { *(other) } }" > %t.script
+# RUN: ld.lld -o %t6 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t6 | \
+# RUN: FileCheck -check-prefix=SEC-MULTI %s
+
+# Idx Name Size
+# SEC-MULTI: 1 .text 0000000e {{[0-9a-f]*}} TEXT DATA
+# SEC-MULTI: 2 .data 00000023 {{[0-9a-f]*}} DATA
+# SEC-MULTI: 3 .bss 00000002 {{[0-9a-f]*}} BSS
+# SEC-MULTI: 4 .shstrtab 00000002 {{[0-9a-f]*}}
+# SEC-MULTI: 5 .symtab 00000030 {{[0-9a-f]*}}
+# SEC-MULTI: 6 .shstrtab 0000002c {{[0-9a-f]*}}
+# SEC-MULTI: 7 .strtab 00000008 {{[0-9a-f]*}}
+
+.globl _start;
+_start:
+ mov $60, %rax
+ mov $42, %rdi
+
+.section .data,"aw"
+.quad 10, 10, 20, 20
+.section other,"aw"
+.short 10
+.byte 20
+.section .shstrtab,""
+.short 20
+.section .bss,"",@nobits
+.short 0
diff --git a/test/ELF/linkerscript.s b/test/ELF/linkerscript.s
new file mode 100644
index 000000000000..bff285b97612
--- /dev/null
+++ b/test/ELF/linkerscript.s
@@ -0,0 +1,114 @@
+# REQUIRES: x86
+# RUN: mkdir -p %t.dir
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+# RUN: %p/Inputs/libsearch-st.s -o %t2.o
+# RUN: rm -f %t.dir/libxyz.a
+# RUN: llvm-ar rcs %t.dir/libxyz.a %t2.o
+
+# RUN: echo "EXTERN( undef undef2 )" > %t.script
+# RUN: ld.lld %t -o %t2 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t ")" > %t.script
+# RUN: ld.lld -o %t2 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "INPUT(" %t ")" > %t.script
+# RUN: ld.lld -o %t2 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t libxyz.a ")" > %t.script
+# RUN: not ld.lld -o %t2 %t.script
+# RUN: ld.lld -o %t2 %t.script -L%t.dir
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t =libxyz.a ")" > %t.script
+# RUN: not ld.lld -o %t2 %t.script
+# RUN: ld.lld -o %t2 %t.script --sysroot=%t.dir
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t -lxyz ")" > %t.script
+# RUN: not ld.lld -o %t2 %t.script
+# RUN: ld.lld -o %t2 %t.script -L%t.dir
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t libxyz.a ")" > %t.script
+# RUN: not ld.lld -o %t2 %t.script
+# RUN: ld.lld -o %t2 %t.script -L%t.dir
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t /libxyz.a ")" > %t.script
+# RUN: echo "GROUP(" %t /libxyz.a ")" > %t.dir/xyz.script
+# RUN: not ld.lld -o %t2 %t.script
+# RUN: not ld.lld -o %t2 %t.script --sysroot=%t.dir
+# RUN: ld.lld -o %t2 %t.dir/xyz.script --sysroot=%t.dir
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(" %t.script2 ")" > %t.script1
+# RUN: echo "GROUP(" %t ")" > %t.script2
+# RUN: ld.lld -o %t2 %t.script1
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "ENTRY(_label)" > %t.script
+# RUN: ld.lld -o %t2 %t.script %t
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "ENTRY(_wrong_label)" > %t.script
+# RUN: not ld.lld -o %t2 %t.script %t > %t.log 2>&1
+# RUN: FileCheck -check-prefix=ERR-ENTRY %s < %t.log
+
+# ERR-ENTRY: undefined symbol: _wrong_label
+
+# -e has precedence over linker script's ENTRY.
+# RUN: echo "ENTRY(_label)" > %t.script
+# RUN: ld.lld -e _start -o %t2 %t.script %t
+# RUN: llvm-readobj -file-headers -symbols %t2 | \
+# RUN: FileCheck -check-prefix=ENTRY-OVERLOAD %s
+
+# ENTRY-OVERLOAD: Entry: [[ENTRY:0x[0-9A-F]+]]
+# ENTRY-OVERLOAD: Name: _start
+# ENTRY-OVERLOAD-NEXT: Value: [[ENTRY]]
+
+# RUN: echo "OUTPUT_FORMAT(\"elf64-x86-64\") /*/*/ GROUP(" %t ")" > %t.script
+# RUN: ld.lld -o %t2 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "GROUP(AS_NEEDED(" %t "))" > %t.script
+# RUN: ld.lld -o %t2 %t.script
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: rm -f %t.out
+# RUN: echo "OUTPUT(" %t.out ")" > %t.script
+# RUN: ld.lld %t.script %t
+# RUN: llvm-readobj %t.out > /dev/null
+
+# RUN: echo "SEARCH_DIR(/lib/foo/blah)" > %t.script
+# RUN: ld.lld %t.script %t
+# RUN: llvm-readobj %t.out > /dev/null
+
+# RUN: echo ";SEARCH_DIR(x);SEARCH_DIR(y);" > %t.script
+# RUN: ld.lld %t.script %t
+# RUN: llvm-readobj %t.out > /dev/null
+
+# RUN: echo ";" > %t.script
+# RUN: ld.lld %t.script %t
+# RUN: llvm-readobj %t.out > /dev/null
+
+# RUN: echo "INCLUDE " %t.script2 "OUTPUT(" %t.out ")" > %t.script1
+# RUN: echo "GROUP(" %t ")" > %t.script2
+# RUN: ld.lld %t.script1
+# RUN: llvm-readobj %t2 > /dev/null
+
+# RUN: echo "FOO(BAR)" > %t.script
+# RUN: not ld.lld -o foo %t.script > %t.log 2>&1
+# RUN: FileCheck -check-prefix=ERR1 %s < %t.log
+
+# ERR1: unknown directive: FOO
+
+.globl _start, _label;
+_start:
+ mov $60, %rax
+ mov $42, %rdi
+_label:
+ syscall
diff --git a/test/ELF/linkerscript2.s b/test/ELF/linkerscript2.s
new file mode 100644
index 000000000000..f83198f759fd
--- /dev/null
+++ b/test/ELF/linkerscript2.s
@@ -0,0 +1,11 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd \
+# RUN: %p/Inputs/libsearch-dyn.s -o %tdyn.o
+# RUN: mkdir -p %t.dir
+# RUN: ld.lld -shared %tdyn.o -o %t.dir/libls.so
+# RUN: echo "SEARCH_DIR(" %t.dir ")" > %t.script
+# RUN: ld.lld -o %t2 --script %t.script -lls %t
+
+.globl _start,_bar
+_start:
diff --git a/test/ELF/lit.local.cfg b/test/ELF/lit.local.cfg
new file mode 100644
index 000000000000..0011e796e5f4
--- /dev/null
+++ b/test/ELF/lit.local.cfg
@@ -0,0 +1,2 @@
+config.suffixes = ['.test', '.s']
+
diff --git a/test/ELF/local-dynamic.s b/test/ELF/local-dynamic.s
new file mode 100644
index 000000000000..162c58cb57ed
--- /dev/null
+++ b/test/ELF/local-dynamic.s
@@ -0,0 +1,83 @@
+// Check that local symbols are not inserted into dynamic table.
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -shared -o %t1.so
+// RUN: llvm-readobj -t -dyn-symbols %t1.so | FileCheck %s
+// REQUIRES: x86
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: blah
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: goo
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start@
+// CHECK-NEXT: Value: 0x1000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+.global _start
+_start:
+
+blah:
+foo:
+goo:
+
+
diff --git a/test/ELF/local-got-shared.s b/test/ELF/local-got-shared.s
new file mode 100644
index 000000000000..08e6583f481f
--- /dev/null
+++ b/test/ELF/local-got-shared.s
@@ -0,0 +1,35 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t -shared
+// RUN: llvm-readobj -s -r %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+bar:
+ call foo@gotpcrel
+
+ .hidden foo
+ .global foo
+foo:
+ nop
+
+// 0x2090 - 0x1000 - 5 = 4235
+// DISASM: bar:
+// DISASM-NEXT: 1000: {{.*}} callq 4235
+
+// DISASM: foo:
+// DISASM-NEXT: 1005: {{.*}} nop
+
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x2090
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 8
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x2090 R_X86_64_RELATIVE - 0x1005
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/local-got.s b/test/ELF/local-got.s
new file mode 100644
index 000000000000..015c058e2eb9
--- /dev/null
+++ b/test/ELF/local-got.s
@@ -0,0 +1,48 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -s -r -section-data %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+ .globl _start
+_start:
+ call bar@gotpcrel
+ call foo@gotpcrel
+
+ .global foo
+foo:
+ nop
+
+// 0x120A0 - 0x11000 - 5 = 4251
+// 0x120A8 - 0x11005 - 5 = 4254
+// DISASM: _start:
+// DISASM-NEXT: 11000: {{.*}} callq 4251
+// DISASM-NEXT: 11005: {{.*}} callq 4254
+
+// DISASM: foo:
+// DISASM-NEXT: 1100a: {{.*}} nop
+
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x120A0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// 0x1200a in little endian
+// CHECK-NEXT: 0000: 00000000 00000000 0A100100 00000000
+// CHECK-NEXT: )
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x120A0 R_X86_64_GLOB_DAT bar 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/local.s b/test/ELF/local.s
new file mode 100644
index 000000000000..cc879e15c0db
--- /dev/null
+++ b/test/ELF/local.s
@@ -0,0 +1,82 @@
+// Check that symbol table is correctly populated with local symbols.
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %t1
+// RUN: llvm-readobj -t -s %t1 | FileCheck %s
+// REQUIRES: x86
+
+// Check that Info is equal to the number of local symbols.
+// CHECK: Section {
+// CHECK: Name: .symtab
+// CHECK-NEXT: Type: SHT_SYMTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info: 5
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: abs
+// CHECK-NEXT: Value: 0x2A
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: blah
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: goo
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+.global _start
+_start:
+
+blah:
+foo:
+goo:
+abs = 42
diff --git a/test/ELF/many-sections.s b/test/ELF/many-sections.s
new file mode 100644
index 000000000000..77e76c20a60d
--- /dev/null
+++ b/test/ELF/many-sections.s
@@ -0,0 +1,116 @@
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t
+// RUN: llvm-readobj -t %t | FileCheck %s
+
+// Verify that the symbol _start is in a section with an index >= SHN_LORESERVE.
+// CHECK: Name: _start
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: dm (0xFF00)
+
+
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck --check-prefix=LINKED %s
+
+// Test that _start is in the correct section.
+// LINKED: Name: _start
+// LINKED-NEXT: Value: 0x0
+// LINKED-NEXT: Size: 0
+// LINKED-NEXT: Binding: Global
+// LINKED-NEXT: Type: None
+// LINKED-NEXT: Other: 0
+// LINKED-NEXT: Section: dm
+
+.macro gen_sections4 x
+ .section a\x
+ .section b\x
+ .section c\x
+ .section d\x
+.endm
+
+.macro gen_sections8 x
+ gen_sections4 a\x
+ gen_sections4 b\x
+.endm
+
+.macro gen_sections16 x
+ gen_sections8 a\x
+ gen_sections8 b\x
+.endm
+
+.macro gen_sections32 x
+ gen_sections16 a\x
+ gen_sections16 b\x
+.endm
+
+.macro gen_sections64 x
+ gen_sections32 a\x
+ gen_sections32 b\x
+.endm
+
+.macro gen_sections128 x
+ gen_sections64 a\x
+ gen_sections64 b\x
+.endm
+
+.macro gen_sections256 x
+ gen_sections128 a\x
+ gen_sections128 b\x
+.endm
+
+.macro gen_sections512 x
+ gen_sections256 a\x
+ gen_sections256 b\x
+.endm
+
+.macro gen_sections1024 x
+ gen_sections512 a\x
+ gen_sections512 b\x
+.endm
+
+.macro gen_sections2048 x
+ gen_sections1024 a\x
+ gen_sections1024 b\x
+.endm
+
+.macro gen_sections4096 x
+ gen_sections2048 a\x
+ gen_sections2048 b\x
+.endm
+
+.macro gen_sections8192 x
+ gen_sections4096 a\x
+ gen_sections4096 b\x
+.endm
+
+.macro gen_sections16384 x
+ gen_sections8192 a\x
+ gen_sections8192 b\x
+.endm
+
+.macro gen_sections32768 x
+ gen_sections16384 a\x
+ gen_sections16384 b\x
+.endm
+
+ .bss
+ .section bar
+
+gen_sections32768 a
+gen_sections16384 b
+gen_sections8192 c
+gen_sections4096 d
+gen_sections2048 e
+gen_sections1024 f
+gen_sections512 g
+gen_sections128 h
+gen_sections64 i
+gen_sections32 j
+gen_sections16 k
+gen_sections8 l
+gen_sections4 m
+
+.global _start
+_start:
diff --git a/test/ELF/merge-invalid-size.s b/test/ELF/merge-invalid-size.s
new file mode 100644
index 000000000000..2a99e14ad836
--- /dev/null
+++ b/test/ELF/merge-invalid-size.s
@@ -0,0 +1,7 @@
+// REQUIRES: x86
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: not ld.lld %t.o -o %t.so 2>&1 | FileCheck %s
+// CHECK: SHF_MERGE section size must be a multiple of sh_entsize
+
+ .section .foo,"aM",@progbits,4
+ .short 42
diff --git a/test/ELF/merge-shared.s b/test/ELF/merge-shared.s
new file mode 100644
index 000000000000..702a4e195f32
--- /dev/null
+++ b/test/ELF/merge-shared.s
@@ -0,0 +1,26 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-readobj -r -s %t.so | FileCheck %s
+
+ .section foo,"aM",@progbits,4
+ .long 42
+ .long 42
+
+ .text
+ .quad foo + 6
+
+
+// CHECK: Name: foo
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1C8
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x1CA
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/merge-string-align.s b/test/ELF/merge-string-align.s
new file mode 100644
index 000000000000..b06920ac0af8
--- /dev/null
+++ b/test/ELF/merge-string-align.s
@@ -0,0 +1,39 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-readobj -s %t.so | FileCheck %s
+
+ .section .rodata.str1.16,"aMS",@progbits,1
+ .align 16
+ .asciz "foo"
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+ .asciz "foo"
+
+// CHECK: Name: .rodata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: SHF_STRINGS
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 16
+
+// CHECK: Name: .rodata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: SHF_STRINGS
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
diff --git a/test/ELF/merge-string-error.s b/test/ELF/merge-string-error.s
new file mode 100644
index 000000000000..58a624329ed9
--- /dev/null
+++ b/test/ELF/merge-string-error.s
@@ -0,0 +1,11 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: not ld.lld %t.o -o %t.so -shared 2>&1 | FileCheck %s
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+ .asciz "abc"
+
+ .text
+ .long .rodata.str1.1 + 4
+
+// CHECK: Entry is past the end of the section
diff --git a/test/ELF/merge-string-no-null.s b/test/ELF/merge-string-no-null.s
new file mode 100644
index 000000000000..70d6bbbc32e8
--- /dev/null
+++ b/test/ELF/merge-string-no-null.s
@@ -0,0 +1,8 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: not ld.lld %t.o -o %t.so -shared 2>&1 | FileCheck %s
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+ .ascii "abc"
+
+// CHECK: String is not null terminated
diff --git a/test/ELF/merge-string.s b/test/ELF/merge-string.s
new file mode 100644
index 000000000000..40cc4415f956
--- /dev/null
+++ b/test/ELF/merge-string.s
@@ -0,0 +1,85 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld -O2 %t.o -o %t.so -shared
+// RUN: llvm-readobj -s -section-data -t %t.so | FileCheck %s
+// RUN: ld.lld -O1 %t.o -o %t.so -shared
+// RUN: llvm-readobj -s -section-data -t %t.so | FileCheck --check-prefix=NOTAIL %s
+
+ .section .rodata.str1.1,"aMS",@progbits,1
+ .asciz "abc"
+foo:
+ .ascii "a"
+bar:
+ .asciz "bc"
+ .asciz "bc"
+
+ .section .rodata.str2.2,"aMS",@progbits,2
+ .align 2
+zed:
+ .short 20
+ .short 0
+
+// CHECK: Name: .rodata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: SHF_STRINGS
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1C8
+// CHECK-NEXT: Offset: 0x1C8
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 61626300 |abc.|
+// CHECK-NEXT: )
+
+// NOTAIL: Name: .rodata
+// NOTAIL-NEXT: Type: SHT_PROGBITS
+// NOTAIL-NEXT: Flags [
+// NOTAIL-NEXT: SHF_ALLOC
+// NOTAIL-NEXT: SHF_MERGE
+// NOTAIL-NEXT: SHF_STRINGS
+// NOTAIL-NEXT: ]
+// NOTAIL-NEXT: Address: 0x1C8
+// NOTAIL-NEXT: Offset: 0x1C8
+// NOTAIL-NEXT: Size: 7
+// NOTAIL-NEXT: Link: 0
+// NOTAIL-NEXT: Info: 0
+// NOTAIL-NEXT: AddressAlignment: 1
+// NOTAIL-NEXT: EntrySize: 0
+// NOTAIL-NEXT: SectionData (
+// NOTAIL-NEXT: 0000: 61626300 626300 |abc.bc.|
+// NOTAIL-NEXT: )
+
+// CHECK: Name: .rodata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: SHF_STRINGS
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1CC
+// CHECK-NEXT: Offset: 0x1CC
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 2
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 14000000 |....|
+// CHECK-NEXT: )
+
+
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x1C9
+
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x1C8
+
+// CHECK: Name: zed
+// CHECK-NEXT: Value: 0x1CC
+// CHECK-NEXT: Size: 0
diff --git a/test/ELF/merge-sym.s b/test/ELF/merge-sym.s
new file mode 100644
index 000000000000..4a4e9824a0de
--- /dev/null
+++ b/test/ELF/merge-sym.s
@@ -0,0 +1,21 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-readobj -t -s %t.so | FileCheck %s
+
+ .section .rodata.cst4,"aM",@progbits,4
+ .short 0
+foo:
+ .short 42
+
+
+// CHECK: Name: .rodata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1C8
+
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x1CA
diff --git a/test/ELF/merge.s b/test/ELF/merge.s
new file mode 100644
index 000000000000..9cead642fa8c
--- /dev/null
+++ b/test/ELF/merge.s
@@ -0,0 +1,109 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/merge.s -o %t2.o
+// RUN: ld.lld %t.o %t2.o -o %t
+// RUN: llvm-readobj -s -section-data -t %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+ .section .mysec,"aM",@progbits,4
+ .align 4
+ .global foo
+ .hidden foo
+ .long 0x10
+foo:
+ .long 0x42
+bar:
+ .long 0x42
+zed:
+ .long 0x42
+
+// CHECK: Name: .mysec
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_MERGE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x10120
+// CHECK-NEXT: Offset: 0x120
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 10000000 42000000
+// CHECK-NEXT: )
+
+
+// Address of the constant 0x10 = 0x10120 = 65824
+// Address of the constant 0x42 = 0x10124 = 65828
+
+// CHECK: Symbols [
+
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x10124
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Loca
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .mysec
+
+// CHECK: Name: zed
+// CHECK-NEXT: Value: 0x10124
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .mysec
+
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x10124
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 2
+// CHECK-NEXT: Section: .mysec
+
+ // CHECK: ]
+
+ .text
+ .globl _start
+_start:
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+
+ movl .mysec, %eax
+// addr(0x10) = 65824
+// DISASM-NEXT: movl 65824, %eax
+
+ movl .mysec+7, %eax
+// addr(0x42) + 3 = 65828 + 3 = 65831
+// DISASM-NEXT: movl 65831, %eax
+
+ movl .mysec+8, %eax
+// addr(0x42) = 65828
+// DISASM-NEXT: movl 65828, %eax
+
+ movl bar+7, %eax
+// addr(0x42) + 7 = 65828 + 7 = 65835
+// DISASM-NEXT: movl 65835, %eax
+
+ movl bar+8, %eax
+// addr(0x42) + 8 = 65828 + 8 = 65836
+// DISASM-NEXT: movl 65836, %eax
+
+ movl foo, %eax
+// addr(0x42) = 65828
+// DISASM-NEXT: movl 65828, %eax
+
+ movl foo+7, %eax
+// addr(0x42) + 7 = = 65828 + 7 = 65835
+// DISASM-NEXT: movl 65835, %eax
+
+ movl foo+8, %eax
+// addr(0x42) + 8 = = 65828 + 8 = 65836
+// DISASM-NEXT: movl 65836, %eax
+
+// From the other file: movl .mysec, %eax
+// addr(0x42) = 65828
+// DISASM-NEXT: movl 65828, %eax
diff --git a/test/ELF/mips-call16.s b/test/ELF/mips-call16.s
new file mode 100644
index 000000000000..4a5d0bf3f871
--- /dev/null
+++ b/test/ELF/mips-call16.s
@@ -0,0 +1,40 @@
+# Check R_MIPS_CALL16 relocation calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -shared -o %t.exe
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got -symbols %t.exe \
+# RUN: | FileCheck -check-prefix=GOT %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lw $t0,%call16(g1)($gp)
+
+ .globl g1
+ .type g1,@function
+g1:
+ nop
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 10000: 8f 88 80 18 lw $8, -32744
+
+# GOT: Name: g1
+# GOT-NEXT: Value: 0x[[ADDR:[0-9A-F]+]]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address:
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x[[ADDR]]
+# GOT-NEXT: Value: 0x[[ADDR]]
+# GOT-NEXT: Type: Function
+# GOT-NEXT: Section: .text
+# GOT-NEXT: Name: g1
+# GOT-NEXT: }
+# GOT-NEXT: ]
diff --git a/test/ELF/mips-dynamic.s b/test/ELF/mips-dynamic.s
new file mode 100644
index 000000000000..626a3556d361
--- /dev/null
+++ b/test/ELF/mips-dynamic.s
@@ -0,0 +1,91 @@
+# Check MIPS specific .dynamic section entries.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %p/Inputs/mips-dynamic.s -o %td.o
+# RUN: ld.lld -shared %td.o -o %td.so
+
+# RUN: ld.lld %t.o %td.so -o %t.exe
+# RUN: llvm-readobj -sections -dynamic-table %t.exe \
+# RUN: | FileCheck -check-prefix=EXE %s
+
+# RUN: ld.lld -shared %t.o %td.so -o %t.so
+# RUN: llvm-readobj -sections -dyn-symbols -dynamic-table %t.so \
+# RUN: | FileCheck -check-prefix=DSO %s
+
+# REQUIRES: mips
+
+# EXE: Sections [
+# EXE: Name: .dynamic
+# EXE-NEXT: Type: SHT_DYNAMIC
+# EXE-NEXT: Flags [
+# EXE-NEXT: SHF_ALLOC
+# EXE-NEXT: ]
+# EXE: Name: .got
+# EXE-NEXT: Type: SHT_PROGBITS
+# EXE-NEXT: Flags [ (0x10000003)
+# EXE-NEXT: SHF_ALLOC
+# EXE-NEXT: SHF_WRITE
+# EXE-NEXT: ]
+# EXE-NEXT: Address: [[GOTADDR:0x[0-9a-f]+]]
+# EXE-NEXT: Offset:
+# EXE-NEXT: Size: 8
+# EXE: Name: .rld_map
+# EXE-NEXT: Type: SHT_PROGBITS
+# EXE-NEXT: Flags [
+# EXE-NEXT: SHF_ALLOC
+# EXE-NEXT: SHF_WRITE
+# EXE-NEXT: ]
+# EXE-NEXT: Address: [[RLDMAPADDR:0x[0-9a-f]+]]
+# EXE-NEXT: Offset:
+# EXE-NEXT: Size: 4
+# EXE: ]
+# EXE: DynamicSection [
+# EXE-NEXT: Tag Type Name/Value
+# EXE-DAG: 0x00000003 PLTGOT [[GOTADDR]]
+# EXE-DAG: 0x70000001 MIPS_RLD_VERSION 1
+# EXE-DAG: 0x70000005 MIPS_FLAGS NOTPOT
+# EXE-DAG: 0x70000006 MIPS_BASE_ADDRESS
+# EXE-DAG: 0x7000000A MIPS_LOCAL_GOTNO 2
+# EXE-DAG: 0x70000011 MIPS_SYMTABNO 1
+# EXE-DAG: 0x70000013 MIPS_GOTSYM 0x1
+# EXE-DAG: 0x70000016 MIPS_RLD_MAP [[RLDMAPADDR]]
+# EXE: ]
+
+# DSO: Sections [
+# DSO: Name: .dynamic
+# DSO-NEXT: Type: SHT_DYNAMIC
+# DSO-NEXT: Flags [
+# DSO-NEXT: SHF_ALLOC
+# DSO-NEXT: ]
+# DSO: Name: .got
+# DSO-NEXT: Type: SHT_PROGBITS
+# DSO-NEXT: Flags [ (0x10000003)
+# DSO-NEXT: SHF_ALLOC
+# DSO-NEXT: SHF_WRITE
+# DSO-NEXT: ]
+# DSO-NEXT: Address: [[GOTADDR:0x[0-9a-f]+]]
+# DSO-NEXT: Offset:
+# DSO-NEXT: Size: 8
+# DSO: ]
+# DSO: DynamicSymbols [
+# DSO: Name: @
+# DSO: Name: _gp@
+# DSO: Name: __start@
+# DSO: Name: _foo@
+# DSO: ]
+# DSO: DynamicSection [
+# DSO-NEXT: Tag Type Name/Value
+# DSO-DAG: 0x00000003 PLTGOT [[GOTADDR]]
+# DSO-DAG: 0x70000001 MIPS_RLD_VERSION 1
+# DSO-DAG: 0x70000005 MIPS_FLAGS NOTPOT
+# DSO-DAG: 0x70000006 MIPS_BASE_ADDRESS 0x0
+# DSO-DAG: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DSO-DAG: 0x70000011 MIPS_SYMTABNO 4
+# DSO-DAG: 0x70000013 MIPS_GOTSYM 0x4
+# DSO: ]
+
+ .text
+ .globl __start,_foo
+ .type _foo,@function
+__start:
+ nop
diff --git a/test/ELF/mips-dynsym-sort.s b/test/ELF/mips-dynsym-sort.s
new file mode 100644
index 000000000000..7d4559cf9335
--- /dev/null
+++ b/test/ELF/mips-dynsym-sort.s
@@ -0,0 +1,43 @@
+# Check the order of dynamic symbols for the MIPS target.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-be.o
+# RUN: ld.lld -shared %t-be.o -o %t-be.so
+# RUN: llvm-readobj -symbols -dyn-symbols %t-be.so | FileCheck %s
+
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
+# RUN: ld.lld -shared %t-el.o -o %t-el.so
+# RUN: llvm-readobj -symbols -dyn-symbols %t-el.so | FileCheck %s
+
+# REQUIRES: mips
+
+ .data
+ .globl v1,v2,v3
+v1:
+ .space 4
+v2:
+ .space 4
+v3:
+ .space 4
+
+ .text
+ .globl __start
+__start:
+ lui $2, %got(v3) # v3 will precede v1 in the GOT
+ lui $2, %got(v1)
+
+# Since all these symbols have global binding,
+# the Symbols section contains them in the original order.
+# CHECK: Symbols [
+# CHECK: Name: v1
+# CHECK: Name: v2
+# CHECK: Name: v3
+# CHECK: ]
+
+# The symbols in the DynamicSymbols section are sorted in compliance with
+# the MIPS rules. v2 comes first as it is not in the GOT.
+# v1 and v3 are sorted according to their order in the GOT.
+# CHECK: DynamicSymbols [
+# CHECK: Name: v2@
+# CHECK: Name: v3@
+# CHECK: Name: v1@
+# CHECK: ]
diff --git a/test/ELF/mips-elf-flags.s b/test/ELF/mips-elf-flags.s
new file mode 100644
index 000000000000..7817e58b5383
--- /dev/null
+++ b/test/ELF/mips-elf-flags.s
@@ -0,0 +1,27 @@
+# Check generation of MIPS specific ELF header flags.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -shared -o %t.so
+# RUN: llvm-readobj -h %t.so | FileCheck -check-prefix=SO %s
+# RUN: ld.lld %t.o -o %t.exe
+# RUN: llvm-readobj -h %t.exe | FileCheck -check-prefix=EXE %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ nop
+
+# SO: Flags [
+# SO-NEXT: EF_MIPS_ABI_O32
+# SO-NEXT: EF_MIPS_ARCH_32R2
+# SO-NEXT: EF_MIPS_CPIC
+# SO-NEXT: EF_MIPS_PIC
+# SO-NEXT: ]
+
+# EXE: Flags [
+# EXE-NEXT: EF_MIPS_ABI_O32
+# EXE-NEXT: EF_MIPS_ARCH_32R2
+# EXE-NEXT: EF_MIPS_CPIC
+# EXE-NEXT: ]
diff --git a/test/ELF/mips-gnu-hash.s b/test/ELF/mips-gnu-hash.s
new file mode 100644
index 000000000000..4b11f213518c
--- /dev/null
+++ b/test/ELF/mips-gnu-hash.s
@@ -0,0 +1,15 @@
+# Shouldn't allow the GNU hash style to be selected with the MIPS target.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-be.o
+# RUN: not ld.lld -shared -hash-style=gnu %t-be.o -o %t-be.so 2>&1 | FileCheck %s
+
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
+# RUN: not ld.lld -shared -hash-style=gnu %t-el.o -o %t-el.so 2>&1 | FileCheck %s
+
+# CHECK: The .gnu.hash section is not compatible with the MIPS target.
+
+# REQUIRES: mips
+
+ .globl __start
+__start:
+ nop
diff --git a/test/ELF/mips-got-relocs.s b/test/ELF/mips-got-relocs.s
new file mode 100644
index 000000000000..27180fbf82ea
--- /dev/null
+++ b/test/ELF/mips-got-relocs.s
@@ -0,0 +1,99 @@
+# Check R_MIPS_GOT16 relocation calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-be.o
+# RUN: ld.lld %t-be.o -o %t-be.exe
+# RUN: llvm-objdump -section-headers -t %t-be.exe | FileCheck -check-prefix=EXE_SYM %s
+# RUN: llvm-objdump -s -section=.got %t-be.exe | FileCheck -check-prefix=EXE_GOT_BE %s
+# RUN: llvm-objdump -d %t-be.exe | FileCheck -check-prefix=EXE_DIS_BE %s
+# RUN: llvm-readobj -relocations %t-be.exe | FileCheck -check-prefix=NORELOC %s
+# RUN: llvm-readobj -sections %t-be.exe | FileCheck -check-prefix=SHFLAGS %s
+
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
+# RUN: ld.lld %t-el.o -o %t-el.exe
+# RUN: llvm-objdump -section-headers -t %t-el.exe | FileCheck -check-prefix=EXE_SYM %s
+# RUN: llvm-objdump -s -section=.got %t-el.exe | FileCheck -check-prefix=EXE_GOT_EL %s
+# RUN: llvm-objdump -d %t-el.exe | FileCheck -check-prefix=EXE_DIS_EL %s
+# RUN: llvm-readobj -relocations %t-el.exe | FileCheck -check-prefix=NORELOC %s
+# RUN: llvm-readobj -sections %t-el.exe | FileCheck -check-prefix=SHFLAGS %s
+
+# RUN: ld.lld -shared %t-be.o -o %t-be.so
+# RUN: llvm-objdump -section-headers -t %t-be.so | FileCheck -check-prefix=DSO_SYM %s
+# RUN: llvm-objdump -s -section=.got %t-be.so | FileCheck -check-prefix=DSO_GOT_BE %s
+# RUN: llvm-objdump -d %t-be.so | FileCheck -check-prefix=DSO_DIS_BE %s
+# RUN: llvm-readobj -relocations %t-be.so | FileCheck -check-prefix=NORELOC %s
+# RUN: llvm-readobj -sections %t-be.so | FileCheck -check-prefix=SHFLAGS %s
+
+# RUN: ld.lld -shared %t-el.o -o %t-el.so
+# RUN: llvm-objdump -section-headers -t %t-el.so | FileCheck -check-prefix=DSO_SYM %s
+# RUN: llvm-objdump -s -section=.got %t-el.so | FileCheck -check-prefix=DSO_GOT_EL %s
+# RUN: llvm-objdump -d %t-el.so | FileCheck -check-prefix=DSO_DIS_EL %s
+# RUN: llvm-readobj -relocations %t-el.so | FileCheck -check-prefix=NORELOC %s
+# RUN: llvm-readobj -sections %t-el.so | FileCheck -check-prefix=SHFLAGS %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lui $2, %got(v1)
+
+ .data
+ .globl v1
+ .type v1,@object
+ .size v1,4
+v1:
+ .word 0
+
+# EXE_SYM: Sections:
+# EXE_SYM: .got 0000000c 0000000000030000 DATA
+# EXE_SYM: SYMBOL TABLE:
+# EXE_SYM: 00037ff0 *ABS* 00000000 _gp
+# ^-- .got + GP offset (0x7ff0)
+# EXE_SYM: 00040000 g .data 00000004 v1
+
+# EXE_GOT_BE: Contents of section .got:
+# EXE_GOT_BE: 30000 00000000 80000000 00040000
+# ^ ^ ^-- v1 (0x40000)
+# | +-- Module pointer (0x80000000)
+# +-- Lazy resolver (0x0)
+
+# EXE_GOT_EL: Contents of section .got:
+# EXE_GOT_EL: 30000 00000000 00000080 00000400
+# ^ ^ ^-- v1 (0x40000)
+# | +-- Module pointer (0x80000000)
+# +-- Lazy resolver (0x0)
+
+# v1GotAddr (0x3000c) - _gp (0x37ff4) = -0x7fe8 => 0x8018 = 32792
+# EXE_DIS_BE: 20000: 3c 02 80 18 lui $2, 32792
+# EXE_DIS_EL: 20000: 18 80 02 3c lui $2, 32792
+
+# DSO_SYM: Sections:
+# DSO_SYM: .got 0000000c 0000000000020000 DATA
+# DSO_SYM: SYMBOL TABLE:
+# DSO_SYM: 00027ff0 *ABS* 00000000 _gp
+# ^-- .got + GP offset (0x7ff0)
+# DSO_SYM: 00030000 g .data 00000004 v1
+
+# DSO_GOT_BE: Contents of section .got:
+# DSO_GOT_BE: 20000 00000000 80000000 00030000
+# ^ ^ ^-- v1 (0x30000)
+# | +-- Module pointer (0x80000000)
+# +-- Lazy resolver (0x0)
+
+# DSO_GOT_EL: Contents of section .got:
+# DSO_GOT_EL: 20000 00000000 00000080 00000300
+# ^ ^ ^-- v1 (0x30000)
+# | +-- Module pointer (0x80000000)
+# +-- Lazy resolver (0x0)
+
+# v1GotAddr (0x2000c) - _gp (0x27ff4) = -0x7fe8 => 0x8018 = 32792
+# DSO_DIS_BE: 10000: 3c 02 80 18 lui $2, 32792
+# DSO_DIS_EL: 10000: 18 80 02 3c lui $2, 32792
+
+# NORELOC: Relocations [
+# NORELOC-NEXT: ]
+
+# SHFLAGS: Name: .got
+# SHFLAGS-NEXT: Type: SHT_PROGBITS
+# SHFLAGS-NEXT: Flags [ (0x10000003)
+# ^-- SHF_MIPS_GPREL | SHF_ALLOC | SHF_WRITE
diff --git a/test/ELF/mips-gprel32-relocs.s b/test/ELF/mips-gprel32-relocs.s
new file mode 100644
index 000000000000..4f93d50363c0
--- /dev/null
+++ b/test/ELF/mips-gprel32-relocs.s
@@ -0,0 +1,31 @@
+# Check R_MIPS_GPREL32 relocation calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared -o %t.so %t.o
+# RUN: llvm-objdump -s -section=.rodata -t %t.so | FileCheck %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lw $t0,%call16(__start)($gp)
+foo:
+ nop
+bar:
+ nop
+
+ .section .rodata, "a"
+v1:
+ .gpword foo
+ .gpword bar
+
+# CHECK: Contents of section .rodata:
+# CHECK: 0114 fffe8014 fffe8018
+# ^ 0x10004 - 0x27ff0
+# ^ 0x10008 - 0x27ff0
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00010008 .text 00000000 bar
+# CHECK: 00010004 .text 00000000 foo
+# CHECK: 00027ff0 *ABS* 00000000 _gp
diff --git a/test/ELF/mips-hilo-gp-disp.s b/test/ELF/mips-hilo-gp-disp.s
new file mode 100644
index 000000000000..e2e9ae7bc2e2
--- /dev/null
+++ b/test/ELF/mips-hilo-gp-disp.s
@@ -0,0 +1,42 @@
+# Check R_MIPS_HI16 / LO16 relocations calculation against _gp_disp.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
+# RUN: %S/Inputs/mips-dynamic.s -o %t2.o
+# RUN: ld.lld %t1.o %t2.o -o %t.exe
+# RUN: llvm-objdump -d -t %t.exe | FileCheck -check-prefix=EXE %s
+# RUN: ld.lld %t1.o %t2.o -shared -o %t.so
+# RUN: llvm-objdump -d -t %t.so | FileCheck -check-prefix=SO %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lui $t0,%hi(_gp_disp)
+ addi $t0,$t0,%lo(_gp_disp)
+ lw $v0,%call16(_foo)($gp)
+
+# EXE: Disassembly of section .text:
+# EXE-NEXT: __start:
+# EXE-NEXT: 20000: 3c 08 00 01 lui $8, 1
+# ^-- %hi(0x37ff0-0x20000)
+# EXE-NEXT: 20004: 21 08 7f f0 addi $8, $8, 32752
+# ^-- %lo(0x37ff0-0x20004+4)
+
+# EXE: SYMBOL TABLE:
+# EXE: 00037ff0 *ABS* 00000000 _gp
+# EXE: 00020000 .text 00000000 __start
+# EXE: 00020010 .text 00000000 _foo
+
+# SO: Disassembly of section .text:
+# SO-NEXT: __start:
+# SO-NEXT: 10000: 3c 08 00 01 lui $8, 1
+# ^-- %hi(0x27ff0-0x10000)
+# SO-NEXT: 10004: 21 08 7f f0 addi $8, $8, 32752
+# ^-- %lo(0x27ff0-0x10004+4)
+
+# SO: SYMBOL TABLE:
+# SO: 00027ff0 *ABS* 00000000 _gp
+# SO: 00010000 .text 00000000 __start
+# SO: 00010010 .text 00000000 _foo
diff --git a/test/ELF/mips-hilo-hi-only.s b/test/ELF/mips-hilo-hi-only.s
new file mode 100644
index 000000000000..ad18a9f9161a
--- /dev/null
+++ b/test/ELF/mips-hilo-hi-only.s
@@ -0,0 +1,28 @@
+# Check warning on orphaned R_MIPS_HI16 relocations.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -o %t.exe 2>&1 | FileCheck -check-prefix=WARN %s
+# RUN: llvm-objdump -d -t %t.exe | FileCheck %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lui $t0,%hi(__start+0x10000)
+ addi $t0,$t0,%lo(_label)
+_label:
+ nop
+
+# WARN: Can't find matching R_MIPS_LO16 relocation for R_MIPS_HI16
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 20000: 3c 08 00 02 lui $8, 2
+# ^-- %hi(__start) w/o addend
+# CHECK-NEXT 20004: 21 08 00 08 addi $8, $8, 8
+# ^-- %lo(_label)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00020008 .text 00000000 _label
+# CHECK: 00020000 .text 00000000 __start
diff --git a/test/ELF/mips-hilo.s b/test/ELF/mips-hilo.s
new file mode 100644
index 000000000000..d5de9422c427
--- /dev/null
+++ b/test/ELF/mips-hilo.s
@@ -0,0 +1,53 @@
+# Check R_MIPS_HI16 / LO16 relocations calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -o %t.exe
+# RUN: llvm-objdump -d -t %t.exe | FileCheck %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lui $t0,%hi(__start)
+ lui $t1,%hi(g1)
+ addi $t0,$t0,%lo(__start+4)
+ addi $t0,$t0,%lo(g1+8)
+
+ lui $t0,%hi(l1+0x10000)
+ lui $t1,%hi(l1+0x20000)
+ addi $t0,$t0,%lo(l1+(-4))
+
+ .data
+ .type l1,@object
+ .size l1,4
+l1:
+ .word 0
+
+ .globl g1
+ .type g1,@object
+ .size g1,4
+g1:
+ .word 0
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 20000: 3c 08 00 02 lui $8, 2
+# ^-- %hi(__start+4)
+# CHECK-NEXT: 20004: 3c 09 00 03 lui $9, 3
+# ^-- %hi(g1+8)
+# CHECK-NEXT: 20008: 21 08 00 04 addi $8, $8, 4
+# ^-- %lo(__start+4)
+# CHECK-NEXT: 2000c: 21 08 00 0c addi $8, $8, 12
+# ^-- %lo(g1+8)
+# CHECK-NEXT: 20010: 3c 08 00 04 lui $8, 4
+# ^-- %hi(l1+0x10000-4)
+# CHECK-NEXT: 20014: 3c 09 00 05 lui $9, 5
+# ^-- %hi(l1+0x20000-4)
+# CHECK-NEXT: 20018: 21 08 ff fc addi $8, $8, -4
+# ^-- %lo(l1-4)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 0030000 l .data 00000004 l1
+# CHECK: 0020000 .text 00000000 __start
+# CHECK: 0030004 g .data 00000004 g1
diff --git a/test/ELF/mips-jalr.test b/test/ELF/mips-jalr.test
new file mode 100644
index 000000000000..4bdf8b6e7f00
--- /dev/null
+++ b/test/ELF/mips-jalr.test
@@ -0,0 +1,47 @@
+# Check that lld ignores R_MIPS_JALR relocation for now.
+
+# RUN: yaml2obj -format elf %s -o %t.o
+# RUN: ld.lld %t.o -o %t.so -shared
+# RUN: llvm-objdump -d %t.so | FileCheck %s
+
+# REQUIRES: mips
+
+# CHECK: 10000: 09 f8 20 03 jalr $25
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "09f82003"
+# ^-- jalr T1
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_JALR
+
+Symbols:
+ Local:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
diff --git a/test/ELF/mips-pc-relocs.s b/test/ELF/mips-pc-relocs.s
new file mode 100644
index 000000000000..631dd433925a
--- /dev/null
+++ b/test/ELF/mips-pc-relocs.s
@@ -0,0 +1,38 @@
+# Check R_MIPS_PCxxx relocations calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
+# RUN: -mcpu=mips32r6 %s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
+# RUN: -mcpu=mips32r6 %S/Inputs/mips-dynamic.s -o %t2.o
+# RUN: ld.lld %t1.o %t2.o -o %t.exe
+# RUN: llvm-objdump -mcpu=mips32r6 -d -t %t.exe | FileCheck %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lwpc $6, _foo # R_MIPS_PC19_S2
+ beqc $5, $6, _foo # R_MIPS_PC16
+ beqzc $9, _foo # R_MIPS_PC21_S2
+ bc _foo # R_MIPS_PC26_S2
+ aluipc $2, %pcrel_hi(_foo) # R_MIPS_PCHI16
+ addiu $2, $2, %pcrel_lo(_foo) # R_MIPS_PCLO16
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 20000: ec c8 00 08 lwpc $6, 32
+# ^-- (0x20020-0x20000)>>2
+# CHECK-NEXT: 20004: 20 a6 00 06 beqc $5, $6, 24
+# ^-- (0x20020-4-0x20004)>>2
+# CHECK-NEXT: 20008: d9 20 00 05 beqzc $9, 20
+# ^-- (0x20020-4-0x20008)>>2
+# CHECK-NEXT: 2000c: c8 00 00 04 bc 16
+# ^-- (0x20020-4-0x2000c)>>2
+# CHECK-NEXT: 20010: ec 5f 00 00 aluipc $2, 0
+# ^-- %hi(0x20020-0x20010)
+# CHECK-NEXT: 20014: 24 42 00 0c addiu $2, $2, 12
+# ^-- %lo(0x20020-0x20014)
+
+# CHECK: 00020000 .text 00000000 __start
+# CHECK: 00020020 .text 00000000 _foo
diff --git a/test/ELF/mips-reginfo.s b/test/ELF/mips-reginfo.s
new file mode 100644
index 000000000000..dd4771c98b8d
--- /dev/null
+++ b/test/ELF/mips-reginfo.s
@@ -0,0 +1,26 @@
+# Check MIPS .reginfo section generation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
+# RUN: %S/Inputs/mips-dynamic.s -o %t2.o
+# RUN: ld.lld %t1.o %t2.o -shared -o %t.so
+# RUN: llvm-readobj -symbols -mips-reginfo %t.so | FileCheck %s
+
+# REQUIRES: mips
+
+ .text
+ .globl __start
+__start:
+ lw $t0,%call16(g1)($gp)
+
+# CHECK: Name: _gp
+# CHECK-NEXT: Value: 0x[[GP:[0-9A-F]+]]
+
+# CHECK: MIPS RegInfo {
+# CHECK-NEXT: GP: 0x[[GP]]
+# CHECK-NEXT: General Mask: 0x10000101
+# CHECK-NEXT: Co-Proc Mask0: 0x0
+# CHECK-NEXT: Co-Proc Mask1: 0x0
+# CHECK-NEXT: Co-Proc Mask2: 0x0
+# CHECK-NEXT: Co-Proc Mask3: 0x0
+# CHECK-NEXT: }
diff --git a/test/ELF/mips-relocs.s b/test/ELF/mips-relocs.s
new file mode 100644
index 000000000000..c05b8fd3bdd1
--- /dev/null
+++ b/test/ELF/mips-relocs.s
@@ -0,0 +1,42 @@
+# Check R_MIPS_32 relocation calculation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-be.o
+# RUN: ld.lld %t-be.o -o %t-be.exe
+# RUN: llvm-objdump -t %t-be.exe | FileCheck %s
+# RUN: llvm-objdump -s %t-be.exe | FileCheck -check-prefix=BE %s
+
+# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
+# RUN: ld.lld %t-el.o -o %t-el.exe
+# RUN: llvm-objdump -t %t-el.exe | FileCheck %s
+# RUN: llvm-objdump -s %t-el.exe | FileCheck -check-prefix=EL %s
+
+# REQUIRES: mips
+
+ .globl __start
+__start:
+ nop
+
+ .data
+ .type v1,@object
+ .size v1,4
+v1:
+ .word 0
+
+ .globl v2
+ .type v2,@object
+ .size v2,8
+v2:
+ .word v2+4 # R_MIPS_32 target v2 addend 4
+ .word v1 # R_MIPS_32 target v1 addend 0
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00030000 l .data 00000004 v1
+# CHECK: 00030004 g .data 00000008 v2
+
+# BE: Contents of section .data:
+# BE-NEXT: 30000 00000000 00030008 00030000
+# ^-- v2+4 ^-- v1
+
+# EL: Contents of section .data:
+# EL-NEXT: 30000 00000000 08000300 00000300
+# ^-- v2+4 ^-- v1
diff --git a/test/ELF/new-dtags.test b/test/ELF/new-dtags.test
new file mode 100644
index 000000000000..334d477622a7
--- /dev/null
+++ b/test/ELF/new-dtags.test
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -rpath=/somepath -shared --disable-new-dtags -o %t
+// RUN: ld.lld %t.o -rpath=/somepath -shared --enable-new-dtags -o %t2
+// RUN: llvm-readobj --dynamic-table %t | FileCheck --check-prefix=DISABLE %s
+// RUN: llvm-readobj --dynamic-table %t2 | FileCheck --check-prefix=ENABLE %s
+
+// DISABLE: DynamicSection [
+// DISABLE: 0x000000000000000F RPATH /somepath
+// DISABLE-NOT: RUNPATH
+// DISABLE: ]
+
+// ENABLE: DynamicSection [
+// ENABLE: 0x000000000000001D RUNPATH /somepath
+// ENABLE-NOT: RPATH
+// ENABLE: ]
diff --git a/test/ELF/no-inhibit-exec.s b/test/ELF/no-inhibit-exec.s
new file mode 100644
index 000000000000..fe2240b731fe
--- /dev/null
+++ b/test/ELF/no-inhibit-exec.s
@@ -0,0 +1,15 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld %t -o %t2
+# RUN: ld.lld %t --noinhibit-exec -o %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s
+# REQUIRES: x86
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: _start
+# CHECK-NEXT: 11000: e8 fb ef fe ff callq -69637
+
+# next code will not link without noinhibit-exec flag
+# because of undefined symbol _bar
+.globl _start;
+_start:
+ call _bar
diff --git a/test/ELF/no-obj.s b/test/ELF/no-obj.s
new file mode 100644
index 000000000000..68e9979e3ede
--- /dev/null
+++ b/test/ELF/no-obj.s
@@ -0,0 +1,8 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-ar rcs %t.a %t.o
+// RUN: not ld.lld -o %t2 -u _start %t.a 2>&1 | FileCheck %s
+
+// CHECK: -m or at least a .o file required
+
+.global _start
+_start:
diff --git a/test/ELF/no-symtab.s b/test/ELF/no-symtab.s
new file mode 100644
index 000000000000..158bd727f251
--- /dev/null
+++ b/test/ELF/no-symtab.s
@@ -0,0 +1,4 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o %p/Inputs/no-symtab.o -o %t
+.global _start
+_start:
diff --git a/test/ELF/no-undefined.s b/test/ELF/no-undefined.s
new file mode 100644
index 000000000000..94378bde40a2
--- /dev/null
+++ b/test/ELF/no-undefined.s
@@ -0,0 +1,7 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld --no-undefined -shared %t -o %t.so
+# RUN: ld.lld -shared %t -o %t1.so
+
+.globl _shared
+_shared:
+ call _unresolved
diff --git a/test/ELF/output-section.s b/test/ELF/output-section.s
new file mode 100644
index 000000000000..68505254686c
--- /dev/null
+++ b/test/ELF/output-section.s
@@ -0,0 +1,34 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-readobj -t %t2 | FileCheck %s
+// REQUIRES: x86
+
+// CHECK: Symbol {
+// CHECK: Name: bar_sym
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding:
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: bar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo_sym
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding:
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Other:
+// CHECK-NEXT: Section: foo
+// CHECK-NEXT: }
+
+.section foo
+.global foo_sym
+foo_sym:
+
+.section bar, "a"
+.global bar_sym
+bar_sym:
+
+.global _start
+_start:
diff --git a/test/ELF/plt-aarch64.s b/test/ELF/plt-aarch64.s
new file mode 100644
index 000000000000..6ea732ec7c68
--- /dev/null
+++ b/test/ELF/plt-aarch64.s
@@ -0,0 +1,205 @@
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld -shared %t.o %t2.so -o %t.so
+// RUN: ld.lld %t.o %t2.so -o %t.exe
+// RUN: llvm-readobj -s -r %t.so | FileCheck --check-prefix=CHECKDSO %s
+// RUN: llvm-objdump -s -section=.got.plt %t.so | FileCheck --check-prefix=DUMPDSO %s
+// RUN: llvm-objdump -d %t.so | FileCheck --check-prefix=DISASMDSO %s
+// RUN: llvm-readobj -s -r %t.exe | FileCheck --check-prefix=CHECKEXE %s
+// RUN: llvm-objdump -s -section=.got.plt %t.exe | FileCheck --check-prefix=DUMPEXE %s
+// RUN: llvm-objdump -d %t.exe | FileCheck --check-prefix=DISASMEXE %s
+
+// REQUIRES: aarch64
+
+// CHECKDSO: Name: .plt
+// CHECKDSO-NEXT: Type: SHT_PROGBITS
+// CHECKDSO-NEXT: Flags [
+// CHECKDSO-NEXT: SHF_ALLOC
+// CHECKDSO-NEXT: SHF_EXECINSTR
+// CHECKDSO-NEXT: ]
+// CHECKDSO-NEXT: Address: 0x1010
+// CHECKDSO-NEXT: Offset:
+// CHECKDSO-NEXT: Size: 80
+// CHECKDSO-NEXT: Link:
+// CHECKDSO-NEXT: Info:
+// CHECKDSO-NEXT: AddressAlignment: 16
+
+// CHECKDSO: Name: .got.plt
+// CHECKDSO-NEXT: Type: SHT_PROGBITS
+// CHECKDSO-NEXT: Flags [
+// CHECKDSO-NEXT: SHF_ALLOC
+// CHECKDSO-NEXT: SHF_WRITE
+// CHECKDSO-NEXT: ]
+// CHECKDSO-NEXT: Address: 0x3000
+// CHECKDSO-NEXT: Offset:
+// CHECKDSO-NEXT: Size: 48
+// CHECKDSO-NEXT: Link:
+// CHECKDSO-NEXT: Info:
+// CHECKDSO-NEXT: AddressAlignment: 8
+
+// CHECKDSO: Relocations [
+// CHECKDSO-NEXT: Section ({{.*}}) .rela.plt {
+
+// &(.got.plt[3]) = 0x3000 + 3 * 8 = 0x3018
+// CHECKDSO-NEXT: 0x3018 R_AARCH64_JUMP_SLOT foo
+
+// &(.got.plt[4]) = 0x3000 + 4 * 8 = 0x3020
+// CHECKDSO-NEXT: 0x3020 R_AARCH64_JUMP_SLOT bar
+
+// &(.got.plt[5]) = 0x3000 + 5 * 8 = 0x3028
+// CHECKDSO-NEXT: 0x3028 R_AARCH64_JUMP_SLOT weak
+// CHECKDSO-NEXT: }
+// CHECKDSO-NEXT: ]
+
+// DUMPDSO: Contents of section .got.plt:
+// .got.plt[0..2] = 0 (reserved)
+// .got.plt[3..5] = .plt = 0x1010
+// DUMPDSO-NEXT: 3000 00000000 00000000 00000000 00000000 ................
+// DUMPDSO-NEXT: 3010 00000000 00000000 10100000 00000000 ................
+// DUMPDSO-NEXT: 3020 10100000 00000000 10100000 00000000 ................
+
+// DISASMDSO: _start:
+// 0x1030 - 0x1000 = 0x30 = 48
+// DISASMDSO-NEXT: 1000: 0c 00 00 14 b #48
+// 0x1040 - 0x1004 = 0x3c = 60
+// DISASMDSO-NEXT: 1004: 0f 00 00 14 b #60
+// 0x1050 - 0x1008 = 0x48 = 72
+// DISASMDSO-NEXT: 1008: 12 00 00 14 b #72
+
+// DISASMDSO: foo:
+// DISASMDSO-NEXT: 100c: 1f 20 03 d5 nop
+
+// DISASMDSO: Disassembly of section .plt:
+// DISASMDSO-NEXT: .plt:
+// DISASMDSO-NEXT: 1010: f0 7b bf a9 stp x16, x30, [sp, #-16]!
+// &(.got.plt[2]) = 0x3000 + 2 * 8 = 0x3010
+// Page(0x3010) - Page(0x1014) = 0x3000 - 0x1000 = 0x2000 = 8192
+// DISASMDSO-NEXT: 1014: 10 00 00 d0 adrp x16, #8192
+// 0x3010 & 0xFFF = 0x10 = 16
+// DISASMDSO-NEXT: 1018: 11 0a 40 f9 ldr x17, [x16, #16]
+// DISASMDSO-NEXT: 101c: 10 42 00 91 add x16, x16, #16
+// DISASMDSO-NEXT: 1020: 20 02 1f d6 br x17
+// DISASMDSO-NEXT: 1024: 1f 20 03 d5 nop
+// DISASMDSO-NEXT: 1028: 1f 20 03 d5 nop
+// DISASMDSO-NEXT: 102c: 1f 20 03 d5 nop
+
+// foo@plt
+// Page(0x3018) - Page(0x1030) = 0x3000 - 0x1000 = 0x2000 = 8192
+// DISASMDSO-NEXT: 1030: 10 00 00 d0 adrp x16, #8192
+// 0x3018 & 0xFFF = 0x18 = 24
+// DISASMDSO-NEXT: 1034: 11 0e 40 f9 ldr x17, [x16, #24]
+// DISASMDSO-NEXT: 1038: 10 62 00 91 add x16, x16, #24
+// DISASMDSO-NEXT: 103c: 20 02 1f d6 br x17
+
+// bar@plt
+// Page(0x3020) - Page(0x1040) = 0x3000 - 0x1000 = 0x2000 = 8192
+// DISASMDSO-NEXT: 1040: 10 00 00 d0 adrp x16, #8192
+// 0x3020 & 0xFFF = 0x20 = 32
+// DISASMDSO-NEXT: 1044: 11 12 40 f9 ldr x17, [x16, #32]
+// DISASMDSO-NEXT: 1048: 10 82 00 91 add x16, x16, #32
+// DISASMDSO-NEXT: 104c: 20 02 1f d6 br x17
+
+// weak@plt
+// Page(0x3028) - Page(0x1050) = 0x3000 - 0x1000 = 0x2000 = 8192
+// DISASMDSO-NEXT: 1050: 10 00 00 d0 adrp x16, #8192
+// 0x3028 & 0xFFF = 0x28 = 40
+// DISASMDSO-NEXT: 1054: 11 16 40 f9 ldr x17, [x16, #40]
+// DISASMDSO-NEXT: 1058: 10 a2 00 91 add x16, x16, #40
+// DISASMDSO-NEXT: 105c: 20 02 1f d6 br x17
+
+// CHECKEXE: Name: .plt
+// CHECKEXE-NEXT: Type: SHT_PROGBITS
+// CHECKEXE-NEXT: Flags [
+// CHECKEXE-NEXT: SHF_ALLOC
+// CHECKEXE-NEXT: SHF_EXECINSTR
+// CHECKEXE-NEXT: ]
+// CHECKEXE-NEXT: Address: 0x11010
+// CHECKEXE-NEXT: Offset:
+// CHECKEXE-NEXT: Size: 64
+// CHECKEXE-NEXT: Link:
+// CHECKEXE-NEXT: Info:
+// CHECKEXE-NEXT: AddressAlignment: 16
+
+// CHECKEXE: Name: .got.plt
+// CHECKEXE-NEXT: Type: SHT_PROGBITS
+// CHECKEXE-NEXT: Flags [
+// CHECKEXE-NEXT: SHF_ALLOC
+// CHECKEXE-NEXT: SHF_WRITE
+// CHECKEXE-NEXT: ]
+// CHECKEXE-NEXT: Address: 0x13000
+// CHECKEXE-NEXT: Offset:
+// CHECKEXE-NEXT: Size: 40
+// CHECKEXE-NEXT: Link:
+// CHECKEXE-NEXT: Info:
+// CHECKEXE-NEXT: AddressAlignment: 8
+
+// CHECKEXE: Relocations [
+// CHECKEXE-NEXT: Section ({{.*}}) .rela.plt {
+
+// &(.got.plt[3]) = 0x13000 + 3 * 8 = 0x13018
+// CHECKEXE-NEXT: 0x13018 R_AARCH64_JUMP_SLOT bar 0x0
+
+// &(.got.plt[4]) = 0x13000 + 4 * 8 = 0x13020
+// CHECKEXE-NEXT: 0x13020 R_AARCH64_JUMP_SLOT weak 0x0
+// CHECKEXE-NEXT: }
+// CHECKEXE-NEXT: ]
+
+// DUMPEXE: Contents of section .got.plt:
+// .got.plt[0..2] = 0 (reserved)
+// .got.plt[3..4] = .plt = 0x11010
+// DUMPEXE-NEXT: 13000 00000000 00000000 00000000 00000000 ................
+// DUMPEXE-NEXT: 13010 00000000 00000000 10100100 00000000 ................
+// DUMPEXE-NEXT: 13020 10100100 00000000 ........
+
+// DISASMEXE: _start:
+// 0x1100c - 0x11000 = 0xc = 12
+// DISASMEXE-NEXT: 11000: 03 00 00 14 b #12
+// 0x11030 - 0x11004 = 0x2c = 44
+// DISASMEXE-NEXT: 11004: 0b 00 00 14 b #44
+// 0x11040 - 0x11008 = 0x38 = 56
+// DISASMEXE-NEXT: 11008: 0e 00 00 14 b #56
+
+// DISASMEXE: foo:
+// DISASMEXE-NEXT: 1100c: 1f 20 03 d5 nop
+
+// DISASMEXE: Disassembly of section .plt:
+// DISASMEXE-NEXT: .plt:
+// DISASMEXE-NEXT: 11010: f0 7b bf a9 stp x16, x30, [sp, #-16]!
+// &(.got.plt[2]) = 0x120B0 + 2 * 8 = 0x120C0
+// Page(0x13010) - Page(0x11014) = 0x13000 - 0x11000 = 0x1000 = 8192
+// DISASMEXE-NEXT: 11014: 10 00 00 d0 adrp x16, #8192
+// 0x120c0 & 0xFFF = 0xC0 = 192
+// DISASMEXE-NEXT: 11018: 11 0a 40 f9 ldr x17, [x16, #16]
+// DISASMEXE-NEXT: 1101c: 10 42 00 91 add x16, x16, #16
+// DISASMEXE-NEXT: 11020: 20 02 1f d6 br x17
+// DISASMEXE-NEXT: 11024: 1f 20 03 d5 nop
+// DISASMEXE-NEXT: 11028: 1f 20 03 d5 nop
+// DISASMEXE-NEXT: 1102c: 1f 20 03 d5 nop
+
+// bar@plt
+// Page(0x13018) - Page(0x11030) = 0x12000 - 0x11000 = 0x1000 = 8192
+// DISASMEXE-NEXT: 11030: 10 00 00 d0 adrp x16, #8192
+// 0x120C8 & 0xFFF = 0xC8 = 200
+// DISASMEXE-NEXT: 11034: 11 0e 40 f9 ldr x17, [x16, #24]
+// DISASMEXE-NEXT: 11038: 10 62 00 91 add x16, x16, #24
+// DISASMEXE-NEXT: 1103c: 20 02 1f d6 br x17
+
+// weak@plt
+// Page(0x13020) - Page(0x11040) = 0x12000 - 0x11000 = 0x1000 = 8192
+// DISASMEXE-NEXT: 11040: 10 00 00 d0 adrp x16, #8192
+// 0x120D0 & 0xFFF = 0xD0 = 208
+// DISASMEXE-NEXT: 11044: 11 12 40 f9 ldr x17, [x16, #32]
+// DISASMEXE-NEXT: 11048: 10 82 00 91 add x16, x16, #32
+// DISASMEXE-NEXT: 1104c: 20 02 1f d6 br x17
+
+.global _start,foo,bar
+.weak weak
+_start:
+ b foo
+ b bar
+ b weak
+
+.section .text2,"ax",@progbits
+foo:
+ nop
diff --git a/test/ELF/plt-i686.s b/test/ELF/plt-i686.s
new file mode 100644
index 000000000000..4947e0e734fd
--- /dev/null
+++ b/test/ELF/plt-i686.s
@@ -0,0 +1,158 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -s -r %t | FileCheck --check-prefix=CHECK %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+// RUN: ld.lld -shared %t.o %t2.so -o %t
+// RUN: llvm-readobj -s -r %t | FileCheck --check-prefix=CHECKSHARED %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASMSHARED %s
+
+// REQUIRES: x86
+
+// CHECK: Name: .plt
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x11020
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 48
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 16
+
+// CHECK: Name: .got.plt
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x13000
+// CHECK-NEXT: Offset: 0x3000
+// CHECK-NEXT: Size: 20
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 0
+
+// 0x13000 + got.plt.reserved(12) = 0x1300C
+// 0x13000 + got.plt.reserved(12) + 4 = 0x13010
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rel.plt {
+// CHECK-NEXT: 0x1300C R_386_JUMP_SLOT bar 0x0
+// CHECK-NEXT: 0x13010 R_386_JUMP_SLOT zed 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// Unfortunately FileCheck can't do math, so we have to check for explicit
+// values:
+
+// 16 is the size of PLT[0]
+// (0x11010 + 16) - (0x11000 + 1) - 4 = 27
+// (0x11010 + 16) - (0x11005 + 1) - 4 = 22
+// (0x11020 + 16) - (0x1100a + 1) - 4 = 33
+
+// DISASM: local:
+// DISASM-NEXT: 11000: {{.*}}
+// DISASM-NEXT: 11002: {{.*}}
+// DISASM: _start:
+// 0x11013 + 5 - 24 = 0x11000
+// DISASM-NEXT: 11004: e9 27 00 00 00 jmp 39
+// DISASM-NEXT: 11009: e9 22 00 00 00 jmp 34
+// DISASM-NEXT: 1100e: e9 2d 00 00 00 jmp 45
+// DISASM-NEXT: 11013: e9 e8 ff ff ff jmp -24
+
+// 0x11010 - 0x1102b - 5 = -32
+// 0x11010 - 0x1103b - 5 = -48
+// 77828 = 0x13004 = .got.plt (0x13000) + 4
+// 77832 = 0x13008 = .got.plt (0x13000) + 8
+// 77836 = 0x1300C = .got.plt (0x13000) + got.plt.reserved(12)
+// 77840 = 0x13010 = .got.plt (0x13000) + got.plt.reserved(12) + 4
+// DISASM: Disassembly of section .plt:
+// DISASM-NEXT: .plt:
+// DISASM-NEXT: 11020: ff 35 04 30 01 00 pushl 77828
+// DISASM-NEXT: 11026: ff 25 08 30 01 00 jmpl *77832
+// DISASM-NEXT: 1102c: 90 nop
+// DISASM-NEXT: 1102d: 90 nop
+// DISASM-NEXT: 1102e: 90 nop
+// DISASM-NEXT: 1102f: 90 nop
+// DISASM-NEXT: 11030: ff 25 0c 30 01 00 jmpl *77836
+// DISASM-NEXT: 11036: 68 00 00 00 00 pushl $0
+// DISASM-NEXT: 1103b: e9 e0 ff ff ff jmp -32 <.plt>
+// DISASM-NEXT: 11040: ff 25 10 30 01 00 jmpl *77840
+// DISASM-NEXT: 11046: 68 08 00 00 00 pushl $8
+// DISASM-NEXT: 1104b: e9 d0 ff ff ff jmp -48 <.plt>
+
+// CHECKSHARED: Name: .plt
+// CHECKSHARED-NEXT: Type: SHT_PROGBITS
+// CHECKSHARED-NEXT: Flags [
+// CHECKSHARED-NEXT: SHF_ALLOC
+// CHECKSHARED-NEXT: SHF_EXECINSTR
+// CHECKSHARED-NEXT: ]
+// CHECKSHARED-NEXT: Address: 0x1020
+// CHECKSHARED-NEXT: Offset: 0x1020
+// CHECKSHARED-NEXT: Size: 48
+// CHECKSHARED-NEXT: Link: 0
+// CHECKSHARED-NEXT: Info: 0
+// CHECKSHARED-NEXT: AddressAlignment: 16
+// CHECKSHARED-NEXT: EntrySize: 0
+// CHECKSHARED-NEXT: }
+// CHECKSHARED: Name: .got.plt
+// CHECKSHARED-NEXT: Type: SHT_PROGBITS
+// CHECKSHARED-NEXT: Flags [
+// CHECKSHARED-NEXT: SHF_ALLOC
+// CHECKSHARED-NEXT: SHF_WRITE
+// CHECKSHARED-NEXT: ]
+// CHECKSHARED-NEXT: Address: 0x3000
+// CHECKSHARED-NEXT: Offset: 0x3000
+// CHECKSHARED-NEXT: Size: 20
+// CHECKSHARED-NEXT: Link: 0
+// CHECKSHARED-NEXT: Info: 0
+// CHECKSHARED-NEXT: AddressAlignment: 4
+// CHECKSHARED-NEXT: EntrySize: 0
+// CHECKSHARED-NEXT: }
+
+// 0x3000 + got.plt.reserved(12) = 0x300C
+// 0x3000 + got.plt.reserved(12) + 4 = 0x3010
+// CHECKSHARED: Relocations [
+// CHECKSHARED-NEXT: Section ({{.*}}) .rel.plt {
+// CHECKSHARED-NEXT: 0x300C R_386_JUMP_SLOT bar 0x0
+// CHECKSHARED-NEXT: 0x3010 R_386_JUMP_SLOT zed 0x0
+// CHECKSHARED-NEXT: }
+// CHECKSHARED-NEXT: ]
+
+// DISASMSHARED: local:
+// DISASMSHARED-NEXT: 1000: {{.*}}
+// DISASMSHARED-NEXT: 1002: {{.*}}
+// DISASMSHARED: _start:
+// 0x1013 + 5 - 24 = 0x1000
+// DISASMSHARED-NEXT: 1004: e9 27 00 00 00 jmp 39
+// DISASMSHARED-NEXT: 1009: e9 22 00 00 00 jmp 34
+// DISASMSHARED-NEXT: 100e: e9 2d 00 00 00 jmp 45
+// DISASMSHARED-NEXT: 1013: e9 e8 ff ff ff jmp -24
+// DISASMSHARED-NEXT: Disassembly of section .plt:
+// DISASMSHARED-NEXT: .plt:
+// DISASMSHARED-NEXT: 1020: ff b3 04 00 00 00 pushl 4(%ebx)
+// DISASMSHARED-NEXT: 1026: ff a3 08 00 00 00 jmpl *8(%ebx)
+// DISASMSHARED-NEXT: 102c: 90 nop
+// DISASMSHARED-NEXT: 102d: 90 nop
+// DISASMSHARED-NEXT: 102e: 90 nop
+// DISASMSHARED-NEXT: 102f: 90 nop
+// DISASMSHARED-NEXT: 1030: ff a3 0c 00 00 00 jmpl *12(%ebx)
+// DISASMSHARED-NEXT: 1036: 68 00 00 00 00 pushl $0
+// DISASMSHARED-NEXT: 103b: e9 e0 ff ff ff jmp -32 <.plt>
+// DISASMSHARED-NEXT: 1040: ff a3 10 00 00 00 jmpl *16(%ebx)
+// DISASMSHARED-NEXT: 1046: 68 08 00 00 00 pushl $8
+// DISASMSHARED-NEXT: 104b: e9 d0 ff ff ff jmp -48 <.plt>
+
+local:
+.long 0
+
+.global _start
+_start:
+ jmp bar@PLT
+ jmp bar@PLT
+ jmp zed@PLT
+ jmp local@plt
diff --git a/test/ELF/plt.s b/test/ELF/plt.s
new file mode 100644
index 000000000000..1183d32c3ccc
--- /dev/null
+++ b/test/ELF/plt.s
@@ -0,0 +1,119 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld -shared %t.o %t2.so -o %t
+// RUN: ld.lld %t.o %t2.so -o %t3
+// RUN: llvm-readobj -s -r %t | FileCheck %s
+// RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+// RUN: llvm-readobj -s -r %t3 | FileCheck --check-prefix=CHECK2 %s
+// RUN: llvm-objdump -d %t3 | FileCheck --check-prefix=DISASM2 %s
+
+// REQUIRES: x86
+
+// CHECK: Name: .plt
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1020
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 64
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 16
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK-NEXT: 0x3018 R_X86_64_JUMP_SLOT bar 0x0
+// CHECK-NEXT: 0x3020 R_X86_64_JUMP_SLOT zed 0x0
+// CHECK-NEXT: 0x3028 R_X86_64_JUMP_SLOT _start 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK2: Name: .plt
+// CHECK2-NEXT: Type: SHT_PROGBITS
+// CHECK2-NEXT: Flags [
+// CHECK2-NEXT: SHF_ALLOC
+// CHECK2-NEXT: SHF_EXECINSTR
+// CHECK2-NEXT: ]
+// CHECK2-NEXT: Address: 0x11020
+// CHECK2-NEXT: Offset:
+// CHECK2-NEXT: Size: 48
+// CHECK2-NEXT: Link: 0
+// CHECK2-NEXT: Info: 0
+// CHECK2-NEXT: AddressAlignment: 16
+
+// CHECK2: Relocations [
+// CHECK2-NEXT: Section ({{.*}}) .rela.plt {
+// CHECK2-NEXT: 0x13018 R_X86_64_JUMP_SLOT bar 0x0
+// CHECK2-NEXT: 0x13020 R_X86_64_JUMP_SLOT zed 0x0
+// CHECK2-NEXT: }
+// CHECK2-NEXT: ]
+
+// Unfortunately FileCheck can't do math, so we have to check for explicit
+// values:
+
+// 0x1030 - (0x1000 + 5) = 43
+// 0x1030 - (0x1005 + 5) = 38
+// 0x1040 - (0x100a + 5) = 49
+// 0x1048 - (0x100a + 5) = 60
+
+// DISASM: _start:
+// DISASM-NEXT: 1000: e9 {{.*}} jmp 43
+// DISASM-NEXT: 1005: e9 {{.*}} jmp 38
+// DISASM-NEXT: 100a: e9 {{.*}} jmp 49
+// DISASM-NEXT: 100f: e9 {{.*}} jmp 60
+
+// 0x3018 - 0x1036 = 8162
+// 0x3020 - 0x1046 = 4234
+// 0x3028 - 0x1056 = 4226
+
+// DISASM: Disassembly of section .plt:
+// DISASM-NEXT: .plt:
+// DISASM-NEXT: 1020: ff 35 e2 1f 00 00 pushq 8162(%rip)
+// DISASM-NEXT: 1026: ff 25 e4 1f 00 00 jmpq *8164(%rip)
+// DISASM-NEXT: 102c: 0f 1f 40 00 nopl (%rax)
+// DISASM-NEXT: 1030: ff 25 e2 1f 00 00 jmpq *8162(%rip)
+// DISASM-NEXT: 1036: 68 00 00 00 00 pushq $0
+// DISASM-NEXT: 103b: e9 e0 ff ff ff jmp -32 <.plt>
+// DISASM-NEXT: 1040: ff 25 da 1f 00 00 jmpq *8154(%rip)
+// DISASM-NEXT: 1046: 68 01 00 00 00 pushq $1
+// DISASM-NEXT: 104b: e9 d0 ff ff ff jmp -48 <.plt>
+// DISASM-NEXT: 1050: ff 25 d2 1f 00 00 jmpq *8146(%rip)
+// DISASM-NEXT: 1056: 68 02 00 00 00 pushq $2
+// DISASM-NEXT: 105b: e9 c0 ff ff ff jmp -64 <.plt>
+
+// 0x11030 - (0x11000 + 1) - 4 = 43
+// 0x11030 - (0x11005 + 1) - 4 = 38
+// 0x11040 - (0x1100a + 1) - 4 = 49
+// 0x11000 - (0x1100f + 1) - 4 = -20
+
+// DISASM2: _start:
+// DISASM2-NEXT: 11000: e9 {{.*}} jmp 43
+// DISASM2-NEXT: 11005: e9 {{.*}} jmp 38
+// DISASM2-NEXT: 1100a: e9 {{.*}} jmp 49
+// DISASM2-NEXT: 1100f: e9 {{.*}} jmp -20
+
+// 0x13018 - 0x11036 = 4242
+// 0x13020 - 0x11046 = 4234
+
+// DISASM2: Disassembly of section .plt:
+// DISASM2-NEXT: .plt:
+// DISASM2-NEXT: 11020: ff 35 e2 1f 00 00 pushq 8162(%rip)
+// DISASM2-NEXT: 11026: ff 25 e4 1f 00 00 jmpq *8164(%rip)
+// DISASM2-NEXT: 1102c: 0f 1f 40 00 nopl (%rax)
+// DISASM2-NEXT: 11030: ff 25 e2 1f 00 00 jmpq *8162(%rip)
+// DISASM2-NEXT: 11036: 68 00 00 00 00 pushq $0
+// DISASM2-NEXT: 1103b: e9 e0 ff ff ff jmp -32 <.plt>
+// DISASM2-NEXT: 11040: ff 25 da 1f 00 00 jmpq *8154(%rip)
+// DISASM2-NEXT: 11046: 68 01 00 00 00 pushq $1
+// DISASM2-NEXT: 1104b: e9 d0 ff ff ff jmp -48 <.plt>
+// DISASM2-NEXT-NOT: 110C0
+
+.global _start
+_start:
+ jmp bar@PLT
+ jmp bar@PLT
+ jmp zed@PLT
+ jmp _start@plt
diff --git a/test/ELF/ppc64-addr16-error.s b/test/ELF/ppc64-addr16-error.s
new file mode 100644
index 000000000000..57a919a9b338
--- /dev/null
+++ b/test/ELF/ppc64-addr16-error.s
@@ -0,0 +1,7 @@
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
+// RUN: not ld.lld -shared %t -o %t2 2>&1 | FileCheck %s
+// REQUIRES: ppc
+
+.short sym+65539
+
+// CHECK: Relocation R_PPC64_ADDR16 out of range
diff --git a/test/ELF/ppc64-rel-calls.s b/test/ELF/ppc64-rel-calls.s
new file mode 100644
index 000000000000..f3b309f33dfb
--- /dev/null
+++ b/test/ELF/ppc64-rel-calls.s
@@ -0,0 +1,42 @@
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s
+# REQUIRES: ppc
+
+# CHECK: Disassembly of section .text:
+
+.section ".opd","aw"
+.global _start
+_start:
+.quad .Lfoo,.TOC.@tocbase,0
+
+.text
+.Lfoo:
+ li 0,1
+ li 3,42
+ sc
+
+# CHECK: 10010000: 38 00 00 01 li 0, 1
+# CHECK: 10010004: 38 60 00 2a li 3, 42
+# CHECK: 10010008: 44 00 00 02 sc
+
+.section ".opd","aw"
+.global bar
+bar:
+.quad .Lbar,.TOC.@tocbase,0
+
+.text
+.Lbar:
+ bl _start
+ nop
+ bl .Lfoo
+ nop
+ blr
+
+# FIXME: The printing here is misleading, the branch offset here is negative.
+# CHECK: 1001000c: 4b ff ff f5 bl .+67108852
+# CHECK: 10010010: 60 00 00 00 nop
+# CHECK: 10010014: 4b ff ff ed bl .+67108844
+# CHECK: 10010018: 60 00 00 00 nop
+# CHECK: 1001001c: 4e 80 00 20 blr
+
diff --git a/test/ELF/ppc64-relocs.s b/test/ELF/ppc64-relocs.s
new file mode 100644
index 000000000000..61f9a1eb3ce3
--- /dev/null
+++ b/test/ELF/ppc64-relocs.s
@@ -0,0 +1,130 @@
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s
+# REQUIRES: ppc
+
+.section ".opd","aw"
+.global _start
+_start:
+.quad .Lfoo,.TOC.@tocbase,0
+
+.text
+.Lfoo:
+ li 0,1
+ li 3,42
+ sc
+
+.section ".toc","aw"
+.L1:
+.quad 22, 37, 89, 47
+
+.section .R_PPC64_TOC16_LO_DS,"ax",@progbits
+.globl .FR_PPC64_TOC16_LO_DS
+.FR_PPC64_TOC16_LO_DS:
+ ld 1, .L1@toc@l(2)
+
+# CHECK: Disassembly of section .R_PPC64_TOC16_LO_DS:
+# CHECK: .FR_PPC64_TOC16_LO_DS:
+# CHECK: 1001000c: e8 22 80 00 ld 1, -32768(2)
+
+.section .R_PPC64_TOC16_LO,"ax",@progbits
+.globl .FR_PPC64_TOC16_LO
+.FR_PPC64_TOC16_LO:
+ addi 1, 2, .L1@toc@l
+
+# CHECK: Disassembly of section .R_PPC64_TOC16_LO:
+# CHECK: .FR_PPC64_TOC16_LO:
+# CHECK: 10010010: 38 22 80 00 addi 1, 2, -32768
+
+.section .R_PPC64_TOC16_HI,"ax",@progbits
+.globl .FR_PPC64_TOC16_HI
+.FR_PPC64_TOC16_HI:
+ addis 1, 2, .L1@toc@h
+
+# CHECK: Disassembly of section .R_PPC64_TOC16_HI:
+# CHECK: .FR_PPC64_TOC16_HI:
+# CHECK: 10010014: 3c 22 10 01 addis 1, 2, 4097
+
+.section .R_PPC64_TOC16_HA,"ax",@progbits
+.globl .FR_PPC64_TOC16_HA
+.FR_PPC64_TOC16_HA:
+ addis 1, 2, .L1@toc@ha
+
+# CHECK: Disassembly of section .R_PPC64_TOC16_HA:
+# CHECK: .FR_PPC64_TOC16_HA:
+# CHECK: 10010018: 3c 22 10 02 addis 1, 2, 4098
+
+.section .R_PPC64_REL24,"ax",@progbits
+.globl .FR_PPC64_REL24
+.FR_PPC64_REL24:
+ b .Lfoox
+.section .R_PPC64_REL24_2,"ax",@progbits
+.Lfoox:
+
+# CHECK: Disassembly of section .R_PPC64_REL24:
+# CHECK: .FR_PPC64_REL24:
+# CHECK: 1001001c: 48 00 00 04 b .+4
+
+.section .R_PPC64_ADDR16_LO,"ax",@progbits
+.globl .FR_PPC64_ADDR16_LO
+.FR_PPC64_ADDR16_LO:
+ li 1, .Lfoo@l
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_LO:
+# CHECK: .FR_PPC64_ADDR16_LO:
+# CHECK: 10010020: 38 20 00 00 li 1, 0
+
+.section .R_PPC64_ADDR16_HI,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HI
+.FR_PPC64_ADDR16_HI:
+ li 1, .Lfoo@h
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HI:
+# CHECK: .FR_PPC64_ADDR16_HI:
+# CHECK: 10010024: 38 20 10 01 li 1, 4097
+
+.section .R_PPC64_ADDR16_HA,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HA
+.FR_PPC64_ADDR16_HA:
+ li 1, .Lfoo@ha
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HA:
+# CHECK: .FR_PPC64_ADDR16_HA:
+# CHECK: 10010028: 38 20 10 01 li 1, 4097
+
+.section .R_PPC64_ADDR16_HIGHER,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HIGHER
+.FR_PPC64_ADDR16_HIGHER:
+ li 1, .Lfoo@higher
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHER:
+# CHECK: .FR_PPC64_ADDR16_HIGHER:
+# CHECK: 1001002c: 38 20 00 00 li 1, 0
+
+.section .R_PPC64_ADDR16_HIGHERA,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HIGHERA
+.FR_PPC64_ADDR16_HIGHERA:
+ li 1, .Lfoo@highera
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHERA:
+# CHECK: .FR_PPC64_ADDR16_HIGHERA:
+# CHECK: 10010030: 38 20 00 00 li 1, 0
+
+.section .R_PPC64_ADDR16_HIGHEST,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HIGHEST
+.FR_PPC64_ADDR16_HIGHEST:
+ li 1, .Lfoo@highest
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHEST:
+# CHECK: .FR_PPC64_ADDR16_HIGHEST:
+# CHECK: 10010034: 38 20 00 00 li 1, 0
+
+.section .R_PPC64_ADDR16_HIGHESTA,"ax",@progbits
+.globl .FR_PPC64_ADDR16_HIGHESTA
+.FR_PPC64_ADDR16_HIGHESTA:
+ li 1, .Lfoo@highesta
+
+# CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHESTA:
+# CHECK: .FR_PPC64_ADDR16_HIGHESTA:
+# CHECK: 10010038: 38 20 00 00 li 1, 0
+
diff --git a/test/ELF/ppc64-shared-rel-toc.s b/test/ELF/ppc64-shared-rel-toc.s
new file mode 100644
index 000000000000..f5cd45936683
--- /dev/null
+++ b/test/ELF/ppc64-shared-rel-toc.s
@@ -0,0 +1,27 @@
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+// RUN: ld.lld -shared %t.o -o %t.so
+// RUN: llvm-readobj -t -r -dyn-symbols %t.so | FileCheck %s
+// REQUIRES: ppc
+
+// When we create the TOC reference in the shared library, make sure that the
+// R_PPC64_RELATIVE relocation uses the correct (non-zero) offset.
+
+ .globl foo
+ .align 2
+ .type foo,@function
+ .section .opd,"aw",@progbits
+foo: # @foo
+ .align 3
+ .quad .Lfunc_begin0
+ .quad .TOC.@tocbase
+ .quad 0
+ .text
+.Lfunc_begin0:
+ blr
+
+// CHECK: 0x30000 R_PPC64_RELATIVE - 0x10000
+// CHECK: 0x30008 R_PPC64_RELATIVE - 0x8000
+
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x30000
+
diff --git a/test/ELF/ppc64-toc-restore.s b/test/ELF/ppc64-toc-restore.s
new file mode 100644
index 000000000000..cee105b35e64
--- /dev/null
+++ b/test/ELF/ppc64-toc-restore.s
@@ -0,0 +1,62 @@
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %p/Inputs/shared-ppc64.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-objdump -d %t | FileCheck %s
+// REQUIRES: ppc
+
+// CHECK: Disassembly of section .text:
+
+.global _start
+_start:
+ bl bar
+ nop
+
+// CHECK: _start:
+// CHECK: 10010000: 48 00 00 21 bl .+32
+// CHECK-NOT: 10010004: 60 00 00 00 nop
+// CHECK: 10010004: e8 41 00 28 ld 2, 40(1)
+
+.global noret
+noret:
+ bl bar
+ li 5, 7
+
+// CHECK: noret:
+// CHECK: 10010008: 48 00 00 19 bl .+24
+// CHECK: 1001000c: 38 a0 00 07 li 5, 7
+
+.global noretend
+noretend:
+ bl bar
+
+// CHECK: noretend:
+// CHECK: 10010010: 48 00 00 11 bl .+16
+
+.global noretb
+noretb:
+ b bar
+
+// CHECK: noretb:
+// CHECK: 10010014: 48 00 00 0c b .+12
+
+// This should come last to check the end-of-buffer condition.
+.global last
+last:
+ bl bar
+ nop
+
+// CHECK: last:
+// CHECK: 10010018: 48 00 00 09 bl .+8
+// CHECK: 1001001c: e8 41 00 28 ld 2, 40(1)
+
+// CHECK: Disassembly of section .plt:
+// CHECK: .plt:
+// CHECK: 10010020: f8 41 00 28 std 2, 40(1)
+// CHECK: 10010024: 3d 62 00 00 addis 11, 2, 0
+// CHECK: 10010028: e9 8b 80 00 ld 12, -32768(11)
+// CHECK: 1001002c: e9 6c 00 00 ld 11, 0(12)
+// CHECK: 10010030: 7d 69 03 a6 mtctr 11
+// CHECK: 10010034: e8 4c 00 08 ld 2, 8(12)
+// CHECK: 10010038: e9 6c 00 10 ld 11, 16(12)
+// CHECK: 1001003c: 4e 80 04 20 bctr
diff --git a/test/ELF/ppc64-weak-undef-call-shared.s b/test/ELF/ppc64-weak-undef-call-shared.s
new file mode 100644
index 000000000000..2c27a27c5a10
--- /dev/null
+++ b/test/ELF/ppc64-weak-undef-call-shared.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared %t.o -o %t.so
+# RUN: llvm-readobj -t -r -dyn-symbols %t.so | FileCheck %s
+# REQUIRES: ppc
+
+.section ".toc","aw"
+.quad weakfunc
+// CHECK-NOT: R_PPC64_RELATIVE
+
+.text
+.Lfoo:
+ bl weakfunc
+// CHECK-NOT: R_PPC64_REL24
+
+.weak weakfunc
+
diff --git a/test/ELF/ppc64-weak-undef-call.s b/test/ELF/ppc64-weak-undef-call.s
new file mode 100644
index 000000000000..55443cb55b99
--- /dev/null
+++ b/test/ELF/ppc64-weak-undef-call.s
@@ -0,0 +1,27 @@
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s
+# REQUIRES: ppc
+
+# CHECK: Disassembly of section .text:
+
+.section ".opd","aw"
+.global _start
+_start:
+.quad .Lfoo,.TOC.@tocbase,0
+
+.text
+.Lfoo:
+ bl weakfunc
+ nop
+ blr
+
+.weak weakfunc
+
+# It does not really matter how we fixup the bl, if at all, because it needs to
+# be unreachable. But, we should link successfully. We should not, however,
+# generate a .plt entry (this would be wasted space). For now, we do nothing
+# (leaving the zero relative offset present in the input).
+# CHECK: 10010000: 48 00 00 01 bl .+0
+# CHECK: 10010004: 60 00 00 00 nop
+# CHECK: 10010008: 4e 80 00 20 blr
diff --git a/test/ELF/pre_init_fini_array.s b/test/ELF/pre_init_fini_array.s
new file mode 100644
index 000000000000..bf32283d2579
--- /dev/null
+++ b/test/ELF/pre_init_fini_array.s
@@ -0,0 +1,140 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2
+// RUN: ld.lld %t2 -o %t2.so -shared
+// RUN: ld.lld %t %t2.so -o %t2
+// RUN: llvm-readobj -r -symbols -sections -dynamic-table %t2 | FileCheck %s
+// RUN: llvm-objdump -d %t2 | FileCheck --check-prefix=DISASM %s
+// REQUIRES: x86
+
+.globl _start
+_start:
+ call __preinit_array_start
+ call __preinit_array_end
+ call __init_array_start
+ call __init_array_end
+ call __fini_array_start
+ call __fini_array_end
+
+
+.section .init_array,"aw",@init_array
+ .quad 0
+
+.section .preinit_array,"aw",@preinit_array
+ .quad 0
+ .byte 0
+
+.section .fini_array,"aw",@fini_array
+ .quad 0
+ .short 0
+
+// CHECK: Name: .init_array
+// CHECK-NEXT: Type: SHT_INIT_ARRAY
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[INIT_ADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[INIT_SIZE:.*]]
+
+
+// CHECK: Name: .preinit_array
+// CHECK-NEXT: Type: SHT_PREINIT_ARRAY
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[PREINIT_ADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[PREINIT_SIZE:.*]]
+
+
+// CHECK: Name: .fini_array
+// CHECK-NEXT: Type: SHT_FINI_ARRAY
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[FINI_ADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[FINI_SIZE:.*]]
+
+// CHECK: Relocations [
+// CHECK-NEXT: ]
+
+// CHECK: Name: __fini_array_end
+// CHECK-NEXT: Value: 0x1201B
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .fini_array
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __fini_array_start
+// CHECK-NEXT: Value: [[FINI_ADDR]]
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .fini_array
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __init_array_end
+// CHECK-NEXT: Value: 0x12008
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .init_array
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __init_array_start
+// CHECK-NEXT: Value: [[INIT_ADDR]]
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .init_array
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __preinit_array_end
+// CHECK-NEXT: Value: 0x12011
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .preinit_array
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: __preinit_array_start
+// CHECK-NEXT: Value: [[PREINIT_ADDR]]
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .preinit_array
+// CHECK-NEXT: }
+
+// CHECK: DynamicSection
+// CHECK: PREINIT_ARRAY [[PREINIT_ADDR]]
+// CHECK: PREINIT_ARRAYSZ [[PREINIT_SIZE]] (bytes)
+// CHECK: INIT_ARRAY [[INIT_ADDR]]
+// CHECK: INIT_ARRAYSZ [[INIT_SIZE]] (bytes)
+// CHECK: FINI_ARRAY [[FINI_ADDR]]
+// CHECK: FINI_ARRAYSZ [[FINI_SIZE]] (bytes)
+
+
+// 0x12008 - (0x11000 + 5) = 4099
+// 0x12011 - (0x11005 + 5) = 4103
+// 0x12000 - (0x1100a + 5) = 4081
+// 0x12008 - (0x1100f + 5) = 4084
+// 0x12011 - (0x11014 + 5) = 4088
+// 0x1201B - (0x11019 + 5) = 4093
+// DISASM: _start:
+// DISASM-NEXT: 11000: e8 {{.*}} callq 4099
+// DISASM-NEXT: 11005: e8 {{.*}} callq 4103
+// DISASM-NEXT: 1100a: e8 {{.*}} callq 4081
+// DISASM-NEXT: 1100f: e8 {{.*}} callq 4084
+// DISASM-NEXT: 11014: e8 {{.*}} callq 4088
+// DISASM-NEXT: 11019: e8 {{.*}} callq 4093
diff --git a/test/ELF/pre_init_fini_array_missing.s b/test/ELF/pre_init_fini_array_missing.s
new file mode 100644
index 000000000000..02b83240193e
--- /dev/null
+++ b/test/ELF/pre_init_fini_array_missing.s
@@ -0,0 +1,30 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-objdump -d %t2 | FileCheck %s
+// REQUIRES: x86
+
+.globl _start
+_start:
+ call __preinit_array_start
+ call __preinit_array_end
+ call __init_array_start
+ call __init_array_end
+ call __fini_array_start
+ call __fini_array_end
+
+// With no .init_array section the symbols resolve to 0
+// 0 - (0x11000 + 5) = -69637
+// 0 - (0x11005 + 5) = -69642
+// 0 - (0x1100a + 5) = -69647
+// 0 - (0x1100f + 5) = -69652
+// 0 - (0x11014 + 5) = -69657
+// 0 - (0x11019 + 5) = -69662
+
+// CHECK: Disassembly of section .text:
+// CHECK-NEXT: _start:
+// CHECK-NEXT: 11000: e8 fb ef fe ff callq -69637
+// CHECK-NEXT: 11005: e8 f6 ef fe ff callq -69642
+// CHECK-NEXT: 1100a: e8 f1 ef fe ff callq -69647
+// CHECK-NEXT: 1100f: e8 ec ef fe ff callq -69652
+// CHECK-NEXT: 11014: e8 e7 ef fe ff callq -69657
+// CHECK-NEXT: 11019: e8 e2 ef fe ff callq -69662
diff --git a/test/ELF/progname.s b/test/ELF/progname.s
new file mode 100644
index 000000000000..5712b95d276d
--- /dev/null
+++ b/test/ELF/progname.s
@@ -0,0 +1,20 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
+// RUN: echo '.global __progname' > %t2.s
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %t2.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld -o %t %t.o %t2.so
+// RUN: llvm-readobj -dyn-symbols %t | FileCheck %s
+
+// CHECK: Name: __progname@
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+
+.global _start, __progname
+_start:
+__progname:
+ nop
diff --git a/test/ELF/program-header-layout.s b/test/ELF/program-header-layout.s
new file mode 100644
index 000000000000..8e32227ac741
--- /dev/null
+++ b/test/ELF/program-header-layout.s
@@ -0,0 +1,98 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %t2
+# RUN: llvm-readobj -sections -program-headers %t2 | FileCheck %s
+# REQUIRES: x86
+
+# Check that different output sections with the same flags are merged into a
+# single Read/Write PT_LOAD.
+
+.section .r,"a"
+.globl _start
+_start:
+.quad 0
+
+.section .a,"aw"
+.quad 1
+
+.section .b,"aw"
+.quad 2
+
+# CHECK: Name: .r
+# CHECK-NEXT: Type: SHT_PROGBITS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: SHF_ALLOC
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address:
+# CHECK-NEXT: Offset: 0x158
+# CHECK-NEXT: Size:
+# CHECK-NEXT: Link:
+# CHECK-NEXT: Info:
+# CHECK-NEXT: AddressAlignment:
+# CHECK-NEXT: EntrySize:
+# CHECK-NEXT: }
+
+# CHECK: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR (0x6)
+# CHECK-NEXT: Offset: 0x40
+# CHECK-NEXT: VirtualAddress: 0x10040
+# CHECK-NEXT: PhysicalAddress: 0x10040
+# CHECK-NEXT: FileSize: 280
+# CHECK-NEXT: MemSize: 280
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT: PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress:
+# CHECK-NEXT: PhysicalAddress:
+# CHECK-NEXT: FileSize: 352
+# CHECK-NEXT: MemSize: 352
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment:
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: VirtualAddress:
+# CHECK-NEXT: PhysicalAddress:
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_X
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment:
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_LOAD
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: VirtualAddress:
+# CHECK-NEXT: PhysicalAddress:
+# CHECK-NEXT: FileSize: 16
+# CHECK-NEXT: MemSize: 16
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment:
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_GNU_STACK
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x0
+# CHECK-NEXT: PhysicalAddress: 0x0
+# CHECK-NEXT: FileSize: 0
+# CHECK-NEXT: MemSize: 0
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: PF_W
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
diff --git a/test/ELF/relative-dynamic-reloc-ppc64.s b/test/ELF/relative-dynamic-reloc-ppc64.s
new file mode 100644
index 000000000000..b22b33f9f469
--- /dev/null
+++ b/test/ELF/relative-dynamic-reloc-ppc64.s
@@ -0,0 +1,66 @@
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+// RUN: ld.lld -shared %t.o -o %t.so
+// RUN: llvm-readobj -t -r -dyn-symbols %t.so | FileCheck %s
+// REQUIRES: ppc
+
+// Test that we create R_PPC64_RELATIVE relocations but don't put any
+// symbols in the dynamic symbol table.
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x[[FOO_ADDR:.*]] R_PPC64_RELATIVE - 0x[[FOO_ADDR]]
+// CHECK-NEXT: 0x[[BAR_ADDR:.*]] R_PPC64_RELATIVE - 0x[[BAR_ADDR]]
+// CHECK-NEXT: 0x10010 R_PPC64_RELATIVE - 0x10009
+// CHECK-NEXT: 0x{{.*}} R_PPC64_RELATIVE - 0x[[ZED_ADDR:.*]]
+// CHECK-NEXT: 0x{{.*}} R_PPC64_RELATIVE - 0x[[FOO_ADDR]]
+// CHECK-NEXT: 0x1D0 R_PPC64_ADDR64 external 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: Symbols [
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x[[FOO_ADDR]]
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x[[BAR_ADDR]]
+// CHECK: Name: zed
+// CHECK-NEXT: Value: 0x[[ZED_ADDR]]
+// CHECK: ]
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @ (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: external@
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+foo:
+ .quad foo
+
+ .hidden bar
+ .global bar
+bar:
+ .quad bar
+ .quad bar + 1
+
+ .hidden zed
+ .comm zed,1
+ .quad zed
+
+ .section abc,"a"
+ .quad foo
+
+ .quad external
diff --git a/test/ELF/relative-dynamic-reloc.s b/test/ELF/relative-dynamic-reloc.s
new file mode 100644
index 000000000000..41fcd8a6a556
--- /dev/null
+++ b/test/ELF/relative-dynamic-reloc.s
@@ -0,0 +1,69 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld -shared %t.o -o %t.so
+// RUN: llvm-readobj -t -r -dyn-symbols %t.so | FileCheck %s
+
+// Test that we create R_X86_64_RELATIVE relocations but don't put any
+// symbols in the dynamic symbol table.
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: 0x[[FOO_ADDR:.*]] R_X86_64_RELATIVE - 0x[[FOO_ADDR]]
+// CHECK-NEXT: 0x[[BAR_ADDR:.*]] R_X86_64_RELATIVE - 0x[[BAR_ADDR]]
+// CHECK-NEXT: 0x1010 R_X86_64_RELATIVE - 0x1009
+// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x[[ZED_ADDR:.*]]
+// CHECK-NEXT: 0x{{.*}} R_X86_64_RELATIVE - 0x[[FOO_ADDR]]
+// CHECK-NEXT: 0x1D0 R_X86_64_64 external 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: Symbols [
+// CHECK: Name: foo
+// CHECK-NEXT: Value: 0x[[FOO_ADDR]]
+// CHECK: Name: bar
+// CHECK-NEXT: Value: 0x[[BAR_ADDR]]
+// CHECK: Name: zed
+// CHECK-NEXT: Value: 0x[[ZED_ADDR]]
+// CHECK: ]
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @ (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: external@
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+foo:
+ .quad foo
+
+ .hidden bar
+ .global bar
+bar:
+ .quad bar
+ .quad bar + 1
+
+ .hidden zed
+ .comm zed,1
+ .quad zed
+
+ .section abc,"a"
+ .quad foo
+
+ .quad external
+
+// This doesn't need a relocation.
+ callq localfunc@PLT
+localfunc:
diff --git a/test/ELF/relocatable.s b/test/ELF/relocatable.s
new file mode 100644
index 000000000000..9fb171d4ed50
--- /dev/null
+++ b/test/ELF/relocatable.s
@@ -0,0 +1,9 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld -r %t -o %t2 2>&1 | FileCheck %s
+
+# CHECK: -r option is not supported. Use 'ar' command instead.
+
+.globl _start;
+_start:
diff --git a/test/ELF/relocation-absolute.s b/test/ELF/relocation-absolute.s
new file mode 100644
index 000000000000..20d54eca9205
--- /dev/null
+++ b/test/ELF/relocation-absolute.s
@@ -0,0 +1,12 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %tabs %t -o %tout
+// RUN: llvm-objdump -d %tout | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+ movl $abs, %edx
+
+//CHECK: start:
+//CHECK-NEXT: movl $66, %edx
diff --git a/test/ELF/relocation-common.s b/test/ELF/relocation-common.s
new file mode 100644
index 000000000000..d5d379a355aa
--- /dev/null
+++ b/test/ELF/relocation-common.s
@@ -0,0 +1,14 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %tout
+// RUN: llvm-objdump -t -d %tout | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+ movl $1, sym1(%rip)
+
+.global sym1
+.comm sym1,4,4
+
+// CHECK: 11000: {{.*}} movl $1, 4086(%rip)
+// CHECK: 0000000000012000 g .bss 00000004 sym1
diff --git a/test/ELF/relocation-copy-align.s b/test/ELF/relocation-copy-align.s
new file mode 100644
index 000000000000..07ae6636e149
--- /dev/null
+++ b/test/ELF/relocation-copy-align.s
@@ -0,0 +1,31 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/relocation-copy-align.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t.so
+// RUN: ld.lld %t.o %t.so -o %t3
+// RUN: llvm-readobj -s -r --expand-relocs %t3 | FileCheck %s
+
+.global _start
+_start:
+movl $5, x
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize:
+
+// CHECK: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_X86_64_COPY
+// CHECK-NEXT: Symbol: x
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
diff --git a/test/ELF/relocation-copy-i686.s b/test/ELF/relocation-copy-i686.s
new file mode 100644
index 000000000000..d61f84783cb6
--- /dev/null
+++ b/test/ELF/relocation-copy-i686.s
@@ -0,0 +1,63 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %p/Inputs/relocation-copy.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t.so
+// RUN: ld.lld -e main %t.o %t.so -o %t3
+// RUN: llvm-readobj -s -r --expand-relocs %t3 | FileCheck %s
+// RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=CODE %s
+
+.text
+.globl main
+.align 16, 0x90
+.type main,@function
+main:
+movl $5, x
+movl $7, y
+movl $9, z
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x13000
+// CHECK-NEXT: Offset: 0x3000
+// CHECK-NEXT: Size: 24
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 16
+// CHECK-NEXT: EntrySize: 0
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rel.dyn {
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_386_COPY
+// CHECK-NEXT: Symbol: x
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_386_COPY
+// CHECK-NEXT: Symbol: y
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_386_COPY
+// CHECK-NEXT: Symbol: z
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// 77824 = 0x13000
+// 16 is alignment here
+// 77840 = 0x13000 + 16
+// 77844 = 0x13000 + 16 + 4
+// CODE: Disassembly of section .text:
+// CODE-NEXT: main:
+// CODE-NEXT: 11000: c7 05 00 30 01 00 05 00 00 00 movl $5, 77824
+// CODE-NEXT: 1100a: c7 05 10 30 01 00 07 00 00 00 movl $7, 77840
+// CODE-NEXT: 11014: c7 05 14 30 01 00 09 00 00 00 movl $9, 77844
diff --git a/test/ELF/relocation-copy.s b/test/ELF/relocation-copy.s
new file mode 100644
index 000000000000..85cbf673910a
--- /dev/null
+++ b/test/ELF/relocation-copy.s
@@ -0,0 +1,63 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/relocation-copy.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t.so
+// RUN: ld.lld -e main %t.o %t.so -o %t3
+// RUN: llvm-readobj -s -r --expand-relocs %t3 | FileCheck %s
+// RUN: llvm-objdump -d %t3 | FileCheck -check-prefix=CODE %s
+
+.text
+.globl main
+.align 16, 0x90
+.type main,@function
+main:
+movl $5, x
+movl $7, y
+movl $9, z
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS (0x8)
+// CHECK-NEXT: Flags [ (0x3)
+// CHECK-NEXT: SHF_ALLOC (0x2)
+// CHECK-NEXT: SHF_WRITE (0x1)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x13000
+// CHECK-NEXT: Offset: 0x3000
+// CHECK-NEXT: Size: 24
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 16
+// CHECK-NEXT: EntrySize: 0
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_X86_64_COPY
+// CHECK-NEXT: Symbol: x
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_X86_64_COPY
+// CHECK-NEXT: Symbol: y
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: Relocation {
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Type: R_X86_64_COPY
+// CHECK-NEXT: Symbol: z
+// CHECK-NEXT: Addend: 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// 77824 = 0x13000
+// 16 is alignment here
+// 77840 = 0x13000 + 16
+// 77844 = 0x13000 + 16 + 4
+// CODE: Disassembly of section .text:
+// CODE-NEXT: main:
+// CODE-NEXT: 11000: c7 04 25 00 30 01 00 05 00 00 00 movl $5, 77824
+// CODE-NEXT: 1100b: c7 04 25 10 30 01 00 07 00 00 00 movl $7, 77840
+// CODE-NEXT: 11016: c7 04 25 14 30 01 00 09 00 00 00 movl $9, 77844
diff --git a/test/ELF/relocation-i686.s b/test/ELF/relocation-i686.s
new file mode 100644
index 000000000000..f66cad20a074
--- /dev/null
+++ b/test/ELF/relocation-i686.s
@@ -0,0 +1,84 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t %t2.so -o %t2
+// RUN: llvm-readobj -s %t2 | FileCheck --check-prefix=ADDR %s
+// RUN: llvm-objdump -d %t2 | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+
+.section .R_386_32,"ax",@progbits
+.global R_386_32
+R_386_32:
+ movl $R_386_32 + 1, %edx
+
+
+.section .R_386_PC32,"ax",@progbits,unique,1
+.global R_386_PC32
+R_386_PC32:
+ call R_386_PC32_2
+
+.section .R_386_PC32,"ax",@progbits,unique,2
+.zero 4
+R_386_PC32_2:
+ nop
+
+// CHECK: Disassembly of section .R_386_32:
+// CHECK-NEXT: R_386_32:
+// CHECK-NEXT: 11000: {{.*}} movl $69633, %edx
+
+// CHECK: Disassembly of section .R_386_PC32:
+// CHECK-NEXT: R_386_PC32:
+// CHECK-NEXT: 11005: e8 04 00 00 00 calll 4
+
+// CHECK: R_386_PC32_2:
+// CHECK-NEXT: 1100e: 90 nop
+
+// Create a .got
+movl bar@GOT, %eax
+
+// ADDR: Name: .plt
+// ADDR-NEXT: Type: SHT_PROGBITS
+// ADDR-NEXT: Flags [
+// ADDR-NEXT: SHF_ALLOC
+// ADDR-NEXT: SHF_EXECINSTR
+// ADDR-NEXT: ]
+// ADDR-NEXT: Address: 0x11030
+// ADDR-NEXT: Offset: 0x1030
+// ADDR-NEXT: Size: 32
+
+// ADDR: Name: .got
+// ADDR-NEXT: Type: SHT_PROGBITS
+// ADDR-NEXT: Flags [
+// ADDR-NEXT: SHF_ALLOC
+// ADDR-NEXT: SHF_WRITE
+// ADDR-NEXT: ]
+// ADDR-NEXT: Address: 0x12070
+
+.section .R_386_GOTPC,"ax",@progbits
+R_386_GOTPC:
+ movl $_GLOBAL_OFFSET_TABLE_, %eax
+
+// 0x12050 - 0x11014 = 4156
+
+// CHECK: Disassembly of section .R_386_GOTPC:
+// CHECK-NEXT: R_386_GOTPC:
+// CHECK-NEXT: 11014: {{.*}} movl $4188, %eax
+
+.section .dynamic_reloc, "ax",@progbits
+ call bar
+// 0x11030 - (0x11019 + 5) = 18
+// CHECK: Disassembly of section .dynamic_reloc:
+// CHECK-NEXT: .dynamic_reloc:
+// CHECK-NEXT: 11019: e8 22 00 00 00 calll 34
+
+.section .R_386_GOT32,"ax",@progbits
+.global R_386_GOT32
+R_386_GOT32:
+ movl zed@GOT, %eax
+// This is the second symbol in the got, so the offset is 4.
+// CHECK: Disassembly of section .R_386_GOT32:
+// CHECK-NEXT: R_386_GOT32:
+// CHECK-NEXT: 1101e: {{.*}} movl 4, %eax
diff --git a/test/ELF/relocation-in-merge.s b/test/ELF/relocation-in-merge.s
new file mode 100644
index 000000000000..820208a2cafe
--- /dev/null
+++ b/test/ELF/relocation-in-merge.s
@@ -0,0 +1,7 @@
+// REQUIRES: x86
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: not ld.lld %t.o -o %t 2>&1 | FileCheck %s
+// CHECK: Relocations pointing to SHF_MERGE are not supported
+
+ .section .foo,"aM",@progbits,4
+ .long bar
diff --git a/test/ELF/relocation-local.s b/test/ELF/relocation-local.s
new file mode 100644
index 000000000000..26e89fc12f8d
--- /dev/null
+++ b/test/ELF/relocation-local.s
@@ -0,0 +1,38 @@
+// Test that relocation of local symbols is working.
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-objdump -s -d %t2 | FileCheck %s
+// REQUIRES: x86
+
+
+.global _start
+_start:
+ call lulz
+
+.zero 4
+lulz:
+
+.section .text2,"ax",@progbits
+R_X86_64_32:
+ movl $R_X86_64_32, %edx
+
+// FIXME: this would be far more self evident if llvm-objdump printed
+// constants in hex.
+// CHECK: Disassembly of section .text2:
+// CHECK-NEXT: R_X86_64_32:
+// CHECK-NEXT: 11009: {{.*}} movl $69641, %edx
+
+.section .R_X86_64_32S,"ax",@progbits
+R_X86_64_32S:
+ movq lulz - 0x100000, %rdx
+
+// CHECK: Disassembly of section .R_X86_64_32S:
+// CHECK-NEXT: R_X86_64_32S:
+// CHECK-NEXT: {{.*}}: {{.*}} movq -978935, %rdx
+
+.section .R_X86_64_64,"a",@progbits
+R_X86_64_64:
+ .quad R_X86_64_64
+
+// CHECK: Contents of section .R_X86_64_64:
+// CHECK-NEXT: 10120 20010100 00000000
diff --git a/test/ELF/relocation-past-merge-end.s b/test/ELF/relocation-past-merge-end.s
new file mode 100644
index 000000000000..4dadea1e7acd
--- /dev/null
+++ b/test/ELF/relocation-past-merge-end.s
@@ -0,0 +1,7 @@
+// REQUIRES: x86
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: not ld.lld %t.o -o %t.so -shared 2>&1 | FileCheck %s
+// CHECK: Entry is past the end of the section
+
+ .long .foo + 1
+ .section .foo,"aM",@progbits,4
diff --git a/test/ELF/relocation-size-shared.s b/test/ELF/relocation-size-shared.s
new file mode 100644
index 000000000000..1b52e77b7d5f
--- /dev/null
+++ b/test/ELF/relocation-size-shared.s
@@ -0,0 +1,78 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/relocation-size-shared.s -o %tso.o
+// RUN: ld.lld -shared %tso.o -o %tso
+// RUN: ld.lld %t.o %tso -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=RELOCSHARED %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+
+// RELOCSHARED: Relocations [
+// RELOCSHARED-NEXT: Section ({{.*}}) .rela.dyn {
+// RELOCSHARED-NEXT: 0x11018 R_X86_64_SIZE64 fooshared 0xFFFFFFFFFFFFFFFF
+// RELOCSHARED-NEXT: 0x11020 R_X86_64_SIZE64 fooshared 0x0
+// RELOCSHARED-NEXT: 0x11028 R_X86_64_SIZE64 fooshared 0x1
+// RELOCSHARED-NEXT: 0x11048 R_X86_64_SIZE32 fooshared 0xFFFFFFFFFFFFFFFF
+// RELOCSHARED-NEXT: 0x1104F R_X86_64_SIZE32 fooshared 0x0
+// RELOCSHARED-NEXT: 0x11056 R_X86_64_SIZE32 fooshared 0x1
+// RELOCSHARED-NEXT: }
+// RELOCSHARED-NEXT:]
+
+// DISASM: Disassembly of section .text:
+// DISASM: _data:
+// DISASM-NEXT: 11000: 19 00
+// DISASM-NEXT: 11002: 00 00
+// DISASM-NEXT: 11004: 00 00
+// DISASM-NEXT: 11006: 00 00
+// DISASM-NEXT: 11008: 1a 00
+// DISASM-NEXT: 1100a: 00 00
+// DISASM-NEXT: 1100c: 00 00
+// DISASM-NEXT: 1100e: 00 00
+// DISASM-NEXT: 11010: 1b 00
+// DISASM-NEXT: 11012: 00 00
+// DISASM-NEXT: 11014: 00 00
+// DISASM-NEXT: 11016: 00 00
+// DISASM-NEXT: 11018: 00 00
+// DISASM-NEXT: 1101a: 00 00
+// DISASM-NEXT: 1101c: 00 00
+// DISASM-NEXT: 1101e: 00 00
+// DISASM-NEXT: 11020: 00 00
+// DISASM-NEXT: 11022: 00 00
+// DISASM-NEXT: 11024: 00 00
+// DISASM-NEXT: 11026: 00 00
+// DISASM-NEXT: 11028: 00 00
+// DISASM-NEXT: 1102a: 00 00
+// DISASM-NEXT: 1102c: 00 00
+// DISASM-NEXT: 1102e: 00 00
+// DISASM: _start:
+// DISASM-NEXT: 11030: 8b 04 25 19 00 00 00 movl 25, %eax
+// DISASM-NEXT: 11037: 8b 04 25 1a 00 00 00 movl 26, %eax
+// DISASM-NEXT: 1103e: 8b 04 25 1b 00 00 00 movl 27, %eax
+// DISASM-NEXT: 11045: 8b 04 25 00 00 00 00 movl 0, %eax
+// DISASM-NEXT: 1104c: 8b 04 25 00 00 00 00 movl 0, %eax
+// DISASM-NEXT: 11053: 8b 04 25 00 00 00 00 movl 0, %eax
+
+.data
+.global foo
+.type foo,%object
+.size foo,26
+foo:
+.zero 26
+
+.text
+_data:
+ // R_X86_64_SIZE64:
+ .quad foo@SIZE-1
+ .quad foo@SIZE
+ .quad foo@SIZE+1
+ .quad fooshared@SIZE-1
+ .quad fooshared@SIZE
+ .quad fooshared@SIZE+1
+
+.globl _start
+_start:
+ // R_X86_64_SIZE32:
+ movl foo@SIZE-1,%eax
+ movl foo@SIZE,%eax
+ movl foo@SIZE+1,%eax
+ movl fooshared@SIZE-1,%eax
+ movl fooshared@SIZE,%eax
+ movl fooshared@SIZE+1,%eax
diff --git a/test/ELF/relocation-size.s b/test/ELF/relocation-size.s
new file mode 100644
index 000000000000..aea3dafea071
--- /dev/null
+++ b/test/ELF/relocation-size.s
@@ -0,0 +1,123 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=NORELOC %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+// RUN: ld.lld -shared %t.o -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=RELOCSHARED %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASMSHARED %s
+
+// NORELOC: Relocations [
+// NORELOC-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _data:
+// DISASM-NEXT: 11000: 19 00
+// DISASM-NEXT: 11002: 00 00
+// DISASM-NEXT: 11004: 00 00
+// DISASM-NEXT: 11006: 00 00
+// DISASM-NEXT: 11008: 1a 00
+// DISASM-NEXT: 1100a: 00 00
+// DISASM-NEXT: 1100c: 00 00
+// DISASM-NEXT: 1100e: 00 00
+// DISASM-NEXT: 11010: 1b 00
+// DISASM-NEXT: 11012: 00 00
+// DISASM-NEXT: 11014: 00 00
+// DISASM-NEXT: 11016: 00 00
+// DISASM-NEXT: 11018: 19 00
+// DISASM-NEXT: 1101a: 00 00
+// DISASM-NEXT: 1101c: 00 00
+// DISASM-NEXT: 1101e: 00 00
+// DISASM-NEXT: 11020: 1a 00
+// DISASM-NEXT: 11022: 00 00
+// DISASM-NEXT: 11024: 00 00
+// DISASM-NEXT: 11026: 00 00
+// DISASM-NEXT: 11028: 1b 00
+// DISASM-NEXT: 1102a: 00 00
+// DISASM-NEXT: 1102c: 00 00
+// DISASM-NEXT: 1102e: 00 00
+// DISASM: _start:
+// DISASM-NEXT: 11030: 8b 04 25 19 00 00 00 movl 25, %eax
+// DISASM-NEXT: 11037: 8b 04 25 1a 00 00 00 movl 26, %eax
+// DISASM-NEXT: 1103e: 8b 04 25 1b 00 00 00 movl 27, %eax
+// DISASM-NEXT: 11045: 8b 04 25 19 00 00 00 movl 25, %eax
+// DISASM-NEXT: 1104c: 8b 04 25 1a 00 00 00 movl 26, %eax
+// DISASM-NEXT: 11053: 8b 04 25 1b 00 00 00 movl 27, %eax
+
+// RELOCSHARED: Relocations [
+// RELOCSHARED-NEXT: Section ({{.*}}) .rela.dyn {
+// RELOCSHARED-NEXT: 0x1000 R_X86_64_SIZE64 foo 0xFFFFFFFFFFFFFFFF
+// RELOCSHARED-NEXT: 0x1008 R_X86_64_SIZE64 foo 0x0
+// RELOCSHARED-NEXT: 0x1010 R_X86_64_SIZE64 foo 0x1
+// RELOCSHARED-NEXT: 0x1033 R_X86_64_SIZE32 foo 0xFFFFFFFFFFFFFFFF
+// RELOCSHARED-NEXT: 0x103A R_X86_64_SIZE32 foo 0x0
+// RELOCSHARED-NEXT: 0x1041 R_X86_64_SIZE32 foo 0x1
+// RELOCSHARED-NEXT: }
+// RELOCSHARED-NEXT: ]
+
+// DISASMSHARED: Disassembly of section .text:
+// DISASMSHARED-NEXT: _data:
+// DISASMSHARED-NEXT: 1000: 00 00
+// DISASMSHARED-NEXT: 1002: 00 00
+// DISASMSHARED-NEXT: 1004: 00 00
+// DISASMSHARED-NEXT: 1006: 00 00
+// DISASMSHARED-NEXT: 1008: 00 00
+// DISASMSHARED-NEXT: 100a: 00 00
+// DISASMSHARED-NEXT: 100c: 00 00
+// DISASMSHARED-NEXT: 100e: 00 00
+// DISASMSHARED-NEXT: 1010: 00 00
+// DISASMSHARED-NEXT: 1012: 00 00
+// DISASMSHARED-NEXT: 1014: 00 00
+// DISASMSHARED-NEXT: 1016: 00 00
+// DISASMSHARED-NEXT: 1018: 19 00
+// DISASMSHARED-NEXT: 101a: 00 00
+// DISASMSHARED-NEXT: 101c: 00 00
+// DISASMSHARED-NEXT: 101e: 00 00
+// DISASMSHARED-NEXT: 1020: 1a 00
+// DISASMSHARED-NEXT: 1022: 00 00
+// DISASMSHARED-NEXT: 1024: 00 00
+// DISASMSHARED-NEXT: 1026: 00 00
+// DISASMSHARED-NEXT: 1028: 1b 00
+// DISASMSHARED-NEXT: 102a: 00 00
+// DISASMSHARED-NEXT: 102c: 00 00
+// DISASMSHARED-NEXT: 102e: 00 00
+// DISASMSHARED: _start:
+// DISASMSHARED-NEXT: 1030: 8b 04 25 00 00 00 00 movl 0, %eax
+// DISASMSHARED-NEXT: 1037: 8b 04 25 00 00 00 00 movl 0, %eax
+// DISASMSHARED-NEXT: 103e: 8b 04 25 00 00 00 00 movl 0, %eax
+// DISASMSHARED-NEXT: 1045: 8b 04 25 19 00 00 00 movl 25, %eax
+// DISASMSHARED-NEXT: 104c: 8b 04 25 1a 00 00 00 movl 26, %eax
+// DISASMSHARED-NEXT: 1053: 8b 04 25 1b 00 00 00 movl 27, %eax
+
+.data
+.global foo
+.type foo,%object
+.size foo,26
+foo:
+.zero 26
+
+.data
+.global foohidden
+.hidden foohidden
+.type foohidden,%object
+.size foohidden,26
+foohidden:
+.zero 26
+
+.text
+_data:
+ // R_X86_64_SIZE64:
+ .quad foo@SIZE-1
+ .quad foo@SIZE
+ .quad foo@SIZE+1
+ .quad foohidden@SIZE-1
+ .quad foohidden@SIZE
+ .quad foohidden@SIZE+1
+.globl _start
+_start:
+ // R_X86_64_SIZE32:
+ movl foo@SIZE-1,%eax
+ movl foo@SIZE,%eax
+ movl foo@SIZE+1,%eax
+ movl foohidden@SIZE-1,%eax
+ movl foohidden@SIZE,%eax
+ movl foohidden@SIZE+1,%eax
diff --git a/test/ELF/relocation-undefined-weak.s b/test/ELF/relocation-undefined-weak.s
new file mode 100644
index 000000000000..f1cb706329a4
--- /dev/null
+++ b/test/ELF/relocation-undefined-weak.s
@@ -0,0 +1,27 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %tout
+// RUN: llvm-readobj -sections %tout | FileCheck %s
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix DISASM
+// REQUIRES: x86
+
+// Check that undefined weak symbols are treated as having a VA of 0.
+
+.global _start
+_start:
+ movl $1, sym1(%rip)
+
+.weak sym1
+
+// CHECK: Name: .text
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x11000
+
+// Unfortunately FileCheck can't do math, so we have to check for explicit
+// values:
+// R_86_64_PC32 = 0 + (-8 - (0x11000 + 2)) = -69642
+
+// DISASM: movl $1, -69642(%rip)
diff --git a/test/ELF/relocation.s b/test/ELF/relocation.s
new file mode 100644
index 000000000000..a6dd1d1ef5d6
--- /dev/null
+++ b/test/ELF/relocation.s
@@ -0,0 +1,117 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/shared.s -o %t2
+// RUN: ld.lld %t2 -o %t2.so -shared
+// RUN: ld.lld %t %t2.so -o %t3
+// RUN: llvm-readobj -s %t3 | FileCheck --check-prefix=SEC %s
+// RUN: llvm-objdump -s -d %t3 | FileCheck %s
+// REQUIRES: x86
+
+// SEC: Name: .plt
+// SEC-NEXT: Type: SHT_PROGBITS
+// SEC-NEXT: Flags [
+// SEC-NEXT: SHF_ALLOC
+// SEC-NEXT: SHF_EXECINSTR
+// SEC-NEXT: ]
+// SEC-NEXT: Address: 0x11030
+// SEC-NEXT: Offset: 0x1030
+// SEC-NEXT: Size: 32
+
+// SEC: Name: .got
+// SEC-NEXT: Type: SHT_PROGBITS
+// SEC-NEXT: Flags [
+// SEC-NEXT: SHF_ALLOC
+// SEC-NEXT: SHF_WRITE
+// SEC-NEXT: ]
+// SEC-NEXT: Address: 0x120E0
+// SEC-NEXT: Offset:
+// SEC-NEXT: Size: 8
+// SEC-NEXT: Link: 0
+// SEC-NEXT: Info: 0
+// SEC-NEXT: AddressAlignment: 8
+// SEC-NEXT: EntrySize: 0
+// SEC-NEXT: }
+
+// SEC: Name: .got.plt
+// SEC-NEXT: Type: SHT_PROGBITS
+// SEC-NEXT: Flags [
+// SEC-NEXT: SHF_ALLOC
+// SEC-NEXT: SHF_WRITE
+// SEC-NEXT: ]
+// SEC-NEXT: Address: 0x13000
+// SEC-NEXT: Offset: 0x3000
+// SEC-NEXT: Size: 32
+// SEC-NEXT: Link: 0
+// SEC-NEXT: Info: 0
+// SEC-NEXT: AddressAlignment: 8
+// SEC-NEXT: EntrySize: 0
+// SEC-NEXT: }
+
+.section .text,"ax",@progbits,unique,1
+.global _start
+_start:
+ call lulz
+
+.section .text,"ax",@progbits,unique,2
+.zero 4
+.global lulz
+lulz:
+ nop
+
+// CHECK: Disassembly of section .text:
+// CHECK-NEXT: _start:
+// CHECK-NEXT: 11000: e8 04 00 00 00 callq 4
+// CHECK-NEXT: 11005:
+
+// CHECK: lulz:
+// CHECK-NEXT: 11009: 90 nop
+
+
+.section .text2,"ax",@progbits
+.global R_X86_64_32
+R_X86_64_32:
+ movl $R_X86_64_32, %edx
+
+// FIXME: this would be far more self evident if llvm-objdump printed
+// constants in hex.
+// CHECK: Disassembly of section .text2:
+// CHECK-NEXT: R_X86_64_32:
+// CHECK-NEXT: 1100a: {{.*}} movl $69642, %edx
+
+.section .R_X86_64_32S,"ax",@progbits
+.global R_X86_64_32S
+R_X86_64_32S:
+ movq lulz - 0x100000, %rdx
+
+// CHECK: Disassembly of section .R_X86_64_32S:
+// CHECK-NEXT: R_X86_64_32S:
+// CHECK-NEXT: {{.*}}: {{.*}} movq -978935, %rdx
+
+.section .R_X86_64_PC32,"ax",@progbits
+.global R_X86_64_PC32
+R_X86_64_PC32:
+ call bar
+ movl $bar, %eax
+//16 is a size of PLT[0]
+// 0x11030 + 16 - (0x11017 + 5) = 20
+// CHECK: Disassembly of section .R_X86_64_PC32:
+// CHECK-NEXT: R_X86_64_PC32:
+// CHECK-NEXT: 11017: {{.*}} callq 36
+// CHECK-NEXT: 1101c: {{.*}} movl $69696, %eax
+
+.section .R_X86_64_64,"a",@progbits
+.global R_X86_64_64
+R_X86_64_64:
+ .quad R_X86_64_64
+
+// CHECK: Contents of section .R_X86_64_64:
+// CHECK-NEXT: 101c8 c8010100 00000000
+
+.section .R_X86_64_GOTPCREL,"a",@progbits
+.global R_X86_64_GOTPCREL
+R_X86_64_GOTPCREL:
+ .long zed@gotpcrel
+
+// 0x120E8 - 0x101D8 = 7952
+// 7952 = 0x101f0000 in little endian
+// CHECK: Contents of section .R_X86_64_GOTPCREL
+// CHECK-NEXT: 101d0 101f0000
diff --git a/test/ELF/relro.s b/test/ELF/relro.s
new file mode 100644
index 000000000000..7a225a269075
--- /dev/null
+++ b/test/ELF/relro.s
@@ -0,0 +1,242 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld %t.o %t2.so -z now -z relro -o %t
+// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=FULLRELRO %s
+// RUN: ld.lld %t.o %t2.so -z relro -o %t
+// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=PARTRELRO %s
+// RUN: ld.lld %t.o %t2.so -z norelro -o %t
+// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data %t | FileCheck --check-prefix=NORELRO %s
+// REQUIRES: x86
+
+// FULLRELRO: Section {
+// FULLRELRO: Index: 9
+// FULLRELRO-NEXT: Name: .got
+// FULLRELRO-NEXT: Type: SHT_PROGBITS
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: SHF_ALLOC
+// FULLRELRO-NEXT: SHF_WRITE
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Address: 0x12100
+// FULLRELRO-NEXT: Offset: 0x2100
+// FULLRELRO-NEXT: Size: 8
+// FULLRELRO-NEXT: Link: 0
+// FULLRELRO-NEXT: Info: 0
+// FULLRELRO-NEXT: AddressAlignment: 8
+// FULLRELRO-NEXT: EntrySize: 0
+// FULLRELRO-NEXT: SectionData (
+// FULLRELRO-NEXT: 0000: 00000000 00000000
+// FULLRELRO-NEXT: )
+// FULLRELRO-NEXT: }
+// FULLRELRO-NEXT: Section {
+// FULLRELRO-NEXT: Index: 10
+// FULLRELRO-NEXT: Name: .got.plt
+// FULLRELRO-NEXT: Type: SHT_PROGBITS
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: SHF_ALLOC
+// FULLRELRO-NEXT: SHF_WRITE
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Address: 0x12108
+// FULLRELRO-NEXT: Offset: 0x2108
+// FULLRELRO-NEXT: Size: 32
+// FULLRELRO-NEXT: Link: 0
+// FULLRELRO-NEXT: Info: 0
+// FULLRELRO-NEXT: AddressAlignment: 8
+// FULLRELRO-NEXT: EntrySize: 0
+// FULLRELRO-NEXT: SectionData (
+// FULLRELRO-NEXT: 0000:
+// FULLRELRO-NEXT: 0010:
+// FULLRELRO-NEXT: )
+// FULLRELRO-NEXT: }
+// FULLRELRO-NEXT: Section {
+// FULLRELRO-NEXT: Index: 11
+// FULLRELRO-NEXT: Name: .data
+// FULLRELRO-NEXT: Type: SHT_PROGBITS
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: SHF_ALLOC
+// FULLRELRO-NEXT: SHF_WRITE
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Address: 0x13000
+// FULLRELRO-NEXT: Offset: 0x3000
+// FULLRELRO-NEXT: Size: 12
+// FULLRELRO-NEXT: Link: 0
+// FULLRELRO-NEXT: Info: 0
+// FULLRELRO-NEXT: AddressAlignment:
+// FULLRELRO-NEXT: EntrySize: 0
+// FULLRELRO-NEXT: SectionData (
+// FULLRELRO-NEXT: 0000:
+// FULLRELRO-NEXT: )
+// FULLRELRO-NEXT: }
+// FULLRELRO-NEXT: Section {
+// FULLRELRO-NEXT: Index: 12
+// FULLRELRO-NEXT: Name: .foo
+// FULLRELRO-NEXT: Type: SHT_PROGBITS
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: SHF_ALLOC
+// FULLRELRO-NEXT: SHF_WRITE
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Address: 0x1300C
+// FULLRELRO-NEXT: Offset: 0x300C
+// FULLRELRO-NEXT: Size: 0
+// FULLRELRO-NEXT: Link: 0
+// FULLRELRO-NEXT: Info: 0
+// FULLRELRO-NEXT: AddressAlignment:
+// FULLRELRO-NEXT: EntrySize: 0
+// FULLRELRO-NEXT: SectionData (
+// FULLRELRO-NEXT: )
+// FULLRELRO-NEXT: }
+// 308 - sizeof(.data)(12) = 296
+// FULLRELRO: ProgramHeaders [
+// FULLRELRO: Type: PT_LOAD
+// FULLRELRO: Offset: 0x2000
+// FULLRELRO-NEXT: VirtualAddress: [[RWADDR:.*]]
+// FULLRELRO-NEXT: PhysicalAddress:
+// FULLRELRO-NEXT: FileSize: 4108
+// FULLRELRO-NEXT: MemSize: 4108
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: PF_R
+// FULLRELRO-NEXT: PF_W
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Alignment: 4096
+// FULLRELRO-NEXT:}
+// FULLRELRO: Type: PT_GNU_RELRO
+// FULLRELRO-NEXT: Offset: 0x
+// FULLRELRO-NEXT: VirtualAddress: [[RWADDR]]
+// FULLRELRO-NEXT: PhysicalAddress:
+// FULLRELRO-NEXT: FileSize: 296
+// FULLRELRO-NEXT: MemSize: 296
+// FULLRELRO-NEXT: Flags [
+// FULLRELRO-NEXT: PF_R
+// FULLRELRO-NEXT: ]
+// FULLRELRO-NEXT: Alignment: 1
+// FULLRELRO-NEXT:}
+
+// PARTRELRO: Section {
+// PARTRELRO: Index: 9
+// PARTRELRO-NEXT: Name: .got
+// PARTRELRO-NEXT: Type: SHT_PROGBITS
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: SHF_ALLOC
+// PARTRELRO-NEXT: SHF_WRITE
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Address: 0x120E0
+// PARTRELRO-NEXT: Offset: 0x20E0
+// PARTRELRO-NEXT: Size: 8
+// PARTRELRO-NEXT: Link: 0
+// PARTRELRO-NEXT: Info: 0
+// PARTRELRO-NEXT: AddressAlignment: 8
+// PARTRELRO-NEXT: EntrySize: 0
+// PARTRELRO-NEXT: SectionData (
+// PARTRELRO-NEXT: 0000:
+// PARTRELRO-NEXT: )
+// PARTRELRO-NEXT: }
+// PARTRELRO-NEXT: Section {
+// PARTRELRO-NEXT: Index: 10
+// PARTRELRO-NEXT: Name: .data
+// PARTRELRO-NEXT: Type: SHT_PROGBITS
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: SHF_ALLOC
+// PARTRELRO-NEXT: SHF_WRITE
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Address: 0x13000
+// PARTRELRO-NEXT: Offset: 0x3000
+// PARTRELRO-NEXT: Size: 12
+// PARTRELRO-NEXT: Link: 0
+// PARTRELRO-NEXT: Info: 0
+// PARTRELRO-NEXT: AddressAlignment: 1
+// PARTRELRO-NEXT: EntrySize: 0
+// PARTRELRO-NEXT: SectionData (
+// PARTRELRO-NEXT: 0000:
+// PARTRELRO-NEXT: )
+// PARTRELRO-NEXT: }
+// PARTRELRO-NEXT: Section {
+// PARTRELRO-NEXT: Index: 11
+// PARTRELRO-NEXT: Name: .foo
+// PARTRELRO-NEXT: Type: SHT_PROGBITS
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: SHF_ALLOC
+// PARTRELRO-NEXT: SHF_WRITE
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Address: 0x1300C
+// PARTRELRO-NEXT: Offset: 0x300C
+// PARTRELRO-NEXT: Size: 0
+// PARTRELRO-NEXT: Link: 0
+// PARTRELRO-NEXT: Info: 0
+// PARTRELRO-NEXT: AddressAlignment: 1
+// PARTRELRO-NEXT: EntrySize: 0
+// PARTRELRO-NEXT: SectionData (
+// PARTRELRO-NEXT: )
+// PARTRELRO-NEXT: }
+// PARTRELRO-NEXT: Section {
+// PARTRELRO-NEXT: Index: 12
+// PARTRELRO-NEXT: Name: .got.plt
+// PARTRELRO-NEXT: Type: SHT_PROGBITS
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: SHF_ALLOC
+// PARTRELRO-NEXT: SHF_WRITE
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Address: 0x13010
+// PARTRELRO-NEXT: Offset: 0x3010
+// PARTRELRO-NEXT: Size: 32
+// PARTRELRO-NEXT: Link: 0
+// PARTRELRO-NEXT: Info: 0
+// PARTRELRO-NEXT: AddressAlignment: 8
+// PARTRELRO-NEXT: EntrySize: 0
+// PARTRELRO-NEXT: SectionData (
+// PARTRELRO-NEXT: 0000:
+// PARTRELRO-NEXT: 0010:
+// PARTRELRO-NEXT: )
+// PARTRELRO-NEXT: }
+// PARTRELRO-NEXT: Section {
+// PARTRELRO-NEXT: Index: 13
+// PARTRELRO-NEXT: Name: .bss
+// PARTRELRO-NEXT: Type: SHT_NOBITS
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: SHF_ALLOC
+// PARTRELRO-NEXT: SHF_WRITE
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Address: 0x13030
+// PARTRELRO-NEXT: Offset: 0x3030
+// PARTRELRO-NEXT: Size: 0
+// PARTRELRO-NEXT: Link: 0
+// PARTRELRO-NEXT: Info: 0
+// PARTRELRO-NEXT: AddressAlignment: 1
+// PARTRELRO-NEXT: EntrySize: 0
+// PARTRELRO-NEXT: }
+// PARTRELRO: ProgramHeader {
+// PARTRELRO: Type: PT_LOAD
+// PARTRELRO: Offset: 0x2000
+// PARTRELRO-NEXT: VirtualAddress: [[RWADDR:.*]]
+// PARTRELRO-NEXT: PhysicalAddress:
+// PARTRELRO-NEXT: FileSize: 4144
+// PARTRELRO-NEXT: MemSize: 4144
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: PF_R (0x4)
+// PARTRELRO-NEXT: PF_W (0x2)
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Alignment: 4096
+// PARTRELRO: Type: PT_GNU_RELRO
+// PARTRELRO-NEXT: Offset: 0x2000
+// PARTRELRO-NEXT: VirtualAddress: [[RWADDR]]
+// PARTRELRO-NEXT: PhysicalAddress:
+// PARTRELRO-NEXT: FileSize: 232
+// PARTRELRO-NEXT: MemSize: 232
+// PARTRELRO-NEXT: Flags [
+// PARTRELRO-NEXT: PF_R
+// PARTRELRO-NEXT: ]
+// PARTRELRO-NEXT: Alignment: 1
+
+// NORELRO: ProgramHeaders [
+// NORELRO-NOT: PT_GNU_RELRO
+
+.global _start
+_start:
+ .long bar
+ jmp *bar@GOTPCREL(%rip)
+
+.section .data,"aw"
+.quad 0
+
+.zero 4
+.section .foo,"aw"
+.section .bss,"",@nobits
diff --git a/test/ELF/resolution.s b/test/ELF/resolution.s
new file mode 100644
index 000000000000..ce275c2934a4
--- /dev/null
+++ b/test/ELF/resolution.s
@@ -0,0 +1,430 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/resolution.s -o %t2
+// RUN: ld.lld -discard-all %t %t2 -o %t3
+// RUN: llvm-readobj -t %t3 | FileCheck %s
+// REQUIRES: x86
+
+// This is an exhaustive test for checking which symbol is kept when two
+// have the same name. Each symbol has a different size which is used
+// to see which one was chosen.
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local (0x0)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined (0x0)
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 63
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 30
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_RegularStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 55
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 22
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_UndefStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 27
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonStrong_with_UndefWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 26
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 61
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 28
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_RegularStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 53
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 20
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_UndefStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 25
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: CommonWeak_with_UndefWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 24
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularStrong_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 10
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularStrong_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 9
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularStrong_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 2
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularStrong_with_UndefStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 6
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularStrong_with_UndefWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 5
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 40
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 7
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_RegularStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 33
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_UndefStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: RegularWeak_with_UndefWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 3
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefStrong_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 51
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefStrong_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 50
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefStrong_with_RegularStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 46
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefStrong_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 45
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefWeak_with_CommonStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 49
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefWeak_with_CommonWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 48
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section:
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefWeak_with_RegularStrong
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 44
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefWeak_with_RegularWeak
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 43
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: UndefWeak_with_UndefWeak
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 15
+// CHECK-NEXT: Binding: Weak
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+.globl _start
+_start:
+ nop
+
+local:
+
+.weak RegularWeak_with_RegularWeak
+.size RegularWeak_with_RegularWeak, 0
+RegularWeak_with_RegularWeak:
+
+.weak RegularWeak_with_RegularStrong
+.size RegularWeak_with_RegularStrong, 1
+RegularWeak_with_RegularStrong:
+
+.global RegularStrong_with_RegularWeak
+.size RegularStrong_with_RegularWeak, 2
+RegularStrong_with_RegularWeak:
+
+.weak RegularWeak_with_UndefWeak
+.size RegularWeak_with_UndefWeak, 3
+RegularWeak_with_UndefWeak:
+
+.weak RegularWeak_with_UndefStrong
+.size RegularWeak_with_UndefStrong, 4
+RegularWeak_with_UndefStrong:
+
+.global RegularStrong_with_UndefWeak
+.size RegularStrong_with_UndefWeak, 5
+RegularStrong_with_UndefWeak:
+
+.global RegularStrong_with_UndefStrong
+.size RegularStrong_with_UndefStrong, 6
+RegularStrong_with_UndefStrong:
+
+.weak RegularWeak_with_CommonWeak
+.size RegularWeak_with_CommonWeak, 7
+RegularWeak_with_CommonWeak:
+
+.weak RegularWeak_with_CommonStrong
+.size RegularWeak_with_CommonStrong, 8
+RegularWeak_with_CommonStrong:
+
+.global RegularStrong_with_CommonWeak
+.size RegularStrong_with_CommonWeak, 9
+RegularStrong_with_CommonWeak:
+
+.global RegularStrong_with_CommonStrong
+.size RegularStrong_with_CommonStrong, 10
+RegularStrong_with_CommonStrong:
+
+.weak UndefWeak_with_RegularWeak
+.size UndefWeak_with_RegularWeak, 11
+.quad UndefWeak_with_RegularWeak
+
+.weak UndefWeak_with_RegularStrong
+.size UndefWeak_with_RegularStrong, 12
+.quad UndefWeak_with_RegularStrong
+
+.size UndefStrong_with_RegularWeak, 13
+.quad UndefStrong_with_RegularWeak
+
+.size UndefStrong_with_RegularStrong, 14
+.quad UndefStrong_with_RegularStrong
+
+.weak UndefWeak_with_UndefWeak
+.size UndefWeak_with_UndefWeak, 15
+.quad UndefWeak_with_UndefWeak
+
+.weak UndefWeak_with_CommonWeak
+.size UndefWeak_with_CommonWeak, 16
+.quad UndefWeak_with_CommonWeak
+
+.weak UndefWeak_with_CommonStrong
+.size UndefWeak_with_CommonStrong, 17
+.quad UndefWeak_with_CommonStrong
+
+.size UndefStrong_with_CommonWeak, 18
+.quad UndefStrong_with_CommonWeak
+
+.size UndefStrong_with_CommonStrong, 19
+.quad UndefStrong_with_CommonStrong
+
+.weak CommonWeak_with_RegularWeak
+.comm CommonWeak_with_RegularWeak,20,4
+
+.weak CommonWeak_with_RegularStrong
+.comm CommonWeak_with_RegularStrong,21,4
+
+.comm CommonStrong_with_RegularWeak,22,4
+
+.comm CommonStrong_with_RegularStrong,23,4
+
+.weak CommonWeak_with_UndefWeak
+.comm CommonWeak_with_UndefWeak,24,4
+
+.weak CommonWeak_with_UndefStrong
+.comm CommonWeak_with_UndefStrong,25,4
+
+.comm CommonStrong_with_UndefWeak,26,4
+
+.comm CommonStrong_with_UndefStrong,27,4
+
+.weak CommonWeak_with_CommonWeak
+.comm CommonWeak_with_CommonWeak,28,4
+
+.weak CommonWeak_with_CommonStrong
+.comm CommonWeak_with_CommonStrong,29,4
+
+.comm CommonStrong_with_CommonWeak,30,4
+
+.comm CommonStrong_with_CommonStrong,31,4
diff --git a/test/ELF/section-align-0.test b/test/ELF/section-align-0.test
new file mode 100644
index 000000000000..fc27ee95fd4b
--- /dev/null
+++ b/test/ELF/section-align-0.test
@@ -0,0 +1,19 @@
+# RUN: yaml2obj -format elf %s -o %t
+# RUN: ld.lld %t -o %tout
+
+# Verify that lld can handle sections with an alignment of zero.
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ AddressAlign: 0
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
diff --git a/test/ELF/section-layout.s b/test/ELF/section-layout.s
new file mode 100644
index 000000000000..20480919956c
--- /dev/null
+++ b/test/ELF/section-layout.s
@@ -0,0 +1,54 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %tout
+# RUN: llvm-readobj -sections %tout | FileCheck %s
+# REQUIRES: x86
+
+# Check that sections are laid out in the correct order.
+
+.global _start
+.text
+_start:
+
+.section t,"x",@nobits
+.section s,"x"
+.section r,"w",@nobits
+.section q,"w"
+.section p,"wx",@nobits
+.section o,"wx"
+.section n,"",@nobits
+.section m,""
+
+.section l,"awx",@nobits
+.section k,"awx"
+.section j,"aw",@nobits
+.section i,"aw"
+.section g,"awT",@nobits
+.section e,"awT"
+.section d,"ax",@nobits
+.section c,"ax"
+.section b,"a",@nobits
+.section a,"a"
+
+// CHECK: Name: a
+// CHECK: Name: b
+// CHECK: Name: c
+// CHECK: Name: d
+
+// TLS sections are only sorted on NOBITS.
+// CHECK: Name: e
+// CHECK: Name: g
+
+// CHECK: Name: i
+// CHECK: Name: j
+// CHECK: Name: k
+// CHECK: Name: l
+
+// Non allocated sections are in input order.
+// CHECK: Name: t
+// CHECK: Name: s
+// CHECK: Name: r
+// CHECK: Name: q
+// CHECK: Name: p
+// CHECK: Name: o
+// CHECK: Name: n
+// CHECK: Name: m
diff --git a/test/ELF/section-name.s b/test/ELF/section-name.s
new file mode 100644
index 000000000000..2d7ed4e63717
--- /dev/null
+++ b/test/ELF/section-name.s
@@ -0,0 +1,37 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: ld.lld %t -o %tout
+# RUN: llvm-readobj -sections %tout | FileCheck %s
+# REQUIRES: x86
+
+.global _start
+.text
+_start:
+
+.section .text.a,"ax"
+.section .text.,"ax"
+.section .rodata.a,"a"
+.section .rodata,"a"
+.section .data.a,"aw"
+.section .data,"aw"
+.section .bss.a,"",@nobits
+.section .bss,"",@nobits
+.section .foo.a,"aw"
+.section .foo,"aw"
+.section .data.rel.ro,"aw",%progbits
+.section .data.rel.ro.a,"aw",%progbits
+.section .data.rel.ro.local,"aw",%progbits
+.section .data.rel.ro.local.a,"aw",%progbits
+
+// CHECK-NOT: Name: .rodata.a
+// CHECK: Name: .rodata
+// CHECK-NOT: Name: .text.a
+// CHECK: Name: .text
+// CHECK-NOT: Name: .data.rel.ro.a
+// CHECK-NOT: Name: .data.rel.ro.local.a
+// CHECK: Name: .data.rel.ro
+// CHECK-NOT: Name: .data.a
+// CHECK: Name: .data
+// CHECK: Name: .foo.a
+// CHECK: Name: .foo
+// CHECK-NOT: Name: .bss.a
+// CHECK: Name: .bss
diff --git a/test/ELF/section-symbol.s b/test/ELF/section-symbol.s
new file mode 100644
index 000000000000..5f04606914fb
--- /dev/null
+++ b/test/ELF/section-symbol.s
@@ -0,0 +1,29 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: ld.lld %t -o %t.so -shared -discard-none
+// RUN: llvm-readobj -t %t.so | FileCheck %s
+
+// Test that we don't include the section symbols from the .o in the .so
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+foo:
+ .quad foo
diff --git a/test/ELF/shared-be.s b/test/ELF/shared-be.s
new file mode 100644
index 000000000000..1524d48b2ed6
--- /dev/null
+++ b/test/ELF/shared-be.s
@@ -0,0 +1,35 @@
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld -dynamic-linker /lib64/ld64.so.1 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t
+// RUN: llvm-readobj --dynamic-table -s %t | FileCheck %s
+// REQUIRES: ppc
+
+// CHECK: Name: .rela.dyn
+// CHECK-NEXT: Type: SHT_REL
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[RELADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[RELSIZE:.*]]
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize: [[RELENT:.*]]
+
+// CHECK: DynamicSection [
+// CHECK-NEXT: Tag Type Name/Value
+// CHECK-NEXT: 0x0000000000000007 RELA [[RELADDR]]
+// CHECK-NEXT: 0x0000000000000008 RELASZ [[RELSIZE]] (bytes)
+// CHECK-NEXT: 0x0000000000000009 RELAENT [[RELENT]] (bytes)
+// CHECK: 0x000000000000001D RUNPATH foo:bar
+// CHECK-NEXT: 0x0000000000000001 NEEDED SharedLibrary ({{.*}}2.so)
+// CHECK-NEXT: 0x0000000000000000 NULL 0x0
+// CHECK-NEXT: ]
+
+.global _start
+_start:
+.long bar
+.long zed
+
diff --git a/test/ELF/shared.s b/test/ELF/shared.s
new file mode 100644
index 000000000000..f76495d960af
--- /dev/null
+++ b/test/ELF/shared.s
@@ -0,0 +1,294 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: llvm-readobj -s %t2.so | FileCheck --check-prefix=SO %s
+// RUN: ld.lld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t
+// RUN: llvm-readobj --program-headers --dynamic-table -t -s -dyn-symbols -section-data -hash-table %t | FileCheck %s
+// RUN: ld.lld %t.o %t2.so %t2.so -o %t2
+// RUN: llvm-readobj -dyn-symbols %t2 | FileCheck --check-prefix=DONT_EXPORT %s
+// REQUIRES: x86
+
+// Make sure .symtab is properly aligned.
+// SO: Name: .symtab
+// SO-NEXT: Type: SHT_SYMTAB
+// SO-NEXT: Flags [
+// SO-NEXT: ]
+// SO-NEXT: Address:
+// SO-NEXT: Offset: 0x1030
+// SO-NEXT: Size:
+// SO-NEXT: Link:
+// SO-NEXT: Info:
+// SO-NEXT: AddressAlignment: 4
+
+// CHECK: Name: .interp
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[INTERPADDR:.*]]
+// CHECK-NEXT: Offset: [[INTERPOFFSET:.*]]
+// CHECK-NEXT: Size: [[INTERPSIZE:.*]]
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 2F6C6962 36342F6C 642D6C69 6E75782D |/lib64/ld-linux-|
+// CHECK-NEXT: 0010: 7838362D 36342E73 6F2E3200 |x86-64.so.2.|
+// CHECK-NEXT: )
+// CHECK-NEXT: }
+
+// test that .hash is linked to .dynsym
+// CHECK: Index: 2
+// CHECK-NEXT: Name: .dynsym
+// CHECK-NEXT: Type: SHT_DYNSYM
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[DYNSYMADDR:.*]]
+// CHECK-NEXT: Offset: 0x150
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link: [[DYNSTR:.*]]
+// CHECK-NEXT: Info: 1
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 16
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000:
+// CHECK-NEXT: 0010:
+// CHECK-NEXT: 0020:
+// CHECK-NEXT: 0030:
+// CHECK-NEXT: )
+// CHECK-NEXT: }
+// CHECK-NEXT: Section {
+// CHECK-NEXT: Index: 3
+// CHECK-NEXT: Name: .hash
+// CHECK-NEXT: Type: SHT_HASH
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[HASHADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link: 2
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 4
+
+// CHECK: Index: [[DYNSTR]]
+// CHECK-NEXT: Name: .dynstr
+// CHECK-NEXT: Type: SHT_STRTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[DYNSTRADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK: )
+// CHECK-NEXT: }
+
+// CHECK: Name: .rel.dyn
+// CHECK-NEXT: Type: SHT_REL
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[RELADDR:.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: [[RELSIZE:.*]]
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize: [[RELENT:.*]]
+
+// CHECK: Name: .dynamic
+// CHECK-NEXT: Type: SHT_DYNAMIC
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[ADDR:.*]]
+// CHECK-NEXT: Offset: [[OFFSET:.*]]
+// CHECK-NEXT: Size: [[SIZE:.*]]
+// CHECK-NEXT: Link: [[DYNSTR]]
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: [[ALIGN:.*]]
+// CHECK-NEXT: EntrySize: 8
+// CHECK-NEXT: SectionData (
+// CHECK: )
+// CHECK-NEXT: }
+
+// CHECK: Name: .symtab
+// CHECK-NEXT: Type: SHT_SYMTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize: [[SYMENT:.*]]
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Function
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: zed
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined (0x0)
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @ (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start@
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Non
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar@
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Function
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: zed@
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// DONT_EXPORT: DynamicSymbols [
+// DONT_EXPORT-NEXT: Symbol {
+// DONT_EXPORT-NEXT: Name: @ (0)
+// DONT_EXPORT-NEXT: Value: 0x0
+// DONT_EXPORT-NEXT: Size: 0
+// DONT_EXPORT-NEXT: Binding: Local (0x0)
+// DONT_EXPORT-NEXT: Type: None (0x0)
+// DONT_EXPORT-NEXT: Other: 0
+// DONT_EXPORT-NEXT: Section: Undefined (0x0)
+// DONT_EXPORT-NEXT: }
+// DONT_EXPORT-NEXT: Symbol {
+// DONT_EXPORT-NEXT: Name: bar@
+// DONT_EXPORT-NEXT: Value: 0x0
+// DONT_EXPORT-NEXT: Size: 0
+// DONT_EXPORT-NEXT: Binding: Global
+// DONT_EXPORT-NEXT: Type: Function
+// DONT_EXPORT-NEXT: Other: 0
+// DONT_EXPORT-NEXT: Section: Undefined
+// DONT_EXPORT-NEXT: }
+// DONT_EXPORT-NEXT: Symbol {
+// DONT_EXPORT-NEXT: Name: zed@
+// DONT_EXPORT-NEXT: Value: 0x0
+// DONT_EXPORT-NEXT: Size: 0
+// DONT_EXPORT-NEXT: Binding: Global
+// DONT_EXPORT-NEXT: Type: None
+// DONT_EXPORT-NEXT: Other: 0
+// DONT_EXPORT-NEXT: Section: Undefined
+// DONT_EXPORT-NEXT: }
+// DONT_EXPORT-NEXT: ]
+
+// CHECK: DynamicSection [
+// CHECK-NEXT: Tag Type Name/Value
+// CHECK-NEXT: 0x00000011 REL [[RELADDR]]
+// CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)
+// CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)
+// CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
+// CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)
+// CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
+// CHECK-NEXT: 0x0000000A STRSZ
+// CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]
+// CHECK-NEXT: 0x0000001D RUNPATH foo:bar
+// CHECK-NEXT: 0x00000001 NEEDED SharedLibrary ({{.*}}2.so)
+// CHECK-NEXT: 0x00000000 NULL 0x0
+// CHECK-NEXT: ]
+
+// CHECK: ProgramHeaders [
+// CHECK: Type: PT_INTERP
+// CHECK-NEXT: Offset: [[INTERPOFFSET]]
+// CHECK-NEXT: VirtualAddress: [[INTERPADDR]]
+// CHECK-NEXT: PhysicalAddress: [[INTERPADDR]]
+// CHECK-NEXT: FileSize: [[INTERPSIZE]]
+// CHECK-NEXT: MemSize: [[INTERPSIZE]]
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment: 1
+// CHECK-NEXT: }
+// CHECK: Type: PT_DYNAMIC
+// CHECK-NEXT: Offset: [[OFFSET]]
+// CHECK-NEXT: VirtualAddress: [[ADDR]]
+// CHECK-NEXT: PhysicalAddress: [[ADDR]]
+// CHECK-NEXT: FileSize: [[SIZE]]
+// CHECK-NEXT: MemSize: [[SIZE]]
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: PF_W
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment: [[ALIGN]]
+// CHECK-NEXT: }
+
+// CHECK: HashTable {
+// CHECK-NEXT: Num Buckets: 4
+// CHECK-NEXT: Num Chains: 4
+// CHECK-NEXT: Buckets: [3, 0, 2, 0]
+// CHECK-NEXT: Chains: [0, 0, 0, 1]
+// CHECK-NEXT: }
+
+.global _start
+_start:
+.long bar
+.long zed
diff --git a/test/ELF/soname.s b/test/ELF/soname.s
new file mode 100644
index 000000000000..9d6fe7681dac
--- /dev/null
+++ b/test/ELF/soname.s
@@ -0,0 +1,11 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -shared -soname=bar -o %t.so
+// RUN: ld.lld %t.o -shared -soname=bar -o %t2.so
+// RUN: ld.lld %t.o %t.so %t2.so -o %t
+// RUN: llvm-readobj --dynamic-table %t | FileCheck %s
+
+// CHECK: 0x0000000000000001 NEEDED SharedLibrary (bar)
+// CHECK-NOT: NEEDED
+
+.global _start
+_start:
diff --git a/test/ELF/soname2.s b/test/ELF/soname2.s
new file mode 100644
index 000000000000..d446766a799d
--- /dev/null
+++ b/test/ELF/soname2.s
@@ -0,0 +1,8 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -shared -soname=foo.so -o %t
+// RUN: llvm-readobj --dynamic-table %t | FileCheck %s
+
+// CHECK: 0x000000000000000E SONAME LibrarySoname (foo.so)
+
+.global _start
+_start:
diff --git a/test/ELF/startstop-shared.s b/test/ELF/startstop-shared.s
new file mode 100644
index 000000000000..108184648f97
--- /dev/null
+++ b/test/ELF/startstop-shared.s
@@ -0,0 +1,18 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-readobj -r -t %t.so | FileCheck %s
+
+ .quad __start_foo
+ .section foo,"a"
+// By default the symbol is visible and we need a dynamic reloc.
+// CHECK: R_X86_64_64 __start_foo 0x0
+
+ .hidden __start_bar
+ .quad __start_bar
+ .section bar,"a"
+// Test that we are able to hide the symbol.
+// CHECK: R_X86_64_RELATIVE - 0x[[ADDR:.*]]
+
+// CHECK: Name: __start_bar
+// CHECK-NEXT: Value: 0x[[ADDR]]
diff --git a/test/ELF/startstop.s b/test/ELF/startstop.s
new file mode 100644
index 000000000000..d0e88df4e7eb
--- /dev/null
+++ b/test/ELF/startstop.s
@@ -0,0 +1,61 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %tout -shared
+// RUN: llvm-objdump -d %tout | FileCheck -check-prefix=DISASM %s
+// RUN: llvm-readobj -symbols -r %tout | FileCheck -check-prefix=SYMBOL %s
+
+// DISASM: _start:
+// DISASM: 1000: {{.*}} callq 10
+// DISASM: 1005: {{.*}} callq 8
+// DISASM: 100a: {{.*}} callq 3
+// DISASM: Disassembly of section foo:
+// DISASM: __start_foo:
+// DISASM: 100f: 90 nop
+// DISASM: 1010: 90 nop
+// DISASM: 1011: 90 nop
+// DISASM: Disassembly of section bar:
+// DISASM: __start_bar:
+// DISASM: 1012: 90 nop
+// DISASM: 1013: 90 nop
+// DISASM: 1014: 90 nop
+
+
+// SYMBOL: Relocations [
+// SYMBOL-NEXT: ]
+
+// SYMBOL: Symbol {
+// SYMBOL: Name: __start_bar
+// SYMBOL: Value: 0x1012
+// SYMBOL: Section: bar
+// SYMBOL: }
+// SYMBOL-NOT: Section: __stop_bar
+// SYMBOL: Symbol {
+// SYMBOL: Name: __start_foo
+// SYMBOL: Value: 0x100F
+// SYMBOL: Section: foo
+// SYMBOL: }
+// SYMBOL: Symbol {
+// SYMBOL: Name: __stop_foo
+// SYMBOL: Value: 0x1012
+// SYMBOL: Section: foo
+// SYMBOL: }
+
+.hidden __start_foo
+.hidden __stop_foo
+.hidden __start_bar
+.global _start
+.text
+_start:
+ call __start_foo
+ call __stop_foo
+ call __start_bar
+
+.section foo,"ax"
+ nop
+ nop
+ nop
+
+.section bar,"ax"
+ nop
+ nop
+ nop
diff --git a/test/ELF/string-table.s b/test/ELF/string-table.s
new file mode 100644
index 000000000000..52a40d790d8f
--- /dev/null
+++ b/test/ELF/string-table.s
@@ -0,0 +1,80 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-readobj -sections -section-data %t2 | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+
+.section foobar,"",@progbits,unique,1
+.section foobar,"T",@progbits,unique,2
+.section foobar,"",@nobits,unique,3
+.section foobar,"",@nobits,unique,4
+
+.section bar, "a"
+
+// Both sections are in the output and that the alloc section is first:
+// CHECK: Name: bar
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x10120
+
+// CHECK: Name: foobar
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+
+// CHECK: Name: foobar
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_TLS
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+
+// CHECK: Name: foobar
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+
+// CHECK-NOT: Name: foobar
+
+// Test that the string "bar" is merged into "foobar".
+
+// CHECK: Section {
+// CHECK: Index:
+// CHECK: Name: .shstrtab
+// CHECK-NEXT: Type: SHT_STRTAB
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 002E7465 78740066 6F6F6261 72002E73 |..text.foobar..s|
+// CHECK-NEXT: 0010: 68737472 74616200 2E737472 74616200 |hstrtab..strtab.|
+// CHECK-NEXT: 0020: 2E73796D 74616200 |.symtab.|
+// CHECK-NEXT: )
+// CHECK-NEXT:}
+// CHECK: Name: .strtab
+// CHECK-NEXT: Type: SHT_STRTAB (0x3)
+// CHECK-NEXT: Flags [ (0x0)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 15
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 1
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
+// CHECK-NEXT: 0000: 005F7374 61727400 666F6F62 617200 |._start.foobar.|
+// CHECK-NEXT: )
+// CHECK-NEXT: }
diff --git a/test/ELF/strip-all.s b/test/ELF/strip-all.s
new file mode 100644
index 000000000000..6d18431668ae
--- /dev/null
+++ b/test/ELF/strip-all.s
@@ -0,0 +1,25 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o -o %t1
+#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix BEFORE
+#BEFORE: .symtab
+#BEFORE-NEXT: .shstrtab
+#BEFORE-NEXT: .strtab
+
+#RUN: ld.lld %t.o --strip-all -o %t1
+#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix AFTER
+#AFTER-NOT: .symtab
+#AFTER: .shstrtab
+#AFTER-NOT: .strtab
+
+# Test alias -s
+#RUN: ld.lld %t.o -s -o %t1
+#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix AFTER
+
+# exits with return code 42 on linux
+.globl _start;
+_start:
+ mov $60, %rax
+ mov $42, %rdi
+ syscall
diff --git a/test/ELF/symbols.s b/test/ELF/symbols.s
new file mode 100644
index 000000000000..ccf83afdf567
--- /dev/null
+++ b/test/ELF/symbols.s
@@ -0,0 +1,182 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %t2
+// RUN: llvm-readobj -symbols -sections %t2 | FileCheck %s
+// REQUIRES: x86
+
+.type _start, @function
+.globl _start
+_start:
+
+.type foo, @object
+.weak foo
+foo:
+
+.type bar, @object
+.weak bar
+.long bar
+
+.section foobar,"a",@nobits,unique,1
+.globl zed
+zed:
+ .long 0
+.globl zed2
+zed2:
+.long 0
+
+.section foobar,"a",@nobits,unique,2
+.globl zed3
+.size zed3, 4
+zed3:
+
+.globl abs
+abs = 0x123
+
+.comm common,4,4
+
+.global protected
+.protected protected
+protected:
+
+.global hidden
+.hidden hidden
+hidden:
+
+.global internal
+.internal internal
+internal:
+
+// CHECK: Name: foobar
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x10158
+
+// CHECK: Name: .text
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_EXECINSTR
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1100
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x12000
+// CHECK-NEXT: Offset: 0x2000
+// CHECK-NEXT: Size: 4
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local (0x0)
+// CHECK-NEXT: Type: None (0x0)
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined (0x0)
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: hidden
+// CHECK-NEXT: Value: 0x10160
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 2
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: internal
+// CHECK-NEXT: Value: 0x10160
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 1
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: _start
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Type: Function
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: abs
+// CHECK-NEXT: Value: 0x123
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Absolute
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: bar
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Weak (0x2)
+// CHECK-NEXT: Type: Object (0x1)
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined (0x0)
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: common
+// CHECK-NEXT: Value: 0x12000
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .bss
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: foo
+// CHECK-NEXT: Value: 0x11000
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Weak (0x2)
+// CHECK-NEXT: Type: Object
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: protected
+// CHECK-NEXT: Value: 0x10160
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 3
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: zed
+// CHECK-NEXT: Value: 0x10158
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global (0x1)
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: zed2
+// CHECK-NEXT: Value: 0x1015C
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: zed3
+// CHECK-NEXT: Value: 0x10160
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: foobar
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/test/ELF/sysroot.s b/test/ELF/sysroot.s
new file mode 100644
index 000000000000..35154be125a3
--- /dev/null
+++ b/test/ELF/sysroot.s
@@ -0,0 +1,36 @@
+// RUN: mkdir -p %t/lib
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t/m.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+// RUN: %p/Inputs/libsearch-st.s -o %t/st.o
+// RUN: rm -f %t/lib/libls.a
+// RUN: llvm-ar rcs %t/lib/libls.a %t/st.o
+// REQUIRES: x86
+
+// Should not link because of undefined symbol _bar
+// RUN: not ld.lld -o %t/r %t/m.o 2>&1 \
+// RUN: | FileCheck --check-prefix=UNDEFINED %s
+// UNDEFINED: undefined symbol: _bar
+
+// We need to be sure that there is no suitable library in the /lib directory
+// RUN: not ld.lld -o %t/r %t/m.o -L/lib -l:libls.a 2>&1 \
+// RUN: | FileCheck --check-prefix=NOLIB %s
+// NOLIB: Unable to find library -l:libls.a
+
+// Should just remove the '=' symbol if --sysroot is not specified.
+// Case 1: relative path
+// RUN: cd %t && ld.lld -o %t/r %t/m.o -L=lib -l:libls.a
+// Case 2: absolute path
+// RUN: cd %p && ld.lld -o %t/r %t/m.o -L=%t/lib -l:libls.a
+
+// RUN: cd %p
+
+// Should substitute SysRoot if specified
+// RUN: ld.lld -o %t/r %t/m.o --sysroot=%t -L=lib -l:libls.a
+// RUN: ld.lld -o %t/r %t/m.o --sysroot=%t -L=/lib -l:libls.a
+
+// Should not substitute SysRoot if the directory name does not start with '='
+// RUN: not ld.lld -o %t/r %r/m.o --sysroot=%t -Llib -l:libls.a
+// RUN: not ld.lld -o %t/r %r/m.o --sysroot=%t -L/lib -l:libls.a
+
+.globl _start,_bar;
+_start:
diff --git a/test/ELF/tls-align.s b/test/ELF/tls-align.s
new file mode 100644
index 000000000000..56b404e0851c
--- /dev/null
+++ b/test/ELF/tls-align.s
@@ -0,0 +1,21 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %tout -shared
+// RUN: llvm-readobj -program-headers %tout | FileCheck %s
+
+ .section .tbss,"awT",@nobits
+ .align 8
+ .long 0
+
+// CHECK: ProgramHeader {
+// CHECK: Type: PT_TLS
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: VirtualAddress:
+// CHECK-NEXT: PhysicalAddress:
+// CHECK-NEXT: FileSize: 0
+// CHECK-NEXT: MemSize: 8
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R (0x4)
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment: 8
+// CHECK-NEXT: }
diff --git a/test/ELF/tls-dynamic-i686.s b/test/ELF/tls-dynamic-i686.s
new file mode 100644
index 000000000000..b2620d048864
--- /dev/null
+++ b/test/ELF/tls-dynamic-i686.s
@@ -0,0 +1,92 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t
+// RUN: ld.lld -shared %t -o %tout
+// RUN: llvm-readobj -sections -relocations %tout | FileCheck %s
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
+
+.type tls0,@object
+.section .tbss,"awT",@nobits
+.globl tls0
+.align 4
+tls0:
+ .long 0
+ .size tls0, 4
+
+.type tls1,@object
+.globl tls1
+.align 4
+tls1:
+ .long 0
+ .size tls1, 4
+
+.section .text
+.globl _start
+_start:
+leal tls0@tlsgd(,%ebx,1),%eax
+call __tls_get_addr@plt
+
+leal tls1@tlsgd(,%ebx,1),%eax
+call __tls_get_addr@plt
+
+leal tls0@tlsldm(%ebx),%eax
+call __tls_get_addr@plt
+leal tls0@dtpoff(%eax),%edx
+
+leal tls1@tlsldm(%ebx),%eax
+call __tls_get_addr@plt
+leal tls1@dtpoff(%eax),%edx
+
+movl %gs:0,%eax
+addl tls0@gotntpoff(%ebx),%eax
+
+movl %gs:0,%eax
+addl tls1@gotntpoff(%ebx),%eax
+
+// CHECK: Index: 10
+// CHECK-NEXT: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x2068
+// CHECK-NEXT: Offset: 0x2068
+// CHECK-NEXT: Size: 32
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 0
+
+// CHECK: Relocations [
+// CHECK: Section ({{.+}}) .rel.dyn {
+// CHECK-NEXT: 0x2068 R_386_TLS_DTPMOD32 tls0 0x0
+// CHECK-NEXT: 0x206C R_386_TLS_DTPOFF32 tls0 0x0
+// CHECK-NEXT: 0x2070 R_386_TLS_DTPMOD32 tls1 0x0
+// CHECK-NEXT: 0x2074 R_386_TLS_DTPOFF32 tls1 0x0
+// CHECK-NEXT: 0x2078 R_386_TLS_DTPMOD32 - 0x0
+// CHECK-NEXT: 0x2080 R_386_TLS_TPOFF tls0 0x0
+// CHECK-NEXT: 0x2084 R_386_TLS_TPOFF tls1 0x0
+// CHECK-NEXT: }
+
+// DIS: Disassembly of section .text:
+// DIS-NEXT: _start:
+// General dynamic model:
+// -32 and -24 are first and second GOT entries offsets.
+// Each one is a pair of records.
+// DIS-NEXT: 1000: 8d 04 1d e0 ff ff ff leal -32(,%ebx), %eax
+// DIS-NEXT: 1007: e8 64 00 00 00 calll 100
+// DIS-NEXT: 100c: 8d 04 1d e8 ff ff ff leal -24(,%ebx), %eax
+// DIS-NEXT: 1013: e8 58 00 00 00 calll 88
+// Local dynamic model:
+// -16 is a local module tls index offset.
+// DIS-NEXT: 1018: 8d 83 f0 ff ff ff leal -16(%ebx), %eax
+// DIS-NEXT: 101e: e8 4d 00 00 00 calll 77
+// DIS-NEXT: 1023: 8d 90 00 00 00 00 leal (%eax), %edx
+// DIS-NEXT: 1029: 8d 83 f0 ff ff ff leal -16(%ebx), %eax
+// DIS-NEXT: 102f: e8 3c 00 00 00 calll 60
+// DIS-NEXT: 1034: 8d 90 04 00 00 00 leal 4(%eax), %edx
+// Initial exec model:
+// DIS-NEXT: 103a: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DIS-NEXT: 1040: 03 83 f8 ff ff ff addl -8(%ebx), %eax
+// DIS-NEXT: 1046: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DIS-NEXT: 104c: 03 83 fc ff ff ff addl -4(%ebx), %eax
diff --git a/test/ELF/tls-dynamic.s b/test/ELF/tls-dynamic.s
new file mode 100644
index 000000000000..b6ae6da61bb2
--- /dev/null
+++ b/test/ELF/tls-dynamic.s
@@ -0,0 +1,81 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld -shared %t -o %tout
+// RUN: llvm-readobj -sections -relocations %tout | FileCheck %s
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
+
+ leaq a@tlsld(%rip), %rdi
+ callq __tls_get_addr@PLT
+ leaq b@tlsld(%rip), %rdi
+ callq __tls_get_addr@PLT
+ leaq a@dtpoff(%rax), %rcx
+ leaq b@dtpoff(%rax), %rcx
+ .long b@dtpoff, 0
+ leaq c@tlsgd(%rip), %rdi
+ rex64
+ callq __tls_get_addr@PLT
+ leaq c@dtpoff(%rax), %rcx
+ // Initial Exec Model Code Sequence, II
+ movq c@gottpoff(%rip),%rax
+ movq %fs:(%rax),%rax
+
+ .global a
+ .hidden a
+ .section .tbss,"awT",@nobits
+ .align 4
+a:
+ .long 0
+
+ .section .tbss,"awT",@nobits
+ .align 4
+b:
+ .long 0
+ .global c
+ .section .tbss,"awT",@nobits
+ .align 4
+c:
+ .long 0
+
+// Get the address of the got, and check that it has 4 entries.
+
+// CHECK: Sections [
+// CHECK: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x20D0
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 40
+
+// CHECK: Relocations [
+// CHECK: Section ({{.+}}) .rela.dyn {
+// CHECK-NEXT: 0x20D0 R_X86_64_DTPMOD64 - 0x0
+// CHECK-NEXT: 0x20E0 R_X86_64_DTPMOD64 c 0x0
+// CHECK-NEXT: 0x20E8 R_X86_64_DTPOFF64 c 0x0
+// CHECK-NEXT: 0x20F0 R_X86_64_TPOFF64 c 0x0
+// CHECK-NEXT: }
+
+// 4297 = (0x20D0 + -4) - (0x1000 + 3) // PC relative offset to got entry.
+// 4285 = (0x20D0 + -4) - (0x100c + 3) // PC relative offset to got entry.
+// 4267 = (0x20E0 + -4) - (0x102e + 3) // PC relative offset to got entry.
+// 4263 = (0x20F0 + -4) - (0x1042 + 3) // PC relative offset to got entry.
+
+// DIS: Disassembly of section .text:
+// DIS-NEXT: .text:
+// DIS-NEXT: 1000: {{.+}} leaq 4297(%rip), %rdi
+// DIS-NEXT: 1007: {{.+}} callq
+// DIS-NEXT: 100c: {{.+}} leaq 4285(%rip), %rdi
+// DIS-NEXT: 1013: {{.+}} callq
+// DIS-NEXT: 1018: {{.+}} leaq (%rax), %rcx
+// DIS-NEXT: 101f: {{.+}} leaq 4(%rax), %rcx
+// DIS-NEXT: 1026: 04 00
+// DIS-NEXT: 1028: 00 00
+// DIS-NEXT: 102a: 00 00
+// DIS-NEXT: 102c: 00 00
+// DIS-NEXT: 102e: {{.+}} leaq 4267(%rip), %rdi
+// DIS-NEXT: 1035: {{.+}} callq
+// DIS-NEXT: 103b: {{.+}} leaq 8(%rax), %rcx
+// DIS-NEXT: 1042: {{.+}} movq 4263(%rip), %rax
+// DIS-NEXT: 1049: {{.+}} movq %fs:(%rax), %rax
diff --git a/test/ELF/tls-error.s b/test/ELF/tls-error.s
new file mode 100644
index 000000000000..b61789901049
--- /dev/null
+++ b/test/ELF/tls-error.s
@@ -0,0 +1,12 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: not ld.lld %t -o %tout 2>&1 | FileCheck %s
+// CHECK: R_X86_64_TPOFF32 out of range
+
+.global _start
+_start:
+ movl %fs:a@tpoff, %eax
+.global a
+.section .tbss,"awT",@nobits
+a:
+.zero 0x80000001
diff --git a/test/ELF/tls-got.s b/test/ELF/tls-got.s
new file mode 100644
index 000000000000..10b9cf994579
--- /dev/null
+++ b/test/ELF/tls-got.s
@@ -0,0 +1,58 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/tls-got.s -o %t2.o
+// RUN: ld.lld -shared %t2.o -o %t2.so
+// RUN: ld.lld -e main %t1.o %t2.so -o %t3
+// RUN: llvm-readobj -s -r %t3 | FileCheck %s
+// RUN: llvm-objdump -d %t3 | FileCheck --check-prefix=DISASM %s
+
+// CHECK: Section {
+// CHECK: Index: 8
+// CHECK-NEXT: Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[ADDR:.*]]
+// CHECK-NEXT: Offset: 0x20A0
+// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: }
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section (4) .rela.dyn {
+// CHECK-NEXT: [[ADDR]] R_X86_64_TPOFF64 tls1 0x0
+// CHECK-NEXT: 0x120A8 R_X86_64_TPOFF64 tls0 0x0
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+//0x11000 + 4249 + 7 = 0x120A0
+//0x1100A + 4247 + 7 = 0x120A8
+//0x11014 + 4237 + 7 = 0x120A8
+//DISASM: Disassembly of section .text:
+//DISASM-NEXT: main:
+//DISASM-NEXT: 11000: 48 8b 05 99 10 00 00 movq 4249(%rip), %rax
+//DISASM-NEXT: 11007: 64 8b 00 movl %fs:(%rax), %eax
+//DISASM-NEXT: 1100a: 48 8b 05 97 10 00 00 movq 4247(%rip), %rax
+//DISASM-NEXT: 11011: 64 8b 00 movl %fs:(%rax), %eax
+//DISASM-NEXT: 11014: 48 8b 05 8d 10 00 00 movq 4237(%rip), %rax
+//DISASM-NEXT: 1101b: 64 8b 00 movl %fs:(%rax), %eax
+//DISASM-NEXT: 1101e: c3 retq
+
+.section .tdata,"awT",@progbits
+
+.text
+ .globl main
+ .align 16, 0x90
+ .type main,@function
+main:
+ movq tls1@GOTTPOFF(%rip), %rax
+ movl %fs:0(%rax), %eax
+ movq tls0@GOTTPOFF(%rip), %rax
+ movl %fs:0(%rax), %eax
+ movq tls0@GOTTPOFF(%rip), %rax
+ movl %fs:0(%rax), %eax
+ ret
diff --git a/test/ELF/tls-i686.s b/test/ELF/tls-i686.s
new file mode 100644
index 000000000000..62940d6cd164
--- /dev/null
+++ b/test/ELF/tls-i686.s
@@ -0,0 +1,69 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t
+// RUN: ld.lld %t -o %tout
+// RUN: ld.lld %t -shared -o %tsharedout
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
+// RUN: llvm-readobj -r %tout | FileCheck %s --check-prefix=RELOC
+// RUN: llvm-objdump -d %tsharedout | FileCheck %s --check-prefix=DISSHARED
+// RUN: llvm-readobj -r %tsharedout | FileCheck %s --check-prefix=RELOCSHARED
+
+.section ".tdata", "awT", @progbits
+.globl var
+.globl var1
+var:
+.long 0
+var1:
+.long 1
+
+.text
+.global _start
+_start:
+ movl $var@tpoff, %edx
+ movl %gs:0, %ecx
+ subl %edx, %eax
+ movl $var1@tpoff, %edx
+ movl %gs:0, %ecx
+ subl %edx, %eax
+
+ movl %gs:0, %ecx
+ leal var@ntpoff(%ecx), %eax
+ movl %gs:0, %ecx
+ leal var1@ntpoff(%ecx), %eax
+
+// DIS: Disassembly of section .text:
+// DIS-NEXT: _start:
+// DIS-NEXT: 11000: ba 08 00 00 00 movl $8, %edx
+// DIS-NEXT: 11005: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DIS-NEXT: 1100c: 29 d0 subl %edx, %eax
+// DIS-NEXT: 1100e: ba 04 00 00 00 movl $4, %edx
+// DIS-NEXT: 11013: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DIS-NEXT: 1101a: 29 d0 subl %edx, %eax
+// DIS-NEXT: 1101c: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DIS-NEXT: 11023: 8d 81 f8 ff ff ff leal -8(%ecx), %eax
+// DIS-NEXT: 11029: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DIS-NEXT: 11030: 8d 81 fc ff ff ff leal -4(%ecx), %eax
+
+// RELOC: Relocations [
+// RELOC-NEXT: ]
+
+// DISSHARED: Disassembly of section .text:
+// DISSHARED-NEXT: _start:
+// DISSHARED-NEXT: 1000: ba 00 00 00 00 movl $0, %edx
+// DISSHARED-NEXT: 1005: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DISSHARED-NEXT: 100c: 29 d0 subl %edx, %eax
+// DISSHARED-NEXT: 100e: ba 00 00 00 00 movl $0, %edx
+// DISSHARED-NEXT: 1013: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DISSHARED-NEXT: 101a: 29 d0 subl %edx, %eax
+// DISSHARED-NEXT: 101c: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DISSHARED-NEXT: 1023: 8d 81 00 00 00 00 leal (%ecx), %eax
+// DISSHARED-NEXT: 1029: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx
+// DISSHARED-NEXT: 1030: 8d 81 00 00 00 00 leal (%ecx), %eax
+
+// RELOCSHARED: Relocations [
+// RELOCSHARED-NEXT: Section (4) .rel.dyn {
+// RELOCSHARED-NEXT: 0x1001 R_386_TLS_TPOFF32 var 0x0
+// RELOCSHARED-NEXT: 0x100F R_386_TLS_TPOFF32 var1 0x0
+// RELOCSHARED-NEXT: 0x1025 R_386_TLS_TPOFF var 0x0
+// RELOCSHARED-NEXT: 0x1032 R_386_TLS_TPOFF var1 0x0
+// RELOCSHARED-NEXT: }
+// RELOCSHARED-NEXT: ]
diff --git a/test/ELF/tls-mismatch.s b/test/ELF/tls-mismatch.s
new file mode 100644
index 000000000000..fb70229e1a52
--- /dev/null
+++ b/test/ELF/tls-mismatch.s
@@ -0,0 +1,9 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/tls-mismatch.s -o %t2
+// RUN: not ld.lld %t %t2 -o %t3 2>&1 | FileCheck %s
+// CHECK: TLS attribute mismatch for symbol: tlsvar
+
+.globl _start,tlsvar
+_start:
+ movl tlsvar,%edx
diff --git a/test/ELF/tls-opt-gdie.s b/test/ELF/tls-opt-gdie.s
new file mode 100644
index 000000000000..a6c68686c57b
--- /dev/null
+++ b/test/ELF/tls-opt-gdie.s
@@ -0,0 +1,55 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/tls-opt-gdie.s -o %tso.o
+// RUN: ld.lld -shared %tso.o -o %t.so
+// RUN: ld.lld %t.o %t.so -o %t1
+// RUN: llvm-readobj -s -r %t1 | FileCheck --check-prefix=RELOC %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+
+//RELOC: Section {
+//RELOC: Index: 9
+//RELOC-NEXT: Name: .got
+//RELOC-NEXT: Type: SHT_PROGBITS
+//RELOC-NEXT: Flags [
+//RELOC-NEXT: SHF_ALLOC
+//RELOC-NEXT: SHF_WRITE
+//RELOC-NEXT: ]
+//RELOC-NEXT: Address: 0x120E0
+//RELOC-NEXT: Offset: 0x20E0
+//RELOC-NEXT: Size: 16
+//RELOC-NEXT: Link: 0
+//RELOC-NEXT: Info: 0
+//RELOC-NEXT: AddressAlignment: 8
+//RELOC-NEXT: EntrySize: 0
+//RELOC-NEXT: }
+//RELOC: Relocations [
+//RELOC-NEXT: Section (4) .rela.dyn {
+//RELOC-NEXT: 0x120E0 R_X86_64_TPOFF64 tlsshared0 0x0
+//RELOC-NEXT: 0x120E8 R_X86_64_TPOFF64 tlsshared1 0x0
+//RELOC-NEXT: }
+//RELOC-NEXT: Section (5) .rela.plt {
+//RELOC-NEXT: 0x13018 R_X86_64_JUMP_SLOT __tls_get_addr 0x0
+//RELOC-NEXT: }
+//RELOC-NEXT: ]
+
+//0x11009 + (4304 + 7) = 0x120E0
+//0x11019 + (4296 + 7) = 0x120E8
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 11009: 48 03 05 d0 10 00 00 addq 4304(%rip), %rax
+// DISASM-NEXT: 11010: 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 11019: 48 03 05 c8 10 00 00 addq 4296(%rip), %rax
+
+.section .text
+.globl _start
+_start:
+ .byte 0x66
+ leaq tlsshared0@tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ .byte 0x66
+ leaq tlsshared1@tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
diff --git a/test/ELF/tls-opt-gdiele-i686.s b/test/ELF/tls-opt-gdiele-i686.s
new file mode 100644
index 000000000000..94630bbc0df2
--- /dev/null
+++ b/test/ELF/tls-opt-gdiele-i686.s
@@ -0,0 +1,59 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %p/Inputs/tls-opt-gdiele-i686.s -o %tso.o
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld -shared %tso.o -o %tso
+// RUN: ld.lld %t.o %tso -o %tout
+// RUN: llvm-readobj -r %tout | FileCheck --check-prefix=NORELOC %s
+// RUN: llvm-objdump -d %tout | FileCheck --check-prefix=DISASM %s
+
+// NORELOC: Relocations [
+// NORELOC-NEXT: Section ({{.*}}) .rel.dyn {
+// NORELOC-NEXT: 0x12050 R_386_TLS_TPOFF tlsshared0 0x0
+// NORELOC-NEXT: 0x12054 R_386_TLS_TPOFF tlsshared1 0x0
+// NORELOC-NEXT: }
+// NORELOC-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11006: 03 83 f8 ff ff ff addl -8(%ebx), %eax
+// DISASM-NEXT: 1100c: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11012: 03 83 fc ff ff ff addl -4(%ebx), %eax
+// DISASM-NEXT: 11018: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 1101e: 81 e8 08 00 00 00 subl $8, %eax
+// DISASM-NEXT: 11024: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 1102a: 81 e8 04 00 00 00 subl $4, %eax
+
+.type tlsexe1,@object
+.section .tbss,"awT",@nobits
+.globl tlsexe1
+.align 4
+tlsexe1:
+ .long 0
+ .size tlsexe1, 4
+
+.type tlsexe2,@object
+.section .tbss,"awT",@nobits
+.globl tlsexe2
+.align 4
+tlsexe2:
+ .long 0
+ .size tlsexe2, 4
+
+.section .text
+.globl ___tls_get_addr
+.type ___tls_get_addr,@function
+___tls_get_addr:
+
+.section .text
+.globl _start
+_start:
+//GD->IE
+leal tlsshared0@tlsgd(,%ebx,1),%eax
+call ___tls_get_addr@plt
+leal tlsshared1@tlsgd(,%ebx,1),%eax
+call ___tls_get_addr@plt
+//GD->IE
+leal tlsexe1@tlsgd(,%ebx,1),%eax
+call ___tls_get_addr@plt
+leal tlsexe2@tlsgd(,%ebx,1),%eax
+call ___tls_get_addr@plt
diff --git a/test/ELF/tls-opt-i686.s b/test/ELF/tls-opt-i686.s
new file mode 100644
index 000000000000..dec45b4e5c41
--- /dev/null
+++ b/test/ELF/tls-opt-i686.s
@@ -0,0 +1,69 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=NORELOC %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+
+// NORELOC: Relocations [
+// NORELOC-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// LD -> LE:
+// DISASM-NEXT: 11000: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11006: 90 nop
+// DISASM-NEXT: 11007: 8d 74 26 00 leal (%esi), %esi
+// DISASM-NEXT: 1100b: 8d 90 f8 ff ff ff leal -8(%eax), %edx
+// DISASM-NEXT: 11011: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11017: 90 nop
+// DISASM-NEXT: 11018: 8d 74 26 00 leal (%esi), %esi
+// DISASM-NEXT: 1101c: 8d 90 fc ff ff ff leal -4(%eax), %edx
+// IE -> LE:
+// 4294967288 == 0xFFFFFFF8
+// 4294967292 == 0xFFFFFFFC
+// DISASM-NEXT: 11022: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11028: c7 c0 f8 ff ff ff movl $4294967288, %eax
+// DISASM-NEXT: 1102e: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11034: c7 c0 fc ff ff ff movl $4294967292, %eax
+// DISASM-NEXT: 1103a: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 11040: 8d 80 f8 ff ff ff leal -8(%eax), %eax
+// DISASM-NEXT: 11046: 65 a1 00 00 00 00 movl %gs:0, %eax
+// DISASM-NEXT: 1104c: 8d 80 fc ff ff ff leal -4(%eax), %eax
+.type tls0,@object
+.section .tbss,"awT",@nobits
+.globl tls0
+.align 4
+tls0:
+ .long 0
+ .size tls0, 4
+
+.type tls1,@object
+.globl tls1
+.align 4
+tls1:
+ .long 0
+ .size tls1, 4
+
+.section .text
+.globl ___tls_get_addr
+.type ___tls_get_addr,@function
+___tls_get_addr:
+
+.section .text
+.globl _start
+_start:
+//LD -> LE:
+leal tls0@tlsldm(%ebx),%eax
+call ___tls_get_addr@plt
+leal tls0@dtpoff(%eax),%edx
+leal tls1@tlsldm(%ebx),%eax
+call ___tls_get_addr@plt
+leal tls1@dtpoff(%eax),%edx
+//IE -> LE:
+movl %gs:0,%eax
+movl tls0@gotntpoff(%ebx),%eax
+movl %gs:0,%eax
+movl tls1@gotntpoff(%ebx),%eax
+movl %gs:0,%eax
+addl tls0@gotntpoff(%ebx),%eax
+movl %gs:0,%eax
+addl tls1@gotntpoff(%ebx),%eax
diff --git a/test/ELF/tls-opt-iele-i686-nopic.s b/test/ELF/tls-opt-iele-i686-nopic.s
new file mode 100644
index 000000000000..bc6c6bed7b44
--- /dev/null
+++ b/test/ELF/tls-opt-iele-i686-nopic.s
@@ -0,0 +1,159 @@
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %p/Inputs/tls-opt-iele-i686-nopic.s -o %tso.o
+// RUN: ld.lld -shared %tso.o -o %tso
+// RUN: ld.lld %t.o %tso -o %t1
+// RUN: llvm-readobj -s -r %t1 | FileCheck --check-prefix=GOTREL %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+// RUN: ld.lld -shared %t.o %tso -o %t1
+// RUN: llvm-readobj -s -r %t1 | FileCheck --check-prefix=GOTRELSHARED %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASMSHARED %s
+
+// GOTREL: Section {
+// GOTREL: Index:
+// GOTREL: Name: .got
+// GOTREL-NEXT: Type: SHT_PROGBITS
+// GOTREL-NEXT: Flags [
+// GOTREL-NEXT: SHF_ALLOC
+// GOTREL-NEXT: SHF_WRITE
+// GOTREL-NEXT: ]
+// GOTREL-NEXT: Address: 0x12050
+// GOTREL-NEXT: Offset: 0x2050
+// GOTREL-NEXT: Size: 8
+// GOTREL-NEXT: Link: 0
+// GOTREL-NEXT: Info: 0
+// GOTREL-NEXT: AddressAlignment: 4
+// GOTREL-NEXT: EntrySize: 0
+// GOTREL-NEXT: }
+// GOTREL: Relocations [
+// GOTREL-NEXT: Section ({{.*}}) .rel.dyn {
+// GOTREL-NEXT: 0x12050 R_386_TLS_TPOFF tlsshared0 0x0
+// GOTREL-NEXT: 0x12054 R_386_TLS_TPOFF tlsshared1 0x0
+// GOTREL-NEXT: }
+// GOTREL-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// 4294967288 = 0xFFFFFFF8
+// 4294967292 = 0xFFFFFFFC
+// 73808 = (.got)[0] = 0x12050
+// 73812 = (.got)[1] = 0x12054
+// DISASM-NEXT: 11000: c7 c1 f8 ff ff ff movl $4294967288, %ecx
+// DISASM-NEXT: 11006: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASM-NEXT: 11009: b8 f8 ff ff ff movl $4294967288, %eax
+// DISASM-NEXT: 1100e: 65 8b 00 movl %gs:(%eax), %eax
+// DISASM-NEXT: 11011: 81 c1 f8 ff ff ff addl $4294967288, %ecx
+// DISASM-NEXT: 11017: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASM-NEXT: 1101a: c7 c1 fc ff ff ff movl $4294967292, %ecx
+// DISASM-NEXT: 11020: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASM-NEXT: 11023: b8 fc ff ff ff movl $4294967292, %eax
+// DISASM-NEXT: 11028: 65 8b 00 movl %gs:(%eax), %eax
+// DISASM-NEXT: 1102b: 81 c1 fc ff ff ff addl $4294967292, %ecx
+// DISASM-NEXT: 11031: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASM-NEXT: 11034: 8b 0d 50 20 01 00 movl 73808, %ecx
+// DISASM-NEXT: 1103a: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASM-NEXT: 1103d: 03 0d 54 20 01 00 addl 73812, %ecx
+// DISASM-NEXT: 11043: 65 8b 01 movl %gs:(%ecx), %eax
+
+// GOTRELSHARED: Section {
+// GOTRELSHARED: Index: 8
+// GOTRELSHARED: Name: .got
+// GOTRELSHARED-NEXT: Type: SHT_PROGBITS
+// GOTRELSHARED-NEXT: Flags [
+// GOTRELSHARED-NEXT: SHF_ALLOC
+// GOTRELSHARED-NEXT: SHF_WRITE
+// GOTRELSHARED-NEXT: ]
+// GOTRELSHARED-NEXT: Address: 0x2050
+// GOTRELSHARED-NEXT: Offset: 0x2050
+// GOTRELSHARED-NEXT: Size: 16
+// GOTRELSHARED-NEXT: Link: 0
+// GOTRELSHARED-NEXT: Info: 0
+// GOTRELSHARED-NEXT: AddressAlignment: 4
+// GOTRELSHARED-NEXT: EntrySize: 0
+// GOTRELSHARED-NEXT: }
+// GOTRELSHARED: Relocations [
+// GOTRELSHARED-NEXT: Section ({{.*}}) .rel.dyn {
+// GOTRELSHARED-NEXT: 0x1002 R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x2050 R_386_TLS_TPOFF tlslocal0 0x0
+// GOTRELSHARED-NEXT: 0x100A R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x1013 R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x101C R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x2054 R_386_TLS_TPOFF tlslocal1 0x0
+// GOTRELSHARED-NEXT: 0x1024 R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x102D R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x1036 R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x2058 R_386_TLS_TPOFF tlsshared0 0x0
+// GOTRELSHARED-NEXT: 0x103F R_386_RELATIVE - 0x0
+// GOTRELSHARED-NEXT: 0x205C R_386_TLS_TPOFF tlsshared1 0x0
+// GOTRELSHARED-NEXT: }
+// GOTRELSHARED-NEXT: ]
+
+// DISASMSHARED: Disassembly of section .text:
+// DISASMSHARED-NEXT: _start:
+// (.got)[0] = 0x2050 = 8272
+// (.got)[1] = 0x2054 = 8276
+// (.got)[2] = 0x2058 = 8280
+// (.got)[3] = 0x205C = 8284
+// DISASMSHARED-NEXT: 1000: 8b 0d 50 20 00 00 movl 8272, %ecx
+// DISASMSHARED-NEXT: 1006: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASMSHARED-NEXT: 1009: a1 50 20 00 00 movl 8272, %eax
+// DISASMSHARED-NEXT: 100e: 65 8b 00 movl %gs:(%eax), %eax
+// DISASMSHARED-NEXT: 1011: 03 0d 50 20 00 00 addl 8272, %ecx
+// DISASMSHARED-NEXT: 1017: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASMSHARED-NEXT: 101a: 8b 0d 54 20 00 00 movl 8276, %ecx
+// DISASMSHARED-NEXT: 1020: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASMSHARED-NEXT: 1023: a1 54 20 00 00 movl 8276, %eax
+// DISASMSHARED-NEXT: 1028: 65 8b 00 movl %gs:(%eax), %eax
+// DISASMSHARED-NEXT: 102b: 03 0d 54 20 00 00 addl 8276, %ecx
+// DISASMSHARED-NEXT: 1031: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASMSHARED-NEXT: 1034: 8b 0d 58 20 00 00 movl 8280, %ecx
+// DISASMSHARED-NEXT: 103a: 65 8b 01 movl %gs:(%ecx), %eax
+// DISASMSHARED-NEXT: 103d: 03 0d 5c 20 00 00 addl 8284, %ecx
+// DISASMSHARED-NEXT: 1043: 65 8b 01 movl %gs:(%ecx), %eax
+
+.type tlslocal0,@object
+.section .tbss,"awT",@nobits
+.globl tlslocal0
+.align 4
+tlslocal0:
+ .long 0
+ .size tlslocal0, 4
+
+.type tlslocal1,@object
+.section .tbss,"awT",@nobits
+.globl tlslocal1
+.align 4
+tlslocal1:
+ .long 0
+ .size tlslocal1, 4
+
+.section .text
+.globl ___tls_get_addr
+.type ___tls_get_addr,@function
+___tls_get_addr:
+
+.section .text
+.globl _start
+_start:
+movl tlslocal0@indntpoff,%ecx
+movl %gs:(%ecx),%eax
+
+movl tlslocal0@indntpoff,%eax
+movl %gs:(%eax),%eax
+
+addl tlslocal0@indntpoff,%ecx
+movl %gs:(%ecx),%eax
+
+movl tlslocal1@indntpoff,%ecx
+movl %gs:(%ecx),%eax
+
+movl tlslocal1@indntpoff,%eax
+movl %gs:(%eax),%eax
+
+addl tlslocal1@indntpoff,%ecx
+movl %gs:(%ecx),%eax
+
+movl tlsshared0@indntpoff,%ecx
+movl %gs:(%ecx),%eax
+
+addl tlsshared1@indntpoff,%ecx
+movl %gs:(%ecx),%eax
diff --git a/test/ELF/tls-opt-local.s b/test/ELF/tls-opt-local.s
new file mode 100644
index 000000000000..d2904ac6fba0
--- /dev/null
+++ b/test/ELF/tls-opt-local.s
@@ -0,0 +1,52 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=NORELOC %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+
+// NORELOC: Relocations [
+// NORELOC-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: 48 c7 c0 f8 ff ff ff movq $-8, %rax
+// DISASM-NEXT: 11007: 49 c7 c7 f8 ff ff ff movq $-8, %r15
+// DISASM-NEXT: 1100e: 48 8d 80 f8 ff ff ff leaq -8(%rax), %rax
+// DISASM-NEXT: 11015: 4d 8d bf f8 ff ff ff leaq -8(%r15), %r15
+// DISASM-NEXT: 1101c: 48 81 c4 f8 ff ff ff addq $-8, %rsp
+// DISASM-NEXT: 11023: 49 81 c4 f8 ff ff ff addq $-8, %r12
+// DISASM-NEXT: 1102a: 48 c7 c0 fc ff ff ff movq $-4, %rax
+// DISASM-NEXT: 11031: 49 c7 c7 fc ff ff ff movq $-4, %r15
+// DISASM-NEXT: 11038: 48 8d 80 fc ff ff ff leaq -4(%rax), %rax
+// DISASM-NEXT: 1103f: 4d 8d bf fc ff ff ff leaq -4(%r15), %r15
+// DISASM-NEXT: 11046: 48 81 c4 fc ff ff ff addq $-4, %rsp
+// DISASM-NEXT: 1104d: 49 81 c4 fc ff ff ff addq $-4, %r12
+
+.section .tbss,"awT",@nobits
+
+.type tls0,@object
+.align 4
+tls0:
+ .long 0
+ .size tls0, 4
+
+.type tls1,@object
+.align 4
+tls1:
+ .long 0
+ .size tls1, 4
+
+.section .text
+.globl _start
+_start:
+ movq tls0@GOTTPOFF(%rip), %rax
+ movq tls0@GOTTPOFF(%rip), %r15
+ addq tls0@GOTTPOFF(%rip), %rax
+ addq tls0@GOTTPOFF(%rip), %r15
+ addq tls0@GOTTPOFF(%rip), %rsp
+ addq tls0@GOTTPOFF(%rip), %r12
+ movq tls1@GOTTPOFF(%rip), %rax
+ movq tls1@GOTTPOFF(%rip), %r15
+ addq tls1@GOTTPOFF(%rip), %rax
+ addq tls1@GOTTPOFF(%rip), %r15
+ addq tls1@GOTTPOFF(%rip), %rsp
+ addq tls1@GOTTPOFF(%rip), %r12
diff --git a/test/ELF/tls-opt.s b/test/ELF/tls-opt.s
new file mode 100644
index 000000000000..06577d7e1021
--- /dev/null
+++ b/test/ELF/tls-opt.s
@@ -0,0 +1,93 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck --check-prefix=NORELOC %s
+// RUN: llvm-objdump -d %t1 | FileCheck --check-prefix=DISASM %s
+
+// NORELOC: Relocations [
+// NORELOC-NEXT: ]
+
+// DISASM: Disassembly of section .text:
+// DISASM-NEXT: _start:
+// DISASM-NEXT: 11000: 48 c7 c0 f8 ff ff ff movq $-8, %rax
+// DISASM-NEXT: 11007: 49 c7 c7 f8 ff ff ff movq $-8, %r15
+// DISASM-NEXT: 1100e: 48 8d 80 f8 ff ff ff leaq -8(%rax), %rax
+// DISASM-NEXT: 11015: 4d 8d bf f8 ff ff ff leaq -8(%r15), %r15
+// DISASM-NEXT: 1101c: 48 81 c4 f8 ff ff ff addq $-8, %rsp
+// DISASM-NEXT: 11023: 49 81 c4 f8 ff ff ff addq $-8, %r12
+// DISASM-NEXT: 1102a: 48 c7 c0 fc ff ff ff movq $-4, %rax
+// DISASM-NEXT: 11031: 49 c7 c7 fc ff ff ff movq $-4, %r15
+// DISASM-NEXT: 11038: 48 8d 80 fc ff ff ff leaq -4(%rax), %rax
+// DISASM-NEXT: 1103f: 4d 8d bf fc ff ff ff leaq -4(%r15), %r15
+// DISASM-NEXT: 11046: 48 81 c4 fc ff ff ff addq $-4, %rsp
+// DISASM-NEXT: 1104d: 49 81 c4 fc ff ff ff addq $-4, %r12
+// Corrupred output:
+// DISASM-NEXT: 11054: 48 8d 80 f8 ff ff ff leaq -8(%rax), %rax
+// DISASM-NEXT: 1105b: 48 d1 81 c4 f8 ff ff rolq -1852(%rcx)
+// DISASM-NEXT: 11062: ff 48 d1 decl -47(%rax)
+// DISASM-NEXT: 11065: 81 c4 f8 ff ff ff addl $4294967288, %esp
+// LD to LE:
+// DISASM-NEXT: 1106b: 66 66 66 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 11077: 48 8d 88 f8 ff ff ff leaq -8(%rax), %rcx
+// DISASM-NEXT: 1107e: 66 66 66 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 1108a: 48 8d 88 fc ff ff ff leaq -4(%rax), %rcx
+// GD to LE:
+// DISASM-NEXT: 11091: 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 1109a: 48 8d 80 f8 ff ff ff leaq -8(%rax), %rax
+// DISASM-NEXT: 110a1: 64 48 8b 04 25 00 00 00 00 movq %fs:0, %rax
+// DISASM-NEXT: 110aa: 48 8d 80 fc ff ff ff leaq -4(%rax), %rax
+
+.type tls0,@object
+.section .tbss,"awT",@nobits
+.globl tls0
+.align 4
+tls0:
+ .long 0
+ .size tls0, 4
+
+.type tls1,@object
+.globl tls1
+.align 4
+tls1:
+ .long 0
+ .size tls1, 4
+
+.section .text
+.globl _start
+_start:
+ movq tls0@GOTTPOFF(%rip), %rax
+ movq tls0@GOTTPOFF(%rip), %r15
+ addq tls0@GOTTPOFF(%rip), %rax
+ addq tls0@GOTTPOFF(%rip), %r15
+ addq tls0@GOTTPOFF(%rip), %rsp
+ addq tls0@GOTTPOFF(%rip), %r12
+ movq tls1@GOTTPOFF(%rip), %rax
+ movq tls1@GOTTPOFF(%rip), %r15
+ addq tls1@GOTTPOFF(%rip), %rax
+ addq tls1@GOTTPOFF(%rip), %r15
+ addq tls1@GOTTPOFF(%rip), %rsp
+ addq tls1@GOTTPOFF(%rip), %r12
+
+ //Invalid input case:
+ xchgq tls0@gottpoff(%rip),%rax
+ shlq tls0@gottpoff
+ rolq tls0@gottpoff
+
+ //LD to LE:
+ leaq tls0@tlsld(%rip), %rdi
+ callq __tls_get_addr@PLT
+ leaq tls0@dtpoff(%rax),%rcx
+ leaq tls1@tlsld(%rip), %rdi
+ callq __tls_get_addr@PLT
+ leaq tls1@dtpoff(%rax),%rcx
+
+ //GD to LE:
+ .byte 0x66
+ leaq tls0@tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
+ .byte 0x66
+ leaq tls1@tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr@plt
diff --git a/test/ELF/tls-static.s b/test/ELF/tls-static.s
new file mode 100644
index 000000000000..4c515abb1252
--- /dev/null
+++ b/test/ELF/tls-static.s
@@ -0,0 +1,13 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/shared.s -o %tso
+// RUN: ld.lld -static %t -o %tout
+// RUN: ld.lld %t -o %tout
+// RUN: ld.lld -shared %tso -o %tshared
+// RUN: not ld.lld -static %t %tshared -o %tout 2>&1 | FileCheck %s
+// REQUIRES: x86
+
+.global _start
+_start:
+ call __tls_get_addr
+
+// CHECK: undefined symbol: __tls_get_addr
diff --git a/test/ELF/tls.s b/test/ELF/tls.s
new file mode 100644
index 000000000000..525890b087e2
--- /dev/null
+++ b/test/ELF/tls.s
@@ -0,0 +1,170 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: ld.lld %t -o %tout
+// RUN: llvm-readobj -symbols -sections -program-headers %tout | FileCheck %s
+// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
+
+.global _start
+_start:
+ movl %fs:a@tpoff, %eax
+ movl %fs:b@tpoff, %eax
+ movl %fs:c@tpoff, %eax
+ movl %fs:d@tpoff, %eax
+
+ .global a
+ .section .tbss,"awT",@nobits
+a:
+ .long 0
+
+ .global b
+ .section .tdata,"awT",@progbits
+b:
+ .long 1
+
+ .global c
+ .section .thread_bss,"awT",@nobits
+c:
+ .long 0
+
+ .global d
+ .section .thread_data,"awT",@progbits
+d:
+ .long 2
+
+// CHECK: Name: .tdata
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_TLS
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[TDATA_ADDR:0x.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: }
+// CHECK-NEXT: Section {
+// CHECK-NEXT: Index:
+// CHECK-NEXT: Name: .thread_data
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_TLS
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: }
+// CHECK-NEXT: Section {
+// CHECK-NEXT: Index:
+// CHECK-NEXT: Name: .tbss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_TLS
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: [[TBSS_ADDR:0x.*]]
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: }
+// CHECK-NEXT: Section {
+// CHECK-NEXT: Index:
+// CHECK-NEXT: Name: .thread_bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_TLS
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+
+// 0x1200C = TBSS_ADDR + 4
+
+// CHECK-NEXT: Address: 0x1200C
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link:
+// CHECK-NEXT: Info:
+// CHECK-NEXT: AddressAlignment:
+// CHECK-NEXT: EntrySize:
+// CHECK-NEXT: }
+
+// CHECK: Symbols [
+// CHECK: Name: a
+// CHECK-NEXT: Value: 0x8
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: TLS
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .tbss
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: b
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: TLS
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .tdata
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: c
+// CHECK-NEXT: Value: 0xC
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: TLS
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .thread_bss
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: d
+// CHECK-NEXT: Value: 0x4
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: TLS
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .thread_data
+// CHECK-NEXT: }
+
+// Check that the TLS NOBITS sections weren't added to the R/W PT_LOAD's size.
+
+// CHECK: ProgramHeaders [
+// CHECK: Type: PT_LOAD
+// CHECK: Type: PT_LOAD
+// CHECK: Type: PT_LOAD
+// CHECK: FileSize: 8
+// CHECK-NEXT: MemSize: 8
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: PF_W
+// CHECK-NEXT: ]
+// CHECK: Type: PT_TLS
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: VirtualAddress: [[TDATA_ADDR]]
+// CHECK-NEXT: PhysicalAddress: [[TDATA_ADDR]]
+// CHECK-NEXT: FileSize: 8
+// CHECK-NEXT: MemSize: 16
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: PF_R
+// CHECK-NEXT: ]
+// CHECK-NEXT: Alignment:
+// CHECK-NEXT: }
+
+// DIS: Disassembly of section .text:
+// DIS-NEXT: _start:
+// DIS-NEXT: 11000: {{.+}} movl %fs:-8, %eax
+// DIS-NEXT: 11008: {{.+}} movl %fs:-16, %eax
+// DIS-NEXT: 11010: {{.+}} movl %fs:-4, %eax
+// DIS-NEXT: 11018: {{.+}} movl %fs:-12, %eax
diff --git a/test/ELF/undef-start.s b/test/ELF/undef-start.s
new file mode 100644
index 000000000000..bf1d89853f59
--- /dev/null
+++ b/test/ELF/undef-start.s
@@ -0,0 +1,4 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+# CHECK: undefined symbol: _start
+# REQUIRES: x86
diff --git a/test/ELF/undef.s b/test/ELF/undef.s
new file mode 100644
index 000000000000..374c9c884d5f
--- /dev/null
+++ b/test/ELF/undef.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+# CHECK: undefined symbol: foo in {{.*}}
+# REQUIRES: x86
+
+ .globl _start;
+_start:
+ call foo
diff --git a/test/ELF/undefined-opt.s b/test/ELF/undefined-opt.s
new file mode 100644
index 000000000000..97ab5a63490a
--- /dev/null
+++ b/test/ELF/undefined-opt.s
@@ -0,0 +1,55 @@
+# 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/abs.s -o %tabs.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux \
+# RUN: %p/Inputs/shared.s -o %tshared.o
+# RUN: rm -f %tar.a
+# RUN: llvm-ar rcs %tar.a %tabs.o %tshared.o
+# REQUIRES: x86
+
+# Symbols from the archive are not in if not needed
+# RUN: ld.lld -o %t1 %t.o %tar.a
+# RUN: llvm-readobj --symbols %t1 | FileCheck --check-prefix=NO-UNDEFINED %s
+# NO-UNDEFINED: Symbols [
+# NO-UNDEFINED-NOT: Name: abs
+# NO-UNDEFINED-NOT: Name: big
+# NO-UNDEFINED-NOT: Name: bar
+# NO-UNDEFINED-NOT: Name: zed
+# NO-UNDEFINED: ]
+
+# Symbols from the archive are in if needed, but only from the
+# containing object file
+# RUN: ld.lld -o %t2 %t.o %tar.a -u bar
+# RUN: llvm-readobj --symbols %t2 | FileCheck --check-prefix=ONE-UNDEFINED %s
+# ONE-UNDEFINED: Symbols [
+# ONE-UNDEFINED-NOT: Name: abs
+# ONE-UNDEFINED-NOT: Name: big
+# ONE-UNDEFINED: Name: bar
+# ONE-UNDEFINED: Name: zed
+# ONE-UNDEFINED: ]
+
+# Use the option couple of times, both short and long forms
+# RUN: ld.lld -o %t3 %t.o %tar.a -u bar --undefined=abs
+# RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=TWO-UNDEFINED %s
+# TWO-UNDEFINED: Symbols [
+# TWO-UNDEFINED: Name: abs
+# TWO-UNDEFINED: Name: big
+# TWO-UNDEFINED: Name: bar
+# TWO-UNDEFINED: Name: zed
+# TWO-UNDEFINED: ]
+# Now the same logic but linker script is used to set undefines
+# RUN: echo "EXTERN( bar abs )" > %t.script
+# RUN: ld.lld -o %t3 %t.o %tar.a %t.script
+# RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=TWO-UNDEFINED %s
+
+# Added undefined symbol may be left undefined without error, but
+# shouldn't show up in the dynamic table.
+# RUN: ld.lld -shared -o %t4 %t.o %tar.a -u unknown
+# RUN: llvm-readobj --dyn-symbols %t4 | \
+# RUN: FileCheck --check-prefix=UNK-UNDEFINED-SO %s
+# UNK-UNDEFINED-SO: DynamicSymbols [
+# UNK-UNDEFINED-SO-NOT: Name: unknown
+# UNK-UNDEFINED-SO: ]
+
+.globl _start;
+_start:
diff --git a/test/ELF/valid-cie-length-dw64.s b/test/ELF/valid-cie-length-dw64.s
new file mode 100644
index 000000000000..65d6952448a2
--- /dev/null
+++ b/test/ELF/valid-cie-length-dw64.s
@@ -0,0 +1,13 @@
+// REQUIRES: x86
+
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld %t -o %t2 2>&1 | FileCheck %s
+
+ .section .eh_frame
+ .long 0xFFFFFFFF
+ .quad 1
+ nop
+
+// CHECK-NOT: Truncated CIE/FDE length
+// CHECK-NOT: CIE/FIE size is too large
+// CHECK-NOT: CIE/FIE ends past the end of the section
diff --git a/test/ELF/visibility.s b/test/ELF/visibility.s
new file mode 100644
index 000000000000..d76ed0793eb1
--- /dev/null
+++ b/test/ELF/visibility.s
@@ -0,0 +1,108 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/visibility.s -o %t2
+// RUN: ld.lld -shared %t %t2 -o %t3
+// RUN: llvm-readobj -t -dyn-symbols %t3 | FileCheck %s
+// REQUIRES: x86
+
+// CHECK: Symbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: hidden
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 2
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: internal
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 1
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: protected_with_hidden
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 2
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: default
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: protected
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 3
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+// CHECK: DynamicSymbols [
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: @ (0)
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: default
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: Symbol {
+// CHECK-NEXT: Name: protected
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 3
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
+
+.global default
+default:
+
+.global protected
+protected:
+
+.global hidden
+hidden:
+
+.global internal
+internal:
+
+.global protected_with_hidden
+.protected
+protected_with_hidden:
diff --git a/test/ELF/whole-archive.s b/test/ELF/whole-archive.s
new file mode 100644
index 000000000000..0a6b30fd171e
--- /dev/null
+++ b/test/ELF/whole-archive.s
@@ -0,0 +1,34 @@
+// 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/whole-archive.s -o %ta.o
+// RUN: rm -f %t.a
+// RUN: llvm-ar rcs %t.a %ta.o
+
+// Should not add symbols from the archive by default as they are not required
+// RUN: ld.lld -o %t3 %t.o %t.a
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=NOTADDED %s
+// NOTADDED: Symbols [
+// NOTADDED-NOT: Name: _bar
+// NOTADDED: ]
+
+// Should add symbols from the archive if --whole-archive is used
+// RUN: ld.lld -o %t3 %t.o --whole-archive %t.a
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=ADDED %s
+// ADDED: Symbols [
+// ADDED: Name: _bar
+// ADDED: ]
+
+// --no-whole-archive should restore default behaviour
+// RUN: ld.lld -o %t3 %t.o --whole-archive --no-whole-archive %t.a
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=NOTADDED %s
+
+// --whole-archive and --no-whole-archive should affect only archives which follow them
+// RUN: ld.lld -o %t3 %t.o %t.a --whole-archive --no-whole-archive
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=NOTADDED %s
+// RUN: ld.lld -o %t3 %t.o --whole-archive %t.a --no-whole-archive
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=ADDED %s
+
+.globl _start;
+_start:
diff --git a/test/ELF/writable-merge.s b/test/ELF/writable-merge.s
new file mode 100644
index 000000000000..dd7b8538e57a
--- /dev/null
+++ b/test/ELF/writable-merge.s
@@ -0,0 +1,6 @@
+// REQUIRES: x86
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: not ld.lld %t.o -o %t 2>&1 | FileCheck %s
+// CHECK: Writable SHF_MERGE sections are not supported
+
+ .section .foo,"awM",@progbits,4
diff --git a/test/ELF/x86-64-reloc-32-error.s b/test/ELF/x86-64-reloc-32-error.s
new file mode 100644
index 000000000000..b5d476bcf082
--- /dev/null
+++ b/test/ELF/x86-64-reloc-32-error.s
@@ -0,0 +1,8 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/abs.s -o %tabs
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld -shared %tabs %t -o %t2 2>&1 | FileCheck %s
+// REQUIRES: x86
+
+ movl $big, %edx
+
+#CHECK: R_X86_64_32 out of range
diff --git a/test/ELF/x86-64-reloc-32S-error.s b/test/ELF/x86-64-reloc-32S-error.s
new file mode 100644
index 000000000000..aa19c2c32e93
--- /dev/null
+++ b/test/ELF/x86-64-reloc-32S-error.s
@@ -0,0 +1,7 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
+// RUN: not ld.lld -shared %t -o %t2 2>&1 | FileCheck %s
+// REQUIRES: x86
+
+ movq _start - 0x1000000000000, %rdx
+
+#CHECK: R_X86_64_32S out of range
diff --git a/test/LinkerScript/phdrs-sections.test b/test/LinkerScript/phdrs-sections.test
new file mode 100644
index 000000000000..872b7999cb7e
--- /dev/null
+++ b/test/LinkerScript/phdrs-sections.test
@@ -0,0 +1,29 @@
+/*
+ Test PHDR parsing and section -> phdr mapping.
+ RUN: linker-script-test %s | FileCheck %s
+*/
+
+PHDRS
+{
+ ph_text PT_LOAD FLAGS (0x1 | 0x4);
+ ph_data PT_LOAD FLAGS (0x2 | 0x4);
+}
+
+SECTIONS
+{
+ .init : {} : ph_text
+}
+
+/*
+CHECK: PHDRS
+CHECK: {
+CHECK: ph_text 1 FLAGS (5);
+CHECK: ph_data 1 FLAGS (6);
+CHECK: }
+CHECK: SECTIONS
+CHECK: {
+CHECK: .init :
+CHECK: {
+CHECK: } : ph_text
+CHECK: }
+*/
diff --git a/test/LinkerScript/sections.test b/test/LinkerScript/sections.test
index 8f7d01418044..67f8288badaa 100644
--- a/test/LinkerScript/sections.test
+++ b/test/LinkerScript/sections.test
@@ -26,6 +26,7 @@ SECTIONS
}
.init :
{
+ FILL (0x90909090)
KEEP (*(SORT_NONE(.init)))
} =0x909090909090909090909090
PROVIDE (__etext = .);
@@ -181,6 +182,10 @@ CHECK: r_brace: }
CHECK: identifier: .init
CHECK: colon: :
CHECK: l_brace: {
+CHECK: kw_fill: FILL
+CHECK: l_paren: (
+CHECK: number: 0x90909090
+CHECK: r_paren: )
CHECK: kw_keep: KEEP
CHECK: l_paren: (
CHECK: star: *
@@ -556,6 +561,7 @@ CHECK: PROVIDE_HIDDEN(__rela_iplt_end = .)
CHECK: }
CHECK: .init :
CHECK: {
+CHECK: FILL(0x90909090)
CHECK: KEEP(*(SORT_NONE(.init)))
CHECK: } =0x909090909090909090909090
CHECK: PROVIDE(__etext = .)
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644
index 2d45e4fae2a7..000000000000
--- a/test/Makefile
+++ /dev/null
@@ -1,71 +0,0 @@
-LLD_LEVEL := ..
-include $(LLD_LEVEL)/Makefile
-
-# Test in all immediate subdirectories if unset.
-ifdef TESTSUITE
-TESTDIRS := $(TESTSUITE:%=$(PROJ_SRC_DIR)/%)
-else
-TESTDIRS ?= $(PROJ_SRC_DIR)
-endif
-
-# 'lit' wants objdir paths, so it will pick up the lit.site.cfg.
-TESTDIRS := $(TESTDIRS:$(PROJ_SRC_DIR)%=$(PROJ_OBJ_DIR)%)
-
-# Allow EXTRA_TESTDIRS to provide additional test directories.
-TESTDIRS += $(EXTRA_TESTDIRS)
-
-ifndef TESTARGS
-ifdef VERBOSE
-TESTARGS = -v
-else
-TESTARGS = -s -v
-endif
-endif
-
-# Make sure any extra test suites can find the main site config.
-LIT_ARGS := --param lld_site_config=$(PROJ_OBJ_DIR)/lit.site.cfg
-
-ifdef VG
- LIT_ARGS += "--vg"
-endif
-
-all:: lit.site.cfg Unit/lit.site.cfg
- @ echo '--- Running lld tests for $(TARGET_TRIPLE) ---'
- @ $(PYTHON) $(LLVM_SRC_ROOT)/utils/lit/lit.py \
- $(LIT_ARGS) $(TESTARGS) $(TESTDIRS)
-
-FORCE:
-
-lit.site.cfg: FORCE
- @echo "Making lld 'lit.site.cfg' file..."
- @$(ECHOPATH) s=@LLVM_SOURCE_DIR@=$(LLVM_SRC_ROOT)=g > lit.tmp
- @$(ECHOPATH) s=@LLVM_BINARY_DIR@=$(LLVM_OBJ_ROOT)=g >> lit.tmp
- @$(ECHOPATH) s=@LLVM_TOOLS_DIR@=$(ToolDir)=g >> lit.tmp
- @$(ECHOPATH) s=@LLVM_LIBS_DIR@=$(LibDir)=g >> lit.tmp
- @$(ECHOPATH) s=@LLD_SOURCE_DIR@=$(PROJ_SRC_DIR)/..=g >> lit.tmp
- @$(ECHOPATH) s=@LLD_BINARY_DIR@=$(PROJ_OBJ_DIR)/..=g >> lit.tmp
- @$(ECHOPATH) s=@TARGET_TRIPLE@=$(TARGET_TRIPLE)=g >> lit.tmp
- @sed -f lit.tmp $(PROJ_SRC_DIR)/lit.site.cfg.in > $@
- @-rm -f lit.tmp
-
-Unit/lit.site.cfg: FORCE
- @echo "Making lld 'Unit/lit.site.cfg' file..."
- @$(MKDIR) $(dir $@)
- @$(ECHOPATH) s=@LLVM_SOURCE_DIR@=$(LLVM_SRC_ROOT)=g > unit.tmp
- @$(ECHOPATH) s=@LLVM_BINARY_DIR@=$(LLVM_OBJ_ROOT)=g >> unit.tmp
- @$(ECHOPATH) s=@LLVM_TOOLS_DIR@=$(ToolDir)=g >> unit.tmp
- @$(ECHOPATH) s=@LLVM_LIBS_DIR@=$(LibDir)=g >> unit.tmp
- @$(ECHOPATH) s=@LLD_SOURCE_DIR@=$(PROJ_SRC_DIR)/..=g >> unit.tmp
- @$(ECHOPATH) s=@LLD_BINARY_DIR@=$(PROJ_OBJ_DIR)/..=g >> unit.tmp
- @$(ECHOPATH) s=@TARGET_TRIPLE@=$(TARGET_TRIPLE)=g >> unit.tmp
- @$(ECHOPATH) s=@LLVM_BUILD_MODE@=$(BuildMode)=g >> unit.tmp
- @$(ECHOPATH) s=@ENABLE_SHARED@=$(ENABLE_SHARED)=g >> unit.tmp
- @$(ECHOPATH) s=@SHLIBDIR@=$(SharedLibDir)=g >> unit.tmp
- @$(ECHOPATH) s=@SHLIBPATH_VAR@=$(SHLIBPATH_VAR)=g >> unit.tmp
- @sed -f unit.tmp $(PROJ_SRC_DIR)/Unit/lit.site.cfg.in > $@
- @-rm -f unit.tmp
-
-clean::
- @ find . -name Output | xargs rm -fr
-
-.PHONY: all report clean
diff --git a/test/core/Inputs/archive-basic.objtxt b/test/core/Inputs/archive-basic.objtxt
new file mode 100644
index 000000000000..ecfdacd0b6dd
--- /dev/null
+++ b/test/core/Inputs/archive-basic.objtxt
@@ -0,0 +1,21 @@
+--- !archive
+members:
+ - name: bar.o
+ content: !native
+ defined-atoms:
+ - name: bar
+ scope: global
+ type: code
+
+ - name: bar2
+ type: code
+
+ - name: baz.o
+ content: !native
+ defined-atoms:
+ - name: baz
+ scope: global
+ type: code
+
+ - name: baz2
+ type: code
diff --git a/test/core/Inputs/archive-chain.objtxt b/test/core/Inputs/archive-chain.objtxt
new file mode 100644
index 000000000000..d3cc17137c18
--- /dev/null
+++ b/test/core/Inputs/archive-chain.objtxt
@@ -0,0 +1,24 @@
+--- !archive
+members:
+ - name: bar1.o
+ content: !native
+ defined-atoms:
+ - name: bar1
+ scope: global
+ type: code
+
+ - name: bar1b
+ type: code
+
+ undefined-atoms:
+ - name: baz1
+
+ - name: bar2.o
+ content: !native
+ defined-atoms:
+ - name: bar2
+ scope: global
+ type: code
+
+ - name: bar2b
+ type: code
diff --git a/test/core/Inputs/archive-chain2.objtxt b/test/core/Inputs/archive-chain2.objtxt
new file mode 100644
index 000000000000..aed6b1b959e1
--- /dev/null
+++ b/test/core/Inputs/archive-chain2.objtxt
@@ -0,0 +1,21 @@
+--- !archive
+members:
+ - name: baz1.o
+ content: !native
+ defined-atoms:
+ - name: baz1
+ scope: global
+ type: code
+
+ - name: baz1b
+ type: code
+
+ - name: baz2.o
+ content: !native
+ defined-atoms:
+ - name: baz2
+ scope: global
+ type: code
+
+ - name: baz2b
+ type: code
diff --git a/test/core/Inputs/archive-tentdef-search.objtxt b/test/core/Inputs/archive-tentdef-search.objtxt
new file mode 100644
index 000000000000..70219aac7a6d
--- /dev/null
+++ b/test/core/Inputs/archive-tentdef-search.objtxt
@@ -0,0 +1,11 @@
+--- !archive
+members:
+ - name: bar.o
+ content: !native
+ defined-atoms:
+ - name: bar
+ scope: global
+ type: data
+
+ - name: bar2
+ type: data
diff --git a/test/core/Inputs/associates.objtxt b/test/core/Inputs/associates.objtxt
new file mode 100644
index 000000000000..29d028c27edc
--- /dev/null
+++ b/test/core/Inputs/associates.objtxt
@@ -0,0 +1,8 @@
+defined-atoms:
+ - name: f1
+ merge: as-weak
+ scope: global
+ references:
+ - kind: associate
+ target: f2
+ - name: f2
diff --git a/test/core/Inputs/auto-hide-coalesce.objtxt b/test/core/Inputs/auto-hide-coalesce.objtxt
new file mode 100644
index 000000000000..d82d0f41c4f4
--- /dev/null
+++ b/test/core/Inputs/auto-hide-coalesce.objtxt
@@ -0,0 +1,20 @@
+defined-atoms:
+ - name: _inlineFunc1
+ scope: global
+ type: code
+ merge: as-weak
+
+ - name: _inlineFunc2
+ scope: global
+ type: code
+ merge: as-addressed-weak
+
+ - name: _inlineFunc3
+ scope: global
+ type: code
+ merge: as-weak
+
+ - name: _inlineFunc4
+ scope: global
+ type: code
+ merge: as-addressed-weak
diff --git a/test/core/Inputs/code-model-attributes.objtxt b/test/core/Inputs/code-model-attributes.objtxt
new file mode 100644
index 000000000000..7c01a0d57f36
--- /dev/null
+++ b/test/core/Inputs/code-model-attributes.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _none
+ code-model: none
diff --git a/test/core/Inputs/code-model-attributes2.objtxt b/test/core/Inputs/code-model-attributes2.objtxt
new file mode 100644
index 000000000000..92df88c7b0ea
--- /dev/null
+++ b/test/core/Inputs/code-model-attributes2.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _mips_pic
+ code-model: mips-pic
diff --git a/test/core/Inputs/code-model-attributes3.objtxt b/test/core/Inputs/code-model-attributes3.objtxt
new file mode 100644
index 000000000000..8f2ced14f10c
--- /dev/null
+++ b/test/core/Inputs/code-model-attributes3.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _mips_micro
+ code-model: mips-micro
diff --git a/test/core/Inputs/code-model-attributes4.objtxt b/test/core/Inputs/code-model-attributes4.objtxt
new file mode 100644
index 000000000000..160c9a00c3da
--- /dev/null
+++ b/test/core/Inputs/code-model-attributes4.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _mips_micro_pic
+ code-model: mips-micro-pic
diff --git a/test/core/Inputs/code-model-attributes5.objtxt b/test/core/Inputs/code-model-attributes5.objtxt
new file mode 100644
index 000000000000..99bdb54e09bb
--- /dev/null
+++ b/test/core/Inputs/code-model-attributes5.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _mips_16
+ code-model: mips-16
diff --git a/test/core/Inputs/constants-coalesce.objtxt b/test/core/Inputs/constants-coalesce.objtxt
new file mode 100644
index 000000000000..ea3436f9ee28
--- /dev/null
+++ b/test/core/Inputs/constants-coalesce.objtxt
@@ -0,0 +1,9 @@
+---
+defined-atoms:
+ - ref-name: L1
+ type: constant
+ content: [ 01, 02 ]
+ - ref-name: L2
+ type: constant
+ merge: by-content
+ content: [ 01, 02, 03, 04 ]
diff --git a/test/core/Inputs/constants-coalesce2.objtxt b/test/core/Inputs/constants-coalesce2.objtxt
new file mode 100644
index 000000000000..c8f10f414f87
--- /dev/null
+++ b/test/core/Inputs/constants-coalesce2.objtxt
@@ -0,0 +1,10 @@
+---
+defined-atoms:
+ - ref-name: L2
+ type: constant
+ merge: by-content
+ content: [ 01, 23, 45, 67, 89, AB, CD, EF ]
+ - ref-name: L3
+ type: constant
+ merge: by-content
+ content: [ 01, 02, 03 ]
diff --git a/test/core/Inputs/cstring-coalesce.objtxt b/test/core/Inputs/cstring-coalesce.objtxt
new file mode 100644
index 000000000000..d2e6327cf20c
--- /dev/null
+++ b/test/core/Inputs/cstring-coalesce.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - ref-name: L2
+ type: c-string
+ merge: by-content
+ content: [ 68, 65, 6c, 6c, 6f, 00 ]
diff --git a/test/core/Inputs/cstring-coalesce2.objtxt b/test/core/Inputs/cstring-coalesce2.objtxt
new file mode 100644
index 000000000000..76dedf7cf3bd
--- /dev/null
+++ b/test/core/Inputs/cstring-coalesce2.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - ref-name: L2
+ type: c-string
+ merge: by-content
+ content: [ 74, 68, 65, 72, 65, 00 ]
diff --git a/test/core/Inputs/custom-section-coalesce.objtxt b/test/core/Inputs/custom-section-coalesce.objtxt
new file mode 100644
index 000000000000..de3efe339aae
--- /dev/null
+++ b/test/core/Inputs/custom-section-coalesce.objtxt
@@ -0,0 +1,15 @@
+---
+defined-atoms:
+ - ref-name: L1
+ type: constant
+ merge: by-content
+ content: [ 01, 02, 03, 04 ]
+ section-choice: custom-required
+ section-name: .mysection
+
+ - ref-name: L2
+ type: constant
+ merge: by-content
+ content: [ 01, 02, 03, 04 ]
+ section-choice: custom-required
+ section-name: .mysection2
diff --git a/test/core/Inputs/custom-section-coalesce2.objtxt b/test/core/Inputs/custom-section-coalesce2.objtxt
new file mode 100644
index 000000000000..3e8356f0c7ee
--- /dev/null
+++ b/test/core/Inputs/custom-section-coalesce2.objtxt
@@ -0,0 +1,13 @@
+---
+defined-atoms:
+ - ref-name: L1
+ type: constant
+ merge: by-content
+ content: [ 05, 06, 07, 08 ]
+ section-choice: custom-required
+ section-name: .mysection
+
+ - ref-name: L2
+ type: constant
+ merge: by-content
+ content: [ 01, 02, 03, 04 ]
diff --git a/test/core/Inputs/dead-strip-attributes.objtxt b/test/core/Inputs/dead-strip-attributes.objtxt
new file mode 100644
index 000000000000..06a71485dcd5
--- /dev/null
+++ b/test/core/Inputs/dead-strip-attributes.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _foo2
+ dead-strip: never
diff --git a/test/core/Inputs/dead-strip-attributes2.objtxt b/test/core/Inputs/dead-strip-attributes2.objtxt
new file mode 100644
index 000000000000..3dd55c46cd92
--- /dev/null
+++ b/test/core/Inputs/dead-strip-attributes2.objtxt
@@ -0,0 +1,4 @@
+---
+defined-atoms:
+ - name: _foo3
+ dead-strip: always
diff --git a/test/core/Inputs/dead-strip-basic.objtxt b/test/core/Inputs/dead-strip-basic.objtxt
new file mode 100644
index 000000000000..05cb81bbcf94
--- /dev/null
+++ b/test/core/Inputs/dead-strip-basic.objtxt
@@ -0,0 +1,9 @@
+---
+defined-atoms:
+ - name: mydead2
+ scope: global
+ type: data
+
+ - name: bar
+ scope: global
+ type: data
diff --git a/test/core/Inputs/dead-strip-basic2.objtxt b/test/core/Inputs/dead-strip-basic2.objtxt
new file mode 100644
index 000000000000..6b0b01aef642
--- /dev/null
+++ b/test/core/Inputs/dead-strip-basic2.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: baz
+ scope: global
+ type: code
+
+ - name: mydead3
+ type: code
diff --git a/test/core/Inputs/dead-strip-globals.objtxt b/test/core/Inputs/dead-strip-globals.objtxt
new file mode 100644
index 000000000000..fbf2ba6d1da3
--- /dev/null
+++ b/test/core/Inputs/dead-strip-globals.objtxt
@@ -0,0 +1,9 @@
+---
+defined-atoms:
+ - name: myglobal2
+ scope: global
+ type: data
+
+ - name: bar
+ scope: hidden
+ type: data
diff --git a/test/core/Inputs/dead-strip-globals2.objtxt b/test/core/Inputs/dead-strip-globals2.objtxt
new file mode 100644
index 000000000000..a314bbe5ae41
--- /dev/null
+++ b/test/core/Inputs/dead-strip-globals2.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: baz
+ scope: hidden
+ type: code
+
+ - name: mydead
+ type: code
diff --git a/test/core/Inputs/error-duplicate-absolutes.objtxt b/test/core/Inputs/error-duplicate-absolutes.objtxt
new file mode 100644
index 000000000000..2b99aa37848a
--- /dev/null
+++ b/test/core/Inputs/error-duplicate-absolutes.objtxt
@@ -0,0 +1,5 @@
+---
+absolute-atoms:
+ - name: absatom
+ value: 0
+ scope: global
diff --git a/test/core/Inputs/gnulinkonce-rearrange-resolve.objtxt b/test/core/Inputs/gnulinkonce-rearrange-resolve.objtxt
new file mode 100644
index 000000000000..e1fa42a24a52
--- /dev/null
+++ b/test/core/Inputs/gnulinkonce-rearrange-resolve.objtxt
@@ -0,0 +1,26 @@
+---
+defined-atoms:
+ - name: g1
+ scope: global
+ type: gnu-linkonce
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
diff --git a/test/core/Inputs/gnulinkonce-remaining-undef.objtxt b/test/core/Inputs/gnulinkonce-remaining-undef.objtxt
new file mode 100644
index 000000000000..02903a6b7bc5
--- /dev/null
+++ b/test/core/Inputs/gnulinkonce-remaining-undef.objtxt
@@ -0,0 +1,34 @@
+---
+defined-atoms:
+ - name: anotherfunction
+ scope: global
+ type: data
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: f3
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
+ - name: g1
+ scope: global
+ type: gnu-linkonce
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: f3
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
diff --git a/test/core/Inputs/gnulinkonce-remaining-undef2.objtxt b/test/core/Inputs/gnulinkonce-remaining-undef2.objtxt
new file mode 100644
index 000000000000..4991476c621c
--- /dev/null
+++ b/test/core/Inputs/gnulinkonce-remaining-undef2.objtxt
@@ -0,0 +1,4 @@
+---
+undefined-atoms:
+ - name: f3
+ can-be-null: never
diff --git a/test/core/Inputs/gnulinkonce-resolve.objtxt b/test/core/Inputs/gnulinkonce-resolve.objtxt
new file mode 100644
index 000000000000..f4beb37fee2a
--- /dev/null
+++ b/test/core/Inputs/gnulinkonce-resolve.objtxt
@@ -0,0 +1,25 @@
+defined-atoms:
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
+ - name: g1
+ scope: global
+ type: gnu-linkonce
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
diff --git a/test/core/Inputs/gnulinkonce-simple.objtxt b/test/core/Inputs/gnulinkonce-simple.objtxt
new file mode 100644
index 000000000000..807f0d35802b
--- /dev/null
+++ b/test/core/Inputs/gnulinkonce-simple.objtxt
@@ -0,0 +1,4 @@
+---
+undefined-atoms:
+ - name: f1
+ can-be-null: never
diff --git a/test/core/Inputs/inline-coalesce.objtxt b/test/core/Inputs/inline-coalesce.objtxt
new file mode 100644
index 000000000000..2eddee647c14
--- /dev/null
+++ b/test/core/Inputs/inline-coalesce.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - name: _inlineFunc
+ scope: global
+ type: code
+ merge: as-weak
diff --git a/test/core/Inputs/inline-coalesce2.objtxt b/test/core/Inputs/inline-coalesce2.objtxt
new file mode 100644
index 000000000000..2eddee647c14
--- /dev/null
+++ b/test/core/Inputs/inline-coalesce2.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - name: _inlineFunc
+ scope: global
+ type: code
+ merge: as-weak
diff --git a/test/core/Inputs/multiple-def-error.objtxt b/test/core/Inputs/multiple-def-error.objtxt
new file mode 100644
index 000000000000..8a1dcdb9c37f
--- /dev/null
+++ b/test/core/Inputs/multiple-def-error.objtxt
@@ -0,0 +1,5 @@
+---
+defined-atoms:
+ - name: _foo
+ scope: global
+ type: data
diff --git a/test/core/Inputs/sectiongroup-deadstrip.objtxt b/test/core/Inputs/sectiongroup-deadstrip.objtxt
new file mode 100644
index 000000000000..392f7ee96898
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-deadstrip.objtxt
@@ -0,0 +1,3 @@
+undefined-atoms:
+ - name: f1
+ can-be-null: never
diff --git a/test/core/Inputs/sectiongroup-gnulinkonce-error.objtxt b/test/core/Inputs/sectiongroup-gnulinkonce-error.objtxt
new file mode 100644
index 000000000000..a365d37b66b5
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-gnulinkonce-error.objtxt
@@ -0,0 +1,26 @@
+---
+defined-atoms:
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
+ - name: g1
+ scope: global
+ type: gnu-linkonce
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
diff --git a/test/core/Inputs/sectiongroup-rearrange-resolve.objtxt b/test/core/Inputs/sectiongroup-rearrange-resolve.objtxt
new file mode 100644
index 000000000000..bcefee646ef4
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-rearrange-resolve.objtxt
@@ -0,0 +1,25 @@
+defined-atoms:
+ - name: g1
+ scope: global
+ type: group-comdat
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
diff --git a/test/core/Inputs/sectiongroup-remaining-undef.objtxt b/test/core/Inputs/sectiongroup-remaining-undef.objtxt
new file mode 100644
index 000000000000..07c7af5dc67c
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-remaining-undef.objtxt
@@ -0,0 +1,34 @@
+---
+defined-atoms:
+ - name: anotherfunction
+ scope: global
+ type: data
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: f3
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
+ - name: g1
+ scope: global
+ type: group-comdat
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: f3
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
diff --git a/test/core/Inputs/sectiongroup-remaining-undef2.objtxt b/test/core/Inputs/sectiongroup-remaining-undef2.objtxt
new file mode 100644
index 000000000000..4991476c621c
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-remaining-undef2.objtxt
@@ -0,0 +1,4 @@
+---
+undefined-atoms:
+ - name: f3
+ can-be-null: never
diff --git a/test/core/Inputs/sectiongroup-resolve.objtxt b/test/core/Inputs/sectiongroup-resolve.objtxt
new file mode 100644
index 000000000000..a047ad33fe9c
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-resolve.objtxt
@@ -0,0 +1,26 @@
+---
+defined-atoms:
+ - name: f1
+ scope: global
+ type: code
+ - name: f2
+ scope: global
+ type: code
+ - name: g1
+ scope: global
+ type: code
+ - name: d1
+ scope: global
+ type: data
+ - name: g1
+ scope: global
+ type: group-comdat
+ references:
+ - kind: group-child
+ target: f1
+ - kind: group-child
+ target: f2
+ - kind: group-child
+ target: g1
+ - kind: group-child
+ target: d1
diff --git a/test/core/Inputs/sectiongroup-simple.objtxt b/test/core/Inputs/sectiongroup-simple.objtxt
new file mode 100644
index 000000000000..807f0d35802b
--- /dev/null
+++ b/test/core/Inputs/sectiongroup-simple.objtxt
@@ -0,0 +1,4 @@
+---
+undefined-atoms:
+ - name: f1
+ can-be-null: never
diff --git a/test/core/Inputs/shared-library-coalesce.objtxt b/test/core/Inputs/shared-library-coalesce.objtxt
new file mode 100644
index 000000000000..57cdfe662d4c
--- /dev/null
+++ b/test/core/Inputs/shared-library-coalesce.objtxt
@@ -0,0 +1,28 @@
+---
+shared-library-atoms:
+ - name: foo2
+ load-name: libc.so
+
+ - name: foo3
+ load-name: libc.so
+
+ - name: bar2
+ load-name: libc.so
+ can-be-null: at-runtime
+
+ - name: bar3
+ load-name: libc.so
+ can-be-null: at-runtime
+
+ - name: mismatchNull1
+ load-name: libc.so
+
+ - name: mismatchNull2
+ load-name: libc.so
+ can-be-null: at-runtime
+
+ - name: mismatchload1
+ load-name: libb.so
+
+ - name: mismatchload2
+ load-name: liba.so
diff --git a/test/core/Inputs/tent-merge.objtxt b/test/core/Inputs/tent-merge.objtxt
new file mode 100644
index 000000000000..90db8fd1f446
--- /dev/null
+++ b/test/core/Inputs/tent-merge.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - name: _foo
+ scope: global
+ type: data
+ content: [ 00, 00, 00, 00 ]
diff --git a/test/core/Inputs/undef-coalesce-error.objtxt b/test/core/Inputs/undef-coalesce-error.objtxt
new file mode 100644
index 000000000000..f493f00bdf1a
--- /dev/null
+++ b/test/core/Inputs/undef-coalesce-error.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: bar
+ type: code
+
+undefined-atoms:
+ - name: malloc
+ - name: myfunc
diff --git a/test/core/Inputs/undef-coalesce-error2.objtxt b/test/core/Inputs/undef-coalesce-error2.objtxt
new file mode 100644
index 000000000000..88d736fc2111
--- /dev/null
+++ b/test/core/Inputs/undef-coalesce-error2.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: myfunc
+ scope: global
+ type: code
+
+undefined-atoms:
+ - name: free
diff --git a/test/core/Inputs/undef-coalesce.objtxt b/test/core/Inputs/undef-coalesce.objtxt
new file mode 100644
index 000000000000..f493f00bdf1a
--- /dev/null
+++ b/test/core/Inputs/undef-coalesce.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: bar
+ type: code
+
+undefined-atoms:
+ - name: malloc
+ - name: myfunc
diff --git a/test/core/Inputs/undef-coalesce2.objtxt b/test/core/Inputs/undef-coalesce2.objtxt
new file mode 100644
index 000000000000..88d736fc2111
--- /dev/null
+++ b/test/core/Inputs/undef-coalesce2.objtxt
@@ -0,0 +1,8 @@
+---
+defined-atoms:
+ - name: myfunc
+ scope: global
+ type: code
+
+undefined-atoms:
+ - name: free
diff --git a/test/core/Inputs/undef-fallback.objtxt b/test/core/Inputs/undef-fallback.objtxt
new file mode 100644
index 000000000000..c392731805cd
--- /dev/null
+++ b/test/core/Inputs/undef-fallback.objtxt
@@ -0,0 +1,7 @@
+defined-atoms:
+ - name: fallback1
+
+undefined-atoms:
+ - name: def1
+ fallback:
+ name: fallback3
diff --git a/test/core/Inputs/undef-weak-coalesce.objtxt b/test/core/Inputs/undef-weak-coalesce.objtxt
new file mode 100644
index 000000000000..7a5e20fad097
--- /dev/null
+++ b/test/core/Inputs/undef-weak-coalesce.objtxt
@@ -0,0 +1,20 @@
+---
+undefined-atoms:
+ - name: bar1
+ can-be-null: never
+ - name: bar2
+ can-be-null: at-runtime
+ - name: bar3
+ can-be-null: at-buildtime
+ - name: bar4
+ can-be-null: at-runtime
+ - name: bar5
+ can-be-null: at-buildtime
+ - name: bar6
+ can-be-null: never
+ - name: bar7
+ can-be-null: at-buildtime
+ - name: bar8
+ can-be-null: never
+ - name: bar9
+ can-be-null: at-runtime
diff --git a/test/core/Inputs/weak-coalesce.objtxt b/test/core/Inputs/weak-coalesce.objtxt
new file mode 100644
index 000000000000..8a1dcdb9c37f
--- /dev/null
+++ b/test/core/Inputs/weak-coalesce.objtxt
@@ -0,0 +1,5 @@
+---
+defined-atoms:
+ - name: _foo
+ scope: global
+ type: data
diff --git a/test/core/Inputs/weak-coalesce2.objtxt b/test/core/Inputs/weak-coalesce2.objtxt
new file mode 100644
index 000000000000..1039b309f8a4
--- /dev/null
+++ b/test/core/Inputs/weak-coalesce2.objtxt
@@ -0,0 +1,6 @@
+---
+defined-atoms:
+ - name: _foo
+ merge: as-weak
+ scope: global
+ type: data
diff --git a/test/core/archive-basic.objtxt b/test/core/archive-basic.objtxt
index ec825c1a7e52..205e0a5034e5 100644
--- a/test/core/archive-basic.objtxt
+++ b/test/core/archive-basic.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/archive-basic.objtxt | FileCheck %s
#
# Tests archives in YAML. Tests that an undefined in a regular file will load
@@ -13,27 +13,6 @@ defined-atoms:
undefined-atoms:
- name: bar
---- !archive
-members:
- - name: bar.o
- content: !native
- defined-atoms:
- - name: bar
- scope: global
- type: code
-
- - name: bar2
- type: code
-
- - name: baz.o
- content: !native
- defined-atoms:
- - name: baz
- scope: global
- type: code
-
- - name: baz2
- type: code
...
# CHECK: name: foo
diff --git a/test/core/archive-chain.objtxt b/test/core/archive-chain.objtxt
index 0f80985ec112..35417f0bdb68 100644
--- a/test/core/archive-chain.objtxt
+++ b/test/core/archive-chain.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/archive-chain.objtxt %p/Inputs/archive-chain2.objtxt | FileCheck %s
#
# Tests that an undefine in one archive can force a load from another archive.
@@ -11,53 +11,6 @@ defined-atoms:
undefined-atoms:
- name: bar1
-
---- !archive
-members:
- - name: bar1.o
- content: !native
- defined-atoms:
- - name: bar1
- scope: global
- type: code
-
- - name: bar1b
- type: code
-
- undefined-atoms:
- - name: baz1
-
- - name: bar2.o
- content: !native
- defined-atoms:
- - name: bar2
- scope: global
- type: code
-
- - name: bar2b
- type: code
-
---- !archive
-members:
- - name: baz1.o
- content: !native
- defined-atoms:
- - name: baz1
- scope: global
- type: code
-
- - name: baz1b
- type: code
-
- - name: baz2.o
- content: !native
- defined-atoms:
- - name: baz2
- scope: global
- type: code
-
- - name: baz2b
- type: code
...
# CHECK: name: foo
diff --git a/test/core/archive-tentdef-search.objtxt b/test/core/archive-tentdef-search.objtxt
index 3d26778e4986..230ab0bfd0de 100644
--- a/test/core/archive-tentdef-search.objtxt
+++ b/test/core/archive-tentdef-search.objtxt
@@ -1,5 +1,5 @@
-# RUN: lld -core %s | FileCheck -check-prefix=CHK1 %s
-# RUN: lld -core --commons-search-archives %s | FileCheck -check-prefix=CHK2 %s
+# RUN: lld -core %s %p/Inputs/archive-tentdef-search.objtxt | FileCheck -check-prefix=CHK1 %s
+# RUN: lld -core --commons-search-archives %s %p/Inputs/archive-tentdef-search.objtxt | FileCheck -check-prefix=CHK2 %s
#
# Tests that -commons-search-archives cause core linker to look for overrides
@@ -16,18 +16,6 @@ defined-atoms:
scope: global
type: zero-fill
merge: as-tentative
-
---- !archive
-members:
- - name: bar.o
- content: !native
- defined-atoms:
- - name: bar
- scope: global
- type: data
-
- - name: bar2
- type: data
...
# CHK1: name: foo
diff --git a/test/core/associates.objtxt b/test/core/associates.objtxt
index bf780693ab70..5c711c97f9fa 100644
--- a/test/core/associates.objtxt
+++ b/test/core/associates.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/associates.objtxt | FileCheck %s
---
defined-atoms:
@@ -9,15 +9,6 @@ defined-atoms:
- kind: associate
target: f2
- name: f2
----
-defined-atoms:
- - name: f1
- merge: as-weak
- scope: global
- references:
- - kind: associate
- target: f2
- - name: f2
...
# CHECK: defined-atoms:
diff --git a/test/core/auto-hide-coalesce.objtxt b/test/core/auto-hide-coalesce.objtxt
index ad82d5afc573..63c54951150e 100644
--- a/test/core/auto-hide-coalesce.objtxt
+++ b/test/core/auto-hide-coalesce.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/auto-hide-coalesce.objtxt | FileCheck %s
#
# Tests auto-hide bit during coalescing
@@ -25,27 +25,6 @@ defined-atoms:
scope: global
type: code
merge: as-addressed-weak
----
-defined-atoms:
- - name: _inlineFunc1
- scope: global
- type: code
- merge: as-weak
-
- - name: _inlineFunc2
- scope: global
- type: code
- merge: as-addressed-weak
-
- - name: _inlineFunc3
- scope: global
- type: code
- merge: as-weak
-
- - name: _inlineFunc4
- scope: global
- type: code
- merge: as-addressed-weak
...
diff --git a/test/core/code-model-attributes.objtxt b/test/core/code-model-attributes.objtxt
index 8c30e868567d..9bb4a01bd1a7 100644
--- a/test/core/code-model-attributes.objtxt
+++ b/test/core/code-model-attributes.objtxt
@@ -1,5 +1,8 @@
-# RUN: lld -core %s | FileCheck %s
-
+# RUN: lld -core %s %p/Inputs/code-model-attributes.objtxt \
+# RUN: %p/Inputs/code-model-attributes2.objtxt \
+# RUN: %p/Inputs/code-model-attributes3.objtxt \
+# RUN: %p/Inputs/code-model-attributes4.objtxt \
+# RUN: %p/Inputs/code-model-attributes5.objtxt | FileCheck %s
#
# Test that code model attributes are preserved
#
@@ -7,26 +10,6 @@
---
defined-atoms:
- name: _def
----
-defined-atoms:
- - name: _none
- code-model: none
----
-defined-atoms:
- - name: _mips_pic
- code-model: mips-pic
----
-defined-atoms:
- - name: _mips_micro
- code-model: mips-micro
----
-defined-atoms:
- - name: _mips_micro_pic
- code-model: mips-micro-pic
----
-defined-atoms:
- - name: _mips_16
- code-model: mips-16
...
# CHECK: name: _def
diff --git a/test/core/constants-coalesce.objtxt b/test/core/constants-coalesce.objtxt
index a82f68009087..1a9f1013e6ec 100644
--- a/test/core/constants-coalesce.objtxt
+++ b/test/core/constants-coalesce.objtxt
@@ -1,4 +1,5 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/constants-coalesce.objtxt \
+# RUN: %p/Inputs/constants-coalesce2.objtxt | FileCheck %s
#
# Test that duplicate merge-by-content anonymous constants are coalesced
@@ -20,25 +21,6 @@ defined-atoms:
- ref-name: L1
type: constant
content: [ 01, 02 ]
----
-defined-atoms:
- - ref-name: L1
- type: constant
- content: [ 01, 02 ]
- - ref-name: L2
- type: constant
- merge: by-content
- content: [ 01, 02, 03, 04 ]
----
-defined-atoms:
- - ref-name: L2
- type: constant
- merge: by-content
- content: [ 01, 23, 45, 67, 89, AB, CD, EF ]
- - ref-name: L3
- type: constant
- merge: by-content
- content: [ 01, 02, 03 ]
...
# CHECK-NOT: name:
diff --git a/test/core/cstring-coalesce.objtxt b/test/core/cstring-coalesce.objtxt
index 78986a08c640..4d32c00daf82 100644
--- a/test/core/cstring-coalesce.objtxt
+++ b/test/core/cstring-coalesce.objtxt
@@ -15,18 +15,6 @@ defined-atoms:
type: c-string
merge: by-content
content: [ 74, 68, 65, 72, 65, 00 ]
----
-defined-atoms:
- - ref-name: L2
- type: c-string
- merge: by-content
- content: [ 68, 65, 6c, 6c, 6f, 00 ]
----
-defined-atoms:
- - ref-name: L2
- type: c-string
- merge: by-content
- content: [ 74, 68, 65, 72, 65, 00 ]
...
# CHECK-NOT: name:
diff --git a/test/core/custom-section-coalesce.objtxt b/test/core/custom-section-coalesce.objtxt
index e9bada56938d..fcf04845a7dd 100644
--- a/test/core/custom-section-coalesce.objtxt
+++ b/test/core/custom-section-coalesce.objtxt
@@ -1,4 +1,5 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/custom-section-coalesce.objtxt \
+# RUN: %p/Inputs/custom-section-coalesce2.objtxt | FileCheck %s
#
# Test that custom sections are preserved when duplicate merge-by-content
@@ -25,35 +26,6 @@ defined-atoms:
type: constant
merge: by-content
content: [ 01, 02, 03, 04 ]
-
----
-defined-atoms:
- - ref-name: L1
- type: constant
- merge: by-content
- content: [ 01, 02, 03, 04 ]
- section-choice: custom-required
- section-name: .mysection
-
- - ref-name: L2
- type: constant
- merge: by-content
- content: [ 01, 02, 03, 04 ]
- section-choice: custom-required
- section-name: .mysection2
----
-defined-atoms:
- - ref-name: L1
- type: constant
- merge: by-content
- content: [ 05, 06, 07, 08 ]
- section-choice: custom-required
- section-name: .mysection
-
- - ref-name: L2
- type: constant
- merge: by-content
- content: [ 01, 02, 03, 04 ]
...
diff --git a/test/core/dead-strip-attributes.objtxt b/test/core/dead-strip-attributes.objtxt
index dcb35a21e261..2a1c97627d2b 100644
--- a/test/core/dead-strip-attributes.objtxt
+++ b/test/core/dead-strip-attributes.objtxt
@@ -1,4 +1,5 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/dead-strip-attributes.objtxt \
+# RUN: %p/Inputs/dead-strip-attributes2.objtxt | FileCheck %s
#
# Test that dead strip attributes are preserved
@@ -8,14 +9,6 @@
defined-atoms:
- name: _foo1
dead-strip: normal
----
-defined-atoms:
- - name: _foo2
- dead-strip: never
----
-defined-atoms:
- - name: _foo3
- dead-strip: always
...
diff --git a/test/core/dead-strip-basic.objtxt b/test/core/dead-strip-basic.objtxt
index 64cd2291c76b..1607ea9e5b89 100644
--- a/test/core/dead-strip-basic.objtxt
+++ b/test/core/dead-strip-basic.objtxt
@@ -1,5 +1,5 @@
-# RUN: lld -core --dead-strip %s | FileCheck -check-prefix=CHK1 %s
-# RUN: lld -core %s | FileCheck -check-prefix=CHK2 %s
+# RUN: lld -core --dead-strip %s %p/Inputs/dead-strip-basic.objtxt %p/Inputs/dead-strip-basic2.objtxt | FileCheck -check-prefix=CHK1 %s
+# RUN: lld -core %s %p/Inputs/dead-strip-basic.objtxt %p/Inputs/dead-strip-basic2.objtxt | FileCheck -check-prefix=CHK2 %s
#
# Test that -dead-strip removes unreachable code and data
@@ -25,23 +25,6 @@ undefined-atoms:
- name: bar
- name: baz
----
-defined-atoms:
- - name: mydead2
- scope: global
- type: data
-
- - name: bar
- scope: global
- type: data
----
-defined-atoms:
- - name: baz
- scope: global
- type: code
-
- - name: mydead3
- type: code
...
diff --git a/test/core/dead-strip-globals.objtxt b/test/core/dead-strip-globals.objtxt
index 8feb235d07c3..e4b11b16f690 100644
--- a/test/core/dead-strip-globals.objtxt
+++ b/test/core/dead-strip-globals.objtxt
@@ -1,5 +1,5 @@
-# RUN: lld -core --dead-strip --keep-globals %s | FileCheck -check-prefix=CHK1 %s
-# RUN: lld -core --dead-strip %s | FileCheck -check-prefix=CHK2 %s
+# RUN: lld -core --dead-strip --keep-globals %s %p/Inputs/dead-strip-globals.objtxt %p/Inputs/dead-strip-globals2.objtxt | FileCheck -check-prefix=CHK1 %s
+# RUN: lld -core --dead-strip %s %p/Inputs/dead-strip-globals.objtxt %p/Inputs/dead-strip-globals2.objtxt | FileCheck -check-prefix=CHK2 %s
#
# Test that -keep-globals prevents -dead-strip from removing globals.
@@ -23,23 +23,6 @@ defined-atoms:
undefined-atoms:
- name: bar
- name: baz
----
-defined-atoms:
- - name: myglobal2
- scope: global
- type: data
-
- - name: bar
- scope: hidden
- type: data
----
-defined-atoms:
- - name: baz
- scope: hidden
- type: code
-
- - name: mydead
- type: code
...
diff --git a/test/core/error-duplicate-absolutes.objtxt b/test/core/error-duplicate-absolutes.objtxt
index 533297e59dcd..513a2f494485 100644
--- a/test/core/error-duplicate-absolutes.objtxt
+++ b/test/core/error-duplicate-absolutes.objtxt
@@ -1,4 +1,4 @@
-# RUN: not lld -core %s 2> %t.err
+# RUN: not lld -core %s %p/Inputs/error-duplicate-absolutes.objtxt 2> %t.err
# RUN: FileCheck %s < %t.err
#
@@ -12,11 +12,6 @@ absolute-atoms:
scope: global
undefined-atoms:
- name: undefatom
----
-absolute-atoms:
- - name: absatom
- value: 0
- scope: global
...
diff --git a/test/core/gnulinkonce-rearrange-resolve.objtxt b/test/core/gnulinkonce-rearrange-resolve.objtxt
index 2a6386a6935d..b3df078d2314 100644
--- a/test/core/gnulinkonce-rearrange-resolve.objtxt
+++ b/test/core/gnulinkonce-rearrange-resolve.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/gnulinkonce-rearrange-resolve.objtxt | FileCheck %s
#
# Test that gnu linkonce sections are parsed and the first section selected for symbol
@@ -31,32 +31,6 @@ defined-atoms:
- name: d1
scope: global
type: data
----
-defined-atoms:
- - name: g1
- scope: global
- type: gnu-linkonce
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
...
# CHECK: defined-atoms:
diff --git a/test/core/gnulinkonce-remaining-undef.objtxt b/test/core/gnulinkonce-remaining-undef.objtxt
index 490608209ba9..5fe0ab55b5c0 100644
--- a/test/core/gnulinkonce-remaining-undef.objtxt
+++ b/test/core/gnulinkonce-remaining-undef.objtxt
@@ -1,4 +1,5 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/gnulinkonce-remaining-undef.objtxt \
+# RUN: %p/Inputs/gnulinkonce-remaining-undef2.objtxt | FileCheck %s
#
# Test that gnu linkonce sections are parsed and the first section selected for
@@ -33,44 +34,6 @@ defined-atoms:
target: g1
- kind: group-child
target: d1
----
-defined-atoms:
- - name: anotherfunction
- scope: global
- type: data
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: f3
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
- - name: g1
- scope: global
- type: gnu-linkonce
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: f3
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
----
-undefined-atoms:
- - name: f3
- can-be-null: never
...
#CHECK: - name: anotherfunction
diff --git a/test/core/gnulinkonce-resolve.objtxt b/test/core/gnulinkonce-resolve.objtxt
index 817e9cfdd4e0..e926c39bd0e1 100644
--- a/test/core/gnulinkonce-resolve.objtxt
+++ b/test/core/gnulinkonce-resolve.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/gnulinkonce-resolve.objtxt | FileCheck %s
#
# Test that gnu linkonce sections are parsed and the first section selected for symbol
@@ -31,32 +31,6 @@ defined-atoms:
target: g1
- kind: group-child
target: d1
----
-defined-atoms:
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
- - name: g1
- scope: global
- type: gnu-linkonce
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
...
#CHECK: defined-atoms:
diff --git a/test/core/gnulinkonce-simple.objtxt b/test/core/gnulinkonce-simple.objtxt
index da325d48c366..0576e5f75d7f 100644
--- a/test/core/gnulinkonce-simple.objtxt
+++ b/test/core/gnulinkonce-simple.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/gnulinkonce-simple.objtxt | FileCheck %s
#
# Test that gnu linkonce sections are parsed properly when there is a reference to a
@@ -37,10 +37,6 @@ defined-atoms:
- name: anotherfunction
scope: global
type: data
----
-undefined-atoms:
- - name: f1
- can-be-null: never
...
#CHECK: defined-atoms:
diff --git a/test/core/inline-coalesce.objtxt b/test/core/inline-coalesce.objtxt
index 6df9d0e7a49a..5ddc9b2624b5 100644
--- a/test/core/inline-coalesce.objtxt
+++ b/test/core/inline-coalesce.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/inline-coalesce.objtxt %p/Inputs/inline-coalesce2.objtxt | FileCheck %s
#
# Test that non-inlined inlined functions are silently coalesced
@@ -10,18 +10,6 @@ defined-atoms:
scope: global
type: code
merge: as-weak
----
-defined-atoms:
- - name: _inlineFunc
- scope: global
- type: code
- merge: as-weak
----
-defined-atoms:
- - name: _inlineFunc
- scope: global
- type: code
- merge: as-weak
...
diff --git a/test/core/multiple-def-error.objtxt b/test/core/multiple-def-error.objtxt
index 7c7732c15fd9..5765814e53ee 100644
--- a/test/core/multiple-def-error.objtxt
+++ b/test/core/multiple-def-error.objtxt
@@ -1,4 +1,4 @@
-# RUN: not lld -core %s 2>&1 | FileCheck %s
+# RUN: not lld -core %s %p/Inputs/multiple-def-error.objtxt 2>&1 | FileCheck %s
#
# Test that multiple definitions cause an error
@@ -11,9 +11,4 @@ defined-atoms:
- name: _foo
scope: global
type: data
----
-defined-atoms:
- - name: _foo
- scope: global
- type: data
...
diff --git a/test/core/sectiongroup-deadstrip.objtxt b/test/core/sectiongroup-deadstrip.objtxt
index 8606c52d62e1..5055c6e06b69 100644
--- a/test/core/sectiongroup-deadstrip.objtxt
+++ b/test/core/sectiongroup-deadstrip.objtxt
@@ -1,6 +1,6 @@
# Test for section group members be preserved even if there is a
# reference to only one functions in the group.
-# RUN: lld -core --dead-strip %s | FileCheck %s
+# RUN: lld -core --dead-strip %s %p/Inputs/sectiongroup-deadstrip.objtxt | FileCheck %s
#
# Test that section groups are parsed properly when there is a reference to a
@@ -45,10 +45,6 @@ defined-atoms:
- name: anotherfunction
scope: global
type: data
----
-undefined-atoms:
- - name: f1
- can-be-null: never
...
#CHECK: defined-atoms:
diff --git a/test/core/sectiongroup-gnulinkonce-error.objtxt b/test/core/sectiongroup-gnulinkonce-error.objtxt
index 47598957f8df..1b8617067839 100644
--- a/test/core/sectiongroup-gnulinkonce-error.objtxt
+++ b/test/core/sectiongroup-gnulinkonce-error.objtxt
@@ -1,4 +1,4 @@
-# RUN: not lld -core %s 2>&1 | FileCheck %s
+# RUN: not lld -core %s %p/Inputs/sectiongroup-gnulinkonce-error.objtxt 2>&1 | FileCheck %s
#
# Test that section groups/gnu linkonce sections are parsed and a merge error
@@ -31,32 +31,6 @@ defined-atoms:
target: g1
- kind: group-child
target: d1
----
-defined-atoms:
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
- - name: g1
- scope: global
- type: gnu-linkonce
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
...
#CHECK: SymbolTable: error while merging g1
diff --git a/test/core/sectiongroup-rearrange-resolve.objtxt b/test/core/sectiongroup-rearrange-resolve.objtxt
index 7f5d2603775b..f191113718df 100644
--- a/test/core/sectiongroup-rearrange-resolve.objtxt
+++ b/test/core/sectiongroup-rearrange-resolve.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/sectiongroup-rearrange-resolve.objtxt | FileCheck %s
#
# Test that section groups are parsed and the first group selected for symbol
@@ -31,32 +31,6 @@ defined-atoms:
- name: d1
scope: global
type: data
----
-defined-atoms:
- - name: g1
- scope: global
- type: group-comdat
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
...
# CHECK: defined-atoms:
diff --git a/test/core/sectiongroup-remaining-undef.objtxt b/test/core/sectiongroup-remaining-undef.objtxt
index 7d889b8a4931..0a292040a354 100644
--- a/test/core/sectiongroup-remaining-undef.objtxt
+++ b/test/core/sectiongroup-remaining-undef.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/sectiongroup-remaining-undef.objtxt %p/Inputs/sectiongroup-remaining-undef2.objtxt | FileCheck %s
#
# Test that section groups are parsed and the first group selected for symbol
@@ -33,44 +33,6 @@ defined-atoms:
target: g1
- kind: group-child
target: d1
----
-defined-atoms:
- - name: anotherfunction
- scope: global
- type: data
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: f3
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
- - name: g1
- scope: global
- type: group-comdat
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: f3
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
----
-undefined-atoms:
- - name: f3
- can-be-null: never
...
#CHECK: - name: anotherfunction
diff --git a/test/core/sectiongroup-resolve.objtxt b/test/core/sectiongroup-resolve.objtxt
index 2d481b1818b2..52197dbb4e91 100644
--- a/test/core/sectiongroup-resolve.objtxt
+++ b/test/core/sectiongroup-resolve.objtxt
@@ -31,32 +31,6 @@ defined-atoms:
target: g1
- kind: group-child
target: d1
----
-defined-atoms:
- - name: f1
- scope: global
- type: code
- - name: f2
- scope: global
- type: code
- - name: g1
- scope: global
- type: code
- - name: d1
- scope: global
- type: data
- - name: g1
- scope: global
- type: group-comdat
- references:
- - kind: group-child
- target: f1
- - kind: group-child
- target: f2
- - kind: group-child
- target: g1
- - kind: group-child
- target: d1
...
#CHECK: defined-atoms:
diff --git a/test/core/sectiongroup-simple.objtxt b/test/core/sectiongroup-simple.objtxt
index 9f0ff9581c1d..d81b1a1b313c 100644
--- a/test/core/sectiongroup-simple.objtxt
+++ b/test/core/sectiongroup-simple.objtxt
@@ -37,10 +37,6 @@ defined-atoms:
- name: anotherfunction
scope: global
type: data
----
-undefined-atoms:
- - name: f1
- can-be-null: never
...
#CHECK: defined-atoms:
diff --git a/test/core/shared-library-coalesce.objtxt b/test/core/shared-library-coalesce.objtxt
index 51ff93e87a88..1cd25d18f881 100644
--- a/test/core/shared-library-coalesce.objtxt
+++ b/test/core/shared-library-coalesce.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/shared-library-coalesce.objtxt | FileCheck %s
#
# Test that shared library symbols preserve their attributes and merge properly
@@ -33,35 +33,6 @@ shared-library-atoms:
- name: mismatchload2
load-name: libb.so
----
-shared-library-atoms:
- - name: foo2
- load-name: libc.so
-
- - name: foo3
- load-name: libc.so
-
- - name: bar2
- load-name: libc.so
- can-be-null: at-runtime
-
- - name: bar3
- load-name: libc.so
- can-be-null: at-runtime
-
- - name: mismatchNull1
- load-name: libc.so
-
- - name: mismatchNull2
- load-name: libc.so
- can-be-null: at-runtime
-
- - name: mismatchload1
- load-name: libb.so
-
- - name: mismatchload2
- load-name: liba.so
-
...
# CHECK: name: foo1
diff --git a/test/core/tent-merge.objtxt b/test/core/tent-merge.objtxt
index 8ad46d40ae18..8997be2833b1 100644
--- a/test/core/tent-merge.objtxt
+++ b/test/core/tent-merge.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/tent-merge.objtxt | FileCheck %s
#
# Test that a tentative definition and a regular global are merged into
@@ -12,12 +12,6 @@ defined-atoms:
scope: global
type: zero-fill
size: 4
----
-defined-atoms:
- - name: _foo
- scope: global
- type: data
- content: [ 00, 00, 00, 00 ]
...
diff --git a/test/core/undef-coalesce-error.objtxt b/test/core/undef-coalesce-error.objtxt
index a0485befd288..f0ad8d8555ab 100644
--- a/test/core/undef-coalesce-error.objtxt
+++ b/test/core/undef-coalesce-error.objtxt
@@ -1,6 +1,6 @@
-# RUN: not lld -core --undefines-are-errors %s 2> %t.err
+# RUN: not lld -core --undefines-are-errors %s %p/Inputs/undef-coalesce-error.objtxt %p/Inputs/undef-coalesce-error2.objtxt 2> %t.err
# RUN: FileCheck -check-prefix=CHECKERR %s < %t.err
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/undef-coalesce-error.objtxt %p/Inputs/undef-coalesce-error2.objtxt | FileCheck %s
#
# Test that -undefines-are-errors triggers and error
@@ -15,22 +15,6 @@ defined-atoms:
undefined-atoms:
- name: malloc
- name: free
----
-defined-atoms:
- - name: bar
- type: code
-
-undefined-atoms:
- - name: malloc
- - name: myfunc
----
-defined-atoms:
- - name: myfunc
- scope: global
- type: code
-
-undefined-atoms:
- - name: free
...
# CHECKERR: free
diff --git a/test/core/undef-coalesce.objtxt b/test/core/undef-coalesce.objtxt
index 822ed5acf191..b0ea2b928977 100644
--- a/test/core/undef-coalesce.objtxt
+++ b/test/core/undef-coalesce.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/undef-coalesce.objtxt %p/Inputs/undef-coalesce2.objtxt | FileCheck %s
#
# Test that undefined symbols are coalesced with other undefined symbols
@@ -13,22 +13,6 @@ defined-atoms:
undefined-atoms:
- name: malloc
- name: free
----
-defined-atoms:
- - name: bar
- type: code
-
-undefined-atoms:
- - name: malloc
- - name: myfunc
----
-defined-atoms:
- - name: myfunc
- scope: global
- type: code
-
-undefined-atoms:
- - name: free
...
# CHECK: defined-atoms:
diff --git a/test/core/undef-fallback.objtxt b/test/core/undef-fallback.objtxt
index 8abaa93c8e8d..aef7b6d7c26f 100644
--- a/test/core/undef-fallback.objtxt
+++ b/test/core/undef-fallback.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %p/undef-fallback.objtxt %p/Inputs/undef-fallback.objtxt | FileCheck %s
# Test that fallback atoms can be parsed by YAML reader and processed by the
# core linker.
@@ -15,14 +15,6 @@ undefined-atoms:
- name: undef2
fallback:
name: fallback2
----
-defined-atoms:
- - name: fallback1
-
-undefined-atoms:
- - name: def1
- fallback:
- name: fallback3
...
# CHECK: defined-atoms:
diff --git a/test/core/undef-weak-coalesce.objtxt b/test/core/undef-weak-coalesce.objtxt
index 97e0fd28500d..d46a05cb95cf 100644
--- a/test/core/undef-weak-coalesce.objtxt
+++ b/test/core/undef-weak-coalesce.objtxt
@@ -1,4 +1,4 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/undef-weak-coalesce.objtxt| FileCheck %s
#
# Test that undefined symbols preserve their attributes and merge properly
@@ -30,26 +30,6 @@ undefined-atoms:
can-be-null: at-runtime
- name: bar9
can-be-null: at-buildtime
----
-undefined-atoms:
- - name: bar1
- can-be-null: never
- - name: bar2
- can-be-null: at-runtime
- - name: bar3
- can-be-null: at-buildtime
- - name: bar4
- can-be-null: at-runtime
- - name: bar5
- can-be-null: at-buildtime
- - name: bar6
- can-be-null: never
- - name: bar7
- can-be-null: at-buildtime
- - name: bar8
- can-be-null: never
- - name: bar9
- can-be-null: at-runtime
...
# CHECK: - name: regular_func
diff --git a/test/core/weak-coalesce.objtxt b/test/core/weak-coalesce.objtxt
index 550c10cfa468..e92aedeb4f15 100644
--- a/test/core/weak-coalesce.objtxt
+++ b/test/core/weak-coalesce.objtxt
@@ -1,20 +1,6 @@
-# RUN: lld -core %s | FileCheck %s
+# RUN: lld -core %s %p/Inputs/weak-coalesce.objtxt \
+# RUN: %p/Inputs/weak-coalesce2.objtxt | FileCheck %s
-#
-# Test that weak definitions are coalesced away in favor of a regular definition
-#
-
----
-defined-atoms:
- - name: _foo
- merge: as-weak
- scope: global
- type: data
----
-defined-atoms:
- - name: _foo
- scope: global
- type: data
---
defined-atoms:
- name: _foo
diff --git a/test/darwin/Inputs/native-and-mach-o.objtxt b/test/darwin/Inputs/native-and-mach-o.objtxt
new file mode 100644
index 000000000000..58124eb83321
--- /dev/null
+++ b/test/darwin/Inputs/native-and-mach-o.objtxt
@@ -0,0 +1,17 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS ]
+ address: 0
+ content: [ 0xC3 ]
+global-symbols:
+ - name: _foo
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ ]
+ value: 0
diff --git a/test/darwin/Inputs/native-and-mach-o2.objtxt b/test/darwin/Inputs/native-and-mach-o2.objtxt
new file mode 100644
index 000000000000..344c9bc0b0d2
--- /dev/null
+++ b/test/darwin/Inputs/native-and-mach-o2.objtxt
@@ -0,0 +1,19 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ ]
+install-name: /usr/lib/libSystem.B.dylib
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000000
+ content: [ 0x55 ]
+
+global-symbols:
+ - name: dyld_stub_binder
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
diff --git a/test/darwin/native-and-mach-o.objtxt b/test/darwin/native-and-mach-o.objtxt
index 20f2d0b96207..1dee76d6d8cd 100644
--- a/test/darwin/native-and-mach-o.objtxt
+++ b/test/darwin/native-and-mach-o.objtxt
@@ -1,4 +1,6 @@
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -o %t && \
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/native-and-mach-o.objtxt \
+# RUN: %p/Inputs/native-and-mach-o2.objtxt -o %t && \
# RUN: llvm-nm %t | FileCheck %s
#
# Test a mix of atoms and mach-o both encoded in yaml
@@ -19,46 +21,6 @@ defined-atoms:
undefined-atoms:
- name: _foo
-
---- !mach-o
-arch: x86_64
-file-type: MH_OBJECT
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS ]
- address: 0
- content: [ 0xC3 ]
-global-symbols:
- - name: _foo
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- desc: [ ]
- value: 0
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ ]
-install-name: /usr/lib/libSystem.B.dylib
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000000
- content: [ 0x55 ]
-
-global-symbols:
- - name: dyld_stub_binder
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
-
-
...
# CHECK: {{[0-9a-f]+}} T _foo
diff --git a/test/elf/AArch64/defsym.test b/test/elf/AArch64/defsym.test
deleted file mode 100644
index 8bf492d4a38a..000000000000
--- a/test/elf/AArch64/defsym.test
+++ /dev/null
@@ -1,22 +0,0 @@
-RUN: lld -flavor gnu -target aarch64--linux-gnu --defsym=main=fn \
-RUN: --noinhibit-exec %p/Inputs/fn.o -o %t
-RUN: llvm-readobj -symbols %t | FileCheck %s
-
-CHECK: Symbol {
-CHECK: Name: main (1)
-CHECK: Value: 0x4001A4
-CHECK: Size: 0
-CHECK: Binding: Global (0x1)
-CHECK: Type: Function (0x2)
-CHECK: Other: 0
-CHECK: Section: .text (0x5)
-CHECK: }
-CHECK: Symbol {
-CHECK: Name: fn (11)
-CHECK: Value: 0x4001A4
-CHECK: Size: 8
-CHECK: Binding: Global (0x1)
-CHECK: Type: Function (0x2)
-CHECK: Other: 0
-CHECK: Section: .text (0x5)
-CHECK: }
diff --git a/test/elf/AArch64/dontignorezerosize-sections.test b/test/elf/AArch64/dontignorezerosize-sections.test
deleted file mode 100644
index ac593abcc368..000000000000
--- a/test/elf/AArch64/dontignorezerosize-sections.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# This tests that lld is not ignoring zero sized sections
-RUN: lld -flavor gnu -target aarch64--linux-gnu %p/Inputs/zerosizedsection.o \
-RUN: --noinhibit-exec --output-filetype=yaml -o %t
-RUN: FileCheck %s < %t
-
-CHECK: references:
-CHECK: - kind: layout-after
-CHECK: offset: 0
-CHECK: target: L000
diff --git a/test/elf/AArch64/dynlib-nointerp-section.test b/test/elf/AArch64/dynlib-nointerp-section.test
deleted file mode 100644
index 9365b4d5b3e9..000000000000
--- a/test/elf/AArch64/dynlib-nointerp-section.test
+++ /dev/null
@@ -1,5 +0,0 @@
-RUN: lld -flavor gnu -target aarch64--linux-gnu %p/Inputs/no-interp-section.o \
-RUN: -o %t -shared
-RUN: llvm-objdump -section-headers %t | FileCheck %s
-
-CHECK-NOT: .interp
diff --git a/test/elf/AArch64/initfini.test b/test/elf/AArch64/initfini.test
deleted file mode 100644
index 887e44ea105b..000000000000
--- a/test/elf/AArch64/initfini.test
+++ /dev/null
@@ -1,23 +0,0 @@
-# This tests the functionality that lld is able to read
-# init_array/fini_array sections in the input ELF. This
-# corresponds to the the .init_array/.fini_array sections
-# in the output ELF.
-
-RUN: lld -flavor gnu -target aarch64--linux-gnu %p/Inputs/initfini.o \
-RUN: --noinhibit-exec --output-filetype=yaml -o %t
-RUN: FileCheck %s < %t
-
-CHECK: type: data
-CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECK: section-name: .init_array
-CHECK: references:
-CHECK: - kind: R_AARCH64_ABS64
-CHECK: offset: 0
-CHECK: target: constructor
-CHECK: type: data
-CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECK: section-name: .fini_array
-CHECK: references:
-CHECK: - kind: R_AARCH64_ABS64
-CHECK: offset: 0
-CHECK: target: destructor
diff --git a/test/elf/AArch64/rel-abs32-overflow.test b/test/elf/AArch64/rel-abs32-overflow.test
deleted file mode 100644
index e32fce173c51..000000000000
--- a/test/elf/AArch64/rel-abs32-overflow.test
+++ /dev/null
@@ -1,53 +0,0 @@
-# Check handling of R_AARCH64_ABS32 relocation overflow.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: not lld -flavor gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
-
-# CHECK-DAG: Relocation out of range in file {{.*}}: reference from data1+0 to data2+34359738369 of type 258 (R_AARCH64_ABS32)
-# CHECK-DAG: Relocation out of range in file {{.*}}: reference from data2+0 to data1+34359738369 of type 258 (R_AARCH64_ABS32)
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 8
- Relocations:
- - Offset: 0x0
- Symbol: data2
- Type: R_AARCH64_ABS32
- Addend: 0x800000001
- - Offset: 0x4
- Symbol: data1
- Type: R_AARCH64_ABS32
- Addend: 0x800000001
-
-Symbols:
- Global:
- - Name: _start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Size: 4
- - Name: data2
- Section: .data
- Value: 0x4
- Size: 4
diff --git a/test/elf/AArch64/rel-abs32.test b/test/elf/AArch64/rel-abs32.test
deleted file mode 100644
index edd7b69e428d..000000000000
--- a/test/elf/AArch64/rel-abs32.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_AARCH64_ABS32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target arm64 -o %t-exe %t-obj
-# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 401060 65104080 61104080 e.@.a.@.
-# ^^ data2 + 0x80000001 = 0x80401069
-# ^^ data1 + 0x80000001 = 0x80401061
-# CHECK: SYMBOL TABLE:
-# CHECK: 00401060 g .data 00000004 data1
-# CHECK: 00401064 g .data 00000004 data2
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 8
- Relocations:
- - Offset: 0x0
- Symbol: data2
- Type: R_AARCH64_ABS32
- Addend: 0x80000001
- - Offset: 0x4
- Symbol: data1
- Type: R_AARCH64_ABS32
- Addend: 0x80000001
-
-Symbols:
- Global:
- - Name: _start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Size: 4
- - Name: data2
- Section: .data
- Value: 0x4
- Size: 4
diff --git a/test/elf/AArch64/rel-abs64.test b/test/elf/AArch64/rel-abs64.test
deleted file mode 100644
index c125e3f2450d..000000000000
--- a/test/elf/AArch64/rel-abs64.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_AARCH64_ABS64 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target arm64 -o %t-exe %t-obj
-# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 401060 69104000 00000080 61104000 00000080 i.@.....a.@.....
-# ^^ data2 + 0x8000000000000001 = 0x8000000000401069
-# ^^ data1 + 0x8000000000000001 = 0x8000000000401061
-# CHECK: SYMBOL TABLE:
-# CHECK: 00401060 g .data 00000008 data1
-# CHECK: 00401068 g .data 00000008 data2
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "00000000000000000000000000000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 8
- Relocations:
- - Offset: 0x0
- Symbol: data2
- Type: R_AARCH64_ABS64
- Addend: -9223372036854775807
- - Offset: 0x8
- Symbol: data1
- Type: R_AARCH64_ABS64
- Addend: -9223372036854775807
-
-Symbols:
- Global:
- - Name: _start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Size: 8
- - Name: data2
- Section: .data
- Value: 0x8
- Size: 8
diff --git a/test/elf/AArch64/rel-bad.test b/test/elf/AArch64/rel-bad.test
deleted file mode 100644
index 6b9e831146f3..000000000000
--- a/test/elf/AArch64/rel-bad.test
+++ /dev/null
@@ -1,44 +0,0 @@
-# Check handling of a bad relocation (in this case dynamic in a static object).
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: not lld -flavor gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
-
-# CHECK: Unhandled reference type in file {{.*}}: reference from data1+4 to data1+0 of type 1024 (R_AARCH64_COPY)
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 8
- Relocations:
- - Offset: 0x4
- Symbol: data1
- Type: R_AARCH64_COPY
- Addend: 0
-
-Symbols:
- Global:
- - Name: _start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Size: 8
diff --git a/test/elf/ARM/arm-symbols.test b/test/elf/ARM/arm-symbols.test
deleted file mode 100644
index b99960697679..000000000000
--- a/test/elf/ARM/arm-symbols.test
+++ /dev/null
@@ -1,52 +0,0 @@
-# Check that symbols formed from ARM instructions are valid:
-# 1. Symbol address.
-# 2. Symbol content size.
-# 3. Symbol content.
-
-# RUN: yaml2obj -format=elf %s > %t-a.o
-# RUN: lld -flavor gnu -target arm-linux-gnu \
-# RUN: -Bstatic --noinhibit-exec %t-a.o -o %t-a
-# RUN: llvm-readobj -symbols %t-a | FileCheck -check-prefix=SYM-ADDR %s
-# RUN: llvm-readobj -symbols %t-a | FileCheck -check-prefix=SYM-SIZE %s
-# RUN: llvm-objdump -s -t %t-a | FileCheck -check-prefix=SYM-CONTENT %s
-
-# SYM-ADDR: Name: main (1)
-# SYM-ADDR-NEXT: Value: 0x400074
-
-# SYM-SIZE: Name: main (1)
-# SYM-SIZE-NEXT: Value: 0x{{[0-9a-f]+}}
-# SYM-SIZE-NEXT: Size: 28
-
-# SYM-CONTENT: Contents of section .text:
-# SYM-CONTENT-NEXT: 400074 04b02de5 00b08de2 0030a0e3 0300a0e1 ..-......0......
-# SYM-CONTENT-NEXT: 400084 00d04be2 04b09de4 1eff2fe1 ..K......./.
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
-...
diff --git a/test/elf/ARM/defsym.test b/test/elf/ARM/defsym.test
deleted file mode 100644
index 0cd1736d924e..000000000000
--- a/test/elf/ARM/defsym.test
+++ /dev/null
@@ -1,51 +0,0 @@
-# Check that defined symbols are present in the generated executable
-
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm-linux-gnu --defsym=main=fn \
-# RUN: -Bstatic --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-readobj -symbols %t | FileCheck %s
-
-# CHECK: Name: main (1)
-# CHECK-NEXT: Value: 0x400074
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x1)
-# CHECK: Name: fn (6)
-# CHECK-NEXT: Value: 0x400074
-# CHECK-NEXT: Size: {{[0-9]+}}
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x1)
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: fn
- Type: STT_FUNC
- Section: .text
-...
diff --git a/test/elf/ARM/entry-point.test b/test/elf/ARM/entry-point.test
deleted file mode 100644
index d168bb6463c6..000000000000
--- a/test/elf/ARM/entry-point.test
+++ /dev/null
@@ -1,77 +0,0 @@
-# 1. Check entry point address for ARM code - should be even.
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-arm.o -o %t-arm
-# RUN: llvm-readobj -file-headers %t-arm | FileCheck -check-prefix=ARM-ENTRY %s
-#
-# ARM-ENTRY: Entry: 0x400074
-
-# 2. Check entry point address for Thumb code - should be odd.
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-thm.o -o %t-thm
-# RUN: llvm-readobj -file-headers %t-thm | FileCheck -check-prefix=THM-ENTRY %s
-#
-# THM-ENTRY: Entry: 0x400075
-
-# arm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
-
-# thm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF00231846BD465DF8047B7047
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
-...
diff --git a/test/elf/ARM/missing-symbol.test b/test/elf/ARM/missing-symbol.test
deleted file mode 100644
index f9b3e26ea1a3..000000000000
--- a/test/elf/ARM/missing-symbol.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# Check that _MISSING_SYMBOL_ symbol is not resolved
-
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t 2>&1 | FileCheck %s
-
-# CHECK: Undefined symbol: {{.*}}: _MISSING_SYMBOL_
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: _MISSING_SYMBOL_
-...
diff --git a/test/elf/ARM/rel-abs32.test b/test/elf/ARM/rel-abs32.test
deleted file mode 100644
index 57d323100feb..000000000000
--- a/test/elf/ARM/rel-abs32.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_ARM_ABS32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 401000 84004000
-# data = 0x400084 ^^
-# data main addr content
-# 0x400084 = 0x400074 + 0x10
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
-# CHECK: 00401000 g .data 00000004 data
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '10000000'
- - Name: .rel.data
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .data
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: main
- Type: R_ARM_ABS32
- Addend: 0
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000001C
- - Name: data
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000004
-...
diff --git a/test/elf/ARM/rel-arm-call.test b/test/elf/ARM/rel-arm-call.test
deleted file mode 100644
index 234b34eae92d..000000000000
--- a/test/elf/ARM/rel-arm-call.test
+++ /dev/null
@@ -1,60 +0,0 @@
-# Check handling of R_ARM_CALL relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400084 1eff2fe1 00482de9 04b08de2 f7ffffeb
-# offset = -0x24 ^^
-# call site offset PC(arm) _Z1fv addr
-# 0x400090 + (-0x24) + 0x8 = 0x400074
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# CHECK: 00400088 g F .text {{[0-9a-f]+}} main
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE200D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEB0030A0E30300A0E10088BDE8
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x000000000000001C
- Symbol: _Z1fv
- Type: R_ARM_CALL
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000014
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000014
- Size: 0x0000000000000018
-...
diff --git a/test/elf/ARM/rel-arm-jump24-veneer-b.test b/test/elf/ARM/rel-arm-jump24-veneer-b.test
deleted file mode 100644
index 4caeac083b8d..000000000000
--- a/test/elf/ARM/rel-arm-jump24-veneer-b.test
+++ /dev/null
@@ -1,101 +0,0 @@
-# Check veneer generation for R_ARM_JUMP24 relocation (B instruction call).
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
-
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=B-VENEER %s
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=B-ADDR %s
-
-# B-VENEER: Contents of section .text:
-# B-VENEER: 400074 010000ea
-# Call from main:
-# offset = 0x4 ^^
-# call site offset PC(arm) ___Z1fv_from_arm addr
-# 0x400074 + 0x4 + 0x8 = 0x400080
-#
-# Code of the veneer:
-# B-VENEER: {{[0-9a-f]+}} {{[0-9a-f]+}} 04f01fe5
-# B-VENEER: 400084 79004000
-# call addr = 0x400079 ^^
-# call addr _Z1fv addr Thumb mode
-# 0x400079 = 0x400078 | 0x1
-#
-# B-ADDR: SYMBOL TABLE:
-# B-ADDR: 00400080 l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
-# B-ADDR: 00400074 g F .text {{[0-9a-f]+}} main
-# B-ADDR: 00400078 g F .text {{[0-9a-f]+}} _Z1fv
-
-# arm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: FEFFFFEA
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: _Z1fv
- Type: R_ARM_JUMP24
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- - Name: _Z1fv
-
-# thm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 4FF0000318467047
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
-...
diff --git a/test/elf/ARM/rel-arm-jump24-veneer-bl.test b/test/elf/ARM/rel-arm-jump24-veneer-bl.test
deleted file mode 100644
index cd386dc5b1a4..000000000000
--- a/test/elf/ARM/rel-arm-jump24-veneer-bl.test
+++ /dev/null
@@ -1,100 +0,0 @@
-# Check veneer generation for R_ARM_JUMP24 relocation (BL<c> instruction call).
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
-
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=BL-VENEER %s
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=BL-ADDR %s
-
-# BL-VENEER: Contents of section .text:
-# BL-VENEER: 400084 0400000b
-# Call from main:
-# offset = 0x10 ^^
-# call site offset PC(arm) ___Z1fv_from_arm addr
-# 0x400084 + 0x10 + 0x8 = 0x40009c
-#
-# Code of the veneer:
-# BL-VENEER: 400094 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 95004000
-# call addr = 0x400095 ^^
-# call addr _Z1fv addr Thumb mode
-# 0x400095 = 0x400094 | 0x1
-#
-# BL-ADDR: SYMBOL TABLE:
-# BL-ADDR: 0040009c l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
-# BL-ADDR: 00400074 g F .text {{[0-9a-f]+}} main
-# BL-ADDR: 00400094 g F .text {{[0-9a-f]+}} _Z1fv
-
-# arm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 00482DE904B08DE20030A0E3000053E3FEFFFF0B0030A0E30300A0E10088BDE8
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000010
- Symbol: _Z1fv
- Type: R_ARM_JUMP24
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- - Name: _Z1fv
-
-# thm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 4FF0000318467047
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
-...
diff --git a/test/elf/ARM/rel-arm-jump24.test b/test/elf/ARM/rel-arm-jump24.test
deleted file mode 100644
index 18eb8397d7b5..000000000000
--- a/test/elf/ARM/rel-arm-jump24.test
+++ /dev/null
@@ -1,58 +0,0 @@
-# Check handling of R_ARM_JUMP24 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400094 04b08de2 f5ffffea 0030a0e1 0300a0e1
-# offset = -0x2C ^^
-# call site offset PC(arm) _Z1fv addr
-# 0x400098 + (-0x2C) + 0x8 = 0x400074
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# CHECK: 00400090 g F .text {{[0-9a-f]+}} main
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000024
- Symbol: _Z1fv
- Type: R_ARM_JUMP24
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000001C
-...
diff --git a/test/elf/ARM/rel-arm-mov.test b/test/elf/ARM/rel-arm-mov.test
deleted file mode 100644
index e50aea4bb206..000000000000
--- a/test/elf/ARM/rel-arm-mov.test
+++ /dev/null
@@ -1,64 +0,0 @@
-# Check handling of R_ARM_MOVW_ABS_NC and R_ARM_MOVT_ABS relocation pair.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400074 04b02de5 00b08de2 003001e3 403040e3
-# addrL = 0x1000 ^^
-# addrH = 0x40 ^^
-# addrH addrL _ZL5data1 addr
-# (0x40 << 16) + 0x1000 = 0x401000
-# CHECK: SYMBOL TABLE:
-# CHECK: 00401000 l .bss 00000004 _ZL5data1
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE2003000E3003040E30A20A0E3002083E50030A0E30300A0E100D04BE204B09DE41EFF2FE1
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000008
- Symbol: _ZL5data1
- Type: R_ARM_MOVW_ABS_NC
- Addend: 0
- - Offset: 0x000000000000000C
- Symbol: _ZL5data1
- Type: R_ARM_MOVT_ABS
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: 411C0000
-Symbols:
- Local:
- - Name: _ZL5data1
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
-...
diff --git a/test/elf/ARM/rel-arm-prel31.test b/test/elf/ARM/rel-arm-prel31.test
deleted file mode 100644
index 1effc4eceb0e..000000000000
--- a/test/elf/ARM/rel-arm-prel31.test
+++ /dev/null
@@ -1,47 +0,0 @@
-# Check handling of R_ARM_PREL31 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .ARM.extab:
-# CHECK: 4000a4 b1fffe7f
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400054 g F .text {{[0-9a-f]+}} __gxx_personality_v0
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .ARM.extab
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x4
- Content: 0000FF7F84019701B0B0B008FFFF01080E2432003A040000
- - Name: .rel.ARM.extab
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x4
- Info: .ARM.extab
- Relocations:
- - Offset: 0
- Symbol: __gxx_personality_v0
- Type: R_ARM_PREL31
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x4
- Content: 80B400AF00231846BD465DF8047B704780B582B000AF3B1D1846FFF7FEFFFFF7FEFFFFF7FEFF0420FFF7FEFF0346184601230360002240F20001C0F20001FFF7FEFF3B1D1846FFF7FEFFFFF7FEFF00BF
-Symbols:
- Local:
- Global:
- - Name: __gxx_personality_v0
- Type: STT_FUNC
- Section: .text
- Value: 0x1
-...
-
diff --git a/test/elf/ARM/rel-arm-thm-interwork.test b/test/elf/ARM/rel-arm-thm-interwork.test
deleted file mode 100644
index 8ee9186b48db..000000000000
--- a/test/elf/ARM/rel-arm-thm-interwork.test
+++ /dev/null
@@ -1,123 +0,0 @@
-# Check ARM <=> Thumb interwork.
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
-
-# Check R_ARM_CALL veneer to call Thumb code
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=ARM-CALL %s
-
-# ARM-CALL: Contents of section .text:
-# ARM-CALL: 400074 00482de9 04b08de2 000000fa 0088bde8
-# offset = 0x0 ^^
-# call site offset PC(arm) _Z2f2v addr
-# 0x40007C + 0x0 + 0x8 = 0x400084
-# ARM-CALL: SYMBOL TABLE:
-# ARM-CALL: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# ARM-CALL: 00400084 g F .text {{[0-9a-f]+}} _Z2f2v
-# ARM-CALL: 00400090 g F .text {{[0-9a-f]+}} main
-
-# Check R_ARM_THM_CALL veneer to call ARM code
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=THM-CALL %s
-
-# THM-CALL: Contents of section .text:
-# THM-CALL: 400094 00bffff7 eeef0023 184680bd
-# offset = -0x24 ^^
-# call site aligned = Align(0x400096, 4) = 0x400094
-# call site aligned offset PC(thm) _Z1fv addr
-# 0x400094 + (-0x24) + 0x4 = 0x400074
-# THM-CALL: SYMBOL TABLE:
-# THM-CALL: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# THM-CALL: 00400084 g F .text {{[0-9a-f]+}} _Z2f2v
-# THM-CALL: 00400090 g F .text {{[0-9a-f]+}} main
-
-# arm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 00482DE904B08DE2FEFFFFEB0088BDE8
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000008
- Symbol: _Z2f2v
- Type: R_ARM_CALL
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000010
- - Name: _Z2f2v
-
-# thm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AFBD465DF8047B704780B500AF00BFFFF7FEFF0023184680BD
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000012
- Symbol: _Z1fv
- Type: R_ARM_THM_CALL
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z2f2v
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- Size: 0x000000000000000C
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000D
- Size: 0x0000000000000010
- - Name: _Z1fv
-...
diff --git a/test/elf/ARM/rel-rel32.test b/test/elf/ARM/rel-rel32.test
deleted file mode 100644
index 47779ac918e3..000000000000
--- a/test/elf/ARM/rel-rel32.test
+++ /dev/null
@@ -1,57 +0,0 @@
-# Check handling of R_ARM_REL32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400074 {{[0-9a-f]+}} 880fff00
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
-# CHECK: 00401000 g .bss {{[0-9a-f]+}} _myref
-
----
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF0000FF0000231846BD465DF8047B7047
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000004
- Symbol: _myref
- Type: R_ARM_REL32
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Global:
- - Name: _myref
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- Size: 0x0000000000000014
-...
diff --git a/test/elf/ARM/rel-thm-call.test b/test/elf/ARM/rel-thm-call.test
deleted file mode 100644
index b9bf8cefc0b8..000000000000
--- a/test/elf/ARM/rel-thm-call.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Check handling of R_ARM_THM_CALL relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400084 fff7f6ff 00231846 80bd00bf
-# ^^ offset = -0x14
-# call site offset PC(thm) _Z1fv addr
-# 0x400084 + (-0x14) + 0x4 = 0x400074
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# CHECK: 00400080 g F .text {{[0-9a-f]+}} main
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AFBD465DF8047B704780B500AFFFF7FEFF0023184680BD00BF
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000010
- Symbol: _Z1fv
- Type: R_ARM_THM_CALL
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- Size: 0x000000000000000C
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000D
- Size: 0x000000000000000E
-...
diff --git a/test/elf/ARM/rel-thm-jump11.test b/test/elf/ARM/rel-thm-jump11.test
deleted file mode 100644
index 4998c2b96c97..000000000000
--- a/test/elf/ARM/rel-thm-jump11.test
+++ /dev/null
@@ -1,141 +0,0 @@
-# Check handling of R_ARM_THM_JUMP11 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 4001a4 0021c7e7
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400138 g F .text 00000060 __gnu_h2f_internal
-# CHECK: 004001a4 g F .text 00000004 __gnu_h2f_alternative
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 70B4020CC0F3C754FF2CC0F3160302F4004080B241D0002C08BF002B3BD0A4F17F0543F4000315F10E0FA8BF41F6FF7209DA15F1190FA3BFA4F166066FF07F42F2406FF07F4212EA03060CD001325208964208BF03EA42021344B3F1807F24BF5B08A4F17E0501B30F2D26DC15F1180F11DB15F10E0FB5BF4FF6F2710E35CFF6FF71AD02B7BF491BAAB2CB40002202EB5333034398B270BC70470029FBD040EA533370BC43F4FC407047102DDEDD6FEAD0336FEAC33398B2EDE740F4F84398B2E9E700BFC0F3842310B4A3F11F040029B4FA84F400F400424FEA541408BF0024C0F309002146140481B943B14203703302EBC35343EA04005DF8044B704760B1B0FA80F3153B98405B42EFE744EA40305DF8044B40F0FF40704720465DF8044B704700BF01216BE70121FEE7002167E70021FEE7
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x000000000000012A
- Symbol: __gnu_h2f_internal
- Type: R_ARM_THM_JUMP11
- - Offset: 0x0000000000000132
- Symbol: __gnu_h2f_internal
- Type: R_ARM_THM_JUMP11
- - Name: .text.startup
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 0020FFF7FEBF00BF
- - Name: .rel.text.startup
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text.startup
- Relocations:
- - Offset: 0x0000000000000002
- Symbol: __gnu_h2f_alternative
- Type: R_ARM_THM_JUMP24
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 004743433A202863726F7373746F6F6C2D4E47206C696E61726F2D312E31332E312D342E392D323031342E3039202D204C696E61726F2047434320342E392D323031342E30392920342E392E32203230313430393034202870726572656C656173652900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .ARM.attributes
- Type: SHT_ARM_ATTRIBUTES
- AddressAlign: 0x0000000000000001
- Content: 4134000000616561626900012A00000005372D4100060A0741080109020A041204140115011703180119011A021B031C011E022201
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .text.startup
- Type: STT_SECTION
- Section: .text.startup
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .ARM.attributes
- Type: STT_SECTION
- Section: .ARM.attributes
- - Name: '$t'
- Section: .text
- - Name: __gnu_f2h_internal
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- Size: 0x00000000000000C2
- Global:
- - Name: __gnu_f2h_alternative
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000012D
- Size: 0x0000000000000004
- Visibility: STV_HIDDEN
- - Name: __gnu_h2f_alternative
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000131
- Size: 0x0000000000000004
- Visibility: STV_HIDDEN
- - Name: __gnu_h2f_ieee
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000129
- Size: 0x0000000000000004
- Visibility: STV_HIDDEN
- - Name: main
- Type: STT_FUNC
- Section: .text.startup
- Value: 0x0000000000000001
- Size: 0x0000000000000006
- - Name: __gnu_f2h_ieee
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000125
- Size: 0x0000000000000004
- Visibility: STV_HIDDEN
- - Name: __gnu_h2f_internal
- Type: STT_FUNC
- Section: .text
- Value: 0x00000000000000C5
- Size: 0x000000000000005E
- Visibility: STV_HIDDEN
-...
diff --git a/test/elf/ARM/rel-thm-jump24-veneer.test b/test/elf/ARM/rel-thm-jump24-veneer.test
deleted file mode 100644
index fffce44ca477..000000000000
--- a/test/elf/ARM/rel-thm-jump24-veneer.test
+++ /dev/null
@@ -1,100 +0,0 @@
-# Check veneer generation for R_ARM_THM_JUMP24 relocation (B instruction call).
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
-
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=B-VENEER %s
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=B-ADDR %s
-
-# B-VENEER: Contents of section .text:
-# B-VENEER: 400074 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 00f000b8
-# Call from main:
-# offset = 0x0 ^^
-# call site offset PC(thm) ___Z1fv_from_thumb addr
-# 0x400080 + 0x0 + 0x4 = 0x400084
-#
-# Code of the veneer:
-# B-VENEER: 400084 78470000 f9ffffea
-# offset = -0x1C ^^
-# call site offset PC(arm) _Z1fv
-# 0x400088 + (-0x1C) + 0x8 = 0x400074
-#
-# B-ADDR: SYMBOL TABLE:
-# B-ADDR: 00400084 l F .text {{[0-9a-f]+}} ___Z1fv_from_thumb
-# B-ADDR: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# B-ADDR: 00400080 g F .text {{[0-9a-f]+}} main
-
-# arm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 0030A0E30300A0E11EFF2FE1
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
-
-# thm.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: FFF7FEBF
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: _Z1fv
- Type: R_ARM_THM_JUMP24
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: _Z1fv
-...
diff --git a/test/elf/ARM/rel-thm-jump24.test b/test/elf/ARM/rel-thm-jump24.test
deleted file mode 100644
index 6c9b63447c9d..000000000000
--- a/test/elf/ARM/rel-thm-jump24.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_ARM_THM_JUMP24 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400084 80b500af fff7f4bf 03461846 80bd00bf
-# ^^ offset = -0x18
-# call site offset PC(thm) _Z1fv addr
-# 0x400088 + (-0x18) + 0x4 = 0x400074
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
-# CHECK: 00400084 g F .text {{[0-9a-f]+}} main
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF00231846BD465DF8047B704780B500AFFFF7FEBF0346184680BD00BF
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000014
- Symbol: _Z1fv
- Type: R_ARM_THM_JUMP24
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: _Z1fv
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000011
-...
diff --git a/test/elf/ARM/rel-thm-mov.test b/test/elf/ARM/rel-thm-mov.test
deleted file mode 100644
index 25edc4cda4b9..000000000000
--- a/test/elf/ARM/rel-thm-mov.test
+++ /dev/null
@@ -1,70 +0,0 @@
-# 1. Check handling of R_ARM_THM_MOVW_ABS_NC and R_THM_ARM_MOVT_ABS relocation pair.
-# 2. Check that instructions are not cropped for symbols that address Thumb code.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=INSN-CROP %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400074 {{[0-9a-f]+}} 41f20003 c0f24003 0a221a60
-# addrL = 0x1000 ^^
-# addrH = 0x40 ^^
-# addrH addrL _ZL5data1 addr
-# (0x40 << 16) + 0x1000 = 0x401000
-# CHECK: SYMBOL TABLE:
-# CHECK: 00401000 l .bss 00000004 _ZL5data1
-# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
-#
-# INSN-CROP: Contents of section .text:
-# INSN-CROP: 400074 80b400af
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF40F20003C0F200030A221A6000231846BD465DF8047B7047
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000004
- Symbol: _ZL5data1
- Type: R_ARM_THM_MOVW_ABS_NC
- Addend: 0
- - Offset: 0x0000000000000008
- Symbol: _ZL5data1
- Type: R_ARM_THM_MOVT_ABS
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: 411C0000
-Symbols:
- Local:
- - Name: _ZL5data1
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
-...
diff --git a/test/elf/ARM/rel-tls-ie32.test b/test/elf/ARM/rel-tls-ie32.test
deleted file mode 100644
index 7b65c2f194c7..000000000000
--- a/test/elf/ARM/rel-tls-ie32.test
+++ /dev/null
@@ -1,109 +0,0 @@
-# Check handling of R_ARM_TLS_IE32 relocation.
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-tls.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-tlsv.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-tls.o %t-tlsv.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .got:
-# CHECK: 401008 08000000 0c000000
-# tp_off(i) = 0x08 ^^ ^^ tp_off(j) = 0x0c
-# tp_off(i) + sizeof(i) = tp_off(j)
-# 0x08 + 0x04 = 0x0c
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400094 g F .text {{[0-9a-f]+}} main
-# CHECK: 00000000 g .tdata 00000004 i
-# sizeof(i) = 0x04 ^^
-# CHECK: 00000004 g .tdata 00000004 j
-
-# tls.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF0C4B7B441B681DEE702FD2580A4B7B441B681DEE701FCB581A44084B7B441B681DEE701FCB585B0013441846BD465DF8047B70472E000000260000001C000000
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000038
- Symbol: i
- Type: R_ARM_TLS_IE32
- - Offset: 0x000000000000003C
- Symbol: i
- Type: R_ARM_TLS_IE32
- - Offset: 0x0000000000000040
- Symbol: j
- Type: R_ARM_TLS_IE32
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: i
- Type: STT_TLS
- - Name: j
- Type: STT_TLS
-
-# tlsv.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x0000000000000004
- Content: 05000000FBFFFFFF
-Symbols:
- Global:
- - Name: i
- Type: STT_TLS
- Section: .tdata
- Size: 0x0000000000000004
- - Name: j
- Type: STT_TLS
- Section: .tdata
- Value: 0x0000000000000004
- Size: 0x0000000000000004
-...
diff --git a/test/elf/ARM/rel-tls-le32.test b/test/elf/ARM/rel-tls-le32.test
deleted file mode 100644
index d0d3d5b6821a..000000000000
--- a/test/elf/ARM/rel-tls-le32.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Check handling of R_ARM_TLS_LE32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-o.o -o %t
-# RUN: llvm-objdump -s -t %t | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 4000b4 {{[0-9a-f]+}} 08000000
-# tp_off = 0x000008 ^^
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400094 g F .text {{[0-9a-f]+}} main
-# CHECK: 00000000 g .tdata 00000004 i
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 04B02DE500B08DE2703F1DEE10209FE5023093E70300A0E100D04BE204B09DE41EFF2FE100000000
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: .text
- Relocations:
- - Offset: 0x0000000000000024
- Symbol: i
- Type: R_ARM_TLS_LE32
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x0000000000000004
- Content: '05000000'
-Symbols:
- Global:
- - Name: i
- Type: STT_TLS
- Section: .tdata
- Size: 0x0000000000000004
- - Name: main
- Type: STT_FUNC
- Section: .text
-...
diff --git a/test/elf/ARM/thm-symbols.test b/test/elf/ARM/thm-symbols.test
deleted file mode 100644
index c91505c98100..000000000000
--- a/test/elf/ARM/thm-symbols.test
+++ /dev/null
@@ -1,52 +0,0 @@
-# Check that symbols formed from Thumb instructions are valid:
-# 1. Symbol address.
-# 2. Symbol content size.
-# 3. Symbol content.
-
-# RUN: yaml2obj -format=elf %s > %t-t.o
-# RUN: lld -flavor gnu -target arm-linux-gnu \
-# RUN: -Bstatic --noinhibit-exec %t-t.o -o %t-t
-# RUN: llvm-readobj -symbols %t-t | FileCheck -check-prefix=SYM-ADDR %s
-# RUN: llvm-readobj -symbols %t-t | FileCheck -check-prefix=SYM-SIZE %s
-# RUN: llvm-objdump -s -t %t-t | FileCheck -check-prefix=SYM-CONTENT %s
-
-# SYM-ADDR: Name: main (1)
-# SYM-ADDR-NEXT: Value: 0x400075
-
-# SYM-SIZE: Name: main (1)
-# SYM-SIZE-NEXT: Value: 0x{{[0-9a-f]+}}
-# SYM-SIZE-NEXT: Size: 16
-
-# SYM-CONTENT: Contents of section .text:
-# SYM-CONTENT-NEXT: 400074 80b400af 00231846 bd465df8 047b7047 .....#.F.F]..{pG
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B400AF00231846BD465DF8047B7047
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
-...
diff --git a/test/elf/ARM/undef-lazy-symbol.test b/test/elf/ARM/undef-lazy-symbol.test
deleted file mode 100644
index f32549e85be4..000000000000
--- a/test/elf/ARM/undef-lazy-symbol.test
+++ /dev/null
@@ -1,135 +0,0 @@
-# Check that _GLOBAL_OFFSET_TABLE_ symbol is resolved
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-got.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-got.o -o %t
-# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=GOT %s
-
-# GOT: Name: _GLOBAL_OFFSET_TABLE_ (185)
-# GOT-NEXT: Value: {{[0-9]+}}
-# GOT-NEXT: Size: 0
-# GOT-NEXT: Binding: Global (0x1)
-# GOT-NEXT: Type: Object (0x1)
-# GOT-NEXT: Other: 0
-# GOT-NEXT: Section: Absolute (0xFFF1)
-
-# Check that __exidx_start/_end symbols are resolved
-
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-exidx.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --defsym=main=fn --noinhibit-exec %t-exidx.o -o %t
-# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=EXIDX %s
-
-# EXIDX: Name: __exidx_start (188)
-# EXIDX-NEXT: Value: {{[0-9]+}}
-# EXIDX-NEXT: Size: 0
-# EXIDX-NEXT: Binding: Global (0x1)
-# EXIDX-NEXT: Type: Object (0x1)
-# EXIDX-NEXT: Other: 0
-# EXIDX-NEXT: Section: Absolute (0xFFF1)
-#
-# EXIDX: Name: __exidx_end (202)
-# EXIDX-NEXT: Value: {{[0-9]+}}
-# EXIDX-NEXT: Size: 0
-# EXIDX-NEXT: Binding: Global (0x1)
-# EXIDX-NEXT: Type: Object (0x1)
-# EXIDX-NEXT: Other: 0
-# EXIDX-NEXT: Section: Absolute (0xFFF1)
-
-# Check that all symbols are resolved
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-got.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-exidx.o
-# RUN: lld -flavor gnu -target arm -m armelf_linux_eabi -Bstatic \
-# RUN: --noinhibit-exec %t-got.o %t-exidx.o -o %t
-# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SYMS %s
-
-# SYMS: Name: _GLOBAL_OFFSET_TABLE_ (188)
-# SYMS-NEXT: Value: {{[0-9]+}}
-# SYMS-NEXT: Size: 0
-# SYMS-NEXT: Binding: Global (0x1)
-# SYMS-NEXT: Type: Object (0x1)
-# SYMS-NEXT: Other: 0
-# SYMS-NEXT: Section: Absolute (0xFFF1)
-#
-# SYMS: Name: __exidx_start (210)
-# SYMS-NEXT: Value: {{[0-9]+}}
-# SYMS-NEXT: Size: 0
-# SYMS-NEXT: Binding: Global (0x1)
-# SYMS-NEXT: Type: Object (0x1)
-# SYMS-NEXT: Other: 0
-# SYMS-NEXT: Section: Absolute (0xFFF1)
-#
-# SYMS: Name: __exidx_end (224)
-# SYMS-NEXT: Value: {{[0-9]+}}
-# SYMS-NEXT: Size: 0
-# SYMS-NEXT: Binding: Global (0x1)
-# SYMS-NEXT: Type: Object (0x1)
-# SYMS-NEXT: Other: 0
-# SYMS-NEXT: Section: Absolute (0xFFF1)
-
-# got.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: _GLOBAL_OFFSET_TABLE_
-
-# exidx.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_ARM
- Flags: [ EF_ARM_EABI_VER5 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Global:
- - Name: fn
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: __exidx_start
- - Name: __exidx_end
-...
diff --git a/test/elf/Hexagon/dynlib-data.test b/test/elf/Hexagon/dynlib-data.test
deleted file mode 100644
index f3260ba4847b..000000000000
--- a/test/elf/Hexagon/dynlib-data.test
+++ /dev/null
@@ -1,9 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj-data.o \
-RUN: -o %t --noinhibit-exec -shared
-RUN: llvm-objdump -s %t > %t1
-RUN: FileCheck -check-prefix=CHECKRELOCS %s < %t1
-
-CHECKRELOCS: Contents of section .text:
-CHECKRELOCS: 00f8 01c09da0 01d89da1 3c400000 18c4496a ........<@....Ij
-CHECKRELOCS: 0108 ff7fff0f 00ff9897 00c08091 38c09d91 ............8...
-CHECKRELOCS: 0118 1ec01e96 ....
diff --git a/test/elf/Hexagon/dynlib-gotoff.test b/test/elf/Hexagon/dynlib-gotoff.test
deleted file mode 100644
index 752d3acd4c08..000000000000
--- a/test/elf/Hexagon/dynlib-gotoff.test
+++ /dev/null
@@ -1,128 +0,0 @@
-# This tests GOT's and PLT's for dynamic libraries for Hexagon
-RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj.o \
-RUN: -o %t --output-filetype=yaml -shared --noinhibit-exec
-RUN: FileCheck -check-prefix=CHECKGOTPLT %s < %t
-
- - name: .PLT0
-CHECKGOTPLT: type: stub
-CHECKGOTPLT: content: [ 00, 40, 00, 00, 1C, C0, 49, 6A, 0E, 42, 9C, E2,
-CHECKGOTPLT: 4F, 40, 9C, 91, 3C, C0, 9C, 91, 0E, 42, 0E, 8C,
-CHECKGOTPLT: 00, C0, 9C, 52 ]
-CHECKGOTPLT: alignment: 2^4
-CHECKGOTPLT: section-name: .plt
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
-CHECKGOTPLT: offset: 0
- target: __got0
-CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
-CHECKGOTPLT: offset: 4
- target: __got0
-CHECKGOTPLT: addend: 4
- - name: __plt_fn
-CHECKGOTPLT: type: stub
-CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
-CHECKGOTPLT: 00, C0, 9C, 52 ]
-CHECKGOTPLT: alignment: 2^4
-CHECKGOTPLT: section-name: .plt
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
-CHECKGOTPLT: offset: 0
- target: __got_fn
-CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
-CHECKGOTPLT: offset: 4
- target: __got_fn
-CHECKGOTPLT: addend: 4
- - name: __plt_fn1
-CHECKGOTPLT: type: stub
-CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
-CHECKGOTPLT: 00, C0, 9C, 52 ]
-CHECKGOTPLT: alignment: 2^4
-CHECKGOTPLT: section-name: .plt
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
-CHECKGOTPLT: offset: 0
- target: __got_fn1
-CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
-CHECKGOTPLT: offset: 4
- target: __got_fn1
-CHECKGOTPLT: addend: 4
- - name: __plt_fn2
-CHECKGOTPLT: type: stub
-CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
-CHECKGOTPLT: 00, C0, 9C, 52 ]
-CHECKGOTPLT: alignment: 2^4
-CHECKGOTPLT: section-name: .plt
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
-CHECKGOTPLT: offset: 0
- target: __got_fn2
-CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
-CHECKGOTPLT: offset: 4
- target: __got_fn2
-CHECKGOTPLT: addend: 4
- - name: __got0
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
-CHECKGOTPLT: 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^3
-CHECKGOTPLT: section-name: .got.plt
-CHECKGOTPLT: permissions: rw-
- - name: __got_c
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^2
-CHECKGOTPLT: section-name: .got
-CHECKGOTPLT: permissions: rw-
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_GLOB_DAT
-CHECKGOTPLT: offset: 0
-CHECKGOTPLT: target: c
- - name: __got_shankar
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^2
-CHECKGOTPLT: section-name: .got
-CHECKGOTPLT: permissions: rw-
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_GLOB_DAT
-CHECKGOTPLT: offset: 0
-CHECKGOTPLT: target: shankar
- - name: __got_fn
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^2
-CHECKGOTPLT: section-name: .got.plt
-CHECKGOTPLT: permissions: rw-
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
-CHECKGOTPLT: offset: 0
-CHECKGOTPLT: target: fn
-CHECKGOTPLT: - kind: R_HEX_32
-CHECKGOTPLT: offset: 0
- target: .PLT0
- - name: __got_fn1
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^2
-CHECKGOTPLT: section-name: .got.plt
-CHECKGOTPLT: permissions: rw-
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
-CHECKGOTPLT: offset: 0
-CHECKGOTPLT: target: fn1
-CHECKGOTPLT: - kind: R_HEX_32
-CHECKGOTPLT: offset: 0
- target: .PLT0
- - name: __got_fn2
-CHECKGOTPLT: type: got
-CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
-CHECKGOTPLT: alignment: 2^2
-CHECKGOTPLT: section-name: .got.plt
-CHECKGOTPLT: permissions: rw-
-CHECKGOTPLT: references:
-CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
-CHECKGOTPLT: offset: 0
-CHECKGOTPLT: target: fn2
-CHECKGOTPLT: - kind: R_HEX_32
-CHECKGOTPLT: offset: 0
- target: .PLT0
diff --git a/test/elf/Hexagon/dynlib-hash.test b/test/elf/Hexagon/dynlib-hash.test
deleted file mode 100644
index f93176492348..000000000000
--- a/test/elf/Hexagon/dynlib-hash.test
+++ /dev/null
@@ -1,9 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj.o \
-RUN: -o %t --noinhibit-exec -shared
-RUN: llvm-objdump -s %t > %t1
-RUN: FileCheck -check-prefix=CHECKHASH %s < %t1
-
-CHECKHASH: Contents of section .hash:
-CHECKHASH: 0094 03000000 07000000 06000000 01000000
-CHECKHASH: 00a4 04000000 00000000 00000000 00000000
-CHECKHASH: 00b4 00000000 03000000 02000000 05000000
diff --git a/test/elf/Hexagon/dynlib-rela.test b/test/elf/Hexagon/dynlib-rela.test
deleted file mode 100644
index 81617349e2f7..000000000000
--- a/test/elf/Hexagon/dynlib-rela.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# Tests that the relocation sections have the right alignment.
-RUN: lld -flavor gnu -target hexagon %p/Inputs/use-shared.hexagon -shared -o %t1
-RUN: llvm-readobj -sections %t1 > %t2
-RUN: FileCheck -check-prefix=SECTIONS %s < %t2
-
-SECTIONS: Section {
-SECTIONS: Name: .rela.plt (23)
-SECTIONS: AddressAlignment: 4
-SECTIONS: }
diff --git a/test/elf/Hexagon/dynlib-syms.test b/test/elf/Hexagon/dynlib-syms.test
deleted file mode 100644
index e649230d9e90..000000000000
--- a/test/elf/Hexagon/dynlib-syms.test
+++ /dev/null
@@ -1,7 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj.o \
-RUN: -o %t --noinhibit-exec -shared
-RUN: llvm-nm -n -M %t > %t1
-RUN: FileCheck -check-prefix=CHECKSYMS %s < %t1
-
-CHECKSYMS: 0000025c A _DYNAMIC
-CHECKSYMS: 00001008 A _GLOBAL_OFFSET_TABLE_
diff --git a/test/elf/Hexagon/dynlib.test b/test/elf/Hexagon/dynlib.test
deleted file mode 100644
index c5bf23fdf229..000000000000
--- a/test/elf/Hexagon/dynlib.test
+++ /dev/null
@@ -1,36 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/use-shared.hexagon -shared -o %t1
-RUN: llvm-readobj -dyn-symbols %t1 > %t2
-RUN: FileCheck -check-prefix=DYNSYMS %s < %t2
-RUN: llvm-readobj -program-headers %t1 | FileCheck %s
-
-DYNSYMS: DynamicSymbols [
-DYNSYMS: Symbol {
-DYNSYMS: Name: fn2
-DYNSYMS-NEXT: Value:
-DYNSYMS-NEXT: Size:
-DYNSYMS-NEXT: Binding: Global
-DYNSYMS-NEXT: Type: Function
-DYNSYMS-NEXT: Other:
-DYNSYMS-NEXT: Section: .text
-DYNSYMS: }
-DYNSYMS: Symbol {
-DYNSYMS: Name: fn1
-DYNSYMS-NEXT: Value:
-DYNSYMS-NEXT: Size:
-DYNSYMS-NEXT: Binding: Global
-DYNSYMS-NEXT: Type: Function
-DYNSYMS-NEXT: Other:
-DYNSYMS-NEXT: Section: .text
-DYNSYMS: }
-DYNSYMS: Symbol {
-DYNSYMS: Name: fn3
-DYNSYMS-NEXT: Value:
-DYNSYMS-NEXT: Size:
-DYNSYMS-NEXT: Binding: Global
-DYNSYMS-NEXT: Type: Function
-DYNSYMS-NEXT: Other:
-DYNSYMS-NEXT: Section: .text
-DYNSYMS-NEXT: }
-DYNSYMS-NEXT: ]
-
-CHECK-NOT: PT_PHDR
diff --git a/test/elf/Hexagon/hexagon-got-plt-order.test b/test/elf/Hexagon/hexagon-got-plt-order.test
deleted file mode 100644
index 7600ebe59fc5..000000000000
--- a/test/elf/Hexagon/hexagon-got-plt-order.test
+++ /dev/null
@@ -1,5 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/got-plt-order.o -o %t -shared
-RUN: llvm-objdump -section-headers %t | FileCheck %s
-
-CHECK: .got
-CHECK-NEXT: .got.plt
diff --git a/test/elf/Hexagon/hexagon-plt-setup.test b/test/elf/Hexagon/hexagon-plt-setup.test
deleted file mode 100644
index 15c4e22ed9c5..000000000000
--- a/test/elf/Hexagon/hexagon-plt-setup.test
+++ /dev/null
@@ -1,12 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/use-shared.hexagon \
-RUN: --output-filetype=yaml --noinhibit-exec -o %t2
-RUN: FileCheck %s < %t2
-
-CHECK: - name: fn3
-CHECK: references:
-CHECK: - kind: R_HEX_B22_PCREL
-CHECK: offset: 4
- target:
-CHECK: - kind: R_HEX_B22_PCREL
-CHECK: offset: 8
- target:
diff --git a/test/elf/Hexagon/maxalignment.test b/test/elf/Hexagon/maxalignment.test
deleted file mode 100644
index cac1c200734f..000000000000
--- a/test/elf/Hexagon/maxalignment.test
+++ /dev/null
@@ -1,8 +0,0 @@
-# This tests that we lld is able to get the contentType properly for archives
-# when they intermittently get loaded at an address whose alignment is 2
-
-RUN: lld -flavor gnu -target hexagon --whole-archive %p/Inputs/libMaxAlignment.a \
-RUN: --noinhibit-exec -static -o %t
-RUN: llvm-nm %t | FileCheck %s
-
-CHECK: {{[0-9a-f]+}} D a
diff --git a/test/elf/Hexagon/rela-order.test b/test/elf/Hexagon/rela-order.test
deleted file mode 100644
index 925a82c29290..000000000000
--- a/test/elf/Hexagon/rela-order.test
+++ /dev/null
@@ -1,9 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj.o -shared \
-RUN: --noinhibit-exec -o %t
-RUN: llvm-objdump -section-headers %t | FileCheck %s
-
-CHECK: .dynsym
-CHECK-NEXT: .dynstr
-CHECK-NEXT: .rela.dyn
-CHECK-NEXT: .rela.plt
-CHECK-NEXT: .plt
diff --git a/test/elf/Hexagon/sda-base.test b/test/elf/Hexagon/sda-base.test
deleted file mode 100644
index 0bab92abf685..000000000000
--- a/test/elf/Hexagon/sda-base.test
+++ /dev/null
@@ -1,4 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/sda-base.o -o %t1 --noinhibit-exec
-RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=sdabase
-
-sdabase: 00002000 A _SDA_BASE_
diff --git a/test/elf/Hexagon/zerofillquick-sdata.test b/test/elf/Hexagon/zerofillquick-sdata.test
deleted file mode 100644
index 5488e19f5c44..000000000000
--- a/test/elf/Hexagon/zerofillquick-sdata.test
+++ /dev/null
@@ -1,18 +0,0 @@
-# This tests that a typeZeroFillFast atom is associated with a section that has
-# the correct memory size.
-
-RUN: lld -flavor gnu -target hexagon %p/Inputs/sdata1.o %p/Inputs/sdata2.o \
-RUN: -o %t --noinhibit-exec -static
-RUN: llvm-readobj -sections %t | FileCheck -check-prefix=CHECKSECTIONSANDSIZE %s
-
-CHECKSECTIONSANDSIZE: Section {
-CHECKSECTIONSANDSIZE: Name: .sdata (13)
-CHECKSECTIONSANDSIZE: Address: 0x1000
-CHECKSECTIONSANDSIZE: Offset: 0x1000
-CHECKSECTIONSANDSIZE: Size: 24
-CHECKSECTIONSANDSIZE: }
-CHECKSECTIONSANDSIZE: Section {
-CHECKSECTIONSANDSIZE: Name: .bss (20)
-CHECKSECTIONSANDSIZE: Address: 0x1018
-CHECKSECTIONSANDSIZE: Offset: 0x1018
-CHECKSECTIONSANDSIZE: }
diff --git a/test/elf/Inputs/consecutive-weak-defs.o.yaml b/test/elf/Inputs/consecutive-weak-defs.o.yaml
deleted file mode 100644
index 144c2426bae1..000000000000
--- a/test/elf/Inputs/consecutive-weak-defs.o.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 554889E5E8000000005DC3554889E5B8640000005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000005
- Symbol: my_weak_func
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: my_func
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000B
- Weak:
- - Name: my_weak_func
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000B
- Size: 0x000000000000000B
- - Name: my_weak_func2
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000B
- Size: 0x000000000000000B
- - Name: my_weak_func3
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000B
- Size: 0x000000000000000B
-...
diff --git a/test/elf/Inputs/init_array.x86-64 b/test/elf/Inputs/init_array.x86-64
deleted file mode 100644
index 2425c227fd42..000000000000
--- a/test/elf/Inputs/init_array.x86-64
+++ /dev/null
Binary files differ
diff --git a/test/elf/Inputs/main-with-global-def.o.yaml b/test/elf/Inputs/main-with-global-def.o.yaml
deleted file mode 100644
index 55029614e1e8..000000000000
--- a/test/elf/Inputs/main-with-global-def.o.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: 554889E5B8C80000005DC3554889E54883EC10C745FC00000000B000E8000000004883C4105DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x000000000000001D
- Symbol: my_func
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000000B
- Size: 0x000000000000001C
- - Name: my_weak_func2
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000B
- - Name: my_func
-...
diff --git a/test/elf/Inputs/undef2-so.o.yaml b/test/elf/Inputs/undef2-so.o.yaml
deleted file mode 100644
index 9ecf374ced11..000000000000
--- a/test/elf/Inputs/undef2-so.o.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000001
- Content: 554889E5488B05000000008B005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000007
- Symbol: myexportedsymbol
- Type: R_X86_64_GOTPCREL
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: func
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000F
- - Name: _GLOBAL_OFFSET_TABLE_
- - Name: myexportedsymbol
diff --git a/test/elf/Mips/base-address-64.test b/test/elf/Mips/base-address-64.test
deleted file mode 100644
index 07110e7f918f..000000000000
--- a/test/elf/Mips/base-address-64.test
+++ /dev/null
@@ -1,78 +0,0 @@
-# Check executable base address configuration. Base address should be
-# equal to 0x400000 and the MIPS_BASE_ADDRESS dynamic tag's value should
-# be the same.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el --noinhibit-exec -o %t.exe %t.o
-# RUN: llvm-readobj -dynamic-table -program-headers %t.exe | FileCheck %s
-
-# CHECK: DynamicSection [ (13 entries)
-# CHECK: Tag Type Name/Value
-# CHECK-NEXT: 0x0000000000000004 HASH 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x0000000000000005 STRTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x0000000000000006 SYMTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x000000000000000A STRSZ 1 (bytes)
-# CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes)
-# CHECK-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 1
-# CHECK-NEXT: 0x0000000070000005 MIPS_FLAGS NOTPOT
-# CHECK-NEXT: 0x0000000070000006 MIPS_BASE_ADDRESS 0x120000000
-# CHECK-NEXT: 0x000000007000000A MIPS_LOCAL_GOTNO 2
-# CHECK-NEXT: 0x0000000070000011 MIPS_SYMTABNO 1
-# CHECK-NEXT: 0x0000000070000013 MIPS_GOTSYM 0x1
-# CHECK-NEXT: 0x0000000000000003 PLTGOT 0x120001000
-# CHECK-NEXT: 0x0000000000000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# CHECK: ProgramHeaders [
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_PHDR (0x6)
-# CHECK: Offset: 0x40
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_INTERP (0x3)
-# CHECK: Offset: 0x190
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD (0x1)
-# CHECK-NEXT: Offset: 0x0
-# CHECK-NEXT: VirtualAddress: 0x120000000
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ARCH_64R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x10
- Size: 0x00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x10
- Size: 0x00
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/base-address.test b/test/elf/Mips/base-address.test
deleted file mode 100644
index f55091f84c33..000000000000
--- a/test/elf/Mips/base-address.test
+++ /dev/null
@@ -1,109 +0,0 @@
-# Check executable base address configuration. Base address should be
-# equal to 0x400000 and the MIPS_BASE_ADDRESS dynamic tag's value should
-# be the same.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel --noinhibit-exec -o %t.exe %t.o
-# RUN: llvm-readobj -dynamic-table -program-headers %t.exe | FileCheck %s
-
-# CHECK: DynamicSection [ (13 entries)
-# CHECK: Tag Type Name/Value
-# CHECK-NEXT: 0x00000004 HASH 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x00000005 STRTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x00000006 SYMTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x0000000A STRSZ 1 (bytes)
-# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
-# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
-# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
-# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x400000
-# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
-# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 1
-# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x1
-# CHECK-NEXT: 0x00000003 PLTGOT 0x401000
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# CHECK: ProgramHeaders [
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_PHDR (0x6)
-# CHECK: Offset: 0x34
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_INTERP (0x3)
-# CHECK: Offset: 0xF4
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD (0x1)
-# CHECK: Offset: 0x0
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD (0x1)
-# CHECK: Offset: 0x1000
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_LOAD (0x1)
-# CHECK: Offset: 0x2000
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ProgramHeader {
-# CHECK: Type: PT_DYNAMIC (0x2)
-# CHECK: Offset: 0x12C
-# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
-# CHECK: }
-# CHECK: ]
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Size: 0x18
- - Name: .MIPS.abiflags
- Type: SHT_MIPS_ABIFLAGS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x08
- Content: '000020010101000100000000000000000000000000000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .reginfo
- Type: STT_SECTION
- Section: .reginfo
- - Name: .MIPS.abiflags
- Type: STT_SECTION
- Section: .MIPS.abiflags
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/ctors-order.test b/test/elf/Mips/ctors-order.test
deleted file mode 100644
index 344dcd5fc516..000000000000
--- a/test/elf/Mips/ctors-order.test
+++ /dev/null
@@ -1,163 +0,0 @@
-# Check ordering of .ctors.* sections.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-crtbeginS.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-crtendS.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-obj.o
-# RUN: lld -flavor gnu -target mipsel -shared --output-filetype=yaml \
-# RUN: %t-crtbeginS.o %t-obj.o %t-crtendS.o | FileCheck %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-crtbeginS.o %t-obj.o %t-crtendS.o
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=RAW %s
-
-# CHECK: defined-atoms:
-# CHECK-NEXT: - type: data
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors
-# CHECK-NEXT: references:
-# CHECK-NEXT: - kind: layout-after
-# CHECK-NEXT: offset: 0
-# CHECK-NEXT: target: __CTOR_LIST__
-# CHECK-NEXT: - name: __CTOR_LIST__
-# CHECK-NEXT: type: data
-# CHECK-NEXT: content: [ FF, FF, FF, FF ]
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors
-# CHECK-NEXT: - type: data
-# CHECK-NEXT: content: [ 11, 11, 11, 11 ]
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors.1
-# CHECK-NEXT: - type: data
-# CHECK-NEXT: content: [ 22, 22, 22, 22 ]
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors.2
-# CHECK-NEXT: - ref-name: L003
-# CHECK-NEXT: type: data
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors
-# CHECK-NEXT: references:
-# CHECK-NEXT: - kind: layout-after
-# CHECK-NEXT: offset: 0
-# CHECK-NEXT: target: __CTOR_END__
-# CHECK-NEXT: - name: __CTOR_END__
-# CHECK-NEXT: type: data
-# CHECK-NEXT: content: [ 00, 00, 00, 00 ]
-# CHECK-NEXT: alignment: 2^2
-# CHECK-NEXT: section-choice: custom-required
-# CHECK-NEXT: section-name: .ctors
-
-# RAW: Contents of section .ctors:
-# RAW-NEXT: 1000 ffffffff 11111111 22222222 00000000
-# crtbeginS.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .ctors
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Content: 'FFFFFFFF'
-
-Symbols:
- Local:
- - Name: .ctors
- Type: STT_SECTION
- Section: .ctors
- - Name: __CTOR_LIST__
- Type: STT_OBJECT
- Section: .ctors
-
-# crtendS.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x0F
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: .ctors
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: .ctors
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: .ctors
- Type: R_MIPS_HI16
- - Offset: 0x0C
- Symbol: .ctors
- Type: R_MIPS_LO16
- - Name: .ctors
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .ctors
- Type: STT_SECTION
- Section: .ctors
- - Name: __CTOR_END__
- Type: STT_OBJECT
- Section: .ctors
- - Name: __do_global_ctors_aux
- Type: STT_FUNC
- Section: .text
-
-# obj.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .ctors.2
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Content: '22222222'
- - Name: .ctors.1
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Content: '11111111'
-
-Symbols:
- Local:
- - Name: .ctors.2
- Type: STT_SECTION
- Section: .ctors.2
- - Name: .ctors.1
- Type: STT_SECTION
- Section: .ctors.1
-...
diff --git a/test/elf/Mips/dt-textrel-64.test b/test/elf/Mips/dt-textrel-64.test
deleted file mode 100644
index 32cc99e54b2f..000000000000
--- a/test/elf/Mips/dt-textrel-64.test
+++ /dev/null
@@ -1,74 +0,0 @@
-# Check that if a dynamic relocation R_MIPS_64 modify a read-only section,
-# .dynamic section contains the DT_TEXTREL tag.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: 0x{{[0-9A-F]+}} TEXTREL
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x4
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x08
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x4
- Size: 0x8
-
- - Name: .rel.text
- Type: SHT_RELA
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_64
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x8
- - Name: T1
-...
diff --git a/test/elf/Mips/dt-textrel.test b/test/elf/Mips/dt-textrel.test
deleted file mode 100644
index ca854dff8e58..000000000000
--- a/test/elf/Mips/dt-textrel.test
+++ /dev/null
@@ -1,74 +0,0 @@
-# Check that if a dynamic relocation modify a read-only section,
-# .dynamic section contains the DT_TEXTREL tag.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: 0x{{[0-9A-F]+}} TEXTREL
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x04
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '00000000'
-
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- - Name: T1
-...
diff --git a/test/elf/Mips/dynlib-dynamic.test b/test/elf/Mips/dynlib-dynamic.test
deleted file mode 100644
index 54afdec263a6..000000000000
--- a/test/elf/Mips/dynlib-dynamic.test
+++ /dev/null
@@ -1,110 +0,0 @@
-# Check MIPS specific tags in the dynamic table.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t.so %t.o
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK: Arch: mipsel
-# CHECK: AddressSize: 32bit
-# CHECK: LoadName:
-# CHECK: DynamicSection [ (13 entries)
-# CHECK: Tag Type Name/Value
-# CHECK-NEXT: 0x00000004 HASH 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x00000005 STRTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x00000006 SYMTAB 0x{{[0-9A-F]+}}
-# CHECK-NEXT: 0x0000000A STRSZ 17 (bytes)
-# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
-# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
-# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
-# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x0
-# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 4
-# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 4
-# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x2
-# CHECK-NEXT: 0x00000003 PLTGOT 0x1000
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x18
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: '$.str1'
- Type: R_MIPS_GOT16
- - Offset: 0x04
- Symbol: '$.str1'
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: '$.str2'
- Type: R_MIPS_GOT16
- - Offset: 0x0C
- Symbol: '$.str2'
- Type: R_MIPS_LO16
- - Offset: 0x10
- Symbol: glob2
- Type: R_MIPS_CALL16
- - Offset: 0x14
- Symbol: ext1
- Type: R_MIPS_CALL16
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .rodata.str1
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
- - Name: .rodata.str2
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
-
-Symbols:
- Local:
- - Name: '$.str1'
- Section: .rodata.str1
- - Name: '$.str2'
- Section: .rodata.str2
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .rodata.str1
- Type: STT_SECTION
- Section: .rodata.str1
- - Name: .rodata.str2
- Type: STT_SECTION
- Section: .rodata.str2
- Global:
- - Name: glob
- Section: .text
- - Name: ext1
- - Name: glob2
diff --git a/test/elf/Mips/dynlib-dynsym-micro.test b/test/elf/Mips/dynlib-dynsym-micro.test
deleted file mode 100644
index 4d75945af7b0..000000000000
--- a/test/elf/Mips/dynlib-dynsym-micro.test
+++ /dev/null
@@ -1,208 +0,0 @@
-# 1. Check sorting of .dynsym content accordingly to .got section
-# in case of using microMIPS relocations.
-# 2. Check that microMIPS records in a dynamic symbol table have:
-# - cleared the STO_MIPS_MICROMIPS flag
-# - adjusted adress
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t-so %t.o
-# RUN: llvm-readobj -dyn-symbols %t-so | FileCheck -check-prefix=CHECK-DYN %s
-
-# Build shared library (yaml format)
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
-# RUN: --output-filetype=yaml -o %t-yaml %t.o
-# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t-yaml
-
-# CHECK-DYN: Format: ELF32-mips
-# CHECK-DYN: Arch: mipsel
-# CHECK-DYN: AddressSize: 32bit
-# CHECK-DYN: LoadName:
-# CHECK-DYN: DynamicSymbols [
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: @ (0)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Local (0x0)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: bar@ (5)
-# CHECK-DYN: Value: 0x139
-# CHECK-DYN: Size: 4
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: Function (0x2)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: .text (0x4)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: foo@ (1)
-# CHECK-DYN: Value: 0x121
-# CHECK-DYN: Size: 24
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: Function (0x2)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: .text (0x4)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: ext1@ (9)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: ext2@ (14)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: ]
-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 80 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - ref-name: L000
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: L007
-# CHECK-GOT: - ref-name: L002
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: L008
-# CHECK-GOT: - ref-name: L004
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: foo
-# CHECK-GOT: - ref-name: L005
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: ext1
-# CHECK-GOT: - ref-name: L006
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: ext2
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x1C
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: .rodata.str1
- Type: R_MICROMIPS_GOT16
- - Offset: 0x04
- Symbol: .rodata.str1
- Type: R_MICROMIPS_LO16
- - Offset: 0x08
- Symbol: .rodata.str2
- Type: R_MICROMIPS_GOT16
- - Offset: 0x0C
- Symbol: .rodata.str2
- Type: R_MICROMIPS_LO16
- - Offset: 0x10
- Symbol: foo
- Type: R_MICROMIPS_CALL16
- - Offset: 0x14
- Symbol: ext1
- Type: R_MICROMIPS_CALL16
- - Offset: 0x18
- Symbol: ext2
- Type: R_MICROMIPS_CALL16
- - Name: .rodata.str1
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
- - Name: .rodata.str2
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .rodata.str1
- Type: STT_SECTION
- Section: .rodata.str1
- - Name: .rodata.str2
- Type: STT_SECTION
- Section: .rodata.str2
- Global:
- - Name: bar
- Section: .text
- Value: 0x18
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: foo
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: ext1
- - Name: ext2
-...
diff --git a/test/elf/Mips/dynlib-dynsym.test b/test/elf/Mips/dynlib-dynsym.test
deleted file mode 100644
index d480c3cbbe41..000000000000
--- a/test/elf/Mips/dynlib-dynsym.test
+++ /dev/null
@@ -1,202 +0,0 @@
-# Check sorting of .dynsym content accordingly to .got section.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t-so %t.o
-# RUN: llvm-readobj -dyn-symbols %t-so | FileCheck -check-prefix=CHECK-DYN %s
-
-# Build shared library (yaml format)
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
-# RUN: --output-filetype=yaml -o %t-yaml %t.o
-# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t-yaml
-
-# CHECK-DYN: Format: ELF32-mips
-# CHECK-DYN: Arch: mipsel
-# CHECK-DYN: AddressSize: 32bit
-# CHECK-DYN: LoadName:
-# CHECK-DYN: DynamicSymbols [
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: @ (0)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Local (0x0)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: bar@ (5)
-# CHECK-DYN: Value: 0x138
-# CHECK-DYN: Size: 4
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: Function (0x2)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: .text (0x4)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: foo@ (1)
-# CHECK-DYN: Value: 0x120
-# CHECK-DYN: Size: 24
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: Function (0x2)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: .text (0x4)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: ext1@ (9)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: ext2@ (14)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Global (0x1)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: ]
-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 80 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - ref-name: L000
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: L007
-# CHECK-GOT: - ref-name: L002
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: L008
-# CHECK-GOT: - ref-name: L004
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: foo
-# CHECK-GOT: - ref-name: L005
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: ext1
-# CHECK-GOT: - ref-name: L006
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: ext2
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x1C
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: .rodata.str1
- Type: R_MIPS_GOT16
- - Offset: 0x04
- Symbol: .rodata.str1
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: .rodata.str2
- Type: R_MIPS_GOT16
- - Offset: 0x0C
- Symbol: .rodata.str2
- Type: R_MIPS_LO16
- - Offset: 0x10
- Symbol: foo
- Type: R_MIPS_CALL16
- - Offset: 0x14
- Symbol: ext1
- Type: R_MIPS_CALL16
- - Offset: 0x18
- Symbol: ext2
- Type: R_MIPS_CALL16
- - Name: .rodata.str1
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
- - Name: .rodata.str2
- Type: SHT_PROGBITS
- AddressAlign: 0x01
- Size: 0x05
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .rodata.str1
- Type: STT_SECTION
- Section: .rodata.str1
- - Name: .rodata.str2
- Type: STT_SECTION
- Section: .rodata.str2
- Global:
- - Name: bar
- Section: .text
- Value: 0x18
- - Name: foo
- Section: .text
- - Name: ext1
- - Name: ext2
-...
diff --git a/test/elf/Mips/dynlib-fileheader-64.test b/test/elf/Mips/dynlib-fileheader-64.test
deleted file mode 100644
index 206f4fa7794d..000000000000
--- a/test/elf/Mips/dynlib-fileheader-64.test
+++ /dev/null
@@ -1,72 +0,0 @@
-# Check ELF Header for 64-bit shared library.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Format: ELF64-mips
-# CHECK: Arch: mips64el
-# CHECK: AddressSize: 64bit
-# CHECK: LoadName:
-# CHECK: ElfHeader {
-# CHECK: Ident {
-# CHECK: Magic: (7F 45 4C 46)
-# CHECK: Class: 64-bit (0x2)
-# CHECK: DataEncoding: LittleEndian (0x1)
-# CHECK: FileVersion: 1
-# CHECK: OS/ABI: SystemV (0x0)
-# CHECK: ABIVersion: 0
-# CHECK: Unused: (00 00 00 00 00 00 00)
-# CHECK: }
-# CHECK: Type: SharedObject (0x3)
-# CHECK: Machine: EM_MIPS (0x8)
-# CHECK: Version: 1
-# CHECK: Entry: 0x170
-# CHECK: ProgramHeaderOffset: 0x40
-# CHECK: SectionHeaderOffset: 0x2140
-# CHECK: Flags [ (0x80000006)
-# CHECK: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK: EF_MIPS_CPIC (0x4)
-# CHECK: EF_MIPS_PIC (0x2)
-# CHECK: ]
-# CHECK: HeaderSize: 64
-# CHECK: ProgramHeaderEntrySize: 56
-# CHECK: ProgramHeaderCount: 4
-# CHECK: SectionHeaderEntrySize: 64
-# CHECK: SectionHeaderCount: 11
-# CHECK: StringTableSectionIndex: 8
-# CHECK: }
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- Global:
- - Name: data
- Type: STT_OBJECT
- Section: .data
- Size: 0x04
-...
diff --git a/test/elf/Mips/dynlib-fileheader-micro-64.test b/test/elf/Mips/dynlib-fileheader-micro-64.test
deleted file mode 100644
index c03a951671ea..000000000000
--- a/test/elf/Mips/dynlib-fileheader-micro-64.test
+++ /dev/null
@@ -1,75 +0,0 @@
-# Check ELF Header for shared library in case of microMIPS symbols.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Format: ELF64-mips
-# CHECK-NEXT: Arch: mips64el
-# CHECK-NEXT: AddressSize: 64bit
-# CHECK-NEXT: LoadName:
-# CHECK-NEXT: ElfHeader {
-# CHECK-NEXT: Ident {
-# CHECK-NEXT: Magic: (7F 45 4C 46)
-# CHECK-NEXT: Class: 64-bit (0x2)
-# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
-# CHECK-NEXT: FileVersion: 1
-# CHECK-NEXT: OS/ABI: SystemV (0x0)
-# CHECK-NEXT: ABIVersion: 0
-# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
-# CHECK-NEXT: }
-# CHECK-NEXT: Type: SharedObject (0x3)
-# CHECK-NEXT: Machine: EM_MIPS (0x8)
-# CHECK-NEXT: Version: 1
-# CHECK-NEXT: Entry: 0x170
-# CHECK-NEXT: ProgramHeaderOffset: 0x40
-# CHECK-NEXT: SectionHeaderOffset: 0x2140
-# CHECK-NEXT: Flags [ (0x82000007)
-# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK-NEXT: EF_MIPS_CPIC (0x4)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: EF_MIPS_PIC (0x2)
-# CHECK-NEXT: ]
-# CHECK-NEXT: HeaderSize: 64
-# CHECK-NEXT: ProgramHeaderEntrySize: 56
-# CHECK-NEXT: ProgramHeaderCount: 4
-# CHECK-NEXT: SectionHeaderEntrySize: 64
-# CHECK-NEXT: SectionHeaderCount: 11
-# CHECK-NEXT: StringTableSectionIndex: 8
-# CHECK-NEXT:}
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_MICROMIPS, EF_MIPS_ARCH_64R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/elf/Mips/dynlib-fileheader-micro.test b/test/elf/Mips/dynlib-fileheader-micro.test
deleted file mode 100644
index 139b3aa626c9..000000000000
--- a/test/elf/Mips/dynlib-fileheader-micro.test
+++ /dev/null
@@ -1,82 +0,0 @@
-# Check ELF Header for shared library in case of microMIPS symbols.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK-NEXT: Arch: mipsel
-# CHECK-NEXT: AddressSize: 32bit
-# CHECK-NEXT: LoadName:
-# CHECK-NEXT: ElfHeader {
-# CHECK-NEXT: Ident {
-# CHECK-NEXT: Magic: (7F 45 4C 46)
-# CHECK-NEXT: Class: 32-bit (0x1)
-# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
-# CHECK-NEXT: FileVersion: 1
-# CHECK-NEXT: OS/ABI: SystemV (0x0)
-# CHECK-NEXT: ABIVersion: 0
-# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
-# CHECK-NEXT: }
-# CHECK-NEXT: Type: SharedObject (0x3)
-# CHECK-NEXT: Machine: EM_MIPS (0x8)
-# CHECK-NEXT: Version: 1
-# CHECK-NEXT: Entry: 0x100
-# CHECK-NEXT: ProgramHeaderOffset: 0x34
-# CHECK-NEXT: SectionHeaderOffset: 0x2100
-# CHECK-NEXT: Flags [ (0x72001007)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
-# CHECK-NEXT: EF_MIPS_CPIC (0x4)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: EF_MIPS_PIC (0x2)
-# CHECK-NEXT: ]
-# CHECK-NEXT: HeaderSize: 52
-# CHECK-NEXT: ProgramHeaderEntrySize: 32
-# CHECK-NEXT: ProgramHeaderCount: 4
-# CHECK-NEXT: SectionHeaderEntrySize: 40
-# CHECK-NEXT: SectionHeaderCount: 11
-# CHECK-NEXT: StringTableSectionIndex: 8
-# CHECK-NEXT:}
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Size: 0x18
- - Name: .MIPS.abiflags
- Type: SHT_MIPS_ABIFLAGS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x08
- Size: 0x18
-
-Symbols:
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/elf/Mips/dynlib-fileheader.test b/test/elf/Mips/dynlib-fileheader.test
deleted file mode 100644
index 5dd9d6a64a71..000000000000
--- a/test/elf/Mips/dynlib-fileheader.test
+++ /dev/null
@@ -1,80 +0,0 @@
-# Check ELF Header for shared library.
-
-# Build shared library
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK: Arch: mipsel
-# CHECK: AddressSize: 32bit
-# CHECK: LoadName:
-# CHECK: ElfHeader {
-# CHECK: Ident {
-# CHECK: Magic: (7F 45 4C 46)
-# CHECK: Class: 32-bit (0x1)
-# CHECK: DataEncoding: LittleEndian (0x1)
-# CHECK: FileVersion: 1
-# CHECK: OS/ABI: SystemV (0x0)
-# CHECK: ABIVersion: 0
-# CHECK: Unused: (00 00 00 00 00 00 00)
-# CHECK: }
-# CHECK: Type: SharedObject (0x3)
-# CHECK: Machine: EM_MIPS (0x8)
-# CHECK: Version: 1
-# CHECK: Entry: 0x100
-# CHECK: ProgramHeaderOffset: 0x34
-# CHECK: SectionHeaderOffset: 0x2100
-# CHECK: Flags [ (0x70001007)
-# CHECK: EF_MIPS_ABI_O32 (0x1000)
-# CHECK: EF_MIPS_ARCH_32R2 (0x70000000)
-# CHECK: EF_MIPS_CPIC (0x4)
-# CHECK: EF_MIPS_NOREORDER (0x1)
-# CHECK: EF_MIPS_PIC (0x2)
-# CHECK: ]
-# CHECK: HeaderSize: 52
-# CHECK: ProgramHeaderEntrySize: 32
-# CHECK: ProgramHeaderCount: 4
-# CHECK: SectionHeaderEntrySize: 40
-# CHECK: SectionHeaderCount: 11
-# CHECK: StringTableSectionIndex: 8
-# CHECK:}
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x00
- - Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Size: 0x18
- - Name: .MIPS.abiflags
- Type: SHT_MIPS_ABIFLAGS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x08
- Size: 0x18
-
-Symbols:
- Global:
- - Name: glob
- Section: .text
diff --git a/test/elf/Mips/dynsym-table-1.test b/test/elf/Mips/dynsym-table-1.test
deleted file mode 100644
index 43c48e730405..000000000000
--- a/test/elf/Mips/dynsym-table-1.test
+++ /dev/null
@@ -1,127 +0,0 @@
-# Check that LLD does not populate an executable file dynamic symbol table
-# by unnecessary symbols.
-# 1. bar.so defines T2
-# 2. foo.so defines T1 and references T2
-# 3. main.o reference T1
-# 4. a.out dynamic table should contain T1 entry only
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-bar.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-foo.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-bar.so %t-bar.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-foo.so %t-foo.o %t-bar.so
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe --as-needed \
-# RUN: %t-main.o %t-foo.so %t-bar.so
-# RUN: llvm-readobj -dt -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ ({{.*}})
-# CHECK-NEXT: Value: {{.*}}
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 8
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: 0x00000003 PLTGOT 0x401000
-# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (dynsym-table-1.test.tmp-foo.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-
-# bar.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-Symbols:
- Global:
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Size: 0x08
-
-# foo.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x08
- Info: .text
- Relocations:
- - Offset: 0
- Symbol: T2
- Type: R_MIPS_CALL16
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: T2
-
-# main.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x08
- Info: .text
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_32
-Symbols:
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: T1
-...
diff --git a/test/elf/Mips/dynsym-table-2.test b/test/elf/Mips/dynsym-table-2.test
deleted file mode 100644
index 538aa758910e..000000000000
--- a/test/elf/Mips/dynsym-table-2.test
+++ /dev/null
@@ -1,105 +0,0 @@
-# Check that LLD does not populate a shared library dynamic symbol table
-# by unnecessary symbols.
-# 1. bar.so defines T2 and T3
-# 2. foo.so defines T1 and references T2
-# 4. foo.so dynamic table should contain T1 and T2 entries only
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-bar.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-foo.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-bar.so %t-bar.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-foo.so %t-foo.o %t-bar.so
-# RUN: llvm-readobj -dt -dynamic-table %t-foo.so | FileCheck %s
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ ({{.*}})
-# CHECK-NEXT: Value: {{.*}}
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x4)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ ({{.*}})
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: 0x00000003 PLTGOT 0x1000
-# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (dynsym-table-2.test.tmp-bar.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-
-# bar.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-Symbols:
- Global:
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- - Name: T3
- Type: STT_FUNC
- Section: .text
- Value: 0x04
- Size: 0x04
-
-# foo.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x08
- Info: .text
- Relocations:
- - Offset: 0
- Symbol: T2
- Type: R_MIPS_CALL16
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: T2
-...
diff --git a/test/elf/Mips/e-flags-merge-1-64.test b/test/elf/Mips/e-flags-merge-1-64.test
deleted file mode 100644
index d5719539baaa..000000000000
--- a/test/elf/Mips/e-flags-merge-1-64.test
+++ /dev/null
@@ -1,30 +0,0 @@
-# Check that the linker shows an error when object
-# file has unsupported ASE flags.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-mips16.o
-# RUN: not lld -flavor gnu -target mips64el -e T -o %t.exe %t-mips16.o 2>&1 | \
-# RUN: FileCheck -check-prefix=MIPS16 %s
-
-# MIPS16: Unsupported extension: MIPS16
-
-# mips16.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_ARCH_ASE_M16]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-1.test b/test/elf/Mips/e-flags-merge-1.test
deleted file mode 100644
index 1f1d7aca6c41..000000000000
--- a/test/elf/Mips/e-flags-merge-1.test
+++ /dev/null
@@ -1,56 +0,0 @@
-# Check that the linker shows an error when object file has missed
-# or unsupported ABI and ARCH flags or unsupported ASE flags.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-no-abi.o
-# RUN: not lld -flavor gnu -target mipsel -e T -o %t.exe %t-no-abi.o 2>&1 | \
-# RUN: FileCheck -check-prefix=INVALID-ABI %s
-
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-mips16.o
-# RUN: not lld -flavor gnu -target mipsel -e T -o %t.exe %t-mips16.o 2>&1 | \
-# RUN: FileCheck -check-prefix=MIPS16 %s
-
-# INVALID-ABI: Unsupported ABI
-# MIPS16: Unsupported extension: MIPS16
-
-# no-abi.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: []
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T
- Section: .text
-
-# mips16.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_ARCH_ASE_M16]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-10.test b/test/elf/Mips/e-flags-merge-10.test
deleted file mode 100644
index a0aa45d5f2c8..000000000000
--- a/test/elf/Mips/e-flags-merge-10.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check that LLD shows an error and does not link files with mips32r2
-# and mips32r6 instructions sets.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32r2.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-32r6.o
-
-# RUN: not lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-32r2.o %t-32r6.o 2>&1 | FileCheck %s
-
-# CHECK: Linking modules with incompatible ISA
-
-# 32r2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 32r6.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-11.test b/test/elf/Mips/e-flags-merge-11.test
deleted file mode 100644
index b4c0039bd198..000000000000
--- a/test/elf/Mips/e-flags-merge-11.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check that LLD shows an error and does not link files with mips64r2
-# and mips64r6 instructions sets.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-64r2.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64r6.o
-
-# RUN: not lld -flavor gnu -target mips64el -shared -o %t.so \
-# RUN: %t-64r2.o %t-64r6.o 2>&1 | FileCheck %s
-
-# CHECK: Linking modules with incompatible ISA
-
-# 64r2.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64R2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64r6.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64R6]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-2-64.test b/test/elf/Mips/e-flags-merge-2-64.test
deleted file mode 100644
index a169e7ea1645..000000000000
--- a/test/elf/Mips/e-flags-merge-2-64.test
+++ /dev/null
@@ -1,33 +0,0 @@
-# Check that the linker copies ELF header flags from the single input object
-# file to the generated executable
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -e T -o %t.exe %t.o
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Flags [ (0x62000001)
-# CHECK-NEXT: EF_MIPS_ARCH_64 (0x60000000)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: ]
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ARCH_64, EF_MIPS_NOREORDER, EF_MIPS_MICROMIPS ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-2.test b/test/elf/Mips/e-flags-merge-2.test
deleted file mode 100644
index 41d4a0b0c45e..000000000000
--- a/test/elf/Mips/e-flags-merge-2.test
+++ /dev/null
@@ -1,35 +0,0 @@
-# Check that the linker copies ELF header flags from the single input object
-# file to the generated executable
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T -o %t.exe %t.o
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Flags [ (0x52001001)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: ]
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
- EF_MIPS_NOREORDER, EF_MIPS_MICROMIPS]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-3-64.test b/test/elf/Mips/e-flags-merge-3-64.test
deleted file mode 100644
index 54065a63fb94..000000000000
--- a/test/elf/Mips/e-flags-merge-3-64.test
+++ /dev/null
@@ -1,130 +0,0 @@
-# Check PIC/CPIC flags merging in case of multiple input objects.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-cpic.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-pic.o
-# RUN: yaml2obj -format=elf -docnum 4 %s > %t-both.o
-
-# RUN: lld -flavor gnu -target mips64el -e T1 -o %t-abi1.exe \
-# RUN: %t-none.o %t-pic.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
-# RUN: llvm-readobj -file-headers %t-abi1.exe \
-# RUN: | FileCheck -check-prefix=ABI-CALLS1 %s
-
-# RUN: lld -flavor gnu -target mips64el -e T1 -o %t-abi2.exe \
-# RUN: %t-cpic.o %t-none.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
-# RUN: llvm-readobj -file-headers %t-abi2.exe \
-# RUN: | FileCheck -check-prefix=ABI-CALLS2 %s
-
-# RUN: lld -flavor gnu -target mips64el -e T2 -o %t-cpic.exe %t-cpic.o %t-pic.o
-# RUN: llvm-readobj -file-headers %t-cpic.exe | FileCheck -check-prefix=CPIC %s
-
-# RUN: lld -flavor gnu -target mips64el -e T3 -o %t-both.exe %t-pic.o %t-both.o
-# RUN: llvm-readobj -file-headers %t-both.exe | FileCheck -check-prefix=BOTH %s
-
-# ABI-CALLS-WARN: lld warning: linking abicalls and non-abicalls files
-
-# ABI-CALLS1: Flags [ (0x60000004)
-# ABI-CALLS1-NEXT: EF_MIPS_ARCH_64 (0x60000000)
-# ABI-CALLS1-NEXT: EF_MIPS_CPIC (0x4)
-# ABI-CALLS1-NEXT: ]
-
-# ABI-CALLS2: Flags [ (0x60000004)
-# ABI-CALLS2-NEXT: EF_MIPS_ARCH_64 (0x60000000)
-# ABI-CALLS2-NEXT: EF_MIPS_CPIC (0x4)
-# ABI-CALLS2-NEXT: ]
-
-# CPIC: Flags [ (0x60000004)
-# CPIC-NEXT: EF_MIPS_ARCH_64 (0x60000000)
-# CPIC-NEXT: EF_MIPS_CPIC (0x4)
-# CPIC-NEXT: ]
-
-# BOTH: Flags [ (0x60000006)
-# BOTH-NEXT: EF_MIPS_ARCH_64 (0x60000000)
-# BOTH-NEXT: EF_MIPS_CPIC (0x4)
-# BOTH-NEXT: EF_MIPS_PIC (0x2)
-# BOTH-NEXT: ]
-
-# none.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
-
-# cpic.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_CPIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T2
- Section: .text
-
-# pic.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_PIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T3
- Section: .text
-
-# both.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_CPIC, EF_MIPS_PIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: T4
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-3.test b/test/elf/Mips/e-flags-merge-3.test
deleted file mode 100644
index e2d9f6c2e2fc..000000000000
--- a/test/elf/Mips/e-flags-merge-3.test
+++ /dev/null
@@ -1,134 +0,0 @@
-# Check PIC/CPIC flags merging in case of multiple input objects.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-cpic.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-pic.o
-# RUN: yaml2obj -format=elf -docnum 4 %s > %t-both.o
-
-# RUN: lld -flavor gnu -target mipsel -e T1 -o %t-abi1.exe \
-# RUN: %t-none.o %t-pic.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
-# RUN: llvm-readobj -file-headers %t-abi1.exe \
-# RUN: | FileCheck -check-prefix=ABI-CALLS1 %s
-
-# RUN: lld -flavor gnu -target mipsel -e T1 -o %t-abi2.exe \
-# RUN: %t-cpic.o %t-none.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
-# RUN: llvm-readobj -file-headers %t-abi2.exe \
-# RUN: | FileCheck -check-prefix=ABI-CALLS2 %s
-
-# RUN: lld -flavor gnu -target mipsel -e T2 -o %t-cpic.exe %t-cpic.o %t-pic.o
-# RUN: llvm-readobj -file-headers %t-cpic.exe | FileCheck -check-prefix=CPIC %s
-
-# RUN: lld -flavor gnu -target mipsel -e T3 -o %t-both.exe %t-pic.o %t-both.o
-# RUN: llvm-readobj -file-headers %t-both.exe | FileCheck -check-prefix=BOTH %s
-
-# ABI-CALLS-WARN: lld warning: linking abicalls and non-abicalls files
-
-# ABI-CALLS1: Flags [ (0x50001004)
-# ABI-CALLS1-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# ABI-CALLS1-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# ABI-CALLS1-NEXT: EF_MIPS_CPIC (0x4)
-# ABI-CALLS1-NEXT: ]
-
-# ABI-CALLS2: Flags [ (0x50001004)
-# ABI-CALLS2-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# ABI-CALLS2-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# ABI-CALLS2-NEXT: EF_MIPS_CPIC (0x4)
-# ABI-CALLS2-NEXT: ]
-
-# CPIC: Flags [ (0x50001004)
-# CPIC-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CPIC-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# CPIC-NEXT: EF_MIPS_CPIC (0x4)
-# CPIC-NEXT: ]
-
-# BOTH: Flags [ (0x50001006)
-# BOTH-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# BOTH-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# BOTH-NEXT: EF_MIPS_CPIC (0x4)
-# BOTH-NEXT: EF_MIPS_PIC (0x2)
-# BOTH-NEXT: ]
-
-# none.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
-
-# cpic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T2
- Section: .text
-
-# pic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_PIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T3
- Section: .text
-
-# both.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T4
- Section: .text
-...
diff --git a/test/elf/Mips/e-flags-merge-4-64.test b/test/elf/Mips/e-flags-merge-4-64.test
deleted file mode 100644
index 9ffa61343711..000000000000
--- a/test/elf/Mips/e-flags-merge-4-64.test
+++ /dev/null
@@ -1,64 +0,0 @@
-# Check ELF flags merging.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-noreorder.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
-
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so \
-# RUN: %t-none.o %t-noreorder.o %t-micro.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Flags [ (0x82000001)
-# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: ]
-
-# none.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_5]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# noreorder.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_NOREORDER]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# micro.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64R2, EF_MIPS_MICROMIPS]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-...
diff --git a/test/elf/Mips/e-flags-merge-4.test b/test/elf/Mips/e-flags-merge-4.test
deleted file mode 100644
index 096b04d676e9..000000000000
--- a/test/elf/Mips/e-flags-merge-4.test
+++ /dev/null
@@ -1,65 +0,0 @@
-# Check ELF flags merging.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-noreorder.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
-
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-none.o %t-noreorder.o %t-micro.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Flags [ (0x52001001)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_32 (0x50000000)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: ]
-
-# none.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# noreorder.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_NOREORDER]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# micro.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_MICROMIPS]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-5-64.test b/test/elf/Mips/e-flags-merge-5-64.test
deleted file mode 100644
index e629aedbc154..000000000000
--- a/test/elf/Mips/e-flags-merge-5-64.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# Check that LLD does not allow to mix 32 and 64-bit MIPS object files.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
-
-# RUN: not lld -flavor gnu -target mips64el -shared -o %t.so \
-# RUN: %t-32.o %t-64.o 2>&1 | FileCheck %s
-
-# CHECK: Bitness is incompatible with that of the selected target
-
-# 32.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-...
diff --git a/test/elf/Mips/e-flags-merge-5.test b/test/elf/Mips/e-flags-merge-5.test
deleted file mode 100644
index 3b5b397ab780..000000000000
--- a/test/elf/Mips/e-flags-merge-5.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# Check that LLD does not allow to mix 32 and 64-bit MIPS object files.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
-
-# RUN: not lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-32.o %t-64.o 2>&1 | FileCheck %s
-
-# CHECK: Bitness is incompatible with that of the selected target
-
-# 32.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-6-64.test b/test/elf/Mips/e-flags-merge-6-64.test
deleted file mode 100644
index fbc32b7135b2..000000000000
--- a/test/elf/Mips/e-flags-merge-6-64.test
+++ /dev/null
@@ -1,79 +0,0 @@
-# Check selecting ELF header ARCH flag.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-m3.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-m5.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-m64.o
-# RUN: yaml2obj -format=elf -docnum 4 %s > %t-m64r2.o
-
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so \
-# RUN: %t-m64.o %t-m5.o %t-m64r2.o %t-m3.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Flags [ (0x80000000)
-# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK-NEXT: ]
-
-# m3.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_3]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# m5.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_5]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# m64.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# m64r2.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64R2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-...
diff --git a/test/elf/Mips/e-flags-merge-6.test b/test/elf/Mips/e-flags-merge-6.test
deleted file mode 100644
index 759c8b63c97d..000000000000
--- a/test/elf/Mips/e-flags-merge-6.test
+++ /dev/null
@@ -1,80 +0,0 @@
-# Check selecting ELF header ARCH flag.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-m1.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-m2.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-m32.o
-# RUN: yaml2obj -format=elf -docnum 4 %s > %t-m32r2.o
-
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-m32.o %t-m2.o %t-m32r2.o %t-m1.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Flags [ (0x70001000)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
-# CHECK-NEXT: ]
-
-# m1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_1]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# m2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# m32.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# m32r2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-7-64.test b/test/elf/Mips/e-flags-merge-7-64.test
deleted file mode 100644
index 07ed6bb54836..000000000000
--- a/test/elf/Mips/e-flags-merge-7-64.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# Check that LLD does not allow to mix nan2008 and legacy MIPS object files.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-2008.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-legacy.o
-
-# RUN: not lld -flavor gnu -target mips64el -shared -o %t.so \
-# RUN: %t-2008.o %t-legacy.o 2>&1 | FileCheck %s
-
-# CHECK: Linking -mnan=2008 and -mnan=legacy modules
-
-# 2008.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64, EF_MIPS_NAN2008]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-# legacy.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-...
diff --git a/test/elf/Mips/e-flags-merge-7.test b/test/elf/Mips/e-flags-merge-7.test
deleted file mode 100644
index 7e114ff968fe..000000000000
--- a/test/elf/Mips/e-flags-merge-7.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# Check that LLD does not allow to mix nan2008 and legacy MIPS object files.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-2008.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-legacy.o
-
-# RUN: not lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-2008.o %t-legacy.o 2>&1 | FileCheck %s
-
-# CHECK: Linking -mnan=2008 and -mnan=legacy modules
-
-# 2008.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_NAN2008]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# legacy.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-8.test b/test/elf/Mips/e-flags-merge-8.test
deleted file mode 100644
index 57af77d70260..000000000000
--- a/test/elf/Mips/e-flags-merge-8.test
+++ /dev/null
@@ -1,65 +0,0 @@
-# Check that LLD links files with mips32 and mips64 instructions
-# if all these files satisfy O32 ABI.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-64r2.o
-
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-32.o %t-64.o %t-64r2.o
-# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
-
-# CHECK: Flags [ (0x80001100)
-# CHECK-NEXT: EF_MIPS_32BITMODE (0x100)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK-NEXT: ]
-
-
-# 32.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64, EF_MIPS_32BITMODE]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64r2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64R2, EF_MIPS_32BITMODE]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/e-flags-merge-9.test b/test/elf/Mips/e-flags-merge-9.test
deleted file mode 100644
index dea32f07cb9e..000000000000
--- a/test/elf/Mips/e-flags-merge-9.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check that LLD shows an error and does not link files with mips32r2
-# and mips64 instructions sets.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32r2.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
-
-# RUN: not lld -flavor gnu -target mipsel -shared -o %t.so \
-# RUN: %t-32r2.o %t-64.o 2>&1 | FileCheck %s
-
-# CHECK: Linking modules with incompatible ISA
-
-# 32r2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-# 64.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64, EF_MIPS_32BITMODE]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-...
diff --git a/test/elf/Mips/entry-name.test b/test/elf/Mips/entry-name.test
deleted file mode 100644
index b10adc68bde8..000000000000
--- a/test/elf/Mips/entry-name.test
+++ /dev/null
@@ -1,26 +0,0 @@
-# Check name of executable entry symbol.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel --noinhibit-exec -o %t.exe %t.o
-# RUN: llvm-nm %t.exe | FileCheck %s
-
-# CHECK: U __start
-# CHECK: 00400108 T main
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/exe-dynamic.test b/test/elf/Mips/exe-dynamic.test
deleted file mode 100644
index 28d2b13fbce8..000000000000
--- a/test/elf/Mips/exe-dynamic.test
+++ /dev/null
@@ -1,108 +0,0 @@
-# Check MIPS specific tags in the dynamic table in case executable linking.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK: Arch: mipsel
-# CHECK: AddressSize: 32bit
-# CHECK: LoadName:
-# CHECK: DynamicSection [ (18 entries)
-# CHECK: Tag Type Name/Value
-# CHECK-NEXT: 0x00000004 HASH 0x400104
-# CHECK-NEXT: 0x00000005 STRTAB 0x400138
-# CHECK-NEXT: 0x00000006 SYMTAB 0x400118
-# CHECK-NEXT: 0x0000000A STRSZ 28 (bytes)
-# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
-# CHECK-NEXT: 0x00000002 PLTRELSZ 8 (bytes)
-# CHECK-NEXT: 0x70000032 MIPS_PLTGOT 0x402000
-# CHECK-NEXT: 0x00000014 PLTREL REL
-# CHECK-NEXT: 0x00000017 JMPREL 0x400154
-# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
-# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
-# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x400000
-# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
-# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 2
-# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x2
-# CHECK-NEXT: 0x00000003 PLTGOT 0x401000
-# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (exe-dynamic.test.tmp.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: 0000000C000000000000000C000000000000000C00000000
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_26
- Addend: 0
- - Offset: 0x08
- Symbol: .text
- Type: R_MIPS_26
- Addend: 0
- - Offset: 0x10
- Symbol: glob
- Type: R_MIPS_26
- Addend: 0
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Value: 0x08
- - Name: T1
-...
diff --git a/test/elf/Mips/exe-dynsym-micro.test b/test/elf/Mips/exe-dynsym-micro.test
deleted file mode 100644
index e3b00277ef6a..000000000000
--- a/test/elf/Mips/exe-dynsym-micro.test
+++ /dev/null
@@ -1,94 +0,0 @@
-# Check that symbol referenced by an entry in the global part of GOT
-# has a corresponded entry in the .dynsym section. This test covers
-# the case when the GOT entry created because of the R_MICROMIPS_GOT16
-# relocation.
-
-# Build executable
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t.o
-# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK-DYN %s
-
-# Build executabl (yaml format)e
-# RUN: lld -flavor gnu -target mipsel -e glob \
-# RUN: --output-filetype=yaml -o %t.yaml %t.o
-# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t.yaml
-
-# CHECK-DYN: Format: ELF32-mips
-# CHECK-DYN: Arch: mipsel
-# CHECK-DYN: AddressSize: 32bit
-# CHECK-DYN: LoadName:
-# CHECK-DYN: DynamicSymbols [
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: @ (0)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Local (0x0)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: weakf@ (1)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Weak (0x2)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: ]
-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 80 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - ref-name: L000
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: weakf
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: weakf
- Type: R_MICROMIPS_GOT16
-
-Symbols:
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
- Weak:
- - Name: weakf
diff --git a/test/elf/Mips/exe-dynsym.test b/test/elf/Mips/exe-dynsym.test
deleted file mode 100644
index a59916c4be4c..000000000000
--- a/test/elf/Mips/exe-dynsym.test
+++ /dev/null
@@ -1,91 +0,0 @@
-# Check that symbol referenced by an entry in the global part of GOT
-# has a corresponded entry in the .dynsym section.
-
-# Build executable
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t.o
-# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK-DYN %s
-
-# Build executabl (yaml format)e
-# RUN: lld -flavor gnu -target mipsel -e glob \
-# RUN: --output-filetype=yaml -o %t.yaml %t.o
-# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t.yaml
-
-# CHECK-DYN: Format: ELF32-mips
-# CHECK-DYN: Arch: mipsel
-# CHECK-DYN: AddressSize: 32bit
-# CHECK-DYN: LoadName:
-# CHECK-DYN: DynamicSymbols [
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: @ (0)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Local (0x0)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: Symbol {
-# CHECK-DYN: Name: weakf@ (1)
-# CHECK-DYN: Value: 0x0
-# CHECK-DYN: Size: 0
-# CHECK-DYN: Binding: Weak (0x2)
-# CHECK-DYN: Type: None (0x0)
-# CHECK-DYN: Other: 0
-# CHECK-DYN: Section: Undefined (0x0)
-# CHECK-DYN: }
-# CHECK-DYN: ]
-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - type: got
-# CHECK-GOT: content: [ 00, 00, 00, 80 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: - ref-name: L000
-# CHECK-GOT: type: got
-# CHECK-GOT: content: [ 00, 00, 00, 00 ]
-# CHECK-GOT: alignment: 2^2
-# CHECK-GOT: section-choice: custom-required
-# CHECK-GOT: section-name: .got
-# CHECK-GOT: permissions: rw-
-# CHECK-GOT: references:
-# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# CHECK-GOT: offset: 0
-# CHECK-GOT: target: weakf
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: weakf
- Type: R_MIPS_GOT16
-
-Symbols:
- Global:
- - Name: glob
- Section: .text
- Weak:
- - Name: weakf
diff --git a/test/elf/Mips/exe-fileheader-64.test b/test/elf/Mips/exe-fileheader-64.test
deleted file mode 100644
index 63baff53e678..000000000000
--- a/test/elf/Mips/exe-fileheader-64.test
+++ /dev/null
@@ -1,66 +0,0 @@
-# Check ELF Header for 64-bit executable file.
-
-# Build executable
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e glob -o %t.exe %t-o.o
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Format: ELF64-mips
-# CHECK: Arch: mips64el
-# CHECK: AddressSize: 64bit
-# CHECK: LoadName:
-# CHECK: ElfHeader {
-# CHECK: Ident {
-# CHECK: Magic: (7F 45 4C 46)
-# CHECK: Class: 64-bit (0x2)
-# CHECK: DataEncoding: LittleEndian (0x1)
-# CHECK: FileVersion: 1
-# CHECK: OS/ABI: SystemV (0x0)
-# CHECK: ABIVersion: 0
-# CHECK: Unused: (00 00 00 00 00 00 00)
-# CHECK: }
-# CHECK: Type: Executable (0x2)
-# CHECK: Machine: EM_MIPS (0x8)
-# CHECK: Version: 1
-# CHECK: Entry: 0x1200001A0
-# CHECK: ProgramHeaderOffset: 0x40
-# CHECK: SectionHeaderOffset: 0x1300
-# CHECK: Flags [ (0x60000007)
-# CHECK: EF_MIPS_ARCH_64 (0x60000000)
-# CHECK: EF_MIPS_CPIC (0x4)
-# CHECK: EF_MIPS_NOREORDER (0x1)
-# CHECK: EF_MIPS_PIC (0x2)
-# CHECK: ]
-# CHECK: HeaderSize: 64
-# CHECK: ProgramHeaderEntrySize: 56
-# CHECK: ProgramHeaderCount: 5
-# CHECK: SectionHeaderEntrySize: 64
-# CHECK: SectionHeaderCount: 11
-# CHECK: StringTableSectionIndex: 8
-# CHECK: }
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ARCH_64 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
-...
diff --git a/test/elf/Mips/exe-fileheader-micro-64.test b/test/elf/Mips/exe-fileheader-micro-64.test
deleted file mode 100644
index 044c2f729f38..000000000000
--- a/test/elf/Mips/exe-fileheader-micro-64.test
+++ /dev/null
@@ -1,68 +0,0 @@
-# Check ELF Header for 64-bit executable file in case of microMIPS entry symbol.
-
-# Build executable
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e glob -o %t.exe %t-o.o
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Format: ELF64-mips
-# CHECK: Arch: mips64el
-# CHECK: AddressSize: 64bit
-# CHECK: LoadName:
-# CHECK: ElfHeader {
-# CHECK: Ident {
-# CHECK: Magic: (7F 45 4C 46)
-# CHECK: Class: 64-bit (0x2)
-# CHECK: DataEncoding: LittleEndian (0x1)
-# CHECK: FileVersion: 1
-# CHECK: OS/ABI: SystemV (0x0)
-# CHECK: ABIVersion: 0
-# CHECK: Unused: (00 00 00 00 00 00 00)
-# CHECK: }
-# CHECK: Type: Executable (0x2)
-# CHECK: Machine: EM_MIPS (0x8)
-# CHECK: Version: 1
-# CHECK: Entry: 0x1200001A1
-# CHECK: ProgramHeaderOffset: 0x40
-# CHECK: SectionHeaderOffset: 0x1300
-# CHECK: Flags [ (0x82000007)
-# CHECK: EF_MIPS_ARCH_64R2 (0x80000000)
-# CHECK: EF_MIPS_CPIC (0x4)
-# CHECK: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK: EF_MIPS_NOREORDER (0x1)
-# CHECK: EF_MIPS_PIC (0x2)
-# CHECK: ]
-# CHECK: HeaderSize: 64
-# CHECK: ProgramHeaderEntrySize: 56
-# CHECK: ProgramHeaderCount: 5
-# CHECK: SectionHeaderEntrySize: 64
-# CHECK: SectionHeaderCount: 11
-# CHECK: StringTableSectionIndex: 8
-# CHECK: }
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_MICROMIPS, EF_MIPS_ARCH_64R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
-...
diff --git a/test/elf/Mips/exe-fileheader-micro.test b/test/elf/Mips/exe-fileheader-micro.test
deleted file mode 100644
index 351f299b04cd..000000000000
--- a/test/elf/Mips/exe-fileheader-micro.test
+++ /dev/null
@@ -1,69 +0,0 @@
-# Check ELF Header for non-pic executable file in case
-# of microMIPS entry symbol.
-
-# Build executable
-# RUN: yaml2obj -format=elf %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK-NEXT: Arch: mipsel
-# CHECK-NEXT: AddressSize: 32bit
-# CHECK-NEXT: LoadName:
-# CHECK-NEXT: ElfHeader {
-# CHECK-NEXT: Ident {
-# CHECK-NEXT: Magic: (7F 45 4C 46)
-# CHECK-NEXT: Class: 32-bit (0x1)
-# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
-# CHECK-NEXT: FileVersion: 1
-# CHECK-NEXT: OS/ABI: SystemV (0x0)
-# CHECK-NEXT: ABIVersion: 0
-# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
-# CHECK-NEXT: }
-# CHECK-NEXT: Type: Executable (0x2)
-# CHECK-NEXT: Machine: EM_MIPS (0x8)
-# CHECK-NEXT: Version: 1
-# CHECK-NEXT: Entry: 0x400109
-# CHECK-NEXT: ProgramHeaderOffset: 0x34
-# CHECK-NEXT: SectionHeaderOffset: 0x1268
-# CHECK-NEXT: Flags [ (0x72001005)
-# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
-# CHECK-NEXT: EF_MIPS_CPIC (0x4)
-# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
-# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
-# CHECK-NEXT: ]
-# CHECK-NEXT: HeaderSize: 52
-# CHECK-NEXT: ProgramHeaderEntrySize: 32
-# CHECK-NEXT: ProgramHeaderCount: 5
-# CHECK-NEXT: SectionHeaderEntrySize: 40
-# CHECK-NEXT: SectionHeaderCount: 11
-# CHECK-NEXT: StringTableSectionIndex: 8
-# CHECK-NEXT: }
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
-...
diff --git a/test/elf/Mips/exe-fileheader.test b/test/elf/Mips/exe-fileheader.test
deleted file mode 100644
index ff0d38198c31..000000000000
--- a/test/elf/Mips/exe-fileheader.test
+++ /dev/null
@@ -1,105 +0,0 @@
-# Check ELF Header for non-pic executable file.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: Format: ELF32-mips
-# CHECK: Arch: mipsel
-# CHECK: AddressSize: 32bit
-# CHECK: LoadName:
-# CHECK: ElfHeader {
-# CHECK: Ident {
-# CHECK: Magic: (7F 45 4C 46)
-# CHECK: Class: 32-bit (0x1)
-# CHECK: DataEncoding: LittleEndian (0x1)
-# CHECK: FileVersion: 1
-# CHECK: OS/ABI: SystemV (0x0)
-# CHECK: ABIVersion: 1
-# CHECK: Unused: (00 00 00 00 00 00 00)
-# CHECK: }
-# CHECK: Type: Executable (0x2)
-# CHECK: Machine: EM_MIPS (0x8)
-# CHECK: Version: 1
-# CHECK: Entry: 0x400190
-# CHECK: ProgramHeaderOffset: 0x34
-# CHECK: SectionHeaderOffset: 0x2280
-# CHECK: Flags [ (0x70001005)
-# CHECK: EF_MIPS_ABI_O32 (0x1000)
-# CHECK: EF_MIPS_ARCH_32R2 (0x70000000)
-# CHECK: EF_MIPS_CPIC (0x4)
-# CHECK: EF_MIPS_NOREORDER (0x1)
-# CHECK: ]
-# CHECK: HeaderSize: 52
-# CHECK: ProgramHeaderEntrySize: 32
-# CHECK: ProgramHeaderCount: 6
-# CHECK: SectionHeaderEntrySize: 40
-# CHECK: SectionHeaderCount: 14
-# CHECK: StringTableSectionIndex: 11
-# CHECK: }
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_26
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- - Name: T1
-...
diff --git a/test/elf/Mips/exe-got-micro.test b/test/elf/Mips/exe-got-micro.test
deleted file mode 100644
index d2d1588ab964..000000000000
--- a/test/elf/Mips/exe-got-micro.test
+++ /dev/null
@@ -1,115 +0,0 @@
-# Check that external symbol defined in the executable file
-# and referenced by R_MICROMIPS_CALL16 relocation has a corresponded
-# entry in the local GOT section.
-#
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob \
-# RUN: --output-filetype=yaml -o %t.exe %t-o.o %t.so
-# RUN: FileCheck -check-prefix=GOT %s < %t.exe
-
-# GOT header
-# GOT: - type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: - type: got
-# GOT: content: [ 00, 00, 00, 80 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# Local GOT entry for 'glob' symbol
-# GOT: - ref-name: L000
-# GOT: type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: references:
-# GOT: - kind: R_MIPS_32
-# GOT: offset: 0
-# GOT: target: glob
-# Global GOT entry for 'T1' symbol
-# GOT: - ref-name: L001
-# GOT: type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: references:
-# GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# GOT: offset: 0
-# GOT: target: T1
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: glob
- Type: R_MICROMIPS_CALL16
- - Offset: 0x04
- Symbol: T1
- Type: R_MICROMIPS_CALL16
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
-...
diff --git a/test/elf/Mips/exe-got.test b/test/elf/Mips/exe-got.test
deleted file mode 100644
index 7254c87530bc..000000000000
--- a/test/elf/Mips/exe-got.test
+++ /dev/null
@@ -1,116 +0,0 @@
-# Check that external symbol defined in the executable file
-# and referenced by R_MIPS_CALL16 relocation has a corresponded
-# entry in the local GOT section.
-#
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob \
-# RUN: --output-filetype=yaml -o %t.exe %t-o.o %t.so
-# RUN: FileCheck -check-prefix=GOT %s < %t.exe
-
-# GOT header
-# GOT: - type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: - type: got
-# GOT: content: [ 00, 00, 00, 80 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# Local GOT entry for 'glob' symbol
-# GOT: - ref-name: L000
-# GOT: type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: references:
-# GOT: - kind: R_MIPS_32
-# GOT: offset: 0
-# GOT: target: glob
-# Global GOT entry for 'T1' symbol
-# GOT: - ref-name: L001
-# GOT: type: got
-# GOT: content: [ 00, 00, 00, 00 ]
-# GOT: alignment: 2^2
-# GOT: section-choice: custom-required
-# GOT: section-name: .got
-# GOT: permissions: rw-
-# GOT: references:
-# GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# GOT: offset: 0
-# GOT: target: T1
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: glob
- Type: R_MIPS_CALL16
- Addend: 0
- - Offset: 0x04
- Symbol: T1
- Type: R_MIPS_CALL16
- Addend: 0
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- - Name: T1
-...
diff --git a/test/elf/Mips/got-page-32.test b/test/elf/Mips/got-page-32.test
deleted file mode 100644
index 00376da78663..000000000000
--- a/test/elf/Mips/got-page-32.test
+++ /dev/null
@@ -1,203 +0,0 @@
-# Check handling of R_MIPS_GOT_DISP / PAGE / OFST relocations.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
-# RUN: | FileCheck -check-prefix=GOT %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
-
-# GOT: Symbol {
-# GOT: Name: T0 (1)
-# GOT-NEXT: Value: 0x400154
-# GOT: Symbol {
-# GOT: Name: LT1 (4)
-# GOT-NEXT: Value: 0x40017C
-# GOT: Symbol {
-# GOT: Name: LT2 (8)
-# GOT-NEXT: Value: 0x400180
-# GOT: Symbol {
-# GOT: Name: T1@ (1)
-# GOT-NEXT: Value: 0x0
-# GOT: Symbol {
-# GOT: Name: T2@ (4)
-# GOT-NEXT: Value: 0x0
-
-# GOT: Primary GOT {
-# GOT-NEXT: Canonical gp value: 0x408FF0
-# GOT-NEXT: Reserved entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401000
-# GOT-NEXT: Access: -32752
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Purpose: Lazy resolver
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401004
-# GOT-NEXT: Access: -32748
-# GOT-NEXT: Initial: 0x80000000
-# GOT-NEXT: Purpose: Module pointer (GNU extension)
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Local entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401008
-# GOT-NEXT: Access: -32744
-# GOT-NEXT: Initial: 0x40017C
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x40100C
-# GOT-NEXT: Access: -32740
-# GOT-NEXT: Initial: 0x400000
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401010
-# GOT-NEXT: Access: -32736
-# GOT-NEXT: Initial: 0x400000
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Global entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401014
-# GOT-NEXT: Access: -32732
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Value: 0x0
-# GOT-NEXT: Type: Function (0x2)
-# GOT-NEXT: Section: Undefined (0x0)
-# GOT-NEXT: Name: T1@ (1)
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x401018
-# GOT-NEXT: Access: -32728
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Value: 0x0
-# GOT-NEXT: Type: Function (0x2)
-# GOT-NEXT: Section: Undefined (0x0)
-# GOT-NEXT: Name: T2@ (4)
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Number of TLS and multi-GOT entries: 0
-# GOT-NEXT: }
-
-# RAW: Contents of section .text:
-# RAW-NEXT: 400154 24800000 18800000 24800000 28800000 $.......$...(...
-# ^ = -32732 (T1)
-# ^ = -32744 (LT1)
-# ^ -32732 (T1)
-# ^ -32728 (T2)
-# RAW-NEXT: 400164 1c800000 20800000 00000000 00000000 .... ...........
-# ^ -32740 (PAGE)
-# ^ -32736 (PAGE)
-# ^ T1 OFST
-# ^ T2 OFST
-# RAW-NEXT: 400174 7c010000 80010000 00000000 00000000 |...............
-# ^ LT1 OFST
-# ^ LT2 OFST
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_32, EF_MIPS_ABI_O32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 0x4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_32, EF_MIPS_ABI_O32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x4
- Size: 0x30
-
- - Name: .rel.text
- Type: SHT_RELA
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_GOT_DISP
- - Offset: 0x4
- Symbol: LT1
- Type: R_MIPS_GOT_DISP
- - Offset: 0x8
- Symbol: T1
- Type: R_MIPS_GOT_PAGE
- - Offset: 0xC
- Symbol: T2
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x10
- Symbol: LT1
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x14
- Symbol: LT2
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x18
- Symbol: T1
- Type: R_MIPS_GOT_OFST
- - Offset: 0x1C
- Symbol: T2
- Type: R_MIPS_GOT_OFST
- - Offset: 0x20
- Symbol: LT1
- Type: R_MIPS_GOT_OFST
- - Offset: 0x24
- Symbol: LT2
- Type: R_MIPS_GOT_OFST
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x8
- - Name: LT1
- Type: STT_FUNC
- Section: .text
- Value: 0x28
- Size: 0x4
- - Name: LT2
- Type: STT_FUNC
- Section: .text
- Value: 0x2c
- Size: 0x4
- - Name: T1
- - Name: T2
-...
diff --git a/test/elf/Mips/got-page-64.test b/test/elf/Mips/got-page-64.test
deleted file mode 100644
index 21bece5d3242..000000000000
--- a/test/elf/Mips/got-page-64.test
+++ /dev/null
@@ -1,203 +0,0 @@
-# Check handling of R_MIPS_GOT_DISP / PAGE / OFST relocations.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
-# RUN: | FileCheck -check-prefix=GOT %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
-
-# GOT: Symbol {
-# GOT: Name: T0 (1)
-# GOT-NEXT: Value: 0x1200001F0
-# GOT: Symbol {
-# GOT: Name: LT1 (4)
-# GOT-NEXT: Value: 0x120000218
-# GOT: Symbol {
-# GOT: Name: LT2 (8)
-# GOT-NEXT: Value: 0x12000021C
-# GOT: Symbol {
-# GOT: Name: T1@ (1)
-# GOT-NEXT: Value: 0x0
-# GOT: Symbol {
-# GOT: Name: T2@ (4)
-# GOT-NEXT: Value: 0x0
-
-# GOT: Primary GOT {
-# GOT-NEXT: Canonical gp value: 0x120008FF0
-# GOT-NEXT: Reserved entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001000
-# GOT-NEXT: Access: -32752
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Purpose: Lazy resolver
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001008
-# GOT-NEXT: Access: -32744
-# GOT-NEXT: Initial: 0x8000000000000000
-# GOT-NEXT: Purpose: Module pointer (GNU extension)
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Local entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001010
-# GOT-NEXT: Access: -32736
-# GOT-NEXT: Initial: 0x120000218
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001018
-# GOT-NEXT: Access: -32728
-# GOT-NEXT: Initial: 0x120000000
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001020
-# GOT-NEXT: Access: -32720
-# GOT-NEXT: Initial: 0x120000000
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Global entries [
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001028
-# GOT-NEXT: Access: -32712
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Value: 0x0
-# GOT-NEXT: Type: Function (0x2)
-# GOT-NEXT: Section: Undefined (0x0)
-# GOT-NEXT: Name: T1@ (1)
-# GOT-NEXT: }
-# GOT-NEXT: Entry {
-# GOT-NEXT: Address: 0x120001030
-# GOT-NEXT: Access: -32704
-# GOT-NEXT: Initial: 0x0
-# GOT-NEXT: Value: 0x0
-# GOT-NEXT: Type: Function (0x2)
-# GOT-NEXT: Section: Undefined (0x0)
-# GOT-NEXT: Name: T2@ (4)
-# GOT-NEXT: }
-# GOT-NEXT: ]
-# GOT-NEXT: Number of TLS and multi-GOT entries: 0
-# GOT-NEXT: }
-
-# RAW: Contents of section .text:
-# RAW-NEXT: 1200001f0 38800000 20800000 38800000 40800000 8... ...8...@...
-# ^ = -32712 (T1)
-# ^ = -32736 (LT1)
-# ^ -32712 (T1)
-# ^ -32704 (T2)
-# RAW-NEXT: 120000200 28800000 30800000 00000000 00000000 (...0...........
-# ^ -32728 (PAGE)
-# ^ -32720 (PAGE)
-# ^ T1 OFST
-# ^ T2 OFST
-# RAW-NEXT: 120000210 18020000 1c020000 00000000 00000000 ................
-# ^ LT1 OFST
-# ^ LT2 OFST
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 0x4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x4
- Size: 0x30
-
- - Name: .rel.text
- Type: SHT_RELA
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_GOT_DISP
- - Offset: 0x4
- Symbol: LT1
- Type: R_MIPS_GOT_DISP
- - Offset: 0x8
- Symbol: T1
- Type: R_MIPS_GOT_PAGE
- - Offset: 0xC
- Symbol: T2
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x10
- Symbol: LT1
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x14
- Symbol: LT2
- Type: R_MIPS_GOT_PAGE
- - Offset: 0x18
- Symbol: T1
- Type: R_MIPS_GOT_OFST
- - Offset: 0x1C
- Symbol: T2
- Type: R_MIPS_GOT_OFST
- - Offset: 0x20
- Symbol: LT1
- Type: R_MIPS_GOT_OFST
- - Offset: 0x24
- Symbol: LT2
- Type: R_MIPS_GOT_OFST
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x8
- - Name: LT1
- Type: STT_FUNC
- Section: .text
- Value: 0x28
- Size: 0x4
- - Name: LT2
- Type: STT_FUNC
- Section: .text
- Value: 0x2c
- Size: 0x4
- - Name: T1
- - Name: T2
-...
diff --git a/test/elf/Mips/got16-2.test b/test/elf/Mips/got16-2.test
deleted file mode 100644
index 6f576536c541..000000000000
--- a/test/elf/Mips/got16-2.test
+++ /dev/null
@@ -1,73 +0,0 @@
-# Check handling of R_MIPS_GOT16 relocation against local
-# symbols when addresses of local data cross 64 KBytes border.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t-exe %t-obj
-# RUN: llvm-objdump -s %t-exe | FileCheck %s
-
-# CHECK: Contents of section .got:
-# CHECK-NEXT: 40a000 00000000 00000080 00004000 00004100 ..........@...A.
-# lazy module 0x400000 0x410000
-# resolver pointer for L1 for L2
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '00000000000000000000000000000000'
-
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Address: 0x1000
- Relocations:
- - Offset: 0
- Symbol: L1
- Type: R_MIPS_GOT16
- - Offset: 4
- Symbol: L1
- Type: R_MIPS_LO16
- - Offset: 8
- Symbol: L2
- Type: R_MIPS_GOT16
- - Offset: 12
- Symbol: L2
- Type: R_MIPS_LO16
-
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x9000
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: L1
- Type: STT_OBJECT
- Section: .data
- Value: 0x00
- Size: 0x8000
- - Name: L2
- Type: STT_OBJECT
- Section: .data
- Value: 0x8000
- Size: 0x04
-
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x04
diff --git a/test/elf/Mips/got16-micro.test b/test/elf/Mips/got16-micro.test
deleted file mode 100644
index 6b77613581ec..000000000000
--- a/test/elf/Mips/got16-micro.test
+++ /dev/null
@@ -1,165 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of global/local R_MICROMIPS_GOT16 relocations.
-# RUN: llvm-mc -triple=mipsel -mattr=micromips -relocation-model=pic \
-# RUN: -filetype=obj -o=%t.o %s
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
-# RUN: --output-filetype=yaml %t.o \
-# RUN: | FileCheck -check-prefix YAML %s
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t2 %t.o
-# RUN: llvm-objdump -t -disassemble -mattr=micromips %t2 \
-# RUN: | FileCheck -check-prefix RAW %s
-
-# Function glob
-# YAML: - name: main
-# YAML: scope: global
-# YAML: content: [ 5C, FC, 00, 00, 42, 30, 00, 00, 5C, FC, 00, 00,
-# YAML: 42, 30, 00, 00, 5C, FC, 00, 00, 5C, FC, 00, 00,
-# YAML: 5C, FC, 00, 00 ]
-# YAML: alignment: 4 mod 2^4
-# YAML: code-model: mips-micro
-# YAML: references:
-# YAML-NEXT: - kind: R_MICROMIPS_GOT16
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: L000
-# YAML-NEXT: - kind: R_MICROMIPS_LO16
-# YAML-NEXT: offset: 4
-# YAML-NEXT: target: data_1
-# YAML-NEXT: - kind: R_MICROMIPS_GOT16
-# YAML-NEXT: offset: 8
-# YAML-NEXT: target: L001
-# YAML-NEXT: - kind: R_MICROMIPS_LO16
-# YAML-NEXT: offset: 12
-# YAML-NEXT: target: data_2
-# YAML-NEXT: - kind: R_MICROMIPS_GOT16
-# YAML-NEXT: offset: 16
-# YAML-NEXT: target: L002
-# YAML-NEXT: - kind: R_MICROMIPS_CALL16
-# YAML-NEXT: offset: 20
-# YAML-NEXT: target: L003
-# YAML-NEXT: - kind: R_MICROMIPS_CALL16
-# YAML-NEXT: offset: 24
-# YAML-NEXT: target: L004
-
-# Local GOT entries:
-# YAML: - ref-name: L000
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: data_1
-# YAML-NEXT: - ref-name: L001
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: data_2
-# YAML-NEXT: - ref-name: L002
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: R_MIPS_32
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: data_h
-
-# Global GOT entries:
-# YAML-NEXT: - ref-name: L003
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: bar
-# YAML-NEXT: - kind: R_MIPS_32
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: bar
-# YAML-NEXT: - ref-name: L004
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: foo
-
-# RAW: Disassembly of section .text:
-# RAW: main:
-# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 18 80 lw $2, -32744($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 40 10 addiu $2, $2, 4160
-# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 1c 80 lw $2, -32740($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 60 20 addiu $2, $2, 8288
-# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 20 80 lw $2, -32736($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 24 80 lw $2, -32732($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 28 80 lw $2, -32728($gp)
-
-# RAW: SYMBOL TABLE:
-# RAW: {{[0x0-9a-f]+}} *UND* 00000000
-# RAW: {{[0x0-9a-f]+}} l .data 00000000 data_1
-# RAW: {{[0x0-9a-f]+}} l .data 00000001 data_2
-# RAW: {{[0x0-9a-f]+}} g F .text 00000004 bar
-# RAW: {{[0x0-9a-f]+}} g F .text 0000001c main
-# RAW: {{[0x0-9a-f]+}} g .data 00000001 data_h
-
- .data
- .type data_1, @object
- .size data_1, 4128
-data_1:
- .byte 1
- .space 4127
- .type data_2, @object
- .size data_2, 1
-data_2:
- .byte 2
- .hidden data_h
- .globl data_h
- .type data_h, @object
- .size data_h, 1
-data_h:
- .byte 3
-
- .text
- .globl bar
- .set micromips
- .ent bar
- .type bar, @function
-bar:
- nop
- .end bar
- .size bar, .-bar
-
- .globl main
- .set micromips
- .ent main
- .type main, @function
-main:
- lw $2,%got(data_1)($28)
- addiu $2,$2,%lo(data_1)
- lw $2,%got(data_2)($28)
- addiu $2,$2,%lo(data_2)
- lw $2,%got(data_h)($28)
- lw $2,%call16(bar)($28)
- lw $2,%call16(foo)($28)
-
- .end main
- .size main, .-main
diff --git a/test/elf/Mips/got16.test b/test/elf/Mips/got16.test
deleted file mode 100644
index 9090d3003c14..000000000000
--- a/test/elf/Mips/got16.test
+++ /dev/null
@@ -1,196 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of global/local GOT16 relocations.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
-# RUN: --output-filetype=yaml %t.o \
-# RUN: | FileCheck -check-prefix YAML %s
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t2 %t.o
-# RUN: llvm-objdump -t -disassemble %t2 | FileCheck -check-prefix RAW %s
-
-# Function glob
-# YAML: - name: glob
-# YAML: scope: global
-# YAML: content: [ 00, 00, 84, 8F, 00, 00, 84, 24, 01, 00, 84, 8F,
-# YAML: 00, 02, 84, 24, 00, 00, 84, 8F, 00, 00, 84, 8F,
-# YAML: 00, 00, 84, 8F ]
-# YAML: alignment: 2^2
-# YAML: references:
-# YAML: - kind: R_MIPS_GOT16
-# YAML: offset: 0
-# YAML: target: L000
-# YAML: - kind: R_MIPS_LO16
-# YAML: offset: 4
-# YAML: target: L009
-# YAML: - kind: R_MIPS_GOT16
-# YAML: offset: 8
-# YAML: target: L002
-# YAML: addend: 66048
-# YAML: - kind: R_MIPS_LO16
-# YAML: offset: 12
-# YAML: target: L009
-# YAML: addend: 512
-# YAML: - kind: R_MIPS_GOT16
-# YAML: offset: 16
-# YAML: target: L004
-# YAML: - kind: R_MIPS_CALL16
-# YAML: offset: 20
-# YAML: target: L005
-# YAML: - kind: R_MIPS_CALL16
-# YAML: offset: 24
-# YAML: target: L006
-
-# Local GOT entries:
-# YAML: - ref-name: L000
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: L009
-# YAML-NEXT: - ref-name: L002
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: L009
-# YAML-NEXT: addend: 66048
-# YAML-NEXT: - ref-name: L004
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: R_MIPS_32
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: hidden
-
-# Global GOT entries:
-# YAML-NEXT: - ref-name: L005
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: glob
-# YAML-NEXT: - kind: R_MIPS_32
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: glob
-# YAML-NEXT: - ref-name: L006
-# YAML-NEXT: type: got
-# YAML-NEXT: content: [ 00, 00, 00, 00 ]
-# YAML-NEXT: alignment: 2^2
-# YAML-NEXT: section-choice: custom-required
-# YAML-NEXT: section-name: .got
-# YAML-NEXT: permissions: rw-
-# YAML-NEXT: references:
-# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
-# YAML-NEXT: offset: 0
-# YAML-NEXT: target: extern
-
-# RAW: Disassembly of section .text:
-# RAW: glob:
-# RAW-NEXT: {{[0x0-9a-f]+}}: 18 80 84 8f lw $4, -32744($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 00 20 84 24 addiu $4, $4, 8192
-# RAW-NEXT: {{[0x0-9a-f]+}}: 1c 80 84 8f lw $4, -32740($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 00 22 84 24 addiu $4, $4, 8704
-# RAW-NEXT: {{[0x0-9a-f]+}}: 20 80 84 8f lw $4, -32736($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 24 80 84 8f lw $4, -32732($gp)
-# RAW-NEXT: {{[0x0-9a-f]+}}: 28 80 84 8f lw $4, -32728($gp)
-
-# RAW: SYMBOL TABLE:
-# RAW: {{[0x0-9a-f]+}} *UND* 00000000
-# RAW: {{[0x0-9a-f]+}} l .data 00000000 str1
-# RAW: {{[0x0-9a-f]+}} l .data 00000005 str2
-# RAW: {{[0x0-9a-f]+}} g F .text 0000001c glob
-# RAW: {{[0x0-9a-f]+}} g .data 00000004 hidden
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '0000848F000084240100848F000284240000848F0000848F0000848F'
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: .data
- Type: R_MIPS_GOT16
- - Offset: 0x04
- Symbol: .data
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: .data
- Type: R_MIPS_GOT16
- - Offset: 0x0C
- Symbol: .data
- Type: R_MIPS_LO16
- - Offset: 0x10
- Symbol: hidden
- Type: R_MIPS_GOT16
- - Offset: 0x14
- Symbol: glob
- Type: R_MIPS_CALL16
- - Offset: 0x18
- Symbol: extern
- Type: R_MIPS_CALL16
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x10209
-
-Symbols:
- Local:
- - Name: str1
- Type: STT_OBJECT
- Section: .data
- Size: 0x10200
- - Name: str2
- Type: STT_OBJECT
- Section: .data
- Value: 0x10200
- Size: 0x05
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- Global:
- - Name: glob
- Section: .text
- - Name: hidden
- Type: STT_OBJECT
- Section: .data
- Value: 0x10205
- Size: 0x04
- Visibility: STV_HIDDEN
- - Name: extern
diff --git a/test/elf/Mips/gotsym.test b/test/elf/Mips/gotsym.test
deleted file mode 100644
index 4581901958aa..000000000000
--- a/test/elf/Mips/gotsym.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Check _gp_disp and GOT_OFFSET_TABLE value
-#
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t.so %t.o
-# RUN: llvm-objdump -h -t %t.so | FileCheck -check-prefix=SHARED %s
-
-# SHARED: Sections:
-# SHARED: Idx Name Size Address Type
-# SHARED: 6 .got 00000008 0000000000001000 DATA
-# SHARED: SYMBOL TABLE:
-# SHARED: 00001000 g *ABS* 00000000 _GLOBAL_OFFSET_TABLE_
-# SHARED: 00008ff0 g *ABS* 00000000 _gp
-# SHARED: 00008ff0 g *ABS* 00000000 _gp_disp
-
-# RUN: lld -flavor gnu -target mipsel -e main --noinhibit-exec -o %t.exe %t.o
-# RUN: llvm-objdump -h -t %t.exe | FileCheck -check-prefix=EXE %s
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 7 .got 00000008 0000000000401000 DATA
-# EXE: SYMBOL TABLE:
-# EXE: 00401000 g *ABS* 00000000 _GLOBAL_OFFSET_TABLE_
-# EXE: 00408ff0 g *ABS* 00000000 _gp
-# EXE: 00408ff0 g *ABS* 00000000 _gp_disp
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
-
-Symbols:
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/gp-sym-1-micro.test b/test/elf/Mips/gp-sym-1-micro.test
deleted file mode 100644
index 76274eaaa8ac..000000000000
--- a/test/elf/Mips/gp-sym-1-micro.test
+++ /dev/null
@@ -1,88 +0,0 @@
-# Check that microMIPS relocations against __gnu_local_gp
-# use "gp" value as target.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=SEC %s
-
-# SYM: Name: _gp (203)
-# SYM-NEXT: Value: 0x408FF0
-
-# SEC: Contents of section .text:
-# SEC-NEXT: 400184 00004100 0000f08f 2000bc00 ..A..... ...
-# SEC: Contents of section .got:
-# SEC-NEXT: 401000 00000000 00000080 ........
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 12
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: __gnu_local_gp
- Type: R_MICROMIPS_HI16
- - Offset: 0x04
- Symbol: __gnu_local_gp
- Type: R_MICROMIPS_LO16
- - Offset: 0x08
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: __gnu_local_gp
- - Name: T1
-...
diff --git a/test/elf/Mips/gp-sym-1.test b/test/elf/Mips/gp-sym-1.test
deleted file mode 100644
index 6c2ffb62629d..000000000000
--- a/test/elf/Mips/gp-sym-1.test
+++ /dev/null
@@ -1,86 +0,0 @@
-# Check that relocations against __gnu_local_gp use "gp" value as target.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=SEC %s
-
-# SYM: Name: _gp (203)
-# SYM-NEXT: Value: 0x408FF0
-
-# SEC: Contents of section .text:
-# SEC-NEXT: 400190 41000000 f08f0000 60001000
-# SEC: Contents of section .got:
-# SEC-NEXT: 401000 00000000 00000080
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 12
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: __gnu_local_gp
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: __gnu_local_gp
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: T1
- Type: R_MIPS_26
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: __gnu_local_gp
- - Name: T1
-...
diff --git a/test/elf/Mips/gp-sym-2.test b/test/elf/Mips/gp-sym-2.test
deleted file mode 100644
index 6b9e5a5e52d9..000000000000
--- a/test/elf/Mips/gp-sym-2.test
+++ /dev/null
@@ -1,103 +0,0 @@
-# Check that R_MIPS32 relocation against __gnu_local_gp causes emitting
-# of R_MIPS_REL32 relocation in case of shared library file linking
-# and does not produce any dynamic relocation in case of linking a non-shared
-# executable file.
-
-# Now the test failed because the __gnu_local_gp symbol becomes defined
-# absolute symbol and we do not generate R_MIPS_REL32 in case of shared
-# library linking.
-# XFAIL: *
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-1.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t-1.so
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=EXE %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-2.so %t-o.o %t-1.so
-# RUN: llvm-readobj -r %t-2.so | FileCheck -check-prefix=SO %s
-
-# EXE: Relocations [
-# EXE-NEXT: ]
-
-# SO: Relocations [
-# SO-NEXT: Section (5) .rel.dyn {
-# SO-NEXT: 0x0 R_MIPS_NONE - 0x0
-# SO-NEXT: 0x2EC R_MIPS_REL32 __gnu_local_gp 0x0
-# SO-NEXT: }
-# SO-NEXT: ]
-
-# so.so
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 12
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: __gnu_local_gp
- Type: R_MIPS_32
- - Offset: 0x04
- Symbol: T1
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: T2
- Type: R_MIPS_CALL16
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: __gnu_local_gp
- - Name: T1
- - Name: T2
-...
diff --git a/test/elf/Mips/hilo16-1.test b/test/elf/Mips/hilo16-1.test
deleted file mode 100644
index c2863408c888..000000000000
--- a/test/elf/Mips/hilo16-1.test
+++ /dev/null
@@ -1,44 +0,0 @@
-# REQUIRES: mips
-
-# Check handling multiple HI16 relocation followed by a single LO16 relocation.
-#
-# RUN: llvm-mc -triple=mipsel -filetype=obj -o=%t-obj %s
-# RUN: lld -flavor gnu -target mipsel -e glob1 -o %t-exe %t-obj
-# RUN: llvm-objdump -t -disassemble %t-exe | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK: glob1:
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 42 00 08 3c lui $8, 66
-# CHECK-NEXT: {{[0-9a-f]+}}: 3e 00 08 3c lui $8, 62
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 02 08 3c lui $8, 576
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 fe 08 3c lui $8, 65088
-# CHECK-NEXT: {{[0-9a-f]+}}: 55 01 08 85 lh $8, 341($8)
-
-# CHECK: SYMBOL TABLE:
-# CHECK: {{[0-9a-f]+}} g F .text 00000024 glob1
-# CHECK: {{[0-9a-f]+}} g F .text 00000004 glob2
-
- .global glob1
- .ent glob1
-glob1:
- lui $t0,%hi(glob2+0x1)
- lui $t0,%hi(glob2+(-0x1))
- lui $t0,%hi(glob2+0x1ff)
- lui $t0,%hi(glob2+(-0x1ff))
- lui $t0,%hi(glob2+0x1ffff)
- lui $t0,%hi(glob2+(-0x1ffff))
- lui $t0,%hi(glob2+0x1ffffff)
- lui $t0,%hi(glob2+(-0x1ffffff))
-
- lh $t0,%lo(glob2+(-0x1ffffff))($t0)
- .end glob1
-
- .global glob2
- .ent glob2
-glob2:
- nop
- .end glob2
diff --git a/test/elf/Mips/hilo16-2.test b/test/elf/Mips/hilo16-2.test
deleted file mode 100644
index 68cb26eec788..000000000000
--- a/test/elf/Mips/hilo16-2.test
+++ /dev/null
@@ -1,68 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of HI16 and LO16 relocations for regular symbol.
-#
-# R_MIPS_HI16: (AHL + S) - (short)(AHL + S)
-# R_MIPS_LO16: AHL + S
-# where AHL = (AHI << 16) + ALO
-#
-# RUN: llvm-mc -triple=mipsel -filetype=obj -o=%t-obj %s
-# RUN: lld -flavor gnu -target mipsel -e glob1 -o %t-exe %t-obj
-# RUN: llvm-objdump -t -disassemble %t-exe | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK: glob1:
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 71 01 08 85 lh $8, 369($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 6f 01 08 85 lh $8, 367($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 6f 03 08 85 lh $8, 879($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
-# CHECK-NEXT: {{[0-9a-f]+}}: 71 ff 08 85 lh $8, -143($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 42 00 08 3c lui $8, 66
-# CHECK-NEXT: {{[0-9a-f]+}}: 6f 01 08 85 lh $8, 367($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 3e 00 08 3c lui $8, 62
-# CHECK-NEXT: {{[0-9a-f]+}}: 71 01 08 85 lh $8, 369($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 02 08 3c lui $8, 576
-# CHECK-NEXT: {{[0-9a-f]+}}: 6f 01 08 85 lh $8, 367($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 40 fe 08 3c lui $8, 65088
-# CHECK-NEXT: {{[0-9a-f]+}}: 71 01 08 85 lh $8, 369($8)
-
-# CHECK: SYMBOL TABLE:
-# CHECK: {{[0-9a-f]+}} g F .text 00000040 glob1
-# CHECK: {{[0-9a-f]+}} g F .text 00000004 glob2
-
- .global glob1
- .ent glob1
-glob1:
- lui $t0,%hi(glob2+0x1)
- lh $t0,%lo(glob2+0x1)($t0)
-
- lui $t0,%hi(glob2+(-0x1))
- lh $t0,%lo(glob2+(-0x1))($t0)
-
- lui $t0,%hi(glob2+0x1ff)
- lh $t0,%lo(glob2+0x1ff)($t0)
-
- lui $t0,%hi(glob2+(-0x1ff))
- lh $t0,%lo(glob2+(-0x1ff))($t0)
-
- lui $t0,%hi(glob2+0x1ffff)
- lh $t0,%lo(glob2+0x1ffff)($t0)
-
- lui $t0,%hi(glob2+(-0x1ffff))
- lh $t0,%lo(glob2+(-0x1ffff))($t0)
-
- lui $t0,%hi(glob2+0x1ffffff) # truncate
- lh $t0,%lo(glob2+0x1ffffff)($t0)
-
- lui $t0,%hi(glob2+(-0x1ffffff)) # truncate
- lh $t0,%lo(glob2+(-0x1ffffff))($t0)
- .end glob1
-
- .global glob2
- .ent glob2
-glob2:
- nop
- .end glob2
diff --git a/test/elf/Mips/hilo16-3.test b/test/elf/Mips/hilo16-3.test
deleted file mode 100644
index daf4807d719a..000000000000
--- a/test/elf/Mips/hilo16-3.test
+++ /dev/null
@@ -1,45 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of HI16 and LO16 relocations for _gp_disp.
-#
-# R_MIPS_HI16: (AHL + GP - P) - (short)(AHL + GP - P)
-# R_MIPS_LO16: AHL + GP - P + 4
-# where AHL = (AHI << 16) + ALO
-#
-# RUN: llvm-mc -triple=mipsel -filetype=obj -o=%t-obj %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-so %t-obj
-# RUN: llvm-objdump -t -disassemble %t-so | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK: glob1:
-# CHECK-NEXT: {{[0-9a-f]+}}: 01 00 08 3c lui $8, 1
-# CHECK-NEXT: {{[0-9a-f]+}}: 01 8f 08 85 lh $8, -28927($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 01 00 08 3c lui $8, 1
-# CHECK-NEXT: {{[0-9a-f]+}}: f7 8e 08 85 lh $8, -28937($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 01 00 08 3c lui $8, 1
-# CHECK-NEXT: {{[0-9a-f]+}}: ef 90 08 85 lh $8, -28433($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 01 00 08 3c lui $8, 1
-# CHECK-NEXT: {{[0-9a-f]+}}: e9 8c 08 85 lh $8, -29463($8)
-# CHECK-NEXT: {{[0-9a-f]+}}: 03 00 08 3c lui $8, 3
-# CHECK-NEXT: {{[0-9a-f]+}}: df 8e 08 85 lh $8, -28961($8)
-
-# CHECK: SYMBOL TABLE:
-# CHECK: {{[0-9a-f]+}} g F .text 00000028 glob1
-# CHECK: {{[0-9a-f]+}} g *ABS* 00000000 _gp_disp
-
- .global glob1
-glob1:
- lui $t0,%hi(_gp_disp+0x1)
- lh $t0,%lo(_gp_disp+0x1)($t0)
-
- lui $t0,%hi(_gp_disp+(-0x1))
- lh $t0,%lo(_gp_disp+(-0x1))($t0)
-
- lui $t0,%hi(_gp_disp+0x1ff)
- lh $t0,%lo(_gp_disp+0x1ff)($t0)
-
- lui $t0,%hi(_gp_disp+(-0x1ff))
- lh $t0,%lo(_gp_disp+(-0x1ff))($t0)
-
- lui $t0,%hi(_gp_disp+0x1ffff)
- lh $t0,%lo(_gp_disp+0x1ffff)($t0)
diff --git a/test/elf/Mips/hilo16-4.test b/test/elf/Mips/hilo16-4.test
deleted file mode 100644
index 8a13f7b131fd..000000000000
--- a/test/elf/Mips/hilo16-4.test
+++ /dev/null
@@ -1,93 +0,0 @@
-# REQUIRES: mips
-
-# Check pairing of R_MIPS_HI16 and R_MIPS_LO16 relocations.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -e glob1 -o %t-exe %t-obj
-# RUN: llvm-objdump -t -disassemble %t-exe | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK: glob1:
-# CHECK-NEXT: 400130: 40 00 04 3c lui $4, 64
-# CHECK-NEXT: 400134: ff 9f a6 8c lw $6, -24577($5)
-
-# CHECK: glob2:
-# CHECK-NEXT: 400138: 00 20 c7 80 lb $7, 8192($6)
-# CHECK-NEXT: 40013c: 04 20 c8 80 lb $8, 8196($6)
-
-# CHECK: glob3:
-# CHECK-NEXT: 400140: 40 80 05 3c lui $5, 32832
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400130 g F .text 00000008 glob1
-# CHECK: 00400138 g F .text 00000008 glob2
-# CHECK: 00400140 g F .text 00000004 glob3
-# CHECK: 00402000 g .data 0000000c X
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
-# glob1:
-# lui $4,%hi(X) # rel A
-# lw $6,%lo(X+32767)($5) # rel B
-# glob2:
-# lb $7,%lo(X)($6) # rel C
-# lb $8,%lo(X+4)($6) # rel D
-# glob3:
-# lui $5,%hi(X+32767) # rel E
- Content: "0000043CFF7FA68C0000C7800400C880FF7F053C"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Content: "000000000000000000000000"
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x10 # rel E
- Symbol: X
- Type: R_MIPS_HI16
- - Offset: 0x04 # rel B
- Symbol: X
- Type: R_MIPS_LO16
- - Offset: 0x00 # rel A
- Symbol: X
- Type: R_MIPS_HI16
- - Offset: 0x0C # rel D
- Symbol: X
- Type: R_MIPS_LO16
- - Offset: 0x08 # rel C
- Symbol: X
- Type: R_MIPS_LO16
-
-Symbols:
- Global:
- - Name: glob1
- Section: .text
- Value: 0x0
- Size: 8
- - Name: glob2
- Section: .text
- Value: 0x8
- Size: 8
- - Name: glob3
- Section: .text
- Value: 0x10
- Size: 4
- - Name: X
- Section: .data
- Value: 0x0
- Size: 12
diff --git a/test/elf/Mips/hilo16-5.test b/test/elf/Mips/hilo16-5.test
deleted file mode 100644
index 91aca8b1c366..000000000000
--- a/test/elf/Mips/hilo16-5.test
+++ /dev/null
@@ -1,103 +0,0 @@
-# Check that linker shows a warning when
-# there is orphaned R_MIPS_HI16 relocation.
-
-# RUN: yaml2obj -format=elf -o %t-so.o -docnum 1 %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -o %t-o.o -docnum 2 %s
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so 2>&1 \
-# RUN: | FileCheck -check-prefix=DIAG %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=DATA %s
-
-# DIAG: lld warning: cannot matching LO16 relocation
-# DIAG: lld warning: cannot matching LO16 relocation
-
-# DATA: Contents of section .data:
-# DATA-NEXT: 402000 40000000 10200000 40000000 @.... ..@...
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Content: "000000000000000000000000"
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_HI16
- - Offset: 0x08
- Symbol: D2
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_LO16
- - Offset: 0x08
- Symbol: .text
- Type: R_MIPS_HI16
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
-
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: D1
- - Name: D2
-...
diff --git a/test/elf/Mips/hilo16-8-micro.test b/test/elf/Mips/hilo16-8-micro.test
deleted file mode 100644
index 3248804f8f54..000000000000
--- a/test/elf/Mips/hilo16-8-micro.test
+++ /dev/null
@@ -1,81 +0,0 @@
-# REQUIRES: mips
-
-# Check calculation of AHL addendums for R_MICROMIPS_HI16 / R_MICROMIPS_LO16
-# relocations for a regular symbol.
-#
-# RUN: llvm-mc -triple=mipsel -mattr=micromips -filetype=obj -o=%t-obj %s
-# RUN: lld -flavor gnu -target mipsel -e glob1 -o %t-exe %t-obj
-# RUN: llvm-objdump -t -d -mattr=micromips %t-exe | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK-NEXT: glob1:
-# CHECK-NEXT: 400130: a8 41 40 00 lui $8, 64
-# CHECK-NEXT: 400134: 08 3d 6a 01 lh $8, 362($8)
-# CHECK-NEXT: 400138: a8 41 41 00 lui $8, 65
-# CHECK-NEXT: 40013c: 08 3d 68 81 lh $8, -32408($8)
-# CHECK-NEXT: 400140: a8 41 41 00 lui $8, 65
-# CHECK-NEXT: 400144: 08 3d e9 81 lh $8, -32279($8)
-# CHECK-NEXT: 400148: a8 41 42 00 lui $8, 66
-# CHECK-NEXT: 40014c: 08 3d 69 81 lh $8, -32407($8)
-# CHECK-NEXT: 400150: a8 41 40 40 lui $8, 16448
-# CHECK-NEXT: 400154: 08 3d 69 01 lh $8, 361($8)
-# CHECK-NEXT: 400158: a8 41 40 80 lui $8, 32832
-# CHECK-NEXT: 40015c: 08 3d 69 01 lh $8, 361($8)
-# CHECK-NEXT: 400160: a8 41 c1 80 lui $8, 32961
-# CHECK-NEXT: 400164: 08 3d e9 81 lh $8, -32279($8)
-
-# CHECK: glob2:
-# CHECK-NEXT: 400168: a8 41 40 00 lui $8, 64
-# CHECK-NEXT: 40016c: a8 41 40 00 lui $8, 64
-# CHECK-NEXT: 400170: a8 41 41 00 lui $8, 65
-# CHECK-NEXT: 400174: a8 41 42 00 lui $8, 66
-# CHECK-NEXT: 400178: a8 41 40 40 lui $8, 16448
-# CHECK-NEXT: 40017c: a8 41 40 80 lui $8, 32832
-# CHECK-NEXT: 400180: a8 41 c1 80 lui $8, 32961
-# CHECK-NEXT: 400184: 08 3d b1 81 lh $8, -32335($8)
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400130 g F .text 00000038 glob1
-# CHECK: 00400168 g F .text 00000020 glob2
-
- .globl glob1
- .type glob1, @function
- .set micromips
- .ent glob1
-glob1:
- lui $t0,%hi(glob2+0x00000001)
- lh $t0,%lo(glob2+0x00000001)($t0)
-
- lui $t0,%hi(glob2+0x00007fff)
- lh $t0,%lo(glob2+0x00007fff)($t0)
-
- lui $t0,%hi(glob2+0x00008080)
- lh $t0,%lo(glob2+0x00008080)($t0)
-
- lui $t0,%hi(glob2+0x00018000)
- lh $t0,%lo(glob2+0x00018000)($t0)
-
- lui $t0,%hi(glob2+0x40000000)
- lh $t0,%lo(glob2+0x40000000)($t0)
-
- lui $t0,%hi(glob2+0x80000000)
- lh $t0,%lo(glob2+0x80000000)($t0)
-
- lui $t0,%hi(glob2+0x80808080)
- lh $t0,%lo(glob2+0x80808080)($t0)
- .end glob1
-
- .globl glob2
- .type glob2, @function
- .set micromips
- .ent glob2
-glob2:
- lui $t0,%hi(glob1+0x00000001)
- lui $t0,%hi(glob1+0x00007fff)
- lui $t0,%hi(glob1+0x00008080)
- lui $t0,%hi(glob1+0x00018000)
- lui $t0,%hi(glob1+0x40000000)
- lui $t0,%hi(glob1+0x80000000)
- lui $t0,%hi(glob1+0x80808080)
- lh $t0,%lo(glob1+0x80808080)($t0)
- .end glob2
diff --git a/test/elf/Mips/hilo16-9-micro.test b/test/elf/Mips/hilo16-9-micro.test
deleted file mode 100644
index 30ad10ce0dd4..000000000000
--- a/test/elf/Mips/hilo16-9-micro.test
+++ /dev/null
@@ -1,68 +0,0 @@
-# REQUIRES: mips
-
-# Check calculation of AHL addendums for R_MICROMIPS_HI16 / R_MICROMIPS_LO16
-# relocations for the _gp_disp symbol.
-#
-# RUN: llvm-mc -triple=mipsel -mattr=micromips -filetype=obj -o=%t-obj %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t-so %t-obj
-# RUN: llvm-objdump -t -d -mattr=micromips %t-so | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK-NEXT: glob1:
-# CHECK-NEXT: 130: a8 41 01 00 lui $8, 1
-# CHECK-NEXT: 134: 08 3d c0 9e lh $8, -24896($8)
-# CHECK-NEXT: 138: a8 41 01 00 lui $8, 1
-# CHECK-NEXT: 13c: 08 3d b6 1e lh $8, 7862($8)
-# CHECK-NEXT: 140: a8 41 01 00 lui $8, 1
-# CHECK-NEXT: 144: 08 3d 2f 1f lh $8, 7983($8)
-# CHECK-NEXT: 148: a8 41 02 00 lui $8, 2
-# CHECK-NEXT: 14c: 08 3d a7 1e lh $8, 7847($8)
-# CHECK-NEXT: 150: a8 41 01 40 lui $8, 16385
-# CHECK-NEXT: 154: 08 3d 9f 9e lh $8, -24929($8)
-
-# CHECK: glob2:
-# CHECK-NEXT: 158: a8 41 01 00 lui $8, 1
-# CHECK-NEXT: 15c: a8 41 01 00 lui $8, 1
-# CHECK-NEXT: 160: a8 41 02 00 lui $8, 2
-# CHECK-NEXT: 164: a8 41 03 00 lui $8, 3
-# CHECK-NEXT: 168: a8 41 01 40 lui $8, 16385
-# CHECK-NEXT: 16c: 08 3d 87 9e lh $8, -24953($8)
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00000130 g F .text 00000028 glob1
-# CHECK: 00000158 g F .text 00000018 glob2
-# CHECK: 00009ff0 g *ABS* 00000000 _gp_disp
-
- .globl glob1
- .type glob1, @function
- .set micromips
- .ent glob1
-glob1:
- lui $t0,%hi(_gp_disp+0x00000001)
- lh $t0,%lo(_gp_disp+0x00000001)($t0)
-
- lui $t0,%hi(_gp_disp+0x00007fff)
- lh $t0,%lo(_gp_disp+0x00007fff)($t0)
-
- lui $t0,%hi(_gp_disp+0x00008080)
- lh $t0,%lo(_gp_disp+0x00008080)($t0)
-
- lui $t0,%hi(_gp_disp+0x00018000)
- lh $t0,%lo(_gp_disp+0x00018000)($t0)
-
- lui $t0,%hi(_gp_disp+0x40000000)
- lh $t0,%lo(_gp_disp+0x40000000)($t0)
- .end glob1
-
- .globl glob2
- .type glob2, @function
- .set micromips
- .ent glob2
-glob2:
- lui $t0,%hi(_gp_disp+0x00000001)
- lui $t0,%hi(_gp_disp+0x00007fff)
- lui $t0,%hi(_gp_disp+0x00008080)
- lui $t0,%hi(_gp_disp+0x00018000)
- lui $t0,%hi(_gp_disp+0x40000000)
- lh $t0,%lo(_gp_disp+0x40000000)($t0)
- .end glob2
diff --git a/test/elf/Mips/initfini-micro.test b/test/elf/Mips/initfini-micro.test
deleted file mode 100644
index ba30e89ade21..000000000000
--- a/test/elf/Mips/initfini-micro.test
+++ /dev/null
@@ -1,45 +0,0 @@
-# Check that if _init/_fini symbols are microMIPS encoded, DT_INIT/DT_FINI tags
-# use adjusted values with set the last bit.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.o
-# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
-
-# CHECK: Name: _init (1)
-# CHECK-NEXT: Value: 0xF5
-# CHECK: Name: _fini (7)
-# CHECK-NEXT: Value: 0xF9
-#
-# CHECK: 0x0000000C INIT 0xF5
-# CHECK: 0x0000000D FINI 0xF9
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x18
-
-Symbols:
- Global:
- - Name: _init
- Type: STT_FUNC
- Section: .text
- Value: 0x0
- Size: 0x4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: _fini
- Type: STT_FUNC
- Section: .text
- Value: 0x4
- Size: 0x4
- Other: [ STO_MIPS_MICROMIPS ]
-...
diff --git a/test/elf/Mips/interpreter-64.test b/test/elf/Mips/interpreter-64.test
deleted file mode 100644
index 3ece3e6a467a..000000000000
--- a/test/elf/Mips/interpreter-64.test
+++ /dev/null
@@ -1,26 +0,0 @@
-# Check program interpreter setup.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -e main -o %t.exe %t.o
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .interp:
-# CHECK-NEXT: {{[0-9a-f]+}} 2f6c6962 36342f6c 642e736f 2e3100 /lib64/ld.so.1.
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x08
-
-Symbols:
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/interpreter.test b/test/elf/Mips/interpreter.test
deleted file mode 100644
index 5355f7709fbd..000000000000
--- a/test/elf/Mips/interpreter.test
+++ /dev/null
@@ -1,26 +0,0 @@
-# Check program interpreter setup.
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e main -o %t.exe %t.o
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .interp:
-# CHECK-NEXT: {{[0-9a-f]+}} 2f6c6962 2f6c642e 736f2e31 00 /lib/ld.so.1.
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
-
-Symbols:
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/invalid-reginfo.test b/test/elf/Mips/invalid-reginfo.test
deleted file mode 100644
index d56223bf2e04..000000000000
--- a/test/elf/Mips/invalid-reginfo.test
+++ /dev/null
@@ -1,28 +0,0 @@
-# Check that LLD shows an error if .reginfo section has invalid size
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: not lld -flavor gnu -target mipsel -o %t.exe %t.o 2>&1 | FileCheck %s
-
-# CHECK: Invalid size of MIPS_REGINFO section
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Size: 0x25
-Symbols:
- Global:
- - Name: main
- Section: .text
diff --git a/test/elf/Mips/jalx-align-err.test b/test/elf/Mips/jalx-align-err.test
deleted file mode 100644
index 3db18fc98fac..000000000000
--- a/test/elf/Mips/jalx-align-err.test
+++ /dev/null
@@ -1,46 +0,0 @@
-# Check that LLD shows an error if jalx target value is not word-aligned.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: not lld -flavor gnu -target mipsel -e T0 -o %t-exe %t-obj 2>&1 \
-# RUN: | FileCheck %s
-
-# CHECK: The jalx target 0x400116 is not word-aligned
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 6
- Size: 2
diff --git a/test/elf/Mips/jump-fix-err.test b/test/elf/Mips/jump-fix-err.test
deleted file mode 100644
index 981179938397..000000000000
--- a/test/elf/Mips/jump-fix-err.test
+++ /dev/null
@@ -1,45 +0,0 @@
-# Check that LLD shows an error in case
-# of replacing an unknown unstruction by jalx.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: not lld -flavor gnu -target mipsel -o %t-exe %t-obj 2>&1 | FileCheck %s
-
-# CHECK: Unsupported jump opcode (0x0) for ISA modes cross call
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T0
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Type: STT_FUNC
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 4
- Size: 4
diff --git a/test/elf/Mips/la25-stub-micro.test b/test/elf/Mips/la25-stub-micro.test
deleted file mode 100644
index d41297a0ddc3..000000000000
--- a/test/elf/Mips/la25-stub-micro.test
+++ /dev/null
@@ -1,140 +0,0 @@
-# Check microMIPS LA25 stubs creation when PIC code
-# is called from non-PIC routines.
-
-# Build executable from pic and non-pic code.
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe \
-# RUN: %t-npic.o %t-pic.o %t-main.o
-
-# RUN: llvm-readobj -t %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=ASM %s
-
-# SYM: Name: loc (13)
-# SYM-NEXT: Value: 0x400135
-# SYM: Name: T1N (1)
-# SYM-NEXT: Value: 0x400111
-# SYM: Name: T1 (5)
-# SYM-NEXT: Value: 0x400121
-# SYM: Name: glob (8)
-# SYM-NEXT: Value: 0x400125
-
-# ASM: Contents of section .text:
-# ASM-NEXT: 400110 00000000 00000000 00000000 00000000
-# ASM-NEXT: 400120 00000000 00000000 00000000 10f04900
-# 0x100049 << 2 == 0x400125 (jalx glob) --^
-# ASM-NEXT: 400130 00000000 20f49200 00000000 20f48800
-# ^-- 0x100049 << 2 == 0x400124 (jal glob)
-# 0x100044 << 2 == 0x400110 (jal T1N) --^
-# ASM-NEXT: 400140 00000000 20f4a800 00000000 00000000
-# ^-- 0x100054 << 2 == 0x400150 (jal T1 stub)
-# ASM-NEXT: 400150 b9414000 20d49000 39332101 00000000
-# ^-- j 0x400120 (T1)
-
-# npic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_CPIC, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1N
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
-
-# pic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
-
-# main.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_CPIC, EF_MIPS_MICROMIPS ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '000000000000000000f400000000000000f400000000000000f400000000000000f4000000000000'
-# jal loc jal glob jal T1N jal T1
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: .text
- Type: R_MICROMIPS_26_S1
- - Offset: 0x10
- Symbol: glob
- Type: R_MICROMIPS_26_S1
- - Offset: 0x18
- Symbol: T1N
- Type: R_MICROMIPS_26_S1
- - Offset: 0x20
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- Size: 0x18
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Size: 0x10
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- - Name: T1N
-...
diff --git a/test/elf/Mips/la25-stub.test b/test/elf/Mips/la25-stub.test
deleted file mode 100644
index 2c4b26452cec..000000000000
--- a/test/elf/Mips/la25-stub.test
+++ /dev/null
@@ -1,133 +0,0 @@
-# Check LA25 stubs creation when PIC code is called from non-PIC routines.
-
-# Build executable from pic and non-pic code.
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe \
-# RUN: %t-npic.o %t-pic.o %t-main.o
-
-# RUN: llvm-readobj -t %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=ASM %s
-
-# SYM: Name: loc (13)
-# SYM-NEXT: Value: 0x400134
-# SYM: Name: T1N (1)
-# SYM-NEXT: Value: 0x400110
-# SYM: Name: T1 (5)
-# SYM-NEXT: Value: 0x400120
-# SYM: Name: glob (8)
-# SYM-NEXT: Value: 0x400124
-
-# ASM: Contents of section .text:
-# ASM-NEXT: 400110 00000000 00000000 00000000 00000000
-# ASM-NEXT: 400120 00000000 00000000 00000000 49001000
-# 0x100049 << 2 == 0x400124 (glob) --^
-# ASM-NEXT: 400130 00000000 49001000 00000000 44001000
-# ^-- 0x100049 << 2 == 0x400124 (glob)
-# 0x100044 << 2 == 0x400110 (T1N) --^
-# ASM-NEXT: 400140 00000000 54001000 00000000 00000000
-# ^-- 0x100054 << 2 == 0x400150 (T1 stub)
-# ASM-NEXT: 400150 4000193c 48001008 20013927 00000000
-# ^-- j 0x400120 (T1)
-
-# npic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1N
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# pic.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# main.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x28
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: .text
- Type: R_MIPS_26
- Addend: 0
- - Offset: 0x10
- Symbol: glob
- Type: R_MIPS_26
- Addend: 0
- - Offset: 0x18
- Symbol: T1N
- Type: R_MIPS_26
- Addend: 0
- - Offset: 0x20
- Symbol: T1
- Type: R_MIPS_26
- Addend: 0
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- - Name: T1
- - Name: T1N
-...
diff --git a/test/elf/Mips/mips-options-gp0.test b/test/elf/Mips/mips-options-gp0.test
deleted file mode 100644
index 339ab97253b6..000000000000
--- a/test/elf/Mips/mips-options-gp0.test
+++ /dev/null
@@ -1,78 +0,0 @@
-# Check reading GP0 value from .MIPS.options section
-#
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e G1 -shared -o %t.so %t.o
-# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
-
-# SYM: Name: L1 (1)
-# SYM-NEXT: Value: 0xCC
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Local (0x0)
-# SYM-NEXT: Type: Function (0x2)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .text (0x4)
-
-# SYM: Name: _gp (34)
-# SYM-NEXT: Value: 0x8FF0
-# SYM-NEXT: Size: 0
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: Object (0x1)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: Absolute (0xFFF1)
-
-# 0xffff80dc == 0x0 (addend) + 0x00cc (L1) + 0x1000 (GP0) - 0x8ff0 (_gp)
-# SEC: Contents of section .rodata:
-# SEC-NEXT: 00d4 dc80ffff 00000000 00000000 00000000 ................
-
-!ELF
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-
-- Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 16
-
-- Name: .rel.rodata
- Type: SHT_REL
- Link: .symtab
- Info: .rodata
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: L1
- Type: R_MIPS_GPREL32
-
-- Name: .MIPS.options
- Type: SHT_MIPS_OPTIONS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Content: "0128000000000000000000000000000000000000000000000000000000100000"
-
-Symbols:
- Local:
- - Name: L1
- Section: .text
- Value: 0x00
- Size: 0x04
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- Global:
- - Name: G1
- Section: .text
- Value: 0x04
- Size: 0x04
diff --git a/test/elf/Mips/n64-rel-chain.test b/test/elf/Mips/n64-rel-chain.test
deleted file mode 100644
index 0ae7af73ae83..000000000000
--- a/test/elf/Mips/n64-rel-chain.test
+++ /dev/null
@@ -1,134 +0,0 @@
-# Check handling MIPS N64 ABI relocation "chains".
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 1200001d0 01000000 00000000 208e0000 00000000 ........ .......
-# CHECK-NEXT: 1200001e0 20800000 f8010000 28800000 00000000 .......(.......
-# CHECK: Contents of section .pdr:
-# CHECK-NEXT: 0000 d0010020 e0010020 ... ...
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 16
- Size: 8
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Value: 0
- Size: 8
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 16
- Size: 32
-
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 8
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: LT1
- Type: R_MIPS_GPREL16
- Type2: R_MIPS_SUB
- Type3: R_MIPS_HI16
- - Offset: 0x08
- Symbol: LT1
- Type: R_MIPS_GPREL16
- Type2: R_MIPS_SUB
- Type3: R_MIPS_LO16
- - Offset: 0x10
- Symbol: .rodata
- Type: R_MIPS_GOT_PAGE
- Addend: 8
- - Offset: 0x14
- Symbol: .rodata
- Type: R_MIPS_GOT_OFST
- Addend: 8
- - Offset: 0x18
- Symbol: T1
- Type: R_MIPS_CALL16
-
- - Name: .pdr
- Type: SHT_PROGBITS
- AddressAlign: 4
- Size: 8
-
- - Name: .rela.pdr
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 8
- Info: .pdr
- Relocations:
- - Offset: 0x00
- Symbol: LT1
- Type: R_MIPS_32
- - Offset: 0x04
- Symbol: T0
- Type: R_MIPS_32
-
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 16
- Size: 16
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- - Name: .pdr
- Type: STT_SECTION
- Section: .pdr
-
- Global:
- - Name: LT1
- Type: STT_FUNC
- Section: .text
- Value: 0x00
- Size: 0x10
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Value: 0x10
- Size: 0x10
- - Name: T1
-...
diff --git a/test/elf/Mips/opt-emulation.test b/test/elf/Mips/opt-emulation.test
deleted file mode 100644
index 2d1e7142c386..000000000000
--- a/test/elf/Mips/opt-emulation.test
+++ /dev/null
@@ -1,41 +0,0 @@
-# Check MIPS specific arguments of the -m command line option.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -m elf32ltsmip -o %t-exe %t-obj
-# RUN: llvm-readobj -file-headers %t-exe | FileCheck -check-prefix=LE-O32 %s
-
-# LE-O32: Class: 32-bit (0x1)
-# LE-O32: DataEncoding: LittleEndian (0x1)
-# LE-O32: FileVersion: 1
-# LE-O32: OS/ABI: SystemV (0x0)
-# LE-O32: ABIVersion: 0
-# LE-O32: Machine: EM_MIPS (0x8)
-# LE-O32: Version: 1
-# LE-O32: Flags [ (0x70001005)
-# LE-O32-NEXT: EF_MIPS_ABI_O32 (0x1000)
-# LE-O32-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
-# LE-O32-NEXT: EF_MIPS_CPIC (0x4)
-# LE-O32-NEXT: EF_MIPS_NOREORDER (0x1)
-# LE-O32-NEXT: ]
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 4
diff --git a/test/elf/Mips/pc23-range.test b/test/elf/Mips/pc23-range.test
deleted file mode 100644
index 7166176c4628..000000000000
--- a/test/elf/Mips/pc23-range.test
+++ /dev/null
@@ -1,56 +0,0 @@
-# Check that LLD shows an error if ADDIUPC immediate is out of range.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj 2>&1 | FileCheck %s
-
-# CHECK: The addiupc instruction immediate 0x02000008 is out of range
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000080780100"
-# ^ PC23: 1 << 2 = 4 => T0 + 4 - 4 = T0
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x4000000
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 4
- Symbol: T0
- Type: R_MICROMIPS_PC23_S2
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Type: STT_FUNC
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: TZ
- Section: .data
- Type: STT_FUNC
- Value: 0
- Size: 0x2000000
- - Name: T0
- Section: .data
- Type: STT_FUNC
- Value: 0x2000000
- Size: 4
diff --git a/test/elf/Mips/plt-entry-mixed-1.test b/test/elf/Mips/plt-entry-mixed-1.test
deleted file mode 100644
index bc45763fa16d..000000000000
--- a/test/elf/Mips/plt-entry-mixed-1.test
+++ /dev/null
@@ -1,114 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Object file contains both R_MIPS_26 and microMIPS non-jal relocations.
-# b) The R_MIPS_26 relocation handled first.
-# Check:
-# a) PLT contains the only regular entry.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-# CHECK: Disassembly of section .plt:
-# CHECK-NEXT: .plt:
-# CHECK-NEXT: 400170: 40 00 1c 3c lui $gp, 64
-# CHECK-NEXT: 400174: 00 20 99 8f lw $25, 8192($gp)
-# CHECK-NEXT: 400178: 00 20 9c 27 addiu $gp, $gp, 8192
-# CHECK-NEXT: 40017c: 23 c0 1c 03 subu $24, $24, $gp
-# CHECK-NEXT: 400180: 21 78 e0 03 move $15, $ra
-# CHECK-NEXT: 400184: 82 c0 18 00 srl $24, $24, 2
-# CHECK-NEXT: 400188: 09 f8 20 03 jalr $25
-# CHECK-NEXT: 40018c: fe ff 18 27 addiu $24, $24, -2
-# CHECK-NEXT: 400190: 40 00 0f 3c lui $15, 64
-# CHECK-NEXT: 400194: 08 20 f9 8d lw $25, 8200($15)
-# CHECK-NEXT: 400198: 08 00 20 03 jr $25
-# CHECK-NEXT: 40019c: 08 20 f8 25 addiu $24, $15, 8200
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000C00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x8
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-entry-mixed-2.test b/test/elf/Mips/plt-entry-mixed-2.test
deleted file mode 100644
index 5aec7d7a328a..000000000000
--- a/test/elf/Mips/plt-entry-mixed-2.test
+++ /dev/null
@@ -1,93 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Object file contains both R_MIPS_26 and R_MICROMIPS_26_S1 relocations.
-# Check:
-# a) PLT contains both regular and compressed PLT entries
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# FIXME (simon): Check the disassembler output when llvm-objdump starts
-# to support microMIPS instruction encoding.
-
-# CHECK: Contents of section .plt:
-# CHECK-NEXT: 400170 40001c3c 0020998f 00209c27 23c01c03 @..<. ... .'#...
-# CHECK-NEXT: 400180 2178e003 82c01800 09f82003 feff1827 !x........ ....'
-# CHECK-NEXT: 400190 40000f3c 0820f98d 08002003 0820f825 @..<. .... .. .%
-# CHECK-NEXT: 4001a0 00799a07 22ff0000 9945020f .y.."....E..
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000C000000000000000000000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: T2
- Type: R_MIPS_26
- - Offset: 0x8
- Symbol: T2
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x8
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 0x8
- Other: [STO_MIPS_MICROMIPS]
- - Name: T2
-...
diff --git a/test/elf/Mips/plt-entry-mixed-3.test b/test/elf/Mips/plt-entry-mixed-3.test
deleted file mode 100644
index c61991b4b139..000000000000
--- a/test/elf/Mips/plt-entry-mixed-3.test
+++ /dev/null
@@ -1,98 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Object file contains microMIPS instructions.
-# b) There is a relocation refers arbitrary symbols and requires a PLT entry.
-# Check:
-# a) PLT contains a compressed entry.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# FIXME (simon): Check the disassembler output when llvm-objdump starts
-# to support microMIPS instruction encoding.
-
-# CHECK: Contents of section .plt:
-# CHECK-NEXT: 400170 8079a407 23ff0000 35052525 0233feff .y..#...5.%%.3..
-# CHECK-NEXT: 400180 ff0df945 830f000c 0079a007 22ff0000 ...E.....y.."...
-# CHECK-NEXT: 400190 9945020f .E..
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 16
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 16
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-entry-mixed-4.test b/test/elf/Mips/plt-entry-mixed-4.test
deleted file mode 100644
index acf5060621f6..000000000000
--- a/test/elf/Mips/plt-entry-mixed-4.test
+++ /dev/null
@@ -1,85 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Object file contains R_MIPS_26 relocation refers to the microMIPS symbol.
-# Check:
-# a) PLT contains a regular non-compressed entry.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t.so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# FIXME (simon): Check the disassembler output when llvm-objdump starts
-# to support microMIPS instruction encoding.
-
-# CHECK: Contents of section .plt:
-# CHECK-NEXT: 400170 40001c3c 0020998f 00209c27 23c01c03 @..<. ... .'#...
-# CHECK-NEXT: 400180 2178e003 82c01800 09f82003 feff1827 !x........ ....'
-# CHECK-NEXT: 400190 40000f3c 0820f98d 08002003 0820f825 @..<. .... .. .%
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [STO_MIPS_MICROMIPS]
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000C00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_26
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x8
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-entry-r6.test b/test/elf/Mips/plt-entry-r6.test
deleted file mode 100644
index bb05531487ff..000000000000
--- a/test/elf/Mips/plt-entry-r6.test
+++ /dev/null
@@ -1,109 +0,0 @@
-# REQUIRES: mips
-
-# Check generation of PLT entries in case of R6 target ABI.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-# CHECK: Disassembly of section .plt:
-# CHECK-NEXT: .plt:
-# CHECK-NEXT: 400160: 40 00 1c 3c lui $gp, 64
-# CHECK-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
-# CHECK-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
-# CHECK-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
-# CHECK-NEXT: 400170: 21 78 e0 03 move $15, $ra
-# CHECK-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
-# CHECK-NEXT: 400178: 09 f8 20 03 jalr $25
-# CHECK-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
-# CHECK-NEXT: 400180: 40 00 0f 3c lui $15, 64
-# CHECK-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
-# CHECK-NEXT: 400188: 09 00 20 03 jr $25
-# CHECK-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000C00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x8
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-header-micro.test b/test/elf/Mips/plt-header-micro.test
deleted file mode 100644
index ce042741cd32..000000000000
--- a/test/elf/Mips/plt-header-micro.test
+++ /dev/null
@@ -1,108 +0,0 @@
-# REQUIRES: mips
-
-# Check initialization of .plt header entries
-# if all PLT entries use microMIPS encoding.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
-# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
-
-# DIS: Disassembly of section .plt:
-# DIS-NEXT: .plt:
-# DIS-NEXT: 400170: 80 79 a4 07 addiupc $3, 7824
-# DIS-NEXT: 400174: 23 ff 00 00 lw $25, 0($3)
-# DIS-NEXT: 400178: 35 05 subu16 $2, $2, $3
-# DIS-NEXT: 40017a: 25 25 srl16 $2, $2, 2
-# DIS-NEXT: 40017c: 02 33 fe ff addiu $24, $2, -2
-# DIS-NEXT: 400180: ff 0d move $15, $ra
-# DIS-NEXT: 400182: f9 45 jalrs16 $25
-# DIS-NEXT: 400184: 83 0f move $gp, $3
-# DIS-NEXT: 400186: 00 0c nop
-
-# DIS-NEXT: 400188: 00 79 a0 07 addiupc $2, 7808
-# DIS-NEXT: 40018c: 22 ff 00 00 lw $25, 0($2)
-# DIS-NEXT: 400190: 99 45 jr16 $25
-# DIS-NEXT: 400192: 02 0f move $24, $2
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 6 .plt 00000024 0000000000400170 TEXT DATA
-# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '000000000000000000f4000000000000f400000000000000f400000000000000'
-# jal .text jal glob jal T1
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: .text
- Type: R_MICROMIPS_26_S1
- - Offset: 0x10
- Symbol: glob
- Type: R_MICROMIPS_26_S1
- - Offset: 0x18
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-header-mixed.test b/test/elf/Mips/plt-header-mixed.test
deleted file mode 100644
index 0d3af19ee593..000000000000
--- a/test/elf/Mips/plt-header-mixed.test
+++ /dev/null
@@ -1,105 +0,0 @@
-# REQUIRES: mips
-
-# Check initialization of .plt header entries if there are both regular
-# and microMIPS encoded PLT entries. Check that R_MIPS_26 and R_MICROMIPS_26_S1
-# relocation with the same target cause generation of two distinct PLT entries.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e globR -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=DIS %s
-# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
-
-# DIS: Disassembly of section .plt:
-# DIS-NEXT: .plt:
-# DIS-NEXT: 400170: 40 00 1c 3c lui $gp, 64
-# DIS-NEXT: 400174: 00 20 99 8f lw $25, 8192($gp)
-# DIS-NEXT: 400178: 00 20 9c 27 addiu $gp, $gp, 8192
-# DIS-NEXT: 40017c: 23 c0 1c 03 subu $24, $24, $gp
-# DIS-NEXT: 400180: 21 78 e0 03 move $15, $ra
-# DIS-NEXT: 400184: 82 c0 18 00 srl $24, $24, 2
-# DIS-NEXT: 400188: 09 f8 20 03 jalr $25
-# DIS-NEXT: 40018c: fe ff 18 27 addiu $24, $24, -2
-
-# DIS-NEXT: 400190: 40 00 0f 3c lui $15, 64
-# DIS-NEXT: 400194: 08 20 f9 8d lw $25, 8200($15)
-# DIS-NEXT: 400198: 08 00 20 03 jr $25
-# DIS-NEXT: 40019c: 08 20 f8 25 addiu $24, $15, 8200
-
-# FIXME (simon): Check micromips PLT entry
-# DIS-NEXT: 4001a8: 99 45 02 0f jal 201922148
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 6 .plt 0000003c 0000000000400170 TEXT DATA
-# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x8
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x0
- Symbol: T1
- Type: R_MIPS_26
- - Offset: 0x4
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Global:
- - Name: globR
- Section: .text
- Value: 0x0
- Size: 0x4
- - Name: globM
- Section: .text
- Value: 0x4
- Size: 0x4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
-...
diff --git a/test/elf/Mips/plt-header.test b/test/elf/Mips/plt-header.test
deleted file mode 100644
index caf7e83ea5e2..000000000000
--- a/test/elf/Mips/plt-header.test
+++ /dev/null
@@ -1,99 +0,0 @@
-# REQUIRES: mips
-
-# Check initialization of .plt header entries.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -section-headers -disassemble %t.exe | \
-# RUN: FileCheck -check-prefix=EXE %s
-
-# EXE: Disassembly of section .plt:
-# EXE: .plt:
-# PLT0 entry. Points to the .got.plt[0]
-# EXE-NEXT: 400160: 40 00 1c 3c lui $gp, 64
-# EXE-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
-# EXE-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
-# EXE-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
-# EXE-NEXT: 400170: 21 78 e0 03 move $15, $ra
-# EXE-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
-# EXE-NEXT: 400178: 09 f8 20 03 jalr $25
-# EXE-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 6 .plt 00000030 0000000000400160 TEXT DATA
-# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x20
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: .text
- Type: R_MIPS_26
- - Offset: 0x10
- Symbol: glob
- Type: R_MIPS_26
- - Offset: 0x18
- Symbol: T1
- Type: R_MIPS_26
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- - Name: T1
-...
diff --git a/test/elf/Mips/r26-1-micro.test b/test/elf/Mips/r26-1-micro.test
deleted file mode 100644
index 629754febc7e..000000000000
--- a/test/elf/Mips/r26-1-micro.test
+++ /dev/null
@@ -1,131 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of R_MICROMIPS_26_S1 relocation.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: llvm-readobj -relocations %t-o.o | \
-# RUN: FileCheck -check-prefix=OBJ-REL %s
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -relocations %t.exe | FileCheck -check-prefix=EXE-REL %s
-# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
-# RUN: llvm-objdump -s -d -mattr=micromips %t.exe | \
-# RUN: FileCheck -check-prefix=DIS %s
-
-# Object file has three R_MICROMIPS_26_S1 relocations
-# OBJ-REL: Relocations [
-# OBJ-REL-NEXT: Section (2) .rel.text {
-# OBJ-REL-NEXT: 0x8 R_MICROMIPS_26_S1 loc 0x0
-# OBJ-REL-NEXT: 0x10 R_MICROMIPS_26_S1 glob 0x0
-# OBJ-REL-NEXT: 0x18 R_MICROMIPS_26_S1 T1 0x0
-# OBJ-REL-NEXT: }
-# OBJ-REL-NEXT: ]
-
-# Executable file has the only relocation for external symbol
-# EXE-REL: Relocations [
-# EXE-REL-NEXT: Section (5) .rel.plt {
-# EXE-REL-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# EXE-REL-NEXT: }
-# EXE-REL-NEXT: ]
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 6 .plt 00000024 0000000000400160 TEXT DATA
-# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
-
-# DIS: Disassembly of section .plt:
-# DIS-NEXT: .plt:
-# DIS-NEXT: 400160: 80 79 a8 07 addiupc $3, 7840
-# DIS-NEXT: 400164: 23 ff 00 00 lw $25, 0($3)
-# DIS-NEXT: 400168: 35 05 subu16 $2, $2, $3
-# DIS-NEXT: 40016a: 25 25 srl16 $2, $2, 2
-# DIS-NEXT: 40016c: 02 33 fe ff addiu $24, $2, -2
-# DIS-NEXT: 400170: ff 0d move $15, $ra
-# DIS-NEXT: 400172: f9 45 jalrs16 $25
-# DIS-NEXT: 400174: 83 0f move $gp, $3
-# DIS-NEXT: 400176: 00 0c nop
-
-# DIS-NEXT: 400178: 00 79 a4 07 addiupc $2, 7824
-# DIS-NEXT: 40017c: 22 ff 00 00 lw $25, 0($2)
-# DIS-NEXT: 400180: 99 45 jr16 $25
-# DIS-NEXT: 400182: 02 0f move $24, $2
-
-# DIS: Contents of section .text:
-# DIS-NEXT: 400184 09f82003 00000000 2400ca0c 00000000 .. .....$.......
-# DIS-NEXT: 400194 2000c20c 00000000 2000bc0c 00000000 ....... .......
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '09F82003000000000400000C000000000000000C000000000000000C00000000'
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: loc
- Type: R_MICROMIPS_26_S1
- - Offset: 0x10
- Symbol: glob
- Type: R_MICROMIPS_26_S1
- - Offset: 0x18
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
-...
diff --git a/test/elf/Mips/r26-1.test b/test/elf/Mips/r26-1.test
deleted file mode 100644
index abc0a7ce5a81..000000000000
--- a/test/elf/Mips/r26-1.test
+++ /dev/null
@@ -1,132 +0,0 @@
-# REQUIRES: mips
-
-# Check handling of R_MIPS_26 relocation.
-
-# Build shared library
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: llvm-readobj -relocations %t-o.o | \
-# RUN: FileCheck -check-prefix=OBJ-REL %s
-# RUN: lld -flavor gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -section-headers -disassemble %t.exe | \
-# RUN: FileCheck -check-prefix=EXE %s
-# RUN: llvm-readobj -relocations %t.exe | FileCheck -check-prefix=EXE-REL %s
-
-# Object file has three R_MIPS_26 relocations
-# OBJ-REL: Relocations [
-# OBJ-REL-NEXT: Section (2) .rel.text {
-# OBJ-REL-NEXT: 0x8 R_MIPS_26 .text 0x0
-# OBJ-REL-NEXT: 0x10 R_MIPS_26 glob 0x0
-# OBJ-REL-NEXT: 0x18 R_MIPS_26 T1 0x0
-# OBJ-REL-NEXT: }
-# OBJ-REL-NEXT: ]
-
-# Executable file has the only relocation for external symbol
-# EXE-REL: Relocations [
-# EXE-REL-NEXT: Section (5) .rel.plt {
-# EXE-REL-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# EXE-REL-NEXT: }
-# EXE-REL-NEXT: ]
-
-# EXE: Disassembly of section .plt:
-# EXE: .plt:
-# PLTA entry. Points to the .got.plt[1]
-# EXE: 400180: 40 00 0f 3c lui $15, 64
-# EXE-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
-# EXE-NEXT: 400188: 08 00 20 03 jr $25
-# EXE-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
-
-# EXE: Disassembly of section .text:
-# EXE: glob:
-# EXE-NEXT: 400190: 09 f8 20 03 jalr $25
-# EXE-NEXT: 400194: 00 00 00 00 nop
-#
-# Jump to 'loc' label address
-# EXE-NEXT: 400198: 68 00 10 0c jal 4194720
-# EXE-NEXT: 40019c: 00 00 00 00 nop
-#
-# EXE: loc:
-# Jump to 'glob' label address
-# EXE-NEXT: 4001a0: 64 00 10 0c jal 4194704
-# EXE-NEXT: 4001a4: 00 00 00 00 nop
-#
-# Jump to the first PLT entry (.plt + 32) for T1 entry
-# EXE-NEXT: 4001a8: 60 00 10 0c jal 4194688
-# EXE-NEXT: 4001ac: 00 00 00 00 nop
-
-# EXE: Sections:
-# EXE: Idx Name Size Address Type
-# EXE: 6 .plt 00000030 0000000000400160 TEXT DATA
-# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: '09F82003000000000400000C000000000000000C000000000000000C00000000'
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x08
- Symbol: .text
- Type: R_MIPS_26
- - Offset: 0x10
- Symbol: glob
- Type: R_MIPS_26
- - Offset: 0x18
- Symbol: T1
- Type: R_MIPS_26
-
-Symbols:
- Local:
- - Name: loc
- Section: .text
- Value: 0x10
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: glob
- Section: .text
- - Name: T1
-...
diff --git a/test/elf/Mips/r26-2-micro.test b/test/elf/Mips/r26-2-micro.test
deleted file mode 100644
index b92b9acf4c84..000000000000
--- a/test/elf/Mips/r26-2-micro.test
+++ /dev/null
@@ -1,88 +0,0 @@
-# REQUIRES: mips
-
-# Check reading addendum for R_MICROMIPS_26_S1 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-objdump -d -mattr=micromips %t-exe | FileCheck -check-prefix=DIS %s
-# RUN: llvm-objdump -t %t-exe | FileCheck %s
-
-# DIS: Disassembly of section .text:
-# DIS-NEXT: loc0:
-# DIS-NEXT: 400110: 00 00 00 00 nop
-
-# DIS: __start:
-# DIS-NEXT: 400114: 20 f4 8e e0 jal 4309276
-# DIS-NEXT: 400118: 00 00 00 00 nop
-# DIS-NEXT: 40011c: 20 f4 9a e0 jal 4309300
-# DIS-NEXT: 400120: 00 00 00 00 nop
-
-# DIS: loc1:
-# DIS-NEXT: 400124: 20 f4 89 00 jal 4194578
-# DIS-NEXT: 400128: 00 00 00 00 nop
-# DIS-NEXT: 40012c: 20 f4 91 00 jal 4194594
-# DIS-NEXT: 400130: 00 00 00 00 nop
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400124 l F .text 00000010 loc1
-# CHECK: 00400114 g F .text 00000010 __start
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
-# nop
-# jal __start + 0x1C000
-# nop
-# jal loc + 0x1C000
-# nop
-# jal __start + 7FFFFE2
-# nop
-# jal loc + 7FFFFEA
-# nop
- Content: "0000000000f404e00000000000f408e000000000FFF7FFFF00000000FFF7FFFF00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x4
- Symbol: __start
- Type: R_MICROMIPS_26_S1
- - Offset: 0xC
- Symbol: loc1
- Type: R_MICROMIPS_26_S1
- - Offset: 0x14
- Symbol: __start
- Type: R_MICROMIPS_26_S1
- - Offset: 0x1C
- Symbol: loc1
- Type: R_MICROMIPS_26_S1
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x4
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- Local:
- - Name: loc0
- Section: .text
- Value: 0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: loc1
- Section: .text
- Value: 0x14
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/elf/Mips/r26-2.test b/test/elf/Mips/r26-2.test
deleted file mode 100644
index 0f0063ae1334..000000000000
--- a/test/elf/Mips/r26-2.test
+++ /dev/null
@@ -1,82 +0,0 @@
-# REQUIRES: mips
-
-# Check reading addendum for R_MIPS_26 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-objdump -t -disassemble %t-exe | FileCheck %s
-
-# CHECK: Disassembly of section .text:
-# CHECK-NEXT: __start:
-# CHECK-NEXT: 400110: 00 00 00 00 nop
-# CHECK-NEXT: 400114: 44 70 10 0c jal 4309264
-# 0x107044 << 2 = 0x41C110 = _start + (0x7000 << 2)
-# CHECK-NEXT: 400118: 00 00 00 00 nop
-#
-# CHECK: loc:
-# CHECK-NEXT: 40011c: 47 70 10 0c jal 4309276
-# 0x107047 << 2 = 0x41C11C = loc + (0x7000 << 2)
-# CHECK-NEXT: 400120: 00 00 00 00 nop
-# CHECK-NEXT: 400124: 43 00 10 0c jal 4194572
-# 0x100043 << 2 = 0x40010C = _start - 4
-# CHECK-NEXT: 400128: 00 00 00 00 nop
-# CHECK-NEXT: 40012c: 46 00 10 0c jal 4194584
-# 0x100046 << 2 = 0x400118 = loc - 4
-# CHECK-NEXT: 400130: 00 00 00 00 nop
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 0040011c l F .text 00000018 loc
-# CHECK: 00400110 g F .text 0000000c __start
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
-# nop
-# jal __start + 0x1C000
-# nop
-# jal loc + 0x1C000
-# nop
-# jal __start - 1
-# nop
-# jal loc - 1
-# nop
- Content: "000000000070000C000000000070000C00000000FFFFFF0F00000000FFFFFF0F00000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x4
- Symbol: __start
- Type: R_MIPS_26
- - Offset: 0xC
- Symbol: loc
- Type: R_MIPS_26
- - Offset: 0x14
- Symbol: __start
- Type: R_MIPS_26
- - Offset: 0x1C
- Symbol: loc
- Type: R_MIPS_26
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 4
- Local:
- - Name: loc
- Section: .text
- Value: 0xc
- Size: 4
diff --git a/test/elf/Mips/rel-32.test b/test/elf/Mips/rel-32.test
deleted file mode 100644
index beefde59b7b1..000000000000
--- a/test/elf/Mips/rel-32.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_MIPS_32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 402000 00000000 09204080 05204080 ..... @.. @.
-# ^^ data2 + 0x80000001 = 0x80402009
-# ^^ data1 + 0x80000001 = 0x80402005
-# CHECK: SYMBOL TABLE:
-# CHECK: 00402004 g .data 00000004 data1
-# CHECK: 00402008 g .data 00000004 data2
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "000000000100008001000080"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x4
- Symbol: data2
- Type: R_MIPS_32
- - Offset: 0x8
- Symbol: data1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Value: 0x4
- Size: 4
- - Name: data2
- Section: .data
- Value: 0x8
- Size: 4
diff --git a/test/elf/Mips/rel-64.test b/test/elf/Mips/rel-64.test
deleted file mode 100644
index e05b75687038..000000000000
--- a/test/elf/Mips/rel-64.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Check handling of R_MIPS_64 relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 120002000 d1010020 01000000 d0010020 01000100 ... ....... ....
-# ^^ __start + 1 = 0x1200001d1
-# ^^ __start + 0x1000000000000
-# = 0x10001200001d0
-# CHECK: SYMBOL TABLE:
-# CHECK: 00000001200001d0 g .rodata 00000008 __start
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_ALLOC]
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x10
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: __start
- Type: R_MIPS_64
- Addend: 1
- - Offset: 0x8
- Symbol: __start
- Type: R_MIPS_64
- Addend: 0x1000000000000
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 8
- - Name: data1
- Section: .data
- Value: 0x0
- Size: 8
- - Name: data2
- Section: .data
- Value: 0x8
- Size: 8
diff --git a/test/elf/Mips/rel-copy-micro.test b/test/elf/Mips/rel-copy-micro.test
deleted file mode 100644
index afa99198e37f..000000000000
--- a/test/elf/Mips/rel-copy-micro.test
+++ /dev/null
@@ -1,159 +0,0 @@
-# Check R_MIPS_COPY relocation emitting
-# when linking non-shared executable file.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so1.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t1.so %t-so1.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-so2.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t2.so %t-so2.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t1.so %t2.so
-# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x402010 R_MIPS_COPY D1 0x0
-# CHECK-NEXT: 0x402018 R_MIPS_COPY D2 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (1)
-# CHECK-NEXT: Value: 0x402010
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .bss (0xA)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (4)
-# CHECK-NEXT: Value: 0x402018
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .bss (0xA)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSection [ ({{.*}} entries)
-# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-micro.test.tmp1.so)
-# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-micro.test.tmp2.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# so1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
-# so2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: D1
- Type: R_MICROMIPS_LO16
- - Offset: 0x08
- Symbol: D2
- Type: R_MICROMIPS_HI16
- - Offset: 0x08
- Symbol: D2
- Type: R_MICROMIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
-...
diff --git a/test/elf/Mips/rel-copy-pc.test b/test/elf/Mips/rel-copy-pc.test
deleted file mode 100644
index 2dd702334fed..000000000000
--- a/test/elf/Mips/rel-copy-pc.test
+++ /dev/null
@@ -1,113 +0,0 @@
-# Check R_MIPS_COPY relocation emitting caused by R_MIPS_PCHI16 / R_MIPS_PCLO16
-# relocations when linking non-shared executable file.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x402008 R_MIPS_COPY D1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (1)
-# CHECK-NEXT: Value: 0x402008
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .bss (0xA)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSection [ ({{.*}} entries)
-# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-pc.test.tmp.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .data
- Type: SHT_PROGBITS
- Size: 4
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 4
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 4
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: D1
- Type: R_MIPS_PCHI16
- - Offset: 0
- Symbol: D1
- Type: R_MIPS_PCLO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 4
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0
- Size: 4
- - Name: D1
-...
diff --git a/test/elf/Mips/rel-copy.test b/test/elf/Mips/rel-copy.test
deleted file mode 100644
index 648a25e22ae7..000000000000
--- a/test/elf/Mips/rel-copy.test
+++ /dev/null
@@ -1,177 +0,0 @@
-# Check R_MIPS_COPY relocation emitting
-# when linking non-shared executable file.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so1.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t1.so %t-so1.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-so2.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t2.so %t-so2.o
-# RUN: yaml2obj -format=elf -docnum 3 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t1.so %t2.so
-# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x402004 R_MIPS_REL32 D2 0x0
-# CHECK-NEXT: 0x402010 R_MIPS_COPY D1 0x0
-# CHECK-NEXT: 0x402018 R_MIPS_COPY D3 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (1)
-# CHECK-NEXT: Value: 0x402010
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .bss (0xA)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D3@ (4)
-# CHECK-NEXT: Value: 0x402018
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .bss (0xA)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSection [ ({{.*}} entries)
-# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy.test.tmp1.so)
-# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy.test.tmp2.so)
-# CHECK-NEXT: 0x00000000 NULL 0x0
-# CHECK-NEXT: ]
-
-# so1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# so2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x04
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: D3
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
- - Offset: 0x08
- Symbol: D3
- Type: R_MIPS_HI16
- - Offset: 0x08
- Symbol: D3
- Type: R_MIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D3
-...
diff --git a/test/elf/Mips/rel-dynamic-01-micro.test b/test/elf/Mips/rel-dynamic-01-micro.test
deleted file mode 100644
index 6e0a41bf2606..000000000000
--- a/test/elf/Mips/rel-dynamic-01-micro.test
+++ /dev/null
@@ -1,201 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# Check:
-# a) Emitting R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
-# b) PLT entries creation.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
-# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# DIS: Disassembly of section .plt:
-# DIS-NEXT: .plt:
-# DIS-NEXT: 4001b0: 80 79 94 07 addiupc $3, 7760
-# DIS-NEXT: 4001b4: 23 ff 00 00 lw $25, 0($3)
-# DIS-NEXT: 4001b8: 35 05 subu16 $2, $2, $3
-# DIS-NEXT: 4001ba: 25 25 srl16 $2, $2, 2
-# DIS-NEXT: 4001bc: 02 33 fe ff addiu $24, $2, -2
-# DIS-NEXT: 4001c0: ff 0d move $15, $ra
-# DIS-NEXT: 4001c2: f9 45 jalrs16 $25
-# DIS-NEXT: 4001c4: 83 0f move $gp, $3
-# DIS-NEXT: 4001c6: 00 0c nop
-
-# DIS-NEXT: 4001c8: 00 79 90 07 addiupc $2, 7744
-# DIS-NEXT: 4001cc: 22 ff 00 00 lw $25, 0($2)
-# DIS-NEXT: 4001d0: 99 45 jr16 $25
-# DIS-NEXT: 4001d2: 02 0f move $24, $2
-
-# DIS-NEXT: 4001d4: 00 79 8e 07 addiupc $2, 7736
-# DIS-NEXT: 4001d8: 22 ff 00 00 lw $25, 0($2)
-# DIS-NEXT: 4001dc: 99 45 jr16 $25
-# DIS-NEXT: 4001de: 02 0f move $24, $2
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (5) .rel.dyn {
-# PLT-SYM-NEXT: 0x402018 R_MIPS_COPY D1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Section (6) .rel.plt {
-# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
-# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: D1@ (1)
-# PLT-SYM-NEXT: Value: 0x402018
-# PLT-SYM-NEXT: Size: 8
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Object (0x1)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: .bss (0xD)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T1@ (4)
-# PLT-SYM-NEXT: Value: 0x4001D5
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 8
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T3@ (7)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MICROMIPS_26_S1
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_LO16
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_LO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
-...
diff --git a/test/elf/Mips/rel-dynamic-01.test b/test/elf/Mips/rel-dynamic-01.test
deleted file mode 100644
index ca4619668bd2..000000000000
--- a/test/elf/Mips/rel-dynamic-01.test
+++ /dev/null
@@ -1,237 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# Check:
-# a) Emitting R_MIPS_REL32, R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
-# b) PLT entries creation.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -disassemble %t.exe | FileCheck -check-prefix=PLT %s
-# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT: Disassembly of section .plt:
-# PLT-NEXT: .plt:
-# PLT-NEXT: 4001f0: 40 00 1c 3c lui $gp, 64
-# PLT-NEXT: 4001f4: 00 20 99 8f lw $25, 8192($gp)
-# PLT-NEXT: 4001f8: 00 20 9c 27 addiu $gp, $gp, 8192
-# PLT-NEXT: 4001fc: 23 c0 1c 03 subu $24, $24, $gp
-# PLT-NEXT: 400200: 21 78 e0 03 move $15, $ra
-# PLT-NEXT: 400204: 82 c0 18 00 srl $24, $24, 2
-# PLT-NEXT: 400208: 09 f8 20 03 jalr $25
-# PLT-NEXT: 40020c: fe ff 18 27 addiu $24, $24, -2
-#
-# PLT-NEXT: 400210: 40 00 0f 3c lui $15, 64
-# PLT-NEXT: 400214: 08 20 f9 8d lw $25, 8200($15)
-# PLT-NEXT: 400218: 08 00 20 03 jr $25
-# PLT-NEXT: 40021c: 08 20 f8 25 addiu $24, $15, 8200
-#
-# PLT-NEXT: 400220: 40 00 0f 3c lui $15, 64
-# PLT-NEXT: 400224: 0c 20 f9 8d lw $25, 8204($15)
-# PLT-NEXT: 400228: 08 00 20 03 jr $25
-# PLT-NEXT: 40022c: 0c 20 f8 25 addiu $24, $15, 8204
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (5) .rel.dyn {
-# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 T2 0x0
-# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 D2 0x0
-# PLT-SYM-NEXT: 0x402018 R_MIPS_COPY D1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Section (6) .rel.plt {
-# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
-# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: D1@ (1)
-# PLT-SYM-NEXT: Value: 0x402018
-# PLT-SYM-NEXT: Size: 4
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Object (0x1)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: .bss (0xD)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T1@ (4)
-# PLT-SYM-NEXT: Value: 0x400220
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 8
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T3@ (10)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T2@ (7)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: D2@ (13)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 4
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Object (0x1)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
-...
diff --git a/test/elf/Mips/rel-dynamic-02.test b/test/elf/Mips/rel-dynamic-02.test
deleted file mode 100644
index 4de86383482c..000000000000
--- a/test/elf/Mips/rel-dynamic-02.test
+++ /dev/null
@@ -1,82 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) Relocations' targets are undefined symbols.
-# Check:
-# a) Emitting R_MIPS_REL32 relocations for both undefined symbols.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t1-so %t-obj
-# RUN: llvm-readobj -dt -r -s %t1-so | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-#
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (4) .rel.dyn {
-# PLT-SYM-NEXT: 0x140 R_MIPS_REL32 T1 0x0
-# PLT-SYM-NEXT: 0x2000 R_MIPS_REL32 T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-#
-# PLT-SYM: Name: T1@ (7)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T1
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
diff --git a/test/elf/Mips/rel-dynamic-03-micro.test b/test/elf/Mips/rel-dynamic-03-micro.test
deleted file mode 100644
index 5de2cdcdc131..000000000000
--- a/test/elf/Mips/rel-dynamic-03-micro.test
+++ /dev/null
@@ -1,133 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' target is a symbol defined in the shared object.
-# c) The target symbol is referenced by both branch (R_MICROMIPS_26_S1)
-# and regular (R_MIPS_32) relocations.
-# Check:
-# a) There should be no R_MIPS_REL32 relocation.
-# b) Linker creates a single PLT entry.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
-# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# DIS: Disassembly of section .plt:
-# DIS-NEXT: .plt:
-# DIS-NEXT: 400170: 80 79 a4 07 addiupc $3, 7824
-# DIS-NEXT: 400174: 23 ff 00 00 lw $25, 0($3)
-# DIS-NEXT: 400178: 35 05 subu16 $2, $2, $3
-# DIS-NEXT: 40017a: 25 25 srl16 $2, $2, 2
-# DIS-NEXT: 40017c: 02 33 fe ff addiu $24, $2, -2
-# DIS-NEXT: 400180: ff 0d move $15, $ra
-# DIS-NEXT: 400182: f9 45 jalrs16 $25
-# DIS-NEXT: 400184: 83 0f move $gp, $3
-# DIS-NEXT: 400186: 00 0c nop
-
-# DIS-NEXT: 400188: 00 79 a0 07 addiupc $2, 7808
-# DIS-NEXT: 40018c: 22 ff 00 00 lw $25, 0($2)
-# DIS-NEXT: 400190: 99 45 jr16 $25
-# DIS-NEXT: 400192: 02 0f move $24, $2
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (5) .rel.plt {
-# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: Name: T1@ (1)
-# PLT-SYM-NEXT: Value: 0x400189
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 8
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T1
- Type: R_MICROMIPS_26_S1
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
-...
diff --git a/test/elf/Mips/rel-dynamic-03.test b/test/elf/Mips/rel-dynamic-03.test
deleted file mode 100644
index cc791b051748..000000000000
--- a/test/elf/Mips/rel-dynamic-03.test
+++ /dev/null
@@ -1,129 +0,0 @@
-# REQUIRES: mips
-
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' target is a symbol defined in the shared object.
-# c) The target symbol is referenced by both branch (R_MIPS_26)
-# and regular (R_MIPS_32) relocations.
-# Check:
-# a) There should be no R_MIPS_REL32 relocation.
-# b) Linker creates a single PLT entry.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-objdump -disassemble %t.exe | FileCheck -check-prefix=PLT %s
-# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT: Disassembly of section .plt:
-# PLT-NEXT: .plt:
-# PLT-NEXT: 400160: 40 00 1c 3c lui $gp, 64
-# PLT-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
-# PLT-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
-# PLT-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
-# PLT-NEXT: 400170: 21 78 e0 03 move $15, $ra
-# PLT-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
-# PLT-NEXT: 400178: 09 f8 20 03 jalr $25
-# PLT-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
-#
-# PLT-NEXT: 400180: 40 00 0f 3c lui $15, 64
-# PLT-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
-# PLT-NEXT: 400188: 08 00 20 03 jr $25
-# PLT-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
-#
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (5) .rel.plt {
-# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: Name: T1@ (1)
-# PLT-SYM-NEXT: Value: 0x400180
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 8
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T1
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
-...
diff --git a/test/elf/Mips/rel-dynamic-04-micro.test b/test/elf/Mips/rel-dynamic-04-micro.test
deleted file mode 100644
index 1c58efdf5f70..000000000000
--- a/test/elf/Mips/rel-dynamic-04-micro.test
+++ /dev/null
@@ -1,211 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# c) Relocations modify a writable section.
-# d) The first symbol is referenced by R_MIPS32 relocation only
-# e) The second symbol is referenced by R_MIPS_32
-# and R_MICROMIPS_26_S1 relocations.
-# f) The third symbol is referenced by R_MICROMIPS_26_S1
-# and R_MIPS_32 relocations.
-# Check:
-# a) There should be the only R_MIPS_REL32 relocation.
-# b) Linker creates a couple of PLT entry for both symbols referenced
-# by the R_MICROMIPS_26_S1 branch relocation.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
-
-# PLT: Section {
-# PLT: Index: 5
-# PLT-NEXT: Name: .rel.dyn (31)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4010A0
-# PLT-NEXT: Offset: 0x10A0
-# PLT-NEXT: Size: 8
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 6
-# PLT-NEXT: Name: .rel.plt (40)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4010A8
-# PLT-NEXT: Offset: 0x10A8
-# PLT-NEXT: Size: 16
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 7
-# PLT-NEXT: Name: .plt (49)
-# PLT-NEXT: Type: SHT_PROGBITS (0x1)
-# PLT-NEXT: Flags [ (0x6)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: SHF_EXECINSTR (0x4)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4010C0
-# PLT-NEXT: Offset: 0x10C0
-# PLT-NEXT: Size: 48
-# PLT-NEXT: Link: 0
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 16
-# PLT-NEXT: EntrySize: 0
-# PLT-NEXT: }
-
-# PLT: Relocations [
-# PLT-NEXT: Section (5) .rel.dyn {
-# PLT-NEXT: 0x400120 R_MIPS_REL32 T1 0x0
-# PLT-NEXT: }
-# PLT-NEXT: Section (6) .rel.plt {
-# PLT-NEXT: 0x403008 R_MIPS_JUMP_SLOT T2 0x0
-# PLT-NEXT: 0x40300C R_MIPS_JUMP_SLOT T3 0x0
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# PLT: DynamicSymbols [
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: @ (0)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Local (0x0)
-# PLT-NEXT: Type: None (0x0)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T2@ (4)
-# PLT-NEXT: Value: 0x4010D9
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T3@ (7)
-# PLT-NEXT: Value: 0x4010E5
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T1@ (1)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x14
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- # There is no branch relocation for T1.
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
- # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
- # ... but R_MICROMIPS_26_S1 creates PLT entry
- # and makes R_MIPS_REL32 redundant.
- - Offset: 0x08
- Symbol: T2
- Type: R_MICROMIPS_26_S1
- # Create PLT entry for T3 symbol.
- - Offset: 0x0c
- Symbol: T3
- Type: R_MICROMIPS_26_S1
- # Take in account existing PLT entry and do not create R_MIPS_REL32.
- - Offset: 0x10
- Symbol: T3
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x14
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
-...
diff --git a/test/elf/Mips/rel-dynamic-04.test b/test/elf/Mips/rel-dynamic-04.test
deleted file mode 100644
index 5b5bcce01cd8..000000000000
--- a/test/elf/Mips/rel-dynamic-04.test
+++ /dev/null
@@ -1,206 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# c) Relocations modify a writable section.
-# d) The first symbol is referenced by R_MIPS32 relocation only
-# e) The second symbol is referenced by R_MIPS_32 and R_MIPS26 relocations.
-# f) The third symbol is referenced by R_MIPS26 and R_MIPS_32 relocations.
-# Check:
-# a) There should be the only R_MIPS_REL32 relocation.
-# b) Linker creates a couple of PLT entry for both symbols referenced
-# by the R_MIPS_26 branch relocation.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
-
-# PLT: Section {
-# PLT: Index: 5
-# PLT-NEXT: Name: .rel.dyn (31)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x40109C
-# PLT-NEXT: Offset: 0x109C
-# PLT-NEXT: Size: 8
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 6
-# PLT-NEXT: Name: .rel.plt (40)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4010A4
-# PLT-NEXT: Offset: 0x10A4
-# PLT-NEXT: Size: 16
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 7
-# PLT-NEXT: Name: .plt (49)
-# PLT-NEXT: Type: SHT_PROGBITS (0x1)
-# PLT-NEXT: Flags [ (0x6)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: SHF_EXECINSTR (0x4)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4010C0
-# PLT-NEXT: Offset: 0x10C0
-# PLT-NEXT: Size: 64
-# PLT-NEXT: Link: 0
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 16
-# PLT-NEXT: EntrySize: 0
-# PLT-NEXT: }
-
-# PLT: Relocations [
-# PLT-NEXT: Section (5) .rel.dyn {
-# PLT-NEXT: 0x400120 R_MIPS_REL32 T1 0x0
-# PLT-NEXT: }
-# PLT-NEXT: Section (6) .rel.plt {
-# PLT-NEXT: 0x403008 R_MIPS_JUMP_SLOT T2 0x0
-# PLT-NEXT: 0x40300C R_MIPS_JUMP_SLOT T3 0x0
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# PLT: DynamicSymbols [
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: @ (0)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Local (0x0)
-# PLT-NEXT: Type: None (0x0)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T2@ (4)
-# PLT-NEXT: Value: 0x4010E0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T3@ (7)
-# PLT-NEXT: Value: 0x4010F0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T1@ (1)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- # There is no branch relocation for T1.
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
- # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
- - Offset: 0x00
- Symbol: T2
- Type: R_MIPS_32
- # ... but R_MIPS_26 creates PLT entry and makes R_MIPS_REL32 redundant.
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_26
- # Create PLT entry for T3 symbol.
- - Offset: 0x00
- Symbol: T3
- Type: R_MIPS_26
- # Take in account existing PLT entry and do not create R_MIPS_REL32.
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
-...
diff --git a/test/elf/Mips/rel-dynamic-05-micro.test b/test/elf/Mips/rel-dynamic-05-micro.test
deleted file mode 100644
index d1c87076b596..000000000000
--- a/test/elf/Mips/rel-dynamic-05-micro.test
+++ /dev/null
@@ -1,192 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# c) Relocations modify a read-only section.
-# d) The first symbol is referenced by R_MIPS32 relocation only
-# e) The second symbol is referenced by R_MIPS_32
-# and R_MICROMIPS_26_S1 relocations.
-# f) The third symbol is referenced by R_MICROMIPS_26_S1
-# and R_MIPS_32 relocations.
-# Check:
-# a) There should be no R_MIPS_REL32 relocations.
-# b) Linker creates PLT entries for all three relocations.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
-
-# PLT: Section {
-# PLT: Index: 5
-# PLT-NEXT: Name: .rel.plt (31)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x400194
-# PLT-NEXT: Offset: 0x194
-# PLT-NEXT: Size: 24
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 6
-# PLT-NEXT: Name: .plt (40)
-# PLT-NEXT: Type: SHT_PROGBITS (0x1)
-# PLT-NEXT: Flags [ (0x6)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: SHF_EXECINSTR (0x4)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4001B0
-# PLT-NEXT: Offset: 0x1B0
-# PLT-NEXT: Size: 60
-# PLT-NEXT: Link: 0
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 16
-# PLT-NEXT: EntrySize: 0
-# PLT-NEXT: }
-
-# PLT: Relocations [
-# PLT-NEXT: Section (5) .rel.plt {
-# PLT-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# PLT-NEXT: 0x40200C R_MIPS_JUMP_SLOT T2 0x0
-# PLT-NEXT: 0x402010 R_MIPS_JUMP_SLOT T3 0x0
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# PLT: DynamicSymbols [
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: @ (0)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Local (0x0)
-# PLT-NEXT: Type: None (0x0)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T1@ (1)
-# PLT-NEXT: Value: 0x4001C9
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T2@ (4)
-# PLT-NEXT: Value: 0x4001D5
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T3@ (7)
-# PLT-NEXT: Value: 0x4001E1
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x14
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- # There is no branch relocation for T1.
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
- # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
- # ... but R_MICROMIPS_26_S1 creates PLT entry and makes R_MIPS_REL32 redundant.
- - Offset: 0x08
- Symbol: T2
- Type: R_MICROMIPS_26_S1
- # Create PLT entry for T3 symbol.
- - Offset: 0x0C
- Symbol: T3
- Type: R_MICROMIPS_26_S1
- # Take in account existing PLT entry and do not create R_MIPS_REL32.
- - Offset: 0x10
- Symbol: T3
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 0x14
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
-...
diff --git a/test/elf/Mips/rel-dynamic-05.test b/test/elf/Mips/rel-dynamic-05.test
deleted file mode 100644
index 3bfbd3f6efdb..000000000000
--- a/test/elf/Mips/rel-dynamic-05.test
+++ /dev/null
@@ -1,188 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# c) Relocations modify a read-only section.
-# d) The first symbol is referenced by R_MIPS32 relocation only
-# e) The second symbol is referenced by R_MIPS_32 and R_MIPS26 relocations.
-# f) The third symbol is referenced by R_MIPS26 and R_MIPS_32 relocations.
-# Check:
-# a) There should be no R_MIPS_REL32 relocations.
-# b) Linker creates PLT entries for all three relocations.
-# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
-
-# PLT: Section {
-# PLT: Index: 5
-# PLT-NEXT: Name: .rel.plt (31)
-# PLT-NEXT: Type: SHT_REL (0x9)
-# PLT-NEXT: Flags [ (0x2)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x400190
-# PLT-NEXT: Offset: 0x190
-# PLT-NEXT: Size: 24
-# PLT-NEXT: Link: 3
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 4
-# PLT-NEXT: EntrySize: 8
-# PLT-NEXT: }
-# PLT-NEXT: Section {
-# PLT-NEXT: Index: 6
-# PLT-NEXT: Name: .plt (40)
-# PLT-NEXT: Type: SHT_PROGBITS (0x1)
-# PLT-NEXT: Flags [ (0x6)
-# PLT-NEXT: SHF_ALLOC (0x2)
-# PLT-NEXT: SHF_EXECINSTR (0x4)
-# PLT-NEXT: ]
-# PLT-NEXT: Address: 0x4001B0
-# PLT-NEXT: Offset: 0x1B0
-# PLT-NEXT: Size: 80
-# PLT-NEXT: Link: 0
-# PLT-NEXT: Info: 0
-# PLT-NEXT: AddressAlignment: 16
-# PLT-NEXT: EntrySize: 0
-# PLT-NEXT: }
-
-# PLT: Relocations [
-# PLT-NEXT: Section (5) .rel.plt {
-# PLT-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
-# PLT-NEXT: 0x40200C R_MIPS_JUMP_SLOT T2 0x0
-# PLT-NEXT: 0x402010 R_MIPS_JUMP_SLOT T3 0x0
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# PLT: DynamicSymbols [
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: @ (0)
-# PLT-NEXT: Value: 0x0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Local (0x0)
-# PLT-NEXT: Type: None (0x0)
-# PLT-NEXT: Other: 0
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T1@ (1)
-# PLT-NEXT: Value: 0x4001D0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T2@ (4)
-# PLT-NEXT: Value: 0x4001E0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: Symbol {
-# PLT-NEXT: Name: T3@ (7)
-# PLT-NEXT: Value: 0x4001F0
-# PLT-NEXT: Size: 0
-# PLT-NEXT: Binding: Global (0x1)
-# PLT-NEXT: Type: Function (0x2)
-# PLT-NEXT: Other: 8
-# PLT-NEXT: Section: Undefined (0x0)
-# PLT-NEXT: }
-# PLT-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
-
-# o.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- # There is no branch relocation for T1.
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
- # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
- - Offset: 0x00
- Symbol: T2
- Type: R_MIPS_32
- # ... but R_MIPS_26 creates PLT entry and makes R_MIPS_REL32 redundant.
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_26
- # Create PLT entry for T3 symbol.
- - Offset: 0x00
- Symbol: T3
- Type: R_MIPS_26
- # Take in account existing PLT entry and do not create R_MIPS_REL32.
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
-...
diff --git a/test/elf/Mips/rel-dynamic-06-64.test b/test/elf/Mips/rel-dynamic-06-64.test
deleted file mode 100644
index c153eb22af4c..000000000000
--- a/test/elf/Mips/rel-dynamic-06-64.test
+++ /dev/null
@@ -1,101 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) The first relocation modifies a regular .text section.
-# c) The second relocation modifies a .pdr section without SHF_ALLOC flag.
-# Check:
-# a) There should be no PLT entries.
-# b) Linker creates a single R_MIPS_REL32 relocation.
-#
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t.o
-# RUN: llvm-readobj -dt -r -s %t.so | FileCheck -check-prefix=CHECK %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (4) .rel.dyn {
-# CHECK-NEXT: 0x170 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T0 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (4)
-# CHECK-NEXT: Value: 0x174
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x5)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T0@ (1)
-# CHECK-NEXT: Value: 0x170
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x5)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_RELA
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T0
- Type: R_MIPS_64
-
-- Name: .pdr
- Type: SHT_PROGBITS
- Size: 8
- AddressAlign: 16
-
-- Name: .rel.pdr
- Type: SHT_RELA
- Info: .pdr
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_64
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 4
- Size: 4
diff --git a/test/elf/Mips/rel-dynamic-06.test b/test/elf/Mips/rel-dynamic-06.test
deleted file mode 100644
index 433eb5fadf59..000000000000
--- a/test/elf/Mips/rel-dynamic-06.test
+++ /dev/null
@@ -1,103 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) The first relocation modifies a regular .text section.
-# c) The second relocation modifies a .pdr section without SHF_ALLOC flag.
-# Check:
-# a) There should be no PLT entries.
-# b) Linker creates a single R_MIPS_REL32 relocation.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -shared -o %t1-so %t-obj
-# RUN: llvm-readobj -dt -r -s %t1-so | FileCheck -check-prefix=PLT1 %s
-
-# PLT1-SYM: Sections [
-# PLT1-SYM: Section {
-# PLT1-SYM-NOT: Name: .plt ({{[0-9]+}})
-
-# PLT1: Relocations [
-# PLT1-NEXT: Section (4) .rel.dyn {
-# PLT1-NEXT: 0x100 R_MIPS_REL32 T0 0x0
-# PLT1-NEXT: }
-# PLT1-NEXT: ]
-
-# PLT1: DynamicSymbols [
-# PLT1-NEXT: Symbol {
-# PLT1-NEXT: Name: @ (0)
-# PLT1-NEXT: Value: 0x0
-# PLT1-NEXT: Size: 0
-# PLT1-NEXT: Binding: Local (0x0)
-# PLT1-NEXT: Type: None (0x0)
-# PLT1-NEXT: Other: 0
-# PLT1-NEXT: Section: Undefined (0x0)
-# PLT1-NEXT: }
-# PLT1-NEXT: Symbol {
-# PLT1-NEXT: Name: T1@ (4)
-# PLT1-NEXT: Value: 0x104
-# PLT1-NEXT: Size: 4
-# PLT1-NEXT: Binding: Global (0x1)
-# PLT1-NEXT: Type: Function (0x2)
-# PLT1-NEXT: Other: 0
-# PLT1-NEXT: Section: .text (0x5)
-# PLT1-NEXT: }
-# PLT1-NEXT: Symbol {
-# PLT1-NEXT: Name: T0@ (1)
-# PLT1-NEXT: Value: 0x100
-# PLT1-NEXT: Size: 4
-# PLT1-NEXT: Binding: Global (0x1)
-# PLT1-NEXT: Type: Function (0x2)
-# PLT1-NEXT: Other: 0
-# PLT1-NEXT: Section: .text (0x5)
-# PLT1-NEXT: }
-# PLT1-NEXT: ]
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T0
- Type: R_MIPS_32
-
-- Name: .pdr
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: []
-
-- Name: .rel.pdr
- Type: SHT_REL
- Info: .pdr
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
diff --git a/test/elf/Mips/rel-dynamic-07-64.test b/test/elf/Mips/rel-dynamic-07-64.test
deleted file mode 100644
index f7a1c4425823..000000000000
--- a/test/elf/Mips/rel-dynamic-07-64.test
+++ /dev/null
@@ -1,261 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) There ars multiple R_MIPS_64 relocations with various targets.
-# Check:
-# a) Emitting of R_MIPS_REL32 relocations.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t1.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -shared --noinhibit-exec \
-# RUN: -o %t2.so %t-o.o %t1.so
-# RUN: llvm-readobj -dt -r -sections %t2.so | FileCheck %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (4) .rel.dyn {
-# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T0 0x0
-# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T4 0x0
-# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D2 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T1 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T2 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D0 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D1 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D4 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE U1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T0@ (1)
-# CHECK-NEXT: Value: 0x324
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x5)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T4@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (25)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (16)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ (19)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D0@ (4)
-# CHECK-NEXT: Value: 0x2004
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .data (0x8)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (22)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D4@ (10)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: U1@ (13)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00 # T0 is a defined function
- Symbol: T0
- Type: R_MIPS_64
- - Offset: 0x04 # T1 is a function from shared lib
- Symbol: T1
- Type: R_MIPS_64
- - Offset: 0x08 # T2 has unknown type and defined in shared lib
- Symbol: T2
- Type: R_MIPS_64
- - Offset: 0x00 # T4 is an undefined function
- Symbol: T4
- Type: R_MIPS_64
- - Offset: 0x04 # D0 is a defined data object
- Symbol: D0
- Type: R_MIPS_64
- - Offset: 0x08 # D1 is a data object from shared lib
- Symbol: D1
- Type: R_MIPS_64
- - Offset: 0x00 # D2 has unknown type and defined in shared lib
- Symbol: D2
- Type: R_MIPS_64
- - Offset: 0x04 # D4 is an undefined data object
- Symbol: D4
- Type: R_MIPS_64
- - Offset: 0x08 # U1 is undefined and has unknown type
- Symbol: U1
- Type: R_MIPS_64
-
-Symbols:
- Local:
- - Name: LT0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 4
- - Name: LD0
- Section: .data
- Type: STT_OBJECT
- Value: 0
- Size: 4
-
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- - Name: T4
- Type: STT_FUNC
-
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D4
- Type: STT_OBJECT
- - Name: U1
-...
diff --git a/test/elf/Mips/rel-dynamic-07.test b/test/elf/Mips/rel-dynamic-07.test
deleted file mode 100644
index fc163b9a12f7..000000000000
--- a/test/elf/Mips/rel-dynamic-07.test
+++ /dev/null
@@ -1,276 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) There ars multiple R_MIPS_32 relocations with various targets.
-# Check:
-# a) Emitting of R_MIPS_REL32 relocations.
-# b) There should be no R_MIPS_REL32 relocations for the _gp_disp symbol.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t1.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
-# RUN: -o %t2.so %t-o.o %t1.so
-# RUN: llvm-readobj -dt -r -sections %t2.so | FileCheck %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (4) .rel.dyn {
-# CHECK-NEXT: 0x2000 R_MIPS_REL32 T0 0x0
-# CHECK-NEXT: 0x2000 R_MIPS_REL32 T4 0x0
-# CHECK-NEXT: 0x2000 R_MIPS_REL32 D2 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32 T1 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32 T2 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32 D0 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32 D1 0x0
-# CHECK-NEXT: 0x2004 R_MIPS_REL32 D4 0x0
-# CHECK-NEXT: 0x2008 R_MIPS_REL32 U1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T0@ (1)
-# CHECK-NEXT: Value: 0x214
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .text (0x5)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T4@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (25)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (16)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ (19)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D0@ (4)
-# CHECK-NEXT: Value: 0x2004
-# CHECK-NEXT: Size: 8
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: .data (0x8)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (22)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D4@ (10)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: U1@ (13)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_LO16
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00 # T0 is a defined function
- Symbol: T0
- Type: R_MIPS_32
- - Offset: 0x04 # T1 is a function from shared lib
- Symbol: T1
- Type: R_MIPS_32
- - Offset: 0x08 # T2 has unknown type and defined in shared lib
- Symbol: T2
- Type: R_MIPS_32
- - Offset: 0x00 # T4 is an undefined function
- Symbol: T4
- Type: R_MIPS_32
- - Offset: 0x04 # D0 is a defined data object
- Symbol: D0
- Type: R_MIPS_32
- - Offset: 0x08 # D1 is a data object from shared lib
- Symbol: D1
- Type: R_MIPS_32
- - Offset: 0x00 # D2 has unknown type and defined in shared lib
- Symbol: D2
- Type: R_MIPS_32
- - Offset: 0x04 # D4 is an undefined data object
- Symbol: D4
- Type: R_MIPS_32
- - Offset: 0x08 # U1 is undefined and has unknown type
- Symbol: U1
- Type: R_MIPS_32
-
-Symbols:
- Local:
- - Name: LT0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: LD0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
- Global:
- - Name: _gp_disp
- Type: STT_OBJECT
-
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- - Name: T4
- Type: STT_FUNC
-
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D4
- Type: STT_OBJECT
- - Name: U1
diff --git a/test/elf/Mips/rel-dynamic-08-64.test b/test/elf/Mips/rel-dynamic-08-64.test
deleted file mode 100644
index d845d7407c1c..000000000000
--- a/test/elf/Mips/rel-dynamic-08-64.test
+++ /dev/null
@@ -1,233 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) There ars multiple R_MIPS_64/R_MIPS_HI16/R_MIPS_LO16 relocations
-# with various targets.
-# Check:
-# a) Emitting of R_MIPS_REL32 relocations.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mips64el -e T0 --noinhibit-exec \
-# RUN: -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x120002000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D2 0x0
-# CHECK-NEXT: 0x120002004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T1 0x0
-# CHECK-NEXT: 0x120002008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T2 0x0
-# CHECK-NEXT: 0x120002008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (10)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (1)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ (4)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_RELA
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_LO16
-
-- Name: .rel.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00 # LT0 is a locally defined function
- Symbol: LT0
- Type: R_MIPS_64
- - Offset: 0x00 # LD0 is a locally defined data object
- Symbol: LD0
- Type: R_MIPS_64
- - Offset: 0x00 # T0 is a defined function
- Symbol: T0
- Type: R_MIPS_64
- - Offset: 0x04 # T1 is a function from shared lib
- Symbol: T1
- Type: R_MIPS_64
- - Offset: 0x08 # T2 has unknown type and defined in shared lib
- Symbol: T2
- Type: R_MIPS_64
- - Offset: 0x00 # T4 is an undefined function
- Symbol: T4
- Type: R_MIPS_64
- - Offset: 0x04 # D0 is a defined data object
- Symbol: D0
- Type: R_MIPS_64
- - Offset: 0x08 # D1 is a data object from shared lib
- Symbol: D1
- Type: R_MIPS_64
- - Offset: 0x00 # D2 has unknown type and defined in shared lib
- Symbol: D2
- Type: R_MIPS_64
- - Offset: 0x04 # D4 is an undefined data object
- Symbol: D4
- Type: R_MIPS_64
- - Offset: 0x08 # U1 is undefined and has unknown type
- Symbol: U1
- Type: R_MIPS_64
-
-Symbols:
- Local:
- - Name: LT0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 4
- - Name: LD0
- Section: .data
- Type: STT_OBJECT
- Value: 0
- Size: 4
-
- Global:
- - Name: _gp_disp
- Type: STT_OBJECT
-
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- - Name: T4
- Type: STT_FUNC
-
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D4
- Type: STT_OBJECT
- - Name: U1
-...
diff --git a/test/elf/Mips/rel-dynamic-08-micro.test b/test/elf/Mips/rel-dynamic-08-micro.test
deleted file mode 100644
index de0038956086..000000000000
--- a/test/elf/Mips/rel-dynamic-08-micro.test
+++ /dev/null
@@ -1,236 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) There ars multiple R_MIPS_32/R_MICROMIPS_HI16/R_MICROMIPS_LO16
-# relocations with various targets.
-# Check:
-# a) Emitting of R_MIPS_REL32 relocations.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 --noinhibit-exec \
-# RUN: -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x402000 R_MIPS_REL32 D2 0x0
-# CHECK-NEXT: 0x402004 R_MIPS_REL32 T1 0x0
-# CHECK-NEXT: 0x402008 R_MIPS_REL32 T2 0x0
-# CHECK-NEXT: 0x402008 R_MIPS_REL32 D1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (10)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (1)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ (4)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MICROMIPS_LO16
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00 # LT0 is a locally defined function
- Symbol: LT0
- Type: R_MIPS_32
- - Offset: 0x00 # LD0 is a locally defined data object
- Symbol: LD0
- Type: R_MIPS_32
- - Offset: 0x00 # T0 is a defined function
- Symbol: T0
- Type: R_MIPS_32
- - Offset: 0x04 # T1 is a function from shared lib
- Symbol: T1
- Type: R_MIPS_32
- - Offset: 0x08 # T2 has unknown type and defined in shared lib
- Symbol: T2
- Type: R_MIPS_32
- - Offset: 0x00 # T4 is an undefined function
- Symbol: T4
- Type: R_MIPS_32
- - Offset: 0x04 # D0 is a defined data object
- Symbol: D0
- Type: R_MIPS_32
- - Offset: 0x08 # D1 is a data object from shared lib
- Symbol: D1
- Type: R_MIPS_32
- - Offset: 0x00 # D2 has unknown type and defined in shared lib
- Symbol: D2
- Type: R_MIPS_32
- - Offset: 0x04 # D4 is an undefined data object
- Symbol: D4
- Type: R_MIPS_32
- - Offset: 0x08 # U1 is undefined and has unknown type
- Symbol: U1
- Type: R_MIPS_32
-
-Symbols:
- Local:
- - Name: LT0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: LD0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
- Global:
- - Name: _gp_disp
- Type: STT_OBJECT
-
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- - Name: T4
- Type: STT_FUNC
-
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D4
- Type: STT_OBJECT
- - Name: U1
-...
diff --git a/test/elf/Mips/rel-dynamic-08.test b/test/elf/Mips/rel-dynamic-08.test
deleted file mode 100644
index 62f4dc278b05..000000000000
--- a/test/elf/Mips/rel-dynamic-08.test
+++ /dev/null
@@ -1,233 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) There ars multiple R_MIPS_32/R_MIPS_HI16/R_MIPS_LO16 relocations
-# with various targets.
-# Check:
-# a) Emitting of R_MIPS_REL32 relocations.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 --noinhibit-exec \
-# RUN: -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
-
-# CHECK: Sections [
-# CHECK: Section {
-# CHECK-NOT: Name: .plt ({{[0-9]+}})
-
-# CHECK: Relocations [
-# CHECK-NEXT: Section (5) .rel.dyn {
-# CHECK-NEXT: 0x402000 R_MIPS_REL32 D2 0x0
-# CHECK-NEXT: 0x402004 R_MIPS_REL32 T1 0x0
-# CHECK-NEXT: 0x402008 R_MIPS_REL32 T2 0x0
-# CHECK-NEXT: 0x402008 R_MIPS_REL32 D1 0x0
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# CHECK: DynamicSymbols [
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: @ (0)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Local (0x0)
-# CHECK-NEXT: Type: None (0x0)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D2@ (10)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T1@ (1)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: T2@ (4)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 0
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Function (0x2)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: Symbol {
-# CHECK-NEXT: Name: D1@ (7)
-# CHECK-NEXT: Value: 0x0
-# CHECK-NEXT: Size: 4
-# CHECK-NEXT: Binding: Global (0x1)
-# CHECK-NEXT: Type: Object (0x1)
-# CHECK-NEXT: Other: 0
-# CHECK-NEXT: Section: Undefined (0x0)
-# CHECK-NEXT: }
-# CHECK-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: _gp_disp
- Type: R_MIPS_LO16
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00 # LT0 is a locally defined function
- Symbol: LT0
- Type: R_MIPS_32
- - Offset: 0x00 # LD0 is a locally defined data object
- Symbol: LD0
- Type: R_MIPS_32
- - Offset: 0x00 # T0 is a defined function
- Symbol: T0
- Type: R_MIPS_32
- - Offset: 0x04 # T1 is a function from shared lib
- Symbol: T1
- Type: R_MIPS_32
- - Offset: 0x08 # T2 has unknown type and defined in shared lib
- Symbol: T2
- Type: R_MIPS_32
- - Offset: 0x00 # T4 is an undefined function
- Symbol: T4
- Type: R_MIPS_32
- - Offset: 0x04 # D0 is a defined data object
- Symbol: D0
- Type: R_MIPS_32
- - Offset: 0x08 # D1 is a data object from shared lib
- Symbol: D1
- Type: R_MIPS_32
- - Offset: 0x00 # D2 has unknown type and defined in shared lib
- Symbol: D2
- Type: R_MIPS_32
- - Offset: 0x04 # D4 is an undefined data object
- Symbol: D4
- Type: R_MIPS_32
- - Offset: 0x08 # U1 is undefined and has unknown type
- Symbol: U1
- Type: R_MIPS_32
-
-Symbols:
- Local:
- - Name: LT0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: LD0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
-
- Global:
- - Name: _gp_disp
- Type: STT_OBJECT
-
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- - Name: T4
- Type: STT_FUNC
-
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- - Name: D4
- Type: STT_OBJECT
- - Name: U1
-...
diff --git a/test/elf/Mips/rel-dynamic-09-micro.test b/test/elf/Mips/rel-dynamic-09-micro.test
deleted file mode 100644
index 07ffce9eb074..000000000000
--- a/test/elf/Mips/rel-dynamic-09-micro.test
+++ /dev/null
@@ -1,109 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are undefined symbols.
-# Check:
-# a) There should be no dynamic relocations.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel --noinhibit-exec -e T0 -o %t2-exe %t-obj
-# RUN: llvm-readobj -dt -r -s %t2-exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MICROMIPS_26_S1
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_LO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
diff --git a/test/elf/Mips/rel-dynamic-09.test b/test/elf/Mips/rel-dynamic-09.test
deleted file mode 100644
index 18eeb9dd33d8..000000000000
--- a/test/elf/Mips/rel-dynamic-09.test
+++ /dev/null
@@ -1,107 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are undefined symbols.
-# Check:
-# a) There should be no dynamic relocations.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel --noinhibit-exec -e T0 -o %t2-exe %t-obj
-# RUN: llvm-readobj -dt -r -s %t2-exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Content: "0000000000000000"
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
diff --git a/test/elf/Mips/rel-dynamic-10-micro.test b/test/elf/Mips/rel-dynamic-10-micro.test
deleted file mode 100644
index 6b3f2af3db32..000000000000
--- a/test/elf/Mips/rel-dynamic-10-micro.test
+++ /dev/null
@@ -1,166 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the other object.
-# Check:
-# a) There should be no dynamic relocations.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o1.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o2.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# o1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o2.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
- EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MICROMIPS_26_S1
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_LO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MICROMIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
-...
diff --git a/test/elf/Mips/rel-dynamic-10.test b/test/elf/Mips/rel-dynamic-10.test
deleted file mode 100644
index 4df558167fc7..000000000000
--- a/test/elf/Mips/rel-dynamic-10.test
+++ /dev/null
@@ -1,160 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the other object.
-# Check:
-# a) There should be no dynamic relocations.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o1.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o2.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o
-# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# o1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o2.o
----
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_HI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_HI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_LO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
-...
diff --git a/test/elf/Mips/rel-dynamic-11.test b/test/elf/Mips/rel-dynamic-11.test
deleted file mode 100644
index 20295396cd08..000000000000
--- a/test/elf/Mips/rel-dynamic-11.test
+++ /dev/null
@@ -1,110 +0,0 @@
-# Conditions:
-# a) Linking a shared library.
-# b) Relocations' targets are symbols defined in the other shared object.
-# Check:
-# a) Emitting R_MIPS_REL32 relocations for both symbols.
-# b) There should be no PLT entries.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t1.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t2.so %t-o.o %t1.so
-# RUN: llvm-readobj -dt -r -s %t2.so | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Sections [
-# PLT-SYM: Section {
-# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
-#
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (4) .rel.dyn {
-# PLT-SYM-NEXT: 0x150 R_MIPS_REL32 T1 0x0
-# PLT-SYM-NEXT: 0x2000 R_MIPS_REL32 T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-#
-# PLT-SYM: Name: T1@ (7)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T1
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
-...
diff --git a/test/elf/Mips/rel-dynamic-12.test b/test/elf/Mips/rel-dynamic-12.test
deleted file mode 100644
index 2a4061ab4035..000000000000
--- a/test/elf/Mips/rel-dynamic-12.test
+++ /dev/null
@@ -1,213 +0,0 @@
-# Conditions:
-# a) Linking a non-shared executable file.
-# b) Relocations' targets are symbols defined in the shared object.
-# c) Relocations are R_MIPS_PCHI16 / R_MIPS_PCLO16.
-# Check:
-# a) Emitting R_MIPS_REL32, R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
-# b) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
-# a pointer equality.
-#
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
-# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
-
-# PLT-SYM: Relocations [
-# PLT-SYM-NEXT: Section (5) .rel.dyn {
-# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 T2 0x0
-# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 D2 0x0
-# PLT-SYM-NEXT: 0x402018 R_MIPS_COPY D1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Section (6) .rel.plt {
-# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
-# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# PLT-SYM: DynamicSymbols [
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: @ (0)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Local (0x0)
-# PLT-SYM-NEXT: Type: None (0x0)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: D1@ (1)
-# PLT-SYM-NEXT: Value: 0x402018
-# PLT-SYM-NEXT: Size: 4
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Object (0x1)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: .bss (0xD)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T1@ (4)
-# PLT-SYM-NEXT: Value: 0x400220
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 8
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T3@ (10)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: T2@ (7)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 0
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Function (0x2)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: Symbol {
-# PLT-SYM-NEXT: Name: D2@ (13)
-# PLT-SYM-NEXT: Value: 0x0
-# PLT-SYM-NEXT: Size: 4
-# PLT-SYM-NEXT: Binding: Global (0x1)
-# PLT-SYM-NEXT: Type: Object (0x1)
-# PLT-SYM-NEXT: Other: 0
-# PLT-SYM-NEXT: Section: Undefined (0x0)
-# PLT-SYM-NEXT: }
-# PLT-SYM-NEXT: ]
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x0C
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x4
- Size: 4
- - Name: T3
- Section: .text
- Type: STT_FUNC
- Value: 0x8
- Size: 4
- - Name: D1
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 4
- - Name: D2
- Section: .data
- Type: STT_OBJECT
- Value: 0x4
- Size: 4
-
-# o.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_EXECINSTR, SHF_ALLOC]
-
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_WRITE, SHF_ALLOC]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0x04
- Symbol: T3
- Type: R_MIPS_26
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_PCHI16
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_PCLO16
- - Offset: 0x04
- Symbol: T2
- Type: R_MIPS_32
-
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_PCHI16
- - Offset: 0x04
- Symbol: D1
- Type: R_MIPS_PCLO16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_32
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
- - Name: T1
- Type: STT_FUNC
- - Name: T2
- Type: STT_FUNC
- - Name: T3
- Type: STT_FUNC
- - Name: D0
- Section: .data
- Type: STT_OBJECT
- Value: 0x0
- Size: 8
- - Name: D1
- Type: STT_OBJECT
- - Name: D2
- Type: STT_OBJECT
-...
diff --git a/test/elf/Mips/rel-gprel16.test b/test/elf/Mips/rel-gprel16.test
deleted file mode 100644
index dc188ea6825a..000000000000
--- a/test/elf/Mips/rel-gprel16.test
+++ /dev/null
@@ -1,104 +0,0 @@
-# Check R_MIPS_GPREL16 relocation handling.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -e G1 -shared -o %t.so %t-obj
-# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
-
-# SYM: Name: L1 (1)
-# SYM-NEXT: Value: 0xCC
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Local (0x0)
-# SYM-NEXT: Type: Function (0x2)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .text (0x4)
-
-# SYM: Name: G1 (4)
-# SYM-NEXT: Value: 0xD0
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: Function (0x2)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .text (0x4)
-
-# SYM: Name: _gp (34)
-# SYM-NEXT: Value: 0x8FF0
-# SYM-NEXT: Size: 0
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: Object (0x1)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: Absolute (0xFFF1)
-
-# 0x160db == 0xffff (addend) + 0x00cc (L1) + 0x01f000 (GP0) - 0x8ff0 (_gp)
-# SEC: Contents of section .rodata:
-# SEC-NEXT: 00d4 db600008 00000000 00000000 00000000 .`..............
-
-!ELF
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
-- Type: SHT_PROGBITS
- Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-
-- Type: SHT_REL
- Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: .rodata
- Type: R_MIPS_GOT16
- - Offset: 4
- Symbol: .rodata
- Type: R_MIPS_LO16
-
-- Type: SHT_PROGBITS
- Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x04
- Content: ffff0008000000000000000000000000
-
-- Type: SHT_REL
- Name: .rel.rodata
- Type: SHT_REL
- Link: .symtab
- Info: .rodata
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: L1
- Type: R_MIPS_GPREL16
-
-- Type: SHT_MIPS_REGINFO
- Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Content: 000000000000000000000000000000000000000000f00100
-
-Symbols:
- Local:
- - Name: L1
- Section: .text
- Value: 0x00
- Size: 0x04
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- Global:
- - Name: G1
- Section: .text
- Value: 0x04
- Size: 0x04
diff --git a/test/elf/Mips/rel-gprel32-64.test b/test/elf/Mips/rel-gprel32-64.test
deleted file mode 100644
index 723c8e1ee738..000000000000
--- a/test/elf/Mips/rel-gprel32-64.test
+++ /dev/null
@@ -1,70 +0,0 @@
-# Check R_MIPS_GPREL32/R_MIPS_64 relocations handling.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 1200001a0 c871ffff ffffffff c871ffff c871ffff .q.......q...q..
-# CHECK-NEXT: 1200001b0 c871ffff ffffffff 00000000 00000000 .q..............
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 16
- Size: 32
-
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 8
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: LT1
- Type: R_MIPS_GPREL16
- Type2: R_MIPS_64
- Type3: R_MIPS_NONE
- - Offset: 0x08
- Symbol: LT1
- Type: R_MIPS_GPREL16
- Type2: R_MIPS_64
- Type3: R_MIPS_NONE
- - Offset: 0x0C
- Symbol: LT1
- Type: R_MIPS_GPREL32
- Type2: R_MIPS_64
- Type3: R_MIPS_NONE
- - Offset: 0x10
- Symbol: LT1
- Type: R_MIPS_GPREL32
- Type2: R_MIPS_64
- Type3: R_MIPS_NONE
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: LT1
- Type: STT_FUNC
- Section: .text
- Value: 0x18
- Size: 0x8
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Value: 0x0
- Size: 0x18
-...
diff --git a/test/elf/Mips/rel-gprel32.test b/test/elf/Mips/rel-gprel32.test
deleted file mode 100644
index 73ae6f161979..000000000000
--- a/test/elf/Mips/rel-gprel32.test
+++ /dev/null
@@ -1,84 +0,0 @@
-# Check R_MIPS_GPREL32 relocation handling.
-#
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-readobj -symbols %t-exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t-exe | FileCheck -check-prefix=SEC %s
-
-# SYM: Name: $L1 (1)
-# SYM-NEXT: Value: 0x400108
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Local (0x0)
-# SYM-NEXT: Type: Function (0x2)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .text (0x5)
-#
-# SYM: Name: _gp (212)
-# SYM-NEXT: Value: 0x408FF0
-# SYM-NEXT: Size: 0
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: Object (0x1)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: Absolute (0xFFF1)
-
-# 0x08FF711B == 0x8000001 (addend) + 0x400108 ($L1) +
-# 0x1000002 (GP0) - 0x408FF0 (_gp)
-# SEC: Contents of section .rodata:
-# SEC-NEXT: 400118 1b71ff08 00000000 00000000 00000000 .q..............
-
-!ELF
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
-- Type: SHT_PROGBITS
- Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: 00000000000000000000000000000000
-
-- Type: SHT_PROGBITS
- Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x04
- Content: 01000008000000000000000000000000
-
-- Type: SHT_REL
- Name: .rel.rodata
- Type: SHT_REL
- Link: .symtab
- Info: .rodata
- AddressAlign: 0x04
- Relocations:
- - Offset: 0
- Symbol: $L1
- Type: R_MIPS_GPREL32
-
-- Type: SHT_MIPS_REGINFO
- Name: .reginfo
- Type: SHT_MIPS_REGINFO
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x01
- Content: 000000000000000000000000000000000000000002000001
-
-Symbols:
- Local:
- - Name: $L1
- Section: .text
- Value: 0x00
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- Global:
- - Name: __start
- Section: .text
- Type: STT_FUNC
- Value: 0x04
- Size: 12
- - Name: _gp_disp
diff --git a/test/elf/Mips/rel-pc-hilo.test b/test/elf/Mips/rel-pc-hilo.test
deleted file mode 100644
index 89cd2b121797..000000000000
--- a/test/elf/Mips/rel-pc-hilo.test
+++ /dev/null
@@ -1,70 +0,0 @@
-# Check handling of R_MIPS_PCHI16 / R_MIPS_PCLO16 relocations.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 01000000 02000000 03000000 00000000
-# ^
-# A = 0x10000 - 1 == 0xffff
-# V = (T1 + 0xffff - T0) >> 16 =>
-# V => 0x1000b >> 16 = 1
-# ^
-# A = 0x20000 - 1 == 0x1ffff
-# V = (T1 + 0x1ffff - T0 - 4) >> 16 =>
-# V => 0x20007 >> 16 = 2
-# ^
-# A = 0xffff == -1
-# V = T1 - 1 - T0 - 8 = 3
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400110 g F .text 0000000c T0
-# CHECK: 0040011c g F .text 00000004 T1
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "0100000002000000ffff000000000000"
-# ^ T0
-# ^ A := 0x1 == 0x10000
-# ^ A := 0x2 == 0x20000
-# ^ A := 0xffff == -1
-# ^ T1
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_PCHI16
- - Offset: 4
- Symbol: T1
- Type: R_MIPS_PCHI16
- - Offset: 8
- Symbol: T1
- Type: R_MIPS_PCLO16
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 12
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 12
- Size: 4
diff --git a/test/elf/Mips/rel-pc18-s3.test b/test/elf/Mips/rel-pc18-s3.test
deleted file mode 100644
index 5d5d5c7ce658..000000000000
--- a/test/elf/Mips/rel-pc18-s3.test
+++ /dev/null
@@ -1,54 +0,0 @@
-# Check handling of R_MIPS_PC18_S3 relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 00000000 01000000 00000000 00000000
-# ^ V
-# A = -1 << 3 = -8 =>
-# V = (T1 - 8 - (T0|7)^7) >> 3 =>
-# V => 8 >> 3 = 1
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400110 g F .text 00000010 T0
-# CHECK: 00400120 g F .text 00000004 T1
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000ffff0300000000000000000000000000"
-# ^ T1
-# ^ T0 ^ A := 0x3ffff == -1
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 4
- Symbol: T1
- Type: R_MIPS_PC18_S3
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 16
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 16
- Size: 4
diff --git a/test/elf/Mips/rel-pc19-s2.test b/test/elf/Mips/rel-pc19-s2.test
deleted file mode 100644
index 479965df814f..000000000000
--- a/test/elf/Mips/rel-pc19-s2.test
+++ /dev/null
@@ -1,54 +0,0 @@
-# Check handling of R_MIPS_PC19_S2 relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 01000000 00000000 00000000
-# ^ V
-# A = -1 << 2 = -4 =>
-# V = (T1 - 4 - T0) >> 2 =>
-# V => 4 >> 2 = 1
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400110 g F .text 00000008 T0
-# CHECK: 00400118 g F .text 00000004 T1
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "ffff07000000000000000000"
-# ^ T1
-# ^ T0 A := 0x7ffff == -1
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_PC19_S2
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 8
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 8
- Size: 4
diff --git a/test/elf/Mips/rel-pc21-s2.test b/test/elf/Mips/rel-pc21-s2.test
deleted file mode 100644
index 44d840e94c32..000000000000
--- a/test/elf/Mips/rel-pc21-s2.test
+++ /dev/null
@@ -1,54 +0,0 @@
-# Check handling of R_MIPS_PC21_S2 relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 01000000 00000000 00000000
-# ^ V
-# A = -1 << 2 = -4 =>
-# V = (T1 - 4 - T0) >> 2 =>
-# V => 4 >> 2 = 1
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400110 g F .text 00000008 T0
-# CHECK: 00400118 g F .text 00000004 T1
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "ffff1f000000000000000000"
-# ^ T1
-# ^ T0 A := 0x1fffff
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_PC21_S2
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 8
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 8
- Size: 4
diff --git a/test/elf/Mips/rel-pc26-s2.test b/test/elf/Mips/rel-pc26-s2.test
deleted file mode 100644
index abd05040f0c3..000000000000
--- a/test/elf/Mips/rel-pc26-s2.test
+++ /dev/null
@@ -1,54 +0,0 @@
-# Check handling of R_MIPS_PC26_S2 relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 01000000 00000000 00000000
-# ^ V
-# A = -1 << 2 = -4 =>
-# V = (T1 - 4 - T0) >> 2 =>
-# V => 4 >> 2 = 1
-
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400110 g F .text 00000008 T0
-# CHECK: 00400118 g F .text 00000004 T1
-
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "ffffff030000000000000000"
-# ^ T1
-# ^ T0 A := 0x3ffffff == -1
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_PC26_S2
-
-Symbols:
- Global:
- - Name: T0
- Section: .text
- Type: STT_FUNC
- Value: 0
- Size: 8
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 8
- Size: 4
diff --git a/test/elf/Mips/rel-pc32.test b/test/elf/Mips/rel-pc32.test
deleted file mode 100644
index e448e8afc30e..000000000000
--- a/test/elf/Mips/rel-pc32.test
+++ /dev/null
@@ -1,59 +0,0 @@
-# Check handling of R_MIPS_PC32 relocation.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 402000 00000000 05000080 fdffff7f ............
-# ^^ data2 + 0x80000001 - data1
-# ^^ data1 + 0x80000001 - data2
-# CHECK: SYMBOL TABLE:
-# CHECK: 00402004 g .data 00000004 data1
-# CHECK: 00402008 g .data 00000004 data2
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "00000000"
- AddressAlign: 16
- Flags: [SHF_ALLOC]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "000000000100008001000080"
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rel.data
- Type: SHT_REL
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x4
- Symbol: data2
- Type: R_MIPS_PC32
- - Offset: 0x8
- Symbol: data1
- Type: R_MIPS_PC32
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 4
- - Name: data1
- Section: .data
- Value: 0x4
- Size: 4
- - Name: data2
- Section: .data
- Value: 0x8
- Size: 4
diff --git a/test/elf/Mips/rel-pc7-10-16-23.test b/test/elf/Mips/rel-pc7-10-16-23.test
deleted file mode 100644
index c38b9eed2a5e..000000000000
--- a/test/elf/Mips/rel-pc7-10-16-23.test
+++ /dev/null
@@ -1,86 +0,0 @@
-# Check handling of R_MICROMIPS_PC7_S1, R_MICROMIPS_PC10_S1,
-# R_MICROMIPS_PC16_S1, and R_MICROMIPS_PC23_S2 relocations.
-
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target mipsel -o %t-exe %t-obj
-# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK-NEXT: 400110 00000000 80780500 a240fcff 000c03cc .....x...@......
-# ^^ addiu s1,$pc,20
-# ^^ bnezc v0,400114 <__start+0x4>
-# ^^ b 400126 <L1>
-# CHECK-NEXT: 400120 000c03ad 00000000 00000000 00000000 ................
-# ^^ bnez v0,40012a <L2>
-# CHECK: SYMBOL TABLE:
-# CHECK: 00400124 l F .text 00000002 L0
-# CHECK: 00400126 l F .text 00000004 L1
-# CHECK: 0040012a l F .text 00000004 L2
-# CHECK: 0040012e l F .text 00000002 L3
-# CHECK: 00400110 g F .text 00000014 __start
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
- EF_MIPS_MICROMIPS ]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
-# v nop v nop v L0
- Content: "0000000080780100a240f5ff000cfdcf000c7dad000000000000000000000000"
-# ^ PC23 ^ PC16 ^ PC10 ^ PC7 ^ L1 ^ L2 ^ L3
-# 7d << 1 = -6 => L3 + 2 - 6 = L2
-# 3fd << 1 = -6 => L2 + 2 - 6 = L1
-# fff5 << 1 = -22 => L1 + 2 - 22 = __start
-# 1 << 2 = 4 => L0 + 4 - 4 = L0
- AddressAlign: 16
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-
-- Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 4
- Symbol: L0
- Type: R_MICROMIPS_PC23_S2
- - Offset: 8
- Symbol: L1
- Type: R_MICROMIPS_PC16_S1
- - Offset: 14
- Symbol: L2
- Type: R_MICROMIPS_PC10_S1
- - Offset: 18
- Symbol: L3
- Type: R_MICROMIPS_PC7_S1
-
-Symbols:
- Local:
- - Name: L0
- Section: .text
- Value: 20
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: L1
- Section: .text
- Value: 22
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: L2
- Section: .text
- Value: 26
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: L3
- Section: .text
- Value: 30
- Other: [ STO_MIPS_MICROMIPS ]
- Global:
- - Name: __start
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 32
- Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/elf/Mips/rel-sub.test b/test/elf/Mips/rel-sub.test
deleted file mode 100644
index 93e569a22035..000000000000
--- a/test/elf/Mips/rel-sub.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Check handling of R_MIPS_SUB relocation.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target mips64el -o %t.exe %t.o
-# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
-
-# CHECK: Contents of section .data:
-# CHECK-NEXT: 120002000 cf010020 01000000 d0010020 0100ffff ... ....... ....
-# ^^ __start - 1 = 0x1200001cf
-# ^^ __start - 0x1000000000000
-# = 0Xffff0001200001d0
-# CHECK: SYMBOL TABLE:
-# CHECK: 00000001200001d0 g .rodata 00000008 __start
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Size: 0x08
- AddressAlign: 16
- Flags: [SHF_ALLOC]
-- Name: .data
- Type: SHT_PROGBITS
- Size: 0x10
- AddressAlign: 16
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-- Name: .rela.data
- Type: SHT_RELA
- Info: .data
- AddressAlign: 4
- Relocations:
- - Offset: 0x0
- Symbol: __start
- Type: R_MIPS_SUB
- Addend: 1
- - Offset: 0x8
- Symbol: __start
- Type: R_MIPS_SUB
- Addend: 0x1000000000000
-
-Symbols:
- Global:
- - Name: __start
- Section: .text
- Value: 0x0
- Size: 8
- - Name: data1
- Section: .data
- Value: 0x0
- Size: 8
- - Name: data2
- Section: .data
- Value: 0x8
- Size: 8
diff --git a/test/elf/Mips/st-other.test b/test/elf/Mips/st-other.test
deleted file mode 100644
index 8d15e75676b0..000000000000
--- a/test/elf/Mips/st-other.test
+++ /dev/null
@@ -1,90 +0,0 @@
-# Check STO_MICROMIPS flag handling. microMIPS symbol records in a dynamic
-# symbol table should not have STO_MICROMIPS flag but their value field
-# must be odd. microMIPS symbol records in a regular symbol table should
-# have the STO_MICROMIPS flag.
-
-# RUN: yaml2obj -format=elf %s > %t-micro.o
-
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-micro.o
-# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck -check-prefix=SO %s
-
-# RUN: lld -flavor gnu -target mipsel -e S0 -o %t.exe %t-micro.o
-# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=EXE-SYM %s
-# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=EXE-DSYM %s
-
-# SO: Symbol {
-# SO: Name: S0@ (1)
-# SO-NEXT: Value: 0xEC
-# SO-NEXT: Size: 4
-# SO-NEXT: Binding: Global (0x1)
-# SO-NEXT: Type: Function (0x2)
-# SO-NEXT: Other: 0
-# SO-NEXT: Section: .text (0x4)
-# SO-NEXT: }
-
-# SO: Symbol {
-# SO: Name: S1@ (4)
-# SO-NEXT: Value: 0xF1
-# SO-NEXT: Size: 4
-# SO-NEXT: Binding: Global (0x1)
-# SO-NEXT: Type: Function (0x2)
-# SO-NEXT: Other: 0
-# SO-NEXT: Section: .text (0x4)
-# SO-NEXT: }
-
-# EXE-SYM: Symbol {
-# EXE-SYM: Name: S0 (1)
-# EXE-SYM-NEXT: Value: 0x400108
-# EXE-SYM-NEXT: Size: 4
-# EXE-SYM-NEXT: Binding: Global (0x1)
-# EXE-SYM-NEXT: Type: Function (0x2)
-# EXE-SYM-NEXT: Other: 0
-# EXE-SYM-NEXT: Section: .text (0x5)
-# EXE-SYM-NEXT: }
-
-# EXE-SYM: Symbol {
-# EXE-SYM: Name: S1 (4)
-# EXE-SYM-NEXT: Value: 0x40010D
-# EXE-SYM-NEXT: Size: 4
-# EXE-SYM-NEXT: Binding: Global (0x1)
-# EXE-SYM-NEXT: Type: Function (0x2)
-# EXE-SYM-NEXT: Other: 128
-# EXE-SYM-NEXT: Section: .text (0x5)
-# EXE-SYM-NEXT: }
-
-# EXE-DSYM-NOT: Name: S1 (4)
-
-# micro.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-
-Symbols:
- Global:
- - Name: S0
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Value: 0x00
- Visibility: STV_DEFAULT
- Other: [ ]
-
- - Name: S1
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Value: 0x04
- Visibility: STV_DEFAULT
- Other: [ STO_MIPS_MICROMIPS ]
-...
diff --git a/test/elf/Mips/tls-1-micro.test b/test/elf/Mips/tls-1-micro.test
deleted file mode 100644
index bd962b4e9e80..000000000000
--- a/test/elf/Mips/tls-1-micro.test
+++ /dev/null
@@ -1,65 +0,0 @@
-# Check handling of R_MICROMIPS_TLS_TPREL_HI16 / R_MICROMIPS_TLS_TPREL_LO16
-# relocations.
-
-# RUN: yaml2obj -format=elf -o %t.o %s
-# RUN: lld -flavor gnu -target mipsel -e L0 -o %t.exe %t.o
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400150 00000000 00000100 00000380 00000480 ................
-
-!ELF
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Content: '00000100000002000000030000000400'
- - Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: L1
- Type: R_MICROMIPS_TLS_TPREL_HI16
- - Offset: 0x04
- Symbol: L2
- Type: R_MICROMIPS_TLS_TPREL_HI16
- - Offset: 0x08
- Symbol: L2
- Type: R_MICROMIPS_TLS_TPREL_LO16
- - Offset: 0x0C
- Symbol: L1
- Type: R_MICROMIPS_TLS_TPREL_LO16
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Address: 0x1000
- Size: 0x20000
-
-Symbols:
- Global:
- - Name: L0
- Type: STT_FUNC
- Section: .text
- Size: 0x58
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: L1
- Type: STT_TLS
- Section: .tdata
- Value: 0x00
- Size: 0x04
- - Name: L2
- Type: STT_TLS
- Section: .tdata
- Value: 0x10000
- Size: 0x04
diff --git a/test/elf/Mips/tls-1.test b/test/elf/Mips/tls-1.test
deleted file mode 100644
index 99176e69171d..000000000000
--- a/test/elf/Mips/tls-1.test
+++ /dev/null
@@ -1,63 +0,0 @@
-# Check handling of R_MIPS_TLS_TPREL_HI16 / R_MIPS_TLS_TPREL_LO16 relocations.
-
-# RUN: yaml2obj -format=elf -o %t.o %s
-# RUN: lld -flavor gnu -target mipsel -e L0 -o %t.exe %t.o
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-# CHECK: Contents of section .text:
-# CHECK: 400150 00000000 01000000 03800000 04800000 ................
-
-!ELF
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Content: '01000000020000000300000004000000'
- - Name: .rel.text
- Type: SHT_REL
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: L1
- Type: R_MIPS_TLS_TPREL_HI16
- - Offset: 0x04
- Symbol: L2
- Type: R_MIPS_TLS_TPREL_HI16
- - Offset: 0x08
- Symbol: L2
- Type: R_MIPS_TLS_TPREL_LO16
- - Offset: 0x0C
- Symbol: L1
- Type: R_MIPS_TLS_TPREL_LO16
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Address: 0x1000
- Size: 0x20000
-
-Symbols:
- Global:
- - Name: L0
- Type: STT_FUNC
- Section: .text
- Size: 0x58
- - Name: L1
- Type: STT_TLS
- Section: .tdata
- Value: 0x00
- Size: 0x04
- - Name: L2
- Type: STT_TLS
- Section: .tdata
- Value: 0x10000
- Size: 0x04
diff --git a/test/elf/Mips/tls-2-64.test b/test/elf/Mips/tls-2-64.test
deleted file mode 100644
index a068934aeafa..000000000000
--- a/test/elf/Mips/tls-2-64.test
+++ /dev/null
@@ -1,69 +0,0 @@
-# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
-# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL64,
-# R_MIPS_TLS_DTPMOD64 and R_MIPS_TLS_DTPREL64 in case of shared library.
-
-# Create a shared library with thread symbol D1.
-# RUN: yaml2obj -format=elf -o %t-so.o %s
-# RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t-so.o
-
-# Check dynamic relocations and GOT in the shared library.
-# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
-
-# REL: Section (4) .rel.dyn {
-# REL-NEXT: 0x2010 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE D1 0x0
-# REL-NEXT: 0x2018 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE D1 0x0
-# REL-NEXT: }
-
-# DYN: 0x000000007000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x0000000070000013 MIPS_GOTSYM 0x3
-
-# SYM: Name: T1@ (1)
-# SYM: Name: D1@ (4)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 2000 00000000 00000000 00000000 00000080 ................
-# GOT-NEXT: 2010 00000000 00000000 00000000 00000000 ................
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 4
- Size: 4
- - Name: .rel.text
- Type: SHT_RELA
- Link: .symtab
- Info: .text
- AddressAlign: 4
- Relocations:
- - Offset: 0
- Symbol: D1
- Type: R_MIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 4
- Size: 8
-
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 4
- - Name: D1
- Type: STT_TLS
- Section: .tdata
- Size: 8
-...
diff --git a/test/elf/Mips/tls-2-micro.test b/test/elf/Mips/tls-2-micro.test
deleted file mode 100644
index 5a1fe2904ac9..000000000000
--- a/test/elf/Mips/tls-2-micro.test
+++ /dev/null
@@ -1,70 +0,0 @@
-# Check handling of R_MICROMIPS_TLS_GOTTPREL and R_MICROMIPS_TLS_GD relocations
-# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
-# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of shared library.
-
-# Create a shared library with thread symbol D1.
-# RUN: yaml2obj -format=elf -o %t-so.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Check dynamic relocations and GOT in the shared library.
-# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
-
-# REL: Section (4) .rel.dyn {
-# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 D1 0x0
-# REL-NEXT: 0x200C R_MIPS_TLS_DTPREL32 D1 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x3
-
-# SYM: Name: T1@ (1)
-# SYM: Name: D1@ (4)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MICROMIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D1
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-...
diff --git a/test/elf/Mips/tls-2.test b/test/elf/Mips/tls-2.test
deleted file mode 100644
index 32b2bc105112..000000000000
--- a/test/elf/Mips/tls-2.test
+++ /dev/null
@@ -1,69 +0,0 @@
-# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
-# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
-# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of shared library.
-
-# Create a shared library with thread symbol D1.
-# RUN: yaml2obj -format=elf -o %t-so.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Check dynamic relocations and GOT in the shared library.
-# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
-
-# REL: Section (4) .rel.dyn {
-# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 D1 0x0
-# REL-NEXT: 0x200C R_MIPS_TLS_DTPREL32 D1 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x3
-
-# SYM: Name: T1@ (1)
-# SYM: Name: D1@ (4)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- - Name: D1
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-...
diff --git a/test/elf/Mips/tls-3-micro.test b/test/elf/Mips/tls-3-micro.test
deleted file mode 100644
index 0e0f3d556f8f..000000000000
--- a/test/elf/Mips/tls-3-micro.test
+++ /dev/null
@@ -1,183 +0,0 @@
-# Check handling of R_MICROMIPS_TLS_GOTTPREL and R_MICROMIPS_TLS_GD relocations
-# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
-# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of executable linking.
-
-# Create a shared library with thread symbol D1.
-# RUN: yaml2obj -format=elf -docnum 1 -o %t-so.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Create executable file linked using two object files and the shared library.
-# The object files defines thread symbols D0 and D2.
-# RUN: yaml2obj -format=elf -docnum 2 -o %t-o1.o %s
-# RUN: yaml2obj -format=elf -docnum 3 -o %t-o2.o %s
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o %t.so
-
-# Check dynamic relocations and GOT in the executable file.
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=GOT %s
-
-# REL: Section (5) .rel.dyn {
-# REL-NEXT: 0x402008 R_MIPS_TLS_TPREL32 D1 0x0
-# REL-NEXT: 0x40200C R_MIPS_TLS_TPREL32 D2 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x3
-
-# SYM: Name: D2@ (1)
-# SYM: Name: D1@ (4)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 402000 00000000 00000080 00000000 00000000 ................
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MICROMIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D1
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-
-# o1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D2
- Type: R_MICROMIPS_TLS_TPREL_HI16
- - Offset: 0x04
- Symbol: D2
- Type: R_MICROMIPS_TLS_TPREL_LO16
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D2
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-
-# o2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x10
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MICROMIPS_TLS_GOTTPREL
- Addend: 0
- - Offset: 0x04
- Symbol: D0
- Type: R_MICROMIPS_TLS_TPREL_HI16
- Addend: 0
- - Offset: 0x08
- Symbol: D0
- Type: R_MICROMIPS_TLS_TPREL_LO16
- Addend: 0
- - Offset: 0x0C
- Symbol: D2
- Type: R_MICROMIPS_TLS_GOTTPREL
- Addend: 0
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: D0
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x10
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: D1
- Type: STT_TLS
- - Name: D2
- Type: STT_TLS
-...
diff --git a/test/elf/Mips/tls-3.test b/test/elf/Mips/tls-3.test
deleted file mode 100644
index 7e54724fade5..000000000000
--- a/test/elf/Mips/tls-3.test
+++ /dev/null
@@ -1,180 +0,0 @@
-# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
-# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
-# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of executable linking.
-
-# Create a shared library with thread symbol D1.
-# RUN: yaml2obj -format=elf -docnum 1 -o %t-so.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so.o
-
-# Create executable file linked using two object files and the shared library.
-# The object files defines thread symbols D0 and D2.
-# RUN: yaml2obj -format=elf -docnum 2 -o %t-o1.o %s
-# RUN: yaml2obj -format=elf -docnum 3 -o %t-o2.o %s
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o %t.so
-
-# Check dynamic relocations and GOT in the executable file.
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=GOT %s
-
-# REL: Section (5) .rel.dyn {
-# REL-NEXT: 0x402008 R_MIPS_TLS_TPREL32 D1 0x0
-# REL-NEXT: 0x40200C R_MIPS_TLS_TPREL32 D2 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x3
-
-# SYM: Name: D2@ (1)
-# SYM: Name: D1@ (4)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 402000 00000000 00000080 00000000 00000000 ................
-
-# so.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- - Name: D1
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-
-# o1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D2
- Type: R_MIPS_TLS_TPREL_HI16
- - Offset: 0x04
- Symbol: D2
- Type: R_MIPS_TLS_TPREL_LO16
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: D2
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
-
-# o2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x10
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- Info: .text
- AddressAlign: 0x04
- Relocations:
- - Offset: 0x00
- Symbol: D1
- Type: R_MIPS_TLS_GOTTPREL
- Addend: 0
- - Offset: 0x04
- Symbol: D0
- Type: R_MIPS_TLS_TPREL_HI16
- Addend: 0
- - Offset: 0x08
- Symbol: D0
- Type: R_MIPS_TLS_TPREL_LO16
- Addend: 0
- - Offset: 0x0C
- Symbol: D2
- Type: R_MIPS_TLS_GOTTPREL
- Addend: 0
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: D0
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x10
- - Name: D1
- Type: STT_TLS
- - Name: D2
- Type: STT_TLS
-...
diff --git a/test/elf/Mips/tls-4-micro.test b/test/elf/Mips/tls-4-micro.test
deleted file mode 100644
index 1b0d03fa8875..000000000000
--- a/test/elf/Mips/tls-4-micro.test
+++ /dev/null
@@ -1,126 +0,0 @@
-# Check handling of R_MICROMIPS_TLS_LDM relocation and generation
-# of corresponding dynamic relocation R_MICROMIPS_TLS_DTPMOD32.
-
-# RUN: yaml2obj -format=elf -docnum 1 -o %t-so1.o %s
-# RUN: yaml2obj -format=elf -docnum 2 -o %t-so2.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so1.o %t-so2.o
-
-# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
-
-# REL: Section (4) .rel.dyn {
-# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 - 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x4
-
-# SYM: Name: @ (0)
-# SYM: Name: T1@ (1)
-# SYM: Name: T2@ (4)
-# SYM: Name: T3@ (7)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
-# Two LDM entries --^--------^
-
-# so1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: L01
- Type: R_MICROMIPS_TLS_LDM
- - Offset: 0x04
- Symbol: L01
- Type: R_MICROMIPS_TLS_LDM
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Local:
- - Name: L01
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Value: 0x00
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Value: 0x04
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
-
-# so2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: L02
- Type: R_MICROMIPS_TLS_LDM
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Local:
- - Name: L02
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- Global:
- - Name: T3
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
-...
diff --git a/test/elf/Mips/tls-4.test b/test/elf/Mips/tls-4.test
deleted file mode 100644
index fb42f0d93378..000000000000
--- a/test/elf/Mips/tls-4.test
+++ /dev/null
@@ -1,123 +0,0 @@
-# Check handling of R_MIPS_TLS_LDM relocation and generation of corresponding
-# dynamic relocation R_MIPS_TLS_DTPMOD32.
-
-# RUN: yaml2obj -format=elf -docnum 1 -o %t-so1.o %s
-# RUN: yaml2obj -format=elf -docnum 2 -o %t-so2.o %s
-# RUN: lld -flavor gnu -target mipsel -shared -o %t.so %t-so1.o %t-so2.o
-
-# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
-# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
-# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
-
-# REL: Section (4) .rel.dyn {
-# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 - 0x0
-# REL-NEXT: }
-
-# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
-# DYN: 0x70000013 MIPS_GOTSYM 0x4
-
-# SYM: Name: @ (0)
-# SYM: Name: T1@ (1)
-# SYM: Name: T2@ (4)
-# SYM: Name: T3@ (7)
-
-# GOT: Contents of section .got:
-# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
-# Two LDM entries --^--------^
-
-# so1.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: L01
- Type: R_MIPS_TLS_LDM
- - Offset: 0x04
- Symbol: L01
- Type: R_MIPS_TLS_LDM
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Local:
- - Name: L01
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- Global:
- - Name: T1
- Type: STT_FUNC
- Section: .text
- Value: 0x00
- Size: 0x04
- - Name: T2
- Type: STT_FUNC
- Section: .text
- Value: 0x04
- Size: 0x04
-
-# so2.o
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: L02
- Type: R_MIPS_TLS_LDM
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Local:
- - Name: L02
- Type: STT_TLS
- Section: .tdata
- Size: 0x04
- Global:
- - Name: T3
- Type: STT_FUNC
- Section: .text
- Size: 0x04
-...
diff --git a/test/elf/Mips/tls-5-64.test b/test/elf/Mips/tls-5-64.test
deleted file mode 100644
index 784d71efc48f..000000000000
--- a/test/elf/Mips/tls-5-64.test
+++ /dev/null
@@ -1,71 +0,0 @@
-# Check that in case of an executable file linking symbol referred
-# by the R_MIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
-
-# RUN: yaml2obj -format=elf -o %t-o.o %s
-# RUN: lld -flavor gnu -target mips64el -e T0 -o %t.exe %t-o.o
-
-# Check dynamic relocations:
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
-# Check dynamic symbol table:
-# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
-
-# REL: Relocations [
-# REL-NEXT: Section (5) .rel.dyn {
-# REL-NEXT: 0x120002010 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE T1 0x0
-# REL-NEXT: 0x120002018 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE T1 0x0
-# REL-NEXT: }
-# REL-NEXT: ]
-
-# SYM: Symbol {
-# SYM: Name: T1@ (1)
-# SYM-NEXT: Value: 0x0
-# SYM-NEXT: Size: 8
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: TLS (0x6)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .tdata (0x7)
-# SYM-NEXT: }
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 8
-
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 4
- Info: .text
- Relocations:
- - Offset: 0
- Symbol: T1
- Type: R_MIPS_TLS_GD
-
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 4
- Size: 8
-
-Symbols:
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 8
- - Name: T1
- Type: STT_TLS
- Section: .tdata
- Value: 0
- Size: 8
-...
diff --git a/test/elf/Mips/tls-5-micro.test b/test/elf/Mips/tls-5-micro.test
deleted file mode 100644
index 89d1d98a6877..000000000000
--- a/test/elf/Mips/tls-5-micro.test
+++ /dev/null
@@ -1,70 +0,0 @@
-# Check that in case of an executable file linking symbol referred by
-# the R_MICROMIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
-
-# RUN: yaml2obj -format=elf -o %t-o.o %s
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o
-
-# Check dynamic relocations:
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
-# Check dynamic symbol table:
-# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
-
-# REL: Relocations [
-# REL-NEXT: Section (5) .rel.dyn {
-# REL-NEXT: 0x402008 R_MIPS_TLS_DTPMOD32 T1 0x0
-# REL-NEXT: 0x40200C R_MIPS_TLS_DTPREL32 T1 0x0
-# REL-NEXT: }
-# REL-NEXT: ]
-
-# SYM: Symbol {
-# SYM: Name: T1@ (1)
-# SYM-NEXT: Value: 0x0
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: TLS (0x6)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .tdata (0x7)
-# SYM-NEXT: }
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MICROMIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- Other: [ STO_MIPS_MICROMIPS ]
- - Name: T1
- Type: STT_TLS
- Section: .tdata
- Value: 0x00
- Size: 0x04
-...
diff --git a/test/elf/Mips/tls-5.test b/test/elf/Mips/tls-5.test
deleted file mode 100644
index 378ce321b8c9..000000000000
--- a/test/elf/Mips/tls-5.test
+++ /dev/null
@@ -1,69 +0,0 @@
-# Check that in case of an executable file linking symbol referred
-# by the R_MIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
-
-# RUN: yaml2obj -format=elf -o %t-o.o %s
-# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t-o.o
-
-# Check dynamic relocations:
-# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
-# Check dynamic symbol table:
-# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
-
-# REL: Relocations [
-# REL-NEXT: Section (5) .rel.dyn {
-# REL-NEXT: 0x402008 R_MIPS_TLS_DTPMOD32 T1 0x0
-# REL-NEXT: 0x40200C R_MIPS_TLS_DTPREL32 T1 0x0
-# REL-NEXT: }
-# REL-NEXT: ]
-
-# SYM: Symbol {
-# SYM: Name: T1@ (1)
-# SYM-NEXT: Value: 0x0
-# SYM-NEXT: Size: 4
-# SYM-NEXT: Binding: Global (0x1)
-# SYM-NEXT: Type: TLS (0x6)
-# SYM-NEXT: Other: 0
-# SYM-NEXT: Section: .tdata (0x7)
-# SYM-NEXT: }
-
----
-FileHeader:
- Class: ELFCLASS32
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_MIPS
- Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
- EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x10
- Size: 0x04
- - Name: .rel.text
- Type: SHT_REL
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: T1
- Type: R_MIPS_TLS_GD
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 0x04
- - Name: T1
- Type: STT_TLS
- Section: .tdata
- Value: 0x00
- Size: 0x04
-...
diff --git a/test/elf/X86_64/ExampleTarget/triple.test b/test/elf/X86_64/ExampleTarget/triple.test
deleted file mode 100644
index 3aecceb4305e..000000000000
--- a/test/elf/X86_64/ExampleTarget/triple.test
+++ /dev/null
@@ -1,32 +0,0 @@
-# Check that the Example Target is actually used.
-
-# RUN: yaml2obj -format=elf %s -o %t.o
-# RUN: lld -flavor gnu -target x86_64-example-freebsd9 %t.o -o %t.exe
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-#
-# CHECK: Type: 0xFF00
-
-# object
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000000
diff --git a/test/elf/X86_64/Inputs/generaltls-so.o.yaml b/test/elf/X86_64/Inputs/generaltls-so.o.yaml
deleted file mode 100644
index f0649e7639a6..000000000000
--- a/test/elf/X86_64/Inputs/generaltls-so.o.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E566488D3D00000000666648E8000000008B005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000008
- Symbol: mynumber
- Type: R_X86_64_TLSGD
- Addend: -4
- - Offset: 0x0000000000000010
- Symbol: __tls_get_addr
- Type: R_X86_64_PLT32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x0000000000000004
- Content: '21000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .tdata
- Type: STT_SECTION
- Section: .tdata
- Global:
- - Name: getnumber
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000018
- - Name: mynumber
- Type: STT_TLS
- Section: .tdata
- Size: 0x0000000000000004
- - Name: _GLOBAL_OFFSET_TABLE_
- - Name: __tls_get_addr
-...
diff --git a/test/elf/X86_64/alignoffset.test b/test/elf/X86_64/alignoffset.test
deleted file mode 100644
index b061f8937935..000000000000
--- a/test/elf/X86_64/alignoffset.test
+++ /dev/null
@@ -1,119 +0,0 @@
-# Checks that segments are aligned as per ELF spec. The segment virtual address
-# modulo page alignment should be equal to offset modulo page alignment.
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --rosegment --noinhibit-exec
-# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
-#
-#CHECK: Offset: 0x15C
-#CHECK: VirtualAddress: 0x40015C
-#CHECK: PhysicalAddress: 0x40015C
-#
-#
-#const int a = 0;
-#int main() {
-# foo();
-# return 0;
-#}
-#
-#int foo() { return 0; }
-
-# object
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E54883EC10C745FC00000000E81C000000B9000000008945F889C84883C4105DC36666662E0F1F840000000000554889E5B8000000005DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '00000000'
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 005562756E747520636C616E672076657273696F6E20332E352E302D73766E3231373330342D317E6578703120286272616E636865732F72656C656173655F33352920286261736564206F6E204C4C564D20332E352E302900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002400000000410E108602430D060000001800000038000000000000000B00000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 48
-Symbols:
- Local:
- - Name: 1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: a
- Type: STT_OBJECT
- Section: .rodata
- Size: 0x0000000000000004
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000030
- Size: 0x000000000000000B
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000024
-...
diff --git a/test/elf/X86_64/debug.test b/test/elf/X86_64/debug.test
deleted file mode 100644
index a13d12fba382..000000000000
--- a/test/elf/X86_64/debug.test
+++ /dev/null
@@ -1,57 +0,0 @@
-# Test that debug info is assigned typeNoAlloc and that the output sections have
-# a virtual address of 0.
-RUN: lld -flavor gnu -target x86_64 -e main --output-filetype=yaml \
-RUN: %p/Inputs/debug0.x86-64 %p/Inputs/debug1.x86-64 -o %t
-RUN: FileCheck %s -check-prefix YAML < %t
-
-RUN: lld -flavor gnu -target x86_64 -e main %p/Inputs/debug0.x86-64 \
-RUN: %p/Inputs/debug1.x86-64 -o %t1
-RUN: llvm-readobj -sections %t1 | FileCheck %s -check-prefix ELF
-# Verify that non SHF_ALLOC sections are relocated correctly.
-RUN: llvm-objdump -s %t1 | FileCheck %s -check-prefix RELOC
-
-YAML: type: no-alloc
-
-ELF: Section {
-ELF: Name: .debug_info
-ELF: Type: SHT_PROGBITS (0x1)
-ELF: Flags [ (0x0)
-ELF: ]
-ELF: Address: 0x0
-ELF: }
-ELF: Section {
-ELF: Name: .debug_abbrev
-ELF: Type: SHT_PROGBITS (0x1)
-ELF: Flags [ (0x0)
-ELF: ]
-ELF: Address: 0x0
-ELF: }
-ELF: Section {
-ELF: Name: .debug_aranges
-ELF: Type: SHT_PROGBITS (0x1)
-ELF: Flags [ (0x0)
-ELF: ]
-ELF: Address: 0x0
-ELF: }
-ELF: Section {
-ELF: Name: .debug_line
-ELF: Type: SHT_PROGBITS (0x1)
-ELF: Flags [ (0x0)
-ELF: ]
-ELF: Address: 0x0
-ELF: }
-ELF: Section {
-ELF: Name: .debug_str
-ELF: Type: SHT_PROGBITS (0x1)
-ELF: Flags [ (0x0)
-ELF: ]
-ELF: Address: 0x0
-ELF: }
-
-RELOC: Contents of section .debug_info:
-RELOC: 0000 4e000000 04000000 00000801 3a000000 N...........:...
-# ^^ Relocation: ._debug_str + 0x3a
-RELOC: 0010 01780000 00000000 00dc0140 00000000 .x.........@....
-# ^^ Relocation: .debug_str + 0x78
-RELOC: 0020 00100000 00000000 00000000 00028100 ................
-# ^^ Relocation: .debug_str + 0x81
diff --git a/test/elf/X86_64/defsym.test b/test/elf/X86_64/defsym.test
deleted file mode 100644
index 5d2256a09ac8..000000000000
--- a/test/elf/X86_64/defsym.test
+++ /dev/null
@@ -1,22 +0,0 @@
-RUN: lld -flavor gnu -target x86_64 --defsym=main=fn --noinhibit-exec \
-RUN: %p/Inputs/fn.o -o %t
-RUN: llvm-readobj -symbols %t | FileCheck %s
-
-CHECK: Symbol {
-CHECK: Name: main (1)
-CHECK: Value: 0x4001E0
-CHECK: Size: 0
-CHECK: Binding: Global (0x1)
-CHECK: Type: Function (0x2)
-CHECK: Other: 0
-CHECK: Section: .text (0x5)
-CHECK: }
-CHECK: Symbol {
-CHECK: Name: fn (6)
-CHECK: Value: 0x4001E0
-CHECK: Size: 6
-CHECK: Binding: Global (0x1)
-CHECK: Type: Function (0x2)
-CHECK: Other: 0
-CHECK: Section: .text (0x5)
-CHECK: }
diff --git a/test/elf/X86_64/demangle.test b/test/elf/X86_64/demangle.test
deleted file mode 100644
index 1977fd7f1e3a..000000000000
--- a/test/elf/X86_64/demangle.test
+++ /dev/null
@@ -1,12 +0,0 @@
-# XFAIL: win32
-#
-# Check that the linker is able to demangle strings properly.
-# Once there is a way to add undefined symbols using yaml2obj, the test will be
-# changed.
-
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec 2>&1 | FileCheck -check-prefix=DEMANGLE %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec --no-demangle 2>&1 | FileCheck -check-prefix=NODEMANGLE %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec --demangle 2>&1 | FileCheck -check-prefix=DEMANGLE %s
-
-#DEMANGLE: undefcpp.o: foo(char const*)
-#NODEMANGLE: undefcpp.o: _Z3fooPKc
diff --git a/test/elf/X86_64/dontignorezerosize-sections.test b/test/elf/X86_64/dontignorezerosize-sections.test
deleted file mode 100644
index 101e6cb55b24..000000000000
--- a/test/elf/X86_64/dontignorezerosize-sections.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# This tests that lld is not ignoring zero sized sections
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \
-RUN: --noinhibit-exec --output-filetype=yaml -o %t
-RUN: FileCheck %s < %t
-
-CHECK: references:
-CHECK: - kind: R_X86_64_16
-CHECK: offset: 0
-CHECK: target: L000
diff --git a/test/elf/X86_64/dynamicvars.test b/test/elf/X86_64/dynamicvars.test
deleted file mode 100644
index f5db73063650..000000000000
--- a/test/elf/X86_64/dynamicvars.test
+++ /dev/null
@@ -1,124 +0,0 @@
-# Tests that the dynamic variables created by the linker are set to the right
-# values.
-
-#RUN: yaml2obj --format elf -docnum 1 %s -o %t.o
-#RUN: lld -flavor gnu -target x86_64 -e main %t.o -o %t1 --noinhibit-exec
-#RUN: llvm-readobj -sections -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-
-#CHECKSYMS: Name: .dynamic
-#CHECKSYMS: Type: SHT_DYNAMIC
-#CHECKSYMS: Address: [[TARGETA:[0xa-fA-f0-9]+]]
-#CHECKSYMS: Name: .got.plt
-#CHECKSYMS: Type: SHT_PROGBITS
-#CHECKSYMS: Address: [[TARGETB:[0xa-fA-f0-9]+]]
-#CHECKSYMS: Name: _DYNAMIC
-#CHECKSYMS: Value: [[TARGETA]]
-#CHECKSYMS: Section: .dynamic
-#CHECKSYMS: Name: _GLOBAL_OFFSET_TABLE_
-#CHECKSYMS: Value: [[TARGETB]]
-#CHECKSYMS: Section: .got.plt
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E54883EC10488B0500000000C745FC00000000C7000A000000E80000000031C98945F889C84883C4105DC36690554889E531C05DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x000000000000000B
- Symbol: a
- Type: R_X86_64_GOTPCREL
- Addend: -4
- - Offset: 0x000000000000001D
- Symbol: foo
- Type: R_X86_64_PLT32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E362E302000
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002E00000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 48
-Symbols:
- Local:
- - Name: 1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: a
- Type: STT_OBJECT
- Value: 0x0000000000000004
- Size: 0x0000000000000004
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000030
- Size: 0x0000000000000008
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000002E
- - Name: _GLOBAL_OFFSET_TABLE_
-...
diff --git a/test/elf/X86_64/dynlib-nointerp-section.test b/test/elf/X86_64/dynlib-nointerp-section.test
deleted file mode 100644
index dca3d925b38b..000000000000
--- a/test/elf/X86_64/dynlib-nointerp-section.test
+++ /dev/null
@@ -1,4 +0,0 @@
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/no-interp-section.o -o %t -shared
-RUN: llvm-objdump -section-headers %t | FileCheck %s
-
-CHECK-NOT: .interp
diff --git a/test/elf/X86_64/dynlib-search.test b/test/elf/X86_64/dynlib-search.test
deleted file mode 100644
index 017208ac11ad..000000000000
--- a/test/elf/X86_64/dynlib-search.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# This tests the functionality for finding the shared library libfn.so for ELF
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/main.o -L%p/Inputs/ -lfn -o %t \
-RUN: --noinhibit-exec -t 2> %t1
-RUN: FileCheck %s < %t1
-
-CHECK: {{[\/0-9A-Za-z_]+}}libfn.so
diff --git a/test/elf/X86_64/dynsym-weak.test b/test/elf/X86_64/dynsym-weak.test
deleted file mode 100644
index 4f05656a41f2..000000000000
--- a/test/elf/X86_64/dynsym-weak.test
+++ /dev/null
@@ -1,118 +0,0 @@
-# Check that a symbol declared as a week in a shared library gets a dynamic
-# symbol table record in an executable file if this executabe file declares the
-# symbol as strong.
-
-# RUN: yaml2obj -format=elf -docnum 1 %s > %t.foo.o
-# RUN: lld -flavor gnu -target x86_64 -shared -o %t.so %t.foo.o
-# RUN: yaml2obj -format=elf -docnum 2 %s > %t.main.o
-#
-# Link executable file with strong symbol. Weak symbol is in the shared lib.
-# RUN: lld -flavor gnu -target x86_64 -e main -o %t1.exe %t.main.o %t.so
-# RUN: llvm-readobj -dyn-symbols %t1.exe | FileCheck -check-prefix=EXE %s
-#
-# Link executable file. Strong and weak symbol come from different object files.
-# RUN: lld -flavor gnu -target x86_64 -e main -o %t2.exe %t.main.o %t.foo.o
-# RUN: llvm-readobj -dyn-symbols %t2.exe | FileCheck -check-prefix=OBJ %s
-#
-# Link shared library. Weak symbol is in the another shared lib.
-# RUN: lld -flavor gnu -target x86_64 -shared -o %t.res.so %t.main.o %t.so
-# RUN: llvm-readobj -dyn-symbols %t.res.so | FileCheck -check-prefix=SO %s
-
-# EXE: Symbol {
-# EXE: Name: flag@ ({{[0-9]+}})
-# EXE-NEXT: Value: 0x{{[0-9A-F]+}}
-# EXE-NEXT: Size: 4
-# EXE-NEXT: Binding: Global (0x1)
-# EXE-NEXT: Type: Object (0x1)
-# EXE-NEXT: Other: 0
-# EXE-NEXT: Section: .data (0x{{[0-9A-F]+}})
-# EXE-NEXT: }
-
-# OBJ-NOT: Name: flag@ ({{[0-9]+}})
-
-# SO: Symbol {
-# SO: Name: flag@ ({{[0-9]+}})
-# SO-NEXT: Value: 0x{{[0-9A-F]+}}
-# SO-NEXT: Size: 4
-# SO-NEXT: Binding: Global (0x1)
-# SO-NEXT: Type: Object (0x1)
-# SO-NEXT: Other: 0
-# SO-NEXT: Section: .data (0x{{[0-9A-F]+}})
-# SO-NEXT: }
-
-# foo.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x08
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: flag
- Type: R_X86_64_GOTPCREL
- Addend: -4
-
-Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- Weak:
- - Name: flag
-
-# main.o
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x08
- Info: .text
- Relocations:
- - Offset: 0x00
- Symbol: foo
- Type: R_X86_64_PLT32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x04
- Size: 0x04
-
-Symbols:
- Global:
- - Name: flag
- Type: STT_OBJECT
- Section: .data
- Size: 0x04
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: foo
-...
diff --git a/test/elf/X86_64/extern-tls.test b/test/elf/X86_64/extern-tls.test
deleted file mode 100644
index c8e7580e5f3c..000000000000
--- a/test/elf/X86_64/extern-tls.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# This tests verifies that TLS variables have correct offsets
-# when variables the TLS variables are not defined in the program
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/externtls.x86-64 -static \
-RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s -check-prefix=CHECKGOT
-
- - name: __got_tls_extern_tls
-CHECKGOT: type: got
-CHECKGOT: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECKGOT: alignment: 2^3
-CHECKGOT: section-choice: custom-required
-CHECKGOT: section-name: .got
-CHECKGOT: permissions: rw-
-CHECKGOT: references:
-CHECKGOT: - kind: R_X86_64_TPOFF64
-CHECKGOT: offset: 0
-CHECKGOT: target: extern_tls
diff --git a/test/elf/X86_64/general-dynamic-tls.test b/test/elf/X86_64/general-dynamic-tls.test
deleted file mode 100644
index c1a6f6e5d120..000000000000
--- a/test/elf/X86_64/general-dynamic-tls.test
+++ /dev/null
@@ -1,129 +0,0 @@
-# This test exercises a simple general dynamic TLS access model in X86_64.
-#
-# It is composed of two parts: a program and a shared library. The shared
-# library uses TLS, but the program does not.
-#
-# The shared library should import __tls_get_addr, since it uses the general
-# dynamic TLS access mode (see www.akkadia.org/drepper/tls.pdf). Notice that
-# once we support TLS strength reduction, this test should be updated, since
-# this can be converted into a local dynamic TLS model.
-
-# Prepare inputs
-#RUN: yaml2obj -format=elf %p/Inputs/generaltls-so.o.yaml -o=%t.o.so
-#RUN: lld -flavor gnu -target x86_64 -shared %t.o.so -o %T/libgeneraltls.so
-#RUN: yaml2obj -format=elf %s -o=%t.o
-
-# Link - (we supply --defsym=__tls_get_addr to avoid the need to link with
-# system libraries)
-#RUN: lld -flavor gnu -target x86_64 -e main %t.o -L%T -lgeneraltls -o %t1 \
-#RUN: --defsym=__tls_get_addr=0
-
-# Check
-#RUN: llvm-readobj -dyn-symbols %t1 | FileCheck -check-prefix CHECKPROG %s
-#RUN: llvm-readobj -relocations -dyn-symbols %T/libgeneraltls.so | FileCheck \
-#RUN: -check-prefix CHECKDSO %s
-
-# Test case generated with the following code:
-#
-# DSO: (file %p/Inputs/generaltls-so.o.yaml)
-#
-# __thread int mynumber=33;
-#
-# int getnumber() {
-# return mynumber;
-# }
-#
-# Program: (this file). Note: The printf() relocation was removed to simplify
-# this test and allow us to test this without libc.
-#
-# #include <stdio.h>
-# int getnumber();
-#
-# int main() {
-# printf("getnumber() = %d\n", getnumber());
-# return 0;
-# }
-#
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E54883EC10C745FC00000000B000E80000000048BF000000000000000089C6B000E80000000031F68945F889F04883C4105DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000012
- Symbol: getnumber
- Type: R_X86_64_PC32
- Addend: -4
- - Offset: 0x0000000000000018
- Symbol: .rodata.str1.1
- Type: R_X86_64_64
- Addend: 0
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .rodata.str1.1
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 6765746E756D6265722829203D2025640A00
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .rodata.str1.1
- Type: STT_SECTION
- Section: .rodata.str1.1
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000036
- - Name: getnumber
-
-# Program should import the function defined in the shared library
-#CHECKPROG: getnumber@
-# Program should not import __tls_get_addr, since it does not directly use TLS
-#CHECKPROG-NOT: __tls_get_addr@
-
-# Check for the presence of X86_64 TLS relocations in the shared library
-#CHECKDSO: R_X86_64_DTPMOD64
-#CHECKDSO: R_X86_64_DTPOFF64
-#CHECKDSO: R_X86_64_JUMP_SLOT
-
-# The shared library should import __tls_get_addr, since it uses the general
-# dynamic TLS access mode.
-#CHECKDSO: Name: __tls_get_addr@
-#CHECKDSO-NEXT: Value: 0x0
-#CHECKDSO-NEXT: Size: 0
-#CHECKDSO-NEXT: Binding: Global
-#CHECKDSO-NEXT: Type: None
-#CHECKDSO-NEXT: Other: 0
-#CHECKDSO-NEXT: Section: Undefined
-
diff --git a/test/elf/X86_64/imagebase.test b/test/elf/X86_64/imagebase.test
deleted file mode 100644
index 67c3b6e1ff49..000000000000
--- a/test/elf/X86_64/imagebase.test
+++ /dev/null
@@ -1,94 +0,0 @@
-# Checks that segments start at the image address specified.
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec --image-base 0x600000
-# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
-#
-#CHECK: VirtualAddress: 0x600000
-#CHECK: PhysicalAddress: 0x600000
-#CHECK: VirtualAddress: 0x600178
-#CHECK: PhysicalAddress: 0x600178
-
-# object
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000020
- Size: 0x0000000000000008
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000012
- - Name: myval
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- - Name: val
- Type: STT_OBJECT
- Section: .rodata
- Size: 0x0000000000000004
-...
diff --git a/test/elf/X86_64/initfini-order.test b/test/elf/X86_64/initfini-order.test
deleted file mode 100644
index d3981eb0914e..000000000000
--- a/test/elf/X86_64/initfini-order.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# This tests the functionality that lld is able to emit
-# init_array/fini_array sections in the right order.
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/initfini.o \
-RUN: --noinhibit-exec -o %t
-RUN: llvm-objdump -t -section-headers %t | FileCheck %s
-
-CHECK: {{[0-9]+}} .eh_frame {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
-CHECK: {{[0-9]+}} .init_array {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
-CHECK: {{[0-9]+}} .fini_array {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
diff --git a/test/elf/X86_64/initfini.test b/test/elf/X86_64/initfini.test
deleted file mode 100644
index d882352a1c38..000000000000
--- a/test/elf/X86_64/initfini.test
+++ /dev/null
@@ -1,23 +0,0 @@
-# This tests the functionality that lld is able to read
-# init_array/fini_array sections in the input ELF. This
-# corresponds to the the .init_array/.fini_array sections
-# in the output ELF.
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/initfini.o \
-RUN: --noinhibit-exec --output-filetype=yaml -o %t
-RUN: FileCheck %s < %t
-
-CHECK: - type: data
-CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECK: section-name: .init_array
-CHECK: references:
-CHECK: - kind: R_X86_64_64
-CHECK: offset: 0
-CHECK: target: constructor
-CHECK: - type: data
-CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECK: section-name: .fini_array
-CHECK: references:
-CHECK: - kind: R_X86_64_64
-CHECK: offset: 0
-CHECK: target: destructor
diff --git a/test/elf/X86_64/largebss.test b/test/elf/X86_64/largebss.test
deleted file mode 100644
index d2dde4954139..000000000000
--- a/test/elf/X86_64/largebss.test
+++ /dev/null
@@ -1,20 +0,0 @@
-# This tests the functionality of handling BSS symbols
-# BSS symbols don't occupy file content and are associated with typeZeroFill
-# Any typeZeroFill content wouldn't have space reserved in the file to store
-# its content
-
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/largebss.o --output-filetype=yaml --noinhibit-exec | FileCheck %s
-
-CHECK: - name: largecommon
-CHECK: scope: global
-CHECK: type: zero-fill
-CHECK: size: 4000
-CHECK: merge: as-tentative
-CHECK: - name: largebss
-CHECK: scope: global
-CHECK: type: zero-fill
-CHECK: size: 4000
-CHECK: - name: largetbss
-CHECK: scope: global
-CHECK: type: thread-zero-fill
-CHECK: size: 4000
diff --git a/test/elf/X86_64/layoutpass-order.test b/test/elf/X86_64/layoutpass-order.test
deleted file mode 100644
index e4ebef1d52db..000000000000
--- a/test/elf/X86_64/layoutpass-order.test
+++ /dev/null
@@ -1,14 +0,0 @@
-# This test checks that we follow the command line order of layouting
-# symbols in the output file
-
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/layoutpass/1.o \
-RUN: %p/Inputs/layoutpass/lib2.a %p/Inputs/layoutpass/3.o -o %t \
-RUN: --noinhibit-exec -static
-
-RUN: llvm-nm -n %t | FileCheck -check-prefix=SYMBOLSORDER %s
-
-SYMBOLSORDER: {{[A-Fa-f0-9]+}} T main
-SYMBOLSORDER: {{[A-Fa-f0-9]+}} T b
-SYMBOLSORDER: {{[A-Fa-f0-9]+}} T a
-SYMBOLSORDER: {{[A-Fa-f0-9]+}} T c
-SYMBOLSORDER: {{[A-Fa-f0-9]+}} T d
diff --git a/test/elf/X86_64/maxpagesize.test b/test/elf/X86_64/maxpagesize.test
deleted file mode 100644
index 649d09fcada0..000000000000
--- a/test/elf/X86_64/maxpagesize.test
+++ /dev/null
@@ -1,113 +0,0 @@
-# Checks that segments are aligned as per ELF spec when the user specifies
-# max-page-size option, and the segment alignment is set to the page size
-# specified by the user.
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
-# RUN: not lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0
-# RUN: not lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0xFF
-# RUN: not lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x1010
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t1.exe -static \
-# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x100000
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x10000
-# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
-# RUN: llvm-readobj -program-headers %t1.exe | FileCheck %s -check-prefix=CHECKLARGE
-#
-#CHECK: VirtualAddress: 0x400000
-#CHECK: PhysicalAddress: 0x400000
-#CHECK: Alignment: 65536
-#CHECK: VirtualAddress: 0x400178
-#CHECK: PhysicalAddress: 0x400178
-#CHECK: Alignment: 65536
-#CHECKLARGE: VirtualAddress: 0x400000
-#CHECKLARGE: PhysicalAddress: 0x400000
-#CHECKLARGE: Alignment: 1048576
-#CHECKLARGE: VirtualAddress: 0x400178
-#CHECKLARGE: PhysicalAddress: 0x400178
-#CHECKLARGE: Alignment: 1048576
-
-# object
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000020
- Size: 0x0000000000000008
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000012
- - Name: myval
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- - Name: val
- Type: STT_OBJECT
- Section: .rodata
- Size: 0x0000000000000004
-...
diff --git a/test/elf/X86_64/mergesimilarstrings.test b/test/elf/X86_64/mergesimilarstrings.test
deleted file mode 100644
index 3836f0b50758..000000000000
--- a/test/elf/X86_64/mergesimilarstrings.test
+++ /dev/null
@@ -1,47 +0,0 @@
-# Check that relocations to section that contains strings is properly handled
-# when merging strings is enabled.
-#
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target x86_64 %t.o --noinhibit-exec -o %t1.out
-# RUN: llvm-readobj -sections %t1.out | FileCheck %s
-# RUN: lld -flavor gnu -target x86_64 %t.o --noinhibit-exec -o %t2.out --output-filetype=yaml
-# RUN: FileCheck %s -check-prefix=CHECKRELOCS < %t2.out
-
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Content: 54889e5488d3d00000000e80000000088d3d00000000e800000000b8000000005dc3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x04
- Info: .text
- Relocations:
- - Offset: 0x07
- Symbol: .rodata
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x01
- Content: 48656c6c6f20576f726c6400576f726c6400
-Symbols:
- Global:
- - Name: .rodata
- Section: .rodata
-
-#CHECK: Name: .rodata
-#CHECK: Size: 18
-#CHECKRELOCS: references:
-#CHECKRELOCS: - kind: R_X86_64_PC32
-#CHECKRELOCS: offset: 7
-#CHECKRELOCS: target: .rodata
-#CHECKRELOCS: addend: -4
diff --git a/test/elf/X86_64/multi-weak-layout.test b/test/elf/X86_64/multi-weak-layout.test
deleted file mode 100644
index 4bbf1dfc7e90..000000000000
--- a/test/elf/X86_64/multi-weak-layout.test
+++ /dev/null
@@ -1,52 +0,0 @@
-# Test that we are able to layout multiple weak symbols
-# properly
-
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/multiweaksyms.o \
-RUN: --noinhibit-exec -static --output-filetype=yaml -o %t
-RUN: FileCheck %s -check-prefix=WEAKSYMS < %t
-
-WEAKSYMS: - type: data
-WEAKSYMS: alignment: 2^3
-WEAKSYMS: references:
-WEAKSYMS: - kind: layout-after
-WEAKSYMS: offset: 0
-WEAKSYMS: target: [[L001:[-a-zA-Z0-9_]+]]
-WEAKSYMS: - name: myfn2
-WEAKSYMS: scope: global
-WEAKSYMS: type: data
-WEAKSYMS: merge: as-weak
-WEAKSYMS: alignment: 2^3
-WEAKSYMS: references:
-WEAKSYMS: - kind: layout-after
-WEAKSYMS: offset: 0
-WEAKSYMS: target: [[L001]]
-WEAKSYMS: - ref-name: [[L001]]
-WEAKSYMS: scope: global
-WEAKSYMS: type: data
-WEAKSYMS: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-WEAKSYMS: alignment: 2^3
-WEAKSYMS: references:
-WEAKSYMS: - kind: R_X86_64_64
-WEAKSYMS: offset: 0
-WEAKSYMS: target: test
-WEAKSYMS: - kind: layout-after
-WEAKSYMS: offset: 0
-WEAKSYMS: target: [[L003:[-a-zA-Z0-9_]+]]
-WEAKSYMS: - name: myfn1
-WEAKSYMS: scope: global
-WEAKSYMS: type: data
-WEAKSYMS: merge: as-weak
-WEAKSYMS: alignment: 2^3
-WEAKSYMS: references:
-WEAKSYMS: - kind: layout-after
-WEAKSYMS: offset: 0
-WEAKSYMS: target: [[L003]]
-WEAKSYMS: - ref-name: [[L003]]
-WEAKSYMS: scope: global
-WEAKSYMS: type: data
-WEAKSYMS: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-WEAKSYMS: alignment: 2^3
-WEAKSYMS: references:
-WEAKSYMS: - kind: R_X86_64_64
-WEAKSYMS: offset: 0
-WEAKSYMS: target: test
diff --git a/test/elf/X86_64/multi-weak-override.test b/test/elf/X86_64/multi-weak-override.test
deleted file mode 100644
index f2d0e0c2f77b..000000000000
--- a/test/elf/X86_64/multi-weak-override.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# Test for weak symbol getting overridden
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o \
-RUN: %p/Inputs/multi-ovrd.o -o %t -e main --noinhibit-exec
-RUN: llvm-nm -n %t | FileCheck -check-prefix=WEAKORDER %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o \
-RUN: %p/Inputs/multi-ovrd.o --output-filetype=yaml -o %t2 --noinhibit-exec
-RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-
-WEAKORDER: {{[0-9a-f]+}} T f
-WEAKORDER: {{[0-9a-f]+}} T g
-
-WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
-WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
-WEAKATOMSORDER: - name: f
-WEAKATOMSORDER: - name: g
-
diff --git a/test/elf/X86_64/multi-weak-syms-order.test b/test/elf/X86_64/multi-weak-syms-order.test
deleted file mode 100644
index 2b414593fed4..000000000000
--- a/test/elf/X86_64/multi-weak-syms-order.test
+++ /dev/null
@@ -1,13 +0,0 @@
-# Test for weak symbol getting overridden
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o -o %t --noinhibit-exec
-RUN: llvm-nm -n %t | FileCheck -check-prefix=WEAKORDER %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o -o %t2 --output-filetype=yaml --noinhibit-exec
-RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-
-WEAKORDER: {{[0-9a-f]+}} T fn
-WEAKORDER: {{[0-9a-f]+}} T f
-WEAKORDER: {{[0-9a-f]+}} T g
-WEAKORDER: {{[0-9a-f]+}} T main
-
-WEAKATOMSORDER: - name: f
-WEAKATOMSORDER: - name: g
diff --git a/test/elf/X86_64/nmagic.test b/test/elf/X86_64/nmagic.test
deleted file mode 100644
index b313c1f051ba..000000000000
--- a/test/elf/X86_64/nmagic.test
+++ /dev/null
@@ -1,91 +0,0 @@
-# This tests verifies functionality of NMAGIC that we create only two segments,
-# PT_LOAD, PT_TLS
-# The data segment should be aligned to a page boundary
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/nmagic.o \
-RUN: --noinhibit-exec -o %t --nmagic -static
-RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NMAGICSECTIONS %s
-RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NMAGICPROGRAMHEADERS %s
-
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Index: 0
-NMAGICSECTIONS: Name: (0)
-NMAGICSECTIONS: Type: SHT_NULL (0x0)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .text
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .eh_frame
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .tdata
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .tbss
-NMAGICSECTIONS: Type: SHT_NOBITS (0x8)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .got.plt
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .data
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .bss
-NMAGICSECTIONS: Type: SHT_NOBITS (0x8)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .comment
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .note.GNU-stack
-NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .shstrtab
-NMAGICSECTIONS: Type: SHT_STRTAB (0x3)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .symtab
-NMAGICSECTIONS: Type: SHT_SYMTAB (0x2)
-NMAGICSECTIONS: }
-NMAGICSECTIONS: Section {
-NMAGICSECTIONS: Name: .strtab
-NMAGICSECTIONS: Type: SHT_STRTAB (0x3)
-NMAGICSECTIONS: }
-
-NMAGICPROGRAMHEADERS: ProgramHeaders [
-NMAGICPROGRAMHEADERS: ProgramHeader {
-NMAGICPROGRAMHEADERS: Type: PT_LOAD (0x1)
-NMAGICPROGRAMHEADERS: Offset: 0x0
-NMAGICPROGRAMHEADERS: VirtualAddress: 0x400000
-NMAGICPROGRAMHEADERS: PhysicalAddress: 0x400000
-NMAGICPROGRAMHEADERS: FileSize: 4108
-NMAGICPROGRAMHEADERS: MemSize: 4108
-NMAGICPROGRAMHEADERS: Flags [ (0x7)
-NMAGICPROGRAMHEADERS: PF_R (0x4)
-NMAGICPROGRAMHEADERS: PF_W (0x2)
-NMAGICPROGRAMHEADERS: PF_X (0x1)
-NMAGICPROGRAMHEADERS: ]
-NMAGICPROGRAMHEADERS: Alignment: 8
-NMAGICPROGRAMHEADERS: }
-NMAGICPROGRAMHEADERS: ProgramHeader {
-NMAGICPROGRAMHEADERS: Type: PT_TLS (0x7)
-NMAGICPROGRAMHEADERS: Offset: 0x1000
-NMAGICPROGRAMHEADERS: VirtualAddress: 0x401000
-NMAGICPROGRAMHEADERS: PhysicalAddress: 0x401000
-NMAGICPROGRAMHEADERS: FileSize: 4
-NMAGICPROGRAMHEADERS: MemSize: 12
-NMAGICPROGRAMHEADERS: Flags [ (0x6)
-NMAGICPROGRAMHEADERS: PF_R (0x4)
-NMAGICPROGRAMHEADERS: PF_W (0x2)
-NMAGICPROGRAMHEADERS: ]
-NMAGICPROGRAMHEADERS: Alignment: 4
-NMAGICPROGRAMHEADERS: }
-NMAGICPROGRAMHEADERS: ]
diff --git a/test/elf/X86_64/noalignsegments.test b/test/elf/X86_64/noalignsegments.test
deleted file mode 100644
index 8432bda51f00..000000000000
--- a/test/elf/X86_64/noalignsegments.test
+++ /dev/null
@@ -1,95 +0,0 @@
-# Checks that segments are aligned as per ELF spec than aligning each
-# segment fileoffset / virtual address to a page.
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t.exe -static \
-# RUN: --no-align-segments --noinhibit-exec
-# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
-#
-#CHECK: VirtualAddress: 0x400000
-#CHECK: PhysicalAddress: 0x400000
-#CHECK: VirtualAddress: 0x400178
-#CHECK: PhysicalAddress: 0x400178
-
-# object
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .rodata
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '64000000'
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000020
- Size: 0x0000000000000008
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000012
- - Name: myval
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- - Name: val
- Type: STT_OBJECT
- Section: .rodata
- Size: 0x0000000000000004
-...
diff --git a/test/elf/X86_64/note-sections-ro_plus_rw.test b/test/elf/X86_64/note-sections-ro_plus_rw.test
deleted file mode 100644
index ddeeaa41a758..000000000000
--- a/test/elf/X86_64/note-sections-ro_plus_rw.test
+++ /dev/null
@@ -1,42 +0,0 @@
-# This tests the functionality that lld is able to recreate the note sections
-# if they appear in the input, it looks like we need to differentiate RO note
-# sections from RW note sections, and each creating a segment of its own
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/note_ro_rw.o \
-RUN: --noinhibit-exec -o %t -static
-RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NOTESECTIONS %s
-RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NOTESEGMENT %s
-
-NOTESECTIONS: Section {
-NOTESECTIONS: Name: .note.ro (1)
-NOTESECTIONS: Type: SHT_NOTE (0x7)
-NOTESECTIONS: Flags [ (0x2)
-NOTESECTIONS: SHF_ALLOC (0x2)
-NOTESECTIONS: ]
-NOTESECTIONS: AddressAlignment: 4
-NOTESECTIONS: }
-NOTESECTIONS: Section {
-NOTESECTIONS: Name: .note.rw (31)
-NOTESECTIONS: Type: SHT_NOTE (0x7)
-NOTESECTIONS: Flags [ (0x3)
-NOTESECTIONS: SHF_ALLOC (0x2)
-NOTESECTIONS: SHF_WRITE (0x1)
-NOTESECTIONS: ]
-NOTESECTIONS: Size: 28
-NOTESECTIONS: AddressAlignment: 4
-NOTESECTIONS: }
-NOTESEGMENT: ProgramHeader {
-NOTESEGMENT: Type: PT_NOTE (0x4)
-NOTESEGMENT: Flags [ (0x4)
-NOTESEGMENT: PF_R (0x4)
-NOTESEGMENT: ]
-NOTESEGMENT: Alignment: 4
-NOTESEGMENT: }
-NOTESEGMENT: ProgramHeader {
-NOTESEGMENT: Type: PT_NOTE (0x4)
-NOTESEGMENT: Flags [ (0x6)
-NOTESEGMENT: PF_R (0x4)
-NOTESEGMENT: PF_W (0x2)
-NOTESEGMENT: ]
-NOTESEGMENT: Alignment: 4
-NOTESEGMENT: }
diff --git a/test/elf/X86_64/note-sections.test b/test/elf/X86_64/note-sections.test
deleted file mode 100644
index a49f95cf4a27..000000000000
--- a/test/elf/X86_64/note-sections.test
+++ /dev/null
@@ -1,23 +0,0 @@
-# This tests the functionality that lld is able to recreate the note sections
-# if they appear in the input
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/note.o \
-RUN: --noinhibit-exec -o %t -static
-RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NOTESECTIONS %s
-RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NOTESEGMENT %s
-
-
-NOTESECTIONS: Section {
-NOTESECTIONS: Index: 1
-NOTESECTIONS: Name: .note.ident (1)
-NOTESECTIONS: Type: SHT_NOTE (0x7)
-NOTESECTIONS: Size: 28
-NOTESECTIONS: AddressAlignment: 4
-NOTESECTIONS: }
-
-NOTESEGMENT: ProgramHeader {
-NOTESEGMENT: Type: PT_NOTE (0x4)
-NOTESEGMENT: FileSize: 28
-NOTESEGMENT: MemSize: 28
-NOTESEGMENT: Alignment: 4
-NOTESEGMENT: }
diff --git a/test/elf/X86_64/omagic.test b/test/elf/X86_64/omagic.test
deleted file mode 100644
index 437d2e2a9f98..000000000000
--- a/test/elf/X86_64/omagic.test
+++ /dev/null
@@ -1,237 +0,0 @@
-# This tests verifies functionality of omagic that we create only two segments,
-# PT_LOAD, PT_TLS
-# The data segment should not be aligned to a page boundary
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/nmagic.o \
-RUN: --noinhibit-exec -o %t --omagic -static
-RUN: llvm-readobj -sections %t | FileCheck -check-prefix=OMAGICSECTIONS %s
-RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=OMAGICPROGRAMHEADERS %s
-
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: (0)
-OMAGICSECTIONS: Type: SHT_NULL (0x0)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x0
-OMAGICSECTIONS: Size: 0
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 0
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .text
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x6)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_EXECINSTR (0x4)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x4000E8
-OMAGICSECTIONS: Offset: 0xE8
-OMAGICSECTIONS: Size: 11
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 4
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .eh_frame
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x2)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x4000F8
-OMAGICSECTIONS: Offset: 0xF8
-OMAGICSECTIONS: Size: 56
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 8
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .eh_frame_hdr
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x2)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x400130
-OMAGICSECTIONS: Offset: 0x130
-OMAGICSECTIONS: Size: 8
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 8
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .tdata
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x403)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_TLS (0x400)
-OMAGICSECTIONS: SHF_WRITE (0x1)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x400138
-OMAGICSECTIONS: Offset: 0x138
-OMAGICSECTIONS: Size: 4
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 4
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .tbss
-OMAGICSECTIONS: Type: SHT_NOBITS (0x8)
-OMAGICSECTIONS: Flags [ (0x403)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_TLS (0x400)
-OMAGICSECTIONS: SHF_WRITE (0x1)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x40013C
-OMAGICSECTIONS: Offset: 0x13C
-OMAGICSECTIONS: Size: 8
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 4
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .got.plt
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x3)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_WRITE (0x1)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x400140
-OMAGICSECTIONS: Offset: 0x140
-OMAGICSECTIONS: Size: 0
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 8
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .data
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x3)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_WRITE (0x1)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x400140
-OMAGICSECTIONS: Offset: 0x140
-OMAGICSECTIONS: Size: 4
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 4
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .bss
-OMAGICSECTIONS: Type: SHT_NOBITS (0x8)
-OMAGICSECTIONS: Flags [ (0x3)
-OMAGICSECTIONS: SHF_ALLOC (0x2)
-OMAGICSECTIONS: SHF_WRITE (0x1)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x400144
-OMAGICSECTIONS: Offset: 0x144
-OMAGICSECTIONS: Size: 0
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 4
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .comment
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x144
-OMAGICSECTIONS: Size: 43
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 1
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .note.GNU-stack
-OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x16F
-OMAGICSECTIONS: Size: 0
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 1
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .shstrtab
-OMAGICSECTIONS: Type: SHT_STRTAB (0x3)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x16F
-OMAGICSECTIONS: Size: 115
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 1
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .symtab
-OMAGICSECTIONS: Type: SHT_SYMTAB (0x2)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x1E8
-OMAGICSECTIONS: Size: 504
-OMAGICSECTIONS: Link: 13
-OMAGICSECTIONS: Info: 2
-OMAGICSECTIONS: AddressAlignment: 8
-OMAGICSECTIONS: EntrySize: 24
-OMAGICSECTIONS: }
-OMAGICSECTIONS: Section {
-OMAGICSECTIONS: Name: .strtab
-OMAGICSECTIONS: Type: SHT_STRTAB (0x3)
-OMAGICSECTIONS: Flags [ (0x0)
-OMAGICSECTIONS: ]
-OMAGICSECTIONS: Address: 0x0
-OMAGICSECTIONS: Offset: 0x3E0
-OMAGICSECTIONS: Size: 231
-OMAGICSECTIONS: Link: 0
-OMAGICSECTIONS: Info: 0
-OMAGICSECTIONS: AddressAlignment: 1
-OMAGICSECTIONS: EntrySize: 0
-OMAGICSECTIONS: }
-OMAGICSECTIONS: ]
-
-OMAGICPROGRAMHEADERS: ProgramHeaders [
-OMAGICPROGRAMHEADERS: ProgramHeader {
-OMAGICPROGRAMHEADERS: Type: PT_LOAD (0x1)
-OMAGICPROGRAMHEADERS: Offset: 0x0
-OMAGICPROGRAMHEADERS: VirtualAddress: 0x400000
-OMAGICPROGRAMHEADERS: PhysicalAddress: 0x400000
-OMAGICPROGRAMHEADERS: FileSize: 324
-OMAGICPROGRAMHEADERS: MemSize: 324
-OMAGICPROGRAMHEADERS: Flags [ (0x7)
-OMAGICPROGRAMHEADERS: PF_R (0x4)
-OMAGICPROGRAMHEADERS: PF_W (0x2)
-OMAGICPROGRAMHEADERS: PF_X (0x1)
-OMAGICPROGRAMHEADERS: ]
-OMAGICPROGRAMHEADERS: Alignment: 8
-OMAGICPROGRAMHEADERS: }
-OMAGICPROGRAMHEADERS: ProgramHeader {
-OMAGICPROGRAMHEADERS: Type: PT_TLS (0x7)
-OMAGICPROGRAMHEADERS: Offset: 0x138
-OMAGICPROGRAMHEADERS: VirtualAddress: 0x400138
-OMAGICPROGRAMHEADERS: PhysicalAddress: 0x400138
-OMAGICPROGRAMHEADERS: FileSize: 4
-OMAGICPROGRAMHEADERS: MemSize: 12
-OMAGICPROGRAMHEADERS: Flags [ (0x6)
-OMAGICPROGRAMHEADERS: PF_R (0x4)
-OMAGICPROGRAMHEADERS: PF_W (0x2)
-OMAGICPROGRAMHEADERS: ]
-OMAGICPROGRAMHEADERS: Alignment: 4
-OMAGICPROGRAMHEADERS: }
-OMAGICPROGRAMHEADERS: ]
diff --git a/test/elf/X86_64/outputsegments.test b/test/elf/X86_64/outputsegments.test
deleted file mode 100644
index ab6ba8deb47d..000000000000
--- a/test/elf/X86_64/outputsegments.test
+++ /dev/null
@@ -1,189 +0,0 @@
-# Tests that lld does not create separate segment if the input sections are part
-# of the same output section
-
-# Build executable
-# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t1.exe -static \
-# RUN: --no-align-segments --noinhibit-exec
-# RUN: lld -flavor gnu -target x86_64 %t.o -o %t2.exe -static \
-# RUN: --noinhibit-exec
-# RUN: llvm-readobj -program-headers %t1.exe | FileCheck %s -check-prefix=SEGMENTS
-# RUN: llvm-readobj -program-headers %t2.exe | FileCheck %s -check-prefix=SEGMENTS
-#
-#SEGMENTS: VirtualAddress: 0x400000
-#SEGMENTS: PhysicalAddress: 0x400000
-#SEGMENTS: FileSize: 288
-#SEGMENTS: MemSize: 288
-#SEGMENTS: VirtualAddress: 0x404000
-#SEGMENTS: PhysicalAddress: 0x404000
-#SEGMENTS: FileSize: 16608
-#SEGMENTS: MemSize: 16608
-#SEGMENTS: Alignment: 16384
-#
-# object
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .text.foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000002000
- Content: 554889E54883EC1048BF0000000000000000B000E800000000B9000000008945FC89C84883C4105DC3
- - Name: .rela.text.foo
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text.foo
- Relocations:
- - Offset: 0x000000000000000A
- Symbol: .rodata.str1.1
- Type: R_X86_64_64
- Addend: 0
- - Offset: 0x0000000000000015
- Symbol: printf
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .text.bar
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000004000
- Content: 554889E54883EC1048BF0000000000000000B000E800000000B9000000008945FC89C84883C4105DC3
- - Name: .rela.text.bar
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text.bar
- Relocations:
- - Offset: 0x000000000000000A
- Symbol: .rodata.str1.1
- Type: R_X86_64_64
- Addend: 7
- - Offset: 0x0000000000000015
- Symbol: printf
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .text.main
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E54883EC10C745FC00000000E8000000008945F8E8000000008B4DF801C189C84883C4105DC3
- - Name: .rela.text.main
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text.main
- Relocations:
- - Offset: 0x0000000000000010
- Symbol: foo
- Type: R_X86_64_PC32
- Addend: -4
- - Offset: 0x0000000000000018
- Symbol: bar
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .rodata.str1.1
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 48656C6C6F0A00576F726C640A00
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 005562756E747520636C616E672076657273696F6E20332E352E302D73766E3231373330342D317E6578703120286272616E636865732F72656C656173655F33352920286261736564206F6E204C4C564D20332E352E302900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002900000000410E108602430D060000001800000038000000000000002900000000410E108602430D060000001C00000054000000000000002900000000410E108602430D0600000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text.foo
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x000000000000003C
- Symbol: .text.bar
- Type: R_X86_64_PC32
- Addend: 0
- - Offset: 0x0000000000000058
- Symbol: .text.main
- Type: R_X86_64_PC32
- Addend: 0
-Symbols:
- Local:
- - Name: 1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .text.foo
- Type: STT_SECTION
- Section: .text.foo
- - Name: .text.bar
- Type: STT_SECTION
- Section: .text.bar
- - Name: .text.main
- Type: STT_SECTION
- Section: .text.main
- - Name: .rodata.str1.1
- Type: STT_SECTION
- Section: .rodata.str1.1
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: bar
- Type: STT_FUNC
- Section: .text.bar
- Size: 0x0000000000000029
- - Name: foo
- Type: STT_FUNC
- Section: .text.foo
- Size: 0x0000000000000029
- - Name: main
- Type: STT_FUNC
- Section: .text.main
- Size: 0x0000000000000029
- - Name: printf
-...
diff --git a/test/elf/X86_64/reloc_r_x86_64_16.test b/test/elf/X86_64/reloc_r_x86_64_16.test
deleted file mode 100644
index 7cca839eb623..000000000000
--- a/test/elf/X86_64/reloc_r_x86_64_16.test
+++ /dev/null
@@ -1,60 +0,0 @@
-# Tests that lld can handle relocations of type R_X86_64_16
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
-#RUN: lld -flavor gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
-#RUN: llvm-objdump -s %t2.out | FileCheck %s
-#CHECK: Contents of section .data:
-#CHECK: 401000 0210
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: '0000'
- - Name: .rela.data
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .data
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: foo
- Type: R_X86_64_16
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000008
- - Name: foo
- Type: STT_OBJECT
- Section: .data
- Value: 0x0000000000000002
- Size: 0x0000000000000002
-...
diff --git a/test/elf/X86_64/reloc_r_x86_64_pc16.test b/test/elf/X86_64/reloc_r_x86_64_pc16.test
deleted file mode 100644
index 6e43e5fade61..000000000000
--- a/test/elf/X86_64/reloc_r_x86_64_pc16.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Tests that lld can handle relocations of type R_X86_64_PC16
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
-#RUN: lld -flavor gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
-#RUN: llvm-objdump -s %t2.out | FileCheck %s
-#CHECK: Contents of section .data:
-#CHECK: 401000 0700
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: '0000'
- - Name: .rela.data
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .data
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: foo
- Type: R_X86_64_PC16
- Addend: 5
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000008
- - Name: foo
- Type: STT_OBJECT
- Section: .data
- Value: 0x0000000000000002
- Size: 0x0000000000000002
-...
diff --git a/test/elf/X86_64/reloc_r_x86_64_pc64.test b/test/elf/X86_64/reloc_r_x86_64_pc64.test
deleted file mode 100644
index 75744390be91..000000000000
--- a/test/elf/X86_64/reloc_r_x86_64_pc64.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# Tests that lld can handle relocations of type R_X86_64_PC64
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
-#RUN: lld -flavor gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
-#RUN: llvm-objdump -s %t2.out | FileCheck %s
-#CHECK: Contents of section .data:
-#CHECK: 401000 0a00
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: '0000'
- - Name: .rela.data
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .data
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: foo
- Type: R_X86_64_PC64
- Addend: 8
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000008
- - Name: foo
- Type: STT_OBJECT
- Section: .data
- Value: 0x0000000000000002
- Size: 0x0000000000000002
-...
diff --git a/test/elf/X86_64/rodata.test b/test/elf/X86_64/rodata.test
deleted file mode 100644
index 61af99f65cfc..000000000000
--- a/test/elf/X86_64/rodata.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# This tests that the ordinals for all merge atoms and defined atoms have been
-# set properly
-
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/rodata.o --noinhibit-exec \
-RUN: --merge-strings -static -o %t1
-RUN: llvm-nm -n %t1 | FileCheck %s
-
-CHECK: {{[0-9a-f]+}} R _nl_default_default_domain
-CHECK: {{[0-9a-f]+}} R _nl_default_default_dirname
diff --git a/test/elf/X86_64/sectionchoice.test b/test/elf/X86_64/sectionchoice.test
deleted file mode 100644
index 4034d8b1111a..000000000000
--- a/test/elf/X86_64/sectionchoice.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# This tests that we are able to properly set the sectionChoice for DefinedAtoms
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \
-RUN: --noinhibit-exec -o %t --output-filetype=yaml
-RUN: FileCheck %s < %t
-
-CHECK-NOT: section-choice: sectionCustomRequired
-
diff --git a/test/elf/X86_64/sectionmap.test b/test/elf/X86_64/sectionmap.test
deleted file mode 100644
index a38f23e32b95..000000000000
--- a/test/elf/X86_64/sectionmap.test
+++ /dev/null
@@ -1,22 +0,0 @@
-# This tests that we are able to merge the section .gcc_except_table,
-# .data.rel.local, .data.rel.ro, any other sections that belong to .data
-# into appropriate output sections
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/sectionmap.o \
-RUN: --noinhibit-exec -o %t
-RUN: llvm-readobj -sections %t | FileCheck %s -check-prefix=VERIFYSECTIONHEADERS
-
-VERIFYSECTIONHEADERS: Section {
-VERIFYSECTIONHEADERS: Name: .data
-VERIFYSECTIONHEADERS: }
-VERIFYSECTIONHEADERS: Section {
-VERIFYSECTIONHEADERS: Name: .gcc_except_table
-VERIFYSECTIONHEADERS: }
-VERIFYSECTIONHEADERS: Section {
-VERIFYSECTIONHEADERS: Name: .data.rel.local
-VERIFYSECTIONHEADERS: }
-VERIFYSECTIONHEADERS: Section {
-VERIFYSECTIONHEADERS: Name: .data.rel.ro
-VERIFYSECTIONHEADERS: }
-VERIFYSECTIONHEADERS: Section {
-VERIFYSECTIONHEADERS: Name: .bss
-VERIFYSECTIONHEADERS: }
diff --git a/test/elf/X86_64/startGroupEndGroup.test b/test/elf/X86_64/startGroupEndGroup.test
deleted file mode 100644
index ce1897683b34..000000000000
--- a/test/elf/X86_64/startGroupEndGroup.test
+++ /dev/null
@@ -1,48 +0,0 @@
-# This tests functionality of --start-group, --end-group
-
-# This link should fail with unresolve symbol
-RUN: not lld -flavor gnu -target x86_64 %p/Inputs/group/1.o \
-RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a -o x 2> %t.err
-
-# Test group
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o --start-group \
-RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a --end-group -o %t1
-
-# Mix object files in group
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o --start-group \
-RUN: %p/Inputs/group/fn.o %p/Inputs/group/fn2.o \
-RUN: %p/Inputs/group/fn1.o --end-group -o %t2
-
-# Mix Whole archive input, the group should not iterate the file libfn.a
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o --start-group \
-RUN: --whole-archive %p/Inputs/group/libfn.a --no-whole-archive \
-RUN: %p/Inputs/group/libfn1.a --end-group -o %t3
-
-# Defined symbols in a shared library.
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o --start-group \
-RUN: %p/Inputs/group/libfn2.so %p/Inputs/group/fn1.o %p/Inputs/group/fn.o \
-RUN: --end-group -o %t4
-
-# Test alias options too, as they are more widely used
-# Test group
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o '-(' \
-RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a '-)' -o %t1.alias
-
-# Mix object files in group
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o '-(' \
-RUN: %p/Inputs/group/fn.o %p/Inputs/group/fn2.o \
-RUN: %p/Inputs/group/fn1.o '-)' -o %t2.alias
-
-# Mix Whole archive input, the group should not iterate the file libfn.a
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o '-(' \
-RUN: --whole-archive %p/Inputs/group/libfn.a --no-whole-archive \
-RUN: %p/Inputs/group/libfn1.a '-)' -o %t3.alias
-
-RUN: llvm-nm %t1 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-RUN: llvm-nm %t2 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-RUN: llvm-nm %t3 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-RUN: llvm-nm %t1.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-RUN: llvm-nm %t2.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-RUN: llvm-nm %t3.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-
-RESOLVEDEXTERNAL: {{[0-9a-z]+}} T fn2
diff --git a/test/elf/X86_64/startGroupEndGroupWithDynlib.test b/test/elf/X86_64/startGroupEndGroupWithDynlib.test
deleted file mode 100644
index 3e40997db384..000000000000
--- a/test/elf/X86_64/startGroupEndGroupWithDynlib.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# This tests functionality of --start-group, --end-group with a dynamic library
-
-# Mix dynamic libraries/object files in group
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/group/1.o --start-group \
-RUN: %p/Inputs/group/libfn.so %p/Inputs/group/fn2.o \
-RUN: %p/Inputs/group/fn1.o --end-group -o %t1
-
-RUN: llvm-nm %t1 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
-
-RESOLVEDEXTERNAL: {{[0-9a-z]+}} T fn2
diff --git a/test/elf/X86_64/staticlib-search.test b/test/elf/X86_64/staticlib-search.test
deleted file mode 100644
index 9c512571932d..000000000000
--- a/test/elf/X86_64/staticlib-search.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# This tests the functionality for finding the static library libfn.a for ELF
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/main.o -L%p/Inputs/ -lfn -o %t \
-RUN: --noinhibit-exec -static -t 2> %t1
-RUN: FileCheck %s < %t1
-
-CHECK: {{[\/0-9A-Za-z_]+}}libfn.a
diff --git a/test/elf/X86_64/undef.test b/test/elf/X86_64/undef.test
deleted file mode 100644
index 8f0039a14693..000000000000
--- a/test/elf/X86_64/undef.test
+++ /dev/null
@@ -1,18 +0,0 @@
-# This tests the functionality that an undefined symbol thats defined in the
-# commmand line pulls in the required object file from the archive library
-# which is usually the usecase for it
-RUN: lld -flavor gnu -target x86_64 -u fn %p/Inputs/libfn.a -o %t --noinhibit-exec
-RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SYMFROMARCHIVE %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/libfn.a -o %t --noinhibit-exec
-RUN: llvm-readobj -symbols %t | FileCheck %s
-
-SYMFROMARCHIVE: Symbol {
-SYMFROMARCHIVE: Name: fn ({{[0-9]+}}
-SYMFROMARCHIVE: Size: 11
-SYMFROMARCHIVE: Binding: Global (0x1)
-SYMFROMARCHIVE: Type: Function (0x2)
-SYMFROMARCHIVE: Other: 0
-SYMFROMARCHIVE: Section: .text
-SYMFROMARCHIVE: }
-
-CHECK-NOT: Name: fn
diff --git a/test/elf/X86_64/underscore-end.test b/test/elf/X86_64/underscore-end.test
deleted file mode 100644
index 337aa197f812..000000000000
--- a/test/elf/X86_64/underscore-end.test
+++ /dev/null
@@ -1,81 +0,0 @@
-# This tests verifies that the value of _end symbol is point to the right value
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/nmagic.o \
-RUN: --noinhibit-exec -o %t --nmagic
-RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=NMAGICABSSYMBOLS %s
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/nmagic.o \
-RUN: --noinhibit-exec -o %t --omagic
-RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=OMAGICABSSYMBOLS %s
-
-NMAGICABSSYMBOLS: Symbol {
-NMAGICABSSYMBOLS: Name: __bss_start ({{[0-9]+}}
-NMAGICABSSYMBOLS: Value: 0x40100C
-NMAGICABSSYMBOLS: Size: 0
-NMAGICABSSYMBOLS: Binding: Global (0x1)
-NMAGICABSSYMBOLS: Type: Object (0x1)
-NMAGICABSSYMBOLS: Other: 0
-NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-NMAGICABSSYMBOLS: }
-NMAGICABSSYMBOLS: Symbol {
-NMAGICABSSYMBOLS: Name: __bss_end ({{[0-9]+}}
-NMAGICABSSYMBOLS: Value: 0x40100C
-NMAGICABSSYMBOLS: Size: 0
-NMAGICABSSYMBOLS: Binding: Global (0x1)
-NMAGICABSSYMBOLS: Type: Object (0x1)
-NMAGICABSSYMBOLS: Other: 0
-NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-NMAGICABSSYMBOLS: }
-NMAGICABSSYMBOLS: Symbol {
-NMAGICABSSYMBOLS: Name: _end ({{[0-9]+}}
-NMAGICABSSYMBOLS: Value: 0x40100C
-NMAGICABSSYMBOLS: Size: 0
-NMAGICABSSYMBOLS: Binding: Global (0x1)
-NMAGICABSSYMBOLS: Type: Object (0x1)
-NMAGICABSSYMBOLS: Other: 0
-NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-NMAGICABSSYMBOLS: }
-NMAGICABSSYMBOLS: Symbol {
-NMAGICABSSYMBOLS: Name: end ({{[0-9]+}}
-NMAGICABSSYMBOLS: Value: 0x40100C
-NMAGICABSSYMBOLS: Size: 0
-NMAGICABSSYMBOLS: Binding: Global (0x1)
-NMAGICABSSYMBOLS: Type: Object (0x1)
-NMAGICABSSYMBOLS: Other: 0
-NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-NMAGICABSSYMBOLS: }
-
-OMAGICABSSYMBOLS: Symbol {
-OMAGICABSSYMBOLS: Name: __bss_start ({{[0-9]+}})
-OMAGICABSSYMBOLS: Value: 0x400144
-OMAGICABSSYMBOLS: Size: 0
-OMAGICABSSYMBOLS: Binding: Global (0x1)
-OMAGICABSSYMBOLS: Type: Object (0x1)
-OMAGICABSSYMBOLS: Other: 0
-OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-OMAGICABSSYMBOLS: }
-OMAGICABSSYMBOLS: Symbol {
-OMAGICABSSYMBOLS: Name: __bss_end ({{[0-9]+}}
-OMAGICABSSYMBOLS: Value: 0x400144
-OMAGICABSSYMBOLS: Size: 0
-OMAGICABSSYMBOLS: Binding: Global (0x1)
-OMAGICABSSYMBOLS: Type: Object (0x1)
-OMAGICABSSYMBOLS: Other: 0
-OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-OMAGICABSSYMBOLS: }
-OMAGICABSSYMBOLS: Symbol {
-OMAGICABSSYMBOLS: Name: _end ({{[0-9]+}}
-OMAGICABSSYMBOLS: Value: 0x400144
-OMAGICABSSYMBOLS: Size: 0
-OMAGICABSSYMBOLS: Binding: Global (0x1)
-OMAGICABSSYMBOLS: Type: Object (0x1)
-OMAGICABSSYMBOLS: Other: 0
-OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-OMAGICABSSYMBOLS: }
-OMAGICABSSYMBOLS: Symbol {
-OMAGICABSSYMBOLS: Name: end ({{[0-9]+}}
-OMAGICABSSYMBOLS: Value: 0x400144
-OMAGICABSSYMBOLS: Size: 0
-OMAGICABSSYMBOLS: Binding: Global (0x1)
-OMAGICABSSYMBOLS: Type: Object (0x1)
-OMAGICABSSYMBOLS: Other: 0
-OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
-OMAGICABSSYMBOLS: }
diff --git a/test/elf/X86_64/weak-override.test b/test/elf/X86_64/weak-override.test
deleted file mode 100644
index b68b449a6649..000000000000
--- a/test/elf/X86_64/weak-override.test
+++ /dev/null
@@ -1,45 +0,0 @@
-# Test for weak symbol getting overridden
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/weak.o %p/Inputs/ovrd.o \
-RUN: -o %t --noinhibit-exec
-RUN: llvm-nm %t | FileCheck -check-prefix=WEAKORDER %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/weak.o \
-RUN: %p/Inputs/ovrd.o -o %t2 --output-filetype=yaml --noinhibit-exec
-RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-
-WEAKORDER: {{[0-9a-c]+}} T f
-
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: fn
-WEAKATOMSORDER: - name: fn
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: [[CONSTSTRA:[-a-zA-Z0-9_]+]]
-WEAKATOMSORDER: - ref-name: [[CONSTSTRA]]
-WEAKATOMSORDER: scope: global
-WEAKATOMSORDER: content: [ 55, 48, 89, E5, BF, 00, 00, 00, 00, E8, 00, 00,
-WEAKATOMSORDER: 00, 00, 5D, C3 ]
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: main
-WEAKATOMSORDER: - name: main
-WEAKATOMSORDER: scope: global
-WEAKATOMSORDER: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, E8, 00, 00,
-WEAKATOMSORDER: 00, 00, B8, 00, 00, 00, 00, 5D, C3 ]
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: R_X86_64_PC32
-WEAKATOMSORDER: offset: 10
-WEAKATOMSORDER: target: f
-WEAKATOMSORDER: addend: -4
-WEAKATOMSORDER: - ref-name: {{[0-9A-Z]+}}
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: f
-WEAKATOMSORDER: - name: f
-WEAKATOMSORDER: scope: global
-WEAKATOMSORDER: content: [ 55, 48, 89, E5, BF, 00, 00, 00, 00, E8, 00, 00,
-WEAKATOMSORDER: 00, 00, 5D, C3 ]
diff --git a/test/elf/X86_64/weak-zero-sized.test b/test/elf/X86_64/weak-zero-sized.test
deleted file mode 100644
index 76e051064b9d..000000000000
--- a/test/elf/X86_64/weak-zero-sized.test
+++ /dev/null
@@ -1,26 +0,0 @@
-# Test for zero sized weak atoms, there is only a single weak atom
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/weak-zero-sized.o -o %t \
-RUN: --noinhibit-exec
-RUN: llvm-nm %t | FileCheck -check-prefix=WEAKORDER %s
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/weak-zero-sized.o \
-RUN: --output-filetype=yaml -o %t2 --noinhibit-exec
-RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-
-WEAKORDER: 004001a4 T _start
-
-WEAKATOMSORDER: alignment: 2^2
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: [[TARGETC:[-a-zA-Z0-9_]+]]
-WEAKATOMSORDER: - name: [[TARGETA:[-a-zA-Z0-9_]+]]
-WEAKATOMSORDER: scope: global
-WEAKATOMSORDER: merge: as-weak
-WEAKATOMSORDER: alignment: 2^2
-WEAKATOMSORDER: references:
-WEAKATOMSORDER: - kind: layout-after
-WEAKATOMSORDER: offset: 0
-WEAKATOMSORDER: target: [[TARGETC]]
-WEAKATOMSORDER: - ref-name: [[TARGETC]]
-WEAKATOMSORDER: scope: global
-WEAKATOMSORDER: content: [ C3 ]
-WEAKATOMSORDER: alignment: 2^2
diff --git a/test/elf/X86_64/weaksym.test b/test/elf/X86_64/weaksym.test
deleted file mode 100644
index d44ca8a36968..000000000000
--- a/test/elf/X86_64/weaksym.test
+++ /dev/null
@@ -1,78 +0,0 @@
-# Tests that an executable with a weak undefine will put this symbol in the
-# dynamic symbol table if the executable has a dynamic relocation against this
-# symbol.
-
-#RUN: yaml2obj --format elf %s -o %t.o
-#RUN: lld -flavor gnu -target x86_64 -e main %t.o -o %t1
-#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-#CHECKSYMS: Name: x@
-#CHECKSYMS-NEXT: Value: 0x0
-#CHECKSYMS-NEXT: Size: 0
-#CHECKSYMS-NEXT: Binding: Weak (0x2)
-#CHECKSYMS-NEXT: Type: None (0x0)
-#CHECKSYMS-NEXT: Other: 0
-#CHECKSYMS-NEXT: Section: Undefined (0x0)
-
-# The object file above corresponds to the following C program compiled with
-# -fPIC:
-# extern int *x __attribute__((weak));
-#
-# int main() {
-# if (x)
-# return 1;
-# return 0;
-# }
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5488B0500000000C745FC00000000488138000000000F840C000000C745FC01000000E907000000C745FC000000008B45FC5DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000007
- Symbol: x
- Type: R_X86_64_GOTPCREL
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000037
- - Name: _GLOBAL_OFFSET_TABLE_
- Weak:
- - Name: x
diff --git a/test/elf/X86_64/yamlinput.test b/test/elf/X86_64/yamlinput.test
deleted file mode 100644
index 6e529b41b7a6..000000000000
--- a/test/elf/X86_64/yamlinput.test
+++ /dev/null
@@ -1,166 +0,0 @@
-# This tests the functionality that lld is able to read
-# an input YAML from a previous link
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/initfini.o \
-RUN: --noinhibit-exec --output-filetype=yaml -o %t.objtxt
-RUN: lld -flavor gnu -target x86_64-linux %t.objtxt \
-RUN: --noinhibit-exec -o %t1
-RUN: llvm-readobj -sections %t1 | FileCheck %s -check-prefix=SECTIONS
-
-SECTIONS: Section {
-SECTIONS: Index: 0
-SECTIONS: Name: (0)
-SECTIONS: Type: SHT_NULL (0x0)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 1
-SECTIONS: Name: .interp
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 2
-SECTIONS: Name: .hash
-SECTIONS: Type: SHT_HASH (0x5)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 3
-SECTIONS: Name: .dynsym
-SECTIONS: Type: SHT_DYNSYM (0xB)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 4
-SECTIONS: Name: .dynstr
-SECTIONS: Type: SHT_STRTAB (0x3)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 5
-SECTIONS: Name: .text
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x6)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_EXECINSTR (0x4)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 6
-SECTIONS: Name: .rodata
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 7
-SECTIONS: Name: .eh_frame
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x2)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 8
-SECTIONS: Name: .eh_frame_hdr
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 9
-SECTIONS: Name: .init_array
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 10
-SECTIONS: Name: .fini_array
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 11
-SECTIONS: Name: .dynamic
-SECTIONS: Type: SHT_DYNAMIC (0x6)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 12
-SECTIONS: Name: .got.plt
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 13
-SECTIONS: Name: .data
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 14
-SECTIONS: Name: .bss
-SECTIONS: Type: SHT_NOBITS (0x8)
-SECTIONS: Flags [ (0x3)
-SECTIONS: SHF_ALLOC (0x2)
-SECTIONS: SHF_WRITE (0x1)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 15
-SECTIONS: Name: .comment
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 16
-SECTIONS: Name: .note.GNU-stack
-SECTIONS: Type: SHT_PROGBITS (0x1)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 17
-SECTIONS: Name: .shstrtab
-SECTIONS: Type: SHT_STRTAB (0x3)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 18
-SECTIONS: Name: .symtab
-SECTIONS: Type: SHT_SYMTAB (0x2)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
-SECTIONS: Section {
-SECTIONS: Index: 19
-SECTIONS: Name: .strtab
-SECTIONS: Type: SHT_STRTAB (0x3)
-SECTIONS: Flags [ (0x0)
-SECTIONS: ]
-SECTIONS: }
diff --git a/test/elf/abs-dup.objtxt b/test/elf/abs-dup.objtxt
deleted file mode 100644
index 7340a29b0f00..000000000000
--- a/test/elf/abs-dup.objtxt
+++ /dev/null
@@ -1,19 +0,0 @@
-# Tests handling an absolute symbol with no name
-# RUN: lld -flavor gnu -target x86_64 -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-absolute-atoms:
- - name: abs
- scope: static
- value: 0x10
- - name: ''
- scope: static
- value: 0x15
-
-# CHECK: absolute-atoms:
-# CHECK: - name: abs
-# CHECK: scope: static
-# CHECK: value: 0x0000000000000010
-# CHECK: - name: ''
-# CHECK: scope: static
-# CHECK: value: 0x0000000000000015
diff --git a/test/elf/abs.test b/test/elf/abs.test
deleted file mode 100644
index bad74f10d194..000000000000
--- a/test/elf/abs.test
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Source File:
-# .local absGlobalSymbol
-# .set absLocalSymbol,0xC0000
-# .type absLocalSymbol, @object
-# .globl absGlobalSymbol
-# .set absGlobalSymbol,0xD0000
-# .type absGlobalSymbol, @object
-
-# built using: "gcc -m32"
-#
-RUN: lld -flavor gnu -target i386 --output-filetype=yaml -r %p/Inputs/abs-test.i386 | FileCheck -check-prefix=YAML %s
-
-YAML: absolute-atoms:
-YAML: - name: absLocalSymbol
-YAML: value: {{0x[0]+C0000}}
-YAML: - name: absGlobalSymbol
-YAML: scope: global
-YAML: value: {{0x[0]+D0000}}
diff --git a/test/elf/allowduplicates.objtxt b/test/elf/allowduplicates.objtxt
deleted file mode 100644
index dbad3bd312ed..000000000000
--- a/test/elf/allowduplicates.objtxt
+++ /dev/null
@@ -1,51 +0,0 @@
-# RUN: lld -flavor gnu -target x86_64 --allow-multiple-definition %s \
-# RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
-#
-# RUN: not lld -flavor gnu -target x86_64 %s --output-filetype=yaml \
-# RUN: --noinhibit-exec 2>&1 | FileCheck -check-prefix=ERROR %s
-#
-# RUN: lld -flavor gnu -target x86_64 -z muldefs %s \
-# RUN: --noinhibit-exec --output-filetype=yaml | FileCheck %s
-
----
-defined-atoms:
- - name: .text
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
- 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
----
-defined-atoms:
- - name: .text
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
- 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
----
-
-# CHECK: defined-atoms:
-# CHECK: - name: .text
-# CHECK: alignment: 2^4
-# CHECK: section-choice: custom-required
-# CHECK: section-name: .text
-# CHECK: - name: main
-# CHECK: scope: global
-# CHECK: content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
-# CHECK: 00, C3 ]
-# CHECK: alignment: 2^4
-# CHECK: section-choice: custom-required
-# CHECK: section-name: .text
-
-# ERROR: duplicate symbol error
diff --git a/test/elf/archive-elf-forceload.test b/test/elf/archive-elf-forceload.test
deleted file mode 100644
index a0d115094815..000000000000
--- a/test/elf/archive-elf-forceload.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# Tests the functionality of archive libraries reading
-# and resolution
-# Note: The binary files would not be required once we have support to generate
-# binary archives from textual(yaml) input
-#
-# Tests generated using the source files below
-# main file
-# int main()
-# {
-# fn();
-# return 0;
-# }
-#
-# archive file
-# int fn()
-# {
-# return 0;
-# }
-#
-# int fn1()
-# {
-# return 0;
-# }
-# gcc -c main.c fn.c fn1.c
-
-RUN: lld -flavor gnu -target x86_64-linux -e main %p/Inputs/mainobj.x86_64 \
-RUN: --whole-archive %p/Inputs/libfnarchive.a --no-whole-archive --output-filetype=yaml \
-RUN: | FileCheck -check-prefix FORCELOAD %s
-
-FORCELOAD: defined-atoms:
-FORCELOAD: - name: fn1
-FORCELOAD: scope: global
-FORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
-FORCELOAD: - name: fn
-FORCELOAD: scope: global
-FORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
-FORCELOAD: absolute-atoms:
-FORCELOAD: - name: main.c
-FORCELOAD: value: 0x0
-FORCELOAD: - name: fn1.c
-FORCELOAD: value: 0x0
-FORCELOAD: - name: fn.c
-FORCELOAD: value: 0x0
diff --git a/test/elf/archive-elf.test b/test/elf/archive-elf.test
deleted file mode 100644
index ba6774644cbd..000000000000
--- a/test/elf/archive-elf.test
+++ /dev/null
@@ -1,38 +0,0 @@
-# Tests the functionality of archive libraries reading
-# and resolution
-# Note: The binary files would not be required once we have support to generate
-# binary archives from textual(yaml) input
-#
-# Tests generated using the source files below
-# main file
-# int main()
-# {
-# fn();
-# return 0;
-# }
-#
-# archive file
-# int fn()
-# {
-# return 0;
-# }
-#
-# int fn1()
-# {
-# return 0;
-# }
-# gcc -c main.c fn.c fn1.c
-
-RUN: lld -flavor gnu -target x86_64-linux --output-filetype=yaml -r \
-RUN: %p/Inputs/mainobj.x86_64 %p/Inputs/libfnarchive.a | \
-RUN: FileCheck -check-prefix NOFORCELOAD %s
-
-NOFORCELOAD: defined-atoms:
-NOFORCELOAD: - name: fn
-NOFORCELOAD: scope: global
-NOFORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
-NOFORCELOAD: absolute-atoms:
-NOFORCELOAD: - name: main.c
-NOFORCELOAD: value: 0x0
-NOFORCELOAD: - name: fn.c
-NOFORCELOAD: value: 0x0
diff --git a/test/elf/as-needed.test b/test/elf/as-needed.test
deleted file mode 100644
index 4477f0fe0ca6..000000000000
--- a/test/elf/as-needed.test
+++ /dev/null
@@ -1,15 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
-RUN: --as-needed %p/Inputs/shared.so-x86-64 %p/Inputs/libifunc.x86-64.so \
-RUN: -o %t1 -e main --allow-shlib-undefined
-RUN: llvm-readobj -dynamic-table %t1 | FileCheck %s -check-prefix AS_NEEDED
-
-AS_NEEDED: NEEDED SharedLibrary (shared.so-x86-64)
-AS_NEEDED-NOT: NEEDED SharedLibrary (libifunc.x86-64.so)
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 %p/Inputs/libifunc.x86-64.so \
-RUN: -o %t2 -e main --allow-shlib-undefined
-RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s -check-prefix NO_AS_NEEDED
-
-NO_AS_NEEDED: NEEDED SharedLibrary (shared.so-x86-64)
-NO_AS_NEEDED: NEEDED SharedLibrary (libifunc.x86-64.so)
diff --git a/test/elf/branch.test b/test/elf/branch.test
deleted file mode 100644
index 5e0b4a5aabf1..000000000000
--- a/test/elf/branch.test
+++ /dev/null
@@ -1,34 +0,0 @@
-RUN: lld -flavor gnu -target hexagon -static --output-filetype=yaml \
-RUN: %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon --noinhibit-exec | FileCheck %s -check-prefix hexagon-yaml
-RUN: lld -flavor gnu -target hexagon -e target -o %t1 \
-RUN: %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon --noinhibit-exec
-RUN: llvm-readobj -h %t1 | FileCheck -check-prefix=hexagon-readobj %s
-
-hexagon-yaml: - name: back
-hexagon-yaml: scope: global
-hexagon-yaml: content: [ 00, C0, 00, 7F, 00, C0, 00, 5A, 00, 00, 00, 00,
-hexagon-yaml: 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 ]
-hexagon-yaml: references:
-hexagon-yaml: - kind:
-hexagon-yaml: offset: 4
-hexagon-yaml: target: target
-
-hexagon-yaml: - name: target
-hexagon-yaml: scope: global
-hexagon-yaml: content: [ 00, C0, 00, 5A ]
-hexagon-yaml: references:
-hexagon-yaml: - kind:
-hexagon-yaml: offset: 0
-hexagon-yaml: target: back
-
-
-hexagon-readobj: ElfHeader {
-hexagon-readobj: Ident {
-hexagon-readobj: Class: 32-bit (0x1)
-hexagon-readobj: DataEncoding: LittleEndian (0x1)
-hexagon-readobj: FileVersion: 1
-hexagon-readobj: OS/ABI: SystemV (0x0)
-hexagon-readobj: ABIVersion: 0
-hexagon-readobj: }
-hexagon-readobj: Type: Executable (0x2)
-hexagon-readobj: Machine: EM_HEXAGON (0xA4)
diff --git a/test/elf/check.test b/test/elf/check.test
deleted file mode 100644
index 336b7fc1335c..000000000000
--- a/test/elf/check.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# This tests the basic functionality of ordering data and functions as they
-# appear in the inputs
-RUN: lld -flavor gnu -target i386 -e global_func --noinhibit-exec --output-filetype=yaml \
-RUN: %p/Inputs/object-test.elf-i386 -o %t
-RUN: FileCheck %s -check-prefix ELF-i386 < %t
-RUN: lld -flavor gnu -target hexagon -e global_func --noinhibit-exec --output-filetype=yaml \
-RUN: %p/Inputs/object-test.elf-hexagon -o %t1
-RUN: FileCheck %s -check-prefix ELF-hexagon < %t1
-
-ELF-i386: defined-atoms:
-ELF-i386: - name: global_func
-ELF-i386: - name: static_func
-ELF-i386: - name: weak_func
-ELF-i386: - name: hidden_func
-ELF-i386: - name: no_dead_strip
-ELF-i386: - name: no_special_section_func
-ELF-i386: - name: global_variable
-ELF-i386: - name: uninitialized_static_variable
-ELF-i386: - name: special_section_func
-ELF-i386: undefined-atoms:
-ELF-i386: - name: puts
-ELF-i386: absolute-atoms:
-ELF-i386: - name: sample.c
-
-ELF-hexagon: - name: global_func
-ELF-hexagon: - name: static_func
-ELF-hexagon: - name: weak_func
-ELF-hexagon: - name: hidden_func
-ELF-hexagon: - name: no_dead_strip
-ELF-hexagon: - name: no_special_section_func
-ELF-hexagon: - name: global_variable
-ELF-hexagon: - name: uninitialized_static_variable
-ELF-hexagon: - name: special_section_func
-ELF-hexagon: undefined-atoms:
-ELF-hexagon: - name: puts
-ELF-hexagon: absolute-atoms:
-ELF-hexagon: - name: sample.c
-ELF-hexagon: scope: static
-ELF-hexagon: value: 0x0000000000000000
diff --git a/test/elf/checkrodata.test b/test/elf/checkrodata.test
deleted file mode 100644
index fc75657b4afb..000000000000
--- a/test/elf/checkrodata.test
+++ /dev/null
@@ -1,9 +0,0 @@
-
-RUN: lld -flavor gnu -target i386 -o %t1 %p/Inputs/rodata-test.i386 --noinhibit-exec
-RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=i386 %s
-RUN: lld -flavor gnu -target hexagon -o %t2 %p/Inputs/rodata-test.hexagon --noinhibit-exec
-RUN: llvm-objdump -section-headers %t2 | FileCheck -check-prefix=hexagon %s
-
-i386: .rodata 00000004 0000000000000114 DATA
-
-hexagon: .rodata 00000004 0000000000000114 DATA
diff --git a/test/elf/common.test b/test/elf/common.test
deleted file mode 100644
index 46fcfe39d486..000000000000
--- a/test/elf/common.test
+++ /dev/null
@@ -1,10 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux -o %t %p/Inputs/relocs.x86-64 \
-RUN: -e _start -static
-RUN: llvm-readobj -t %t | FileCheck %s
-
-CHECK: Symbol {
-CHECK: Name: i
-CHECK-NEXT: Value:
-CHECK-NEXT: Size:
-CHECK-NEXT: Binding:
-CHECK-NEXT: Type: Object
diff --git a/test/elf/consecutive-weak-sym-defs.test b/test/elf/consecutive-weak-sym-defs.test
deleted file mode 100644
index 095fabb17ab8..000000000000
--- a/test/elf/consecutive-weak-sym-defs.test
+++ /dev/null
@@ -1,81 +0,0 @@
-#Tests that multiple consecutive weak symbol definitions do not confuse the
-#ELF reader. For example:
-#
-# my_weak_func1:
-# my_weak_func2:
-# my_weak_func3:
-# code
-#
-#If my_weak_func2 is merged to other definition, this should not disturb the
-#definition my_weak_func1 to "code".
-#
-#
-#RUN: yaml2obj -format=elf %p/Inputs/consecutive-weak-defs.o.yaml -o=%t1.o
-#RUN: yaml2obj -format=elf %p/Inputs/main-with-global-def.o.yaml -o=%t2.o
-#RUN: lld -flavor gnu -target x86_64 %t1.o %t2.o -e=main -o %t1
-#RUN: obj2yaml %t1 | FileCheck -check-prefix CHECKLAYOUT %s
-#
-# Check that the layout has not been changed:
-#
-#CHECKLAYOUT: Name: .text
-#CHECKLAYOUT-NEXT: Type:
-#CHECKLAYOUT-NEXT: Flags:
-#CHECKLAYOUT-NEXT: Address:
-#CHECKLAYOUT-NEXT: AddressAlign:
-#CHECKLAYOUT-NEXT: Content: 554889E5E8020000005DC3554889E5B8640000005DC3
-# ^~~> my_func ^~~> my_weak_func
-#
-#
-#
-#Our two input files were produced by the following code:
-#
-#Inputs/consecutive-weak-defs.o.yaml (this one is in assembly to allow us to
-# easily define multiple labels)
-#
-# .text
-# .globl my_func
-# .type my_func,@function
-# my_func:
-# pushq %rbp
-# movq %rsp, %rbp
-# callq my_weak_func
-# popq %rbp
-# retq
-# .Ltmp0:
-# .size my_func, .Ltmp0-my_func
-#
-# .text
-# .weak my_weak_func
-# .type my_weak_func,@function
-# .weak my_weak_func2
-# .type my_weak_func2,@function
-# .weak my_weak_func3
-# .type my_weak_func3,@function
-# my_weak_func:
-# my_weak_func2:
-# my_weak_func3:
-# pushq %rbp
-# movq %rsp, %rbp
-# movl $100, %eax
-# popq %rbp
-# retq
-# .Ltmp1:
-# .size my_weak_func, .Ltmp1-my_weak_func
-# .size my_weak_func2, .Ltmp1-my_weak_func2
-# .size my_weak_func3, .Ltmp1-my_weak_func3
-#
-#Inputs/main-with-global-def.o.yaml:
-#
-# int my_func();
-#
-# int my_weak_func2() {
-# return 200;
-# }
-#
-# int main() {
-# return my_func();
-# }
-#
-#-------------------------------------------------------------------------------
-# The net effect is that this program should return 100.
-
diff --git a/test/elf/defsym.objtxt b/test/elf/defsym.objtxt
deleted file mode 100644
index e9c3922d5994..000000000000
--- a/test/elf/defsym.objtxt
+++ /dev/null
@@ -1,28 +0,0 @@
-# RUN: lld -flavor gnu -target x86_64 --defsym=foo=0x1234 -r %s \
-# RUN: --output-filetype=yaml | FileCheck -check-prefix=ABS %s
-
-# RUN: lld -flavor gnu -target x86_64 --defsym=foo=main -r %s \
-# RUN: --output-filetype=yaml | FileCheck -check-prefix=ALIAS %s
-
-defined-atoms:
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
-
-# ABS: absolute-atoms:
-# ABS: - name: foo
-# ABS: scope: global
-# ABS: value: 0x0000000000001234
-
-# ALIAS: defined-atoms:
-# ALIAS: - name: foo
-# ALIAS: scope: global
-# ALIAS: section-choice: custom-required
-# ALIAS: section-name: .text
-# ALIAS: references:
-# ALIAS: - kind: layout-after
-# ALIAS: offset: 0
-# ALIAS: target: main
diff --git a/test/elf/dynamic-segorder.test b/test/elf/dynamic-segorder.test
deleted file mode 100644
index 1fdccec9921b..000000000000
--- a/test/elf/dynamic-segorder.test
+++ /dev/null
@@ -1,17 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
-RUN: --defsym=__tls_get_addr=0
-RUN: llvm-objdump -p %t | FileCheck %s
-
-CHECK: PHDR
-CHECK: flags r-x
-CHECK: INTERP
-CHECK: flags r--
-CHECK: LOAD
-CHECK: flags r-x
-CHECK: LOAD
-CHECK: flags rw-
-CHECK: DYNAMIC
-CHECK: flags rw-
-CHECK: TLS
-CHECK: flags rw-
diff --git a/test/elf/dynamic-undef.test b/test/elf/dynamic-undef.test
deleted file mode 100644
index 7506b21b3ca7..000000000000
--- a/test/elf/dynamic-undef.test
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# This test creates a executable and tests the options that are used to
-# to create an executable and a shared library
-#
-# This test will fail because there are unresolved symbols from the shared
-# library and we are not passing --allow-shlib-undefined
-RUN: not lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t -e main 2> %t1
-RUN: FileCheck -check-prefix=EXEC %s < %t1
-# This test will pass because of --allow-shlib-undefined
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
-RUN: --defsym=__tls_get_addr=0
-# Building shared libraries should not fail when there is a undefined symbol.
-# Test creation of shared library, this should pass because we are using
-# shared option and by default, dynamic library wouldn't create undefined atoms
-# from the input shared library
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t.usenoundefines -e main -shared
-RUN: llvm-readobj -symbols %t.usenoundefines | FileCheck %s -check-prefix=SHLIB-NOUNDEF
-# Test creation of shared library, this should fail because we are using
-# shared option setting the options to use the shared library undefines to
-# create undefined atoms from the input shared library
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t.useundefines -e main -shared \
-RUN: --use-shlib-undefines --no-allow-shlib-undefined 2> %t2
-RUN: llvm-readobj -symbols %t.useundefines | FileCheck -check-prefix=SHLIB-UNDEF-SYMBOLS %s
-
-EXEC: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: puts
-SHLIB: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: puts
-EXEC-NOT: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: weakfoo
-SHLIB-NOT: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: weakfoo
-SHLIB-NOUNDEF-NOT: Name: puts
-SHLIB-UNDEF-SYMBOLS: Name: puts
diff --git a/test/elf/dynamic.test b/test/elf/dynamic.test
deleted file mode 100644
index 59269612cf8e..000000000000
--- a/test/elf/dynamic.test
+++ /dev/null
@@ -1,80 +0,0 @@
-# Checks functionality of dynamic executables
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
-RUN: -rpath /l1:/l2 -rpath /l3
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t2 --allow-shlib-undefined \
-RUN: --noinhibit-exec
-RUN: llvm-objdump -p %t >> %t2
-RUN: llvm-readobj -s -dyn-symbols -dynamic-table %t >> %t2
-RUN: FileCheck %s < %t2
-
-CHECK: name: main
-CHECK: kind: R_X86_64_PC32
-CHECK: offset: 18
-CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
-
-CHECK: name: [[PLTNAME]]
-CHECK: type: stub
-
-CHECK: type: got
-CHECK: references:
-CHECK: kind: R_X86_64_JUMP_SLOT
-
-CHECK: shared-library-atoms:
-CHECK: name: foo
-CHECK: load-name: shared.so-x86-64
-
-CHECK: PHDR off 0x{{0+}}40
-CHECK: INTERP
-CHECK: flags r--
-
-CHECK: Section {
-CHECK: Name: .hash
-CHECK-NEXT: Type: SHT_HASH
-CHECK-NEXT: Flags [
-CHECK-NEXT: SHF_ALLOC
-CHECK-NEXT: ]
-CHECK-NEXT: Address:
-CHECK-NEXT: Offset:
-CHECK-NEXT: Size: 32
-CHECK-NEXT: Link:
-CHECK-NEXT: Info:
-CHECK-NEXT: AddressAlignment: 8
-CHECK-NEXT: EntrySize:
-CHECK-NEXT: }
-
-CHECK: DynamicSymbols [
-CHECK: Symbol {
-CHECK: Name: foo
-CHECK-NEXT: Value: 0
-CHECK-NEXT: Size:
-CHECK-NEXT: Binding: Global
-CHECK-NEXT: Type: Function
-CHECK: }
-CHECK: Symbol {
-CHECK: Name: i
-CHECK-NEXT: Value: 0
-CHECK-NEXT: Size:
-CHECK-NEXT: Binding: Global
-CHECK-NEXT: Type: Object
-CHECK: }
-
-CHECK: DynamicSection [ (15 entries)
-CHECK: Tag Type Name/Value
-CHECK: 0x0000000000000004 HASH
-CHECK: 0x0000000000000005 STRTAB
-CHECK: 0x0000000000000006 SYMTAB
-CHECK: 0x000000000000000A STRSZ
-CHECK: 0x000000000000000B SYMENT 24
-CHECK: 0x0000000000000007 RELA
-CHECK: 0x0000000000000008 RELASZ 24
-CHECK: 0x0000000000000009 RELAENT 24
-CHECK: 0x0000000000000002 PLTRELSZ 24
-CHECK: 0x0000000000000003 PLTGOT
-CHECK: 0x0000000000000014 PLTREL RELA
-CHECK: 0x0000000000000017 JMPREL
-CHECK: 0x0000000000000001 NEEDED SharedLibrary (shared.so-x86-64)
-CHECK: 0x000000000000000F RPATH /l1:/l2:/l3
-CHECK: 0x0000000000000000 NULL 0x0
-CHECK: ]
diff --git a/test/elf/eh_frame_hdr.test b/test/elf/eh_frame_hdr.test
deleted file mode 100644
index 31429857ec69..000000000000
--- a/test/elf/eh_frame_hdr.test
+++ /dev/null
@@ -1,30 +0,0 @@
-#RUN: yaml2obj -format=elf %s > %t
-#RUN: lld -flavor gnu -target x86_64-linux %t --noinhibit-exec \
-#RUN: -o %t1
-#RUN: llvm-objdump -s %t1 | FileCheck %s
-
-!ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
-- Name: .eh_frame
- Type: SHT_PROGBITS
- Content: "00"
- AddressAlign: 8
- Flags: [SHF_ALLOC]
-
-Symbols:
- Local:
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
-
-# CHECK: Contents of section .eh_frame:
-# CHECK-NEXT: 4001e0 00
-# CHECK-NEXT: Contents of section .eh_frame_hdr:
-# CHECK-NEXT: 4001e8 011bffff f4ffffff
-# ^ 0x4001e0 - 0x4001e8 - 4 = 0xfffffff4
diff --git a/test/elf/entry.objtxt b/test/elf/entry.objtxt
deleted file mode 100644
index 7e0c1623565a..000000000000
--- a/test/elf/entry.objtxt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Tests entry point handling
-#
-# Test generated using the source file below:
-#
-# int main()
-# {
-# return 0;
-# }
-#
-
-# RUN: lld -flavor gnu -target x86_64 %s -e _entrypoint --noinhibit-exec -o %t1
-# RUN: llvm-nm -n %t1 | FileCheck %s
-#
-# CHECK: 004001e0 T main
-# CHECK: 00401000 D _DYNAMIC
-# CHECK: 00401060 A _end
-# CHECK: 00401060 A end
-# CHECK: U _entrypoint
-
-defined-atoms:
- - name: .text
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
- 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
- - name: .data
- type: data
- alignment: 2^2
- section-choice: custom-required
- section-name: .data
- - name: .bss
- type: zero-fill
- alignment: 2^2
- section-choice: custom-required
- section-name: .bss
- - name: .note.GNU-stack
- section-choice: custom-required
- section-name: .note.GNU-stack
- permissions: r--
- - name: .eh_frame
- content: [ 14, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 52, 00,
- 01, 78, 10, 01, 1B, 0C, 07, 08, 90, 01, 00, 00,
- 14, 00, 00, 00, 1C, 00, 00, 00, 00, 00, 00, 00,
- 0E, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 ]
- alignment: 2^3
- section-choice: custom-required
- section-name: .eh_frame
- permissions: r--
- references:
- - kind: R_X86_64_PC32
- offset: 32
- target: .text
diff --git a/test/elf/export-dynamic.test b/test/elf/export-dynamic.test
deleted file mode 100644
index 37876a47c840..000000000000
--- a/test/elf/export-dynamic.test
+++ /dev/null
@@ -1,99 +0,0 @@
-# Tests the --export-dynamic (-E) flag. When creating a dynamic executable and
-# receiving this flag, the linker should export all globally visible symbols in
-# its dynamic symbol table.
-
-#RUN: yaml2obj -format=elf %s -o=%t.o
-#RUN: lld -flavor gnu -target x86_64 -E %t.o -e=main -o %t1
-#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-#CHECKSYMS: myfunc1@
-#CHECKSYMS: main@
-#CHECKSYMS: myvar1@
-
-# The object file below was generated with the following code:
-#
-# (command line clang -c prog.c -o prog.o)
-#
-# int myvar1 = 22;
-#
-# static int mysecretvar = 11;
-#
-# int myfunc1() {
-# return 23;
-# }
-#
-# static int mysecretfunc() {
-# return 42;
-# }
-#
-# int main() {
-# return mysecretfunc() + mysecretvar;
-# }
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B8170000005DC30F1F440000554889E54883EC10C745FC00000000E81C000000030425000000004883C4105DC36666666666662E0F1F840000000000554889E5B82A0000005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000027
- Symbol: .data
- Type: R_X86_64_32S
- Addend: 4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: 160000000B000000
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: mysecretfunc
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000040
- Size: 0x000000000000000B
- - Name: mysecretvar
- Type: STT_OBJECT
- Section: .data
- Value: 0x0000000000000004
- Size: 0x0000000000000004
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000010
- Size: 0x0000000000000021
- - Name: myfunc1
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000B
- - Name: myvar1
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000004
diff --git a/test/elf/filenotfound.test b/test/elf/filenotfound.test
deleted file mode 100644
index d64568f2ea53..000000000000
--- a/test/elf/filenotfound.test
+++ /dev/null
@@ -1,3 +0,0 @@
-# Check that a file that cannot be found results in a proper error message
-RUN: not lld -flavor gnu -target x86_64 %p/Inputs/nofile.o 2>&1 | FileCheck %s
-#CHECK: lld: cannot find file {{.+[\\/]}}nofile.o
diff --git a/test/elf/gnulinkonce/gnulinkonce-report-discarded-reference.test b/test/elf/gnulinkonce/gnulinkonce-report-discarded-reference.test
deleted file mode 100644
index e1d0f8e7b55e..000000000000
--- a/test/elf/gnulinkonce/gnulinkonce-report-discarded-reference.test
+++ /dev/null
@@ -1,147 +0,0 @@
-# Tests that the linker is able to read .gnu.linkonce sections and link them
-# appropriately. The testcase has been created by using the following source
-# code.
-# TODO: This test should produce a discarded reference error message which it
-# does not currently.
-# linkoncea.s
-# .section .gnu.linkonce.d.dummy,"aw"
-#bar:
-# .long 0
-# linkonceb.s
-# .section .gnu.linkonce.d.dummy,"aw"
-#foo:
-# .long 0
-# .section .blah, "aw"
-# .long foo
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGNULINKONCE < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGNULINKONCESECTIONS
-#CHECKGNULINKONCE: - name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCE: scope: global
-#CHECKGNULINKONCE: type: gnu-linkonce
-#CHECKGNULINKONCE: section-choice: custom-required
-#CHECKGNULINKONCE: section-name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCE: permissions: rw-
-#CHECKGNULINKONCE: references:
-#CHECKGNULINKONCE: - kind: group-child
-#CHECKGNULINKONCE: offset: 0
-#CHECKGNULINKONCE: target: bar
-#CHECKGNULINKONCESECTIONS: Section {
-#CHECKGNULINKONCESECTIONS: Name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCESECTIONS: Type: SHT_PROGBITS
-#CHECKGNULINKONCESECTIONS: Flags [ (0x3)
-#CHECKGNULINKONCESECTIONS: SHF_ALLOC (0x2)
-#CHECKGNULINKONCESECTIONS: SHF_WRITE (0x1)
-#CHECKGNULINKONCESECTIONS: ]
-#CHECKGNULINKONCESECTIONS: Size: 4
-#CHECKGNULINKONCESECTIONS: }
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
- - Name: bar
- Section: .gnu.linkonce.d.dummy
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
- - Name: .blah
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
- - Name: .rela.blah
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .blah
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: foo
- Type: R_X86_64_32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
- - Name: foo
- Section: .gnu.linkonce.d.dummy
- - Name: .blah
- Type: STT_SECTION
- Section: .blah
-...
diff --git a/test/elf/gnulinkonce/gnulinkonce-report-undef.test b/test/elf/gnulinkonce/gnulinkonce-report-undef.test
deleted file mode 100644
index c6d050dcd63a..000000000000
--- a/test/elf/gnulinkonce/gnulinkonce-report-undef.test
+++ /dev/null
@@ -1,129 +0,0 @@
-# Tests that the linker is able to read .gnu.linkonce sections and link them
-# appropriately. The testcase has been created by using the following source
-# code. This test checks that the linker produces an undefined error.
-# linkoncea.s
-# .section .gnu.linkonce.d.dummy,"aw"
-#bar:
-# .long 0
-# linkonceb.s
-# .section .gnu.linkonce.d.dummy,"aw"
-# .global foo
-#foo:
-# .long 0
-# .section .blah, "aw"
-# .long foo
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
-#RUN: not lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: --output-filetype=yaml -o %t2.out.yaml 2>&1 | FileCheck \
-#RUN: -check-prefix=UNDEFS %s
-#RUN: not lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: -o %t2.out 2>&1 | FileCheck -check-prefix=UNDEFS %s
-#UNDEFS: Undefined symbol: {{.*}} foo
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
- - Name: bar
- Section: .gnu.linkonce.d.dummy
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
- - Name: .blah
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
- - Name: .rela.blah
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .blah
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: foo
- Type: R_X86_64_32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
- - Name: .blah
- Type: STT_SECTION
- Section: .blah
- Global:
- - Name: foo
- Section: .gnu.linkonce.d.dummy
-...
diff --git a/test/elf/gnulinkonce/gnulinkonce.test b/test/elf/gnulinkonce/gnulinkonce.test
deleted file mode 100644
index 17559f656328..000000000000
--- a/test/elf/gnulinkonce/gnulinkonce.test
+++ /dev/null
@@ -1,151 +0,0 @@
-# Tests that the linker is able to read .gnu.linkonce sections and link them
-# appropriately. The testcase has been created by using the following source
-# code
-# linkonce1a.s
-# ------------
-# .section .gnu.linkonce.d.dummy,"aw"
-#bar:
-# .long 0
-# linkonce1b.s
-# ------------
-# .globl main
-# .globl start
-# .globl _start
-# .globl __start
-# .text
-#main:
-#start:
-#_start:
-#__start:
-# .long 0
-#
-# .section .gnu.linkonce.d.dummy,"aw"
-#foo:
-# .long 0
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
-#RUN: --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGNULINKONCE < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGNULINKONCESECTIONS
-#CHECKGNULINKONCE: - name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCE: scope: global
-#CHECKGNULINKONCE: type: gnu-linkonce
-#CHECKGNULINKONCE: section-choice: custom-required
-#CHECKGNULINKONCE: section-name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCE: permissions: rw-
-#CHECKGNULINKONCE: references:
-#CHECKGNULINKONCE: - kind: group-child
-#CHECKGNULINKONCE: offset: 0
-#CHECKGNULINKONCE: target: bar
-#CHECKGNULINKONCE: - kind: group-child
-#CHECKGNULINKONCE: offset: 0
-#CHECKGNULINKONCESECTIONS: Section {
-#CHECKGNULINKONCESECTIONS: Name: .gnu.linkonce.d.dummy
-#CHECKGNULINKONCESECTIONS: Type: SHT_PROGBITS
-#CHECKGNULINKONCESECTIONS: Flags [ (0x3)
-#CHECKGNULINKONCESECTIONS: SHF_ALLOC (0x2)
-#CHECKGNULINKONCESECTIONS: SHF_WRITE (0x1)
-#CHECKGNULINKONCESECTIONS: ]
-#CHECKGNULINKONCESECTIONS: Size: 4
-#CHECKGNULINKONCESECTIONS: }
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
-Symbols:
- Local:
- - Name: bar
- Section: .gnu.linkonce.d.dummy
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: '00000000'
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .gnu.linkonce.d.dummy
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: '00000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .gnu.linkonce.d.dummy
- Type: STT_SECTION
- Section: .gnu.linkonce.d.dummy
- - Name: foo
- Section: .gnu.linkonce.d.dummy
- Global:
- - Name: main
- Section: .text
- - Name: start
- Section: .text
- - Name: _start
- Section: .text
- - Name: __start
- Section: .text
-...
diff --git a/test/elf/gotpcrel.test b/test/elf/gotpcrel.test
deleted file mode 100644
index b6f83c16676d..000000000000
--- a/test/elf/gotpcrel.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# This test checks that GOTPCREL entries are being handled properly
-RUN: lld -flavor gnu -target x86_64-linux -static -e main --output-filetype=yaml \
-RUN: --noinhibit-exec %p/Inputs/gotpcrel.x86-64 \
-RUN: | FileCheck %s -check-prefix=YAML
-
-YAML: name: main
-YAML: references:
-YAML: kind: R_X86_64_GOTPCREL
-YAML: offset: 3
-YAML: target: [[NULLGOT:[a-zA-Z0-9_]+]]
-YAML: kind: R_X86_64_GOTPCREL
-YAML: offset: 10
-YAML: target: [[MAINGOT:[a-zA-Z0-9_]+]]
-
-YAML: name: [[NULLGOT]]
-YAML: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-YAML-NOT: references:
-
-YAML: name: [[MAINGOT]]
-YAML: kind: R_X86_64_64
-YAML: target: main
diff --git a/test/elf/gottpoff.test b/test/elf/gottpoff.test
deleted file mode 100644
index 9841ee1453d0..000000000000
--- a/test/elf/gottpoff.test
+++ /dev/null
@@ -1,120 +0,0 @@
-# Test that GOTTPOFF reloc generates an outstanding R_X86_64_TPOFF64
-# to be processed at startup time.
-# Reference: Ulrich Drepper's "ELF Handling for Thread-Local storage"
-
-#RUN: yaml2obj -format=elf %s -o %t.o
-#RUN: lld -flavor gnu -target x86_64 %t.o -o %t -e=main --defsym=__tls_get_addr=0
-#RUN: llvm-readobj -r %t | FileCheck %s
-#
-#CHECK: Section (5) .rela.dyn {
-#CHECK: 0x401098 R_X86_64_TPOFF64 - 0x0
-#CHECK: }
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_FREEBSD
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: E819000000640304250000000064030425000000006403042500000000C3488B0500000000648B00C3488D3D00000000E800000000488D8000000000C3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000009
- Symbol: tls1
- Type: R_X86_64_TPOFF32
- - Offset: 0x0000000000000011
- Symbol: tls0
- Type: R_X86_64_TPOFF32
- - Offset: 0x0000000000000019
- Symbol: tls2
- Type: R_X86_64_TPOFF32
- - Offset: 0x0000000000000021
- Symbol: tls2
- Type: R_X86_64_GOTTPOFF
- Addend: -4
- - Offset: 0x000000000000002C
- Symbol: tls0
- Type: R_X86_64_TLSLD
- Addend: -4
- - Offset: 0x0000000000000031
- Symbol: __tls_get_addr
- Type: R_X86_64_PLT32
- Addend: -4
- - Offset: 0x0000000000000038
- Symbol: tls0
- Type: R_X86_64_DTPOFF32
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .tbss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x0000000000000004
- Content: '01000000002E7265'
- - Name: .tdata
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
- AddressAlign: 0x0000000000000004
- Content: '01000000'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .tbss
- Type: STT_SECTION
- Section: .tbss
- - Name: .tdata
- Type: STT_SECTION
- Section: .tdata
- Global:
- - Name: GOTTPOFF
- Type: STT_FUNC
- Section: .text
- Value: 0x000000000000001E
- - Name: TLSLD
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000029
- - Name: main
- Type: STT_FUNC
- Section: .text
- - Name: tls0
- Type: STT_TLS
- Section: .tbss
- Size: 0x0000000000000004
- - Name: tls1
- Type: STT_TLS
- Section: .tbss
- Value: 0x0000000000000004
- Size: 0x0000000000000004
- - Name: tls2
- Type: STT_TLS
- Section: .tdata
- Size: 0x0000000000000004
- - Name: _GLOBAL_OFFSET_TABLE_
- - Name: __tls_get_addr
-...
diff --git a/test/elf/group-cmd-search.test b/test/elf/group-cmd-search.test
deleted file mode 100644
index 5e153c1ac1ad..000000000000
--- a/test/elf/group-cmd-search.test
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- XFAIL: win32
-
- This test does not pass on Windows because a path starting with
- "/" is not considered as an absolute path. (It needs a drive
- letter.)
-*/
-
-/*
- In general the linker scripts's GROUP command works like a pair
- of command line options --start-group/--end-group. But there is
- a difference in the files look up algorithm.
-
- The --start-group/--end-group commands use a trivial approach:
- a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
- suffix and search the path through library search directories.
- b) Otherwise, use the path 'as-is'.
-
- The GROUP command implements more compicated approach:
- a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
- suffix and search the path through library search directories.
- b) If the path does not have '-l' prefix, and sysroot is configured,
- and the path starts with the / character, and the script being
- processed is located inside the sysroot, search the path under
- the sysroot. Otherwise, try to open the path in the current
- directory. If it is not found, search through library search
- directories.
-*/
-
-/*
- This link should finish successfully. The --start-group/--end-group
- contains an existing absolute path to the file.
-
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: --start-group %p/Inputs/shared.so-x86-64 --end-group -o %t1
-*/
-
-/*
- This link should fail with unknown input file format error.
- There is no shared.so-x86-64 file in the current directory.
-
-RUN: not \
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: --start-group shared.so-x86-64 --end-group -o %t2
-*/
-
-/*
- This link should fail with unknown input file format error.
- The absolute path /shared.so-x86-64 does not exist and the linker
- should not attempt to search it under the sysroot directory.
-
-RUN: not \
-RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: --start-group /shared.so-x86-64 --end-group -o %t3
-*/
-
-/*
- This link should finish successfully. The group-cmd-search-1.ls
- script contains "GROUP ( shared.so-x86-64 )" command and the linker
- has to search shared.so-x86-64 through the library search paths.
-
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/group-cmd-search-1.ls -o %t4
-*/
-
-/*
- This link should fail with unknown input file format error.
- The group-cmd-search-2.ls script contains GROUP command with
- a non-existing absolute path but there is no --sysroot argument.
-
-RUN: not \
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/group-cmd-search-2.ls -o %t5
-*/
-
-/*
- This link should finish successfully. The group-cmd-search-2.ls
- script contains GROUP command with an absolute path and the sysroot
- directory is provided. The linker has to search the absolute path
- under the sysroot directory.
-
-RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
-*/
-
-/*
- This link should finish successfully. The group-cmd-search-2.ls
- script contains GROUP command with an absolute path and the sysroot
- directory is provided. The linker has to search the absolute path
- under the sysroot directory.
-
-RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs/../Inputs \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
-*/
-
-/*
- This link should finish successfully. The group-cmd-search-3.ls
- script contains GROUP command with two elements. The first one
- has a -l:<path> form and should be found by iterating through
- lib dirs and searching the 'path' name exactly. The second element
- has a -l<lib name> form and should be found by constructing a full
- library name lib<lib name>.a and iterating through lib dirs.
-
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/group-cmd-search-3.ls -o %t8
-*/
-
-/*
- This link should fail with unknown input file format error.
- The linker script from this file contains GROUP with an absolute
- path which can be found under provided sysroot directory.
- But the linker script itself is not under the sysroot.
-
-RUN: not \
-RUN: lld -flavor gnu -target x86_64 -shared --sysroot=%p/Inputs \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: %s -o %t7
-*/
-
-/*
-RUN: lld -flavor gnu -target x86_64 -shared \
-RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
-RUN: -l:group-cmd-search-1.ls -o %t9
-*/
-
-GROUP ( /shared.so-x86-64 )
diff --git a/test/elf/hexagon-quickdata-sort.test b/test/elf/hexagon-quickdata-sort.test
deleted file mode 100644
index efdf9480923d..000000000000
--- a/test/elf/hexagon-quickdata-sort.test
+++ /dev/null
@@ -1,12 +0,0 @@
-RUN: lld -flavor gnu -target hexagon %p/Inputs/quickdata-sort-test.o.elf-hexagon -o %t1 --noinhibit-exec
-RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSort
-
-quickdataSort: 00002000 D A1
-quickdataSort: 00002001 D AA1
-quickdataSort: 00002002 D B1
-quickdataSort: 00002004 D BB1
-quickdataSort: 00002008 D C1
-quickdataSort: 0000200c D CC1
-quickdataSort: 00002010 D D1
-quickdataSort: 00002018 D DD1
-
diff --git a/test/elf/hexagon-quickdata-sortcommon.test b/test/elf/hexagon-quickdata-sortcommon.test
deleted file mode 100644
index 5b4690b43cb9..000000000000
--- a/test/elf/hexagon-quickdata-sortcommon.test
+++ /dev/null
@@ -1,16 +0,0 @@
-RUN: lld -flavor gnu -target hexagon -o %t1 --noinhibit-exec \
-RUN: %p/Inputs/quickdata-sortcommon-test.o.elf-hexagon
-RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSortCommon
-
-quickdataSortCommon: 00002000 D A1
-quickdataSortCommon: 00002001 D AA1
-quickdataSortCommon: 00002002 D AAA1
-quickdataSortCommon: 00002004 D B1
-quickdataSortCommon: 00002006 D BB1
-quickdataSortCommon: 00002008 D BBB1
-quickdataSortCommon: 0000200c D C1
-quickdataSortCommon: 00002010 D CC1
-quickdataSortCommon: 00002014 D CCC1
-quickdataSortCommon: 00002018 D D1
-quickdataSortCommon: 00002020 D DD1
-quickdataSortCommon: 00002028 D DDD1
diff --git a/test/elf/ifunc.test b/test/elf/ifunc.test
deleted file mode 100644
index c567c554cbbb..000000000000
--- a/test/elf/ifunc.test
+++ /dev/null
@@ -1,69 +0,0 @@
-# REQUIRES: x86
-
-# This test checks that IRELATIVE relocations are created for symbols that
-# need relocation even for static links.
-RUN: lld -flavor gnu -target x86_64-linux --output-filetype=yaml -r \
-RUN: %p/Inputs/ifunc.x86-64 | FileCheck %s
-
-RUN: lld -flavor gnu -target x86_64-linux --output-filetype=yaml --noinhibit-exec \
-RUN: %p/Inputs/ifunc.x86-64 %p/Inputs/ifunc.cpp.x86-64 \
-RUN: | FileCheck %s --check-prefix=PLT
-
-RUN: lld -flavor gnu -target x86_64-linux -o %t %p/Inputs/ifunc.x86-64 \
-RUN: -e main -static %p/Inputs/ifunc.cpp.x86-64
-RUN: llvm-objdump -d -s %t| FileCheck %s --check-prefix=BIN
-RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=RELATIVEADDEND
-
-# Test that STT_GNU_IFUNC symbols have type Code in SharedLibraryAtom.
-RUN: lld -flavor gnu -target x86_64-linux --output-filetype=yaml \
-RUN: --noinhibit-exec %p/Inputs/ifunc.cpp.x86-64 -L%p/Inputs -lifunc.x86-64 \
-RUN: | FileCheck %s --check-prefix=SHARED
-
-PLT: defined-atoms:
-
-PLT: name: plt
-PLT: scope: global
-PLT: references:
-PLT: kind: R_X86_64_PC32
-PLT: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
-
-PLT: name: main
-PLT: scope: global
-PLT: references:
-PLT: kind: R_X86_64_PC32
-PLT: target: [[PLTNAME]]
-
-// Make sure the target of main's relocation is a stub with a PC32 relocation.
-// This relocation is to the got atom, but you can't really write that check in
-// FileCheck.
-PLT: name:
-PLT: type: stub
-PLT: references
-PLT: kind: R_X86_64_PC32
-
-// Make sure there's a got entry with a IRELATIVE relocation.
-PLT: type: got
-PLT: references:
-PLT: kind: R_X86_64_IRELATIVE
-PLT: target: hey
-
-CHECK: name: hey
-CHECK: scope: global
-CHECK: type: resolver
-
-
-// This is a horribly brittle test. We need a way to do arithmetic on captured
-// variables.
-BIN: {{[0-9a-f]+}}: ff 25 {{[0-9a-f]+}} {{[0-9a-f]+}} 00 00 jmpq *{{[0-9]+}}(%rip)
-BIN: .got.plt:
-BIN-NEXT: {{[0-9a-f]+}} 00000000 00000000
-
-RELATIVEADDEND: Relocations [
-RELATIVEADDEND-NEXT: Section (1) .rela.plt {
-RELATIVEADDEND-NEXT: 0x401000 R_X86_64_IRELATIVE - 0x400110
-RELATIVEADDEND-NEXT: }
-RELATIVEADDEND-NEXT: ]
-
-SHARED: shared-library-atoms
-SHARED: name: hey
-SHARED-NOT: data
diff --git a/test/elf/ignore-unknownoption.test b/test/elf/ignore-unknownoption.test
deleted file mode 100644
index 56856ed9f2e4..000000000000
--- a/test/elf/ignore-unknownoption.test
+++ /dev/null
@@ -1,5 +0,0 @@
-# This test tests that lld is able to print unknown options that are not
-# recognized.
-RUN: not lld -flavor gnu -target x86_64 --gc-sections 2> %t
-RUN: FileCheck %s < %t
-CHECK: warning: ignoring unknown argument: --gc-sections
diff --git a/test/elf/init_array-order.test b/test/elf/init_array-order.test
deleted file mode 100644
index b57b3807b69c..000000000000
--- a/test/elf/init_array-order.test
+++ /dev/null
@@ -1,67 +0,0 @@
-#RUN: yaml2obj -format=elf %s > %t
-#RUN: lld -flavor gnu -target x86_64-linux %t --noinhibit-exec \
-#RUN: -o %t1.out
-#RUN: llvm-objdump -s %t1.out | FileCheck %s
-
-!ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: "1100000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .init_array.2
- Type: SHT_INIT_ARRAY
- Content: "0200000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC]
-- Name: .init_array.3
- Type: SHT_INIT_ARRAY
- Content: "0300000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC]
-- Name: .init_array
- Type: SHT_INIT_ARRAY
- Content: "9900000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC]
-- Name: .data
- Type: SHT_PROGBITS
- Content: "2200000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC, SHF_WRITE]
-- Name: .init_array.1
- Type: SHT_INIT_ARRAY
- Content: "0100000000000000"
- AddressAlign: 8
- Flags: [SHF_ALLOC]
-
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .init_array.3
- Type: STT_SECTION
- Section: .init_array.3
- - Name: .init_array.2
- Type: STT_SECTION
- Section: .init_array.2
- - Name: .init_array.1
- Type: STT_SECTION
- Section: .init_array.1
- - Name: .init_array
- Type: STT_SECTION
- Section: .init_array
-
-#CHECK: {{[0xa-f0-9]+}} 01000000 00000000 02000000 00000000
-#CHECK: {{[0xa-f0-9]+}} 03000000 00000000 99000000 00000000
diff --git a/test/elf/init_array.test b/test/elf/init_array.test
deleted file mode 100644
index 1acf4a7e7a28..000000000000
--- a/test/elf/init_array.test
+++ /dev/null
@@ -1,6 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux -o %t %p/Inputs/init_array.x86-64 \
-RUN: -e __init_array_start
-RUN: llvm-objdump -t -section-headers %t | FileCheck %s
-
-CHECK: .init_array {{[0-9]+}} [[ADDR:[0-9]+]]
-CHECK: [[ADDR]] g *ABS* {{[0-9]+}} __init_array_start
diff --git a/test/elf/initfini-options.test-1.test b/test/elf/initfini-options.test-1.test
deleted file mode 100644
index 2fc1c3e32bda..000000000000
--- a/test/elf/initfini-options.test-1.test
+++ /dev/null
@@ -1,33 +0,0 @@
-# Check that if there are no -init/-fini options and _init/_fini symbols
-# are undefined the linker does not emit DT_INIT/DT_FINI tags.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target x86_64 -shared --noinhibit-exec -o %t.so %t.o
-# RUN: llvm-readobj -dynamic-table %t.so | FileCheck %s
-
-# CHECK-NOT: 0x000000000000000C INIT 0x{{[0-9A-F]+}}
-# CHECK-NOT: 0x000000000000000D FINI 0x{{[0-9A-F]+}}
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x08
-
-Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Size: 0x08
- - Name: _init
- - Name: _fini
-...
diff --git a/test/elf/initfini-options.test-2.test b/test/elf/initfini-options.test-2.test
deleted file mode 100644
index 4742084c513b..000000000000
--- a/test/elf/initfini-options.test-2.test
+++ /dev/null
@@ -1,47 +0,0 @@
-# Check that if _init/_fini symbols are defined the linker emits
-# DT_INIT/DT_FINI tags point to these symbols.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target x86_64 -shared -o %t.so %t.o
-# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
-
-# CHECK: Name: _init (8)
-# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
-# CHECK: Name: _fini (14)
-# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
-#
-# CHECK: 0x000000000000000C INIT {{[0x0-9a-f]+}}
-# CHECK: 0x000000000000000D FINI {{[0x0-9a-f]+}}
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x18
-
-Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x0
- Size: 0x8
- - Name: _init
- Type: STT_FUNC
- Section: .text
- Value: 0x8
- Size: 0x8
- - Name: _fini
- Type: STT_FUNC
- Section: .text
- Value: 0xF
- Size: 0x8
-...
diff --git a/test/elf/initfini-options.test-3.test b/test/elf/initfini-options.test-3.test
deleted file mode 100644
index bf8b216775d9..000000000000
--- a/test/elf/initfini-options.test-3.test
+++ /dev/null
@@ -1,53 +0,0 @@
-# Check that -init/-fini command line options override default function names
-# and the linker uses these name to search symbols and setup DT_INIT/DT_FINI.
-
-# RUN: yaml2obj -format=elf %s > %t.o
-# RUN: lld -flavor gnu -target x86_64 -shared -o %t.so %t.o \
-# RUN: -init _init -init _start -fini _fini -fini _stop
-# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
-
-# CHECK: Name: _start (1)
-# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
-# CHECK: Name: _stop (8)
-# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
-#
-# CHECK: 0x000000000000000C INIT {{[0x0-9a-f]+}}
-# CHECK: 0x000000000000000D FINI {{[0x0-9a-f]+}}
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x04
- Size: 0x20
-
-Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x0
- Size: 0x8
- - Name: _stop
- Type: STT_FUNC
- Section: .text
- Value: 0x8
- Size: 0x8
- - Name: _init
- Type: STT_FUNC
- Section: .text
- Value: 0xF
- Size: 0x8
- - Name: _fini
- Type: STT_FUNC
- Section: .text
- Value: 0x18
- Size: 0x8
-...
diff --git a/test/elf/librarynotfound.test b/test/elf/librarynotfound.test
deleted file mode 100644
index faa1728b478b..000000000000
--- a/test/elf/librarynotfound.test
+++ /dev/null
@@ -1,5 +0,0 @@
-# Tests the functionality of library not found
-RUN: not lld -flavor gnu -lfn 2> %t1
-RUN: FileCheck %s < %t1
-
-CHECK: Unable to find library -lfn
diff --git a/test/elf/linker-as-ld.test b/test/elf/linker-as-ld.test
deleted file mode 100644
index 8ac75275f996..000000000000
--- a/test/elf/linker-as-ld.test
+++ /dev/null
@@ -1,16 +0,0 @@
-REQUIRES: system-linker-elf
-
-RUN: mkdir -p %t.dir && cp `which lld` %t.dir/ld
-RUN: %t.dir/ld -target x86_64-linux -o %t %p/Inputs/relocs.x86-64 \
-RUN: -e _start -static
-RUN: llvm-readobj -t %t | FileCheck %s
-
-# Test linker run as "ld" on elf based system works like gnu linker.
-
-
-CHECK: Symbol {
-CHECK: Name: i
-CHECK-NEXT: Value:
-CHECK-NEXT: Size:
-CHECK-NEXT: Binding:
-CHECK-NEXT: Type: Object
diff --git a/test/elf/linkerscript/Inputs/prog1.o.yaml b/test/elf/linkerscript/Inputs/prog1.o.yaml
deleted file mode 100644
index ded590e395d4..000000000000
--- a/test/elf/linkerscript/Inputs/prog1.o.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E5B000E800000000BF01000000BA0E0000004889C6E80000000031C05DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000007
- Symbol: prog2
- Type: R_X86_64_PC32
- Addend: -4
- - Offset: 0x0000000000000019
- Symbol: write
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742036336134646334616430343938646139623934386330383263623735336430353735323938346638292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623838363135326664656538376564653738613565643965616638663664313839343033616266312900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000002100000000410E108602430D0600000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000021
- - Name: prog2
- - Name: write
-...
diff --git a/test/elf/linkerscript/Inputs/prog2.o.yaml b/test/elf/linkerscript/Inputs/prog2.o.yaml
deleted file mode 100644
index f88b0ddc96b2..000000000000
--- a/test/elf/linkerscript/Inputs/prog2.o.yaml
+++ /dev/null
@@ -1,89 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E548B800000000000000005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000006
- Symbol: .rodata.str1.1
- Type: R_X86_64_64
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .rodata.str1.1
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 48656C6C6F2C20776F726C64210A00
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742036336134646334616430343938646139623934386330383263623735336430353735323938346638292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623838363135326664656538376564653738613565643965616638663664313839343033616266312900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000001000000000410E108602430D0600000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .rodata.str1.1
- Type: STT_SECTION
- Section: .rodata.str1.1
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: prog2
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000010
-...
diff --git a/test/elf/linkerscript/Inputs/prog3.o.yaml b/test/elf/linkerscript/Inputs/prog3.o.yaml
deleted file mode 100644
index 76aa22267f0b..000000000000
--- a/test/elf/linkerscript/Inputs/prog3.o.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: B8010000000F05C3E800000000B83C0000000F05C3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000009
- Symbol: main
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: _start
- Section: .text
- Value: 0x0000000000000008
- - Name: write
- Section: .text
- - Name: main
-...
diff --git a/test/elf/linkerscript/Inputs/simple.o.yaml b/test/elf/linkerscript/Inputs/simple.o.yaml
deleted file mode 100644
index 91d4e1b57786..000000000000
--- a/test/elf/linkerscript/Inputs/simple.o.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: B80100000048C7C70100000048C7C60000000048C7C20E0000000F05C3E8DEFFFFFFB83C0000000F05C3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x000000000000000F
- Symbol: .data
- Type: R_X86_64_32S
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: 48656C6C6F2C20576F726C64210A00
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
-Symbols:
- Local:
- - Name: main
- Section: .text
- - Name: msg
- Section: .data
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: _start
- Section: .text
- Value: 0x000000000000001D
-...
diff --git a/test/elf/linkerscript/externs.objtxt b/test/elf/linkerscript/externs.objtxt
deleted file mode 100644
index 154891eaf710..000000000000
--- a/test/elf/linkerscript/externs.objtxt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Check symbols defined with the EXTERN command are added as undefined
-# symbols.
-
-# RUN: lld -flavor gnu -target x86_64 -T %p/Inputs/externs.ls -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-defined-atoms:
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
-
-# CHECK: undefined-atoms:
-# CHECK: - name: _foo
-# CHECK: can-be-null: at-buildtime
-# CHECK: - name: bar
-# CHECK: can-be-null: at-buildtime
-# CHECK: - name: __baz
-# CHECK: can-be-null: at-buildtime
diff --git a/test/elf/linkerscript/invalid-script-cli-1.test b/test/elf/linkerscript/invalid-script-cli-1.test
deleted file mode 100644
index 904ba17557c0..000000000000
--- a/test/elf/linkerscript/invalid-script-cli-1.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# Check that the -T/--script options issue an error when passed
-# filenames for files that do not exist.
-
-RUN: not lld -flavor gnu -target x86_64 -T idonotexist.ls 2> %t.err
-RUN: FileCheck %s < %t.err
-
-RUN: not lld -flavor gnu -target x86_64 --script=idonotexist.ls 2> %t.err
-RUN: FileCheck %s < %t.err
-
-CHECK: {{.*}}lld: cannot find file {{.*}}idonotexist.ls
diff --git a/test/elf/linkerscript/invalid-script-cli-2.test b/test/elf/linkerscript/invalid-script-cli-2.test
deleted file mode 100644
index 6e0e42adc71d..000000000000
--- a/test/elf/linkerscript/invalid-script-cli-2.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# Check that linker script are *not* picked up with -lscript.ls.
-
-RUN: not lld -flavor gnu -target x86_64 -L%p/Inputs/ -lvalid.ls 2> %t.err
-RUN: FileCheck %s < %t.err
-
-CHECK: {{.*}}: Unable to find library -lvalid.ls
diff --git a/test/elf/linkerscript/invalid.test b/test/elf/linkerscript/invalid.test
deleted file mode 100644
index 42833a6664ff..000000000000
--- a/test/elf/linkerscript/invalid.test
+++ /dev/null
@@ -1,5 +0,0 @@
-# Check for errors from invalid linker scripts
-RUN: not lld -flavor gnu -target x86_64 %p/Inputs/invalid.ls 2> %t.err
-RUN: FileCheck %s < %t.err
-
-CHECK: {{.*}}invalid.ls: Error parsing linker script
diff --git a/test/elf/linkerscript/sections-order.test b/test/elf/linkerscript/sections-order.test
deleted file mode 100644
index 85a172cb07ad..000000000000
--- a/test/elf/linkerscript/sections-order.test
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Tests a simple linker script that changes the order of output sections and
-also changes the address of output sections by using simple expressions.
-
-This test uses three X86-64 input objects, prog1.o, prog2.o and prog3.o,
-which were created with the following C or assembly code:
-
-*** prog1.o:
-
-(command line clang -c prog1.c -o prog1.o)
-
-const char *prog2();
-void write(int, const char *, int);
-
-int main() {
- write(1, prog2(), 14);
-}
-
-*** prog2.o:
-
-(command line clang -c prog2.c -o prog2.o)
-
-const char *prog2() {
- return "Hello, world!\n";
-}
-
-*** prog3.o:
-
-(command line clang -c prog3.S -o prog3.o)
-
- .globl write
-write:
- mov $1, %eax
- syscall
- ret
-
- .globl _start
-_start:
- call main
- mov $60, %eax
- syscall
- ret
-
-We use the following linker script for this test:
-*/
-
-ENTRY(_start)
-
-SECTIONS
-{
- . = 0x500000;
- .text : { prog1.o(.text) }
- .mystring : { prog2.o(.rodata.str1.1) }
- . = . + 0x6000;
- .text.2 : {prog3.o(.text) prog2.o(.text) }
-}
-
-/*
-RUN: mkdir -p %T
-RUN: yaml2obj -format=elf %p/Inputs/prog1.o.yaml -o=%T/prog1.o
-RUN: yaml2obj -format=elf %p/Inputs/prog2.o.yaml -o=%T/prog2.o
-RUN: yaml2obj -format=elf %p/Inputs/prog3.o.yaml -o=%T/prog3.o
-RUN: cd %T
-
-RUN: lld -flavor gnu -target x86_64 -T %s prog1.o prog2.o prog3.o \
-RUN: -static -o %t1
-RUN: llvm-readobj -s %t1 | FileCheck -check-prefix CHECKSECTIONS %s
-
-CHECKSECTIONS: Index: 1
-CHECKSECTIONS: Name: .text
-CHECKSECTIONS: Address: 0x500000
-CHECKSECTIONS: Size: 33
-
-CHECKSECTIONS: Index: 2
-CHECKSECTIONS: Name: .mystring
-CHECKSECTIONS: Address: 0x500021
-CHECKSECTIONS: Size: 15
-
-CHECKSECTIONS: Index: 3
-CHECKSECTIONS: Name: .text.2
-CHECKSECTIONS: Address: 0x506030
-CHECKSECTIONS: Size: 48
-
-RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-CHECKSYMS: Name: main
-CHECKSYMS-NEXT: Value: 0x500000
-
-CHECKSYMS: Name: write
-CHECKSYMS-NEXT: Value: 0x506030
-
-CHECKSYMS: Name: _start
-CHECKSYMS-NEXT: Value: 0x506038
-
-CHECKSYMS: Name: prog2
-CHECKSYMS-NEXT: Value: 0x506050
-*/
diff --git a/test/elf/linkerscript/sections-with-wildcards.test b/test/elf/linkerscript/sections-with-wildcards.test
deleted file mode 100644
index 6af80d0883de..000000000000
--- a/test/elf/linkerscript/sections-with-wildcards.test
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-Tests a linker script that uses the SECTIONS command with rules containing
-wildcards and simple SORT directives. It also tests that the linker script
-evaluates the expressions in the same order as the one written in the script
-file.
-
-This test uses three X86-64 input objects, prog1.o, prog2.o and prog3.o,
-which were created with the following C or assembly code:
-
-*** prog1.o:
-
-(command line clang -c prog1.c -o prog1.o)
-
-const char *prog2();
-void write(int, const char *, int);
-
-int main() {
- write(1, prog2(), 14);
-}
-
-*** prog2.o:
-
-(command line clang -c prog2.c -o prog2.o)
-
-const char *prog2() {
- return "Hello, world!\n";
-}
-
-*** prog3.o:
-
-(command line clang -c prog3.S -o prog3.o)
-
- .globl write
-write:
- mov $1, %eax
- syscall
- ret
-
- .globl _start
-_start:
- call main
- mov $60, %eax
- syscall
- ret
-
-We use the following linker script for this test:
-*/
-
-ENTRY(_start)
-
-SECTIONS
-{
- my_start_addr = 0x500000;
- my_symbol = my_start_addr;
- . = my_symbol;
- .foo : { SORT(*)(.text .rodata*) }
-}
-
-/*
-RUN: mkdir -p %T
-RUN: yaml2obj -format=elf %p/Inputs/prog1.o.yaml -o=%T/p1.o
-RUN: yaml2obj -format=elf %p/Inputs/prog2.o.yaml -o=%T/p2.o
-RUN: yaml2obj -format=elf %p/Inputs/prog3.o.yaml -o=%T/p3.o
-RUN: cd %T
-
-RUN: lld -flavor gnu -target x86_64 -T %s p1.o p2.o p3.o \
-RUN: -static -o %t1
-RUN: llvm-readobj -s %t1 | FileCheck -check-prefix CHECKSECTIONS %s
-
-CHECKSECTIONS: Index: 1
-CHECKSECTIONS: Name: .foo
-CHECKSECTIONS: Address: 0x500000
-CHECKSECTIONS: Size: 101
-
-RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-CHECKSYMS: Name: main
-CHECKSYMS-NEXT: Value: 0x500000
-
-CHECKSYMS: Name: prog2
-CHECKSYMS-NEXT: Value: 0x500030
-
-CHECKSYMS: Name: write
-CHECKSYMS-NEXT: Value: 0x500050
-
-CHECKSYMS: Name: _start
-CHECKSYMS-NEXT: Value: 0x500058
-*/
diff --git a/test/elf/linkerscript/symbol-definition.test b/test/elf/linkerscript/symbol-definition.test
deleted file mode 100644
index fc595bbe1f10..000000000000
--- a/test/elf/linkerscript/symbol-definition.test
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-We test whether we can define symbols in a linker script and have them exported
-to the output file symbol table.
-
-This test uses a single X86-64 input object, simple.o, created with the
-following X86-64 assembly code:
-
-*** simple.S:
-
-(command line clang -c simple.S -o simple.o)
-
- .text
- main:
- mov $1, %eax
- movq $1, %rdi
- movq $msg, %rsi
- movq $14, %rdx
- syscall
- ret
-
- .globl _start
- _start:
- call main
- mov $60, %eax
- syscall
- ret
-
- .data
- msg: .asciz "Hello, World!\n"
-
-
-We use the following linker script for this test:
-*/
-
-ENTRY(_start)
-
-SECTIONS
-{
- . = 0x500000;
- .text : { *(.text) }
- MYSTRING = .;
- .data : { *(.data) }
-}
-
-/*
-RUN: mkdir -p %T
-RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%T/simple.o
-
-RUN: lld -flavor gnu -target x86_64 -T %s %T/simple.o -static -o %t1
-RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-CHECKSYMS: Name: MYSTRING
-CHECKSYMS-NEXT: Value: 0x501000
-*/
diff --git a/test/elf/linkerscript/valid-script-cli.objtxt b/test/elf/linkerscript/valid-script-cli.objtxt
deleted file mode 100644
index b68d430fd98e..000000000000
--- a/test/elf/linkerscript/valid-script-cli.objtxt
+++ /dev/null
@@ -1,23 +0,0 @@
-# Check that the linker script inputs are accepted properly.
-
-# RUN: lld -flavor gnu -target x86_64 %p/Inputs/valid.ls -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-# RUN: lld -flavor gnu -target x86_64 -T %p/Inputs/valid.ls -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-# RUN: lld -flavor gnu -target x86_64 --script=%p/Inputs/valid.ls -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-# RUN: lld -flavor gnu -target x86_64 -L%p/Inputs/ -l:valid.ls -r %s \
-# RUN: --output-filetype=yaml | FileCheck %s
-
-defined-atoms:
- - name: main
- scope: global
- content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
-
-# CHECK: _entry_point
diff --git a/test/elf/loginputfiles.test b/test/elf/loginputfiles.test
deleted file mode 100644
index 850570d8085e..000000000000
--- a/test/elf/loginputfiles.test
+++ /dev/null
@@ -1,28 +0,0 @@
-# Tests functionality of -t
-#
-# Tests generated using the source files below
-# main file
-# int main()
-# {
-# fn();
-# return 0;
-# }
-#
-# archive file
-# int fn()
-# {
-# return 0;
-# }
-#
-# int fn1()
-# {
-# return 0;
-# }
-# gcc -c main.c fn.c fn1.c
-
-RUN: lld -flavor gnu -target x86_64-linux \
-RUN: %p/Inputs/mainobj.x86_64 %p/Inputs/libfnarchive.a -t --noinhibit-exec 2>&1 | \
-RUN: FileCheck -check-prefix INPUTFILES %s
-
-#INPUTFILES: mainobj.x86_64
-#INPUTFILES: libfnarchive.a(fn.o)
diff --git a/test/elf/mergeatoms.test b/test/elf/mergeatoms.test
deleted file mode 100644
index 521eb5a12c3c..000000000000
--- a/test/elf/mergeatoms.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# Tests that atoms are merged by testing it with --merge-strings option
-RUN: lld -flavor gnu -target x86_64-linux --merge-strings -o %t1 \
-RUN: %p/Inputs/foo.o.x86-64 %p/Inputs/bar.o.x86-64 -e bar1
-RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=mergeAtoms %s
-
-mergeAtoms: 62617200 666f6f00 bar.foo.
diff --git a/test/elf/mergeconstants.test b/test/elf/mergeconstants.test
deleted file mode 100644
index 3d06d2c94438..000000000000
--- a/test/elf/mergeconstants.test
+++ /dev/null
@@ -1,20 +0,0 @@
-# The test checks for mergeable strings that appear in the object file
-RUN: lld -flavor gnu --merge-strings --output-filetype=yaml -target x86_64 \
-RUN: %p/Inputs/constants-merge.x86-64 --noinhibit-exec \
-RUN: | FileCheck -check-prefix=mergeAtoms %s
-
-mergeAtoms: - ref-name: [[CONSTANT:[-a-zA-Z0-9_]+]]
-mergeAtoms: type: constant
-mergeAtoms: content: [ 62, 61, 72, 66, 6F, 6F, 00 ]
-mergeAtoms: merge: by-content
-mergeAtoms: section-choice: custom-required
-mergeAtoms: section-name: .rodata.str1.1
-mergeAtoms: - name: foo
-mergeAtoms: scope: global
-mergeAtoms: type: data
-mergeAtoms: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-mergeAtoms: alignment: 2^3
-mergeAtoms: references:
-mergeAtoms: - kind: R_X86_64_64
-mergeAtoms: offset: 3
-mergeAtoms: target: [[CONSTANT]]
diff --git a/test/elf/mergeglobalatoms.test b/test/elf/mergeglobalatoms.test
deleted file mode 100644
index e71dca539915..000000000000
--- a/test/elf/mergeglobalatoms.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# ELF files can have mergeable strings which are global!, treat them as global
-# defined atoms
-RUN: lld -flavor gnu --output-filetype=yaml %p/Inputs/globalconst.o.x86-64 \
-RUN: --noinhibit-exec -target x86_64 | FileCheck -check-prefix=globalatoms %s
-
-globalatoms: - name: mystr
-globalatoms: scope: global
-globalatoms: type: constant
-globalatoms: content: [ 66, 6F, 6F, 62, 61, 72, 00 ]
-globalatoms: section-choice: custom-required
-globalatoms: section-name: .rodata.str1.1
diff --git a/test/elf/note.test b/test/elf/note.test
deleted file mode 100644
index f0e9c6b2f8d9..000000000000
--- a/test/elf/note.test
+++ /dev/null
@@ -1,49 +0,0 @@
-# Check that the linker is not ignoring input sections.
-# RUN: yaml2obj -format=elf %s > %t.obj
-# RUN: lld -flavor gnu -target x86_64 %t.obj -o %t.exe --noinhibit-exec
-# RUN: llvm-objdump -h %t.exe | FileCheck %s
-
-# CHECK: {{[0-9]+}} .note
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .note
- Type: SHT_NOTE
- AddressAlign: 0x0000000000000001
- Content: '00'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .note
- Type: STT_SECTION
- Section: .note
-...
diff --git a/test/elf/options/dynamic-linker.test b/test/elf/options/dynamic-linker.test
deleted file mode 100644
index 3d8feeb6e307..000000000000
--- a/test/elf/options/dynamic-linker.test
+++ /dev/null
@@ -1,17 +0,0 @@
-# This tests the functionality of specifying dynamic-linker argument in the
-# command line
-RUN: lld -flavor gnu -target x86_64 --dynamic-linker="/xyz.so" \
-RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t
-RUN: llvm-objdump -s %t | FileCheck -check-prefix=DYNAMICINTERP1 %s
-RUN: lld -flavor gnu -target x86_64 --dynamic-linker="" \
-RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t1
-RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=DYNAMICINTERP2 %s
-RUN: lld -flavor gnu -target x86_64 -dynamic-linker /xyz.so \
-RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t2
-RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=DYNAMICINTERP1 %s
-
-DYNAMICINTERP1:Contents of section .interp:
-DYNAMICINTERP1: 400158 2f78797a 2e736f00 /xyz.so.
-DYNAMICINTERP2:Contents of section .interp:
-DYNAMICINTERP2: 400158 00
-
diff --git a/test/elf/phdr.test b/test/elf/phdr.test
deleted file mode 100644
index c8ab73d31464..000000000000
--- a/test/elf/phdr.test
+++ /dev/null
@@ -1,99 +0,0 @@
-# This test checks emission for program header for ELF binaries
-RUN: lld -flavor gnu -target i386-linux -o %t1 -e main %p/Inputs/phdr.i386 \
-RUN: && llvm-readobj -program-headers %t1 | FileCheck -check-prefix=I386 %s
-RUN: lld -flavor gnu -target x86_64-linux -o %t1 -e _start %p/Inputs/relocs.x86-64 -static \
-RUN: && llvm-objdump -p %t1 | FileCheck %s -check-prefix=X86_64
-
-
-I386: ProgramHeaders [
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_PHDR (0x6)
-I386-NEXT: Offset: 0x34
-I386-NEXT: VirtualAddress: 0x34
-I386-NEXT: PhysicalAddress: 0x34
-I386-NEXT: FileSize: 224
-I386-NEXT: MemSize: 224
-I386-NEXT: Flags [ (0x5)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: PF_X (0x1)
-I386-NEXT: ]
-I386-NEXT: Alignment: 8
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_INTERP (0x3)
-I386-NEXT: Offset: 0x114
-I386-NEXT: VirtualAddress: 0x114
-I386-NEXT: PhysicalAddress: 0x114
-I386-NEXT: FileSize: 28
-I386-NEXT: MemSize: 28
-I386-NEXT: Flags [ (0x4)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: ]
-I386-NEXT: Alignment: 1
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_LOAD (0x1)
-I386-NEXT: Offset: 0x0
-I386-NEXT: VirtualAddress: 0x0
-I386-NEXT: PhysicalAddress: 0x0
-I386-NEXT: FileSize: 556
-I386-NEXT: MemSize: 556
-I386-NEXT: Flags [ (0x5)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: PF_X (0x1)
-I386-NEXT: ]
-I386-NEXT: Alignment: 4096
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_LOAD (0x1)
-I386-NEXT: Offset: 0x1000
-I386-NEXT: VirtualAddress: 0x1000
-I386-NEXT: PhysicalAddress: 0x1000
-I386-NEXT: FileSize: 260
-I386-NEXT: MemSize: 260
-I386-NEXT: Flags [ (0x6)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: PF_W (0x2)
-I386-NEXT: ]
-I386-NEXT: Alignment: 4096
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_LOAD (0x1)
-I386-NEXT: Offset: 0x4000
-I386-NEXT: VirtualAddress: 0x4000
-I386-NEXT: PhysicalAddress: 0x4000
-I386-NEXT: FileSize: 4
-I386-NEXT: MemSize: 8
-I386-NEXT: Flags [ (0x6)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: PF_W (0x2)
-I386-NEXT: ]
-I386-NEXT: Alignment: 16384
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_DYNAMIC (0x2)
-I386-NEXT: Offset: 0x1FC
-I386-NEXT: VirtualAddress: 0x1FC
-I386-NEXT: PhysicalAddress: 0x1FC
-I386-NEXT: FileSize: 48
-I386-NEXT: MemSize: 48
-I386-NEXT: Flags [ (0x4)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: ]
-I386-NEXT: Alignment: 4
-I386-NEXT: }
-I386-NEXT: ProgramHeader {
-I386-NEXT: Type: PT_GNU_EH_FRAME (0x6474E550)
-I386-NEXT: Offset: 0x1F4
-I386-NEXT: VirtualAddress: 0x1F4
-I386-NEXT: PhysicalAddress: 0x1F4
-I386-NEXT: FileSize: 8
-I386-NEXT: MemSize: 8
-I386-NEXT: Flags [ (0x4)
-I386-NEXT: PF_R (0x4)
-I386-NEXT: ]
-I386-NEXT: Alignment: 4
-I386-NEXT: }
-
-X86_64: LOAD off 0x0000000000000000
-X86_64: LOAD off 0x0000000000001000
diff --git a/test/elf/quickdata.test b/test/elf/quickdata.test
deleted file mode 100644
index a07771517226..000000000000
--- a/test/elf/quickdata.test
+++ /dev/null
@@ -1,15 +0,0 @@
-RUN: lld -flavor gnu -target hexagon --output-filetype=yaml %p/Inputs/quickdata-test.elf-hexagon \
-RUN: --noinhibit-exec | FileCheck %s -check-prefix hexagon
-
-hexagon: - name: ac1
-hexagon: scope: global
-hexagon: type: zero-fill-quick
-hexagon: size: 1
-hexagon: merge: as-tentative
-hexagon: - name: init
-hexagon: scope: global
-hexagon: type: quick-data
-hexagon: - name: bss1
-hexagon: scope: global
-hexagon: type: zero-fill-quick
-
diff --git a/test/elf/reloc.test b/test/elf/reloc.test
deleted file mode 100644
index 0ecf0b174fe8..000000000000
--- a/test/elf/reloc.test
+++ /dev/null
@@ -1,38 +0,0 @@
-RUN: lld -flavor gnu -target i386 --merge-strings -r --output-filetype=yaml \
-RUN: %p/Inputs/reloc-test.elf-i386 | FileCheck %s -check-prefix ELF-i386
-
-ELF-i386: defined-atoms:
-ELF-i386: - ref-name: [[STRNAMEA:[-a-zA-Z0-9_]+]]
-ELF-i386: type: constant
-ELF-i386: content: [ 68, 65, 6C, 6C, 6F, 20, 77, 6F, 72, 6C, 64, 00 ]
-ELF-i386: merge: by-content
-ELF-i386: - ref-name: [[STRNAMEB:[-a-zA-Z0-9_]+]]
-ELF-i386: alignment: 2^4
-ELF-i386: section-choice: custom-required
-ELF-i386: section-name: .text.startup
-ELF-i386: references:
-ELF-i386: - kind: layout-after
-ELF-i386: offset: 0
-ELF-i386: target: main
-ELF-i386: - name: main
-ELF-i386: scope: global
-ELF-i386: content: [ 55, 89, E5, 83, E4, F0, 83, EC, 10, C7, 04, 24,
-ELF-i386: 00, 00, 00, 00, E8, FC, FF, FF, FF, 31, C0, C9,
-ELF-i386: C3 ]
-ELF-i386: alignment: 2^4
-ELF-i386: section-choice: custom-required
-ELF-i386: section-name: .text.startup
-ELF-i386: references:
-ELF-i386: - kind: R_386_32
-ELF-i386: offset: 12
-ELF-i386: target: [[STRNAMEA]]
-ELF-i386: - kind: R_386_PC32
-ELF-i386: offset: 17
-ELF-i386: target: puts
-ELF-i386: addend: 252
-ELF-i386: undefined-atoms:
-ELF-i386: - name: puts
-ELF-i386: absolute-atoms:
-ELF-i386: - name: test.c
-ELF-i386: scope: static
-ELF-i386: value: 0x0000000000000000
diff --git a/test/elf/responsefile.test b/test/elf/responsefile.test
deleted file mode 100644
index 5957471bb661..000000000000
--- a/test/elf/responsefile.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: not lld -flavor gnu --abc @%p/Inputs/responsefile --baz >& %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK: warning: ignoring unknown argument: --abc
-CHECK: warning: ignoring unknown argument: --inresponsefile
-CHECK: warning: ignoring unknown argument: --baz
diff --git a/test/elf/rodata.test b/test/elf/rodata.test
deleted file mode 100644
index dfe6985c0733..000000000000
--- a/test/elf/rodata.test
+++ /dev/null
@@ -1,5 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux -o %t %p/Inputs/constdata.x86-64 \
-RUN: -static -e _start
-RUN: llvm-objdump -s %t | FileCheck %s
-
-CHECK: Hellooooooooo
diff --git a/test/elf/rosegment.test b/test/elf/rosegment.test
deleted file mode 100644
index 32638d8fce6f..000000000000
--- a/test/elf/rosegment.test
+++ /dev/null
@@ -1,26 +0,0 @@
-# Tests that the option --rosegment produces an output file with a separate
-# segment created for read only data.
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/rodata.o -o %t1.elf \
-RUN: --noinhibit-exec
-RUN: lld -flavor gnu -target x86_64 %p/Inputs/rodata.o --rosegment -o %t2.elf \
-RUN: --noinhibit-exec
-RUN: llvm-readobj -program-headers %t1.elf | FileCheck %s -check-prefix=NORO-SEGMENT
-RUN: llvm-readobj -program-headers %t2.elf | FileCheck %s -check-prefix=RO-SEGMENT
-
-#NORO-SEGMENT: Type: PT_PHDR
-#NORO-SEGMENT: Type: PT_INTERP
-#NORO-SEGMENT: Type: PT_LOAD
-#NORO-SEGMENT: Type: PT_LOAD
-#NORO-SEGMENT: Type: PT_DYNAMIC
-#NORO-SEGMENT: Type: PT_GNU_EH_FRAME
-
-#RO-SEGMENT: Type: PT_PHDR
-#RO-SEGMENT: Type: PT_INTERP
-#RO-SEGMENT: Type: PT_LOAD
-#RO-SEGMENT: Type: PT_LOAD
-#RO-SEGMENT: Flags [
-#RO-SEGMENT: PF_R (0x4)
-#RO-SEGMENT: ]
-#RO-SEGMENT: Type: PT_LOAD
-#RO-SEGMENT: Type: PT_DYNAMIC
-#RO-SEGMENT: Type: PT_GNU_EH_FRAME
diff --git a/test/elf/sectionGroups/sectiongroup-new-members.test b/test/elf/sectionGroups/sectiongroup-new-members.test
deleted file mode 100644
index d270c5fec94a..000000000000
--- a/test/elf/sectionGroups/sectiongroup-new-members.test
+++ /dev/null
@@ -1,153 +0,0 @@
-# Checks that the linker picks the first group in the output file when the file
-# have some members dont appear in the first group.
-# 1a.s
-# ------
-#
-# .section .text,"axG",%progbits,foo_group,comdat
-# .weak foo
-#foo:
-# .word 0
-# 1b.s
-# -----
-# .section .text,"axG",%progbits,foo_group,comdat
-# .global foo
-# .global bar
-#foo:
-# .word 0
-#bar:
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
-#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
-#CHECKGROUP: - name: foo
-#CHECKGROUP: scope: global
-#CHECKGROUP: merge: as-weak
-#CHECKGROUP: section-name: .text
-#CHECKGROUP: - name: foo_group
-#CHECKGROUP: scope: global
-#CHECKGROUP: type: group-comdat
-#CHECKGROUP: section-choice: custom-required
-#CHECKGROUP: section-name: .group
-#CHECKGROUP: permissions: ---
-#CHECKGROUP: references:
-#CHECKGROUP: - kind: group-child
-#CHECKGROUP: offset: 0
-#CHECKGROUP: target: foo
-#CHECKGROUPSECTIONS: Section {
-#CHECKGROUPSECTIONS: Name: .text
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [ (0x6)
-#CHECKGROUPSECTIONS: SHF_ALLOC (0x2)
-#CHECKGROUPSECTIONS: SHF_EXECINSTR (0x4)
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 2
-#CHECKGROUPSECTIONS: AddressAlignment: 1
-#CHECKGROUPSECTIONS: }
-#CHECKSYMBOLS: Name: foo
-#CHECKSYMBOLS: Type: Function
-#CHECKSYMBOLS: Section: .text
-#CHECKSYMBOLS-NOT: Name: bar
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: foo_group
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .text
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
-Symbols:
- Local:
- - Name: foo_group
- Section: .group
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Weak:
- - Name: foo
- Section: .text
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: foo_group
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .text
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
-Symbols:
- Local:
- - Name: foo_group
- Section: .group
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: bar
- Section: .text
- Value: 0x0000000000000002
- - Name: foo
- Section: .text
-...
diff --git a/test/elf/sectionGroups/sectiongroup-simple.test b/test/elf/sectionGroups/sectiongroup-simple.test
deleted file mode 100644
index 25be6033b0ef..000000000000
--- a/test/elf/sectionGroups/sectiongroup-simple.test
+++ /dev/null
@@ -1,146 +0,0 @@
-# Checks that the linker picks the first group in the output file when the file
-# have some members dont appear in the first group.
-# 1a.s
-# ------
-# .section .text,"axG",%progbits,foo_group,comdat
-# .weak foo
-#foo:
-# .word 0
-# 1b.s
-# -----
-# .section .text,"axG",%progbits,foo_group,comdat
-# .global bar
-#bar:
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
-#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
-#CHECKGROUP: - name: foo
-#CHECKGROUP: scope: global
-#CHECKGROUP: merge: as-weak
-#CHECKGROUP: section-name: .text
-#CHECKGROUP: - name: foo_group
-#CHECKGROUP: scope: global
-#CHECKGROUP: type: group-comdat
-#CHECKGROUP: section-choice: custom-required
-#CHECKGROUP: section-name: .group
-#CHECKGROUP: permissions: ---
-#CHECKGROUP: references:
-#CHECKGROUP: - kind: group-child
-#CHECKGROUP: offset: 0
-#CHECKGROUP: target: foo
-#CHECKGROUPSECTIONS: Section {
-#CHECKGROUPSECTIONS: Name: .text
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [ (0x6)
-#CHECKGROUPSECTIONS: SHF_ALLOC (0x2)
-#CHECKGROUPSECTIONS: SHF_EXECINSTR (0x4)
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 2
-#CHECKGROUPSECTIONS: AddressAlignment: 1
-#CHECKGROUPSECTIONS: }
-#CHECKSYMBOLS: Name: foo
-#CHECKSYMBOLS: Type: Function
-#CHECKSYMBOLS: Section: .text
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: foo_group
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .text
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
-Symbols:
- Local:
- - Name: foo_group
- Section: .group
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Weak:
- - Name: foo
- Section: .text
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: foo_group
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .text
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Local:
- - Name: foo_group
- Section: .group
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: bar
- Section: .text
-...
diff --git a/test/elf/sectionGroups/sectiongroup-undef-member-other.test b/test/elf/sectionGroups/sectiongroup-undef-member-other.test
deleted file mode 100644
index 78a5f276a4ca..000000000000
--- a/test/elf/sectionGroups/sectiongroup-undef-member-other.test
+++ /dev/null
@@ -1,158 +0,0 @@
-# Tests that linker throws an error for an undefined symbol in the section
-# group, which is the same as the signature in the next input file.
-# comdat1.s
-# ------------
-# .section .foo,"axG",@progbits,g1,comdat
-# .word g1
-#comdat2.s
-#-----------
-# .global g1
-# .section .bar,"axG",@progbits,g1,comdat
-#g2:
-# nop
-# .section .car,"axG",@progbits,g1,comdat
-#g3:
-# nop
-#
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec -o %t2.out 2>&1 | FileCheck %s
-#CHECK: Undefined symbol: {{.*}} g1
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - SectionOrType: .rela.foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
- - Name: .rela.foo
- Type: SHT_RELA
- Flags: [ SHF_GROUP ]
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .foo
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: g1
- Type: R_X86_64_16
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- - Name: .group
- Type: STT_SECTION
- Section: .group
- Global:
- - Name: g1
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .bar
- - SectionOrType: .car
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bar
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '90'
- - Name: .car
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '90'
-Symbols:
- Local:
- - Name: g2
- Section: .bar
- - Name: g3
- Section: .car
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .bar
- Type: STT_SECTION
- Section: .bar
- - Name: .car
- Type: STT_SECTION
- Section: .car
- - Name: .group
- Type: STT_SECTION
- Section: .group
- Global:
- - Name: g1
- Section: .group
-...
diff --git a/test/elf/sectionGroups/sectiongroup-undef-member.test b/test/elf/sectionGroups/sectiongroup-undef-member.test
deleted file mode 100644
index 2f6804d254d8..000000000000
--- a/test/elf/sectionGroups/sectiongroup-undef-member.test
+++ /dev/null
@@ -1,144 +0,0 @@
-# Tests that linker throws an error for an undefined symbol in the section
-# group.
-#
-#comdata.s
-#------------
-# .section .foo,"axG",@progbits,g1,comdat
-# .word g1
-#
-#comdatb.s
-#------------
-# .global g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# nop
-#
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
-#RUN: lld -flavor gnu -target x86_64 %t.group1a.o %t.group1b.o \
-#RUN: --noinhibit-exec -o %t2.out 2>&1 | FileCheck %s
-#CHECK: Undefined symbol: {{.*}} g1
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - SectionOrType: .rela.foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
- - Name: .rela.foo
- Type: SHT_RELA
- Flags: [ SHF_GROUP ]
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .foo
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: g1
- Type: R_X86_64_16
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- - Name: .group
- Type: STT_SECTION
- Section: .group
- Global:
- - Name: g1
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '90'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- - Name: .group
- Type: STT_SECTION
- Section: .group
- Global:
- - Name: g1
- Section: .foo
-...
diff --git a/test/elf/sectionGroups/sectiongroup-with-globalsymbols.test b/test/elf/sectionGroups/sectiongroup-with-globalsymbols.test
deleted file mode 100644
index 0a28e3c98907..000000000000
--- a/test/elf/sectionGroups/sectiongroup-with-globalsymbols.test
+++ /dev/null
@@ -1,253 +0,0 @@
-# This tests that comdat weak symbol can be overridden by a global symbol.
-# comdat1.s
-#------------------------
-# .weak g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# nop
-# .global g2
-#g2:
-# nop
-#!
-#
-#comdat2.s << \!
-#-----------------
-# .global g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# nop
-# .global g2
-#g2:
-# nop
-#
-#cat > g1.c << \!
-#int g1() {
-# return 0;
-#}
-#
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
-#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
-#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
-#CHECKGROUP: - name: g2
-#CHECKGROUP: content: [ 90 ]
-#CHECKGROUP: section-choice: custom-required
-#CHECKGROUP: section-name: .foo
-#CHECKGROUP: - name: g1
-#CHECKGROUP: scope: global
-#CHECKGROUP: content: [ 55, 48, 89, E5, 31, C0, 5D, C3 ]
-#CHECKGROUP: alignment: 2^4
-#CHECKGROUP: section-name: .text
-#CHECKGROUPSECTIONS: Name: .text
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [
-#CHECKGROUPSECTIONS: SHF_ALLOC
-#CHECKGROUPSECTIONS: SHF_EXECINSTR
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 8
-#CHECKGROUPSECTIONS: Name: .foo
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [
-#CHECKGROUPSECTIONS: SHF_ALLOC
-#CHECKGROUPSECTIONS: SHF_EXECINSTR
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 2
-#CHECKSYMBOLS: Name: g2
-#CHECKSYMBOLS: Section: .foo
-#CHECKSYMBOLS: Name: g1
-#CHECKSYMBOLS: Section: .text
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '9090'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g2
- Section: .foo
- Value: 0x0000000000000001
- Weak:
- - Name: g1
- Section: .foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '9090'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g1
- Section: .foo
- - Name: g2
- Section: .foo
- Value: 0x0000000000000001
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E531C05DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000000800000000410E108602430D0600000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: g1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: g1
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000008
-...
diff --git a/test/elf/sectionGroups/sectiongroup-with-undef-external-reference.test b/test/elf/sectionGroups/sectiongroup-with-undef-external-reference.test
deleted file mode 100644
index a90034ae6d21..000000000000
--- a/test/elf/sectionGroups/sectiongroup-with-undef-external-reference.test
+++ /dev/null
@@ -1,239 +0,0 @@
-# This tests that comdat undef symbol is overridden by a global symbol.
-# comdat1.s
-#------------------------
-# .global g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# .word 5
-#
-#comdat2.s << \!
-#-----------------
-# .global g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# nop
-#
-#g1.c
-#-----------
-#extern int g1;
-#int fn() { return g1;}
-#
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
-#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
-#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
-#CHECKGROUP: - name: g1
-#CHECKGROUP: scope: global
-#CHECKGROUP: content: [ 05, 00 ]
-#CHECKGROUP: section-name: .foo
-#CHECKGROUPSECTIONS: Section {
-#CHECKGROUPSECTIONS: Name: .foo
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [
-#CHECKGROUPSECTIONS: SHF_ALLOC
-#CHECKGROUPSECTIONS: SHF_EXECINSTR
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 2
-#CHECKGROUPSECTIONS: }
-#CHECKSYMBOLS: Name: g1
-#CHECKSYMBOLS: Section: .foo
-#CHECKSYMBOLS: Name: fn
-#CHECKSYMBOLS: Section: .text
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0500'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g1
- Section: .foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '90'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g1
- Section: .foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E58B0425000000005DC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000007
- Symbol: g1
- Type: R_X86_64_32S
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000000D00000000410E108602430D0600000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: global-g1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: fn
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000D
- - Name: g1
-...
diff --git a/test/elf/sectionGroups/sectiongroup-with-undef-signature.test b/test/elf/sectionGroups/sectiongroup-with-undef-signature.test
deleted file mode 100644
index 11cb5de40a63..000000000000
--- a/test/elf/sectionGroups/sectiongroup-with-undef-signature.test
+++ /dev/null
@@ -1,222 +0,0 @@
-# This tests that comdat undef symbol is overridden by a global symbol.
-# comdat1.s
-#------------------------
-# .section .foo,"axG",@progbits,g1,comdat
-# word g1
-#
-#comdat2.s << \!
-#-----------------
-# .global g1
-# .section .foo,"axG",@progbits,g1,comdat
-#g1:
-# nop
-#
-#global-g1.c
-#-----------
-#int g1=10;
-#
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
-#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
-#RUN: lld -flavor gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
-#RUN: %t.g1.o --noinhibit-exec -o %t2.out
-#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
-#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
-#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
-#CHECKGROUP: - name: g1
-#CHECKGROUP: scope: global
-#CHECKGROUP: content: [ 0A, 00, 00, 00 ]
-#CHECKGROUP: section-name: .data
-#CHECKGROUPSECTIONS: Name: .foo
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [
-#CHECKGROUPSECTIONS: SHF_ALLOC
-#CHECKGROUPSECTIONS: SHF_EXECINSTR
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 2
-#CHECKGROUPSECTIONS: Name: .data
-#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
-#CHECKGROUPSECTIONS: Flags [
-#CHECKGROUPSECTIONS: SHF_ALLOC
-#CHECKGROUPSECTIONS: SHF_WRITE
-#CHECKGROUPSECTIONS: ]
-#CHECKGROUPSECTIONS: Size: 4
-#CHECKSYMBOLS: Name: g1
-#CHECKSYMBOLS: Section: .data
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - SectionOrType: .rela.foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '0000'
- - Name: .rela.foo
- Type: SHT_RELA
- Flags: [ SHF_GROUP ]
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .foo
- Relocations:
- - Offset: 0x0000000000000000
- Symbol: g1
- Type: R_X86_64_16
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g1
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .group
- Type: SHT_GROUP
- Link: .symtab
- AddressAlign: 0x0000000000000004
- Info: g1
- Members:
- - SectionOrType: GRP_COMDAT
- - SectionOrType: .foo
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .foo
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
- AddressAlign: 0x0000000000000001
- Content: '90'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .foo
- Type: STT_SECTION
- Section: .foo
- Global:
- - Name: g1
- Section: .foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: 0A000000
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
-Symbols:
- Local:
- - Name: global-g1.c
- Type: STT_FILE
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- Global:
- - Name: g1
- Type: STT_OBJECT
- Section: .data
- Size: 0x0000000000000004
-...
diff --git a/test/elf/sections.test b/test/elf/sections.test
deleted file mode 100644
index 8839aa6d4e8a..000000000000
--- a/test/elf/sections.test
+++ /dev/null
@@ -1,142 +0,0 @@
-# This test checks if sections are created properly in the output that appear in
-# the input
-RUN: lld -flavor gnu -target i386 -o %t1 %p/Inputs/section-test.i386 \
-RUN: -static -e baz
-RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=OBJDUMP %s
-RUN: llvm-readobj -h -s -t %t1 | FileCheck -check-prefix=READOBJ %s
-
-OBJDUMP: 0 00000000 0000000000000000
-OBJDUMP: 1 .text 0000000a 0000000000000074 TEXT DATA
-OBJDUMP: 2 .data 00000004 0000000000001000 DATA
-OBJDUMP: 3 .special 00000004 0000000000001004 DATA
-OBJDUMP: 4 .anotherspecial 00000004 0000000000001008 DATA
-OBJDUMP: 5 .bss 00000004 000000000000100c BSS
-OBJDUMP: 6 .shstrtab {{[0-9a-f]+}} 0000000000000000
-OBJDUMP: 7 .symtab {{[0-9a-f]+}} 0000000000000000
-OBJDUMP: 8 .strtab {{[0-9a-f]+}} 0000000000000000
-
-READOBJ: Format: ELF32-i386
-READOBJ: Arch: i386
-READOBJ: AddressSize: 32bit
-READOBJ: ElfHeader {
-READOBJ: Ident {
-READOBJ: DataEncoding: LittleEndian (0x1)
-READOBJ: }
-READOBJ: Machine: EM_386
-READOBJ: }
-
-READOBJ: Sections [
-READOBJ: Section {
-READOBJ: Index: 0
-READOBJ: Name: (0)
-READOBJ: Type: SHT_NULL
-READOBJ: Flags [ (0x0)
-READOBJ: ]
-READOBJ: Address: 0x0
-READOBJ: Size: 0
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 1
-READOBJ: Name: .text
-READOBJ: Type: SHT_PROGBITS
-READOBJ: Flags [ (0x6)
-READOBJ: SHF_ALLOC
-READOBJ: SHF_EXECINSTR
-READOBJ: ]
-READOBJ: Address: 0x74
-READOBJ: Size: 10
-READOBJ: AddressAlignment: 4
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 2
-READOBJ: Name: .data
-READOBJ: Type: SHT_PROGBITS
-READOBJ: Flags [ (0x3)
-READOBJ: SHF_ALLOC
-READOBJ: SHF_WRITE
-READOBJ: ]
-READOBJ: Address: 0x1000
-READOBJ: Size: 4
-READOBJ: AddressAlignment: 4
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 3
-READOBJ: Name: .special
-READOBJ: Type: SHT_PROGBITS
-READOBJ: Flags [ (0x3)
-READOBJ: SHF_ALLOC
-READOBJ: SHF_WRITE
-READOBJ: ]
-READOBJ: Address: 0x1004
-READOBJ: Size: 4
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 4
-READOBJ: Name: .anotherspecial
-READOBJ: Type: SHT_PROGBITS
-READOBJ: Flags [ (0x3)
-READOBJ: SHF_ALLOC
-READOBJ: SHF_WRITE
-READOBJ: ]
-READOBJ: Address: 0x1008
-READOBJ: Size: 4
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 5
-READOBJ: Name: .bss
-READOBJ: Type: SHT_NOBITS
-READOBJ: Flags [ (0x3)
-READOBJ: SHF_ALLOC
-READOBJ: SHF_WRITE
-READOBJ: ]
-READOBJ: Address: 0x100C
-READOBJ: Size: 4
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 6
-READOBJ: Name: .shstrtab
-READOBJ: Type: SHT_STRTAB
-READOBJ: Flags [ (0x0)
-READOBJ: ]
-READOBJ: Address: 0x0
-READOBJ: Link: 0
-READOBJ: AddressAlignment: 1
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 7
-READOBJ: Name: .symtab
-READOBJ: Type: SHT_SYMTAB
-READOBJ: Flags [ (0x0)
-READOBJ: ]
-READOBJ: Address: 0x0
-READOBJ: Link: 8
-READOBJ: AddressAlignment: 4
-READOBJ: EntrySize: 16
-READOBJ: }
-READOBJ: Section {
-READOBJ: Index: 8
-READOBJ: Name: .strtab
-READOBJ: Type: SHT_STRTAB
-READOBJ: Flags [ (0x0)
-READOBJ: ]
-READOBJ: Address: 0x0
-READOBJ: }
-READOBJ: ]
-
-READOBJ: Symbols [
-READOBJ: Symbol {
-READOBJ: Name: baz
-READOBJ: Value: 0x74
-READOBJ: Size: 10
-READOBJ: Binding: Global
-READOBJ: Type: Function
-READOBJ: Section: .text
-READOBJ: }
-READOBJ: Symbol {
-READOBJ: Name: y
-READOBJ: Value: 0x1004
-READOBJ: Size: 4
-READOBJ: Binding: Global
-READOBJ: Type: Object
-READOBJ: Section: .special
-READOBJ: }
diff --git a/test/elf/sh_addralign.test b/test/elf/sh_addralign.test
deleted file mode 100644
index 9c7a050f565c..000000000000
--- a/test/elf/sh_addralign.test
+++ /dev/null
@@ -1,38 +0,0 @@
-# Check handling of section alignment.
-# RUN: yaml2obj -format=elf %s > %t-obj
-# RUN: lld -flavor gnu -target arm64 -o %t-exe %t-obj
-# RUN: llvm-objdump -h %t-exe | FileCheck %s
-
-# CHECK: 8 .data 00000000 0000000000402000 DATA
-
-!ELF
-FileHeader: !FileHeader
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_AARCH64
-
-Sections:
-- Name: .text
- Type: SHT_PROGBITS
- Content: ''
- AddressAlign: 0
- Flags: [SHF_ALLOC, SHF_EXECINSTR]
-- Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 1
- Content: ''
- Size: 0x1000
-- Name: .data
- Type: SHT_PROGBITS
- Content: ''
- AddressAlign: 4096
- Flags: [SHF_ALLOC, SHF_WRITE]
-
-Symbols:
- Global:
- - Name: _start
- Section: .text
- Value: 0x0
- Size: 4
diff --git a/test/elf/soname.test b/test/elf/soname.test
deleted file mode 100644
index 79c089ec607c..000000000000
--- a/test/elf/soname.test
+++ /dev/null
@@ -1,6 +0,0 @@
-RUN: lld -flavor gnu -shared -target i386 -e main %p/Inputs/writersyms.o \
-RUN: -o %t -soname libtest.so
-RUN: llvm-readobj -dynamic-table %t | FileCheck %s
-
-CHECK: LoadName: libtest.so
-CHECK: 0x0000000E SONAME LibrarySoname (libtest.so)
diff --git a/test/elf/strip-all.test b/test/elf/strip-all.test
deleted file mode 100644
index 44a41c2a0d9f..000000000000
--- a/test/elf/strip-all.test
+++ /dev/null
@@ -1,107 +0,0 @@
-# Tests the --strip-all (-s) flag. We expect the symbol table to not contain
-# any symbol in the output file.
-#
-# The following code was used to generate the object.
-# $ clang -c blah.c -o blah
-#
-# void
-# callMeMaybe(int *v)
-# {
-# *v += 1;
-# }
-#
-# int
-# main(void)
-# {
-#
-# int blah = 42;
-# callMeMaybe(&blah);
-# }
-
-#RUN: yaml2obj -format=elf %s -o=%t.o
-#RUN: lld -flavor gnu -target x86_64 %t.o -e=main --strip-all -o %t1
-#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-#CHECKSYMS: @
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_FREEBSD
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 554889E548897DF8488B7DF88B07050100000089075DC3660F1F840000000000554889E54883EC10488D7DFCC745FC2A000000E8C8FFFFFFB8000000004883C4105DC3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000001700000000410E108602430D060000001800000038000000000000002300000000410E108602430D06000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
- - Offset: 0x000000000000003C
- Symbol: .text
- Type: R_X86_64_PC32
- Addend: 32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: callMeMaybe
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000017
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000020
- Size: 0x0000000000000023
-...
diff --git a/test/elf/stripped-empty.test b/test/elf/stripped-empty.test
deleted file mode 100644
index 0403808db2eb..000000000000
--- a/test/elf/stripped-empty.test
+++ /dev/null
@@ -1,4 +0,0 @@
-RUN: lld -flavor gnu -shared -o test.so \
-RUN: -target x86_64 %p/Inputs/stripped-empty.x86_64
-
-test that we handle files without a symbol table.
diff --git a/test/elf/symbols.test b/test/elf/symbols.test
deleted file mode 100644
index 7f6bbdbc8c1d..000000000000
--- a/test/elf/symbols.test
+++ /dev/null
@@ -1,33 +0,0 @@
-# Tests the functionality of archive libraries reading
-# and resolution
-# Note: The binary files would not be required once we have support to generate
-# binary archives from textual(yaml) input
-#
-# Tests generated using the source files below
-# main file
-#
-#extern int __bss_start __attribute__ ((weak));
-#int a;
-#int main()
-#{
-# return 0;
-#}
-#
-
-RUN: lld -flavor gnu -target i386 -e main %p/Inputs/writersyms.o -o %t1
-RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSYMS %s
-RUN: lld -flavor gnu -shared -target i386 -e main %p/Inputs/writersyms.o -o %t1
-RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSHAREDSYMS %s
-
-CHECKSYMS: {{[0-9a-f]+}} a 1.c
-CHECKSYMS: {{[0-9a-f]+}} T main
-CHECKSYMS: {{[0-9a-f]+}} A __bss_start
-CHECKSYMS: {{[0-9a-f]+}} B a
-CHECKSYMS: {{[0-9a-f]+}} A __bss_end
-CHECKSYMS: {{[0-9a-f]+}} A _end
-CHECKSYMS: {{[0-9a-f]+}} A end
-
-CHECKSHAREDSYMS: {{[0-9a-f]+}} a 1.c
-CHECKSHAREDSYMS: {{[0-9a-f]+}} T main
-CHECKSHAREDSYMS: {{[0-9a-f]+}} B a
-CHECKSHAREDSYMS: {{[0-9a-f]+}} A _end
diff --git a/test/elf/tls.test b/test/elf/tls.test
deleted file mode 100644
index 038889406b67..000000000000
--- a/test/elf/tls.test
+++ /dev/null
@@ -1,43 +0,0 @@
-# REQUIRES: x86
-
-# This tests verifies that TLS variables have correct offsets
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 -static \
-RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s -check-prefix=YAML
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 -o %t \
-RUN: --noinhibit-exec -e main -static && llvm-objdump -d %t | FileCheck %s
-
-// Verify that the TLS accesses have the correct offsets.
-
-YAML: name: main
-YAML: references:
-YAML: kind: R_X86_64_TPOFF32
-YAML: offset: 9
-YAML: target: tls1
-YAML: kind: R_X86_64_TPOFF32
-YAML: offset: 17
-YAML: target: tls0
-YAML: kind: R_X86_64_TPOFF32
-YAML: offset: 25
-YAML: target: tls2
-
-YAML: name: GOTTPOFF
-YAML: kind: R_X86_64_PC32
-YAML: target: [[GOTNAME:[a-zA-Z0-9_]+]]
-
-YAML: type: got
-YAML: references:
-YAML: kind: R_X86_64_TPOFF64
-YAML: target: tls2
-
-// main
-CHECK: addl %fs:-4
-CHECK: addl %fs:-8
-CHECK: addl %fs:-12
-
-// GOTTPOFF
-CHECK: movq {{[0-9]+}}(%rip)
-
-// TLSLD
-CHECK: movq %fs:0, %rax
-CHECK: leaq -8(%rax), %rax
diff --git a/test/elf/tlsAddr.test b/test/elf/tlsAddr.test
deleted file mode 100644
index 6bc5e3e9bf78..000000000000
--- a/test/elf/tlsAddr.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# This tests verifies that TLS variables have correct offsets
-# and that TBSS doesn't occupy memory
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tlsAddr.x86-64 -static \
-RUN: -o %t --noinhibit-exec
-RUN: llvm-objdump -section-headers %t | FileCheck -check-prefix=CHECKADDR %s
-
-CHECKADDR: {{[0-9]+}} .data 00000000 0000000000401008 DATA
diff --git a/test/elf/undef-from-dso-to-main.test b/test/elf/undef-from-dso-to-main.test
deleted file mode 100644
index 71d0b51499dd..000000000000
--- a/test/elf/undef-from-dso-to-main.test
+++ /dev/null
@@ -1,52 +0,0 @@
-# Tests that a reference from a DSO to a regular object
-# forces the final executable to export the symbol.
-
-#RUN: yaml2obj -format=elf %p/Inputs/undef2-so.o.yaml -o=%t.o.so
-#RUN: lld -flavor gnu -target x86_64 -shared %t.o.so -o %T/libundef2.so
-#RUN: yaml2obj -format=elf %s -o=%t.o
-#RUN: lld -flavor gnu -target x86_64 %t.o -L%T -lundef2 -o %t1
-#RUN: llvm-readobj -dyn-symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
-
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000001
- Content: C3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: '002E7379'
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- Global:
- - Name: myexportedsymbol
- Type: STT_OBJECT
- Section: .bss
- Size: 0x0000000000000004
- - Name: _start
- Section: .text
- Size: 0x0000000000000001
-
-#CHECKSYMS: myexportedsymbol
diff --git a/test/elf/undef-from-main-dso.test b/test/elf/undef-from-main-dso.test
deleted file mode 100644
index 43faef0e74c4..000000000000
--- a/test/elf/undef-from-main-dso.test
+++ /dev/null
@@ -1,43 +0,0 @@
-RUN: lld -flavor gnu -target x86_64 -e main -o %t -L%p/Inputs \
-RUN: %p/Inputs/undef.o -lundef
-RUN: llvm-readobj -relocations -symbols -dyn-symbols %t | FileCheck %s
-
-RUN: lld -flavor gnu -target x86_64 -e main -o %t -L%p/Inputs \
-RUN: %p/Inputs/undef-pc32.o -lundef
-RUN: llvm-readobj -relocations -symbols -dyn-symbols %t | FileCheck %s
-
-# DSO source code:
-# int x[2] = { 1, 2 };
-#
-# Main binary source code:
-#
-# extern int x[2];
-#
-# int main(void)
-# {
-# x[0] = 2;
-# }
-#
-
-CHECK: Relocations [
-CHECK-NEXT: Section ({{[0-9]+}}) .rela.dyn {
-CHECK-NEXT: 0x{{[1-9A-F][0-9A-F]*}} R_X86_64_COPY x 0x0
-CHECK-NEXT: }
-CHECK-NEXT: ]
-
-CHECK: Name: x ({{[0-9]+}}
-CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
-CHECK-NEXT: Size: 8
-CHECK-NEXT: Binding: Global (0x1)
-CHECK-NEXT: Type: Object (0x1)
-CHECK-NEXT: Other: 0
-CHECK-NEXT: Section: .bss
-
-CHECK: Name: x@ ({{[0-9]+}}
-CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
-CHECK-NEXT: Size: 8
-CHECK-NEXT: Binding: Global (0x1)
-CHECK-NEXT: Type: Object (0x1)
-CHECK-NEXT: Other: 0
-CHECK-NEXT: Section: .bss
-
diff --git a/test/elf/weaksym.test b/test/elf/weaksym.test
deleted file mode 100644
index 0e265028e5ed..000000000000
--- a/test/elf/weaksym.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# Tests that a weak reference remains a weak reference,
-# even if a shared library defines the symbol weak as well.
-
-RUN: lld -flavor gnu -target x86_64 -shared %p/Inputs/weaksym.o -L%p/Inputs -lweaksym -o %t1
-RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSYMS %s
-
-CHECKSYMS: w weaksym
diff --git a/test/elf/wrap.test b/test/elf/wrap.test
deleted file mode 100644
index 997439f8f5b4..000000000000
--- a/test/elf/wrap.test
+++ /dev/null
@@ -1,279 +0,0 @@
-# This tests the functionality of using the --wrap option.
-# The test case is extracted by compiling and linking the following code.
-#
-#cat > main.c << \!
-#int main() {
-# foo();
-# return 0;
-#}
-#!
-#
-#cat > wrapfoo.c << \!
-#int __wrap_foo() {
-# __real_foo();
-# return 0;
-#}
-#!
-#
-#cat > realfoo.c << \!
-#int foo() {
-# return 0;
-#}
-#!
-#
-#clang main.c wrapfoo.c realfoo.c -Xlinker --wrap -Xlinker foo
-#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.main.o
-#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.wrapfoo.o
-#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.realfoo.o
-#RUN: lld -flavor gnu -target x86_64 %t.main.o %t.wrapfoo.o %t.realfoo.o \
-#RUN: --wrap foo --wrap foo --noinhibit-exec --output-filetype=yaml -o %t2.out
-#RUN: lld -flavor gnu -target x86_64 %t.main.o %t.wrapfoo.o \
-#RUN: --wrap foo --wrap foo --noinhibit-exec --output-filetype=yaml -o %t2.out.undef 2>&1 | \
-#RUN: FileCheck %s -check-prefix=CHECKUNDEF
-#CHECKWRAP: - name: main
-#CHECKWRAP: references:
-#CHECKWRAP: - kind: R_X86_64_PC32
-#CHECKWRAP: target: __wrap_foo
-#CHECKWRAP: - name: __wrap_foo
-#CHECKWRAP: references:
-#CHECKWRAP: - kind: R_X86_64_PC32
-#CHECKWRAP: target: foo
-#CHECKUNDEF: Undefined symbol: {{.*}}main.o: foo
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 5031C0E80000000031C05AC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000004
- Symbol: foo
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000140000001C000000000000000C00000000410E1000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000C
- - Name: foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 5031C0E80000000031C05AC3
- - Name: .rela.text
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .text
- Relocations:
- - Offset: 0x0000000000000004
- Symbol: __real_foo
- Type: R_X86_64_PC32
- Addend: -4
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000140000001C000000000000000C00000000410E1000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: __wrap_foo
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000C
- - Name: __real_foo
-...
----
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- OSABI: ELFOSABI_GNU
- Type: ET_REL
- Machine: EM_X86_64
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- AddressAlign: 0x0000000000000010
- Content: 31C0C3
- - Name: .data
- Type: SHT_PROGBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .bss
- Type: SHT_NOBITS
- Flags: [ SHF_WRITE, SHF_ALLOC ]
- AddressAlign: 0x0000000000000004
- Content: ''
- - Name: .comment
- Type: SHT_PROGBITS
- Flags: [ SHF_MERGE, SHF_STRINGS ]
- AddressAlign: 0x0000000000000001
- Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
- - Name: .note.GNU-stack
- Type: SHT_PROGBITS
- AddressAlign: 0x0000000000000001
- Content: ''
- - Name: .eh_frame
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC ]
- AddressAlign: 0x0000000000000008
- Content: 1400000000000000037A5200017810011B0C070890010000140000001C00000000000000030000000000000000000000
- - Name: .rela.eh_frame
- Type: SHT_RELA
- Link: .symtab
- AddressAlign: 0x0000000000000008
- Info: .eh_frame
- Relocations:
- - Offset: 0x0000000000000020
- Symbol: .text
- Type: R_X86_64_PC32
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: .comment
- Type: STT_SECTION
- Section: .comment
- - Name: .note.GNU-stack
- Type: STT_SECTION
- Section: .note.GNU-stack
- - Name: .eh_frame
- Type: STT_SECTION
- Section: .eh_frame
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000003
-...
diff --git a/test/elf/x86-64-dynamic-relocs.test b/test/elf/x86-64-dynamic-relocs.test
deleted file mode 100644
index 325693e3f714..000000000000
--- a/test/elf/x86-64-dynamic-relocs.test
+++ /dev/null
@@ -1,26 +0,0 @@
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/relocs-dynamic.x86-64 \
-RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
-
-path: <linker-internal>
-defined-atoms:
- - name: main
- scope: global
- content: [ E8, 00, 00, 00, 00, C3 ]
- alignment: 2^4
- section-choice: custom-required
- section-name: .text
- references:
- - kind: R_X86_64_PLT32
- offset: 1
- target: foo
- addend: -4
- - name: foo
- scope: global
- content: [ C3 ]
- alignment: 6 mod 2^4
- section-choice: custom-required
- section-name: .text
-
-# Don't generate a PLT/GOT entry for a PLT32 relocation to a non-shared symbol.
-CHECK-NOT: got
-CHECK-NOT: stub
diff --git a/test/elf/x86-64-dynamic.test b/test/elf/x86-64-dynamic.test
deleted file mode 100644
index 4e24e954a20e..000000000000
--- a/test/elf/x86-64-dynamic.test
+++ /dev/null
@@ -1,79 +0,0 @@
-# Checks that linking an object file with a shared object creates the necessary
-# PLT/GOT Entries
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t1 --noinhibit-exec
-RUN: FileCheck %s < %t1
-
-RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared-32s.x86-64 \
-RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml --noinhibit-exec \
-RUN: | FileCheck %s --check-prefix=32S
-
-CHECK: - name: main
-CHECK: scope: global
-CHECK: references:
-CHECK: - kind: R_X86_64_PC32
-CHECK: offset: 18
-CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
-CHECK: addend: -4
-CHECK: - kind: R_X86_64_GOTPCREL
-CHECK: offset: 25
-CHECK: target: [[GOTNAME:[-a-zA-Z0-9_]+]]
-CHECK: addend: -4
-
- - name: .PLT0
-CHECK: type: stub
-CHECK: content: [ FF, 35, 00, 00, 00, 00, FF, 25, 00, 00, 00, 00,
-CHECK: 90, 90, 90, 90 ]
-CHECK: alignment: 2^4
-CHECK: section-choice: custom-required
-CHECK: section-name: .plt
-CHECK: references:
-CHECK: - kind: R_X86_64_PC32
-CHECK: offset: 2
- target: __got0
-CHECK: addend: -4
-CHECK: - kind: R_X86_64_PC32
-CHECK: offset: 8
- target: __got1
-CHECK: addend: -4
- - name: [[PLTNAME]]
-CHECK: type: stub
-CHECK: content: [ FF, 25, 00, 00, 00, 00, 68, 00, 00, 00, 00, E9,
-CHECK: 00, 00, 00, 00 ]
-CHECK: alignment: 2^4
-CHECK: section-choice: custom-required
-CHECK: section-name: .plt
-CHECK: references:
-CHECK: - kind: R_X86_64_PC32
-CHECK: offset: 2
- target: __got_foo
-CHECK: addend: -4
-CHECK: - kind: LLD_R_X86_64_GOTRELINDEX
-CHECK: offset: 7
- target: __got_foo
-CHECK: - kind: R_X86_64_PC32
-CHECK: offset: 12
- target: .PLT0
-CHECK: addend: -4
-
-// Don't check the GOT and PLT names as they are only present in assert builds.
-CHECK: type: got
-CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
-CHECK: section-choice: custom-required
-CHECK: section-name: .got
-CHECK: permissions: rw-
-CHECK: references:
-CHECK: - kind: R_X86_64_GLOB_DAT
-CHECK: offset: 0
-CHECK: target: i
-
-CHECK:shared-library-atoms:
-CHECK: - name: foo
-CHECK: load-name: shared.so-x86-64
-
-32S: name: main
-32S: kind: R_X86_64_PC32
-32S: target: func
-32S: kind: R_X86_64_32S
-32S: kind: R_X86_64_PC32
-32S: type: stub
diff --git a/test/elf/x86.test b/test/elf/x86.test
deleted file mode 100644
index 6b68837193e6..000000000000
--- a/test/elf/x86.test
+++ /dev/null
@@ -1,38 +0,0 @@
-# Source for input file: reloc-xb.x86
-# xb.S:
-# .section .text, "ax", @progbits
-# .align 0x4
-# .globl _start
-# _start:
-# .globl back
-# back:
-# call target
-#
-# Source for input file: reloc-xt.x86
-# xt.S:
-# .section .text, "ax", @progbits
-#
-# .globl target
-# target:
-# call back
-#
-# Assembled with: "as --32"
-
-RUN: lld -flavor gnu -target i386 -e back --output-filetype=yaml %p/Inputs/reloc-xb.x86 %p/Inputs/reloc-xt.x86 | FileCheck %s -check-prefix x86-yaml
-
-x86-yaml: - name: back
-x86-yaml: scope: global
-x86-yaml: content: [ E8, FC, FF, FF, FF ]
-x86-yaml: references:
-x86-yaml: - kind: R_386_PC32
-x86-yaml: offset: 1
-x86-yaml: target: target
-
-x86-yaml: - name: target
-x86-yaml: scope: global
-x86-yaml: content: [ E8, FC, FF, FF, FF ]
-x86-yaml: references:
-x86-yaml: - kind: R_386_PC32
-x86-yaml: offset: 1
-x86-yaml: target: back
-
diff --git a/test/elf/x86_64-kinds.test b/test/elf/x86_64-kinds.test
deleted file mode 100644
index 49586059d953..000000000000
--- a/test/elf/x86_64-kinds.test
+++ /dev/null
@@ -1,23 +0,0 @@
-REQUIRES: x86
-
-RUN: lld -flavor gnu -target x86_64-linux -o %t1 %p/Inputs/relocs.x86-64 \
-RUN: -e _start -static
-RUN: llvm-objdump -d %t1 | FileCheck %s -check-prefix=RELOCS
-
-RUN: lld -flavor gnu -target x86_64-linux --output-filetype=yaml -e _start -static \
-RUN: %p/Inputs/relocs.x86-64 | FileCheck %s -check-prefix=X86_64
-
-RELOCS: ELF64-x86-64
-
-// R_X86_64_32S
-RELOCS: c7 04 25
-RELOCS-NOT: 00 00 00 00
-RELOCS: 05 00 00 00 movl
-
-// R_X86_64_PC32
-RELOCS: e8
-RELOCS-NOT: 00 00 00 00
-RELOCS: callq
-
-X86_64: R_X86_64_32S
-X86_64: R_X86_64_PC32
diff --git a/test/lit.cfg b/test/lit.cfg
index 5b49765f7894..54e8c7f546f8 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -14,16 +14,43 @@ import lit.util
# name: The name of this test suite.
config.name = 'lld'
+# Tweak PATH for Win32
+if sys.platform in ['win32']:
+ # Seek sane tools in directories and set to $PATH.
+ path = getattr(config, 'lit_tools_dir', None)
+ path = lit_config.getToolsPath(path,
+ config.environment['PATH'],
+ ['cmp.exe', 'grep.exe', 'sed.exe'])
+ if path is not None:
+ path = os.path.pathsep.join((path,
+ config.environment['PATH']))
+ config.environment['PATH'] = path
+
+# Choose between lit's internal shell pipeline runner and a real shell. If
+# LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override.
+use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
+if use_lit_shell:
+ # 0 is external, "" is default, and everything else is internal.
+ execute_external = (use_lit_shell == "0")
+else:
+ # Otherwise we default to internal on Windows and external elsewhere, as
+ # bash on Windows is usually very slow.
+ execute_external = (not sys.platform in ['win32'])
+
+
# testFormat: The test format to use to interpret tests.
#
# For now we require '&&' between commands, until they get globally killed and
# the test runner updated.
-execute_external = (platform.system() != 'Windows'
- or lit_config.getBashPath() not in [None, ""])
config.test_format = lit.formats.ShTest(execute_external)
# suffixes: A list of file extensions to treat as test files.
-config.suffixes = ['.objtxt', '.test']
+config.suffixes = ['.ll', '.objtxt', '.test']
+
+# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
+# subdirectories contain auxiliary inputs for various tests in their parent
+# directories.
+config.excludes = ['Inputs']
# test_source_root: The root path where tests are located.
config.test_source_root = os.path.dirname(__file__)
@@ -112,6 +139,46 @@ if config.test_exec_root is None:
lit_config.load_config(config, site_cfg)
raise SystemExit
+# For each occurrence of a lld tool name as its own word, replace it
+# with the full path to the build directory holding that tool. This
+# ensures that we are testing the tools just built and not some random
+# tools that might happen to be in the user's PATH.
+
+# Regex assertions to reject neighbor hyphens/dots (seen in some tests).
+# For example, we want to prefix 'lld' and 'ld.lld' but not the 'lld' inside
+# of 'ld.lld'.
+NoPreJunk = r"(?<!(-|\.|/))"
+NoPostJunk = r"(?!(-|\.))"
+
+tool_patterns = [r"\bFileCheck\b",
+ r"\bnot\b",
+ NoPreJunk + r"\blld\b" + NoPostJunk,
+ r"\bld.lld\b",
+ r"\blld-link\b",
+ r"\bllvm-mc\b",
+ r"\bllvm-nm\b",
+ r"\bllvm-objdump\b",
+ r"\bllvm-readobj\b",
+ r"\byaml2obj\b"]
+
+for pattern in tool_patterns:
+ # Extract the tool name from the pattern. This relies on the tool
+ # name being surrounded by \b word match operators. If the
+ # pattern starts with "| ", include it in the string to be
+ # substituted.
+ tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_\.]+)\\b\W*$",
+ pattern)
+ tool_pipe = tool_match.group(2)
+ tool_name = tool_match.group(4)
+ tool_path = lit.util.which(tool_name, llvm_tools_dir)
+ if not tool_path:
+ # Warn, but still provide a substitution.
+ lit_config.note('Did not find ' + tool_name + ' in ' + llvm_tools_dir)
+ tool_path = llvm_tools_dir + '/' + tool_name
+ config.substitutions.append((pattern, tool_pipe + tool_path))
+
+###
+
# When running under valgrind, we mangle '-vg' onto the end of the triple so we
# can check it with XFAIL and XTARGET.
if lit_config.useValgrind:
@@ -148,12 +215,18 @@ if re.search(r'DEBUG', llvm_config_output_list[0]):
config.available_features.add('debug')
if re.search(r'ON', llvm_config_output_list[1]):
config.available_features.add('asserts')
-if re.search(r'ARM', llvm_config_output_list[2]):
+
+archs = llvm_config_output_list[2]
+if re.search(r'AArch64', archs):
+ config.available_features.add('aarch64')
+if re.search(r'ARM', archs):
config.available_features.add('arm')
-if re.search(r'Mips', llvm_config_output_list[2]):
+if re.search(r'Mips', archs):
config.available_features.add('mips')
-if re.search(r'X86', llvm_config_output_list[2]):
+if re.search(r'X86', archs):
config.available_features.add('x86')
+if re.search(r'PowerPC', archs):
+ config.available_features.add('ppc')
llvm_config_cmd.wait()
# Check if Windows resource file compiler exists.
@@ -163,5 +236,5 @@ if cvtres and rc:
config.available_features.add('winres')
# Check if "lib.exe" command exists.
-if lit.util.which('lib.exe', config.environment['PATH']):
+if lit.util.which('lib', config.environment['PATH']):
config.available_features.add('winlib')
diff --git a/test/mach-o/Inputs/PIE.yaml b/test/mach-o/Inputs/PIE.yaml
new file mode 100644
index 000000000000..0463154fcf28
--- /dev/null
+++ b/test/mach-o/Inputs/PIE.yaml
@@ -0,0 +1,6 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/arm-interworking.yaml b/test/mach-o/Inputs/arm-interworking.yaml
new file mode 100644
index 000000000000..d78a2997fe33
--- /dev/null
+++ b/test/mach-o/Inputs/arm-interworking.yaml
@@ -0,0 +1,83 @@
+--- !mach-o
+arch: armv7
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 2
+ address: 0x0000000000000000
+ content: [ 0xFE, 0xFF, 0xFF, 0xEB, 0x02, 0x00, 0x00, 0xFA,
+ 0xFC, 0xFF, 0xFF, 0xEB, 0xFB, 0xFF, 0xFF, 0xFA,
+ 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 ]
+ relocations:
+ - offset: 0x0000000C
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 4
+ - offset: 0x00000008
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 3
+ - offset: 0x00000004
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: false
+ symbol: 1
+ - offset: 0x00000000
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: false
+ symbol: 1
+ - segment: __DATA
+ section: __data
+ type: S_REGULAR
+ attributes: [ ]
+ address: 0x0000000000000018
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+ - offset: 0x00000004
+ type: ARM_RELOC_VANILLA
+ length: 2
+ pc-rel: false
+ extern: false
+ symbol: 1
+ - offset: 0x00000000
+ type: ARM_RELOC_VANILLA
+ length: 2
+ pc-rel: false
+ extern: true
+ symbol: 3
+local-symbols:
+ - name: _d2
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000018
+global-symbols:
+ - name: _a1
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+ - name: _a2
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000014
+undefined-symbols:
+ - name: _t1
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: _t2
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
diff --git a/test/mach-o/Inputs/arm-shims.yaml b/test/mach-o/Inputs/arm-shims.yaml
new file mode 100644
index 000000000000..8baebef17d86
--- /dev/null
+++ b/test/mach-o/Inputs/arm-shims.yaml
@@ -0,0 +1,60 @@
+--- !mach-o
+arch: armv7
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 2
+ address: 0x0000000000000000
+ content: [ 0x00, 0xBF, 0xFF, 0xF7, 0xFE, 0xEF, 0xFF, 0xF7,
+ 0xFB, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0x20, 0xE3,
+ 0xFA, 0xFF, 0xFF, 0xFA, 0xF9, 0xFF, 0xFF, 0xEA ]
+ relocations:
+ - offset: 0x00000014
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 3
+ - offset: 0x00000010
+ type: ARM_RELOC_BR24
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 3
+ - offset: 0x00000006
+ type: ARM_THUMB_RELOC_BR22
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 2
+ - offset: 0x00000002
+ type: ARM_THUMB_RELOC_BR22
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 2
+global-symbols:
+ - name: _a2
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x000000000000000C
+ - name: _t2
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_ARM_THUMB_DEF ]
+ value: 0x0000000000000000
+undefined-symbols:
+ - name: _a1
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: _t1
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
diff --git a/test/mach-o/Inputs/cstring-sections.yaml b/test/mach-o/Inputs/cstring-sections.yaml
new file mode 100644
index 000000000000..eb227f29f8f5
--- /dev/null
+++ b/test/mach-o/Inputs/cstring-sections.yaml
@@ -0,0 +1,25 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __objc_methname
+ type: S_CSTRING_LITERALS
+ attributes: [ ]
+ address: 0x0000000000000000
+ content: [ 0x61, 0x62, 0x63, 0x00 ]
+ - segment: __TEXT
+ section: __objc_classname
+ type: S_CSTRING_LITERALS
+ attributes: [ ]
+ address: 0x0000000000000006
+ content: [ 0x61, 0x62, 0x63, 0x00 ]
+ - segment: __TEXT
+ section: __cstring
+ type: S_CSTRING_LITERALS
+ attributes: [ ]
+ address: 0x000000000000000A
+ content: [ 0x61, 0x62, 0x63, 0x00 ]
diff --git a/test/mach-o/Inputs/got-order.yaml b/test/mach-o/Inputs/got-order.yaml
new file mode 100644
index 000000000000..d256e9d7d463
--- /dev/null
+++ b/test/mach-o/Inputs/got-order.yaml
@@ -0,0 +1,53 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000000
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x0D, 0x00,
+ 0x00, 0x00, 0x00, 0x48, 0x8B, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x8B, 0x00, 0x03, 0x01, 0x48, 0x8B,
+ 0x0D, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x5D,
+ 0xC3 ]
+ relocations:
+ - offset: 0x00000019
+ type: X86_64_RELOC_GOT_LOAD
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 2
+ - offset: 0x0000000E
+ type: X86_64_RELOC_GOT_LOAD
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 1
+ - offset: 0x00000007
+ type: X86_64_RELOC_GOT_LOAD
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 3
+global-symbols:
+ - name: _main
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+undefined-symbols:
+ - name: _bar
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: _foo
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: _zazzle
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
diff --git a/test/mach-o/Inputs/got-order2.yaml b/test/mach-o/Inputs/got-order2.yaml
new file mode 100644
index 000000000000..faddeda924db
--- /dev/null
+++ b/test/mach-o/Inputs/got-order2.yaml
@@ -0,0 +1,11 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libfoobar.dylib
+exports:
+ - name: _bar
+ - name: _zazzle
+ - name: _foo
+ - name: _aaa
+ - name: _fff
+ - name: _zzz
diff --git a/test/mach-o/Inputs/hello-world-arm64.yaml b/test/mach-o/Inputs/hello-world-arm64.yaml
new file mode 100644
index 000000000000..31de71ef4941
--- /dev/null
+++ b/test/mach-o/Inputs/hello-world-arm64.yaml
@@ -0,0 +1,8 @@
+--- !mach-o
+arch: arm64
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _fprintf
+ - name: ___stdoutp
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/hello-world-armv6.yaml b/test/mach-o/Inputs/hello-world-armv6.yaml
new file mode 100644
index 000000000000..0b29f65ab126
--- /dev/null
+++ b/test/mach-o/Inputs/hello-world-armv6.yaml
@@ -0,0 +1,7 @@
+--- !mach-o
+arch: armv6
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _printf
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/hello-world-armv7.yaml b/test/mach-o/Inputs/hello-world-armv7.yaml
new file mode 100644
index 000000000000..4e26120fe216
--- /dev/null
+++ b/test/mach-o/Inputs/hello-world-armv7.yaml
@@ -0,0 +1,7 @@
+--- !mach-o
+arch: armv7
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _printf
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/hello-world-x86.yaml b/test/mach-o/Inputs/hello-world-x86.yaml
new file mode 100644
index 000000000000..dbec62b77f3b
--- /dev/null
+++ b/test/mach-o/Inputs/hello-world-x86.yaml
@@ -0,0 +1,7 @@
+--- !mach-o
+arch: x86
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _printf
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/hello-world-x86_64.yaml b/test/mach-o/Inputs/hello-world-x86_64.yaml
new file mode 100644
index 000000000000..7840d5c1932e
--- /dev/null
+++ b/test/mach-o/Inputs/hello-world-x86_64.yaml
@@ -0,0 +1,8 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _fprintf
+ - name: dyld_stub_binder
+ - name: ___stdoutp
diff --git a/test/mach-o/Inputs/hw.raw_bytes b/test/mach-o/Inputs/hw.raw_bytes
new file mode 100644
index 000000000000..ce013625030b
--- /dev/null
+++ b/test/mach-o/Inputs/hw.raw_bytes
@@ -0,0 +1 @@
+hello
diff --git a/test/mach-o/Inputs/interposing-section.yaml b/test/mach-o/Inputs/interposing-section.yaml
new file mode 100644
index 000000000000..45966b6870cc
--- /dev/null
+++ b/test/mach-o/Inputs/interposing-section.yaml
@@ -0,0 +1,6 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: _open
diff --git a/test/mach-o/Inputs/lazy-bind-x86_64-2.yaml b/test/mach-o/Inputs/lazy-bind-x86_64-2.yaml
new file mode 100644
index 000000000000..50a97bc9c09b
--- /dev/null
+++ b/test/mach-o/Inputs/lazy-bind-x86_64-2.yaml
@@ -0,0 +1,8 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libfoo.dylib
+compat-version: 2.0
+current-version: 3.4
+exports:
+ - name: _foo
diff --git a/test/mach-o/Inputs/lazy-bind-x86_64-3.yaml b/test/mach-o/Inputs/lazy-bind-x86_64-3.yaml
new file mode 100644
index 000000000000..2f61cc0cda1a
--- /dev/null
+++ b/test/mach-o/Inputs/lazy-bind-x86_64-3.yaml
@@ -0,0 +1,8 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libbaz.dylib
+compat-version: 3.0
+current-version: 4.5
+exports:
+ - name: _baz
diff --git a/test/mach-o/Inputs/lazy-bind-x86_64.yaml b/test/mach-o/Inputs/lazy-bind-x86_64.yaml
new file mode 100644
index 000000000000..7e6cd9007bf3
--- /dev/null
+++ b/test/mach-o/Inputs/lazy-bind-x86_64.yaml
@@ -0,0 +1,8 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libbar.dylib
+compat-version: 1.0
+current-version: 2.3
+exports:
+ - name: _bar
diff --git a/test/mach-o/Inputs/linker-as-ld.yaml b/test/mach-o/Inputs/linker-as-ld.yaml
new file mode 100644
index 000000000000..0463154fcf28
--- /dev/null
+++ b/test/mach-o/Inputs/linker-as-ld.yaml
@@ -0,0 +1,6 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+install-name: /usr/lib/libSystem.B.dylib
+exports:
+ - name: dyld_stub_binder
diff --git a/test/mach-o/Inputs/re-exported-dylib-ordinal.yaml b/test/mach-o/Inputs/re-exported-dylib-ordinal.yaml
new file mode 100644
index 000000000000..1941b407de26
--- /dev/null
+++ b/test/mach-o/Inputs/re-exported-dylib-ordinal.yaml
@@ -0,0 +1,21 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ MH_TWOLEVEL ]
+install-name: /junk/libfoo.dylib
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000F9A
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3 ]
+global-symbols:
+ - name: _foo
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000F9A
+dependents:
+ - path: /junk/libbar.dylib
+ kind: LC_REEXPORT_DYLIB
diff --git a/test/mach-o/Inputs/re-exported-dylib-ordinal2.yaml b/test/mach-o/Inputs/re-exported-dylib-ordinal2.yaml
new file mode 100644
index 000000000000..5aaf8c1b1bca
--- /dev/null
+++ b/test/mach-o/Inputs/re-exported-dylib-ordinal2.yaml
@@ -0,0 +1,18 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ MH_TWOLEVEL ]
+install-name: /junk/libbar.dylib
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000F9A
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3 ]
+global-symbols:
+ - name: _bar
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000F9A
diff --git a/test/mach-o/Inputs/re-exported-dylib-ordinal3.yaml b/test/mach-o/Inputs/re-exported-dylib-ordinal3.yaml
new file mode 100644
index 000000000000..43ba07c73a7b
--- /dev/null
+++ b/test/mach-o/Inputs/re-exported-dylib-ordinal3.yaml
@@ -0,0 +1,19 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ MH_TWOLEVEL ]
+install-name: /usr/lib/libSystem.B.dylib
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000000
+ content: [ 0x55 ]
+
+global-symbols:
+ - name: dyld_stub_binder
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
diff --git a/test/mach-o/Inputs/unwind-info-simple-arm64.yaml b/test/mach-o/Inputs/unwind-info-simple-arm64.yaml
new file mode 100644
index 000000000000..5f7ae50717ba
--- /dev/null
+++ b/test/mach-o/Inputs/unwind-info-simple-arm64.yaml
@@ -0,0 +1,13 @@
+--- !mach-o
+arch: arm64
+file-type: MH_DYLIB
+install-name: /usr/lib/libc++.dylib
+exports:
+ - name: __Unwind_Resume
+ - name: __ZTIl
+ - name: __ZTIi
+ - name: ___cxa_end_catch
+ - name: ___cxa_begin_catch
+ - name: ___cxa_allocate_exception
+ - name: ___cxa_throw
+ - name: ___gxx_personality_v0
diff --git a/test/mach-o/Inputs/use-simple-dylib.yaml b/test/mach-o/Inputs/use-simple-dylib.yaml
new file mode 100644
index 000000000000..9081bcf76932
--- /dev/null
+++ b/test/mach-o/Inputs/use-simple-dylib.yaml
@@ -0,0 +1,58 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 4
+ address: 0x0000000000000000
+ content: [ 0xCC, 0xC3, 0x90, 0xC3, 0x90, 0x90, 0xC3, 0x90,
+ 0x90, 0x90, 0xC3, 0x90, 0x90, 0x90, 0x90, 0xC3,
+ 0x31, 0xC0, 0xC3 ]
+local-symbols:
+ - name: _myStatic
+ type: N_SECT
+ sect: 1
+ value: 0x000000000000000B
+ - name: _myVariablePreviouslyKnownAsPrivateExtern
+ type: N_SECT
+ scope: [ N_PEXT ]
+ sect: 1
+ desc: [ N_SYMBOL_RESOLVER ]
+ value: 0x0000000000000011
+global-symbols:
+ - name: _myGlobal
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000001
+ - name: _myGlobalWeak
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000002
+ - name: _myHidden
+ type: N_SECT
+ scope: [ N_EXT, N_PEXT ]
+ sect: 1
+ value: 0x0000000000000004
+ - name: _myHiddenWeak
+ type: N_SECT
+ scope: [ N_EXT, N_PEXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000007
+ - name: _myResolver
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_SYMBOL_RESOLVER ]
+ value: 0x0000000000000010
+
+install-name: libspecial.dylib
diff --git a/test/mach-o/Inputs/write-final-sections.yaml b/test/mach-o/Inputs/write-final-sections.yaml
new file mode 100644
index 000000000000..ed434917f2cf
--- /dev/null
+++ b/test/mach-o/Inputs/write-final-sections.yaml
@@ -0,0 +1,20 @@
+--- !mach-o
+arch: x86_64
+file-type: MH_DYLIB
+flags: [ ]
+install-name: /usr/lib/libSystem.B.dylib
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000000
+ content: [ 0x55 ]
+
+global-symbols:
+ - name: dyld_stub_binder
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+
diff --git a/test/mach-o/Inputs/wrong-arch-error.yaml b/test/mach-o/Inputs/wrong-arch-error.yaml
new file mode 100644
index 000000000000..304c872375e4
--- /dev/null
+++ b/test/mach-o/Inputs/wrong-arch-error.yaml
@@ -0,0 +1,24 @@
+# RUN: not lld -flavor darwin -arch x86_64 -r %s 2> %t.err
+# RUN: FileCheck %s < %t.err
+
+--- !mach-o
+arch: x86
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 4
+ address: 0x0000000000000000
+ content: [ 0xC3 ]
+
+global-symbols:
+ - name: _bar
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
diff --git a/test/mach-o/PIE.yaml b/test/mach-o/PIE.yaml
index 2e50951a4544..24f8773cbd23 100644
--- a/test/mach-o/PIE.yaml
+++ b/test/mach-o/PIE.yaml
@@ -1,10 +1,13 @@
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -o %t && \
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/PIE.yaml -o %t && \
# RUN: llvm-objdump -macho -private-headers %t | FileCheck %s
#
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -pie -o %t\
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/PIE.yaml -pie -o %t\
# RUN: && llvm-objdump -macho -private-headers %t | FileCheck %s
#
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -no_pie -o %t\
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/PIE.yaml -no_pie -o %t\
# RUN: && llvm-objdump -macho -private-headers %t \
# RUN: | FileCheck --check-prefix=CHECK_NO_PIE %s
#
@@ -31,13 +34,6 @@ global-symbols:
sect: 1
value: 0x0000000000000000
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: dyld_stub_binder
-
...
# CHECK: MH_MAGIC_64 {{[0-9a-zA-Z _]+}} TWOLEVEL PIE
diff --git a/test/mach-o/align_text.yaml b/test/mach-o/align_text.yaml
index 5ddbf911b9e5..66b5afb5ff30 100644
--- a/test/mach-o/align_text.yaml
+++ b/test/mach-o/align_text.yaml
@@ -13,7 +13,7 @@ sections:
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- alignment: 4
+ alignment: 16
address: 0x0000000000000000
content: [ 0x90, 0x90, 0x90, 0xC3, 0xC3, 0xC3 ]
local-symbols:
@@ -33,13 +33,13 @@ local-symbols:
# CHECK: defined-atoms:
# CHECK: - content: [ 90, 90, 90 ]
-# CHECK: alignment: 2^4
+# CHECK: alignment: 16
# CHECK: - name: _f1
# CHECK: content: [ C3 ]
-# CHECK: alignment: 3 mod 2^4
+# CHECK: alignment: 3 mod 16
# CHECK: - name: _f2
# CHECK: content: [ C3 ]
-# CHECK: alignment: 4 mod 2^4
+# CHECK: alignment: 4 mod 16
# CHECK: - name: _f3
# CHECK: content: [ C3 ]
-# CHECK: alignment: 5 mod 2^4
+# CHECK: alignment: 5 mod 16
diff --git a/test/mach-o/arm-interworking-movw.yaml b/test/mach-o/arm-interworking-movw.yaml
index 59d2f0ddd3d9..7e4a2e00ae6e 100644
--- a/test/mach-o/arm-interworking-movw.yaml
+++ b/test/mach-o/arm-interworking-movw.yaml
@@ -20,16 +20,16 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0x40, 0xF2, 0x25, 0x00, 0xC0, 0xF2, 0x00, 0x00,
- 0x40, 0xF2, 0x01, 0x01, 0xC0, 0xF2, 0x00, 0x01,
- 0x40, 0xF2, 0x4E, 0x02, 0xC0, 0xF2, 0x00, 0x02,
- 0x40, 0xF2, 0x2A, 0x03, 0xC0, 0xF2, 0x00, 0x03,
- 0x78, 0x44, 0x70, 0x47, 0x70, 0x47, 0x25, 0x00,
- 0x00, 0xE3, 0x00, 0x00, 0x40, 0xE3, 0xD7, 0x1F,
- 0x0F, 0xE3, 0xFF, 0x1F, 0x4F, 0xE3, 0x4E, 0x20,
- 0x00, 0xE3, 0x00, 0x20, 0x40, 0xE3, 0x00, 0x30,
- 0x00, 0xE3, 0x00, 0x30, 0x40, 0xE3, 0x0F, 0x00,
- 0x80, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF,
+ content: [ 0x40, 0xF2, 0x25, 0x00, 0xC0, 0xF2, 0x00, 0x00,
+ 0x40, 0xF2, 0x01, 0x01, 0xC0, 0xF2, 0x00, 0x01,
+ 0x40, 0xF2, 0x4E, 0x02, 0xC0, 0xF2, 0x00, 0x02,
+ 0x40, 0xF2, 0x2A, 0x03, 0xC0, 0xF2, 0x00, 0x03,
+ 0x78, 0x44, 0x70, 0x47, 0x70, 0x47, 0x25, 0x00,
+ 0x00, 0xE3, 0x00, 0x00, 0x40, 0xE3, 0xD7, 0x1F,
+ 0x0F, 0xE3, 0xFF, 0x1F, 0x4F, 0xE3, 0x4E, 0x20,
+ 0x00, 0xE3, 0x00, 0x20, 0x40, 0xE3, 0x00, 0x30,
+ 0x00, 0xE3, 0x00, 0x30, 0x40, 0xE3, 0x0F, 0x00,
+ 0x80, 0xE0, 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF,
0x2F, 0xE1 ]
relocations:
- offset: 0x00000042
diff --git a/test/mach-o/arm-interworking.yaml b/test/mach-o/arm-interworking.yaml
index f7e04e65c9f0..59c46050fab5 100644
--- a/test/mach-o/arm-interworking.yaml
+++ b/test/mach-o/arm-interworking.yaml
@@ -1,7 +1,8 @@
-# RUN: lld -flavor darwin -arch armv7 -r -print_atoms %s -o %t | FileCheck %s \
+# RUN: lld -flavor darwin -arch armv7 -r -print_atoms %s \
+# RUN: %p/Inputs/arm-interworking.yaml -o %t | FileCheck %s \
# RUN: && lld -flavor darwin -arch armv7 -dylib -print_atoms \
# RUN: %p/Inputs/libSystem.yaml %t -o %t2 | FileCheck %s \
-# RUN: && macho-dump --dump-section-data %t2 | FileCheck -check-prefix=CODE %s
+# RUN: && llvm-readobj -s -sd %t2 | FileCheck -check-prefix=CODE %s
#
# Test thumb and arm branches round trip through -r.
# Test bl/blx instructions are fixed up properly.
@@ -12,20 +13,20 @@
arch: armv7
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0xFF, 0xF7, 0xFE, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
- 0xFC, 0xEF, 0xC0, 0x46, 0xFF, 0xF7, 0xF8, 0xEF,
- 0xFF, 0xF7, 0xF6, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
- 0xF3, 0xFF, 0xC0, 0x46, 0x00, 0xF0, 0x06, 0xE8,
- 0xC0, 0x46, 0x00, 0xF0, 0x03, 0xF8, 0x00, 0xF0,
+ content: [ 0xFF, 0xF7, 0xFE, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
+ 0xFC, 0xEF, 0xC0, 0x46, 0xFF, 0xF7, 0xF8, 0xEF,
+ 0xFF, 0xF7, 0xF6, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
+ 0xF3, 0xFF, 0xC0, 0x46, 0x00, 0xF0, 0x06, 0xE8,
+ 0xC0, 0x46, 0x00, 0xF0, 0x03, 0xF8, 0x00, 0xF0,
0x02, 0xF8, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47 ]
- relocations:
+ relocations:
- offset: 0x00000026
type: ARM_THUMB_RELOC_BR22
length: 2
@@ -80,7 +81,7 @@ sections:
attributes: [ ]
address: 0x0000000000000030
content: [ 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x00000004
type: ARM_RELOC_VANILLA
length: 2
@@ -93,7 +94,7 @@ sections:
pc-rel: false
extern: false
symbol: 1
-local-symbols:
+local-symbols:
- name: _t3
type: N_SECT
sect: 1
@@ -103,7 +104,7 @@ local-symbols:
type: N_SECT
sect: 2
value: 0x0000000000000030
-global-symbols:
+global-symbols:
- name: _t1
type: N_SECT
scope: [ N_EXT ]
@@ -116,7 +117,7 @@ global-symbols:
sect: 1
desc: [ N_ARM_THUMB_DEF ]
value: 0x000000000000002C
-undefined-symbols:
+undefined-symbols:
- name: _a1
type: N_UNDF
scope: [ N_EXT ]
@@ -126,96 +127,13 @@ undefined-symbols:
scope: [ N_EXT ]
value: 0x0000000000000000
---- !mach-o
-arch: armv7
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- alignment: 2
- address: 0x0000000000000000
- content: [ 0xFE, 0xFF, 0xFF, 0xEB, 0x02, 0x00, 0x00, 0xFA,
- 0xFC, 0xFF, 0xFF, 0xEB, 0xFB, 0xFF, 0xFF, 0xFA,
- 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 ]
- relocations:
- - offset: 0x0000000C
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: true
- symbol: 4
- - offset: 0x00000008
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: true
- symbol: 3
- - offset: 0x00000004
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: false
- symbol: 1
- - offset: 0x00000000
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: false
- symbol: 1
- - segment: __DATA
- section: __data
- type: S_REGULAR
- attributes: [ ]
- address: 0x0000000000000018
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- relocations:
- - offset: 0x00000004
- type: ARM_RELOC_VANILLA
- length: 2
- pc-rel: false
- extern: false
- symbol: 1
- - offset: 0x00000000
- type: ARM_RELOC_VANILLA
- length: 2
- pc-rel: false
- extern: true
- symbol: 3
-local-symbols:
- - name: _d2
- type: N_SECT
- sect: 2
- value: 0x0000000000000018
-global-symbols:
- - name: _a1
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
- - name: _a2
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000014
-undefined-symbols:
- - name: _t1
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
- - name: _t2
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
...
-# CHECK: defined-atoms:
+# CHECK: defined-atoms:
# CHECK: - name: _d1
# CHECK: type: data
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer32
# CHECK: offset: 0
# CHECK: target: _t2
@@ -224,7 +142,7 @@ undefined-symbols:
# CHECK: target: _a1
# CHECK: - name: _d2
# CHECK: type: data
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer32
# CHECK: offset: 0
# CHECK: target: _t1
@@ -233,7 +151,7 @@ undefined-symbols:
# CHECK: target: _a1
# CHECK: - name: _t1
# CHECK: scope: global
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: modeThumbCode
# CHECK: offset: 0
# CHECK: target: _t1
@@ -264,19 +182,19 @@ undefined-symbols:
# CHECK: - name: _t2
# CHECK: scope: global
# CHECK: content: [ 70, 47 ]
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: modeThumbCode
# CHECK: offset: 0
# CHECK: target: _t2
# CHECK: - name: _t3
# CHECK: content: [ 70, 47 ]
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: modeThumbCode
# CHECK: offset: 0
# CHECK: target: _t3
# CHECK: - name: _a1
# CHECK: scope: global
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: arm_bl24
# CHECK: offset: 0
# CHECK: target: _a1
@@ -292,15 +210,23 @@ undefined-symbols:
# CHECK: - name: _a2
# CHECK: scope: global
+# CODE: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+# CODE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+# CODE: SectionData (
+# CODE: 0000: 00F016E8 C04600F0 1EE8C046 00F01AE8
+# CODE: 0010: FFF7F6FF C046FFF7 F3FFC046 00F006F8
+# CODE: 0020: C04600F0 03F800F0 02F87047 70477047
+# CODE: 0030: FEFFFFEB 020000EB F0FFFFFA FAFFFFFA
+# CODE: 0040: 1EFF2FE1 1EFF2FE1
+# CODE: )
-# CODE: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CODE: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CODE: ('_section_data', '00f016e8 c04600f0 1ee8c046 00f01ae8 fff7f6ff c046fff7 f3ffc046 00f006f8 c04600f0 03f800f0 02f87047 70477047 feffffeb 020000eb f0fffffa fafffffa 1eff2fe1 1eff2fe1')
-# When we get a good mach-o disassembler the above __text section content check can be change to be symbolic.
+# CODE: Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00)
+# CODE: Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00)
+# CODE: SectionData (
+# CODE: 0000: E50F0000 E80F0000 B90F0000 E80F0000
+# CODE: )
-# CODE: (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CODE: ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CODE: ('_section_data', '{{[0-9a-f]}}{{[13579bdf]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[02468ade]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[13579bdf]}}{{[0-9a-f]+}} {{[0-9a-f]}}{{[02468ade]}}{{[0-9a-f]+}}')
+# When we get a good mach-o disassembler the above __text section content check can be change to be symbolic.
# Verify the low (thumb) bit is set on the first and third pointers but not the second and fourth.
@@ -325,18 +251,18 @@ undefined-symbols:
# nop
# blx _t2
# bx lr
-#
+#
# .globl _t2
# .thumb_func _t2
#_t2:
# bx lr
-#
+#
# .data
#_d1: .long _t2
# .long _a1
-
-
+
+
# Input file two:
#
# .align 2
@@ -348,15 +274,15 @@ undefined-symbols:
# bl _t1
# blx _t2
# bx lr
-#
+#
# .globl _a2
#_a2:
# bx lr
-#
+#
# .data
#_d2: .long _t1
# .long _a1
- \ No newline at end of file
+
diff --git a/test/mach-o/arm-shims.yaml b/test/mach-o/arm-shims.yaml
index 68a401ca78e8..62739c967ab1 100644
--- a/test/mach-o/arm-shims.yaml
+++ b/test/mach-o/arm-shims.yaml
@@ -1,5 +1,6 @@
-# RUN: lld -flavor darwin -arch armv7 %s -dylib %p/Inputs/libSystem.yaml -o %t
-# RUN: macho-dump --dump-section-data %t | FileCheck %s
+# RUN: lld -flavor darwin -arch armv7 %s %p/Inputs/arm-shims.yaml \
+# RUN: -dylib %p/Inputs/libSystem.yaml -o %t
+# RUN: llvm-readobj -s -sd %t | FileCheck %s
#
# Test b from arm to thumb or vice versa has shims added.s
#
@@ -66,74 +67,20 @@ undefined-symbols:
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: armv7
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- alignment: 2
- address: 0x0000000000000000
- content: [ 0x00, 0xBF, 0xFF, 0xF7, 0xFE, 0xEF, 0xFF, 0xF7,
- 0xFB, 0xBF, 0x00, 0x00, 0x00, 0xF0, 0x20, 0xE3,
- 0xFA, 0xFF, 0xFF, 0xFA, 0xF9, 0xFF, 0xFF, 0xEA ]
- relocations:
- - offset: 0x00000014
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: true
- symbol: 3
- - offset: 0x00000010
- type: ARM_RELOC_BR24
- length: 2
- pc-rel: true
- extern: true
- symbol: 3
- - offset: 0x00000006
- type: ARM_THUMB_RELOC_BR22
- length: 2
- pc-rel: true
- extern: true
- symbol: 2
- - offset: 0x00000002
- type: ARM_THUMB_RELOC_BR22
- length: 2
- pc-rel: true
- extern: true
- symbol: 2
-global-symbols:
- - name: _a2
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x000000000000000C
- - name: _t2
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- desc: [ N_ARM_THUMB_DEF ]
- value: 0x0000000000000000
-undefined-symbols:
- - name: _a1
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
- - name: _t1
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
-
...
-
-# CHECK: (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CHECK: ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
-# CHECK: ('_section_data', '00bf00f0 10e800f0 19b80000 00f020e3 000000fa 0f0000ea 00bffff7 f8ef00f0 07b80000 00f020e3 f4fffffa 050000ea dff804c0 ff446047 d4ffffff dff804c0 ff446047 e0ffffff 04c09fe5 0cc08fe0 1cff2fe1 adffffff 04c09fe5 0cc08fe0 1cff2fe1 b5ffffff')
+# CHECK: Section {
+# CHECK: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+# CHECK: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+# CHECK: SectionData (
+# CHECK: 0000: 00BF00F0 10E800F0 19B80000 00F020E3
+# CHECK: 0010: 000000FA 0F0000EA 00BFFFF7 F8EF00F0
+# CHECK: 0020: 07B80000 00F020E3 F4FFFFFA 050000EA
+# CHECK: 0030: DFF804C0 FF446047 D4FFFFFF DFF804C0
+# CHECK: 0040: FF446047 E0FFFFFF 04C09FE5 0CC08FE0
+# CHECK: 0050: 1CFF2FE1 ADFFFFFF 04C09FE5 0CC08FE0
+# CHECK: 0060: 1CFF2FE1 B5FFFFFF
+# CHECK: )
# When we get a good mach-o disassembler the above __text section content check can be change to be symbolic.
diff --git a/test/mach-o/arm-subsections-via-symbols.yaml b/test/mach-o/arm-subsections-via-symbols.yaml
index b704568f37b1..23c2847e6c77 100644
--- a/test/mach-o/arm-subsections-via-symbols.yaml
+++ b/test/mach-o/arm-subsections-via-symbols.yaml
@@ -18,8 +18,8 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0x04, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x9F, 0xE5,
- 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x56, 0x34, 0x12,
+ content: [ 0x04, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x9F, 0xE5,
+ 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x56, 0x34, 0x12,
0x21, 0x43, 0x65, 0x87 ]
local-symbols:
- name: constants1
diff --git a/test/mach-o/arm64-reloc-negDelta32-fixup.yaml b/test/mach-o/arm64-reloc-negDelta32-fixup.yaml
new file mode 100644
index 000000000000..87708a0db12b
--- /dev/null
+++ b/test/mach-o/arm64-reloc-negDelta32-fixup.yaml
@@ -0,0 +1,124 @@
+# RUN: lld -flavor darwin -arch arm64 -r %s -o %t
+# RUN: lld -flavor darwin -arch arm64 -r %t -o %t2
+# RUN: llvm-objdump -s -section="__eh_frame" %t | FileCheck %s
+# RUN: llvm-objdump -s -section="__eh_frame" %t2 | FileCheck %s
+
+# The reference from FDE->CIE is implicitly created as a negDelta32.
+# We don't emit these in to the binary as relocations, so we need to
+# make sure that the offset in the FDE to the CIE is the correct value.
+# CHECK: 0010 10000000 00000000 017a5200 01781e01
+# CHECK: 0020 100c1f00 20000000 18000000 e4ffffff
+# Note, this one that matters ^~~~~~~~
+# It needs to be 0x18 as that is the offset back to 0 where the CIE is.
+# CHECK: 0030 ffffffff 20000000 00000000 00480e10
+# CHECK: 0040 9e019d02 00000000
+
+--- !mach-o
+arch: arm64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+compat-version: 0.0
+current-version: 0.0
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 4
+ address: 0x0000000000000000
+ content: [ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
+ 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91,
+ 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x80, 0x52,
+ 0xFD, 0x7B, 0xC1, 0xA8, 0xC0, 0x03, 0x5F, 0xD6 ]
+ relocations:
+ - offset: 0x00000010
+ type: ARM64_RELOC_BRANCH26
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 6
+ - offset: 0x0000000C
+ type: ARM64_RELOC_PAGEOFF12
+ length: 2
+ pc-rel: false
+ extern: true
+ symbol: 1
+ - offset: 0x00000008
+ type: ARM64_RELOC_PAGE21
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 1
+ - segment: __TEXT
+ section: __cstring
+ type: S_CSTRING_LITERALS
+ attributes: [ ]
+ address: 0x0000000000000020
+ content: [ 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F,
+ 0x72, 0x6C, 0x64, 0x00 ]
+ - segment: __LD
+ section: __compact_unwind
+ type: S_REGULAR
+ attributes: [ ]
+ alignment: 8
+ address: 0x0000000000000030
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+ - offset: 0x00000000
+ type: ARM64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: false
+ symbol: 1
+ - segment: __TEXT
+ section: __eh_frame
+ type: S_COALESCED
+ attributes: [ ]
+ alignment: 8
+ address: 0x0000000000000050
+ content: [ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x1E, 0x01,
+ 0x10, 0x0C, 0x1F, 0x00, 0x20, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0E, 0x10,
+ 0x9E, 0x01, 0x9D, 0x02, 0x00, 0x00, 0x00, 0x00 ]
+local-symbols:
+ - name: ltmp0
+ type: N_SECT
+ sect: 1
+ value: 0x0000000000000000
+ - name: L_str
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000020
+ - name: ltmp1
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000020
+ - name: ltmp2
+ type: N_SECT
+ sect: 3
+ value: 0x0000000000000030
+ - name: ltmp3
+ type: N_SECT
+ sect: 4
+ value: 0x0000000000000050
+global-symbols:
+ - name: __Z3fooi
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+undefined-symbols:
+ - name: _puts
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+page-size: 0x00000000
+...
diff --git a/test/mach-o/arm64-relocs-errors-delta64-offset.yaml b/test/mach-o/arm64-relocs-errors-delta64-offset.yaml
new file mode 100644
index 000000000000..09c596124893
--- /dev/null
+++ b/test/mach-o/arm64-relocs-errors-delta64-offset.yaml
@@ -0,0 +1,65 @@
+# RUN: not lld -flavor darwin -arch arm64 %s -r \
+# RUN: 2> %t.err
+# RUN: FileCheck %s < %t.err
+
+
+--- !mach-o
+arch: arm64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 4
+ address: 0x0000000000000000
+ content: [ 0xFF, 0x83, 0x00, 0xD1, 0xE0, 0x0B, 0x00, 0xF9,
+ 0x08, 0x00, 0x40, 0xB9, 0x08, 0x0D, 0x00, 0x71,
+ 0x08, 0x09, 0x00, 0x71, 0xE8, 0x0F, 0x00, 0xB9,
+ 0xC8, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x14,
+ 0xE8, 0x03, 0x00, 0x32, 0x08, 0x01, 0x00, 0x12,
+ 0xE8, 0x7F, 0x00, 0x39, 0x02, 0x00, 0x00, 0x14 ]
+ - segment: __DATA
+ section: __data
+ type: S_REGULAR
+ attributes: [ ]
+ alignment: 3
+ address: 0x000000000001C348
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+
+# Make sure that the offsets of the subtractor and unsigned both match.
+# CHECK: bad relocation (paired relocs must have the same offset) in section __DATA/__data (r1_address=1, r1_type=1, r1_extern=1, r1_length=3, r1_pcrel=0, r1_symbolnum=1), (r2_address=0, r2_type=0, r2_extern=1, r2_length=3, r2_pcrel=0, r2_symbolnum=1)
+ - offset: 0x00000001
+ type: ARM64_RELOC_SUBTRACTOR
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 1
+ - offset: 0x00000000
+ type: ARM64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 1
+global-symbols:
+ - name: _f1
+ type: N_SECT
+ sect: 2
+ value: 0x000000000001C348
+ - name: _f2
+ type: N_SECT
+ sect: 1
+ value: 0x0000000000000010
+ - name: _f3
+ type: N_SECT
+ sect: 1
+ value: 0x0000000000000020
diff --git a/test/mach-o/cstring-sections.yaml b/test/mach-o/cstring-sections.yaml
index 940f048b5c6c..433dffcf62d9 100644
--- a/test/mach-o/cstring-sections.yaml
+++ b/test/mach-o/cstring-sections.yaml
@@ -27,32 +27,6 @@ sections:
address: 0x000000000000000A
content: [ 0x61, 0x62, 0x63, 0x00, 0x6A, 0x6B, 0x6C, 0x00 ]
---- !mach-o
-arch: x86_64
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-has-UUID: false
-OS: unknown
-sections:
- - segment: __TEXT
- section: __objc_methname
- type: S_CSTRING_LITERALS
- attributes: [ ]
- address: 0x0000000000000000
- content: [ 0x61, 0x62, 0x63, 0x00 ]
- - segment: __TEXT
- section: __objc_classname
- type: S_CSTRING_LITERALS
- attributes: [ ]
- address: 0x0000000000000006
- content: [ 0x61, 0x62, 0x63, 0x00 ]
- - segment: __TEXT
- section: __cstring
- type: S_CSTRING_LITERALS
- attributes: [ ]
- address: 0x000000000000000A
- content: [ 0x61, 0x62, 0x63, 0x00 ]
-
...
diff --git a/test/mach-o/data-only-dylib.yaml b/test/mach-o/data-only-dylib.yaml
index c285066ad778..8d2143047452 100644
--- a/test/mach-o/data-only-dylib.yaml
+++ b/test/mach-o/data-only-dylib.yaml
@@ -16,7 +16,7 @@ sections:
alignment: 2
address: 0x0000000000000000
content: [ 0x00, 0x00, 0x00, 0x00 ]
-global-symbols:
+global-symbols:
- name: _myData
type: N_SECT
scope: [ N_EXT ]
diff --git a/test/mach-o/demangle.yaml b/test/mach-o/demangle.yaml
index 640545808477..f8a76cddd29f 100644
--- a/test/mach-o/demangle.yaml
+++ b/test/mach-o/demangle.yaml
@@ -21,7 +21,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00,
+ content: [ 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00,
0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
relocations:
- offset: 0x0000000B
diff --git a/test/mach-o/dylib-exports.yaml b/test/mach-o/dylib-exports.yaml
deleted file mode 100644
index 0a00dfe1e952..000000000000
--- a/test/mach-o/dylib-exports.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 -dylib \
-# RUN: %s %p/Inputs/libSystem.yaml -o %t && \
-# RUN: llvm-objdump -exports-trie %t | FileCheck %s
-#
-#
-# Tests that exports trie builds properly.
-#
-
---- !mach-o
-arch: x86_64
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000000
- content: [ 0xC3, 0xC3, 0xC3 ]
-global-symbols:
- - name: _myHidden
- type: N_SECT
- scope: [ N_EXT, N_PEXT ]
- sect: 1
- value: 0x0000000000000000
- - name: _myRegular
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000001
- - name: _myWeak
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- desc: [ N_WEAK_DEF ]
- value: 0x0000000000000002
-...
-
-# CHECK-NOT: _myHidden
-# CHECK: _myRegular
-# CHECK: _myWeak [weak_def]
diff --git a/test/mach-o/executable-exports.yaml b/test/mach-o/executable-exports.yaml
new file mode 100644
index 000000000000..b14e2d229296
--- /dev/null
+++ b/test/mach-o/executable-exports.yaml
@@ -0,0 +1,46 @@
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 \
+# RUN: %s %p/Inputs/libSystem.yaml -o %t && \
+# RUN: llvm-objdump -exports-trie %t | FileCheck %s
+#
+#
+# Tests that exports trie builds properly.
+#
+
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ address: 0x0000000000000000
+ content: [ 0xC3, 0xC3, 0xC3, 0xC3 ]
+global-symbols:
+ - name: _myHidden
+ type: N_SECT
+ scope: [ N_EXT, N_PEXT ]
+ sect: 1
+ value: 0x0000000000000000
+ - name: _myRegular
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000001
+ - name: _myWeak
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ desc: [ N_WEAK_DEF ]
+ value: 0x0000000000000002
+ - name: _main
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000003
+...
+
+# CHECK-NOT: _myHidden
+# CHECK: 0x00000FFD _myRegular
+# CHECK: 0x00000FFE _myWeak [weak_def]
diff --git a/test/mach-o/exported_symbols_list-dylib.yaml b/test/mach-o/exported_symbols_list-dylib.yaml
index 71121d7400f6..f52614038ca4 100644
--- a/test/mach-o/exported_symbols_list-dylib.yaml
+++ b/test/mach-o/exported_symbols_list-dylib.yaml
@@ -31,7 +31,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
0x89, 0xE5, 0x5D, 0xC3 ]
- segment: __DATA
section: __data
diff --git a/test/mach-o/exported_symbols_list-obj.yaml b/test/mach-o/exported_symbols_list-obj.yaml
index 735162dfedc8..31b325c7387b 100644
--- a/test/mach-o/exported_symbols_list-obj.yaml
+++ b/test/mach-o/exported_symbols_list-obj.yaml
@@ -21,7 +21,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
0x89, 0xE5, 0x5D, 0xC3 ]
- segment: __DATA
section: __data
diff --git a/test/mach-o/exported_symbols_list-undef.yaml b/test/mach-o/exported_symbols_list-undef.yaml
index c6a8d8f4022f..1e2fc821c365 100644
--- a/test/mach-o/exported_symbols_list-undef.yaml
+++ b/test/mach-o/exported_symbols_list-undef.yaml
@@ -14,7 +14,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
0x89, 0xE5, 0x5D, 0xC3 ]
- segment: __DATA
section: __data
diff --git a/test/mach-o/fat-archive.yaml b/test/mach-o/fat-archive.yaml
index 5db7fd96ff0e..86828d6a12b7 100644
--- a/test/mach-o/fat-archive.yaml
+++ b/test/mach-o/fat-archive.yaml
@@ -16,11 +16,11 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 4
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
- 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
- 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
+ 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
+ 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
0x48, 0x83, 0xC4, 0x10, 0x5D, 0xC3 ]
- relocations:
+ relocations:
- offset: 0x00000012
type: X86_64_RELOC_BRANCH
length: 2
diff --git a/test/mach-o/flat_namespace_undef_error.yaml b/test/mach-o/flat_namespace_undef_error.yaml
new file mode 100644
index 000000000000..904b9c776e59
--- /dev/null
+++ b/test/mach-o/flat_namespace_undef_error.yaml
@@ -0,0 +1,17 @@
+# RUN: not lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 -flat_namespace -undefined error %s -o %t %p/Inputs/libSystem.yaml 2>&1 | FileCheck %s
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: [ E9, 00, 00, 00, 00 ]
+ alignment: 16
+ references:
+ - kind: branch32
+ offset: 1
+ target: _bar
+undefined-atoms:
+ - name: _bar
+
+# Make sure we error out for -flat_namespace -undefined error.
+# CHECK: Undefined symbol: : _bar
diff --git a/test/mach-o/flat_namespace_undef_suppress.yaml b/test/mach-o/flat_namespace_undef_suppress.yaml
new file mode 100644
index 000000000000..5152a1cd985c
--- /dev/null
+++ b/test/mach-o/flat_namespace_undef_suppress.yaml
@@ -0,0 +1,17 @@
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 -flat_namespace -undefined suppress %s -o %t %p/Inputs/libSystem.yaml
+#
+# Sanity check '-flat_namespace -undefined suppress'.
+# This should pass without error, even though '_bar' is undefined.
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: [ E9, 00, 00, 00, 00 ]
+ alignment: 16
+ references:
+ - kind: branch32
+ offset: 1
+ target: _bar
+undefined-atoms:
+ - name: _bar
diff --git a/test/mach-o/force_load-dylib.yaml b/test/mach-o/force_load-dylib.yaml
index 0b932e159882..c8f559bedd79 100644
--- a/test/mach-o/force_load-dylib.yaml
+++ b/test/mach-o/force_load-dylib.yaml
@@ -1,7 +1,7 @@
# RUN: lld -flavor darwin -arch x86_64 -dylib %p/Inputs/bar.yaml \
# RUN: -install_name /usr/lib/libbar.dylib %p/Inputs/libSystem.yaml -o %t1.dylib
# RUN: lld -flavor darwin -arch x86_64 -dylib %s -all_load %t1.dylib \
-# RUN: -install_name /usr/lib/libfoo.dylib %p/Inputs/libSystem.yaml -o %t
+# RUN: -install_name /usr/lib/libfoo.dylib %p/Inputs/libSystem.yaml -o %t
# RUN: llvm-nm -m %t | FileCheck %s
#
#
@@ -18,7 +18,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
0x00, 0x00, 0x00, 0x00 ]
relocations:
- offset: 0x00000008
diff --git a/test/mach-o/force_load-x86_64.yaml b/test/mach-o/force_load-x86_64.yaml
index 35905effd2c4..1be216ca3a74 100644
--- a/test/mach-o/force_load-x86_64.yaml
+++ b/test/mach-o/force_load-x86_64.yaml
@@ -15,14 +15,14 @@ file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
has-UUID: false
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
content: [ 0xC3 ]
-global-symbols:
+global-symbols:
- name: _main
type: N_SECT
scope: [ N_EXT ]
diff --git a/test/mach-o/framework-user-paths.yaml b/test/mach-o/framework-user-paths.yaml
index f6ac64779a71..80d6e3b5868b 100644
--- a/test/mach-o/framework-user-paths.yaml
+++ b/test/mach-o/framework-user-paths.yaml
@@ -1,5 +1,5 @@
#
-# Test framework and SDK search paths.
+# Test framework and SDK search paths.
# myFrameworks is not an absolute path, so it should not by found in SDK
# /Custom/Frameworks should be found in SDK
# /opt/Frameworks should not be found in SDK
diff --git a/test/mach-o/gcc_except_tab-got-arm64.yaml b/test/mach-o/gcc_except_tab-got-arm64.yaml
new file mode 100644
index 000000000000..7d105ec17847
--- /dev/null
+++ b/test/mach-o/gcc_except_tab-got-arm64.yaml
@@ -0,0 +1,53 @@
+# RUN: lld -flavor darwin -arch arm64 %s \
+# RUN: -dylib %p/Inputs/libSystem.yaml -o %t
+# RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+# Make sure that the GOT relocation from gcc_except_tab to the data
+# is not removed.
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: [ FD, 7B, BF, A9, FD, 03, 00, 91, FF, 43, 00, D1,
+ BF, C3, 1F, B8, 00, 00, 00, 94, BF, 03, 00, 91,
+ FD, 7B, C1, A8, C0, 03, 5F, D6 ]
+ alignment: 4
+ - name: __ZTSP1A
+ scope: hidden
+ type: constant
+ content: [ 50, 31, 41, 00 ]
+ merge: as-weak
+ - name: GCC_except_table0
+ type: unwind-lsda
+ content: [ FF, 9B, E7, 80, 00, 03, 5B, 00, 00, 00, 00, 1C,
+ 00, 00, 00, 00, 00, 00, 00, 00, 1C, 00, 00, 00,
+ 18, 00, 00, 00, 84, 00, 00, 00, 03, 40, 00, 00,
+ 00, 10, 00, 00, 00, 94, 00, 00, 00, 03, 60, 00,
+ 00, 00, 20, 00, 00, 00, B4, 00, 00, 00, 05, 80,
+ 00, 00, 00, 68, 00, 00, 00, 00, 00, 00, 00, 00,
+ E8, 00, 00, 00, 08, 00, 00, 00, 28, 01, 00, 00,
+ 00, F0, 00, 00, 00, 74, 00, 00, 00, 00, 00, 00,
+ 00, 00, 00, 00, 01, 7D, 01, 00, A8, FF, FF, FF ]
+ alignment: 4
+ references:
+ - kind: delta32ToGOT
+ offset: 104
+ target: __ZTIP1A
+ - name: __ZTIP1A
+ scope: hidden
+ type: data
+ content: [ 10, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+ 00, 00, 00, 80, 00, 00, 00, 00, 00, 00, 00, 00,
+ 00, 00, 00, 00, 00, 00, 00, 00 ]
+ merge: as-weak
+ alignment: 16
+shared-library-atoms:
+ - name: dyld_stub_binder
+ load-name: /usr/lib/libSystem.B.dylib
+ type: unknown
+...
+
+# Make sure we have a GOT relocation.
+# This could only have come from __gcc_except_tab to __ZTIP1A
+# CHECK: __got \ No newline at end of file
diff --git a/test/mach-o/got-order.yaml b/test/mach-o/got-order.yaml
index fbbc4e0397f2..b69877ecdc39 100644
--- a/test/mach-o/got-order.yaml
+++ b/test/mach-o/got-order.yaml
@@ -1,4 +1,5 @@
-# RUN: lld -flavor darwin -arch x86_64 %s -o %t %p/Inputs/libSystem.yaml
+# RUN: lld -flavor darwin -arch x86_64 %s %p/Inputs/got-order.yaml \
+# RUN: %p/Inputs/got-order2.yaml -o %t %p/Inputs/libSystem.yaml
# RUN: llvm-objdump -bind %t | FileCheck %s
#
# Test that GOT slots are sorted by name
@@ -8,18 +9,18 @@
arch: x86_64
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x0D, 0x00,
- 0x00, 0x00, 0x00, 0x48, 0x8B, 0x05, 0x00, 0x00,
- 0x00, 0x00, 0x8B, 0x00, 0x03, 0x01, 0x48, 0x8B,
- 0x0D, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x5D,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x0D, 0x00,
+ 0x00, 0x00, 0x00, 0x48, 0x8B, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x8B, 0x00, 0x03, 0x01, 0x48, 0x8B,
+ 0x0D, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x5D,
0xC3 ]
- relocations:
+ relocations:
- offset: 0x00000019
type: X86_64_RELOC_GOT_LOAD
length: 2
@@ -38,13 +39,13 @@ sections:
pc-rel: true
extern: true
symbol: 3
-global-symbols:
+global-symbols:
- name: _func
type: N_SECT
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000000
-undefined-symbols:
+undefined-symbols:
- name: _aaa
type: N_UNDF
scope: [ N_EXT ]
@@ -57,72 +58,6 @@ undefined-symbols:
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x0D, 0x00,
- 0x00, 0x00, 0x00, 0x48, 0x8B, 0x05, 0x00, 0x00,
- 0x00, 0x00, 0x8B, 0x00, 0x03, 0x01, 0x48, 0x8B,
- 0x0D, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x5D,
- 0xC3 ]
- relocations:
- - offset: 0x00000019
- type: X86_64_RELOC_GOT_LOAD
- length: 2
- pc-rel: true
- extern: true
- symbol: 2
- - offset: 0x0000000E
- type: X86_64_RELOC_GOT_LOAD
- length: 2
- pc-rel: true
- extern: true
- symbol: 1
- - offset: 0x00000007
- type: X86_64_RELOC_GOT_LOAD
- length: 2
- pc-rel: true
- extern: true
- symbol: 3
-global-symbols:
- - name: _main
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
-undefined-symbols:
- - name: _bar
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
- - name: _foo
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
- - name: _zazzle
- type: N_UNDF
- scope: [ N_EXT ]
- value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libfoobar.dylib
-exports:
- - name: _bar
- - name: _zazzle
- - name: _foo
- - name: _aaa
- - name: _fff
- - name: _zzz
...
diff --git a/test/mach-o/hello-world-arm64.yaml b/test/mach-o/hello-world-arm64.yaml
index a0555e9cc426..75ac4f747795 100644
--- a/test/mach-o/hello-world-arm64.yaml
+++ b/test/mach-o/hello-world-arm64.yaml
@@ -1,4 +1,4 @@
-# RUN: lld -flavor darwin -arch arm64 %s -o %t
+# RUN: lld -flavor darwin -arch arm64 %s %p/Inputs/hello-world-arm64.yaml -o %t
# RUN: llvm-nm -m -n %t | FileCheck %s
#
# Test that arm64 hello-world can be linked into a mach-o executable
@@ -88,17 +88,7 @@ undefined-symbols:
value: 0x0000000000000000
...
---- !mach-o
-arch: arm64
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _fprintf
- - name: ___stdoutp
- - name: dyld_stub_binder
-...
-
-# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
# CHECK: (undefined) external ___stdoutp (from libSystem)
# CHECK: (undefined) external _fprintf (from libSystem)
# CHECK: (undefined) external dyld_stub_binder (from libSystem)
+# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
diff --git a/test/mach-o/hello-world-armv6.yaml b/test/mach-o/hello-world-armv6.yaml
index 746ee094da68..8a9edeeddbac 100644
--- a/test/mach-o/hello-world-armv6.yaml
+++ b/test/mach-o/hello-world-armv6.yaml
@@ -1,4 +1,4 @@
-# RUN: lld -flavor darwin -arch armv6 %s -o %t
+# RUN: lld -flavor darwin -arch armv6 %s %p/Inputs/hello-world-armv6.yaml -o %t
# RUN: llvm-nm -m %t | FileCheck %s
#
# Test that armv6 (arm) hello-world can be linked into a mach-o executable
@@ -57,14 +57,6 @@ undefined-symbols:
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: armv6
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _printf
- - name: dyld_stub_binder
...
# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
diff --git a/test/mach-o/hello-world-armv7.yaml b/test/mach-o/hello-world-armv7.yaml
index bfc03c382a05..1871d68f6b92 100644
--- a/test/mach-o/hello-world-armv7.yaml
+++ b/test/mach-o/hello-world-armv7.yaml
@@ -1,4 +1,4 @@
-# RUN: lld -flavor darwin -arch armv7 %s -o %t
+# RUN: lld -flavor darwin -arch armv7 %s %p/Inputs/hello-world-armv7.yaml -o %t
# RUN: llvm-nm -m -n %t | FileCheck %s
#
# Test that armv7 (thumb) hello-world can be linked into a mach-o executable
@@ -10,17 +10,17 @@ file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
has-UUID: false
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0x80, 0xB5, 0x40, 0xF2, 0x06, 0x00, 0x6F, 0x46,
- 0xC0, 0xF2, 0x00, 0x00, 0x78, 0x44, 0xFF, 0xF7,
+ content: [ 0x80, 0xB5, 0x40, 0xF2, 0x06, 0x00, 0x6F, 0x46,
+ 0xC0, 0xF2, 0x00, 0x00, 0x78, 0x44, 0xFF, 0xF7,
0xF8, 0xEF, 0x00, 0x20, 0x80, 0xBD ]
- relocations:
+ relocations:
- offset: 0x0000000E
type: ARM_THUMB_RELOC_BR22
length: 2
@@ -57,29 +57,20 @@ sections:
attributes: [ ]
address: 0x0000000000000016
content: [ 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x0A, 0x00 ]
-global-symbols:
+global-symbols:
- name: _main
type: N_SECT
scope: [ N_EXT ]
sect: 1
desc: [ N_ARM_THUMB_DEF ]
value: 0x0000000000000000
-undefined-symbols:
+undefined-symbols:
- name: _printf
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
...
---- !mach-o
-arch: armv7
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _printf
- - name: dyld_stub_binder
-...
-
-# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external [Thumb] _main
# CHECK: (undefined) external _printf (from libSystem)
# CHECK: (undefined) external dyld_stub_binder (from libSystem)
+# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external [Thumb] _main
diff --git a/test/mach-o/hello-world-x86.yaml b/test/mach-o/hello-world-x86.yaml
index de453ed1ac45..779b6811e080 100644
--- a/test/mach-o/hello-world-x86.yaml
+++ b/test/mach-o/hello-world-x86.yaml
@@ -1,4 +1,4 @@
-# RUN: lld -flavor darwin -arch i386 %s -o %t
+# RUN: lld -flavor darwin -arch i386 %s %p/Inputs/hello-world-x86.yaml -o %t
# RUN: llvm-nm -m %t | FileCheck %s
#
# Test that i386 hello-world can be linked into a mach-o executable
@@ -14,10 +14,10 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8, 0x00,
- 0x00, 0x00, 0x00, 0x58, 0x8D, 0x80, 0x16, 0x00,
- 0x00, 0x00, 0x89, 0x04, 0x24, 0xE8, 0xE6, 0xFF,
- 0xFF, 0xFF, 0x31, 0xC0, 0x83, 0xC4, 0x08, 0x5D,
+ content: [ 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8, 0x00,
+ 0x00, 0x00, 0x00, 0x58, 0x8D, 0x80, 0x16, 0x00,
+ 0x00, 0x00, 0x89, 0x04, 0x24, 0xE8, 0xE6, 0xFF,
+ 0xFF, 0xFF, 0x31, 0xC0, 0x83, 0xC4, 0x08, 0x5D,
0xC3 ]
relocations:
- offset: 0x00000016
@@ -55,15 +55,6 @@ undefined-symbols:
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: x86
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _printf
- - name: dyld_stub_binder
-
...
# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
diff --git a/test/mach-o/hello-world-x86_64.yaml b/test/mach-o/hello-world-x86_64.yaml
index 83d4fcb32601..340ceefbe7cb 100644
--- a/test/mach-o/hello-world-x86_64.yaml
+++ b/test/mach-o/hello-world-x86_64.yaml
@@ -1,7 +1,9 @@
-# RUN: lld -flavor darwin -arch x86_64 %s -o %t
+# RUN: lld -flavor darwin -arch x86_64 %s %p/Inputs/hello-world-x86_64.yaml \
+# RUN: -o %t
# RUN: llvm-nm -m -n %t | FileCheck %s
#
-# RUN: lld -flavor darwin -arch x86_64 %s -dead_strip -o %t2
+# RUN: lld -flavor darwin -arch x86_64 %s %p/Inputs/hello-world-x86_64.yaml \
+# RUN: -dead_strip -o %t2
# RUN: llvm-nm -m -n %t2 | FileCheck %s
#
# Test that x86_64 hello-world can be linked into a mach-o executable
@@ -13,17 +15,17 @@ file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
has-UUID: false
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x05, 0x00,
- 0x00, 0x00, 0x00, 0x48, 0x8B, 0x38, 0x48, 0x8D,
- 0x35, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0, 0xE8,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x48, 0x8B, 0x38, 0x48, 0x8D,
+ 0x35, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0, 0xE8,
0x00, 0x00, 0x00, 0x00, 0x31, 0xC0, 0x5D, 0xC3 ]
- relocations:
+ relocations:
- offset: 0x00000018
type: X86_64_RELOC_BRANCH
length: 2
@@ -54,11 +56,11 @@ sections:
attributes: [ ]
alignment: 3
address: 0x0000000000000028
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x00000000
type: X86_64_RELOC_UNSIGNED
length: 3
@@ -71,15 +73,15 @@ sections:
attributes: [ ]
alignment: 3
address: 0x0000000000000048
- content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x10, 0x01,
- 0x10, 0x0C, 0x07, 0x08, 0x90, 0x01, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
- 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x41, 0x0E, 0x10, 0x86, 0x02, 0x43, 0x0D,
+ content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x10, 0x01,
+ 0x10, 0x0C, 0x07, 0x08, 0x90, 0x01, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
+ 0x98, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x0E, 0x10, 0x86, 0x02, 0x43, 0x0D,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
-local-symbols:
+local-symbols:
- name: L1
type: N_SECT
sect: 2
@@ -88,7 +90,7 @@ local-symbols:
type: N_SECT
sect: 4
value: 0x0000000000000048
-global-symbols:
+global-symbols:
- name: _main
type: N_SECT
scope: [ N_EXT ]
@@ -99,7 +101,7 @@ global-symbols:
scope: [ N_EXT ]
sect: 4
value: 0x0000000000000060
-undefined-symbols:
+undefined-symbols:
- name: ___stdoutp
type: N_UNDF
scope: [ N_EXT ]
@@ -109,18 +111,9 @@ undefined-symbols:
scope: [ N_EXT ]
value: 0x0000000000000000
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _fprintf
- - name: dyld_stub_binder
- - name: ___stdoutp
-
...
-# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
# CHECK: (undefined) external ___stdoutp (from libSystem)
# CHECK: (undefined) external _fprintf (from libSystem)
# CHECK: (undefined) external dyld_stub_binder (from libSystem)
+# CHECK: {{[0-9a-f]+}} (__TEXT,__text) external _main
diff --git a/test/mach-o/image-base.yaml b/test/mach-o/image-base.yaml
index cc272491bc55..d274621f8dd3 100644
--- a/test/mach-o/image-base.yaml
+++ b/test/mach-o/image-base.yaml
@@ -1,5 +1,5 @@
# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 %s -o %t -image_base 31415926000 %p/Inputs/libSystem.yaml
-# RUN: macho-dump %t | FileCheck %s
+# RUN: llvm-readobj -macho-segment %t | FileCheck %s
# RUN: not lld -flavor darwin -arch x86_64 -image_base 0x31415926530 %s >/dev/null 2> %t
# RUN: FileCheck < %t %s --check-prefix=CHECK-ERROR-MISPAGED
# RUN: not lld -flavor darwin -arch x86_64 -image_base 1000 %s >/dev/null 2> %t
@@ -13,11 +13,12 @@ defined-atoms:
scope: global
content: []
- # Unfortunately, llvm-objdump and llvm-readobj are too generic and don't give
- # us easy access to the MachO segment model, so we have to check the uglier
- # macho-dump output.
-# CHECK: 'segment_name', '__TEXT
-# CHECK-NEXT: 'vm_addr', 3384796143616
+# CHECK: Segment {
+# CHECK: Cmd: LC_SEGMENT_64
+# CHECK: Name: __TEXT
+# CHECK-NEXT: Size: 152
+# CHECK-NEXT: vmaddr: 0x31415926000
+# CHECK-NEXT: vmsize: 0x1000
# CHECK-ERROR-MISPAGED: error: image_base must be a multiple of page size (0x1000)
diff --git a/test/mach-o/infer-arch.yaml b/test/mach-o/infer-arch.yaml
index 94f8543bd72e..c09c94dd1b70 100644
--- a/test/mach-o/infer-arch.yaml
+++ b/test/mach-o/infer-arch.yaml
@@ -25,5 +25,5 @@ global-symbols:
...
-# CHECK: defined-atoms:
+# CHECK: defined-atoms:
# CHECK: - name: _foo
diff --git a/test/mach-o/interposing-section.yaml b/test/mach-o/interposing-section.yaml
index 856d4b91f3d2..76e33904d113 100644
--- a/test/mach-o/interposing-section.yaml
+++ b/test/mach-o/interposing-section.yaml
@@ -1,4 +1,5 @@
-# RUN: lld -flavor darwin -arch x86_64 %s -dylib -o %t %p/Inputs/libSystem.yaml
+# RUN: lld -flavor darwin -arch x86_64 %s %p/Inputs/interposing-section.yaml \
+# RUN: -dylib -o %t %p/Inputs/libSystem.yaml
# RUN: llvm-objdump -private-headers %t | FileCheck %s
#
# RUN: lld -flavor darwin -arch x86_64 %s -r -o %t1
@@ -11,15 +12,15 @@
arch: x86_64
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
0x00, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x00000008
type: X86_64_RELOC_BRANCH
length: 2
@@ -32,9 +33,9 @@ sections:
attributes: [ ]
alignment: 3
address: 0x0000000000000010
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x00000008
type: X86_64_RELOC_UNSIGNED
length: 3
@@ -47,7 +48,7 @@ sections:
pc-rel: false
extern: true
symbol: 0
-local-symbols:
+local-symbols:
- name: _my_open
type: N_SECT
sect: 1
@@ -57,19 +58,11 @@ local-symbols:
sect: 2
desc: [ N_NO_DEAD_STRIP ]
value: 0x0000000000000010
-undefined-symbols:
+undefined-symbols:
- name: _open
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: _open
-
...
diff --git a/test/mach-o/keep_private_externs.yaml b/test/mach-o/keep_private_externs.yaml
index d67941a1c8eb..e7adf180fc7b 100644
--- a/test/mach-o/keep_private_externs.yaml
+++ b/test/mach-o/keep_private_externs.yaml
@@ -17,7 +17,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x55, 0x48,
0x89, 0xE5, 0x5D, 0xC3 ]
- segment: __DATA
section: __data
diff --git a/test/mach-o/lazy-bind-x86_64.yaml b/test/mach-o/lazy-bind-x86_64.yaml
index 54d787ce91be..1b4699feed35 100644
--- a/test/mach-o/lazy-bind-x86_64.yaml
+++ b/test/mach-o/lazy-bind-x86_64.yaml
@@ -1,6 +1,8 @@
# REQUIRES: x86
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -o %t \
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/lazy-bind-x86_64.yaml %p/Inputs/lazy-bind-x86_64-2.yaml \
+# RUN: %p/Inputs/lazy-bind-x86_64-3.yaml -o %t \
# RUN: %p/Inputs/libSystem.yaml
# RUN: llvm-objdump -lazy-bind %t | FileCheck %s
# RUN: llvm-nm -m %t | FileCheck --check-prefix=CHECK-NM %s
@@ -63,33 +65,6 @@ undefined-symbols:
scope: [ N_EXT ]
value: 0x0000000000000000
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libbar.dylib
-compat-version: 1.0
-current-version: 2.3
-exports:
- - name: _bar
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libfoo.dylib
-compat-version: 2.0
-current-version: 3.4
-exports:
- - name: _foo
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libbaz.dylib
-compat-version: 3.0
-current-version: 4.5
-exports:
- - name: _baz
-
...
diff --git a/test/mach-o/library-order.yaml b/test/mach-o/library-order.yaml
index 23e9f6873134..f9cd5a6c44d2 100644
--- a/test/mach-o/library-order.yaml
+++ b/test/mach-o/library-order.yaml
@@ -16,9 +16,9 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 4
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
- 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
- 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
+ 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
+ 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
0x48, 0x83, 0xC4, 0x10, 0x5D, 0xC3 ]
relocations:
- offset: 0x00000012
diff --git a/test/mach-o/library-rescan.yaml b/test/mach-o/library-rescan.yaml
index a58d763fff00..a8a0ca8968b3 100644
--- a/test/mach-o/library-rescan.yaml
+++ b/test/mach-o/library-rescan.yaml
@@ -16,9 +16,9 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 4
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
- 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
- 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10,
+ 0xC7, 0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0,
+ 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x31, 0xC0,
0x48, 0x83, 0xC4, 0x10, 0x5D, 0xC3 ]
relocations:
- offset: 0x00000012
diff --git a/test/mach-o/linker-as-ld.yaml b/test/mach-o/linker-as-ld.yaml
index 2dd1f79818e1..f0bf189876a6 100644
--- a/test/mach-o/linker-as-ld.yaml
+++ b/test/mach-o/linker-as-ld.yaml
@@ -1,7 +1,8 @@
# REQUIRES: system-linker-mach-o
#
# RUN: mkdir -p %t.dir && cp `which lld` %t.dir/ld \
-# RUN: && %t.dir/ld -arch x86_64 -macosx_version_min 10.8 %s -o %t \
+# RUN: && %t.dir/ld -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/linker-as-ld.yaml -o %t \
# RUN: && llvm-nm %t | FileCheck %s
#
# Test linker run as "ld" on darwin works as darwin linker.
@@ -26,14 +27,6 @@ global-symbols:
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-install-name: /usr/lib/libSystem.B.dylib
-exports:
- - name: dyld_stub_binder
-
...
# CHECK: T _main
diff --git a/test/mach-o/objc_export_list.yaml b/test/mach-o/objc_export_list.yaml
index 5844812295be..9eb0af77726e 100644
--- a/test/mach-o/objc_export_list.yaml
+++ b/test/mach-o/objc_export_list.yaml
@@ -17,15 +17,15 @@ sections:
attributes: [ ]
alignment: 3
address: 0x0000000000000000
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
relocations:
- offset: 0x00000030
diff --git a/test/mach-o/parse-aliases.yaml b/test/mach-o/parse-aliases.yaml
index 457ea58133b9..54da2d64e63a 100644
--- a/test/mach-o/parse-aliases.yaml
+++ b/test/mach-o/parse-aliases.yaml
@@ -68,7 +68,7 @@ global-symbols:
value: 0x0000000000000001
...
-# CHECK: defined-atoms:
+# CHECK: defined-atoms:
# CHECK: - name: _pad
# CHECK: scope: global
# CHECK: content: [ CC ]
diff --git a/test/mach-o/parse-arm-relocs.yaml b/test/mach-o/parse-arm-relocs.yaml
index c87c2a99b215..abeb3ddeb9d1 100644
--- a/test/mach-o/parse-arm-relocs.yaml
+++ b/test/mach-o/parse-arm-relocs.yaml
@@ -438,10 +438,10 @@ sections:
type: S_REGULAR
attributes: [ ]
address: 0x00000000000000A0
- content: [ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0xFF, 0xFF,
- 0xA4, 0xFF, 0xFF, 0xFF, 0x45, 0xFF, 0xFF, 0xFF,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0xFF, 0xFF,
+ 0xA4, 0xFF, 0xFF, 0xFF, 0x45, 0xFF, 0xFF, 0xFF,
0x45, 0xFF, 0xFF, 0xFF ]
relocations:
- offset: 0x00000020
@@ -742,7 +742,7 @@ undefined-symbols:
# CHECK: offset: 68
# CHECK: target: _undef
# CHECK: addend: 8
-# CHECK: undefined-atoms:
+# CHECK: undefined-atoms:
# CHECK: - name: _undef
@@ -782,7 +782,7 @@ undefined-symbols:
#
#
# .code 32
-# .align 2
+# .align 2
#_foo_arm:
# bl _x
# bl _x+4
@@ -803,7 +803,7 @@ undefined-symbols:
# movt r5, :upper16:_undef
# movw r6, :lower16:_undef+8
# movt r6, :upper16:_undef+8
-#
+#
#
# .data
#_x: .long 0
diff --git a/test/mach-o/parse-cfstring64.yaml b/test/mach-o/parse-cfstring64.yaml
index fbd674d90d99..b90277f056e5 100644
--- a/test/mach-o/parse-cfstring64.yaml
+++ b/test/mach-o/parse-cfstring64.yaml
@@ -72,7 +72,7 @@ undefined-symbols:
value: 0x0000000000000000
...
-# CHECK:defined-atoms:
+# CHECK:defined-atoms:
# CHECK: - ref-name: L000
# CHECK: scope: hidden
# CHECK: type: c-string
@@ -86,7 +86,7 @@ undefined-symbols:
# CHECK: - scope: hidden
# CHECK: type: cfstring
# CHECK: merge: by-content
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
# CHECK: target: ___CFConstantStringClassReference
@@ -96,13 +96,13 @@ undefined-symbols:
# CHECK: - scope: hidden
# CHECK: type: cfstring
# CHECK: merge: by-content
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
# CHECK: target: ___CFConstantStringClassReference
# CHECK: - kind: pointer64
# CHECK: offset: 16
# CHECK: target: L001
-# CHECK:undefined-atoms:
+# CHECK:undefined-atoms:
# CHECK: - name: ___CFConstantStringClassReference
diff --git a/test/mach-o/parse-data-in-code-armv7.yaml b/test/mach-o/parse-data-in-code-armv7.yaml
index 29b483e7d723..720f24d7b47f 100644
--- a/test/mach-o/parse-data-in-code-armv7.yaml
+++ b/test/mach-o/parse-data-in-code-armv7.yaml
@@ -18,11 +18,11 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0x00, 0xBF, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xBF,
- 0x00, 0xF0, 0x20, 0xE3, 0x0A, 0x00, 0x00, 0x00,
- 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0xBF, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0xBF,
+ 0x00, 0xF0, 0x20, 0xE3, 0x0A, 0x00, 0x00, 0x00,
+ 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x20, 0xE3 ]
local-symbols:
- name: _foo_thumb
@@ -133,7 +133,7 @@ dataInCode:
#
#
# .code 32
-# .align 2
+# .align 2
#_foo_arm:
# nop
#
diff --git a/test/mach-o/parse-data-relocs-x86_64.yaml b/test/mach-o/parse-data-relocs-x86_64.yaml
index ae93c1bb75d9..b6f38f5d10e4 100644
--- a/test/mach-o/parse-data-relocs-x86_64.yaml
+++ b/test/mach-o/parse-data-relocs-x86_64.yaml
@@ -2,7 +2,7 @@
# RUN: lld -flavor darwin -arch x86_64 -r %s -o %t -print_atoms | FileCheck %s \
# RUN: && lld -flavor darwin -arch x86_64 %t -r -print_atoms -o %t2 | FileCheck %s
#
-# Test parsing and writing of x86_64 text relocations.
+# Test parsing and writing of x86_64 data relocations.
#
# The first step tests if the supplied mach-o file is parsed into the correct
# set of references. The second step verifies relocations can be round-tripped
@@ -14,11 +14,11 @@
#
#_bar:
# ret
-#
+#
# .section __DATA,__custom
#L1:
# .quad 0
-#
+#
# .data
#_d:
# .quad _foo
@@ -37,10 +37,12 @@
--- !mach-o
arch: x86_64
file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+flags: [ ]
+compat-version: 0.0
+current-version: 0.0
has-UUID: false
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
@@ -52,107 +54,186 @@ sections:
type: S_REGULAR
attributes: [ ]
address: 0x0000000000000002
- content: [ 0x00, 0x00, 0x00, 0x00 ]
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- segment: __DATA
section: __data
type: S_REGULAR
attributes: [ ]
- alignment: 3
- address: 0x0000000000000008
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xD2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xC8, 0xFF, 0xFF, 0xFF, 0xC8, 0xFF, 0xFF, 0xFF,
- 0xC2, 0xFF, 0xFF, 0xFF ]
- relocations:
- - offset: 0x00000040
+ address: 0x000000000000000A
+ content: [
+# .quad _foo
+# No addend is needed here as we are referencing _foo directly and that is
+# encoded entirely in the X86_64_RELOC_UNSIGNED
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+# .quad _foo+4
+# Addend of 4 is needed here as we are referencing _foo from the
+# X86_64_RELOC_UNSIGNED, then the addend gives us 4 more.
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+# .quad _foo - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned references _foo.
+# Note the addend here is -16 because that is the offset from here back
+# to _d.
+ 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+# .quad L1
+# This is a X86_64_RELOC_UNSIGNED without extern set.
+# In this case, we encode the section number for L1 in the relocation, and
+# the addend here is the absolute address of the location in that section
+# we want to reference.
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+# .quad L1 + 2
+# This is a X86_64_RELOC_UNSIGNED without extern set.
+# In this case, we encode the section number for L1 in the relocation, and
+# the addend here is the absolute address of the location in that section
+# we want to reference. We have a 4 because the section is at address 2
+# and we want an offset of 2 from there.
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+# .quad _foo - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned references _foo.
+# Note the addend here is -40 because that is the offset from here back
+# to _d.
+ 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+# .quad _foo + 4 - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned references _foo.
+# Note the addend here is -44. It would have been -48 because that
+# would take us from the address of this relocation back to _d. But as
+# we also add 4 for the offset, we get -44.
+ 0xD4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+# .quad L1 - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned does not have extern set, so the relocation
+# number is the section number for L1.
+# Note the addend here is -54. Of that, -56 would be the offset from
+# this location from _d. The remaining 2 is the absolute address
+# of L1.
+ 0xCA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+# .long _foo - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned references _foo.
+# Note the addend here is -64 because that is the offset from here back
+# to _d.
+ 0xC0, 0xFF, 0xFF, 0xFF,
+# .long _foo + 4 - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned references _foo.
+# Note the addend here is -64. It would have been -68 because that
+# would take us from the address of this relocation back to _d. But as
+# we also add 4 for the offset, we get -64.
+ 0xC0, 0xFF, 0xFF, 0xFF,
+# .long L1 - .
+# This is the pair X86_64_RELOC_SUBTRACTOR and X86_64_RELOC_UNSIGNED.
+# The subtractor references _d which is the first nonlocal label in this
+# section. The unsigned does not have extern set, so the relocation
+# number is the section number for L1.
+# Note the addend here is -70. Of that, -72 would be the offset from
+# this location from _d. The remaining 2 is the absolute address
+# of L1.
+ 0xBA, 0xFF, 0xFF, 0xFF ]
+ relocations:
+ - offset: 0x00000048
type: X86_64_RELOC_SUBTRACTOR
length: 2
pc-rel: false
extern: true
symbol: 2
- - offset: 0x00000040
+ - offset: 0x00000048
type: X86_64_RELOC_UNSIGNED
length: 2
pc-rel: false
extern: false
symbol: 2
- - offset: 0x0000003C
+ - offset: 0x00000044
type: X86_64_RELOC_SUBTRACTOR
length: 2
pc-rel: false
extern: true
symbol: 2
- - offset: 0x0000003C
+ - offset: 0x00000044
type: X86_64_RELOC_UNSIGNED
length: 2
pc-rel: false
extern: true
symbol: 0
- - offset: 0x00000038
+ - offset: 0x00000040
type: X86_64_RELOC_SUBTRACTOR
length: 2
pc-rel: false
extern: true
symbol: 2
- - offset: 0x00000038
+ - offset: 0x00000040
type: X86_64_RELOC_UNSIGNED
length: 2
pc-rel: false
extern: true
symbol: 0
- - offset: 0x00000030
+ - offset: 0x00000038
type: X86_64_RELOC_SUBTRACTOR
length: 3
pc-rel: false
extern: true
symbol: 2
- - offset: 0x00000030
+ - offset: 0x00000038
type: X86_64_RELOC_UNSIGNED
length: 3
pc-rel: false
extern: false
symbol: 2
- - offset: 0x00000028
+ - offset: 0x00000030
type: X86_64_RELOC_SUBTRACTOR
length: 3
pc-rel: false
extern: true
symbol: 2
- - offset: 0x00000028
+ - offset: 0x00000030
type: X86_64_RELOC_UNSIGNED
length: 3
pc-rel: false
extern: true
symbol: 0
- - offset: 0x00000020
+ - offset: 0x00000028
type: X86_64_RELOC_SUBTRACTOR
length: 3
pc-rel: false
extern: true
symbol: 2
- - offset: 0x00000020
+ - offset: 0x00000028
type: X86_64_RELOC_UNSIGNED
length: 3
pc-rel: false
extern: true
symbol: 0
- - offset: 0x00000018
+ - offset: 0x00000020
type: X86_64_RELOC_UNSIGNED
length: 3
pc-rel: false
extern: false
symbol: 2
- - offset: 0x00000010
+ - offset: 0x00000018
type: X86_64_RELOC_UNSIGNED
length: 3
pc-rel: false
extern: false
symbol: 2
+ - offset: 0x00000010
+ type: X86_64_RELOC_SUBTRACTOR
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 2
+ - offset: 0x00000010
+ type: X86_64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 0
- offset: 0x00000008
type: X86_64_RELOC_UNSIGNED
length: 3
@@ -165,7 +246,7 @@ sections:
pc-rel: false
extern: true
symbol: 0
-local-symbols:
+local-symbols:
- name: _foo
type: N_SECT
sect: 1
@@ -177,13 +258,22 @@ local-symbols:
- name: _d
type: N_SECT
sect: 3
- value: 0x0000000000000008
+ value: 0x000000000000000A
+page-size: 0x00000000
...
-# CHECK: defined-atoms:
+# CHECK:defined-atoms:
# CHECK: - name: _d
# CHECK: type: data
+# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 04, 00, 00, 00,
+# CHECK: 00, 00, 00, 00, F0, FF, FF, FF, FF, FF, FF, FF,
+# CHECK: {{..}}, 00, 00, 00, 00, 00, 00, 00, {{..}}, 00, 00, 00,
+# CHECK: 00, 00, 00, 00, D8, FF, FF, FF, FF, FF, FF, FF,
+# CHECK: D4, FF, FF, FF, FF, FF, FF, FF, {{..}}, {{..}}, {{..}}, {{..}},
+# CHECK: {{..}}, {{..}}, {{..}}, {{..}}, C0, FF, FF, FF, C0, FF, FF, FF,
+# CHECK: {{..}}, {{..}}, {{..}}, {{..}} ]
+# CHECK: dead-strip: never
# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
@@ -192,39 +282,45 @@ local-symbols:
# CHECK: offset: 8
# CHECK: target: _foo
# CHECK: addend: 4
-# CHECK: - kind: pointer64Anon
+# CHECK: - kind: delta64
# CHECK: offset: 16
-# CHECK: target: L003
+# CHECK: target: _foo
# CHECK: - kind: pointer64Anon
# CHECK: offset: 24
# CHECK: target: L003
+# CHECK: - kind: pointer64Anon
+# CHECK: offset: 32
+# CHECK: target: L003
# CHECK: addend: 2
# CHECK: - kind: delta64
-# CHECK: offset: 32
+# CHECK: offset: 40
# CHECK: target: _foo
# CHECK: - kind: delta64
-# CHECK: offset: 40
+# CHECK: offset: 48
# CHECK: target: _foo
# CHECK: addend: 4
# CHECK: - kind: delta64Anon
-# CHECK: offset: 48
+# CHECK: offset: 56
# CHECK: target: L003
# CHECK: - kind: delta32
-# CHECK: offset: 56
+# CHECK: offset: 64
# CHECK: target: _foo
# CHECK: - kind: delta32
-# CHECK: offset: 60
+# CHECK: offset: 68
# CHECK: target: _foo
# CHECK: addend: 4
# CHECK: - kind: delta32Anon
-# CHECK: offset: 64
+# CHECK: offset: 72
# CHECK: target: L003
# CHECK: - name: _foo
# CHECK: content: [ C3 ]
+# CHECK: dead-strip: never
# CHECK: - name: _bar
# CHECK: content: [ C3 ]
+# CHECK: dead-strip: never
# CHECK: - ref-name: L003
# CHECK: type: unknown
-# CHECK: content: [ 00, 00, 00, 00 ]
+# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
# CHECK: section-choice: custom-required
# CHECK: section-name: __DATA/__custom
+
diff --git a/test/mach-o/parse-eh-frame-relocs-x86_64.yaml b/test/mach-o/parse-eh-frame-relocs-x86_64.yaml
new file mode 100644
index 000000000000..b009cbcea139
--- /dev/null
+++ b/test/mach-o/parse-eh-frame-relocs-x86_64.yaml
@@ -0,0 +1,176 @@
+# RUN: lld -flavor darwin -arch x86_64 -r -print_atoms %s -o %t | FileCheck %s
+#
+# Test parsing of x86_64 __eh_frame (dwarf unwind) relocations.
+
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+compat-version: 0.0
+current-version: 0.0
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 16
+ address: 0x0000000000000000
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0xE8, 0x00, 0x00, 0x00,
+ 0x00, 0x5D, 0xC3, 0x48, 0x89, 0xC7, 0xE8, 0x00,
+ 0x00, 0x00, 0x00, 0x5D, 0xE9, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3, 0x66, 0x2E,
+ 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x55, 0x48, 0x89, 0xE5, 0xE8, 0x00, 0x00, 0x00,
+ 0x00, 0x5D, 0xC3, 0x48, 0x89, 0xC7, 0xE8, 0x00,
+ 0x00, 0x00, 0x00, 0x5D, 0xE9, 0x00, 0x00, 0x00,
+ 0x00 ]
+ - segment: __TEXT
+ section: __gcc_except_tab
+ type: S_REGULAR
+ attributes: [ ]
+ alignment: 4
+ address: 0x000000000000004C
+ content: [ 0xFF, 0x9B, 0xA2, 0x80, 0x80, 0x00, 0x03, 0x1A,
+ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x0B, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x9B, 0xA2, 0x80, 0x80, 0x00, 0x03, 0x1A,
+ 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x0B, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ - segment: __TEXT
+ section: __eh_frame
+ type: S_COALESCED
+ attributes: [ ]
+ alignment: 8
+ address: 0x0000000000000100
+ content: [ 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x7A, 0x50, 0x4C, 0x52, 0x00, 0x01, 0x78,
+ 0x10, 0x07, 0x9B, 0x04, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x0C, 0x07, 0x08, 0x90, 0x01, 0x00, 0x00,
+ 0x2C, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+ 0xD8, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x13, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x41, 0x0E, 0x10, 0x86, 0x02, 0x43, 0x0D,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x7A, 0x52, 0x00, 0x01, 0x78, 0x10, 0x01,
+ 0x10, 0x0C, 0x07, 0x08, 0x90, 0x01, 0x00, 0x00,
+ 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
+ 0xB0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x0E, 0x10, 0x86, 0x02, 0x43, 0x0D,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2C, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
+ 0x98, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0xCB, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x41, 0x0E, 0x10, 0x86, 0x02, 0x43, 0x0D,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+ - offset: 0x00000013
+ type: X86_64_RELOC_GOT
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 8
+local-symbols:
+ - name: GCC_except_table0
+ type: N_SECT
+ sect: 2
+ value: 0x000000000000004C
+ - name: GCC_except_table2
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000074
+global-symbols:
+ - name: _catchMyException1
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+ - name: _catchMyException2
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000030
+ - name: _bar
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000020
+undefined-symbols:
+ - name: _foo
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: ___cxa_begin_catch
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: ___cxa_end_catch
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+ - name: ___gxx_personality_v0
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+page-size: 0x00000000
+...
+
+# Check that LSDA fields are fixed up correctly, even when there are multiple
+# CIEs involved.
+#
+# (1) Check that we can relocate an LSDA at all. Requires correct interpretation
+# of augmentation data strings in CIEs and augmentation data fields of FDEs.
+#
+# CHECK: - type: unwind-cfi
+# CHECK-NOT: - type:
+# CHECK: references:
+# CHECK-NEXT: - kind: negDelta32
+# CHECK-NEXT: offset: 4
+# CHECK-NEXT: target: L002
+# CHECK-NEXT: - kind: unwindFDEToFunction
+# CHECK-NEXT: offset: 8
+# CHECK-NEXT: target: _catchMyException1
+# CHECK-NEXT: - kind: unwindFDEToFunction
+# CHECK-NEXT: offset: 25
+# CHECK-NEXT: target: GCC_except_table0
+#
+# (2) Check that we have an intervening FDE with a different CIE.
+# If the test fails here then test (3) probably isn't testing what it
+# should, and this test-case should be updated.
+#
+# CHECK: - type: unwind-cfi
+# CHECK-NOT: - type:
+# CHECK: references:
+# CHECK-NEXT: - kind: negDelta32
+# CHECK-NEXT: offset: 4
+# CHECK-NEXT: target: L001
+# CHECK-NEXT: - kind: unwindFDEToFunction
+# CHECK-NEXT: offset: 8
+# CHECK-NEXT: target: _bar
+#
+# (3) Check that we can relocate the LSDA on a second FDE that references the
+# original CIE from (1). Requires us to match this FDE up with the correct
+# CIE.
+#
+# CHECK-NEXT: - type: unwind-cfi
+# CHECK-NOT: - type:
+# CHECK: references:
+# CHECK-NEXT: - kind: negDelta32
+# CHECK-NEXT: offset: 4
+# CHECK-NEXT: target: L002
+# CHECK-NEXT: - kind: unwindFDEToFunction
+# CHECK-NEXT: offset: 8
+# CHECK-NEXT: target: _catchMyException2
+# CHECK-NEXT: - kind: unwindFDEToFunction
+# CHECK-NEXT: offset: 25
+# CHECK-NEXT: target: GCC_except_table2
diff --git a/test/mach-o/parse-eh-frame-x86-anon.yaml b/test/mach-o/parse-eh-frame-x86-anon.yaml
index 9e3adaea1849..09b6ba37c09a 100644
--- a/test/mach-o/parse-eh-frame-x86-anon.yaml
+++ b/test/mach-o/parse-eh-frame-x86-anon.yaml
@@ -9,22 +9,22 @@ arch: x86
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x89, 0xE5, 0x56, 0x83, 0xEC, 0x14, 0xE8,
- 0x00, 0x00, 0x00, 0x00, 0x5E, 0xC7, 0x04, 0x24,
- 0x04, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xFF, 0xFF,
- 0xFF, 0xC7, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8B,
- 0x8E, 0x38, 0x00, 0x00, 0x00, 0x89, 0x4C, 0x24,
- 0x04, 0x89, 0x04, 0x24, 0xC7, 0x44, 0x24, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC7, 0xFF, 0xFF,
- 0xFF, 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8,
+ content: [ 0x55, 0x89, 0xE5, 0x56, 0x83, 0xEC, 0x14, 0xE8,
+ 0x00, 0x00, 0x00, 0x00, 0x5E, 0xC7, 0x04, 0x24,
+ 0x04, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xFF, 0xFF,
+ 0xFF, 0xC7, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8B,
+ 0x8E, 0x38, 0x00, 0x00, 0x00, 0x89, 0x4C, 0x24,
+ 0x04, 0x89, 0x04, 0x24, 0xC7, 0x44, 0x24, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC7, 0xFF, 0xFF,
+ 0xFF, 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8,
0xBC, 0xFF, 0xFF, 0xFF ]
- relocations:
+ relocations:
- offset: 0x00000040
type: GENERIC_RELOC_VANILLA
length: 2
@@ -68,17 +68,17 @@ sections:
attributes: [ ]
alignment: 2
address: 0x0000000000000048
- content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x7A, 0x52, 0x00, 0x01, 0x7C, 0x08, 0x01,
- 0x10, 0x0C, 0x05, 0x04, 0x88, 0x01, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
- 0x98, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00,
- 0x00, 0x41, 0x0E, 0x08, 0x84, 0x02, 0x42, 0x0D,
- 0x04, 0x44, 0x86, 0x03, 0x18, 0x00, 0x00, 0x00,
- 0x38, 0x00, 0x00, 0x00, 0xB5, 0xFF, 0xFF, 0xFF,
- 0x0B, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0E, 0x08,
+ content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x7A, 0x52, 0x00, 0x01, 0x7C, 0x08, 0x01,
+ 0x10, 0x0C, 0x05, 0x04, 0x88, 0x01, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
+ 0x98, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x0E, 0x08, 0x84, 0x02, 0x42, 0x0D,
+ 0x04, 0x44, 0x86, 0x03, 0x18, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0xB5, 0xFF, 0xFF, 0xFF,
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0E, 0x08,
0x84, 0x02, 0x42, 0x0D, 0x04, 0x00, 0x00, 0x00 ]
-global-symbols:
+global-symbols:
- name: __Z3barv
type: N_SECT
scope: [ N_EXT ]
@@ -89,7 +89,7 @@ global-symbols:
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000000
-undefined-symbols:
+undefined-symbols:
- name: __ZTIi
type: N_UNDF
scope: [ N_EXT ]
@@ -104,12 +104,12 @@ undefined-symbols:
value: 0x0000000000000000
...
-# CHECK: defined-atoms:
+# CHECK: defined-atoms:
# CHECK: - ref-name: [[CIE:L[L0-9]+]]
# CHECK: type: unwind-cfi
-# CHECK: content:
+# CHECK: content:
# CHECK: - type: unwind-cfi
-# CHECK: content:
+# CHECK: content:
# CHECK: references:
# CHECK: - kind: negDelta32
# CHECK: offset: 4
@@ -118,7 +118,7 @@ undefined-symbols:
# CHECK: offset: 8
# CHECK: target: __Z3foov
# CHECK: - type: unwind-cfi
-# CHECK: content:
+# CHECK: content:
# CHECK: references:
# CHECK: - kind: negDelta32
# CHECK: offset: 4
diff --git a/test/mach-o/parse-eh-frame-x86-labeled.yaml b/test/mach-o/parse-eh-frame-x86-labeled.yaml
index b07a534e6493..5be5abcc4a0e 100644
--- a/test/mach-o/parse-eh-frame-x86-labeled.yaml
+++ b/test/mach-o/parse-eh-frame-x86-labeled.yaml
@@ -9,22 +9,22 @@ arch: x86
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x89, 0xE5, 0x56, 0x83, 0xEC, 0x14, 0xE8,
- 0x00, 0x00, 0x00, 0x00, 0x5E, 0xC7, 0x04, 0x24,
- 0x04, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xFF, 0xFF,
- 0xFF, 0xC7, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8B,
- 0x8E, 0x38, 0x00, 0x00, 0x00, 0x89, 0x4C, 0x24,
- 0x04, 0x89, 0x04, 0x24, 0xC7, 0x44, 0x24, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC7, 0xFF, 0xFF,
- 0xFF, 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8,
+ content: [ 0x55, 0x89, 0xE5, 0x56, 0x83, 0xEC, 0x14, 0xE8,
+ 0x00, 0x00, 0x00, 0x00, 0x5E, 0xC7, 0x04, 0x24,
+ 0x04, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xFF, 0xFF,
+ 0xFF, 0xC7, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x8B,
+ 0x8E, 0x38, 0x00, 0x00, 0x00, 0x89, 0x4C, 0x24,
+ 0x04, 0x89, 0x04, 0x24, 0xC7, 0x44, 0x24, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC7, 0xFF, 0xFF,
+ 0xFF, 0x55, 0x89, 0xE5, 0x83, 0xEC, 0x08, 0xE8,
0xBC, 0xFF, 0xFF, 0xFF ]
- relocations:
+ relocations:
- offset: 0x00000040
type: GENERIC_RELOC_VANILLA
length: 2
@@ -68,17 +68,17 @@ sections:
attributes: [ ]
alignment: 2
address: 0x0000000000000048
- content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x7A, 0x52, 0x00, 0x01, 0x7C, 0x08, 0x01,
- 0x10, 0x0C, 0x05, 0x04, 0x88, 0x01, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
- 0x98, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00,
- 0x00, 0x41, 0x0E, 0x08, 0x84, 0x02, 0x42, 0x0D,
- 0x04, 0x44, 0x86, 0x03, 0x18, 0x00, 0x00, 0x00,
- 0x38, 0x00, 0x00, 0x00, 0xB5, 0xFF, 0xFF, 0xFF,
- 0x0B, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0E, 0x08,
+ content: [ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x7A, 0x52, 0x00, 0x01, 0x7C, 0x08, 0x01,
+ 0x10, 0x0C, 0x05, 0x04, 0x88, 0x01, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
+ 0x98, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x0E, 0x08, 0x84, 0x02, 0x42, 0x0D,
+ 0x04, 0x44, 0x86, 0x03, 0x18, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0xB5, 0xFF, 0xFF, 0xFF,
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0E, 0x08,
0x84, 0x02, 0x42, 0x0D, 0x04, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x0000001C
scattered: true
type: GENERIC_RELOC_LOCAL_SECTDIFF
@@ -127,12 +127,12 @@ sections:
length: 2
pc-rel: false
value: 0x00000084
-local-symbols:
+local-symbols:
- name: EH_frame0
type: N_SECT
sect: 3
value: 0x0000000000000048
-global-symbols:
+global-symbols:
- name: __Z3barv
type: N_SECT
scope: [ N_EXT ]
@@ -153,7 +153,7 @@ global-symbols:
scope: [ N_EXT ]
sect: 3
value: 0x0000000000000060
-undefined-symbols:
+undefined-symbols:
- name: __ZTIi
type: N_UNDF
scope: [ N_EXT ]
@@ -168,13 +168,13 @@ undefined-symbols:
value: 0x0000000000000000
...
-# CHECK: defined-atoms:
+# CHECK: defined-atoms:
# CHECK: - ref-name: [[CIE:L[L0-9]+]]
# CHECK: type: unwind-cfi
-# CHECK: content:
+# CHECK: content:
# CHECK: - type: unwind-cfi
-# CHECK: content:
-# CHECK: references:
+# CHECK: content:
+# CHECK: references:
# CHECK: - kind: negDelta32
# CHECK: offset: 4
# CHECK: target: [[CIE]]
@@ -182,8 +182,8 @@ undefined-symbols:
# CHECK: offset: 8
# CHECK: target: __Z3foov
# CHECK: - type: unwind-cfi
-# CHECK: content:
-# CHECK: references:
+# CHECK: content:
+# CHECK: references:
# CHECK: - kind: negDelta32
# CHECK: offset: 4
# CHECK: target: [[CIE]]
diff --git a/test/mach-o/parse-function.yaml b/test/mach-o/parse-function.yaml
index 1bc9878c7087..bfd8e5c815f4 100644
--- a/test/mach-o/parse-function.yaml
+++ b/test/mach-o/parse-function.yaml
@@ -1,4 +1,4 @@
-# RUN: lld -flavor darwin -arch x86_64 -r %s -o %t
+# RUN: lld -flavor darwin -arch x86_64 -r %s -o %t
# RUN: lld -flavor darwin -arch x86_64 -r %t -print_atoms -o %t2 | FileCheck %s
#
# Test parsing of mach-o functions.
@@ -17,7 +17,7 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 4
address: 0x0000000000000000
- content: [ 0xCC, 0xC3, 0x90, 0xC3, 0x90, 0x90, 0xC3, 0x90,
+ content: [ 0xCC, 0xC3, 0x90, 0xC3, 0x90, 0x90, 0xC3, 0x90,
0x90, 0x90, 0xC3, 0x90, 0x90, 0x90, 0x90, 0xC3,
0xCC, 0x31, 0xC0, 0xC3 ]
local-symbols:
@@ -62,7 +62,7 @@ global-symbols:
value: 0x0000000000000011
...
-# CHECK-NOT: name:
+# CHECK-NOT: name:
# CHECK: content: [ CC ]
# CHECK: name: _myGlobal
diff --git a/test/mach-o/parse-initializers64.yaml b/test/mach-o/parse-initializers64.yaml
index 5ebd8dafd7ce..c55a0ea0a5fa 100644
--- a/test/mach-o/parse-initializers64.yaml
+++ b/test/mach-o/parse-initializers64.yaml
@@ -22,7 +22,7 @@ sections:
section: __mod_init_func
type: S_MOD_INIT_FUNC_POINTERS
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000100
content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
@@ -43,7 +43,7 @@ sections:
section: __mod_term_func
type: S_MOD_TERM_FUNC_POINTERS
attributes: [ ]
- alignment: 3
+ alignment: 8
address: 0x0000000000000108
content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
relocations:
@@ -76,21 +76,21 @@ global-symbols:
# CHECK: - type: initializer-pointer
# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
# CHECK: dead-strip: never
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
# CHECK: target: _init
# CHECK: - type: initializer-pointer
# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
# CHECK: dead-strip: never
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
# CHECK: target: _init2
# CHECK: - type: terminator-pointer
# CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
# CHECK: dead-strip: never
-# CHECK: references:
+# CHECK: references:
# CHECK: - kind: pointer64
# CHECK: offset: 0
# CHECK: target: _term
diff --git a/test/mach-o/parse-literals-error.yaml b/test/mach-o/parse-literals-error.yaml
index be21d6efffa3..8daeeca5f654 100644
--- a/test/mach-o/parse-literals-error.yaml
+++ b/test/mach-o/parse-literals-error.yaml
@@ -21,5 +21,5 @@ sections:
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D ]
...
-# CHECK: error:
+# CHECK: error:
diff --git a/test/mach-o/parse-literals.yaml b/test/mach-o/parse-literals.yaml
index 24568ea0fd4f..7f80ba5212b8 100644
--- a/test/mach-o/parse-literals.yaml
+++ b/test/mach-o/parse-literals.yaml
@@ -14,16 +14,16 @@ sections:
section: __cstring
type: S_CSTRING_LITERALS
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000100
- content: [ 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x00, 0x74, 0x68,
- 0x65, 0x72, 0x65, 0x00, 0x77, 0x6F, 0x72, 0x6C,
+ content: [ 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x00, 0x74, 0x68,
+ 0x65, 0x72, 0x65, 0x00, 0x77, 0x6F, 0x72, 0x6C,
0x00 ]
- segment: __TEXT
section: __literal4
type: S_4BYTE_LITERALS
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000114
content: [ 0x01, 0x02, 0x03, 0x04, 0x11, 0x12, 0x13, 0x14,
0x28, 0x29, 0x2A, 0x2B ]
@@ -31,7 +31,7 @@ sections:
section: __literal8
type: S_8BYTE_LITERALS
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000120
content: [ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F ]
@@ -39,7 +39,7 @@ sections:
section: __literal16
type: S_16BYTE_LITERALS
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000130
content: [ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00 ]
@@ -47,15 +47,15 @@ sections:
section: __ustring
type: S_REGULAR
attributes: [ ]
- alignment: 0
+ alignment: 1
address: 0x0000000000000100
- content: [ 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00,
- 0x6F, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00,
+ content: [ 0x68, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00,
+ 0x6F, 0x00, 0x00, 0x00, 0x74, 0x00, 0x68, 0x00,
0x65, 0x00, 0x72, 0x00, 0x00, 0x00 ]
...
-# CHECK:defined-atoms:
+# CHECK:defined-atoms:
# CHECK: - scope: hidden
# CHECK: type: c-string
# CHECK: content: [ 68, 65, 6C, 6C, 6F, 00 ]
@@ -88,6 +88,6 @@ sections:
# CHECK: content: [ 28, 29, 2A, 2B, 2C, 2D, 2E, 2F ]
# CHECK: - scope: hidden
# CHECK: type: const-16-byte
-# CHECK: content: [ 01, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C,
+# CHECK: content: [ 01, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C,
# CHECK: 0D, 0E, 0F, 00 ]
diff --git a/test/mach-o/parse-relocs-x86.yaml b/test/mach-o/parse-relocs-x86.yaml
index 3fc22ae71bfc..c7ce80bb42a1 100644
--- a/test/mach-o/parse-relocs-x86.yaml
+++ b/test/mach-o/parse-relocs-x86.yaml
@@ -28,7 +28,7 @@
# ret
#
# .data
-#_x:
+#_x:
# .long _undef
# .long _undef+7
# .long _foo
@@ -42,21 +42,21 @@ arch: x86
file-type: MH_OBJECT
flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
OS: unknown
-sections:
+sections:
- segment: __TEXT
section: __text
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0xE8, 0xFB, 0xFF, 0xFF, 0xFF, 0xE8, 0xF8, 0xFF,
- 0xFF, 0xFF, 0xE8, 0x2C, 0x00, 0x00, 0x00, 0xE8,
- 0x29, 0x00, 0x00, 0x00, 0x66, 0xE8, 0xE8, 0xFF,
- 0x66, 0xE8, 0x1F, 0x00, 0x66, 0xE8, 0x1D, 0x00,
- 0xA1, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x3C, 0x00,
- 0x00, 0x00, 0xA1, 0x40, 0x00, 0x00, 0x00, 0x8B,
- 0x80, 0x1C, 0x00, 0x00, 0x00, 0x8B, 0x80, 0x20,
+ content: [ 0xE8, 0xFB, 0xFF, 0xFF, 0xFF, 0xE8, 0xF8, 0xFF,
+ 0xFF, 0xFF, 0xE8, 0x2C, 0x00, 0x00, 0x00, 0xE8,
+ 0x29, 0x00, 0x00, 0x00, 0x66, 0xE8, 0xE8, 0xFF,
+ 0x66, 0xE8, 0x1F, 0x00, 0x66, 0xE8, 0x1D, 0x00,
+ 0xA1, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x3C, 0x00,
+ 0x00, 0x00, 0xA1, 0x40, 0x00, 0x00, 0x00, 0x8B,
+ 0x80, 0x1C, 0x00, 0x00, 0x00, 0x8B, 0x80, 0x20,
0x00, 0x00, 0x00, 0xC3 ]
- relocations:
+ relocations:
- offset: 0x00000037
scattered: true
type: GENERIC_RELOC_LOCAL_SECTDIFF
@@ -146,10 +146,10 @@ sections:
type: S_REGULAR
attributes: [ ]
address: 0x000000000000003C
- content: [ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x3B, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x3B, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
0xB4, 0xFF, 0xFF, 0xFF, 0xB3, 0xFF, 0xFF, 0xFF ]
- relocations:
+ relocations:
- offset: 0x00000014
scattered: true
type: GENERIC_RELOC_LOCAL_SECTDIFF
@@ -198,7 +198,7 @@ sections:
pc-rel: false
extern: true
symbol: 3
-local-symbols:
+local-symbols:
- name: _test
type: N_SECT
sect: 1
@@ -211,7 +211,7 @@ local-symbols:
type: N_SECT
sect: 2
value: 0x000000000000003C
-undefined-symbols:
+undefined-symbols:
- name: _undef
type: N_UNDF
scope: [ N_EXT ]
diff --git a/test/mach-o/parse-tentative-defs.yaml b/test/mach-o/parse-tentative-defs.yaml
index fc75167bd895..1757c8c928b6 100644
--- a/test/mach-o/parse-tentative-defs.yaml
+++ b/test/mach-o/parse-tentative-defs.yaml
@@ -57,32 +57,32 @@ undefined-symbols:
# CHECK: type: zero-fill
# CHECK: size: 4
# CHECK: merge: as-tentative
-# CHECK: alignment: 2^2
+# CHECK: alignment: 4
# CHECK: name: _tent4_16
# CHECK: scope: global
# CHECK: type: zero-fill
# CHECK: size: 4
# CHECK: merge: as-tentative
-# CHECK: alignment: 2^4
+# CHECK: alignment: 16
# CHECK: name: _tent64_32
# CHECK: scope: global
# CHECK: type: zero-fill
# CHECK: size: 64
# CHECK: merge: as-tentative
-# CHECK: alignment: 2^5
+# CHECK: alignment: 32
# CHECK: name: _tent8
# CHECK: scope: global
# CHECK: type: zero-fill
# CHECK: size: 8
# CHECK: merge: as-tentative
-# CHECK: alignment: 2^3
+# CHECK: alignment: 8
# CHECK: name: _tentHidden
# CHECK: scope: hidden
# CHECK: type: zero-fill
# CHECK: size: 4
# CHECK: merge: as-tentative
-# CHECK: alignment: 2^2
+# CHECK: alignment: 4
diff --git a/test/mach-o/parse-text-relocs-x86_64.yaml b/test/mach-o/parse-text-relocs-x86_64.yaml
index 9e58e02e3771..6d0a52f60045 100644
--- a/test/mach-o/parse-text-relocs-x86_64.yaml
+++ b/test/mach-o/parse-text-relocs-x86_64.yaml
@@ -19,6 +19,9 @@
# movw $0x1234, _foo(%rip)
# movl $0x12345678, _foo(%rip)
# movl L2(%rip), %eax
+# movb $0x12, L2(%rip)
+# movw $0x1234, L2(%rip)
+# movl $0x12345678, L2(%rip)
#
# .data
#L2: .long 0
@@ -41,9 +44,30 @@ sections:
0x00, 0x00, 0x00, 0xC6, 0x05, 0xFF, 0xFF, 0xFF,
0xFF, 0x12, 0x66, 0xC7, 0x05, 0xFE, 0xFF, 0xFF,
0xFF, 0x34, 0x12, 0xC7, 0x05, 0xFC, 0xFF, 0xFF,
- 0xFF, 0x78, 0x56, 0x34, 0x12, 0x8B, 0x05, 0x00,
- 0x00, 0x00, 0x00 ]
+ 0xFF, 0x78, 0x56, 0x34, 0x12, 0x8B, 0x05, 0x1A,
+ 0x00, 0x00, 0x00, 0xc6, 0x05, 0x13, 0x00, 0x00,
+ 0x00, 0x12, 0x66, 0xc7, 0x05, 0x0a, 0x00, 0x00,
+ 0x00, 0x34, 0x12, 0xc7, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0x56, 0x34, 0x12 ]
relocations:
+ - offset: 0x00000055
+ type: X86_64_RELOC_SIGNED_4
+ length: 2
+ pc-rel: true
+ extern: false
+ symbol: 2
+ - offset: 0x0000004d
+ type: X86_64_RELOC_SIGNED_2
+ length: 2
+ pc-rel: true
+ extern: false
+ symbol: 2
+ - offset: 0x00000045
+ type: X86_64_RELOC_SIGNED_1
+ length: 2
+ pc-rel: true
+ extern: false
+ symbol: 2
- offset: 0x0000003F
type: X86_64_RELOC_SIGNED
length: 2
@@ -108,7 +132,7 @@ sections:
section: __data
type: S_REGULAR
attributes: [ ]
- address: 0x0000000000000043
+ address: 0x000000000000005D
content: [ 0x00, 0x00, 0x00, 0x00 ]
local-symbols:
- name: _test
@@ -166,3 +190,15 @@ undefined-symbols:
# CHECK: offset: 63
# CHECK: target: [[LABEL]]
# CHECK-NOT: addend:
+# CHECK: - kind: ripRel32Minus1Anon
+# CHECK: offset: 69
+# CHECK: target: [[LABEL]]
+# CHECK-NOT: addend:
+# CHECK: - kind: ripRel32Minus2Anon
+# CHECK: offset: 77
+# CHECK: target: [[LABEL]]
+# CHECK-NOT: addend:
+# CHECK: - kind: ripRel32Minus4Anon
+# CHECK: offset: 85
+# CHECK: target: [[LABEL]]
+# CHECK-NOT: addend:
diff --git a/test/mach-o/parse-tlv-relocs-x86-64.yaml b/test/mach-o/parse-tlv-relocs-x86-64.yaml
new file mode 100644
index 000000000000..78b17841d4e7
--- /dev/null
+++ b/test/mach-o/parse-tlv-relocs-x86-64.yaml
@@ -0,0 +1,100 @@
+# RUN: lld -flavor darwin -arch x86_64 -r -print_atoms %s -o %t | FileCheck %s \
+# RUN: && lld -flavor darwin -arch x86_64 -r -print_atoms %t -o %t2 | FileCheck %s
+#
+# Test parsing of x86_64 tlv relocations.
+
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+compat-version: 0.0
+current-version: 0.0
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 16
+ address: 0x0000000000000000
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x3D, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0x17, 0x8B, 0x00, 0x5D,
+ 0xC3 ]
+ relocations:
+ - offset: 0x00000007
+ type: X86_64_RELOC_TLV
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 2
+ - segment: __DATA
+ section: __thread_data
+ type: S_THREAD_LOCAL_REGULAR
+ attributes: [ ]
+ alignment: 4
+ address: 0x0000000000000014
+ content: [ 0x07, 0x00, 0x00, 0x00 ]
+ - segment: __DATA
+ section: __thread_vars
+ type: S_THREAD_LOCAL_VARIABLES
+ attributes: [ ]
+ address: 0x0000000000000018
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+ - offset: 0x00000010
+ type: X86_64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 0
+ - offset: 0x00000000
+ type: X86_64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 3
+local-symbols:
+ - name: '_x$tlv$init'
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000014
+global-symbols:
+ - name: _main
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+ - name: _x
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 3
+ value: 0x0000000000000018
+undefined-symbols:
+ - name: __tlv_bootstrap
+ type: N_UNDF
+ scope: [ N_EXT ]
+ value: 0x0000000000000000
+page-size: 0x00000000
+...
+
+# CHECK: - name: _x
+# CHECK-NEXT: scope: global
+# CHECK-NEXT: type: tlv-thunk
+# CHECK-NOT: - name:
+# CHECK: references:
+# CHECK-NEXT: - kind: pointer64
+# CHECK-NEXT: offset: 0
+# CHECK-NEXT: target: __tlv_bootstrap
+# CHECK-NEXT: - kind: tlvInitSectionOffset
+# CHECK-NEXT: offset: 16
+# CHECK-NEXT: target: '_x$tlv$init'
+# CHECK: - name: _main
+# CHECK-NOT: - name:
+# CHECK-NEXT: scope: global
+# CHECK: references:
+# CHECK-NEXT: - kind: ripRel32Tlv
+# CHECK-NEXT: offset: 7
+# CHECK-NEXT: target: _x
diff --git a/test/mach-o/re-exported-dylib-ordinal.yaml b/test/mach-o/re-exported-dylib-ordinal.yaml
index 9d628e9af151..ff4d756338ce 100644
--- a/test/mach-o/re-exported-dylib-ordinal.yaml
+++ b/test/mach-o/re-exported-dylib-ordinal.yaml
@@ -1,4 +1,7 @@
-# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s -dylib -o %t \
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.8 %s \
+# RUN: %p/Inputs/re-exported-dylib-ordinal.yaml \
+# RUN: %p/Inputs/re-exported-dylib-ordinal2.yaml \
+# RUN: %p/Inputs/re-exported-dylib-ordinal3.yaml -dylib -o %t \
# RUN: && llvm-nm -m %t | FileCheck %s
#
# Test that when one dylib A re-exports dylib B that using a symbol from B
@@ -37,68 +40,6 @@ undefined-symbols:
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ MH_TWOLEVEL ]
-install-name: /junk/libfoo.dylib
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000F9A
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3 ]
-global-symbols:
- - name: _foo
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000F9A
-dependents:
- - path: /junk/libbar.dylib
- kind: LC_REEXPORT_DYLIB
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ MH_TWOLEVEL ]
-install-name: /junk/libbar.dylib
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000F9A
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x5D, 0xC3 ]
-global-symbols:
- - name: _bar
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000F9A
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ MH_TWOLEVEL ]
-install-name: /usr/lib/libSystem.B.dylib
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000000
- content: [ 0x55 ]
-
-global-symbols:
- - name: dyld_stub_binder
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
-
...
# CHECK: (undefined) external _bar (from libfoo)
diff --git a/test/mach-o/rpath.yaml b/test/mach-o/rpath.yaml
index f0b5f718c15a..ce1234d4c78f 100644
--- a/test/mach-o/rpath.yaml
+++ b/test/mach-o/rpath.yaml
@@ -34,5 +34,5 @@ global-symbols:
# CHECK-BINARY-WRITE: cmd LC_RPATH
-# CHECK-BINARY-WRITE-NEXT: cmdsize 44
+# CHECK-BINARY-WRITE-NEXT: cmdsize 40
# CHECK-BINARY-WRITE-NEXT: path @loader_path/../Frameworks (offset 12)
diff --git a/test/mach-o/run-tlv-pass-x86-64.yaml b/test/mach-o/run-tlv-pass-x86-64.yaml
new file mode 100644
index 000000000000..0e648458645b
--- /dev/null
+++ b/test/mach-o/run-tlv-pass-x86-64.yaml
@@ -0,0 +1,144 @@
+# RUN: lld -flavor darwin -macosx_version_min 10.7 -arch x86_64 -print_atoms %s -o %t | FileCheck %s
+# RUN: not lld -flavor darwin -macosx_version_min 10.6 -arch x86_64 -o %t %s 2> %t2
+# RUN: FileCheck < %t2 %s --check-prefix=CHECK-ERROR
+# RUN: llvm-objdump -macho -private-headers %t | FileCheck %s --check-prefix=CHECK-LOADCMDS
+#
+# Test parsing of x86_64 tlv relocations.
+
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+compat-version: 0.0
+current-version: 0.0
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __text
+ type: S_REGULAR
+ attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+ alignment: 16
+ address: 0x0000000000000000
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x48, 0x8B, 0x3D, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0x17, 0x8B, 0x00, 0x5D,
+ 0xC3 ]
+ relocations:
+ - offset: 0x00000007
+ type: X86_64_RELOC_TLV
+ length: 2
+ pc-rel: true
+ extern: true
+ symbol: 2
+ - segment: __DATA
+ section: __thread_bss
+ type: S_THREAD_LOCAL_ZEROFILL
+ attributes: [ ]
+ alignment: 4
+ address: 0x0000000000000014
+ size: 4
+ - segment: __DATA
+ section: __thread_vars
+ type: S_THREAD_LOCAL_VARIABLES
+ attributes: [ ]
+ address: 0x0000000000000018
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+ relocations:
+ - offset: 0x00000010
+ type: X86_64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 0
+ - offset: 0x00000000
+ type: X86_64_RELOC_UNSIGNED
+ length: 3
+ pc-rel: false
+ extern: true
+ symbol: 3
+ - segment: __DATA
+ section: __dummy
+ type: S_REGULAR
+ attributes: [ ]
+ alignment: 8
+ address: 0x00000000000000C0
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
+local-symbols:
+ - name: '_x$tlv$init'
+ type: N_SECT
+ sect: 2
+ value: 0x0000000000000014
+global-symbols:
+ - name: _main
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 1
+ value: 0x0000000000000000
+ - name: _x
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 3
+ value: 0x0000000000000018
+ - name: '__tlv_bootstrap'
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 4
+ value: 0x00000000000000C0
+ - name: 'dyld_stub_binder'
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 4
+ value: 0x00000000000000C8
+ - name: 'start'
+ type: N_SECT
+ scope: [ N_EXT ]
+ sect: 4
+ value: 0x00000000000000D0
+page-size: 0x00000000
+...
+
+# CHECK: - name: _x
+# CHECK-NEXT: scope: global
+# CHECK-NEXT: type: tlv-thunk
+# CHECK-NOT: - name:
+# CHECK: references:
+# CHECK-NEXT: - kind: pointer64
+# CHECK-NEXT: offset: 0
+# CHECK-NEXT: target: __tlv_bootstrap
+# CHECK-NEXT: - kind: tlvInitSectionOffset
+# CHECK-NEXT: offset: 16
+# CHECK-NEXT: target: '_x$tlv$init'
+# CHECK: - name: '_x$tlv$init'
+# CHECK-NEXT: type: tlv-zero-fill
+# CHECK: - name: _main
+# CHECK-NOT: - name:
+# CHECK: references:
+# CHECK-NEXT: - kind: ripRel32
+# CHECK-NEXT: offset: 7
+# CHECK-NEXT: target: L[[ID:[0-9]+]]
+# CHECK: - ref-name: L[[ID]]
+# CHECK-NEXT: scope: hidden
+# CHECK-NEXT: type: tlv-initializer-ptr
+# CHECK-NEXT: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+# CHECK-NEXT: alignment: 8
+# CHECK-NEXT: permissions: rw-
+# CHECK-NEXT: references:
+# CHECK-NEXT: - kind: pointer64
+# CHECK-NEXT: offset: 0
+# CHECK-NEXT: target: _x
+
+# CHECK-ERROR: targeted OS version does not support use of thread local variables in _main for architecture x86_64
+
+# CHECK-LOADCMDS: sectname __thread_bss
+# CHECK-LOADCMDS: segname __DATA
+# CHECK-LOADCMDS: addr 0x{{[0-9A-F]*}}
+# CHECK-LOADCMDS: size 0x0000000000000004
+# CHECK-LOADCMDS: offset 0
+# CHECK-LOADCMDS: align 2^2 (4)
+# CHECK-LOADCMDS: reloff 0
+# CHECK-LOADCMDS: nreloc 0
+# CHECK-LOADCMDS: type S_THREAD_LOCAL_ZEROFILL
diff --git a/test/mach-o/sectalign.yaml b/test/mach-o/sectalign.yaml
index 3556a5ecbcfc..556fd52c96e1 100644
--- a/test/mach-o/sectalign.yaml
+++ b/test/mach-o/sectalign.yaml
@@ -16,8 +16,8 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x8B, 0x05, 0x00, 0x00,
- 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x8B, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00,
0x5D, 0xC3 ]
relocations:
- offset: 0x0000000C
diff --git a/test/mach-o/sectcreate.yaml b/test/mach-o/sectcreate.yaml
new file mode 100644
index 000000000000..51c59dc5f3d4
--- /dev/null
+++ b/test/mach-o/sectcreate.yaml
@@ -0,0 +1,12 @@
+# RUN: lld -flavor darwin -r -arch x86_64 -o %t -sectcreate __DATA __data \
+# RUN: %p/Inputs/hw.raw_bytes -print_atoms | FileCheck %s
+
+# CHECK: --- !native
+# CHECK: path: '<linker-internal>'
+# CHECK: defined-atoms:
+# CHECK: - scope: global
+# CHECK: type: sectcreate
+# CHECK: content: [ 68, 65, 6C, 6C, 6F, 0A ]
+# CHECK: section-choice: custom-required
+# CHECK: section-name: __DATA/__data
+# CHECK: dead-strip: never
diff --git a/test/mach-o/stack-size.yaml b/test/mach-o/stack-size.yaml
new file mode 100644
index 000000000000..0e8edb2b5498
--- /dev/null
+++ b/test/mach-o/stack-size.yaml
@@ -0,0 +1,24 @@
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 %s -o %t %p/Inputs/libSystem.yaml
+# RUN: llvm-objdump -private-headers %t | FileCheck --check-prefix=CHECK-DEFAULT %s
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 %s -o %t -stack_size 31415926000 %p/Inputs/libSystem.yaml
+# RUN: llvm-objdump -private-headers %t | FileCheck --check-prefix=CHECK-EXPLICIT %s
+# RUN: not lld -flavor darwin -arch x86_64 -stack_size 0x31415926530 %s >/dev/null 2> %t
+# RUN: FileCheck < %t %s --check-prefix=CHECK-ERROR-MISPAGED
+# RUN: not lld -flavor darwin -arch x86_64 -stack_size hithere %s >/dev/null 2> %t
+# RUN: FileCheck < %t %s --check-prefix=CHECK-ERROR-NOTHEX
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: []
+
+# CHECK-DEFAULT: cmd LC_MAIN
+# CHECK-DEFAULT: stacksize 0
+
+# CHECK-EXPLICIT: cmd LC_MAIN
+# CHECK-EXPLICIT: stacksize 3384796143616
+
+# CHECK-ERROR-MISPAGED: error: stack_size must be a multiple of page size (0x1000)
+
+# CHECK-ERROR-NOTHEX: error: stack_size expects a hex number
diff --git a/test/mach-o/twolevel_namespace_undef_dynamic_lookup.yaml b/test/mach-o/twolevel_namespace_undef_dynamic_lookup.yaml
new file mode 100644
index 000000000000..a39a3e7f8c1b
--- /dev/null
+++ b/test/mach-o/twolevel_namespace_undef_dynamic_lookup.yaml
@@ -0,0 +1,17 @@
+# RUN: lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 -twolevel_namespace -undefined dynamic_lookup %s -o %t %p/Inputs/libSystem.yaml
+#
+# Sanity check '-twolevel_namespace -undefined dynamic_lookup'.
+# This should pass without error, even though '_bar' is undefined.
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: [ E9, 00, 00, 00, 00 ]
+ alignment: 16
+ references:
+ - kind: branch32
+ offset: 1
+ target: _bar
+undefined-atoms:
+ - name: _bar
diff --git a/test/mach-o/twolevel_namespace_undef_warning_suppress.yaml b/test/mach-o/twolevel_namespace_undef_warning_suppress.yaml
new file mode 100644
index 000000000000..eeb01de5f707
--- /dev/null
+++ b/test/mach-o/twolevel_namespace_undef_warning_suppress.yaml
@@ -0,0 +1,23 @@
+# RUN: not lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 -twolevel_namespace -undefined warning %s -o %t %p/Inputs/libSystem.yaml 2>&1 | \
+# RUN: FileCheck --check-prefix=CHECK-WARNING %s
+# RUN: not lld -flavor darwin -arch x86_64 -macosx_version_min 10.9 -twolevel_namespace -undefined suppress %s -o %t %p/Inputs/libSystem.yaml 2>&1 | \
+# RUN: FileCheck --check-prefix=CHECK-SUPPRESS %s
+
+--- !native
+defined-atoms:
+ - name: _main
+ scope: global
+ content: [ E9, 00, 00, 00, 00 ]
+ alignment: 16
+ references:
+ - kind: branch32
+ offset: 1
+ target: _bar
+undefined-atoms:
+ - name: _bar
+
+# Make sure that the driver issues an error diagnostic about this combination
+# being invalid.
+#
+# CHECK-WARNING: can't use -undefined warning or suppress with -twolevel_namespace
+# CHECK-SUPPRESS: can't use -undefined warning or suppress with -twolevel_namespace \ No newline at end of file
diff --git a/test/mach-o/unwind-info-simple-arm64.yaml b/test/mach-o/unwind-info-simple-arm64.yaml
index d46b43ff712d..8e87230e2833 100644
--- a/test/mach-o/unwind-info-simple-arm64.yaml
+++ b/test/mach-o/unwind-info-simple-arm64.yaml
@@ -1,4 +1,5 @@
-# RUN: lld -flavor darwin -arch arm64 %s -o %t -e _main %p/Inputs/libSystem.yaml
+# RUN: lld -flavor darwin -arch arm64 -o %t %s \
+# RUN: %p/Inputs/unwind-info-simple-arm64.yaml -e _main %p/Inputs/libSystem.yaml
# RUN: llvm-objdump -unwind-info %t | FileCheck %s
--- !mach-o
@@ -12,20 +13,20 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
alignment: 2
address: 0x0000000000000000
- content: [ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
- 0xE0, 0x03, 0x1E, 0x32, 0x00, 0x00, 0x00, 0x94,
- 0x48, 0x01, 0x80, 0x52, 0x08, 0x00, 0x00, 0xB9,
- 0x02, 0x00, 0x80, 0xD2, 0x01, 0x00, 0x00, 0x90,
- 0x21, 0x00, 0x40, 0xF9, 0x00, 0x00, 0x00, 0x94,
- 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
- 0xE0, 0x03, 0x1E, 0x32, 0x00, 0x00, 0x00, 0x94,
- 0x48, 0x01, 0x80, 0x52, 0x08, 0x00, 0x00, 0xB9,
- 0x02, 0x00, 0x80, 0xD2, 0x01, 0x00, 0x00, 0x90,
- 0x21, 0x00, 0x40, 0xF9, 0x00, 0x00, 0x00, 0x94,
- 0x3F, 0x04, 0x00, 0x71, 0x81, 0x00, 0x00, 0x54,
- 0x00, 0x00, 0x00, 0x94, 0xFD, 0x7B, 0xC1, 0xA8,
- 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x94,
- 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
+ content: [ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
+ 0xE0, 0x03, 0x1E, 0x32, 0x00, 0x00, 0x00, 0x94,
+ 0x48, 0x01, 0x80, 0x52, 0x08, 0x00, 0x00, 0xB9,
+ 0x02, 0x00, 0x80, 0xD2, 0x01, 0x00, 0x00, 0x90,
+ 0x21, 0x00, 0x40, 0xF9, 0x00, 0x00, 0x00, 0x94,
+ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
+ 0xE0, 0x03, 0x1E, 0x32, 0x00, 0x00, 0x00, 0x94,
+ 0x48, 0x01, 0x80, 0x52, 0x08, 0x00, 0x00, 0xB9,
+ 0x02, 0x00, 0x80, 0xD2, 0x01, 0x00, 0x00, 0x90,
+ 0x21, 0x00, 0x40, 0xF9, 0x00, 0x00, 0x00, 0x94,
+ 0x3F, 0x04, 0x00, 0x71, 0x81, 0x00, 0x00, 0x54,
+ 0x00, 0x00, 0x00, 0x94, 0xFD, 0x7B, 0xC1, 0xA8,
+ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x94,
+ 0xFD, 0x7B, 0xBF, 0xA9, 0xFD, 0x03, 0x00, 0x91,
0x00, 0x00, 0x00, 0x94 ]
relocations:
- offset: 0x00000070
@@ -106,14 +107,14 @@ sections:
attributes: [ ]
alignment: 2
address: 0x0000000000000074
- content: [ 0xFF, 0x9B, 0xAF, 0x80, 0x00, 0x03, 0x27, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
- 0x01, 0x28, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ content: [ 0xFF, 0x9B, 0xAF, 0x80, 0x00, 0x03, 0x27, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x01, 0x28, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0xD0, 0xFF, 0xFF, 0xFF ]
- relocations:
+ relocations:
- offset: 0x00000030
type: ARM64_RELOC_POINTER_TO_GOT
length: 2
@@ -126,19 +127,19 @@ sections:
attributes: [ ]
alignment: 3
address: 0x00000000000000A8
- content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ content: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
- relocations:
+ relocations:
- offset: 0x00000040
type: ARM64_RELOC_UNSIGNED
length: 3
@@ -186,7 +187,7 @@ local-symbols:
type: N_SECT
sect: 3
value: 0x00000000000000A8
-global-symbols:
+global-symbols:
- name: __Z3barv
type: N_SECT
scope: [ N_EXT ]
@@ -202,7 +203,7 @@ global-symbols:
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000068
-undefined-symbols:
+undefined-symbols:
- name: __Unwind_Resume
type: N_UNDF
scope: [ N_EXT ]
@@ -236,20 +237,6 @@ undefined-symbols:
scope: [ N_EXT ]
value: 0x0000000000000000
---- !mach-o
-arch: arm64
-file-type: MH_DYLIB
-install-name: /usr/lib/libc++.dylib
-exports:
- - name: __Unwind_Resume
- - name: __ZTIl
- - name: __ZTIi
- - name: ___cxa_end_catch
- - name: ___cxa_begin_catch
- - name: ___cxa_allocate_exception
- - name: ___cxa_throw
- - name: ___gxx_personality_v0
-
...
@@ -263,7 +250,7 @@ exports:
# CHECK: Number of indices in array: 0x2
# CHECK: Common encodings: (count = 0)
# CHECK: Personality functions: (count = 1)
-# CHECK: personality[1]: 0x00004018
+# CHECK: personality[1]: 0x00004020
# CHECK: Top level indices: (count = 2)
# CHECK: [0]: function offset=0x00003e68, 2nd level page offset=0x00000040, LSDA offset=0x00000038
# CHECK: [1]: function offset=0x00003edc, 2nd level page offset=0x00000000, LSDA offset=0x00000040
diff --git a/test/mach-o/unwind-info-simple-x86_64.yaml b/test/mach-o/unwind-info-simple-x86_64.yaml
index 8886e5271661..1d2294a99678 100644
--- a/test/mach-o/unwind-info-simple-x86_64.yaml
+++ b/test/mach-o/unwind-info-simple-x86_64.yaml
@@ -67,8 +67,9 @@ defined-atoms:
target: _needsDwarfButNoCompactUnwind
# Generic x86_64 CIE:
- - type: unwind-cfi
- content: [ 14, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 52, 00,
+ - name: LCIE
+ type: unwind-cfi
+ content: [ 14, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 52, 00,
01, 78, 10, 01, 10, 0C, 07, 08, 90, 01, 00, 00 ]
- type: unwind-cfi
@@ -80,6 +81,9 @@ defined-atoms:
- kind: unwindFDEToFunction
offset: 8
target: _needsDwarfButNoCompactUnwind
+ - kind: negDelta32
+ offset: 4
+ target: LCIE
- type: unwind-cfi
content: [ 24, 00, 00, 00, 44, 00, 00, 00, C8, FE, FF, FF,
@@ -90,7 +94,22 @@ defined-atoms:
- kind: unwindFDEToFunction
offset: 8
target: _needsDwarfSaysCompactUnwind
+ - kind: negDelta32
+ offset: 4
+ target: LCIE
+ - type: unwind-cfi
+ content: [ 24, 00, 00, 00, 6C, 00, 00, 00, C8, FE, FF, FF,
+ FF, FF, FF, FF, 01, 00, 00, 00, 00, 00, 00, 00,
+ 00, 41, 0E, 10, 86, 02, 43, 0D, 06, 00, 00, 00,
+ 00, 00, 00, 00 ]
+ references:
+ - kind: unwindFDEToFunction
+ offset: 8
+ target: _main
+ - kind: negDelta32
+ offset: 4
+ target: LCIE
- name: __Z3barv
scope: global
diff --git a/test/mach-o/upward-dylib-load-command.yaml b/test/mach-o/upward-dylib-load-command.yaml
index fee3e41d5bd5..1383ad75b0a6 100644
--- a/test/mach-o/upward-dylib-load-command.yaml
+++ b/test/mach-o/upward-dylib-load-command.yaml
@@ -1,7 +1,7 @@
# RUN: lld -flavor darwin -arch x86_64 -dylib %p/Inputs/bar.yaml \
# RUN: -install_name /usr/lib/libbar.dylib %p/Inputs/libSystem.yaml -o %t1.dylib
# RUN: lld -flavor darwin -arch x86_64 -dylib %s -upward_library %t1.dylib \
-# RUN: -install_name /usr/lib/libfoo.dylib %p/Inputs/libSystem.yaml -o %t
+# RUN: -install_name /usr/lib/libfoo.dylib %p/Inputs/libSystem.yaml -o %t
# RUN: llvm-objdump -private-headers %t | FileCheck %s
#
#
@@ -19,7 +19,7 @@ sections:
type: S_REGULAR
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
- content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
+ content: [ 0x55, 0x48, 0x89, 0xE5, 0x31, 0xC0, 0x5D, 0xE9,
0x00, 0x00, 0x00, 0x00 ]
relocations:
- offset: 0x00000008
diff --git a/test/mach-o/use-simple-dylib.yaml b/test/mach-o/use-simple-dylib.yaml
index 0da7d1b0bd05..658be16356ea 100644
--- a/test/mach-o/use-simple-dylib.yaml
+++ b/test/mach-o/use-simple-dylib.yaml
@@ -1,4 +1,5 @@
-# RUN: lld -flavor darwin -arch x86_64 -print_atoms -r %s -o %t | FileCheck %s
+# RUN: lld -flavor darwin -arch x86_64 -print_atoms -r %s \
+# RUN: %p/Inputs/use-simple-dylib.yaml -o %t | FileCheck %s
--- !mach-o
@@ -53,65 +54,6 @@ undefined-symbols:
type: N_UNDF
scope: [ N_EXT ]
value: 0x0000000000000000
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-has-UUID: false
-OS: unknown
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- alignment: 4
- address: 0x0000000000000000
- content: [ 0xCC, 0xC3, 0x90, 0xC3, 0x90, 0x90, 0xC3, 0x90,
- 0x90, 0x90, 0xC3, 0x90, 0x90, 0x90, 0x90, 0xC3,
- 0x31, 0xC0, 0xC3 ]
-local-symbols:
- - name: _myStatic
- type: N_SECT
- sect: 1
- value: 0x000000000000000B
- - name: _myVariablePreviouslyKnownAsPrivateExtern
- type: N_SECT
- scope: [ N_PEXT ]
- sect: 1
- desc: [ N_SYMBOL_RESOLVER ]
- value: 0x0000000000000011
-global-symbols:
- - name: _myGlobal
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000001
- - name: _myGlobalWeak
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- desc: [ N_WEAK_DEF ]
- value: 0x0000000000000002
- - name: _myHidden
- type: N_SECT
- scope: [ N_EXT, N_PEXT ]
- sect: 1
- value: 0x0000000000000004
- - name: _myHiddenWeak
- type: N_SECT
- scope: [ N_EXT, N_PEXT ]
- sect: 1
- desc: [ N_WEAK_DEF ]
- value: 0x0000000000000007
- - name: _myResolver
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- desc: [ N_SYMBOL_RESOLVER ]
- value: 0x0000000000000010
-
-install-name: libspecial.dylib
...
diff --git a/test/mach-o/write-final-sections.yaml b/test/mach-o/write-final-sections.yaml
index 7d4afb31900a..4e94acfa25b1 100644
--- a/test/mach-o/write-final-sections.yaml
+++ b/test/mach-o/write-final-sections.yaml
@@ -1,4 +1,5 @@
-# RUN: lld -flavor darwin -arch x86_64 %s -o %t -e _foo
+# RUN: lld -flavor darwin -arch x86_64 %s %p/Inputs/write-final-sections.yaml \
+# RUN: -o %t -e _foo
# RUN: llvm-readobj -sections -section-data %t | FileCheck %s
--- !native
@@ -68,12 +69,31 @@ defined-atoms:
# CHECK-NEXT: )
# For __TEXT, __eh_frame, (with typeCFI)
+ - name: LCIE
+ type: unwind-cfi
+ content: [ 14, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 52, 00,
+ 01, 78, 10, 01, 10, 0C, 07, 08, 90, 01, 00, 00 ]
+
- type: unwind-cfi
- content: [ 07 ]
+ content: [ 24, 00, 00, 00, 1C, 00, 00, 00, C8, FE, FF, FF,
+ FF, FF, FF, FF, 01, 00, 00, 00, 00, 00, 00, 00,
+ 00, 41, 0E, 10, 86, 02, 43, 0D, 06, 00, 00, 00,
+ 00, 00, 00, 00 ]
+ references:
+ - kind: unwindFDEToFunction
+ offset: 8
+ target: _foo
+ - kind: negDelta32
+ offset: 4
+ target: LCIE
+
# CHECK: Name: __eh_frame
# CHECK: Segment: __TEXT
# CHECK: SectionData (
-# CHECK-NEXT: 0000: 07
+# CHECK-NEXT: 0000: 14000000 00000000 017A5200 01781001
+# CHECK-NEXT: 0010: 100C0708 90010000 24000000 1C000000
+# CHECK-NEXT: 0020: 70FFFFFF FFFFFFFF 01000000 00000000
+# CHECK-NEXT: 0030: 00410E10 8602430D 06000000 00000000
# CHECK-NEXT: )
# For __DATA, __data, (with typeData)
@@ -143,25 +163,3 @@ defined-atoms:
- type: compact-unwind
content: [ 0E, 00, 00, 00, 00, 00, 00, 00 ]
# CHECK-NOT: Name: __compact_unwind
-
-
---- !mach-o
-arch: x86_64
-file-type: MH_DYLIB
-flags: [ ]
-install-name: /usr/lib/libSystem.B.dylib
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- address: 0x0000000000000000
- content: [ 0x55 ]
-
-global-symbols:
- - name: dyld_stub_binder
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
-
diff --git a/test/mach-o/wrong-arch-error.yaml b/test/mach-o/wrong-arch-error.yaml
index 6d233798a7b6..3b8ef0dc7ee6 100644
--- a/test/mach-o/wrong-arch-error.yaml
+++ b/test/mach-o/wrong-arch-error.yaml
@@ -1,4 +1,5 @@
-# RUN: not lld -flavor darwin -arch x86_64 -r %s 2> %t.err
+# RUN: not lld -flavor darwin -arch x86_64 -r %s \
+# RUN: %p/Inputs/wrong-arch-error.yaml 2> %t.err
# RUN: FileCheck %s < %t.err
--- !mach-o
@@ -21,28 +22,6 @@ global-symbols:
scope: [ N_EXT ]
sect: 1
value: 0x0000000000000000
-
---- !mach-o
-arch: x86
-file-type: MH_OBJECT
-flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
-has-UUID: false
-OS: unknown
-sections:
- - segment: __TEXT
- section: __text
- type: S_REGULAR
- attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
- alignment: 4
- address: 0x0000000000000000
- content: [ 0xC3 ]
-
-global-symbols:
- - name: _bar
- type: N_SECT
- scope: [ N_EXT ]
- sect: 1
- value: 0x0000000000000000
...
diff --git a/test/elf/AArch64/Inputs/fn.c b/test/old-elf/AArch64/Inputs/fn.c
index 54939a2426b2..54939a2426b2 100644
--- a/test/elf/AArch64/Inputs/fn.c
+++ b/test/old-elf/AArch64/Inputs/fn.c
diff --git a/test/elf/AArch64/Inputs/fn.o b/test/old-elf/AArch64/Inputs/fn.o
index 53e47ad37742..53e47ad37742 100644
--- a/test/elf/AArch64/Inputs/fn.o
+++ b/test/old-elf/AArch64/Inputs/fn.o
Binary files differ
diff --git a/test/old-elf/AArch64/Inputs/general-dyn-tls-0.yaml b/test/old-elf/AArch64/Inputs/general-dyn-tls-0.yaml
new file mode 100644
index 000000000000..e355a3d85cdf
--- /dev/null
+++ b/test/old-elf/AArch64/Inputs/general-dyn-tls-0.yaml
@@ -0,0 +1,64 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FF4300D1E00F00B900040011E103002A48D03BD50801009108010091000100B9E10B00B9FF430091C0035FD6
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000014
+ Symbol: var
+ Type: R_AARCH64_TLSLE_ADD_TPREL_HI12
+ - Offset: 0x0000000000000018
+ Symbol: var
+ Type: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+# - Name: test_tls.c
+# Type: STT_FILE
+ - Name: '$d.1'
+ Section: .tbss
+ - Name: '$x.0'
+ Section: .text
+ - Name: .tbss
+ Type: STT_TLS
+ Section: .tbss
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000002C
+ - Name: var
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+...
diff --git a/test/elf/AArch64/Inputs/initfini-option.c b/test/old-elf/AArch64/Inputs/initfini-option.c
index 6021fb57ffa9..6021fb57ffa9 100644
--- a/test/elf/AArch64/Inputs/initfini-option.c
+++ b/test/old-elf/AArch64/Inputs/initfini-option.c
diff --git a/test/elf/AArch64/Inputs/initfini-option.o b/test/old-elf/AArch64/Inputs/initfini-option.o
index c75079b013fa..c75079b013fa 100644
--- a/test/elf/AArch64/Inputs/initfini-option.o
+++ b/test/old-elf/AArch64/Inputs/initfini-option.o
Binary files differ
diff --git a/test/elf/AArch64/Inputs/initfini.c b/test/old-elf/AArch64/Inputs/initfini.c
index 8369d68a8dab..8369d68a8dab 100644
--- a/test/elf/AArch64/Inputs/initfini.c
+++ b/test/old-elf/AArch64/Inputs/initfini.c
diff --git a/test/elf/AArch64/Inputs/initfini.o b/test/old-elf/AArch64/Inputs/initfini.o
index 030fe59878be..030fe59878be 100644
--- a/test/elf/AArch64/Inputs/initfini.o
+++ b/test/old-elf/AArch64/Inputs/initfini.o
Binary files differ
diff --git a/test/old-elf/AArch64/Inputs/initial-exec-tls-1.yaml b/test/old-elf/AArch64/Inputs/initial-exec-tls-1.yaml
new file mode 100644
index 000000000000..2a6104a150ea
--- /dev/null
+++ b/test/old-elf/AArch64/Inputs/initial-exec-tls-1.yaml
@@ -0,0 +1,77 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Size: 16
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742065653461393664373236383264353237636635353336313135366235656531383662303964363138292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623065376165623639343236646331346637376466626535343533333536366664363866396466632900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: '$d.0'
+ Type: STT_TLS
+ Section: .tbss
+ - Name: '$d.1'
+ Section: .comment
+ - Name: .tbss
+ Type: STT_TLS
+ Section: .tbss
+ - Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .data
+ - Type: STT_SECTION
+ Section: .bss
+ - Type: STT_SECTION
+ Section: .comment
+ - Type: STT_SECTION
+ Section: .note.GNU-stack
+ Global:
+ - Name: e0
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+ - Name: e1
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: e2
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000008
+ Size: 0x0000000000000004
+ - Name: e3
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x000000000000000C
+ Size: 0x0000000000000004
+...
diff --git a/test/elf/AArch64/Inputs/main.c b/test/old-elf/AArch64/Inputs/main.c
index 0280c9127076..0280c9127076 100644
--- a/test/elf/AArch64/Inputs/main.c
+++ b/test/old-elf/AArch64/Inputs/main.c
diff --git a/test/elf/AArch64/Inputs/main.o b/test/old-elf/AArch64/Inputs/main.o
index 8c0f049da6a8..8c0f049da6a8 100644
--- a/test/elf/AArch64/Inputs/main.o
+++ b/test/old-elf/AArch64/Inputs/main.o
Binary files differ
diff --git a/test/elf/AArch64/Inputs/no-interp-section.c b/test/old-elf/AArch64/Inputs/no-interp-section.c
index 3981c038ed33..3981c038ed33 100644
--- a/test/elf/AArch64/Inputs/no-interp-section.c
+++ b/test/old-elf/AArch64/Inputs/no-interp-section.c
diff --git a/test/elf/AArch64/Inputs/no-interp-section.o b/test/old-elf/AArch64/Inputs/no-interp-section.o
index 36b41fdbf782..36b41fdbf782 100644
--- a/test/elf/AArch64/Inputs/no-interp-section.o
+++ b/test/old-elf/AArch64/Inputs/no-interp-section.o
Binary files differ
diff --git a/test/elf/AArch64/Inputs/zerosizedsection.o b/test/old-elf/AArch64/Inputs/zerosizedsection.o
index 10123fcef90d..10123fcef90d 100644
--- a/test/elf/AArch64/Inputs/zerosizedsection.o
+++ b/test/old-elf/AArch64/Inputs/zerosizedsection.o
Binary files differ
diff --git a/test/elf/AArch64/Inputs/zerosizedsection.s b/test/old-elf/AArch64/Inputs/zerosizedsection.s
index 651ee3aab503..651ee3aab503 100644
--- a/test/elf/AArch64/Inputs/zerosizedsection.s
+++ b/test/old-elf/AArch64/Inputs/zerosizedsection.s
diff --git a/test/old-elf/AArch64/defsym.test b/test/old-elf/AArch64/defsym.test
new file mode 100644
index 000000000000..f9864092ddc3
--- /dev/null
+++ b/test/old-elf/AArch64/defsym.test
@@ -0,0 +1,22 @@
+RUN: lld -flavor old-gnu -target aarch64--linux-gnu --defsym=main=fn \
+RUN: --noinhibit-exec %p/Inputs/fn.o -o %t
+RUN: llvm-readobj -symbols %t | FileCheck %s
+
+CHECK: Symbol {
+CHECK: Name: main (1)
+CHECK: Value: 0x4001A4
+CHECK: Size: 0
+CHECK: Binding: Global (0x1)
+CHECK: Type: Function (0x2)
+CHECK: Other: 0
+CHECK: Section: .text (0x5)
+CHECK: }
+CHECK: Symbol {
+CHECK: Name: fn (11)
+CHECK: Value: 0x4001A4
+CHECK: Size: 8
+CHECK: Binding: Global (0x1)
+CHECK: Type: Function (0x2)
+CHECK: Other: 0
+CHECK: Section: .text (0x5)
+CHECK: }
diff --git a/test/old-elf/AArch64/dontignorezerosize-sections.test b/test/old-elf/AArch64/dontignorezerosize-sections.test
new file mode 100644
index 000000000000..8f3b27702208
--- /dev/null
+++ b/test/old-elf/AArch64/dontignorezerosize-sections.test
@@ -0,0 +1,9 @@
+# This tests that lld is not ignoring zero sized sections
+RUN: lld -flavor old-gnu -target aarch64--linux-gnu %p/Inputs/zerosizedsection.o \
+RUN: --noinhibit-exec --output-filetype=yaml -o %t
+RUN: FileCheck %s < %t
+
+CHECK: references:
+CHECK: - kind: layout-after
+CHECK: offset: 0
+CHECK: target: L000
diff --git a/test/old-elf/AArch64/dynamicvars.test b/test/old-elf/AArch64/dynamicvars.test
new file mode 100644
index 000000000000..80228f0cd4b2
--- /dev/null
+++ b/test/old-elf/AArch64/dynamicvars.test
@@ -0,0 +1,113 @@
+# Tests that the dynamic variables created by the linker are set to the right
+# values.
+
+# RUN: yaml2obj --format elf -docnum 1 %s -o %t.o
+# RUN: lld -flavor old-gnu -target aarch64 -e main %t.o -o %t1 --noinhibit-exec
+# RUN: llvm-readobj -sections -symbols %t1 | FileCheck %s
+
+
+# CHECK: Name: .dynamic
+# CHECK: Type: SHT_DYNAMIC
+# CHECK: Address: [[TARGETA:[0xa-fA-f0-9]+]]
+# CHECK: Name: .got.plt
+# CHECK: Type: SHT_PROGBITS
+# CHECK: Address: [[TARGETB:[0xa-fA-f0-9]+]]
+# CHECK: Name: _DYNAMIC
+# CHECK: Value: [[TARGETA]]
+# CHECK: Section: .dynamic
+# CHECK: Name: _GLOBAL_OFFSET_TABLE_
+# CHECK: Value: [[TARGETB]]
+# CHECK: Section: .got.plt
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ - Name: .text.startup
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FD7BBFA900000090FD030091000000910000009400008052FD7BC1A8C0035FD6
+ - Name: .rela.text.startup
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text.startup
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: .rodata.str1.8
+ Type: R_AARCH64_ADR_PREL_PG_HI21
+ - Offset: 0x000000000000000C
+ Symbol: .rodata.str1.8
+ Type: R_AARCH64_ADD_ABS_LO12_NC
+ - Offset: 0x0000000000000010
+ Symbol: puts
+ Type: R_AARCH64_CALL26
+ - Name: .rodata.str1.8
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000008
+ Content: '7465737400000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 004743433A2028474E552920342E392E33203230313530333234202870726572656C656173652900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: test.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .text.startup
+ Type: STT_SECTION
+ Section: .text.startup
+ - Name: '$x'
+ Section: .text.startup
+ - Name: .rodata.str1.8
+ Type: STT_SECTION
+ Section: .rodata.str1.8
+ - Name: '$d'
+ Section: .rodata.str1.8
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text.startup
+ Size: 0x0000000000000020
+ - Name: puts
+...
diff --git a/test/old-elf/AArch64/dynlib-nointerp-section.test b/test/old-elf/AArch64/dynlib-nointerp-section.test
new file mode 100644
index 000000000000..c4f4edab61b1
--- /dev/null
+++ b/test/old-elf/AArch64/dynlib-nointerp-section.test
@@ -0,0 +1,5 @@
+RUN: lld -flavor old-gnu -target aarch64--linux-gnu %p/Inputs/no-interp-section.o \
+RUN: -o %t -shared
+RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+CHECK-NOT: .interp
diff --git a/test/old-elf/AArch64/general-dyn-tls-0.test b/test/old-elf/AArch64/general-dyn-tls-0.test
new file mode 100644
index 000000000000..ae2af94d057d
--- /dev/null
+++ b/test/old-elf/AArch64/general-dyn-tls-0.test
@@ -0,0 +1,103 @@
+# Check for correct offsets when handling relocations for general dynamic TLS
+# access in executable binaries.
+#
+# The test case was generated from following code snippet:
+#
+# == test_tls.c ==
+#
+# __thread int var;
+# void foo (int x) {
+# var = x + 1;
+# }
+#
+# == test_main.c ==
+# #include <stdio.h>
+#
+# extern __thread int var;
+# extern void foo (int);
+#
+# int main () {
+# foo (10);
+# return var;
+# }
+#
+# The objects are compiled with -fpic.
+
+#RUN: yaml2obj -format=elf %p/Inputs/general-dyn-tls-0.yaml -o=%t-t1.o
+#RUN: yaml2obj -format=elf %s -o %t-t0.o
+#RUN: lld -flavor old-gnu -target arm64 --noinhibit-exec -o %t.exe %t-t0.o %t-t1.o
+#RUN: llvm-readobj -relocations %t.exe | FileCheck %s -check-prefix=CHECKRELOCATION
+#RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+#CHECKRELOCATION: Relocations [
+#CHECKRELOCATION: .rela.dyn {
+#CHECKRELOCATION: 0x401090 R_AARCH64_TLSDESC var 0x0
+#CHECKRELOCATION: }
+
+#CHECK: Contents of section .text:
+#CHECK: 400250 a8c31fb8 40018052 0b000094 000000b0 ....@..R........
+# \_ adrp x0, 401000 <_DYNAMIC> (R_AARCH64_TLSDESC_ADR_PAGE21)
+#CHECK-NEXT: 400260 014840f9 00400291 20003fd6 49d03bd5 .H@..@.. .?.I.;.
+# \_ | | ldr x1, [x0,#144] (R_AARCH64_TLSDESC_LD64_LO12_NC)
+# \_ | add x0, x0, #0x90 (R_AARCH64_TLSDESC_ADD_LO12_NC)
+# \_ blr x1 (R_AARCH64_TLSDESC_CALL)
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FD7BBFA9FD030091FF4300D1E8031F2AA8C31FB8400180520000009400000090010040F90000009120003FD649D03BD5286960B8E003082ABF030091FD7BC1A8C0035FD6
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000018
+ Symbol: foo
+ Type: R_AARCH64_CALL26
+ - Offset: 0x000000000000001C
+ Symbol: var
+ Type: R_AARCH64_TLSDESC_ADR_PAGE21
+ - Offset: 0x0000000000000020
+ Symbol: var
+ Type: R_AARCH64_TLSDESC_LD64_LO12_NC
+ - Offset: 0x0000000000000024
+ Symbol: var
+ Type: R_AARCH64_TLSDESC_ADD_LO12_NC
+ - Offset: 0x0000000000000028
+ Symbol: var
+ Type: R_AARCH64_TLSDESC_CALL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: '$x.0'
+ Section: .text
+ Global:
+ - Name: foo
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000044
+ - Name: var
+ Type: STT_TLS
diff --git a/test/old-elf/AArch64/initfini.test b/test/old-elf/AArch64/initfini.test
new file mode 100644
index 000000000000..c5f385082edc
--- /dev/null
+++ b/test/old-elf/AArch64/initfini.test
@@ -0,0 +1,23 @@
+# This tests the functionality that lld is able to read
+# init_array/fini_array sections in the input ELF. This
+# corresponds to the the .init_array/.fini_array sections
+# in the output ELF.
+
+RUN: lld -flavor old-gnu -target aarch64--linux-gnu %p/Inputs/initfini.o \
+RUN: --noinhibit-exec --output-filetype=yaml -o %t
+RUN: FileCheck %s < %t
+
+CHECK: type: data
+CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECK: section-name: .init_array
+CHECK: references:
+CHECK: - kind: R_AARCH64_ABS64
+CHECK: offset: 0
+CHECK: target: constructor
+CHECK: type: data
+CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECK: section-name: .fini_array
+CHECK: references:
+CHECK: - kind: R_AARCH64_ABS64
+CHECK: offset: 0
+CHECK: target: destructor
diff --git a/test/old-elf/AArch64/initial-exec-tls-0.test b/test/old-elf/AArch64/initial-exec-tls-0.test
new file mode 100644
index 000000000000..4cb5f9c7052a
--- /dev/null
+++ b/test/old-elf/AArch64/initial-exec-tls-0.test
@@ -0,0 +1,146 @@
+# Check for initial executable TLS access across different modules. For
+# this case compiler will emit R_AARCH64_TLSLD_ADR_PAGE21 and
+# R_AARCH64_TLSLD_ADD_LO12_NC static relocations and linker should create
+# a R_AARCH64_TLS_TPREL64 dynamic relocation for variable access.
+
+# The test case was generated from following code snippet:
+#
+# t1.c (initial-exec-tls-1.yaml)
+#
+# __thread int e0;
+# __thread int e1;
+# __thread int e2;
+# __thread int e3;
+#
+# t0.c (initial-exec-tls-0.test)
+#
+# extern __thread int e0;
+# extern __thread int e1;
+# extern __thread int e2;
+# extern __thread int e3;
+#
+# int main ()
+# {
+# e0 = 1;
+# e1 = 2;
+# e1 = 3;
+# e1 = 4;
+# }
+
+#RUN: yaml2obj -format=elf %p/Inputs/initial-exec-tls-1.yaml -o=%t-t1.o
+#RUN: yaml2obj -format=elf %s -o %t-t0.o
+#RUN: lld -flavor old-gnu -target arm64 --noinhibit-exec -o %t.exe %t-t0.o %t-t1.o
+#RUN: llvm-readobj -relocations %t.exe | FileCheck %s -check-prefix=CHECKRELOCATION
+#RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+#CHECKRELOCATION: R_AARCH64_TLS_TPREL64 e0 0x0
+#CHECKRELOCATION: R_AARCH64_TLS_TPREL64 e1 0x0
+#CHECKRELOCATION: R_AARCH64_TLS_TPREL64 e2 0x0
+#CHECKRELOCATION: R_AARCH64_TLS_TPREL64 e3 0x0
+
+#CHECK: Contents of section .text:
+#CHECK-NEXT: 4002c0 ff4300d1 e8031f2a e9031e32 0a0000b0 .C.....*...2....
+# \_ adrp x10, 401000 (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21)
+#CHECK-NEXT: 4002d0 4a4940f9 4bd03bd5 ec030032 6c692ab8 JI@.K.;....2li*.
+# \_ ldr x10, [x10,#144] (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC)
+#CHECK-NEXT: 4002e0 0a0000b0 4a4d40f9 ec031f32 6c692ab8 ....JM@....2li*.
+# \_ | adrp x10, 401000 (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21)
+# \_ ldr x10, [x10,#152] (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC)
+#CHECK-NEXT: 4002f0 0a0000b0 4a5140f9 ec070032 6c692ab8 ....JQ@....2li*.
+# \_ | adrp x10, 401000 (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21)
+# \_ ldr x10, [x10,#160] (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC)
+#CHECK-NEXT: 400300 0a0000b0 4a5540f9 ec031e32 6c692ab8 ....JU@....2li*.
+# \_ | adrp x10, 401000 (R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21)
+# \_ ldr x10, [x10,#168] (R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC)
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FF4300D1E8031F2AE9031E320A0000904A0140F94BD03BD5EC0300326C692AB80A0000904A0140F9EC031F326C692AB80A0000904A0140F9EC0700326C692AB80A0000904A0140F9EC031E326C692AB8E003082AE90F00B9FF430091C0035FD6
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000000C
+ Symbol: e0
+ Type: R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
+ - Offset: 0x0000000000000010
+ Symbol: e0
+ Type: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
+ - Offset: 0x0000000000000020
+ Symbol: e1
+ Type: R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
+ - Offset: 0x0000000000000024
+ Symbol: e1
+ Type: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
+ - Offset: 0x0000000000000030
+ Symbol: e2
+ Type: R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
+ - Offset: 0x0000000000000034
+ Symbol: e2
+ Type: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
+ - Offset: 0x0000000000000040
+ Symbol: e3
+ Type: R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
+ - Offset: 0x0000000000000044
+ Symbol: e3
+ Type: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742065653461393664373236383264353237636635353336313135366235656531383662303964363138292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623065376165623639343236646331346637376466626535343533333536366664363866396466632900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: '$d.1'
+ Section: .comment
+ - Name: '$x.0'
+ Section: .text
+ - Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .data
+ - Type: STT_SECTION
+ Section: .bss
+ - Type: STT_SECTION
+ Section: .comment
+ - Type: STT_SECTION
+ Section: .note.GNU-stack
+ Global:
+ - Name: e0
+ Type: STT_TLS
+ - Name: e1
+ Type: STT_TLS
+ - Name: e2
+ Type: STT_TLS
+ - Name: e3
+ Type: STT_TLS
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000060
+...
diff --git a/test/old-elf/AArch64/local-tls.test b/test/old-elf/AArch64/local-tls.test
new file mode 100644
index 000000000000..f339ae20e154
--- /dev/null
+++ b/test/old-elf/AArch64/local-tls.test
@@ -0,0 +1,184 @@
+# Check for correct offsets when handling relocations for local TLS
+# access (R_AARCH64_TLSLE_ADD_TPREL_HI12, R_AARCH64_TLSLE_ADD_TPREL_LO12_NC)
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 --noinhibit-exec -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 4001dc 48d03bd5 08010091 08610091 090140b9 H.;......a....@.
+# \_ | | <foo1>:
+# \_ | add x8, x8, #0x0 (R_AARCH64_TLSLE_ADD_TPREL_HI12)
+# \_ add x8, x8, #0x18 (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC)
+# CHECK-NEXT: 4001ec e003092a c0035fd6 48d03bd5 08010091 ...*.._.H.;.....
+# \_ | <foo2>:
+# \_ add x8, x8, #0x0 (R_AARCH64_TLSLE_ADD_TPREL_HI12)
+# CHECK-NEXT: 4001fc 08710091 090140b9 e003092a c0035fd6 .q....@....*.._.
+# \_ add x8, x8, #0x1c (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC)
+# CHECK-NEXT: 40020c 48d03bd5 08010091 08410091 090140b9 H.;......A....@.
+# \_ | | <foo3>:
+# \_ | add x8, x8, #0x0 (R_AARCH64_TLSLE_ADD_TPREL_HI12)
+# \_ add x8, x8, #0x10 (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC)
+# CHECK-NEXT: 40021c e003092a c0035fd6 48d03bd5 08010091 ...*.._.H.;.....
+# \_ | <foo3>:
+# \_ add x8, x8, #0x0 (R_AARCH64_TLSLE_ADD_TPREL_HI12)
+# CHECK-NEXT: 40022c 08510091 090140b9 e003092a c0035fd6 .Q....@....*.._.
+# \_ add x8, x8, #0x14 (R_AARCH64_TLSLE_ADD_TPREL_LO12_NC)
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AARCH64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 48D03BD50801009108010091090140B9E003092AC0035FD648D03BD50801009108010091090140B9E003092AC0035FD648D03BD50801009108010091090140B9E003092AC0035FD648D03BD50801009108010091090140B9E003092AC0035FD6FD7BBFA9FD030091FF8300D1BFC31FB8E4FFFF97A0831FB8E8FFFF97A0431FB8ECFFFF97E01300B9F0FFFF970800009008010091E00F00B9E00308AAA1835FB8A2435FB8E31340B9E40F40B900000094E1031F2AE00B00B9E003012ABF030091FD7BC1A8C0035FD6
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: v1
+ Type: R_AARCH64_TLSLE_ADD_TPREL_HI12
+ - Offset: 0x0000000000000008
+ Symbol: v1
+ Type: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
+ - Offset: 0x000000000000001C
+ Symbol: v2
+ Type: R_AARCH64_TLSLE_ADD_TPREL_HI12
+ - Offset: 0x0000000000000020
+ Symbol: v2
+ Type: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
+ - Offset: 0x0000000000000034
+ Symbol: v3
+ Type: R_AARCH64_TLSLE_ADD_TPREL_HI12
+ - Offset: 0x0000000000000038
+ Symbol: v3
+ Type: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
+ - Offset: 0x000000000000004C
+ Symbol: v4
+ Type: R_AARCH64_TLSLE_ADD_TPREL_HI12
+ - Offset: 0x0000000000000050
+ Symbol: v4
+ Type: R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
+ - Offset: 0x000000000000008C
+ Symbol: .rodata.str1.1
+ Type: R_AARCH64_ADR_PREL_PG_HI21
+ - Offset: 0x0000000000000090
+ Symbol: .rodata.str1.1
+ Type: R_AARCH64_ADD_ABS_LO12_NC
+ - Offset: 0x00000000000000AC
+ Symbol: printf
+ Type: R_AARCH64_CALL26
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: '0300000004000000'
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Size: 8
+ - Name: .rodata.str1.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 25692025692025692025690A00
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: '$d.1'
+ Type: STT_TLS
+ Section: .tdata
+ - Name: '$d.2'
+ Type: STT_TLS
+ Section: .tbss
+ - Name: '$d.3'
+ Section: .rodata.str1.1
+ - Name: '$x.0'
+ Section: .text
+ - Name: v2
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: v4
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .tdata
+ Type: STT_SECTION
+ Section: .tdata
+ - Name: .tbss
+ Type: STT_SECTION
+ Section: .tbss
+ - Name: .rodata.str1.1
+ Type: STT_SECTION
+ Section: .rodata.str1.1
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ Global:
+ - Name: foo1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000018
+ - Name: foo2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000018
+ Size: 0x0000000000000018
+ - Name: foo3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000030
+ Size: 0x0000000000000018
+ - Name: foo4
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000048
+ Size: 0x0000000000000018
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000060
+ Size: 0x0000000000000068
+ - Name: v1
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+ - Name: v3
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: printf
+...
diff --git a/test/old-elf/AArch64/rel-abs16-overflow.test b/test/old-elf/AArch64/rel-abs16-overflow.test
new file mode 100644
index 000000000000..06221c902bd7
--- /dev/null
+++ b/test/old-elf/AArch64/rel-abs16-overflow.test
@@ -0,0 +1,44 @@
+# Check handling of R_AARCH64_ABS16 relocation overflow.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}}: reference from data1+0 to data1+0 of type 259 (R_AARCH64_ABS16)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0
+ Symbol: data1
+ Type: R_AARCH64_ABS16
+ Addend: 0
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-abs16.test b/test/old-elf/AArch64/rel-abs16.test
new file mode 100644
index 000000000000..e6b817570eb4
--- /dev/null
+++ b/test/old-elf/AArch64/rel-abs16.test
@@ -0,0 +1,53 @@
+# Check handling of R_AARCH64_ABS16 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 60100000 00000000 `.......
+# ^^ data1 - 0x400000 = 0x1060
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000004 data1
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data1
+ Type: R_AARCH64_ABS16
+ Addend: -4194304
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x4
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-abs32-overflow.test b/test/old-elf/AArch64/rel-abs32-overflow.test
new file mode 100644
index 000000000000..17154c6ddc82
--- /dev/null
+++ b/test/old-elf/AArch64/rel-abs32-overflow.test
@@ -0,0 +1,53 @@
+# Check handling of R_AARCH64_ABS32 relocation overflow.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK-DAG: Relocation out of range in file {{.*}}: reference from data1+0 to data2+34359738369 of type 258 (R_AARCH64_ABS32)
+# CHECK-DAG: Relocation out of range in file {{.*}}: reference from data2+0 to data1+34359738369 of type 258 (R_AARCH64_ABS32)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_ABS32
+ Addend: 0x800000001
+ - Offset: 0x4
+ Symbol: data1
+ Type: R_AARCH64_ABS32
+ Addend: 0x800000001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x4
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-abs32.test b/test/old-elf/AArch64/rel-abs32.test
new file mode 100644
index 000000000000..7faa662d3462
--- /dev/null
+++ b/test/old-elf/AArch64/rel-abs32.test
@@ -0,0 +1,59 @@
+# Check handling of R_AARCH64_ABS32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 65104080 61104080 e.@.a.@.
+# ^^ data2 + 0x80000001 = 0x80401069
+# ^^ data1 + 0x80000001 = 0x80401061
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000004 data1
+# CHECK: 00401064 g .data 00000004 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_ABS32
+ Addend: 0x80000001
+ - Offset: 0x4
+ Symbol: data1
+ Type: R_AARCH64_ABS32
+ Addend: 0x80000001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x4
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-abs64.test b/test/old-elf/AArch64/rel-abs64.test
new file mode 100644
index 000000000000..0304584d121d
--- /dev/null
+++ b/test/old-elf/AArch64/rel-abs64.test
@@ -0,0 +1,59 @@
+# Check handling of R_AARCH64_ABS64 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 69104000 00000080 61104000 00000080 i.@.....a.@.....
+# ^^ data2 + 0x8000000000000001 = 0x8000000000401069
+# ^^ data1 + 0x8000000000000001 = 0x8000000000401061
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000008 data1
+# CHECK: 00401068 g .data 00000008 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000000000000000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_ABS64
+ Addend: -9223372036854775807
+ - Offset: 0x8
+ Symbol: data1
+ Type: R_AARCH64_ABS64
+ Addend: -9223372036854775807
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-adr_prel_lo21-overflow.test b/test/old-elf/AArch64/rel-adr_prel_lo21-overflow.test
new file mode 100644
index 000000000000..4f8e6b607bc7
--- /dev/null
+++ b/test/old-elf/AArch64/rel-adr_prel_lo21-overflow.test
@@ -0,0 +1,45 @@
+# Check handling of R_AARCH64_ADR_PREL_PG_HI21 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+
+# CHECK: Relocation out of range in file {{.*}}: reference from _start+0 to data1+1048577 of type 274 (R_AARCH64_ADR_PREL_LO21)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000090"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data1
+ Type: R_AARCH64_ADR_PREL_LO21
+ Addend: 0x100001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-adr_prel_lo21.test b/test/old-elf/AArch64/rel-adr_prel_lo21.test
new file mode 100644
index 000000000000..36a9489c1aa4
--- /dev/null
+++ b/test/old-elf/AArch64/rel-adr_prel_lo21.test
@@ -0,0 +1,51 @@
+# REQUIRES: arm64
+
+# Check handling of R_AARCH64_ADR_PREL_LO21 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -d -t %t-exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: _start:
+# CHECK-NEXT: 4001b0: 80 75 00 90 adrp x0, #15400960
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000004 data1
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000090"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data1
+ Type: R_AARCH64_ADR_PREL_LO21
+ Addend: 0
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-adr_prel_pg_hi21-overflow.test b/test/old-elf/AArch64/rel-adr_prel_pg_hi21-overflow.test
new file mode 100644
index 000000000000..f095f60e82a6
--- /dev/null
+++ b/test/old-elf/AArch64/rel-adr_prel_pg_hi21-overflow.test
@@ -0,0 +1,45 @@
+# Check handling of R_AARCH64_ADR_PREL_PG_HI21 relocation overflow.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+
+# CHECK-DAG: Relocation out of range in file {{.*}}: reference from _start+0 to data1+2147483649 of type 275 (R_AARCH64_ADR_PREL_PG_HI21)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000090"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 4096
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data1
+ Type: R_AARCH64_ADR_PREL_PG_HI21
+ Addend: 0x80000001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-adr_prel_pg_hi21.test b/test/old-elf/AArch64/rel-adr_prel_pg_hi21.test
new file mode 100644
index 000000000000..36a20c2f6473
--- /dev/null
+++ b/test/old-elf/AArch64/rel-adr_prel_pg_hi21.test
@@ -0,0 +1,52 @@
+# REQUIRES: arm64
+
+# Check handling of R_AARCH64_ADR_PREL_PG_HI21 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -d -t %t-exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: _start:
+# CHECK-NEXT: 4001b0: 00 00 00 d0 adrp x0, #8192
+# CHECK: SYMBOL TABLE:
+# CHECK: 00402000 g .data 00000004 data1
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000090"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 4096
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data1
+ Type: R_AARCH64_ADR_PREL_PG_HI21
+ Addend: 0
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-bad.test b/test/old-elf/AArch64/rel-bad.test
new file mode 100644
index 000000000000..7d2ed192de56
--- /dev/null
+++ b/test/old-elf/AArch64/rel-bad.test
@@ -0,0 +1,44 @@
+# Check handling of a bad relocation (in this case dynamic in a static object).
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK: Unhandled reference type in file {{.*}}: reference from data1+4 to data1+0 of type 1024 (R_AARCH64_COPY)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x4
+ Symbol: data1
+ Type: R_AARCH64_COPY
+ Addend: 0
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
diff --git a/test/old-elf/AArch64/rel-prel16-overflow.test b/test/old-elf/AArch64/rel-prel16-overflow.test
new file mode 100644
index 000000000000..ea08f9700ee4
--- /dev/null
+++ b/test/old-elf/AArch64/rel-prel16-overflow.test
@@ -0,0 +1,53 @@
+# Check handling of R_AARCH64_PREL16 relocation overflow.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}}: reference from data1+0 to data2+524289 of type 262 (R_AARCH64_PREL16)
+# CHECK: Relocation out of range in file {{.*}}: reference from data2+0 to data1+524289 of type 262 (R_AARCH64_PREL16)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_PREL16
+ Addend: 0x80001
+ - Offset: 0x2
+ Symbol: data1
+ Type: R_AARCH64_PREL16
+ Addend: 0x80001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 2
+ - Name: data2
+ Section: .data
+ Value: 0x2
+ Size: 2
diff --git a/test/old-elf/AArch64/rel-prel16.test b/test/old-elf/AArch64/rel-prel16.test
new file mode 100644
index 000000000000..11e6028e253b
--- /dev/null
+++ b/test/old-elf/AArch64/rel-prel16.test
@@ -0,0 +1,59 @@
+# Check handling of R_AARCH64_PREL16 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 0380ff7f 00000000 ........
+# ^^ data2 - data1 + 0x8001 = 0x8003
+# ^^ data1 - data2 + 0x8001 = 0x7fff
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000002 data1
+# CHECK: 00401062 g .data 00000006 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_PREL16
+ Addend: 0x8001
+ - Offset: 0x2
+ Symbol: data1
+ Type: R_AARCH64_PREL16
+ Addend: 0x8001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 2
+ - Name: data2
+ Section: .data
+ Value: 0x2
+ Size: 2
diff --git a/test/old-elf/AArch64/rel-prel32-overflow.test b/test/old-elf/AArch64/rel-prel32-overflow.test
new file mode 100644
index 000000000000..513adad08efe
--- /dev/null
+++ b/test/old-elf/AArch64/rel-prel32-overflow.test
@@ -0,0 +1,53 @@
+# Check handling of R_AARCH64_PREL32 relocation overflow.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target arm64 -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}}: reference from data1+0 to data2+34359738369 of type 261 (R_AARCH64_PREL32)
+# CHECK: Relocation out of range in file {{.*}}: reference from data2+0 to data1+34359738369 of type 261 (R_AARCH64_PREL32)
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_PREL32
+ Addend: 0x800000001
+ - Offset: 0x4
+ Symbol: data1
+ Type: R_AARCH64_PREL32
+ Addend: 0x800000001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x4
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-prel32.test b/test/old-elf/AArch64/rel-prel32.test
new file mode 100644
index 000000000000..0e178ba97f41
--- /dev/null
+++ b/test/old-elf/AArch64/rel-prel32.test
@@ -0,0 +1,59 @@
+# Check handling of R_AARCH64_PREL32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 05000080 fdffff7f ........
+# ^^ data2 - data1 + 0x80000001 = 0x80000005
+# ^^ data1 - data2 + 0x80000001 = 0x7ffffffd
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000004 data1
+# CHECK: 00401064 g .data 00000004 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_PREL32
+ Addend: 0x80000001
+ - Offset: 0x4
+ Symbol: data1
+ Type: R_AARCH64_PREL32
+ Addend: 0x80000001
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x4
+ Size: 4
diff --git a/test/old-elf/AArch64/rel-prel64.test b/test/old-elf/AArch64/rel-prel64.test
new file mode 100644
index 000000000000..3a3eb8b90fc3
--- /dev/null
+++ b/test/old-elf/AArch64/rel-prel64.test
@@ -0,0 +1,59 @@
+# Check handling of R_AARCH64_PREL64 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401060 09000000 00000080 f9ffffff ffffff7f ................
+# ^^ data2 - data1 + 0x8000000000000001 = 0x8000000000000009
+# ^^ data1 - data2 + 0x8000000000000001 = 0x7ffffffffffffff9
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401060 g .data 00000008 data1
+# CHECK: 00401068 g .data 00000008 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "00000000000000000000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 8
+ Relocations:
+ - Offset: 0x0
+ Symbol: data2
+ Type: R_AARCH64_PREL64
+ Addend: -9223372036854775807
+ - Offset: 0x8
+ Symbol: data1
+ Type: R_AARCH64_PREL64
+ Addend: -9223372036854775807
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Size: 8
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 8
diff --git a/test/old-elf/AMDGPU/hsa.test b/test/old-elf/AMDGPU/hsa.test
new file mode 100644
index 000000000000..4a17ae2223e0
--- /dev/null
+++ b/test/old-elf/AMDGPU/hsa.test
@@ -0,0 +1,53 @@
+# RUN: yaml2obj -format=elf %s > %t.obj
+# RUN: lld -flavor old-gnu -target amdgcn--hsa %t.obj -o %t.exe --noinhibit-exec
+# RUN: llvm-readobj -h -program-headers -s -symbols %t.exe | FileCheck %s
+
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Class: 64-bit (0x2)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: Machine: EM_AMDGPU (0xE0)
+
+
+# CHECK: Section {
+# CHECK: Name: .hsatext
+# CHECK: Type: SHT_PROGBITS (0x1)
+# CHECK: Flags [ (0xC00007
+# CHECK: SHF_ALLOC (0x2)
+# CHECK: SHF_AMDGPU_HSA_AGENT (0x800000)
+# CHECK: SHF_AMDGPU_HSA_CODE (0x400000)
+# CHECK: SHF_EXECINSTR (0x4)
+# CHECK: SHF_WRITE (0x1)
+#
+# CHECK: Symbol {
+# CHECK: Name: kernel
+# CHECK: Value: 0x0
+# CHECK: Binding: Local (0x0)
+# CHECK: Type: AMDGPU_HSA_KERNEL (0xA)
+
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT (0x60000003)
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_AMDGPU
+Sections:
+ - Name: .hsatext
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .note
+ Type: SHT_NOTE
+ AddressAlign: 0x0000000000000001
+ Content: '00'
+Symbols:
+ Local:
+ - Name: kernel
+ Type: STT_GNU_IFUNC
+ Section: .hsatext
+...
diff --git a/test/old-elf/ARM/Inputs/fn.c b/test/old-elf/ARM/Inputs/fn.c
new file mode 100644
index 000000000000..37c897ebb7f2
--- /dev/null
+++ b/test/old-elf/ARM/Inputs/fn.c
@@ -0,0 +1 @@
+int fn() { return 1; }
diff --git a/test/old-elf/ARM/Inputs/libfn.so b/test/old-elf/ARM/Inputs/libfn.so
new file mode 100755
index 000000000000..51934714841b
--- /dev/null
+++ b/test/old-elf/ARM/Inputs/libfn.so
Binary files differ
diff --git a/test/old-elf/ARM/Inputs/libobj.so b/test/old-elf/ARM/Inputs/libobj.so
new file mode 100755
index 000000000000..85b3ae4ca3d1
--- /dev/null
+++ b/test/old-elf/ARM/Inputs/libobj.so
Binary files differ
diff --git a/test/old-elf/ARM/Inputs/obj.c b/test/old-elf/ARM/Inputs/obj.c
new file mode 100644
index 000000000000..fb6a9f13f698
--- /dev/null
+++ b/test/old-elf/ARM/Inputs/obj.c
@@ -0,0 +1,4 @@
+static struct S {
+} s;
+
+struct S *const object = &s;
diff --git a/test/old-elf/ARM/arm-symbols.test b/test/old-elf/ARM/arm-symbols.test
new file mode 100644
index 000000000000..ddf3c80862a5
--- /dev/null
+++ b/test/old-elf/ARM/arm-symbols.test
@@ -0,0 +1,51 @@
+# Check that symbols formed from ARM instructions are valid:
+# 1. Symbol address.
+# 2. Symbol content size.
+# 3. Symbol content.
+
+# RUN: yaml2obj -format=elf %s > %t-a.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-a.o -o %t-a
+# RUN: llvm-readobj -symbols %t-a | FileCheck -check-prefix=SYM-ADDR %s
+# RUN: llvm-readobj -symbols %t-a | FileCheck -check-prefix=SYM-SIZE %s
+# RUN: llvm-objdump -s -t %t-a | FileCheck -check-prefix=SYM-CONTENT %s
+
+# SYM-ADDR: Name: main (1)
+# SYM-ADDR-NEXT: Value: 0x400074
+
+# SYM-SIZE: Name: main (1)
+# SYM-SIZE-NEXT: Value: 0x{{[0-9a-f]+}}
+# SYM-SIZE-NEXT: Size: 28
+
+# SYM-CONTENT: Contents of section .text:
+# SYM-CONTENT-NEXT: 400074 04b02de5 00b08de2 0030a0e3 0300a0e1 ..-......0......
+# SYM-CONTENT-NEXT: 400084 00d04be2 04b09de4 1eff2fe1 ..K......./.
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/defsym.test b/test/old-elf/ARM/defsym.test
new file mode 100644
index 000000000000..7d4fa7fcd4dc
--- /dev/null
+++ b/test/old-elf/ARM/defsym.test
@@ -0,0 +1,50 @@
+# Check that defined symbols are present in the generated executable
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu --defsym=main=fn \
+# RUN: -Bstatic --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck %s
+
+# CHECK: Name: main (1)
+# CHECK-NEXT: Value: 0x400074
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text (0x1)
+# CHECK: Name: fn (6)
+# CHECK-NEXT: Value: 0x400074
+# CHECK-NEXT: Size: {{[0-9]+}}
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text (0x1)
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: fn
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/dynamic-symbols.test b/test/old-elf/ARM/dynamic-symbols.test
new file mode 100644
index 000000000000..13963be8e701
--- /dev/null
+++ b/test/old-elf/ARM/dynamic-symbols.test
@@ -0,0 +1,83 @@
+# Check that proper dynamic symbols are present in the generated executable
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC-NOT: Name: _GLOBAL_OFFSET_TABLE_
+# STATIC-NOT: Name: _DYNAMIC
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Name: _GLOBAL_OFFSET_TABLE_
+# EXEC-DYN-NEXT: Value: 0x401000
+# EXEC-DYN-NEXT: Size: 0
+# EXEC-DYN-NEXT: Binding: Global (0x1)
+# EXEC-DYN-NEXT: Type: Object (0x1)
+# EXEC-DYN-NEXT: Other: 0
+# EXEC-DYN-NEXT: Section: Absolute (0xFFF1)
+# EXEC-DYN: Name: _DYNAMIC
+# EXEC-DYN-NEXT: Value: 0x400130
+# EXEC-DYN-NEXT: Size: 0
+# EXEC-DYN-NEXT: Binding: Global (0x1)
+# EXEC-DYN-NEXT: Type: Object (0x1)
+# EXEC-DYN-NEXT: Other: 0
+# EXEC-DYN-NEXT: Section: Absolute (0xFFF1)
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -shared --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SHARED %s
+
+# SHARED: Name: _GLOBAL_OFFSET_TABLE_
+# SHARED-NEXT: Value: 0x401000
+# SHARED-NEXT: Size: 0
+# SHARED-NEXT: Binding: Global (0x1)
+# SHARED-NEXT: Type: Object (0x1)
+# SHARED-NEXT: Other: 0
+# SHARED-NEXT: Section: Absolute (0xFFF1)
+# SHARED: Name: _DYNAMIC
+# SHARED-NEXT: Value: 0x4000EC
+# SHARED-NEXT: Size: 0
+# SHARED-NEXT: Binding: Global (0x1)
+# SHARED-NEXT: Type: Object (0x1)
+# SHARED-NEXT: Other: 0
+# SHARED-NEXT: Section: Absolute (0xFFF1)
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ - Name: .got
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: 0000
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/entry-point.test b/test/old-elf/ARM/entry-point.test
new file mode 100644
index 000000000000..4cfee4aa6c7b
--- /dev/null
+++ b/test/old-elf/ARM/entry-point.test
@@ -0,0 +1,113 @@
+# 1. Check entry point address for ARM code - should be even.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm.o -o %t-arm
+# RUN: llvm-readobj -file-headers %t-arm | FileCheck -check-prefix=ARM-ENTRY %s
+#
+# ARM-ENTRY: Entry: 0x400074
+
+# 2. Check entry point address for Thumb code - should be odd.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-thm.o -o %t-thm
+# RUN: llvm-readobj -file-headers %t-thm | FileCheck -check-prefix=THM-ENTRY %s
+#
+# THM-ENTRY: Entry: 0x400075
+
+# 3. Check wrong entry point address align for ARM code.
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-arm-wrong.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm-wrong.o -o %t-arm-wrong 2> %t-error
+# FileCheck -check-prefix=ARM-WRONG %s < %t-error
+#
+# ARM-WRONG: Two least bits must be zero for ARM entry point
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B7047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+
+# arm-wrong.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000006
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000002
+...
diff --git a/test/old-elf/ARM/exidx.test b/test/old-elf/ARM/exidx.test
new file mode 100644
index 000000000000..a277cfcd09ae
--- /dev/null
+++ b/test/old-elf/ARM/exidx.test
@@ -0,0 +1,254 @@
+# .ARM.exidx contents checking
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target arm-none-linux-eabi -static -o %t %t.o
+# RUN: llvm-objdump -s -t -section-headers %t | FileCheck %s
+#
+# CHECK: Sections:
+# CHECK: Idx Name Size Address Type
+# CHECK: 2 .ARM.extab 0000000c 00000000004000b4 DATA
+# CHECK: 3 .ARM.exidx 00000018 00000000004000c0
+# CHECK: Contents of section .text:
+# CHECK: 4000a4 1846aff3 00801846 0837bd46 80bd00bf
+# ^
+# 4000b0: bd80 pop {r7, pc}
+# CHECK: Contents of section .ARM.extab:
+# CHECK: 4000b4 01970181 b0b00884 00000000
+# CHECK: Contents of section .ARM.exidx:
+# CHECK: 4000c0 b4ffff7f 08809780 bcffff7f 08809780
+# ^ offset to 400074 (__aeabi_unwind_cpp_pr0)
+# CHECK: 4000d0 c4ffff7f e0ffff7f
+# ^ ^
+# offset to 400094 (_start) handler at 4000B0
+#
+# CHECK: SYMBOL TABLE:
+# CHECK: 004000b4 .ARM.extab 00000000 $d.2
+# CHECK: 004000c0 .ARM.exidx 00000000 $d.1
+# CHECK: 00400074 g F .text 00000010 __aeabi_unwind_cpp_pr0
+# CHECK: 00400094 g F .text 00000020 _start
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B704780B400AF00231846BD465DF8047B704780B582B000AF3B1D1846FFF7FEFF3B1D1846FFF7FEFF18460837BD4680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000002A
+ Symbol: _ZN1AILi1EEC1Ev
+ Type: R_ARM_THM_CALL
+ - Offset: 0x0000000000000032
+ Symbol: _ZN1AILi1EED1Ev
+ Type: R_ARM_THM_CALL
+ - Name: .ARM.extab
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: 01970181B0B0088400000000
+ - Name: .ARM.exidx
+ Type: SHT_ARM_EXIDX
+ Flags: [ SHF_ALLOC, SHF_LINK_ORDER ]
+ Link: .text
+ AddressAlign: 0x0000000000000004
+ Content: '000000000880978010000000088097802000000000000000'
+ - Name: .rel.ARM.exidx
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .ARM.exidx
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: .text
+ Type: R_ARM_PREL31
+ - Offset: 0x0000000000000000
+ Symbol: __aeabi_unwind_cpp_pr0
+ Type: R_ARM_NONE
+ - Offset: 0x0000000000000008
+ Symbol: .text
+ Type: R_ARM_PREL31
+ - Offset: 0x0000000000000010
+ Symbol: .text
+ Type: R_ARM_PREL31
+ - Offset: 0x0000000000000010
+ Symbol: __aeabi_unwind_cpp_pr1
+ Type: R_ARM_NONE
+ - Offset: 0x0000000000000014
+ Symbol: .ARM.extab
+ Type: R_ARM_PREL31
+ - Name: .text._ZN1AILi1EEC2Ev
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B582B000AF78600120FFF7FEFF7B6818460837BD4680BD
+ - Name: .rel.text._ZN1AILi1EEC2Ev
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text._ZN1AILi1EEC2Ev
+ Relocations:
+ - Offset: 0x000000000000000A
+ Symbol: f
+ Type: R_ARM_THM_CALL
+ - Name: .ARM.extab.text._ZN1AILi1EEC2Ev
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_GROUP ]
+ AddressAlign: 0x0000000000000004
+ Content: 01970181B0B0088400000000
+ - Name: .ARM.exidx.text._ZN1AILi1EEC2Ev
+ Type: SHT_ARM_EXIDX
+ Flags: [ SHF_ALLOC, SHF_LINK_ORDER, SHF_GROUP ]
+ Link: .text._ZN1AILi1EEC2Ev
+ AddressAlign: 0x0000000000000004
+ Content: '0000000000000000'
+ - Name: .rel.ARM.exidx.text._ZN1AILi1EEC2Ev
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .ARM.exidx.text._ZN1AILi1EEC2Ev
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: .text._ZN1AILi1EEC2Ev
+ Type: R_ARM_PREL31
+ - Offset: 0x0000000000000000
+ Symbol: __aeabi_unwind_cpp_pr1
+ Type: R_ARM_NONE
+ - Offset: 0x0000000000000004
+ Symbol: .ARM.extab.text._ZN1AILi1EEC2Ev
+ Type: R_ARM_PREL31
+ - Name: .text._ZN1AILi1EED2Ev
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B582B000AF78604FF0FF30FFF7FEFF7B6818460837BD4680BD00BF
+ - Name: .rel.text._ZN1AILi1EED2Ev
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text._ZN1AILi1EED2Ev
+ Relocations:
+ - Offset: 0x000000000000000C
+ Symbol: f
+ Type: R_ARM_THM_CALL
+ - Name: .ARM.extab.text._ZN1AILi1EED2Ev
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_GROUP ]
+ AddressAlign: 0x0000000000000004
+ Content: 01970181B0B0088400000000
+ - Name: .ARM.exidx.text._ZN1AILi1EED2Ev
+ Type: SHT_ARM_EXIDX
+ Flags: [ SHF_ALLOC, SHF_LINK_ORDER, SHF_GROUP ]
+ Link: .text._ZN1AILi1EED2Ev
+ AddressAlign: 0x0000000000000004
+ Content: '0000000000000000'
+ - Name: .rel.ARM.exidx.text._ZN1AILi1EED2Ev
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .ARM.exidx.text._ZN1AILi1EED2Ev
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: .text._ZN1AILi1EED2Ev
+ Type: R_ARM_PREL31
+ - Offset: 0x0000000000000000
+ Symbol: __aeabi_unwind_cpp_pr1
+ Type: R_ARM_NONE
+ - Offset: 0x0000000000000004
+ Symbol: .ARM.extab.text._ZN1AILi1EED2Ev
+ Type: R_ARM_PREL31
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: '$t.1'
+ Section: .text
+ - Name: .ARM.extab
+ Type: STT_SECTION
+ Section: .ARM.extab
+ - Name: .ARM.exidx
+ Type: STT_SECTION
+ Section: .ARM.exidx
+ - Name: '$d.1'
+ Section: .ARM.exidx
+ - Name: '$d.2'
+ Section: .ARM.extab
+ - Name: .text._ZN1AILi1EEC2Ev
+ Type: STT_SECTION
+ Section: .text._ZN1AILi1EEC2Ev
+ - Name: '$t.2'
+ Section: .text._ZN1AILi1EEC2Ev
+ - Name: .ARM.extab.text._ZN1AILi1EEC2Ev
+ Type: STT_SECTION
+ Section: .ARM.extab.text._ZN1AILi1EEC2Ev
+ - Name: '$d.3'
+ Section: .ARM.extab.text._ZN1AILi1EEC2Ev
+ - Name: .ARM.exidx.text._ZN1AILi1EEC2Ev
+ Type: STT_SECTION
+ Section: .ARM.exidx.text._ZN1AILi1EEC2Ev
+ - Name: '$d.4'
+ Section: .ARM.exidx.text._ZN1AILi1EEC2Ev
+ - Name: .text._ZN1AILi1EED2Ev
+ Type: STT_SECTION
+ Section: .text._ZN1AILi1EED2Ev
+ - Name: '$t.3'
+ Section: .text._ZN1AILi1EED2Ev
+ - Name: .ARM.extab.text._ZN1AILi1EED2Ev
+ Type: STT_SECTION
+ Section: .ARM.extab.text._ZN1AILi1EED2Ev
+ - Name: '$d.5'
+ Section: .ARM.extab.text._ZN1AILi1EED2Ev
+ - Name: .ARM.exidx.text._ZN1AILi1EED2Ev
+ Type: STT_SECTION
+ Section: .ARM.exidx.text._ZN1AILi1EED2Ev
+ - Name: '$d.6'
+ Section: .ARM.exidx.text._ZN1AILi1EED2Ev
+ Global:
+ - Name: __aeabi_unwind_cpp_pr0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x0000000000000010
+ - Name: __aeabi_unwind_cpp_pr1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000011
+ Size: 0x0000000000000010
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000021
+ Size: 0x000000000000001E
+ Weak:
+ - Name: _ZN1AILi1EEC1Ev
+ Type: STT_FUNC
+ Section: .text._ZN1AILi1EEC2Ev
+ Value: 0x0000000000000001
+ Size: 0x0000000000000018
+ - Name: _ZN1AILi1EED1Ev
+ Type: STT_FUNC
+ Section: .text._ZN1AILi1EED2Ev
+ Value: 0x0000000000000001
+ Size: 0x000000000000001A
+ - Name: _ZN1AILi1EEC2Ev
+ Type: STT_FUNC
+ Section: .text._ZN1AILi1EEC2Ev
+ Value: 0x0000000000000001
+ Size: 0x0000000000000018
+ - Name: f
+ - Name: _ZN1AILi1EED2Ev
+ Type: STT_FUNC
+ Section: .text._ZN1AILi1EED2Ev
+ Value: 0x0000000000000001
+ Size: 0x000000000000001A
+...
diff --git a/test/old-elf/ARM/header-flags.test b/test/old-elf/ARM/header-flags.test
new file mode 100644
index 000000000000..735d65225216
--- /dev/null
+++ b/test/old-elf/ARM/header-flags.test
@@ -0,0 +1,57 @@
+# Various checks for header flags.
+
+# 1. Check header flags for statically linked executable with default options.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t.o -o %t
+# RUN: llvm-readobj -file-headers %t | FileCheck -check-prefix=STATIC-DEF %s
+#
+# STATIC-DEF: Flags {{.}} (0x5000400)
+# ABI version 5 + hard float ^^
+
+# 2. Check header flags for dynamically linked executable with default options.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t.o -o %t
+# RUN: llvm-readobj -file-headers %t | FileCheck -check-prefix=EXEC-DYN-DEF %s
+#
+# EXEC-DYN-DEF: Flags {{.}} (0x5000400)
+# ABI version 5 + hard float ^^
+
+# 3. Check header flags for shared object with default options.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -shared \
+# RUN: --noinhibit-exec %t.o -o %t
+# RUN: llvm-readobj -file-headers %t | FileCheck -check-prefix=SHARED-DEF %s
+#
+# SHARED-DEF: Flags {{.}} (0x5000400)
+# ABI version 5 + hard float ^^
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/mapping-code-model.test b/test/old-elf/ARM/mapping-code-model.test
new file mode 100644
index 000000000000..affa10b464f8
--- /dev/null
+++ b/test/old-elf/ARM/mapping-code-model.test
@@ -0,0 +1,160 @@
+# Check that mapping symbols are treated as ARM or Thumb code properly.
+#
+# 1. ARM <=> Thumb generates both veneers.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-a-arm.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu --defsym=main=f_a \
+# RUN: -Bstatic --noinhibit-exec %t-a-arm.o %t-t-thm.o -o %t
+# RUN: llvm-objdump -t %t | FileCheck -check-prefix=INTER %s
+
+# INTER: SYMBOL TABLE:
+# INTER: {{[0-9a-f]+}} l F .text {{[0-9a-f]+}} __f_t_from_arm
+# INTER: {{[0-9a-f]+}} l F .text {{[0-9a-f]+}} __f_a_from_thumb
+
+# 2. Thumb <=> Thumb doesn't generate veneers.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-a-thm.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu --defsym=main=f_t \
+# RUN: -Bstatic --noinhibit-exec %t-t-thm.o %t-a-thm.o -o %t
+# RUN: llvm-objdump -t %t | FileCheck -check-prefix=THUMB %s
+
+# THUMB: SYMBOL TABLE:
+# THUMB-NOT: {{[0-9a-f]+}} l F .text {{[0-9a-f]+}} __f_t_from_thumb
+# THUMB-NOT: {{[0-9a-f]+}} l F .text {{[0-9a-f]+}} __f_a_from_thumb
+
+# f-a-arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEBFEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: f_t
+ Type: R_ARM_CALL
+ - Offset: 0x000000000000000C
+ Symbol: f_t
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$a'
+ Section: .text
+ Size: 0x0000000000000002
+ - Name: '$a.f_a'
+ Section: .text
+ Value: 0x0000000000000002
+ Global:
+ - Name: f_a
+ Type: STT_FUNC
+ Section: .text
+ - Name: f_t
+
+# f-a-thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B7047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$t'
+ Section: .text
+ Size: 0x0000000000000002
+ - Name: '$t.f_a'
+ Section: .text
+ Value: 0x0000000000000002
+ Global:
+ - Name: f_a
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+
+# f-t-thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B500AFFFF7FEFFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: f_a
+ Type: R_ARM_THM_CALL
+ - Offset: 0x0000000000000008
+ Symbol: f_a
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$t'
+ Section: .text
+ Size: 0x0000000000000002
+ - Name: '$t.f_t'
+ Section: .text
+ Value: 0x0000000000000002
+ Global:
+ - Name: f_t
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: f_a
+...
diff --git a/test/old-elf/ARM/mapping-symbols.test b/test/old-elf/ARM/mapping-symbols.test
new file mode 100644
index 000000000000..c6a4b7afc50b
--- /dev/null
+++ b/test/old-elf/ARM/mapping-symbols.test
@@ -0,0 +1,122 @@
+# Check that mapping symbols have zero size, local binding and none type.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-a.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-t.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-a.o %t-t.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck %s
+
+# CHECK: Name: $a (1)
+# CHECK-NEXT: Value: 0x{{[0-9a-f]+}}
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+#
+# CHECK: Name: $t (9)
+# CHECK-NEXT: Value: 0x{{[0-9a-f]+}}
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+#
+# CHECK: Name: $d (24)
+# CHECK-NEXT: Value: 0x{{[0-9a-f]+}}
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEB0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: _Z1fv
+ Type: R_ARM_CALL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$a'
+ Section: .text
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ - Name: _Z1fv
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200031B681846BD465DF8047B7047
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: _ZL1i
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x0000000000000008
+ Symbol: _ZL1i
+ Type: R_ARM_THM_MOVT_ABS
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+Symbols:
+ Local:
+ - Name: _ZL1i
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: '$d'
+ Section: .bss
+ - Name: '$t'
+ Section: .text
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+...
diff --git a/test/old-elf/ARM/missing-symbol.test b/test/old-elf/ARM/missing-symbol.test
new file mode 100644
index 000000000000..a0d3dd51e57b
--- /dev/null
+++ b/test/old-elf/ARM/missing-symbol.test
@@ -0,0 +1,38 @@
+# Check that _MISSING_SYMBOL_ symbol is not resolved
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2>&1 | FileCheck %s
+
+# CHECK: Undefined symbol: {{.*}}: _MISSING_SYMBOL_
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: _MISSING_SYMBOL_
+...
diff --git a/test/old-elf/ARM/plt-dynamic.test b/test/old-elf/ARM/plt-dynamic.test
new file mode 100644
index 000000000000..905f628edb49
--- /dev/null
+++ b/test/old-elf/ARM/plt-dynamic.test
@@ -0,0 +1,200 @@
+# Check that PLT entries are properly generated when link dynamically.
+#
+# 1. ARM code generates PLT entries.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-arm.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=ARM %s
+
+# ARM: Contents of section .rel.plt:
+# ARM-NEXT: 400134 0c104000 16010000
+# GOT addr = 0x40100c ^^
+# ARM-NEXT: Contents of section .plt:
+# ARM-NEXT: 40013c 04e02de5 04e09fe5 0ee08fe0 00f0bee5
+# ^ -- PLT0 --
+# ARM-NEXT: 40014c bc0e0000 00c68fe2 00ca8ce2 b4febce5
+# -- ^ ^ -- PLT_fn -- ^
+# ARM-NEXT: Contents of section .text:
+# ARM-NEXT: 40015c {{[0-9a-f]+}} {{[0-9a-f]+}} f9ffffea
+# b PLT_fn ^^
+# ARM: Contents of section .got.plt:
+# ARM-NEXT: 401000 00000000 00000000 00000000 3c014000
+# PLT0 addr = 0x40013c ^^
+
+# 2. Thumb code generates PLT entries with veneers.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-thm.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM %s
+
+# THM: Contents of section .rel.plt:
+# THM-NEXT: 400134 0c104000 16010000
+# GOT addr = 0x40100c ^^
+# THM-NEXT: Contents of section .plt:
+# THM-NEXT: 40013c 04e02de5 04e09fe5 0ee08fe0 00f0bee5
+# ^ -- PLT0 --
+# THM-NEXT: 40014c bc0e0000 78470000 00c68fe2 00ca8ce2
+# -- ^ veneer ^ ^ -- PLT_fn --
+# THM-NEXT: 40015c b0febce5
+# -- ^
+# THM: Contents of section .text:
+# THM-NEXT: 400160 {{[0-9a-f]+}} fff7f4bf
+# b PLT_fn ^^
+
+# 3. Thumb code generates PLT entries without veneers when bl->blx is done.
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-thm.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-BLX %s
+
+# THM-BLX: Contents of section .rel.plt:
+# THM-BLX-NEXT: 400134 0c104000 16010000
+# GOT addr = 0x40100c ^^
+# THM-BLX-NEXT: Contents of section .plt:
+# THM-BLX-NEXT: 40013c 04e02de5 04e09fe5 0ee08fe0 00f0bee5
+# ^ -- PLT0 --
+# THM-BLX-NEXT: 40014c bc0e0000 00c68fe2 00ca8ce2 b4febce5
+# -- ^ ^ -- PLT_fn -- ^
+# THM-BLX: Contents of section .text:
+# THM-BLX-NEXT: 40015c {{[0-9a-f]+}} fff7f6ef
+# blx PLT_fn ^^
+
+# Generation of mapping symbols.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-arm.o -lfn -L%p/Inputs -o %t-arm
+# RUN: llvm-readobj -symbols %t-arm | FileCheck -check-prefix=ARM-MAPPING %s
+
+# ARM-MAPPING: Name: {{[$]?[a]?[.]?}}__PLT0
+# ARM-MAPPING: Name: {{[$]?[d]?[.]?}}__PLT0_d
+# ARM-MAPPING: Name: {{[$]?[a]?[.]?}}__plt_fn
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: --noinhibit-exec %t-thm.o -lfn -L%p/Inputs -o %t-thm
+# RUN: llvm-readobj -symbols %t-thm | FileCheck -check-prefix=THM-MAPPING %s
+
+# THM-MAPPING: Name: {{[$]?[a]?[.]?}}__PLT0
+# THM-MAPPING: Name: {{[$]?[d]?[.]?}}__PLT0_d
+# THM-MAPPING: Name: {{[$]?[t]?[.]?}}__plt_from_thumb_fn
+# THM-MAPPING: Name: {{[$]?[a]?[.]?}}__plt_fn
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: fn
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ - Name: fn
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: fn
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: fn
+
+# thm-c.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B500AFFFF7FEFF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: fn
+ Type: R_ARM_THM_CALL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: fn
+...
diff --git a/test/old-elf/ARM/plt-ifunc-interwork.test b/test/old-elf/ARM/plt-ifunc-interwork.test
new file mode 100644
index 000000000000..29d8282edf26
--- /dev/null
+++ b/test/old-elf/ARM/plt-ifunc-interwork.test
@@ -0,0 +1,396 @@
+# Check that PLT entries are properly generated for cases when
+# referenced from both ARM and Thumb code.
+#
+# 1. ARM code generates PLT without transition veneer.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-f1-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-arm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=ARM-ONE %s
+
+# ARM-ONE: Contents of section .plt:
+# ARM-ONE-NEXT: 40007c 00c68fe2 00ca8ce2 7cffbce5
+# ^ regular veneer ^
+# Next line shows that .plt section ends.
+# ARM-ONE-NEXT: Contents of section .text:
+
+# 2. Thumb code generates PLT with transition veneer.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-f1-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-thm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-ONE %s
+
+# THM-ONE: Contents of section .plt:
+# THM-ONE-NEXT: 40007c 78470000 00c68fe2 00ca8ce2 78ffbce5
+# bx pc ^^ ^ regular veneer ^
+# Next line shows that .plt section ends.
+# THM-ONE-NEXT: Contents of section .text:
+
+# 3. ARM + Thumb code generate same single PLT with transition veneer.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-f1-arm.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-f1-thm-for-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-arm.o %t-f1-thm-for-arm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-ONE %s
+
+# 4. Thumb + ARM code generate same single PLT with transition veneer.
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-f1-thm-for-arm.o
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-f1-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-thm-for-arm.o %t-f1-arm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-ONE %s
+
+# 5. ARM + ARM code generate two PLTs without transition veneers.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-f1-arm.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-f2-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-arm.o %t-f2-arm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=ARM-TWO %s
+
+# ARM-TWO: Contents of section .plt:
+# ARM-TWO-NEXT: 400084 00c68fe2 00ca8ce2 74ffbce5 00c68fe2
+# ^ regular veneer 1 ^ ^ --
+# ARM-TWO-NEXT: 400094 00ca8ce2 6cffbce5
+# --- regular veneer 2 ^
+# Next line shows that .plt section ends.
+# ARM-TWO-NEXT: Contents of section .text:
+
+# 6. ARM + Thumb code generate two PLTs without and with transition veneer.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-f1-arm.o
+# RUN: yaml2obj -format=elf -docnum 5 %s > %t-f2-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-arm.o %t-f2-thm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=ARM-THM-TWO %s
+
+# ARM-THM-TWO: Contents of section .plt:
+# ARM-THM-TWO-NEXT: 400084 00c68fe2 00ca8ce2 74ffbce5 78470000
+# ^ regular veneer 1 ^ ^^ bx pc 2
+# ARM-THM-TWO-NEXT: 400094 00c68fe2 00ca8ce2 68ffbce5
+# ^ regular veneer 2 ^
+# Next line shows that .plt section ends.
+# ARM-THM-TWO-NEXT: Contents of section .text:
+
+# 7. Thumb + ARM code generate two PLTs with and without transition veneer.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-f1-thm.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-f2-arm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-thm.o %t-f2-arm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-ARM-TWO %s
+
+# THM-ARM-TWO: Contents of section .plt:
+# THM-ARM-TWO-NEXT: 400084 78470000 00c68fe2 00ca8ce2 70ffbce
+# bx pc 1 ^^ ^ regular veneer 1 ^
+# THM-ARM-TWO-NEXT: 400094 00c68fe2 00ca8ce2 68ffbce5
+# ^ regular veneer 2 ^
+# Next line shows that .plt section ends.
+# THM-ARM-TWO-NEXT: Contents of section .text:
+
+# 8. Thumb + Thumb code generate two PLTs with transition veneers.
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-f1-thm.o
+# RUN: yaml2obj -format=elf -docnum 5 %s > %t-f2-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-thm.o %t-f2-thm.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-TWO %s
+
+# THM-TWO: Contents of section .plt:
+# THM-TWO-NEXT: 400084 78470000 00c68fe2 00ca8ce2 70ffbce5
+# bx pc 1 ^^ ^ regular veneer 1 ^
+# THM-TWO-NEXT: 400094 78470000 00c68fe2 00ca8ce2 64ffbce5
+# bx pc 2 ^^ ^ regular veneer 2 ^
+# Next line shows that .plt section ends.
+# THM-TWO-NEXT: Contents of section .text:
+
+# 9. Thumb code generates PLT without transition veneer when bl->blx is done.
+# RUN: yaml2obj -format=elf -docnum 6 %s > %t-f1-thm-c.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-f1-thm-c.o -o %t
+# RUN: llvm-objdump -s %t | FileCheck -check-prefix=THM-BL %s
+
+# THM-BL: Contents of section .plt:
+# THM-BL-NEXT: 40007c 00c68fe2 00ca8ce2 7cffbce5
+# ^ regular veneer ^
+# Next line shows that .plt section ends.
+# THM-BL-NEXT: Contents of section .text:
+
+# f1-arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE2003000E3003040E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: main
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x000000000000000C
+ Symbol: main
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x0000000000000028
+ Symbol: f1
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f1
+ Type: STT_GNU_IFUNC
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+
+# f1-thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200031846BD465DF8047B704700BF80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: main
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x0000000000000008
+ Symbol: main
+ Type: R_ARM_THM_MOVT_ABS
+ - Offset: 0x000000000000001C
+ Symbol: f1
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f1
+ Type: STT_GNU_IFUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000019
+
+# f1-thm-for-arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: f1
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: f1
+
+# f2-arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE2003000E3003040E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: f
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x000000000000000C
+ Symbol: f
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x0000000000000028
+ Symbol: f2
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f2
+ Type: STT_GNU_IFUNC
+ Section: .text
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+
+# f2-thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200031846BD465DF8047B704700BF80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: f
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x0000000000000008
+ Symbol: f
+ Type: R_ARM_THM_MOVT_ABS
+ - Offset: 0x000000000000001C
+ Symbol: f2
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f2
+ Type: STT_GNU_IFUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000019
+
+# f1-thm-c.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200031846BD465DF8047B704700BF80B500AFFFF7FEFF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: main
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x0000000000000008
+ Symbol: main
+ Type: R_ARM_THM_MOVT_ABS
+ - Offset: 0x000000000000001C
+ Symbol: f1
+ Type: R_ARM_THM_CALL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f1
+ Type: STT_GNU_IFUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000019
+...
diff --git a/test/old-elf/ARM/plt-ifunc-mapping.test b/test/old-elf/ARM/plt-ifunc-mapping.test
new file mode 100644
index 000000000000..8c6d23aec084
--- /dev/null
+++ b/test/old-elf/ARM/plt-ifunc-mapping.test
@@ -0,0 +1,109 @@
+# Check that mapping symbols are properly generated for IFUNC PLT entries.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck %s
+
+# CHECK: Name: {{[$]?[a]?[.]?}}__plt_ifunc_f1
+# CHECK: Name: {{[$]?[t]?[.]?}}__plt_from_thumb_ifunc_f2
+# CHECK: Name: {{[$]?[a]?[.]?}}__plt_ifunc_f2
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE2003000E3003040E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: main
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x000000000000000C
+ Symbol: main
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x0000000000000028
+ Symbol: f1
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f1
+ Type: STT_GNU_IFUNC
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200031846BD465DF8047B704700BF80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: f
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x0000000000000008
+ Symbol: f
+ Type: R_ARM_THM_MOVT_ABS
+ - Offset: 0x000000000000001C
+ Symbol: f2
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f2
+ Type: STT_GNU_IFUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000019
+...
diff --git a/test/old-elf/ARM/rel-abs32.test b/test/old-elf/ARM/rel-abs32.test
new file mode 100644
index 000000000000..7dcf632f53d3
--- /dev/null
+++ b/test/old-elf/ARM/rel-abs32.test
@@ -0,0 +1,58 @@
+# Check handling of R_ARM_ABS32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401000 84004000
+# data = 0x400084 ^^
+# data main addr content
+# 0x400084 = 0x400074 + 0x10
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
+# CHECK: 00401000 g .data 00000004 data
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '10000000'
+ - Name: .rel.data
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: main
+ Type: R_ARM_ABS32
+ Addend: 0
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000001C
+ - Name: data
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/ARM/rel-arm-call.test b/test/old-elf/ARM/rel-arm-call.test
new file mode 100644
index 000000000000..64b789204286
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-call.test
@@ -0,0 +1,112 @@
+# Check handling of R_ARM_CALL relocation.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400084 1eff2fe1 00482de9 04b08de2 f7ffffeb
+# offset = -0x24 ^^
+# call site offset PC(arm) _Z1fv addr
+# 0x400090 + (-0x24) + 0x8 = 0x400074
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# CHECK: 00400088 g F .text {{[0-9a-f]+}} main
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_CALL)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE200D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEB0030A0E30300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000001C
+ Symbol: _Z1fv
+ Type: R_ARM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000014
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000014
+ Size: 0x0000000000000018
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE200D04BE204B09DE41EFF2FE100482DE904B08DE2000080EB0030A0E30300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000001C
+ Symbol: _Z1fv
+ Type: R_ARM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000014
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000014
+ Size: 0x0000000000000018
+...
diff --git a/test/old-elf/ARM/rel-arm-jump24-veneer-b.test b/test/old-elf/ARM/rel-arm-jump24-veneer-b.test
new file mode 100644
index 000000000000..76e9523dbbe7
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-jump24-veneer-b.test
@@ -0,0 +1,122 @@
+# Check veneer generation for R_ARM_JUMP24 relocation (B instruction call).
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC: Contents of section .text:
+# STATIC: 400074 010000ea
+# Call from main:
+# offset = 0x4 ^^
+# call site offset PC(arm) ___Z1fv_from_arm addr
+# 0x400074 + 0x4 + 0x8 = 0x400080
+#
+# Code of the veneer:
+# STATIC: {{[0-9a-f]+}} {{[0-9a-f]+}} 04f01fe5
+# STATIC: 400084 79004000
+# ^^ call addr = 0x400079
+# call addr _Z1fv addr Thumb mode
+# 0x400079 = 0x400078 | 0x1
+#
+# STATIC: SYMBOL TABLE:
+# STATIC: 00400080 l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
+# STATIC: 00400074 g F .text {{[0-9a-f]+}} main
+# STATIC: 00400078 g F .text {{[0-9a-f]+}} _Z1fv
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Contents of section .text:
+# EXEC-DYN: 400114 010000ea
+# Call from main:
+# offset = 0x4 ^^
+# call site offset PC(arm) ___Z1fv_from_arm addr
+# 0x400114 + 0x4 + 0x8 = 0x400120
+#
+# Code of the veneer:
+# EXEC-DYN: {{[0-9a-f]+}} {{[0-9a-f]+}} 04f01fe5
+# EXEC-DYN: 400124 19014000
+# call addr = 0x400119 ^^
+# call addr _Z1fv addr Thumb mode
+# 0x400119 = 0x400118 | 0x1
+#
+# EXEC-DYN: SYMBOL TABLE:
+# EXEC-DYN: 00400120 l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
+# EXEC-DYN: 00400114 g F .text {{[0-9a-f]+}} main
+# EXEC-DYN: 00400118 g F .text {{[0-9a-f]+}} _Z1fv
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FEFFFFEA
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: _Z1fv
+ Type: R_ARM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ - Name: _Z1fv
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 4FF0000318467047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+...
diff --git a/test/old-elf/ARM/rel-arm-jump24-veneer-bl.test b/test/old-elf/ARM/rel-arm-jump24-veneer-bl.test
new file mode 100644
index 000000000000..300355fbb11c
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-jump24-veneer-bl.test
@@ -0,0 +1,120 @@
+# Check veneer generation for R_ARM_JUMP24 relocation (BL<c> instruction call).
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC: Contents of section .text:
+# STATIC: 400084 0400000b
+# Call from main:
+# offset = 0x10 ^^
+# call site offset PC(arm) ___Z1fv_from_arm addr
+# 0x400084 + 0x10 + 0x8 = 0x40009c
+#
+# Code of the veneer:
+# STATIC: 400094 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 95004000
+# call addr = 0x400095 ^^
+# call addr _Z1fv addr Thumb mode
+# 0x400095 = 0x400094 | 0x1
+#
+# STATIC: SYMBOL TABLE:
+# STATIC: 0040009c l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
+# STATIC: 00400074 g F .text {{[0-9a-f]+}} main
+# STATIC: 00400094 g F .text {{[0-9a-f]+}} _Z1fv
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Contents of section .text:
+# EXEC-DYN: 400124 0400000b
+# Call from main:
+# offset = 0x10 ^^
+# call site offset PC(arm) ___Z1fv_from_arm addr
+# 0x400124 + 0x10 + 0x8 = 0x40013c
+#
+# Code of the veneer:
+# EXEC-DYN: 400134 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 35014000
+# call addr = 0x400135 ^^
+# call addr _Z1fv addr Thumb mode
+# 0x400135 = 0x400134 | 0x1
+#
+# EXEC-DYN: SYMBOL TABLE:
+# EXEC-DYN: 0040013c l F .text {{[0-9a-f]+}} ___Z1fv_from_arm
+# EXEC-DYN: 00400114 g F .text {{[0-9a-f]+}} main
+# EXEC-DYN: 00400134 g F .text {{[0-9a-f]+}} _Z1fv
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE20030A0E3000053E3FEFFFF0B0030A0E30300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000010
+ Symbol: _Z1fv
+ Type: R_ARM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ - Name: _Z1fv
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 4FF0000318467047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+...
diff --git a/test/old-elf/ARM/rel-arm-jump24.test b/test/old-elf/ARM/rel-arm-jump24.test
new file mode 100644
index 000000000000..c0d8ccc8d386
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-jump24.test
@@ -0,0 +1,108 @@
+# Check handling of R_ARM_JUMP24 relocation.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400094 04b08de2 f5ffffea 0030a0e1 0300a0e1
+# offset = -0x2C ^^
+# call site offset PC(arm) _Z1fv addr
+# 0x400098 + (-0x2C) + 0x8 = 0x400074
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# CHECK: 00400090 g F .text {{[0-9a-f]+}} main
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_JUMP24)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000024
+ Symbol: _Z1fv
+ Type: R_ARM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000001C
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2000080EA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000024
+ Symbol: _Z1fv
+ Type: R_ARM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000001C
+...
diff --git a/test/old-elf/ARM/rel-arm-mov.test b/test/old-elf/ARM/rel-arm-mov.test
new file mode 100644
index 000000000000..b492cc259060
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-mov.test
@@ -0,0 +1,64 @@
+# Check handling of R_ARM_MOVW_ABS_NC and R_ARM_MOVT_ABS relocation pair.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400074 04b02de5 00b08de2 003001e3 403040e3
+# addrL = 0x1000 ^^
+# addrH = 0x40 ^^
+# addrH addrL _ZL5data1 addr
+# (0x40 << 16) + 0x1000 = 0x401000
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401000 l .bss 00000004 _ZL5data1
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE2003000E3003040E30A20A0E3002083E50030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: _ZL5data1
+ Type: R_ARM_MOVW_ABS_NC
+ Addend: 0
+ - Offset: 0x000000000000000C
+ Symbol: _ZL5data1
+ Type: R_ARM_MOVT_ABS
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+Symbols:
+ Local:
+ - Name: _ZL5data1
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/rel-arm-prel31.test b/test/old-elf/ARM/rel-arm-prel31.test
new file mode 100644
index 000000000000..b07d5dd9fd75
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-prel31.test
@@ -0,0 +1,90 @@
+# Check handling of R_ARM_PREL31 relocation.
+# RUN: yaml2obj -format=elf -docnum=1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec --defsym=main=__gxx_personality_v0 %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .ARM.extab:
+# CHECK: 4000a4 b1fffe7f
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400054 g F .text {{[0-9a-f]+}} __gxx_personality_v0
+
+# RUN: yaml2obj -format=elf -docnum=2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec --defsym=main=__gxx_personality_v0 %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_PREL31)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .ARM.extab
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x4
+ Content: 0000FF7F84019701B0B0B008FFFF01080E2432003A040000
+ - Name: .rel.ARM.extab
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x4
+ Info: .ARM.extab
+ Relocations:
+ - Offset: 0
+ Symbol: __gxx_personality_v0
+ Type: R_ARM_PREL31
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Content: 80B400AF00231846BD465DF8047B704780B582B000AF3B1D1846FFF7FEFFFFF7FEFFFFF7FEFF0420FFF7FEFF0346184601230360002240F20001C0F20001FFF7FEFF3B1D1846FFF7FEFFFFF7FEFF00BF
+Symbols:
+ Local:
+ Global:
+ - Name: __gxx_personality_v0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .ARM.extab
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x4
+ Content: 0000004084019701B0B0B008FFFF01080E2432003A040000
+ - Name: .rel.ARM.extab
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x4
+ Info: .ARM.extab
+ Relocations:
+ - Offset: 0
+ Symbol: __gxx_personality_v0
+ Type: R_ARM_PREL31
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Content: 80B400AF00231846BD465DF8047B704780B582B000AF3B1D1846FFF7FEFFFFF7FEFFFFF7FEFF0420FFF7FEFF0346184601230360002240F20001C0F20001FFF7FEFF3B1D1846FFF7FEFFFFF7FEFF00BF
+Symbols:
+ Local:
+ Global:
+ - Name: __gxx_personality_v0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1
+...
diff --git a/test/old-elf/ARM/rel-arm-target1.test b/test/old-elf/ARM/rel-arm-target1.test
new file mode 100644
index 000000000000..064c68661875
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-target1.test
@@ -0,0 +1,114 @@
+# Check handling of R_ARM_TARGET1 relocation.
+#
+# 1. R_ARM_TARGET1 is equal to R_ARM_ABS32
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-abs32.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec --target1-abs %t-abs32.o -o %t-abs32
+# RUN: llvm-objdump -s -t %t-abs32 | FileCheck -check-prefix=CHECK-ABS32 %s
+#
+# CHECK-ABS32: Contents of section .data:
+# CHECK-ABS32-NEXT: 401000 84004000
+# CHECK-ABS32: SYMBOL TABLE:
+# CHECK-ABS32: 00400074 g F .text {{[0-9a-f]+}} main
+# CHECK-ABS32: 00401000 g .data 00000004 data
+#
+# 2. R_ARM_TARGET1 is equal to R_ARM_REL32
+# Check handling of R_ARM_REL32 relocation.
+# RUN: yaml2obj -format=elf %s -docnum 2 > %t-rel32.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec --target1-rel %t-rel32.o -o %t-rel32
+# RUN: llvm-objdump -s -t %t-rel32 | FileCheck -check-prefix=CHECK-REL32 %s
+#
+# CHECK-REL32: Contents of section .text:
+# CHECK-REL32-NEXT: 400074 {{[0-9a-f]+}} 880fff00
+# CHECK-REL32: SYMBOL TABLE:
+# CHECK-REL32: 00400074 g F .text {{[0-9a-f]+}} main
+# CHECK-REL32: 00401000 g .bss {{[0-9a-f]+}} _myref
+
+# abs32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20030A0E30300A0E100D04BE204B09DE41EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '10000000'
+ - Name: .rel.data
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: main
+ Type: R_ARM_TARGET1
+ Addend: 0
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000001C
+ - Name: data
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000004
+# rel32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF0000FF0000231846BD465DF8047B7047
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: _myref
+ Type: R_ARM_TARGET1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Global:
+ - Name: _myref
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x0000000000000014
+...
diff --git a/test/old-elf/ARM/rel-arm-thm-interwork.test b/test/old-elf/ARM/rel-arm-thm-interwork.test
new file mode 100644
index 000000000000..3e0e30a614ee
--- /dev/null
+++ b/test/old-elf/ARM/rel-arm-thm-interwork.test
@@ -0,0 +1,121 @@
+# Check ARM <=> Thumb interwork.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+
+# Check R_ARM_CALL veneer to call Thumb code
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=ARM-CALL %s
+
+# ARM-CALL: Contents of section .text:
+# ARM-CALL: 400074 00482de9 04b08de2 000000fa 0088bde8
+# offset = 0x0 ^^
+# call site offset PC(arm) _Z2f2v addr
+# 0x40007C + 0x0 + 0x8 = 0x400084
+# ARM-CALL: SYMBOL TABLE:
+# ARM-CALL: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# ARM-CALL: 00400084 g F .text {{[0-9a-f]+}} _Z2f2v
+# ARM-CALL: 00400090 g F .text {{[0-9a-f]+}} main
+
+# Check R_ARM_THM_CALL veneer to call ARM code
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=THM-CALL %s
+
+# THM-CALL: Contents of section .text:
+# THM-CALL: 400094 00bffff7 eeef0023 184680bd
+# offset = -0x24 ^^
+# call site aligned = Align(0x400096, 4) = 0x400094
+# call site aligned offset PC(thm) _Z1fv addr
+# 0x400094 + (-0x24) + 0x4 = 0x400074
+# THM-CALL: SYMBOL TABLE:
+# THM-CALL: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# THM-CALL: 00400084 g F .text {{[0-9a-f]+}} _Z2f2v
+# THM-CALL: 00400090 g F .text {{[0-9a-f]+}} main
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEB0088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: _Z2f2v
+ Type: R_ARM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000010
+ - Name: _Z2f2v
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AFBD465DF8047B704780B500AF00BFFFF7FEFF0023184680BD
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000012
+ Symbol: _Z1fv
+ Type: R_ARM_THM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z2f2v
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x000000000000000C
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000D
+ Size: 0x0000000000000010
+ - Name: _Z1fv
+...
diff --git a/test/old-elf/ARM/rel-base-prel.test b/test/old-elf/ARM/rel-base-prel.test
new file mode 100644
index 000000000000..054ce58ff7b8
--- /dev/null
+++ b/test/old-elf/ARM/rel-base-prel.test
@@ -0,0 +1,61 @@
+# Check handling of R_ARM_BASE_PREL relocation.
+# It only works for _GLOBAL_OFFSET_TABLE_ symbol, and returns error
+# for other cases.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401004 fcffffff
+# offset = -0x4 ^^
+# addr site offset _GOT_
+# 0x401004 + (-0x4) = 0x401000
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401000 g *ABS* {{[0-9a-f]+}} _GLOBAL_OFFSET_TABLE_
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B7047
+ - Name: .got
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '00000000'
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '00000000'
+ - Name: .rel.data
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: _GLOBAL_OFFSET_TABLE_
+ Type: R_ARM_BASE_PREL
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: _GLOBAL_OFFSET_TABLE_
+...
diff --git a/test/old-elf/ARM/rel-copy.test b/test/old-elf/ARM/rel-copy.test
new file mode 100644
index 000000000000..f181f72a2192
--- /dev/null
+++ b/test/old-elf/ARM/rel-copy.test
@@ -0,0 +1,60 @@
+# Check handling of R_ARM_COPY relocation.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-o.o -lobj -L%p/Inputs -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+# RUN: llvm-readobj -relocations %t | FileCheck -check-prefix=READOBJ %s
+
+# CHECK: Contents of section .rel.dyn:
+# CHECK-NEXT: 400138 00104000 14010000
+# addr = 0x401000 ^^ ^^ rel_type = 0x14 => R_ARM_COPY
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401000 g .bss 00000004 object
+#
+# READOBJ: 0x401000 R_ARM_COPY object
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B483B000AF40F20003C0F200031B687B60002318460C37BD465DF8047B7047
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000006
+ Symbol: object
+ Type: R_ARM_THM_MOVW_ABS_NC
+ - Offset: 0x000000000000000A
+ Symbol: object
+ Type: R_ARM_THM_MOVT_ABS
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$t'
+ Section: .text
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: object
+...
diff --git a/test/old-elf/ARM/rel-glob-dat.test b/test/old-elf/ARM/rel-glob-dat.test
new file mode 100644
index 000000000000..34f50c5b0e3d
--- /dev/null
+++ b/test/old-elf/ARM/rel-glob-dat.test
@@ -0,0 +1,57 @@
+# Check handling of R_ARM_GLOB_DAT relocation.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -shared \
+# RUN: --noinhibit-exec %t-o.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-readobj -relocations %t | FileCheck %s
+
+# CHECK: 0x401000 R_ARM_GLOB_DAT fn
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE208D04DE224209FE502208FE020309FE5033092E708300BE508301BE533FF2FE10030A0E10300A0E104D04BE20088BDE82000000000000000
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000038
+ Symbol: _GLOBAL_OFFSET_TABLE_
+ Type: R_ARM_BASE_PREL
+ - Offset: 0x000000000000003C
+ Symbol: fn
+ Type: R_ARM_GOT_BREL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$a'
+ Section: .text
+ - Name: '$d'
+ Section: .text
+ Value: 0x0000000000000038
+ Global:
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ - Name: _GLOBAL_OFFSET_TABLE_
+ - Name: fn
+...
diff --git a/test/old-elf/ARM/rel-got-brel.test b/test/old-elf/ARM/rel-got-brel.test
new file mode 100644
index 000000000000..c8786d81127f
--- /dev/null
+++ b/test/old-elf/ARM/rel-got-brel.test
@@ -0,0 +1,63 @@
+# Check handling of R_ARM_GOT_BREL relocation.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .got:
+# CHECK-NEXT: 401000 75004000 81004000
+# f_thumb = 0x400075 ^^ ^^ main_thumb = 0x400081
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 401008 00000000 04000000
+# GOT[0] offset = 0x0 ^^ ^^ GOT[1] offset = 0x4
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} f
+# CHECK: 00400080 g F .text {{[0-9a-f]+}} main
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AFBD465DF8047B704780B400AF00231846BD465DF8047B7047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '0000000000000000'
+ - Name: .rel.data
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: f
+ Type: R_ARM_GOT_BREL
+ - Offset: 0x0000000000000004
+ Symbol: main
+ Type: R_ARM_GOT_BREL
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000D
+ - Name: _GLOBAL_OFFSET_TABLE_
+...
diff --git a/test/old-elf/ARM/rel-group-relocs.test b/test/old-elf/ARM/rel-group-relocs.test
new file mode 100644
index 000000000000..16e82b3e4271
--- /dev/null
+++ b/test/old-elf/ARM/rel-group-relocs.test
@@ -0,0 +1,71 @@
+# Check handling of group relocations (R_ARM_ALU_PC_G0_NC, R_ARM_ALU_PC_G1_NC,
+# R_ARM_LDR_PC_G2).
+#
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: -e plt_func %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400074 00c68fe2 00ca8ce2 84ffbce5
+# Disassembly of section .text:
+# plt_func:
+# 400074: 00 c6 8f e2 add r12, pc, #0, #12
+# ^ after execution: r12=0x40007c
+# 400078: 00 ca 8c e2 add r12, r12, #0, #20
+# ^ after execution: r12=0x40007C
+# 40007c: 84 ff bc e5 ldr pc, [r12, #3972]!
+# ^ referenced address is 0x401000, after execution pc=0x400074
+# CHECK: Contents of section .data:
+# CHECK: 401000 74004000
+# ^ this value is written to pc after execution of comand 0x40007c
+# ^ this address is referenced by command at 0x40007c
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text 0000000c plt_func
+# CHECK: 00401000 g .data 00000004 got_func
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Content: 00C08FE200C08CE200F0BCE5
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x4
+ Relocations:
+ - Offset: 0
+ Symbol: got_func
+ Type: R_ARM_ALU_PC_G0_NC
+ Addend: -8
+ - Offset: 0x4
+ Symbol: got_func
+ Type: R_ARM_ALU_PC_G1_NC
+ Addend: -4
+ - Offset: 0x8
+ Symbol: got_func
+ Type: R_ARM_LDR_PC_G2
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x4
+ Content: 74004000
+Symbols:
+ Local:
+ Global:
+ - Name: plt_func
+ Type: STT_FUNC
+ Section: .text
+ Size: 0xC
+ - Name: got_func
+ Section: .data
+ Size: 0x4
+...
diff --git a/test/old-elf/ARM/rel-ifunc.test b/test/old-elf/ARM/rel-ifunc.test
new file mode 100644
index 000000000000..7044534af1e3
--- /dev/null
+++ b/test/old-elf/ARM/rel-ifunc.test
@@ -0,0 +1,101 @@
+# Check handling of IFUNC (gnu_indirect_function).
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .rel.plt:
+# CHECK: 400074 00104000
+# CHECK: Contents of section .plt:
+# CHECK: 40007c 00c68fe2 00ca8ce2 7cffbce5
+# CHECK: Contents of section .text:
+# CHECK: 4001a8 00482de9 04b08de2 d4ffffeb b0ffffeb
+# ^ bl #-320 (to address 0x400080=__plt_ifunc_myfunc)
+# CHECK: Contents of section .got.plt:
+# CHECK: 401000 c0004000
+# CHECK: SYMBOL TABLE:
+# CHECK: 004000c0 g .text 00000020 myfunc
+# CHECK: 00400074 g *ABS* 00000000 __rel_iplt_start
+# CHECK: 0040007c g *ABS* 00000000 __rel_iplt_end
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20130A0E30300A0E100D04BE204B09DE41EFF2FE104B02DE500B08DE20230A0E30300A0E100D04BE204B09DE41EFF2FE104B02DE500B08DE2003000E3003040E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE208D04DE208000BE508301BE533FF2FE10030A0E10300A0E104D04BE20088BDE800482DE904B08DE210D04DE2003000E3003040E308300BE5190000EA08301BE50C300BE50C301BE5003093E510300BE50C301BE5043093E57330EFE614300BE514301BE5A00053E30130A0030030A0137330EFE6000053E30600000A10301BE5003093E50300A0E1DAFFFFEB0020A0E110301BE5002083E508301BE5083083E208300BE508201BE5003000E3003040E3030052E1E0FFFF3A04D04BE20088BDE800482DE904B08DE2D4FFFFEBFEFFFFEB0030A0E30300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000040
+ Symbol: myfunc1
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x0000000000000044
+ Symbol: myfunc1
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x000000000000008C
+ Symbol: __rel_iplt_start
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x0000000000000090
+ Symbol: __rel_iplt_start
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x0000000000000108
+ Symbol: __rel_iplt_end
+ Type: R_ARM_MOVW_ABS_NC
+ - Offset: 0x000000000000010C
+ Symbol: __rel_iplt_end
+ Type: R_ARM_MOVT_ABS
+ - Offset: 0x000000000000012C
+ Symbol: myfunc
+ Type: R_ARM_CALL
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: '$a'
+ Section: .text
+ - Name: elf_ifunc_invoke
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000058
+ Size: 0x0000000000000028
+ - Name: apply_irel
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000080
+ Size: 0x00000000000000A0
+ Global:
+ - Name: myfunc1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000001C
+ - Name: myfunc2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000001C
+ Size: 0x000000000000001C
+ - Name: myfunc
+ Type: STT_GNU_IFUNC
+ Section: .text
+ Value: 0x0000000000000038
+ Size: 0x0000000000000020
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000120
+ Size: 0x000000000000001C
+ Weak:
+ - Name: __rel_iplt_start
+ - Name: __rel_iplt_end
+...
diff --git a/test/old-elf/ARM/rel-jump-slot.test b/test/old-elf/ARM/rel-jump-slot.test
new file mode 100644
index 000000000000..2a4f4eba8d84
--- /dev/null
+++ b/test/old-elf/ARM/rel-jump-slot.test
@@ -0,0 +1,50 @@
+# Check handling of R_ARM_JUMP_SLOT relocation.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -shared \
+# RUN: --noinhibit-exec %t-o.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-readobj -relocations %t | FileCheck %s
+
+# CHECK: 0x40100C R_ARM_JUMP_SLOT fn 0x0
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEB0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: fn
+ Type: R_ARM_CALL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$a'
+ Section: .text
+ Global:
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ - Name: fn
+...
diff --git a/test/old-elf/ARM/rel-rel32.test b/test/old-elf/ARM/rel-rel32.test
new file mode 100644
index 000000000000..9e5aab000523
--- /dev/null
+++ b/test/old-elf/ARM/rel-rel32.test
@@ -0,0 +1,56 @@
+# Check handling of R_ARM_REL32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400074 {{[0-9a-f]+}} 880fff00
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
+# CHECK: 00401000 g .bss {{[0-9a-f]+}} _myref
+
+---
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF0000FF0000231846BD465DF8047B7047
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: _myref
+ Type: R_ARM_REL32
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Global:
+ - Name: _myref
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x0000000000000014
+...
diff --git a/test/old-elf/ARM/rel-thm-call.test b/test/old-elf/ARM/rel-thm-call.test
new file mode 100644
index 000000000000..7e7289a99768
--- /dev/null
+++ b/test/old-elf/ARM/rel-thm-call.test
@@ -0,0 +1,114 @@
+# Check handling of R_ARM_THM_CALL relocation.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400084 fff7f6ff 00231846 80bd00bf
+# ^^ offset = -0x14
+# call site offset PC(thm) _Z1fv addr
+# 0x400084 + (-0x14) + 0x4 = 0x400074
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# CHECK: 00400080 g F .text {{[0-9a-f]+}} main
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_THM_CALL)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AFBD465DF8047B704780B500AFFFF7FEFF0023184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000010
+ Symbol: _Z1fv
+ Type: R_ARM_THM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x000000000000000C
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000D
+ Size: 0x000000000000000E
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AFBD465DF8047B704780B500AF00F400D00023184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000010
+ Symbol: _Z1fv
+ Type: R_ARM_THM_CALL
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x000000000000000C
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000D
+ Size: 0x000000000000000E
+...
diff --git a/test/old-elf/ARM/rel-thm-jump11.test b/test/old-elf/ARM/rel-thm-jump11.test
new file mode 100644
index 000000000000..e074b9ae1abf
--- /dev/null
+++ b/test/old-elf/ARM/rel-thm-jump11.test
@@ -0,0 +1,209 @@
+# Check handling of R_ARM_THM_JUMP11 relocation.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 4001a4 0021c7e7
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400138 g F .text 00000060 __gnu_h2f_internal
+# CHECK: 004001a4 g F .text 00000004 __gnu_h2f_alternative
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_THM_JUMP11)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 70B4020CC0F3C754FF2CC0F3160302F4004080B241D0002C08BF002B3BD0A4F17F0543F4000315F10E0FA8BF41F6FF7209DA15F1190FA3BFA4F166066FF07F42F2406FF07F4212EA03060CD001325208964208BF03EA42021344B3F1807F24BF5B08A4F17E0501B30F2D26DC15F1180F11DB15F10E0FB5BF4FF6F2710E35CFF6FF71AD02B7BF491BAAB2CB40002202EB5333034398B270BC70470029FBD040EA533370BC43F4FC407047102DDEDD6FEAD0336FEAC33398B2EDE740F4F84398B2E9E700BFC0F3842310B4A3F11F040029B4FA84F400F400424FEA541408BF0024C0F309002146140481B943B14203703302EBC35343EA04005DF8044B704760B1B0FA80F3153B98405B42EFE744EA40305DF8044B40F0FF40704720465DF8044B704700BF01216BE70121FEE7002167E70021FEE7
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000012A
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Offset: 0x0000000000000132
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Name: .text.startup
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 0020FFF7FEBF00BF
+ - Name: .rel.text.startup
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text.startup
+ Relocations:
+ - Offset: 0x0000000000000002
+ Symbol: __gnu_h2f_alternative
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$t'
+ Section: .text
+ - Name: __gnu_f2h_internal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x00000000000000C2
+ Global:
+ - Name: __gnu_f2h_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000012D
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000131
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000129
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: main
+ Type: STT_FUNC
+ Section: .text.startup
+ Value: 0x0000000000000001
+ Size: 0x0000000000000006
+ - Name: __gnu_f2h_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000125
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_internal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x00000000000000C5
+ Size: 0x000000000000005E
+ Visibility: STV_HIDDEN
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 70B4020CC0F3C754FF2CC0F3160302F4004080B241D0002C08BF002B3BD0A4F17F0543F4000315F10E0FA8BF41F6FF7209DA15F1190FA3BFA4F166066FF07F42F2406FF07F4212EA03060CD001325208964208BF03EA42021344B3F1807F24BF5B08A4F17E0501B30F2D26DC15F1180F11DB15F10E0FB5BF4FF6F2710E35CFF6FF71AD02B7BF491BAAB2CB40002202EB5333034398B270BC70470029FBD040EA533370BC43F4FC407047102DDEDD6FEAD0336FEAC33398B2EDE740F4F84398B2E9E700BFC0F3842310B4A3F11F040029B4FA84F400F400424FEA541408BF0024C0F309002146140481B943B14203703302EBC35343EA04005DF8044B704760B1B0FA80F3153B98405B42EFE744EA40305DF8044B40F0FF40704720465DF8044B704700BF01216BE70121FEE7002167E7002100E4
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000012A
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Offset: 0x0000000000000132
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Name: .text.startup
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 0020FFF7FEBF00BF
+ - Name: .rel.text.startup
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text.startup
+ Relocations:
+ - Offset: 0x0000000000000002
+ Symbol: __gnu_h2f_alternative
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$t'
+ Section: .text
+ - Name: __gnu_f2h_internal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x00000000000000C2
+ Global:
+ - Name: __gnu_f2h_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000012D
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000131
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000129
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: main
+ Type: STT_FUNC
+ Section: .text.startup
+ Value: 0x0000000000000001
+ Size: 0x0000000000000006
+ - Name: __gnu_f2h_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000125
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_internal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x00000000000000C5
+ Size: 0x000000000000005E
+ Visibility: STV_HIDDEN
+...
diff --git a/test/old-elf/ARM/rel-thm-jump24-veneer.test b/test/old-elf/ARM/rel-thm-jump24-veneer.test
new file mode 100644
index 000000000000..5893b53da84a
--- /dev/null
+++ b/test/old-elf/ARM/rel-thm-jump24-veneer.test
@@ -0,0 +1,120 @@
+# Check veneer generation for R_ARM_THM_JUMP24 relocation (B instruction call).
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC: Contents of section .text:
+# STATIC: 400074 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 00f000b8
+# Call from main:
+# offset = 0x0 ^^
+# call site offset PC(thm) ___Z1fv_from_thumb addr
+# 0x400080 + 0x0 + 0x4 = 0x400084
+#
+# Code of the veneer:
+# STATIC: 400084 78470000 f9ffffea
+# offset = -0x1C ^^
+# call site offset PC(arm) _Z1fv
+# 0x400088 + (-0x1C) + 0x8 = 0x400074
+#
+# STATIC: SYMBOL TABLE:
+# STATIC: 00400084 l F .text {{[0-9a-f]+}} ___Z1fv_from_thumb
+# STATIC: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# STATIC: 00400080 g F .text {{[0-9a-f]+}} main
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Contents of section .text:
+# EXEC-DYN: 400114 {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 00f000b8
+# Call from main:
+# offset = 0x0 ^^
+# call site offset PC(thm) ___Z1fv_from_thumb addr
+# 0x400120 + 0x0 + 0x4 = 0x400124
+#
+# Code of the veneer:
+# EXEC-DYN: 400124 78470000 f9ffffea
+# offset = -0x1C ^^
+# call site offset PC(arm) _Z1fv
+# 0x400128 + (-0x1C) + 0x8 = 0x400114
+#
+# EXEC-DYN: SYMBOL TABLE:
+# EXEC-DYN: 00400124 l F .text {{[0-9a-f]+}} ___Z1fv_from_thumb
+# EXEC-DYN: 00400114 g F .text {{[0-9a-f]+}} _Z1fv
+# EXEC-DYN: 00400120 g F .text {{[0-9a-f]+}} main
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 0030A0E30300A0E11EFF2FE1
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: FFF7FEBF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: _Z1fv
+ Type: R_ARM_THM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: _Z1fv
+...
diff --git a/test/old-elf/ARM/rel-thm-jump24.test b/test/old-elf/ARM/rel-thm-jump24.test
new file mode 100644
index 000000000000..b58bc053aca0
--- /dev/null
+++ b/test/old-elf/ARM/rel-thm-jump24.test
@@ -0,0 +1,110 @@
+# Check handling of R_ARM_THM_JUMP24 relocation.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400084 80b500af fff7f4bf 03461846 80bd00bf
+# ^^ offset = -0x18
+# call site offset PC(thm) _Z1fv addr
+# 0x400088 + (-0x18) + 0x4 = 0x400074
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} _Z1fv
+# CHECK: 00400084 g F .text {{[0-9a-f]+}} main
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: not lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t 2> %t-error
+# RUN: FileCheck -check-prefix=OVERFLOW %s < %t-error
+
+# OVERFLOW: Relocation out of range {{.*}} (R_ARM_THM_JUMP24)
+
+# good.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B704780B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000014
+ Symbol: _Z1fv
+ Type: R_ARM_THM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000011
+
+# overflow.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B704780B500AF00F400900346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000014
+ Symbol: _Z1fv
+ Type: R_ARM_THM_JUMP24
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: _Z1fv
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000011
+...
diff --git a/test/old-elf/ARM/rel-thm-mov.test b/test/old-elf/ARM/rel-thm-mov.test
new file mode 100644
index 000000000000..5e2e134ce781
--- /dev/null
+++ b/test/old-elf/ARM/rel-thm-mov.test
@@ -0,0 +1,70 @@
+# 1. Check handling of R_ARM_THM_MOVW_ABS_NC and R_THM_ARM_MOVT_ABS relocation pair.
+# 2. Check that instructions are not cropped for symbols that address Thumb code.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck %s
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=INSN-CROP %s
+
+# CHECK: Contents of section .text:
+# CHECK: 400074 {{[0-9a-f]+}} 41f20003 c0f24003 0a221a60
+# addrL = 0x1000 ^^
+# addrH = 0x40 ^^
+# addrH addrL _ZL5data1 addr
+# (0x40 << 16) + 0x1000 = 0x401000
+# CHECK: SYMBOL TABLE:
+# CHECK: 00401000 l .bss 00000004 _ZL5data1
+# CHECK: 00400074 g F .text {{[0-9a-f]+}} main
+#
+# INSN-CROP: Contents of section .text:
+# INSN-CROP: 400074 80b400af
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF40F20003C0F200030A221A6000231846BD465DF8047B7047
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: _ZL5data1
+ Type: R_ARM_THM_MOVW_ABS_NC
+ Addend: 0
+ - Offset: 0x0000000000000008
+ Symbol: _ZL5data1
+ Type: R_ARM_THM_MOVT_ABS
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+Symbols:
+ Local:
+ - Name: _ZL5data1
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+...
diff --git a/test/old-elf/ARM/rel-tls-ie32.test b/test/old-elf/ARM/rel-tls-ie32.test
new file mode 100644
index 000000000000..e05b262cd1bc
--- /dev/null
+++ b/test/old-elf/ARM/rel-tls-ie32.test
@@ -0,0 +1,125 @@
+# Check handling of R_ARM_TLS_IE32 relocation.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-tls.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-tlsv.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-tls.o %t-tlsv.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC: Contents of section .got:
+# STATIC-NEXT: 401008 08000000 0c000000
+# tp_off(i) = 0x08 ^^ ^^ tp_off(j) = 0x0c
+# tp_off(i) + sizeof(i) = tp_off(j)
+# 0x08 + 0x04 = 0x0c
+# STATIC: SYMBOL TABLE:
+# STATIC: 00400094 g F .text {{[0-9a-f]+}} main
+# STATIC: 00000000 g .tdata 00000004 i
+# sizeof(i) = 0x04 ^^
+# STATIC: 00000004 g .tdata 00000004 j
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-tls.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-tlsv.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-tls.o %t-tlsv.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Contents of section .rel.dyn:
+# EXEC-DYN-NEXT: 400134 08104000 13000000 0c104000 13000000
+# addr(i) = 0x401008 ^^ ^^ addr(j) = 0x40100c
+# EXEC-DYN: Contents of section .got:
+# EXEC-DYN-NEXT: 401008 00000000 04000000
+# tls_off(i) = 0x00 ^^ ^^ tls_off(j) = 0x04
+# EXEC-DYN: SYMBOL TABLE:
+# EXEC-DYN: 00400144 g F .text {{[0-9a-f]+}} main
+# EXEC-DYN: 00000000 g .tdata 00000004 i
+# EXEC-DYN: 00000004 g .tdata 00000004 j
+
+# tls.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF0C4B7B441B681DEE702FD2580A4B7B441B681DEE701FCB581A44084B7B441B681DEE701FCB585B0013441846BD465DF8047B70472E000000260000001C000000
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000038
+ Symbol: i
+ Type: R_ARM_TLS_IE32
+ - Offset: 0x000000000000003C
+ Symbol: i
+ Type: R_ARM_TLS_IE32
+ - Offset: 0x0000000000000040
+ Symbol: j
+ Type: R_ARM_TLS_IE32
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: i
+ Type: STT_TLS
+ - Name: j
+ Type: STT_TLS
+
+# tlsv.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: 05000000FBFFFFFF
+Symbols:
+ Global:
+ - Name: i
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: j
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/ARM/rel-tls-le32.test b/test/old-elf/ARM/rel-tls-le32.test
new file mode 100644
index 000000000000..eba4f950515b
--- /dev/null
+++ b/test/old-elf/ARM/rel-tls-le32.test
@@ -0,0 +1,73 @@
+# Check handling of R_ARM_TLS_LE32 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=STATIC %s
+
+# STATIC: Contents of section .text:
+# STATIC: 4000b4 {{[0-9a-f]+}} 08000000
+# tp_off = 0x000008 ^^
+# STATIC: SYMBOL TABLE:
+# STATIC: 00400094 g F .text {{[0-9a-f]+}} main
+# STATIC: 00000000 g .tdata 00000004 i
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=EXEC-DYN %s
+
+# EXEC-DYN: Contents of section .text:
+# EXEC-DYN: 400154 {{[0-9a-f]+}} 08000000
+# tp_off = 0x000008 ^^
+# EXEC-DYN: SYMBOL TABLE:
+# EXEC-DYN: 00400134 g F .text {{[0-9a-f]+}} main
+# EXEC-DYN: 00000000 g .tdata 00000004 i
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE2703F1DEE10209FE5023093E70300A0E100D04BE204B09DE41EFF2FE100000000
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000024
+ Symbol: i
+ Type: R_ARM_TLS_LE32
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: '05000000'
+Symbols:
+ Global:
+ - Name: i
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/rel-v4bx.test b/test/old-elf/ARM/rel-v4bx.test
new file mode 100644
index 000000000000..d2d3a7772b47
--- /dev/null
+++ b/test/old-elf/ARM/rel-v4bx.test
@@ -0,0 +1,72 @@
+# REQUIRES: arm
+
+# Check handling of R_ARM_V4BX relocation.
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi \
+# RUN: --noinhibit-exec %t-o.o -o %t
+# RUN: llvm-objdump -d -triple=armv4t %t | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK: main:
+# The following instruction creates a RM_ARM_V4BX relocation that
+# allows the linker to replace the bx instruction to a ARMv4
+# compatible one. Currently lld does not change it.
+# CHECK: 400114: 1e ff 2f 01 bxeq lr
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 1EFF2F01
+ - Name: .rel.text
+ Type: SHT_REL
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: ''
+ Type: R_ARM_V4BX
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ - Name: .ARM.attributes
+ Type: SHT_ARM_ATTRIBUTES
+ AddressAlign: 0x0000000000000001
+ Content: 4115000000616561626900010B000000060208010901
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: '$a'
+ Section: .text
+ - Name: .ARM.attributes
+ Type: STT_SECTION
+ Section: .ARM.attributes
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+...
diff --git a/test/old-elf/ARM/thm-symbols.test b/test/old-elf/ARM/thm-symbols.test
new file mode 100644
index 000000000000..6377d1e3ef89
--- /dev/null
+++ b/test/old-elf/ARM/thm-symbols.test
@@ -0,0 +1,51 @@
+# Check that symbols formed from Thumb instructions are valid:
+# 1. Symbol address.
+# 2. Symbol content size.
+# 3. Symbol content.
+
+# RUN: yaml2obj -format=elf %s > %t-t.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu \
+# RUN: -Bstatic --noinhibit-exec %t-t.o -o %t-t
+# RUN: llvm-readobj -symbols %t-t | FileCheck -check-prefix=SYM-ADDR %s
+# RUN: llvm-readobj -symbols %t-t | FileCheck -check-prefix=SYM-SIZE %s
+# RUN: llvm-objdump -s -t %t-t | FileCheck -check-prefix=SYM-CONTENT %s
+
+# SYM-ADDR: Name: main (1)
+# SYM-ADDR-NEXT: Value: 0x400075
+
+# SYM-SIZE: Name: main (1)
+# SYM-SIZE-NEXT: Value: 0x{{[0-9a-f]+}}
+# SYM-SIZE-NEXT: Size: 16
+
+# SYM-CONTENT: Contents of section .text:
+# SYM-CONTENT-NEXT: 400074 80b400af 00231846 bd465df8 047b7047 .....#.F.F]..{pG
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF00231846BD465DF8047B7047
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+...
diff --git a/test/old-elf/ARM/two-got-for-symbol.test b/test/old-elf/ARM/two-got-for-symbol.test
new file mode 100644
index 000000000000..e0420eff1918
--- /dev/null
+++ b/test/old-elf/ARM/two-got-for-symbol.test
@@ -0,0 +1,62 @@
+# Check that two GOT entries containing R_ARM_JUMP_SLOT and
+# R_ARM_GLOB_DAT may be present for the same symbol in the linked binary.
+
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -shared \
+# RUN: --noinhibit-exec %t-o.o -lfn -L%p/Inputs -o %t
+# RUN: llvm-readobj -relocations %t | FileCheck %s
+
+# CHECK: 0x401000 R_ARM_GLOB_DAT fn 0x0
+# CHECK: 0x401010 R_ARM_JUMP_SLOT fn 0x0
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 10482DE908B08DE20CD04DE230209FE502208FE02C309FE5033092E710300BE5FEFFFFEB0040A0E110301BE533FF2FE10030A0E1033084E00300A0E108D04BE21088BDE82C00000000000000
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: fn
+ Type: R_ARM_CALL
+ - Offset: 0x0000000000000044
+ Symbol: _GLOBAL_OFFSET_TABLE_
+ Type: R_ARM_BASE_PREL
+ - Offset: 0x0000000000000048
+ Symbol: fn
+ Type: R_ARM_GOT_BREL
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: '$a'
+ Section: .text
+ - Name: '$d'
+ Section: .text
+ Value: 0x0000000000000044
+ Global:
+ - Name: f
+ Type: STT_FUNC
+ Section: .text
+ - Name: fn
+ - Name: _GLOBAL_OFFSET_TABLE_
+...
diff --git a/test/old-elf/ARM/undef-lazy-symbol.test b/test/old-elf/ARM/undef-lazy-symbol.test
new file mode 100644
index 000000000000..361c6482dabe
--- /dev/null
+++ b/test/old-elf/ARM/undef-lazy-symbol.test
@@ -0,0 +1,133 @@
+# Check that _GLOBAL_OFFSET_TABLE_ symbol is resolved
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-got.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-got.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=GOT %s
+
+# GOT: Name: _GLOBAL_OFFSET_TABLE_ (183)
+# GOT-NEXT: Value: {{[0-9]+}}
+# GOT-NEXT: Size: 0
+# GOT-NEXT: Binding: Global (0x1)
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Other: 0
+# GOT-NEXT: Section: Absolute (0xFFF1)
+
+# Check that __exidx_start/_end symbols are resolved
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-exidx.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --defsym=main=fn --noinhibit-exec %t-exidx.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=EXIDX %s
+
+# EXIDX: Name: __exidx_start (186)
+# EXIDX-NEXT: Value: {{[0-9]+}}
+# EXIDX-NEXT: Size: 0
+# EXIDX-NEXT: Binding: Global (0x1)
+# EXIDX-NEXT: Type: Object (0x1)
+# EXIDX-NEXT: Other: 0
+# EXIDX-NEXT: Section: Absolute (0xFFF1)
+#
+# EXIDX: Name: __exidx_end (200)
+# EXIDX-NEXT: Value: {{[0-9]+}}
+# EXIDX-NEXT: Size: 0
+# EXIDX-NEXT: Binding: Global (0x1)
+# EXIDX-NEXT: Type: Object (0x1)
+# EXIDX-NEXT: Other: 0
+# EXIDX-NEXT: Section: Absolute (0xFFF1)
+
+# Check that all symbols are resolved
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-got.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-exidx.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-got.o %t-exidx.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SYMS %s
+
+# SYMS: Name: _GLOBAL_OFFSET_TABLE_ (186)
+# SYMS-NEXT: Value: {{[0-9]+}}
+# SYMS-NEXT: Size: 0
+# SYMS-NEXT: Binding: Global (0x1)
+# SYMS-NEXT: Type: Object (0x1)
+# SYMS-NEXT: Other: 0
+# SYMS-NEXT: Section: Absolute (0xFFF1)
+#
+# SYMS: Name: __exidx_start (208)
+# SYMS-NEXT: Value: {{[0-9]+}}
+# SYMS-NEXT: Size: 0
+# SYMS-NEXT: Binding: Global (0x1)
+# SYMS-NEXT: Type: Object (0x1)
+# SYMS-NEXT: Other: 0
+# SYMS-NEXT: Section: Absolute (0xFFF1)
+#
+# SYMS: Name: __exidx_end (222)
+# SYMS-NEXT: Value: {{[0-9]+}}
+# SYMS-NEXT: Size: 0
+# SYMS-NEXT: Binding: Global (0x1)
+# SYMS-NEXT: Type: Object (0x1)
+# SYMS-NEXT: Other: 0
+# SYMS-NEXT: Section: Absolute (0xFFF1)
+
+# got.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: _GLOBAL_OFFSET_TABLE_
+
+# exidx.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B483B000AF40F20003C0F200037B60002318460C37BD465DF8047B704700BF
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: fn
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: __exidx_start
+ - Name: __exidx_end
+...
diff --git a/test/old-elf/ARM/veneer-mapping.test b/test/old-elf/ARM/veneer-mapping.test
new file mode 100644
index 000000000000..ccd93eea4fbd
--- /dev/null
+++ b/test/old-elf/ARM/veneer-mapping.test
@@ -0,0 +1,92 @@
+# Check that mapping symbols are properly generated for veneers.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-arm.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm.o
+# RUN: lld -flavor old-gnu -target arm-linux-gnu --defsym=main=fa \
+# RUN: -Bstatic --noinhibit-exec %t-arm.o %t-thm.o -o %t
+# RUN: llvm-readobj -symbols %t | FileCheck %s
+
+# CHECK: Name: $a.__ft_from_arm
+# CHECK: Name: $d.__ft_from_arm
+# CHECK: Name: $t.__fa_from_thumb
+# CHECK: Name: $a.__fa_from_thumb
+
+# arm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00482DE904B08DE2FEFFFFEA0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: ft
+ Type: R_ARM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: fa
+ Type: STT_FUNC
+ Section: .text
+ - Name: ft
+
+# thm.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B500AFFFF7FEBF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: fa
+ Type: R_ARM_THM_JUMP24
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Global:
+ - Name: ft
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: fa
+...
diff --git a/test/old-elf/ARM/weak-branch.test b/test/old-elf/ARM/weak-branch.test
new file mode 100644
index 000000000000..76c7a4d15b65
--- /dev/null
+++ b/test/old-elf/ARM/weak-branch.test
@@ -0,0 +1,221 @@
+# Check weak references fixup.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-jmp11.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-jmp11.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=JMP11-CHECK %s
+
+# JMP11-CHECK: Contents of section .text:
+# JMP11-CHECK: 400194 704700bf 01216be7 012100bf 002167e7
+# ^ NOP (thumb16)
+# 40019c: 2101 movs r1, #1
+# 40019e: bf00 nop
+# JMP11-CHECK: 4001a4 002100bf
+# ^ NOP (thumb16)
+# 4001a4: 2100 movs r1, #0
+# 4001a6: bf00 nop
+# JMP11-CHECK: SYMBOL TABLE:
+# JMP11-CHECK: 00000000 w *UND* 00000000 __gnu_h2f_internal
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-thm-call.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-thm-call.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=THM-CALL-CHECK %s
+
+# THM-CALL-CHECK: Contents of section .text:
+# THM-CALL-CHECK: 400064 80b500af fff7f4ff aff30080 03461846
+# ^ NOP.W
+# 400068: f7ff fff4 bl 400054 <my_fn>
+# 40006c: f3af 8000 nop.w
+# 400070: 4603 mov r3, r0 ; return value has not been changed after weak fn call
+#
+# THM-CALL-CHECK: SYMBOL TABLE:
+# THM-CALL-CHECK: 00000000 w *UND* 00000000 weak_fn
+
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-arm-call.o
+# RUN: lld -flavor old-gnu -target arm -m armelf_linux_eabi -Bstatic \
+# RUN: --noinhibit-exec %t-arm-call.o -o %t
+# RUN: llvm-objdump -s -t %t | FileCheck -check-prefix=ARM-CALL-CHECK %s
+
+# ARM-CALL-CHECK: Contents of section .text:
+# ARM-CALL-CHECK: 400074 04b08de2 f5ffffeb 00f020e3 0030a0e1
+# ^ NOP
+# 400078: ebfffff5 bl 400054 <my_fn>
+# 40007c: e320f000 nop {0}
+# 400080: e1a03000 mov r3, r0 ; return value has not been changed after weak fn call
+#
+# ARM-CALL-CHECK: SYMBOL TABLE:
+# ARM-CALL-CHECK: 00000000 w *UND* 00000000 weak_fn
+
+# jump11.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 70B4020CC0F3C754FF2CC0F3160302F4004080B241D0002C08BF002B3BD0A4F17F0543F4000315F10E0FA8BF41F6FF7209DA15F1190FA3BFA4F166066FF07F42F2406FF07F4212EA03060CD001325208964208BF03EA42021344B3F1807F24BF5B08A4F17E0501B30F2D26DC15F1180F11DB15F10E0FB5BF4FF6F2710E35CFF6FF71AD02B7BF491BAAB2CB40002202EB5333034398B270BC70470029FBD040EA533370BC43F4FC407047102DDEDD6FEAD0336FEAC33398B2EDE740F4F84398B2E9E700BFC0F3842310B4A3F11F040029B4FA84F400F400424FEA541408BF0024C0F309002146140481B943B14203703302EBC35343EA04005DF8044B704760B1B0FA80F3153B98405B42EFE744EA40305DF8044B40F0FF40704720465DF8044B704700BF01216BE70121FEE7002167E70021FEE7
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000012A
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Offset: 0x0000000000000132
+ Symbol: __gnu_h2f_internal
+ Type: R_ARM_THM_JUMP11
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: '$t'
+ Section: .text
+ - Name: __gnu_f2h_internal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x00000000000000C2
+ Global:
+ - Name: __gnu_f2h_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000125
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_ieee
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000129
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_f2h_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000012D
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ - Name: __gnu_h2f_alternative
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000131
+ Size: 0x0000000000000004
+ Visibility: STV_HIDDEN
+ Weak:
+ - Name: __gnu_h2f_internal
+# thm-call.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 80B400AF01231846BD465DF8047B704780B500AFFFF7FEFFFFF7FEFF0346184680BD00BF
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000014
+ Symbol: my_fn
+ Type: R_ARM_THM_CALL
+ - Offset: 0x0000000000000018
+ Symbol: weak_fn
+ Type: R_ARM_THM_CALL
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: '$t'
+ Section: .text
+ Global:
+ - Name: my_fn
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ Size: 0x0000000000000010
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000011
+ Size: 0x0000000000000012
+ Weak:
+ - Name: weak_fn
+# arm-call.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_ARM
+ Flags: [ EF_ARM_EABI_VER5 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 04B02DE500B08DE20130A0E30300A0E100D04BE204B09DE41EFF2FE100482DE904B08DE2FEFFFFEBFEFFFFEB0030A0E10300A0E10088BDE8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000024
+ Symbol: my_fn
+ Type: R_ARM_CALL
+ - Offset: 0x0000000000000028
+ Symbol: weak_fn
+ Type: R_ARM_CALL
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: '$a'
+ Section: .text
+ Global:
+ - Name: my_fn
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000001C
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000001C
+ Size: 0x000000000000001C
+ Weak:
+ - Name: weak_fn
+...
diff --git a/test/elf/Hexagon/Inputs/dynobj-data.c b/test/old-elf/Hexagon/Inputs/dynobj-data.c
index 0f4ea9b80526..0f4ea9b80526 100644
--- a/test/elf/Hexagon/Inputs/dynobj-data.c
+++ b/test/old-elf/Hexagon/Inputs/dynobj-data.c
diff --git a/test/elf/Hexagon/Inputs/dynobj-data.o b/test/old-elf/Hexagon/Inputs/dynobj-data.o
index 13d283cd0eff..13d283cd0eff 100644
--- a/test/elf/Hexagon/Inputs/dynobj-data.o
+++ b/test/old-elf/Hexagon/Inputs/dynobj-data.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/dynobj.c b/test/old-elf/Hexagon/Inputs/dynobj.c
index f17fdadd6945..f17fdadd6945 100644
--- a/test/elf/Hexagon/Inputs/dynobj.c
+++ b/test/old-elf/Hexagon/Inputs/dynobj.c
diff --git a/test/elf/Hexagon/Inputs/dynobj.o b/test/old-elf/Hexagon/Inputs/dynobj.o
index 6c184f2edd60..6c184f2edd60 100644
--- a/test/elf/Hexagon/Inputs/dynobj.o
+++ b/test/old-elf/Hexagon/Inputs/dynobj.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/got-plt-order.c b/test/old-elf/Hexagon/Inputs/got-plt-order.c
index 621f670ef7c5..621f670ef7c5 100644
--- a/test/elf/Hexagon/Inputs/got-plt-order.c
+++ b/test/old-elf/Hexagon/Inputs/got-plt-order.c
diff --git a/test/elf/Hexagon/Inputs/got-plt-order.o b/test/old-elf/Hexagon/Inputs/got-plt-order.o
index e97678b739bd..e97678b739bd 100644
--- a/test/elf/Hexagon/Inputs/got-plt-order.o
+++ b/test/old-elf/Hexagon/Inputs/got-plt-order.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/libMaxAlignment.a b/test/old-elf/Hexagon/Inputs/libMaxAlignment.a
index cc5461a09ae4..cc5461a09ae4 100644
--- a/test/elf/Hexagon/Inputs/libMaxAlignment.a
+++ b/test/old-elf/Hexagon/Inputs/libMaxAlignment.a
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/sda-base.o b/test/old-elf/Hexagon/Inputs/sda-base.o
index 410a3d47d320..410a3d47d320 100644
--- a/test/elf/Hexagon/Inputs/sda-base.o
+++ b/test/old-elf/Hexagon/Inputs/sda-base.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/sdata1.c b/test/old-elf/Hexagon/Inputs/sdata1.c
index 77c2a54c36a1..77c2a54c36a1 100644
--- a/test/elf/Hexagon/Inputs/sdata1.c
+++ b/test/old-elf/Hexagon/Inputs/sdata1.c
diff --git a/test/elf/Hexagon/Inputs/sdata1.o b/test/old-elf/Hexagon/Inputs/sdata1.o
index bf908fed27e9..bf908fed27e9 100644
--- a/test/elf/Hexagon/Inputs/sdata1.o
+++ b/test/old-elf/Hexagon/Inputs/sdata1.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/sdata2.c b/test/old-elf/Hexagon/Inputs/sdata2.c
index 96b37271d773..96b37271d773 100644
--- a/test/elf/Hexagon/Inputs/sdata2.c
+++ b/test/old-elf/Hexagon/Inputs/sdata2.c
diff --git a/test/elf/Hexagon/Inputs/sdata2.o b/test/old-elf/Hexagon/Inputs/sdata2.o
index e4ec810866e5..e4ec810866e5 100644
--- a/test/elf/Hexagon/Inputs/sdata2.o
+++ b/test/old-elf/Hexagon/Inputs/sdata2.o
Binary files differ
diff --git a/test/elf/Hexagon/Inputs/use-shared.hexagon b/test/old-elf/Hexagon/Inputs/use-shared.hexagon
index 9e5ffb42d36a..9e5ffb42d36a 100644
--- a/test/elf/Hexagon/Inputs/use-shared.hexagon
+++ b/test/old-elf/Hexagon/Inputs/use-shared.hexagon
Binary files differ
diff --git a/test/old-elf/Hexagon/dynlib-data.test b/test/old-elf/Hexagon/dynlib-data.test
new file mode 100644
index 000000000000..2da312b54d43
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib-data.test
@@ -0,0 +1,9 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/dynobj-data.o \
+RUN: -o %t --noinhibit-exec -shared
+RUN: llvm-objdump -s %t > %t1
+RUN: FileCheck -check-prefix=CHECKRELOCS %s < %t1
+
+CHECKRELOCS: Contents of section .text:
+CHECKRELOCS: 00f8 01c09da0 01d89da1 3c400000 18c4496a ........<@....Ij
+CHECKRELOCS: 0108 ff7fff0f 00ff9897 00c08091 38c09d91 ............8...
+CHECKRELOCS: 0118 1ec01e96 ....
diff --git a/test/old-elf/Hexagon/dynlib-gotoff.test b/test/old-elf/Hexagon/dynlib-gotoff.test
new file mode 100644
index 000000000000..f31d23bc5ebc
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib-gotoff.test
@@ -0,0 +1,128 @@
+# This tests GOT's and PLT's for dynamic libraries for Hexagon
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/dynobj.o \
+RUN: -o %t --output-filetype=yaml -shared --noinhibit-exec
+RUN: FileCheck -check-prefix=CHECKGOTPLT %s < %t
+
+ - name: .PLT0
+CHECKGOTPLT: type: stub
+CHECKGOTPLT: content: [ 00, 40, 00, 00, 1C, C0, 49, 6A, 0E, 42, 9C, E2,
+CHECKGOTPLT: 4F, 40, 9C, 91, 3C, C0, 9C, 91, 0E, 42, 0E, 8C,
+CHECKGOTPLT: 00, C0, 9C, 52 ]
+CHECKGOTPLT: alignment: 16
+CHECKGOTPLT: section-name: .plt
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
+CHECKGOTPLT: offset: 0
+ target: __got0
+CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
+CHECKGOTPLT: offset: 4
+ target: __got0
+CHECKGOTPLT: addend: 4
+ - name: __plt_fn
+CHECKGOTPLT: type: stub
+CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
+CHECKGOTPLT: 00, C0, 9C, 52 ]
+CHECKGOTPLT: alignment: 16
+CHECKGOTPLT: section-name: .plt
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
+CHECKGOTPLT: offset: 0
+ target: __got_fn
+CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
+CHECKGOTPLT: offset: 4
+ target: __got_fn
+CHECKGOTPLT: addend: 4
+ - name: __plt_fn1
+CHECKGOTPLT: type: stub
+CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
+CHECKGOTPLT: 00, C0, 9C, 52 ]
+CHECKGOTPLT: alignment: 16
+CHECKGOTPLT: section-name: .plt
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
+CHECKGOTPLT: offset: 0
+ target: __got_fn1
+CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
+CHECKGOTPLT: offset: 4
+ target: __got_fn1
+CHECKGOTPLT: addend: 4
+ - name: __plt_fn2
+CHECKGOTPLT: type: stub
+CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91,
+CHECKGOTPLT: 00, C0, 9C, 52 ]
+CHECKGOTPLT: alignment: 16
+CHECKGOTPLT: section-name: .plt
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X
+CHECKGOTPLT: offset: 0
+ target: __got_fn2
+CHECKGOTPLT: - kind: R_HEX_6_PCREL_X
+CHECKGOTPLT: offset: 4
+ target: __got_fn2
+CHECKGOTPLT: addend: 4
+ - name: __got0
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+CHECKGOTPLT: 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 8
+CHECKGOTPLT: section-name: .got.plt
+CHECKGOTPLT: permissions: rw-
+ - name: __got_c
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 4
+CHECKGOTPLT: section-name: .got
+CHECKGOTPLT: permissions: rw-
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_GLOB_DAT
+CHECKGOTPLT: offset: 0
+CHECKGOTPLT: target: c
+ - name: __got_shankar
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 4
+CHECKGOTPLT: section-name: .got
+CHECKGOTPLT: permissions: rw-
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_GLOB_DAT
+CHECKGOTPLT: offset: 0
+CHECKGOTPLT: target: shankar
+ - name: __got_fn
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 4
+CHECKGOTPLT: section-name: .got.plt
+CHECKGOTPLT: permissions: rw-
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
+CHECKGOTPLT: offset: 0
+CHECKGOTPLT: target: fn
+CHECKGOTPLT: - kind: R_HEX_32
+CHECKGOTPLT: offset: 0
+ target: .PLT0
+ - name: __got_fn1
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 4
+CHECKGOTPLT: section-name: .got.plt
+CHECKGOTPLT: permissions: rw-
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
+CHECKGOTPLT: offset: 0
+CHECKGOTPLT: target: fn1
+CHECKGOTPLT: - kind: R_HEX_32
+CHECKGOTPLT: offset: 0
+ target: .PLT0
+ - name: __got_fn2
+CHECKGOTPLT: type: got
+CHECKGOTPLT: content: [ 00, 00, 00, 00 ]
+CHECKGOTPLT: alignment: 4
+CHECKGOTPLT: section-name: .got.plt
+CHECKGOTPLT: permissions: rw-
+CHECKGOTPLT: references:
+CHECKGOTPLT: - kind: R_HEX_JMP_SLOT
+CHECKGOTPLT: offset: 0
+CHECKGOTPLT: target: fn2
+CHECKGOTPLT: - kind: R_HEX_32
+CHECKGOTPLT: offset: 0
+ target: .PLT0
diff --git a/test/old-elf/Hexagon/dynlib-hash.test b/test/old-elf/Hexagon/dynlib-hash.test
new file mode 100644
index 000000000000..e26368120970
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib-hash.test
@@ -0,0 +1,9 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/dynobj.o \
+RUN: -o %t --noinhibit-exec -shared
+RUN: llvm-objdump -s %t > %t1
+RUN: FileCheck -check-prefix=CHECKHASH %s < %t1
+
+CHECKHASH: Contents of section .hash:
+CHECKHASH: 0094 03000000 07000000 06000000 01000000
+CHECKHASH: 00a4 04000000 00000000 00000000 00000000
+CHECKHASH: 00b4 00000000 03000000 02000000 05000000
diff --git a/test/old-elf/Hexagon/dynlib-rela.test b/test/old-elf/Hexagon/dynlib-rela.test
new file mode 100644
index 000000000000..86e38ede6280
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib-rela.test
@@ -0,0 +1,9 @@
+# Tests that the relocation sections have the right alignment.
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/use-shared.hexagon -shared -o %t1
+RUN: llvm-readobj -sections %t1 > %t2
+RUN: FileCheck -check-prefix=SECTIONS %s < %t2
+
+SECTIONS: Section {
+SECTIONS: Name: .rela.plt (23)
+SECTIONS: AddressAlignment: 4
+SECTIONS: }
diff --git a/test/old-elf/Hexagon/dynlib-syms.test b/test/old-elf/Hexagon/dynlib-syms.test
new file mode 100644
index 000000000000..08f8930bb205
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib-syms.test
@@ -0,0 +1,7 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/dynobj.o \
+RUN: -o %t --noinhibit-exec -shared
+RUN: llvm-nm -n -M %t > %t1
+RUN: FileCheck -check-prefix=CHECKSYMS %s < %t1
+
+CHECKSYMS: 0000025c A _DYNAMIC
+CHECKSYMS: 00001008 A _GLOBAL_OFFSET_TABLE_
diff --git a/test/old-elf/Hexagon/dynlib.test b/test/old-elf/Hexagon/dynlib.test
new file mode 100644
index 000000000000..9e591ed06075
--- /dev/null
+++ b/test/old-elf/Hexagon/dynlib.test
@@ -0,0 +1,36 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/use-shared.hexagon -shared -o %t1
+RUN: llvm-readobj -dyn-symbols %t1 > %t2
+RUN: FileCheck -check-prefix=DYNSYMS %s < %t2
+RUN: llvm-readobj -program-headers %t1 | FileCheck %s
+
+DYNSYMS: DynamicSymbols [
+DYNSYMS: Symbol {
+DYNSYMS: Name: fn2
+DYNSYMS-NEXT: Value:
+DYNSYMS-NEXT: Size:
+DYNSYMS-NEXT: Binding: Global
+DYNSYMS-NEXT: Type: Function
+DYNSYMS-NEXT: Other:
+DYNSYMS-NEXT: Section: .text
+DYNSYMS: }
+DYNSYMS: Symbol {
+DYNSYMS: Name: fn1
+DYNSYMS-NEXT: Value:
+DYNSYMS-NEXT: Size:
+DYNSYMS-NEXT: Binding: Global
+DYNSYMS-NEXT: Type: Function
+DYNSYMS-NEXT: Other:
+DYNSYMS-NEXT: Section: .text
+DYNSYMS: }
+DYNSYMS: Symbol {
+DYNSYMS: Name: fn3
+DYNSYMS-NEXT: Value:
+DYNSYMS-NEXT: Size:
+DYNSYMS-NEXT: Binding: Global
+DYNSYMS-NEXT: Type: Function
+DYNSYMS-NEXT: Other:
+DYNSYMS-NEXT: Section: .text
+DYNSYMS-NEXT: }
+DYNSYMS-NEXT: ]
+
+CHECK-NOT: PT_PHDR
diff --git a/test/old-elf/Hexagon/hexagon-got-plt-order.test b/test/old-elf/Hexagon/hexagon-got-plt-order.test
new file mode 100644
index 000000000000..e2d37d1f6440
--- /dev/null
+++ b/test/old-elf/Hexagon/hexagon-got-plt-order.test
@@ -0,0 +1,5 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/got-plt-order.o -o %t -shared
+RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+CHECK: .got
+CHECK-NEXT: .got.plt
diff --git a/test/old-elf/Hexagon/hexagon-plt-setup.test b/test/old-elf/Hexagon/hexagon-plt-setup.test
new file mode 100644
index 000000000000..51d8bd6a6b71
--- /dev/null
+++ b/test/old-elf/Hexagon/hexagon-plt-setup.test
@@ -0,0 +1,12 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/use-shared.hexagon \
+RUN: --output-filetype=yaml --noinhibit-exec -o %t2
+RUN: FileCheck %s < %t2
+
+CHECK: - name: fn3
+CHECK: references:
+CHECK: - kind: R_HEX_B22_PCREL
+CHECK: offset: 4
+ target:
+CHECK: - kind: R_HEX_B22_PCREL
+CHECK: offset: 8
+ target:
diff --git a/test/old-elf/Hexagon/maxalignment.test b/test/old-elf/Hexagon/maxalignment.test
new file mode 100644
index 000000000000..15a2bf3d80be
--- /dev/null
+++ b/test/old-elf/Hexagon/maxalignment.test
@@ -0,0 +1,8 @@
+# This tests that we lld is able to get the contentType properly for archives
+# when they intermittently get loaded at an address whose alignment is 2
+
+RUN: lld -flavor old-gnu -target hexagon --whole-archive %p/Inputs/libMaxAlignment.a \
+RUN: --noinhibit-exec -static -o %t
+RUN: llvm-nm %t | FileCheck %s
+
+CHECK: {{[0-9a-f]+}} D a
diff --git a/test/old-elf/Hexagon/rela-order.test b/test/old-elf/Hexagon/rela-order.test
new file mode 100644
index 000000000000..777b923fd737
--- /dev/null
+++ b/test/old-elf/Hexagon/rela-order.test
@@ -0,0 +1,9 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/dynobj.o -shared \
+RUN: --noinhibit-exec -o %t
+RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+CHECK: .dynsym
+CHECK-NEXT: .dynstr
+CHECK-NEXT: .rela.dyn
+CHECK-NEXT: .rela.plt
+CHECK-NEXT: .plt
diff --git a/test/old-elf/Hexagon/sda-base.test b/test/old-elf/Hexagon/sda-base.test
new file mode 100644
index 000000000000..cfcafbce8377
--- /dev/null
+++ b/test/old-elf/Hexagon/sda-base.test
@@ -0,0 +1,4 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/sda-base.o -o %t1 --noinhibit-exec
+RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=sdabase
+
+sdabase: 00002000 A _SDA_BASE_
diff --git a/test/old-elf/Hexagon/zerofillquick-sdata.test b/test/old-elf/Hexagon/zerofillquick-sdata.test
new file mode 100644
index 000000000000..1b932fe6e7b1
--- /dev/null
+++ b/test/old-elf/Hexagon/zerofillquick-sdata.test
@@ -0,0 +1,18 @@
+# This tests that a typeZeroFillFast atom is associated with a section that has
+# the correct memory size.
+
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/sdata1.o %p/Inputs/sdata2.o \
+RUN: -o %t --noinhibit-exec -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=CHECKSECTIONSANDSIZE %s
+
+CHECKSECTIONSANDSIZE: Section {
+CHECKSECTIONSANDSIZE: Name: .sdata (13)
+CHECKSECTIONSANDSIZE: Address: 0x1000
+CHECKSECTIONSANDSIZE: Offset: 0x1000
+CHECKSECTIONSANDSIZE: Size: 24
+CHECKSECTIONSANDSIZE: }
+CHECKSECTIONSANDSIZE: Section {
+CHECKSECTIONSANDSIZE: Name: .bss (20)
+CHECKSECTIONSANDSIZE: Address: 0x1018
+CHECKSECTIONSANDSIZE: Offset: 0x1018
+CHECKSECTIONSANDSIZE: }
diff --git a/test/elf/Inputs/abs-test.i386 b/test/old-elf/Inputs/abs-test.i386
index 8556c24da551..8556c24da551 100644
--- a/test/elf/Inputs/abs-test.i386
+++ b/test/old-elf/Inputs/abs-test.i386
Binary files differ
diff --git a/test/old-elf/Inputs/allowduplicates.objtxt b/test/old-elf/Inputs/allowduplicates.objtxt
new file mode 100644
index 000000000000..9b8ba8902aba
--- /dev/null
+++ b/test/old-elf/Inputs/allowduplicates.objtxt
@@ -0,0 +1,12 @@
+defined-atoms:
+ - name: .text
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
+ 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
diff --git a/test/elf/Inputs/bar.o.x86-64 b/test/old-elf/Inputs/bar.o.x86-64
index 467485f0bb96..467485f0bb96 100644
--- a/test/elf/Inputs/bar.o.x86-64
+++ b/test/old-elf/Inputs/bar.o.x86-64
Binary files differ
diff --git a/test/elf/Inputs/branch-test.hexagon b/test/old-elf/Inputs/branch-test.hexagon
index 1ffb47228e32..1ffb47228e32 100644
--- a/test/elf/Inputs/branch-test.hexagon
+++ b/test/old-elf/Inputs/branch-test.hexagon
Binary files differ
diff --git a/test/elf/Inputs/branch-test.ppc b/test/old-elf/Inputs/branch-test.ppc
index 4698941e7503..4698941e7503 100644
--- a/test/elf/Inputs/branch-test.ppc
+++ b/test/old-elf/Inputs/branch-test.ppc
Binary files differ
diff --git a/test/old-elf/Inputs/consecutive-weak-defs.o.yaml b/test/old-elf/Inputs/consecutive-weak-defs.o.yaml
new file mode 100644
index 000000000000..cbd9c665b6d5
--- /dev/null
+++ b/test/old-elf/Inputs/consecutive-weak-defs.o.yaml
@@ -0,0 +1,65 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 554889E5E8000000005DC3554889E5B8640000005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000005
+ Symbol: my_weak_func
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: my_func
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000B
+ Weak:
+ - Name: my_weak_func
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000B
+ Size: 0x000000000000000B
+ - Name: my_weak_func2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000B
+ Size: 0x000000000000000B
+ - Name: my_weak_func3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000B
+ Size: 0x000000000000000B
+...
diff --git a/test/elf/Inputs/constants-merge.x86-64 b/test/old-elf/Inputs/constants-merge.x86-64
index 0087eb8f8cb5..0087eb8f8cb5 100644
--- a/test/elf/Inputs/constants-merge.x86-64
+++ b/test/old-elf/Inputs/constants-merge.x86-64
Binary files differ
diff --git a/test/elf/Inputs/constdata.x86-64 b/test/old-elf/Inputs/constdata.x86-64
index d877a5535357..d877a5535357 100644
--- a/test/elf/Inputs/constdata.x86-64
+++ b/test/old-elf/Inputs/constdata.x86-64
Binary files differ
diff --git a/test/elf/Inputs/foo.o.x86-64 b/test/old-elf/Inputs/foo.o.x86-64
index 72a89eefa8ed..72a89eefa8ed 100644
--- a/test/elf/Inputs/foo.o.x86-64
+++ b/test/old-elf/Inputs/foo.o.x86-64
Binary files differ
diff --git a/test/elf/Inputs/globalconst.c b/test/old-elf/Inputs/globalconst.c
index 08395a88e7ca..08395a88e7ca 100644
--- a/test/elf/Inputs/globalconst.c
+++ b/test/old-elf/Inputs/globalconst.c
diff --git a/test/elf/Inputs/globalconst.o.x86-64 b/test/old-elf/Inputs/globalconst.o.x86-64
index d8e266e76334..d8e266e76334 100644
--- a/test/elf/Inputs/globalconst.o.x86-64
+++ b/test/old-elf/Inputs/globalconst.o.x86-64
Binary files differ
diff --git a/test/elf/Inputs/gotpcrel.S b/test/old-elf/Inputs/gotpcrel.S
index 300675f59612..300675f59612 100644
--- a/test/elf/Inputs/gotpcrel.S
+++ b/test/old-elf/Inputs/gotpcrel.S
diff --git a/test/elf/Inputs/gotpcrel.x86-64 b/test/old-elf/Inputs/gotpcrel.x86-64
index f9c61d0edf15..f9c61d0edf15 100644
--- a/test/elf/Inputs/gotpcrel.x86-64
+++ b/test/old-elf/Inputs/gotpcrel.x86-64
Binary files differ
diff --git a/test/elf/Inputs/group-cmd-search-1.ls b/test/old-elf/Inputs/group-cmd-search-1.ls
index 965369309a20..965369309a20 100644
--- a/test/elf/Inputs/group-cmd-search-1.ls
+++ b/test/old-elf/Inputs/group-cmd-search-1.ls
diff --git a/test/elf/Inputs/group-cmd-search-2.ls b/test/old-elf/Inputs/group-cmd-search-2.ls
index f1eee6a35efa..f1eee6a35efa 100644
--- a/test/elf/Inputs/group-cmd-search-2.ls
+++ b/test/old-elf/Inputs/group-cmd-search-2.ls
diff --git a/test/elf/Inputs/group-cmd-search-3.ls b/test/old-elf/Inputs/group-cmd-search-3.ls
index 83ce0ca62fb1..83ce0ca62fb1 100644
--- a/test/elf/Inputs/group-cmd-search-3.ls
+++ b/test/old-elf/Inputs/group-cmd-search-3.ls
diff --git a/test/elf/Inputs/ifunc.S b/test/old-elf/Inputs/ifunc.S
index 0ac1f5a5b0bb..0ac1f5a5b0bb 100644
--- a/test/elf/Inputs/ifunc.S
+++ b/test/old-elf/Inputs/ifunc.S
diff --git a/test/elf/Inputs/ifunc.cpp b/test/old-elf/Inputs/ifunc.cpp
index 2e520277d36c..2e520277d36c 100644
--- a/test/elf/Inputs/ifunc.cpp
+++ b/test/old-elf/Inputs/ifunc.cpp
diff --git a/test/elf/Inputs/ifunc.cpp.x86-64 b/test/old-elf/Inputs/ifunc.cpp.x86-64
index 20c812cabd2c..20c812cabd2c 100644
--- a/test/elf/Inputs/ifunc.cpp.x86-64
+++ b/test/old-elf/Inputs/ifunc.cpp.x86-64
Binary files differ
diff --git a/test/elf/Inputs/ifunc.x86-64 b/test/old-elf/Inputs/ifunc.x86-64
index 36c8e04ca837..36c8e04ca837 100644
--- a/test/elf/Inputs/ifunc.x86-64
+++ b/test/old-elf/Inputs/ifunc.x86-64
Binary files differ
diff --git a/test/elf/Inputs/libfnarchive.a b/test/old-elf/Inputs/libfnarchive.a
index 753acd6e2c65..753acd6e2c65 100644
--- a/test/elf/Inputs/libfnarchive.a
+++ b/test/old-elf/Inputs/libfnarchive.a
Binary files differ
diff --git a/test/elf/Inputs/libifunc.x86-64.so b/test/old-elf/Inputs/libifunc.x86-64.so
index 0f05b308ce78..0f05b308ce78 100644
--- a/test/elf/Inputs/libifunc.x86-64.so
+++ b/test/old-elf/Inputs/libifunc.x86-64.so
Binary files differ
diff --git a/test/elf/Inputs/libundef.so b/test/old-elf/Inputs/libundef.so
index 41f2a668f360..41f2a668f360 100644
--- a/test/elf/Inputs/libundef.so
+++ b/test/old-elf/Inputs/libundef.so
Binary files differ
diff --git a/test/elf/Inputs/libweaksym.so b/test/old-elf/Inputs/libweaksym.so
index 7ff4ea56ae60..7ff4ea56ae60 100755
--- a/test/elf/Inputs/libweaksym.so
+++ b/test/old-elf/Inputs/libweaksym.so
Binary files differ
diff --git a/test/old-elf/Inputs/main-with-global-def.o.yaml b/test/old-elf/Inputs/main-with-global-def.o.yaml
new file mode 100644
index 000000000000..d3eeb8fe24b6
--- /dev/null
+++ b/test/old-elf/Inputs/main-with-global-def.o.yaml
@@ -0,0 +1,55 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 554889E5B8C80000005DC3554889E54883EC10C745FC00000000B000E8000000004883C4105DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000001D
+ Symbol: my_func
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000000B
+ Size: 0x000000000000001C
+ - Name: my_weak_func2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000B
+ - Name: my_func
+...
diff --git a/test/elf/Inputs/mainobj.x86_64 b/test/old-elf/Inputs/mainobj.x86_64
index d0f29418237d..d0f29418237d 100644
--- a/test/elf/Inputs/mainobj.x86_64
+++ b/test/old-elf/Inputs/mainobj.x86_64
Binary files differ
diff --git a/test/old-elf/Inputs/no-unique-section-names.x86-64 b/test/old-elf/Inputs/no-unique-section-names.x86-64
new file mode 100644
index 000000000000..fd92f5f0c6e7
--- /dev/null
+++ b/test/old-elf/Inputs/no-unique-section-names.x86-64
Binary files differ
diff --git a/test/elf/Inputs/object-test.elf-hexagon b/test/old-elf/Inputs/object-test.elf-hexagon
index bfc85a7d0b76..bfc85a7d0b76 100644
--- a/test/elf/Inputs/object-test.elf-hexagon
+++ b/test/old-elf/Inputs/object-test.elf-hexagon
Binary files differ
diff --git a/test/elf/Inputs/object-test.elf-i386 b/test/old-elf/Inputs/object-test.elf-i386
index 872684c7fcc1..872684c7fcc1 100644
--- a/test/elf/Inputs/object-test.elf-i386
+++ b/test/old-elf/Inputs/object-test.elf-i386
Binary files differ
diff --git a/test/elf/Inputs/phdr.i386 b/test/old-elf/Inputs/phdr.i386
index 7c83dd314891..7c83dd314891 100644
--- a/test/elf/Inputs/phdr.i386
+++ b/test/old-elf/Inputs/phdr.i386
Binary files differ
diff --git a/test/elf/Inputs/quickdata-sort-test.o.elf-hexagon b/test/old-elf/Inputs/quickdata-sort-test.o.elf-hexagon
index 03d028707129..03d028707129 100644
--- a/test/elf/Inputs/quickdata-sort-test.o.elf-hexagon
+++ b/test/old-elf/Inputs/quickdata-sort-test.o.elf-hexagon
Binary files differ
diff --git a/test/elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon b/test/old-elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon
index 410a3d47d320..410a3d47d320 100644
--- a/test/elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon
+++ b/test/old-elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon
Binary files differ
diff --git a/test/elf/Inputs/quickdata-test.elf-hexagon b/test/old-elf/Inputs/quickdata-test.elf-hexagon
index c3ae53a6babe..c3ae53a6babe 100644
--- a/test/elf/Inputs/quickdata-test.elf-hexagon
+++ b/test/old-elf/Inputs/quickdata-test.elf-hexagon
Binary files differ
diff --git a/test/elf/Inputs/reloc-test.elf-i386 b/test/old-elf/Inputs/reloc-test.elf-i386
index 1a5558131fff..1a5558131fff 100644
--- a/test/elf/Inputs/reloc-test.elf-i386
+++ b/test/old-elf/Inputs/reloc-test.elf-i386
Binary files differ
diff --git a/test/elf/Inputs/reloc-xb.x86 b/test/old-elf/Inputs/reloc-xb.x86
index 4d9770aa2356..4d9770aa2356 100644
--- a/test/elf/Inputs/reloc-xb.x86
+++ b/test/old-elf/Inputs/reloc-xb.x86
Binary files differ
diff --git a/test/elf/Inputs/reloc-xt.x86 b/test/old-elf/Inputs/reloc-xt.x86
index dcdfbfb09f71..dcdfbfb09f71 100644
--- a/test/elf/Inputs/reloc-xt.x86
+++ b/test/old-elf/Inputs/reloc-xt.x86
Binary files differ
diff --git a/test/elf/Inputs/relocs-dynamic.x86-64 b/test/old-elf/Inputs/relocs-dynamic.x86-64
index 0c44924d18e6..0c44924d18e6 100644
--- a/test/elf/Inputs/relocs-dynamic.x86-64
+++ b/test/old-elf/Inputs/relocs-dynamic.x86-64
Binary files differ
diff --git a/test/elf/Inputs/relocs.x86-64 b/test/old-elf/Inputs/relocs.x86-64
index 112dfa733db9..112dfa733db9 100644
--- a/test/elf/Inputs/relocs.x86-64
+++ b/test/old-elf/Inputs/relocs.x86-64
Binary files differ
diff --git a/test/elf/Inputs/responsefile b/test/old-elf/Inputs/responsefile
index 2fe657a0e3b0..2fe657a0e3b0 100644
--- a/test/elf/Inputs/responsefile
+++ b/test/old-elf/Inputs/responsefile
diff --git a/test/elf/Inputs/rodata-test.hexagon b/test/old-elf/Inputs/rodata-test.hexagon
index f448748e2abe..f448748e2abe 100644
--- a/test/elf/Inputs/rodata-test.hexagon
+++ b/test/old-elf/Inputs/rodata-test.hexagon
Binary files differ
diff --git a/test/elf/Inputs/rodata-test.i386 b/test/old-elf/Inputs/rodata-test.i386
index 09f71eb59969..09f71eb59969 100644
--- a/test/elf/Inputs/rodata-test.i386
+++ b/test/old-elf/Inputs/rodata-test.i386
Binary files differ
diff --git a/test/elf/Inputs/rodata.c b/test/old-elf/Inputs/rodata.c
index b43c9c945898..b43c9c945898 100644
--- a/test/elf/Inputs/rodata.c
+++ b/test/old-elf/Inputs/rodata.c
diff --git a/test/elf/Inputs/rodata.o b/test/old-elf/Inputs/rodata.o
index f13ddc9bba98..f13ddc9bba98 100644
--- a/test/elf/Inputs/rodata.o
+++ b/test/old-elf/Inputs/rodata.o
Binary files differ
diff --git a/test/elf/Inputs/section-test.i386 b/test/old-elf/Inputs/section-test.i386
index 2b447a9f8f5b..2b447a9f8f5b 100644
--- a/test/elf/Inputs/section-test.i386
+++ b/test/old-elf/Inputs/section-test.i386
Binary files differ
diff --git a/test/elf/Inputs/shared.c b/test/old-elf/Inputs/shared.c
index 2be91c4b9e45..2be91c4b9e45 100644
--- a/test/elf/Inputs/shared.c
+++ b/test/old-elf/Inputs/shared.c
diff --git a/test/elf/Inputs/shared.so-x86-64 b/test/old-elf/Inputs/shared.so-x86-64
index 0240f0e67431..0240f0e67431 100644
--- a/test/elf/Inputs/shared.so-x86-64
+++ b/test/old-elf/Inputs/shared.so-x86-64
Binary files differ
diff --git a/test/old-elf/Inputs/shndx.o-x86_64 b/test/old-elf/Inputs/shndx.o-x86_64
new file mode 100644
index 000000000000..9e3e5d8526d7
--- /dev/null
+++ b/test/old-elf/Inputs/shndx.o-x86_64
Binary files differ
diff --git a/test/old-elf/Inputs/stripped-empty.x86_64 b/test/old-elf/Inputs/stripped-empty.x86_64
new file mode 100644
index 000000000000..7368ba280d79
--- /dev/null
+++ b/test/old-elf/Inputs/stripped-empty.x86_64
Binary files differ
diff --git a/test/elf/Inputs/target-test.hexagon b/test/old-elf/Inputs/target-test.hexagon
index 7da114561920..7da114561920 100644
--- a/test/elf/Inputs/target-test.hexagon
+++ b/test/old-elf/Inputs/target-test.hexagon
Binary files differ
diff --git a/test/elf/Inputs/target-test.ppc b/test/old-elf/Inputs/target-test.ppc
index 001be338c20d..001be338c20d 100644
--- a/test/elf/Inputs/target-test.ppc
+++ b/test/old-elf/Inputs/target-test.ppc
Binary files differ
diff --git a/test/old-elf/Inputs/tls-tbss-size.yaml b/test/old-elf/Inputs/tls-tbss-size.yaml
new file mode 100644
index 000000000000..0577dd157c6e
--- /dev/null
+++ b/test/old-elf/Inputs/tls-tbss-size.yaml
@@ -0,0 +1,59 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Size: 16
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: t1.c
+ Type: STT_FILE
+ - Name: .tbss
+ Type: STT_TLS
+ Section: .tbss
+ Global:
+ - Name: t0
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+ - Name: t1
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: t2
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000008
+ Size: 0x0000000000000004
+ - Name: t3
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x000000000000000C
+ Size: 0x0000000000000004
+...
diff --git a/test/elf/Inputs/tls.S b/test/old-elf/Inputs/tls.S
index 7d9eab647b53..7d9eab647b53 100644
--- a/test/elf/Inputs/tls.S
+++ b/test/old-elf/Inputs/tls.S
diff --git a/test/elf/Inputs/tls.c b/test/old-elf/Inputs/tls.c
index 672350756562..672350756562 100644
--- a/test/elf/Inputs/tls.c
+++ b/test/old-elf/Inputs/tls.c
diff --git a/test/elf/Inputs/tls.x86-64 b/test/old-elf/Inputs/tls.x86-64
index b420ce89b19b..b420ce89b19b 100644
--- a/test/elf/Inputs/tls.x86-64
+++ b/test/old-elf/Inputs/tls.x86-64
Binary files differ
diff --git a/test/elf/Inputs/tlsAddr.x86-64 b/test/old-elf/Inputs/tlsAddr.x86-64
index 16cc9ab25abf..16cc9ab25abf 100644
--- a/test/elf/Inputs/tlsAddr.x86-64
+++ b/test/old-elf/Inputs/tlsAddr.x86-64
Binary files differ
diff --git a/test/elf/Inputs/tlsaddr.c b/test/old-elf/Inputs/tlsaddr.c
index f62d57b3bfb4..f62d57b3bfb4 100644
--- a/test/elf/Inputs/tlsaddr.c
+++ b/test/old-elf/Inputs/tlsaddr.c
diff --git a/test/elf/Inputs/undef-from-main-so.c b/test/old-elf/Inputs/undef-from-main-so.c
index f1cb63db7ada..f1cb63db7ada 100644
--- a/test/elf/Inputs/undef-from-main-so.c
+++ b/test/old-elf/Inputs/undef-from-main-so.c
diff --git a/test/elf/Inputs/undef-from-main.c b/test/old-elf/Inputs/undef-from-main.c
index 366d934dd84f..366d934dd84f 100644
--- a/test/elf/Inputs/undef-from-main.c
+++ b/test/old-elf/Inputs/undef-from-main.c
diff --git a/test/elf/Inputs/undef-pc32.o b/test/old-elf/Inputs/undef-pc32.o
index 954916d59991..954916d59991 100644
--- a/test/elf/Inputs/undef-pc32.o
+++ b/test/old-elf/Inputs/undef-pc32.o
Binary files differ
diff --git a/test/elf/Inputs/undef.o b/test/old-elf/Inputs/undef.o
index 3c9b60c6ca33..3c9b60c6ca33 100644
--- a/test/elf/Inputs/undef.o
+++ b/test/old-elf/Inputs/undef.o
Binary files differ
diff --git a/test/old-elf/Inputs/undef2-so.o.yaml b/test/old-elf/Inputs/undef2-so.o.yaml
new file mode 100644
index 000000000000..f640cea39a5d
--- /dev/null
+++ b/test/old-elf/Inputs/undef2-so.o.yaml
@@ -0,0 +1,49 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: 554889E5488B05000000008B005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000007
+ Symbol: myexportedsymbol
+ Type: R_X86_64_GOTPCREL
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000F
+ - Name: _GLOBAL_OFFSET_TABLE_
+ - Name: myexportedsymbol
diff --git a/test/elf/Inputs/use-shared-32s.c b/test/old-elf/Inputs/use-shared-32s.c
index 63054cb036ea..63054cb036ea 100644
--- a/test/elf/Inputs/use-shared-32s.c
+++ b/test/old-elf/Inputs/use-shared-32s.c
diff --git a/test/elf/Inputs/use-shared-32s.x86-64 b/test/old-elf/Inputs/use-shared-32s.x86-64
index 7e223677b93f..7e223677b93f 100644
--- a/test/elf/Inputs/use-shared-32s.x86-64
+++ b/test/old-elf/Inputs/use-shared-32s.x86-64
Binary files differ
diff --git a/test/elf/Inputs/use-shared.c b/test/old-elf/Inputs/use-shared.c
index b370eaa4fac2..b370eaa4fac2 100644
--- a/test/elf/Inputs/use-shared.c
+++ b/test/old-elf/Inputs/use-shared.c
diff --git a/test/elf/Inputs/use-shared.x86-64 b/test/old-elf/Inputs/use-shared.x86-64
index 25e1eb87a2b4..25e1eb87a2b4 100644
--- a/test/elf/Inputs/use-shared.x86-64
+++ b/test/old-elf/Inputs/use-shared.x86-64
Binary files differ
diff --git a/test/elf/Inputs/weaksym.o b/test/old-elf/Inputs/weaksym.o
index 010ce704a313..010ce704a313 100644
--- a/test/elf/Inputs/weaksym.o
+++ b/test/old-elf/Inputs/weaksym.o
Binary files differ
diff --git a/test/elf/Inputs/writersyms.o b/test/old-elf/Inputs/writersyms.o
index 7cd472d99d77..7cd472d99d77 100644
--- a/test/elf/Inputs/writersyms.o
+++ b/test/old-elf/Inputs/writersyms.o
Binary files differ
diff --git a/test/elf/Inputs/x86-64-relocs.S b/test/old-elf/Inputs/x86-64-relocs.S
index 2547c0f19bb0..2547c0f19bb0 100644
--- a/test/elf/Inputs/x86-64-relocs.S
+++ b/test/old-elf/Inputs/x86-64-relocs.S
diff --git a/test/old-elf/Mips/abi-flags-01.test b/test/old-elf/Mips/abi-flags-01.test
new file mode 100644
index 000000000000..d2eb13f3186a
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-01.test
@@ -0,0 +1,35 @@
+# Check rejecting .MIPS.abiflags section with a wrong version.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: {{.*}}abi-flags-01.test.tmp.o: .MIPS.abiflags section has unsupported version '1'
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ Version: 1
+ ISA: MIPS32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/abi-flags-02.test b/test/old-elf/Mips/abi-flags-02.test
new file mode 100644
index 000000000000..f3c1f29abc55
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-02.test
@@ -0,0 +1,92 @@
+# Check generation of .MIPS.abiflags section under the following conditions:
+# - There is the only input object file
+# - The input file has valid .MIPS.abiflags section
+#
+# The .MIPS.abiflags section in the output file should have the same
+# settings as the input section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -s -program-headers -mips-abi-flags %t.so | FileCheck %s
+
+# CHECK: Section {
+# CHECK: Index: 1
+# CHECK-NEXT: Name: .MIPS.abiflags
+# CHECK-NEXT: Type: SHT_MIPS_ABIFLAGS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: SHF_ALLOC
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Size: 24
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 24
+# CHECK-NEXT: }
+
+# CHECK: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_MIPS_ABIFLAGS (0x70000003)
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 24
+# CHECK-NEXT: MemSize: 24
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+
+# CHECK: MIPS ABI Flags {
+# CHECK-NEXT: Version: 0
+# CHECK-NEXT: ISA: MIPS32r2
+# CHECK-NEXT: ISA Extension: None (0x0)
+# CHECK-NEXT: ASEs [ (0x800)
+# CHECK-NEXT: microMIPS (0x800)
+# CHECK-NEXT: ]
+# CHECK-NEXT: FP ABI: Hard float (32-bit CPU, Any FPU) (0x5)
+# CHECK-NEXT: GPR size: 32
+# CHECK-NEXT: CPR1 size: 32
+# CHECK-NEXT: CPR2 size: 0
+# CHECK-NEXT: Flags 1 [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Flags 2: 0x0
+# CHECK-NEXT: }
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ISAExtension: EXT_NONE
+ ASEs: [ MICROMIPS ]
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/abi-flags-03.test b/test/old-elf/Mips/abi-flags-03.test
new file mode 100644
index 000000000000..a28bb2826730
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-03.test
@@ -0,0 +1,149 @@
+# Check generation of .MIPS.abiflags section under the following conditions:
+# - There are multiple input object files
+# - Every input file has valid .MIPS.abiflags section
+# - All .MIPS.abiflags sections are compatible with each other
+#
+# The .MIPS.abiflags section in the output file should reproduce result
+# of merging input object file sections.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t3.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t1.o %t2.o %t3.o
+# RUN: llvm-readobj -mips-abi-flags %t.so | FileCheck %s
+
+# CHECK: MIPS ABI Flags {
+# CHECK-NEXT: Version: 0
+# CHECK-NEXT: ISA: MIPS32r2
+# CHECK-NEXT: ISA Extension: None (0x0)
+# CHECK-NEXT: ASEs [ (0x810)
+# CHECK-NEXT: MDMX (0x10)
+# CHECK-NEXT: microMIPS (0x800)
+# CHECK-NEXT: ]
+# CHECK-NEXT: FP ABI: Hard float (double precision) (0x1)
+# CHECK-NEXT: GPR size: 32
+# CHECK-NEXT: CPR1 size: 64
+# CHECK-NEXT: CPR2 size: 0
+# CHECK-NEXT: Flags 1 [ (0x1)
+# CHECK-NEXT: ODDSPREG
+# CHECK-NEXT: ]
+# CHECK-NEXT: Flags 2: 0x0
+# CHECK-NEXT: }
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32, EF_MIPS_ARCH_ASE_MDMX]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ ISAExtension: EXT_NONE
+ ASEs: [ MDMX ]
+ FpABI: FP_DOUBLE
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ISAExtension: EXT_NONE
+ ASEs: [ MICROMIPS ]
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+ CPR2Size: REG_NONE
+ Flags1: [ODDSPREG]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o3.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ISAExtension: EXT_NONE
+ ASEs: [ MICROMIPS ]
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/abi-flags-04.test b/test/old-elf/Mips/abi-flags-04.test
new file mode 100644
index 000000000000..6cde797dd3a0
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-04.test
@@ -0,0 +1,125 @@
+# Check generation of .MIPS.abiflags section under the following conditions:
+# - There are multiple input object files
+# - Every input file has valid .MIPS.abiflags section
+# - .MIPS.abiflags sections have different but compatible FP ABI
+#
+# The .MIPS.abiflags section in the output file should reproduce result
+# of merging FP ABI flags.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-xx.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-double.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-64.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-64a.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1 %t-xx.o %t-double.o
+# RUN: llvm-readobj -mips-abi-flags %t1 | FileCheck -check-prefix=XX-DOUBLE %s
+
+# XX-DOUBLE: FP ABI: Hard float (double precision) (0x1)
+# XX-DOUBLE: GPR size: 32
+# XX-DOUBLE: CPR1 size: 32
+# XX-DOUBLE: Flags 1 [ (0x0)
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2 %t-xx.o %t-64.o
+# RUN: llvm-readobj -mips-abi-flags %t2 | FileCheck -check-prefix=XX-64 %s
+
+# XX-64: FP ABI: Hard float (32-bit CPU, 64-bit FPU) (0x6)
+# XX-64: GPR size: 32
+# XX-64: CPR1 size: 64
+# XX-64: Flags 1 [ (0x1)
+# XX-64: ODDSPREG (0x1)
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t3 %t-xx.o %t-64a.o
+# RUN: llvm-readobj -mips-abi-flags %t3 | FileCheck -check-prefix=XX-64A %s
+
+# XX-64A: FP ABI: Hard float compat (32-bit CPU, 64-bit FPU) (0x7)
+# XX-64A: GPR size: 32
+# XX-64A: CPR1 size: 64
+# XX-64A: Flags 1 [ (0x0)
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t4 %t-64.o %t-64a.o
+# RUN: llvm-readobj -mips-abi-flags %t4 | FileCheck -check-prefix=64-64A %s
+
+# 64-64A: FP ABI: Hard float (32-bit CPU, 64-bit FPU) (0x6)
+# 64-64A: GPR size: 32
+# 64-64A: CPR1 size: 64
+# 64-64A: Flags 1 [ (0x1)
+# 64-64A: ODDSPREG (0x1)
+
+# xx.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+
+# double.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_DOUBLE
+ GPRSize: REG_32
+ CPR1Size: REG_32
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ FpABI: FP_64
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ Flags1: [ODDSPREG]
+
+# 64a.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ FpABI: FP_64A
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ Flags1: []
+...
diff --git a/test/old-elf/Mips/abi-flags-05.test b/test/old-elf/Mips/abi-flags-05.test
new file mode 100644
index 000000000000..6a009db7344a
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-05.test
@@ -0,0 +1,186 @@
+# Check generation of .MIPS.abiflags section under the following conditions:
+# - There are multiple input object files
+# - Every input file has valid .MIPS.abiflags section
+# - .MIPS.abiflags sections have different and incompatible FP ABI
+#
+# The .MIPS.abiflags section in the output file should reproduce result
+# of merging FP ABI flags but the linker must show a warning.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-xx.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-dbl.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-sgl.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-soft.o
+# RUN: yaml2obj -format=elf -docnum 5 %s > %t-64.o
+# RUN: yaml2obj -format=elf -docnum 6 %s > %t-64a.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1 %t-xx.o %t-sgl.o 2>&1 \
+# RUN: | FileCheck -check-prefix=XX-SINGLE-WARN %s
+
+# XX-SINGLE-WARN: FP ABI {{-mfpxx|-msingle-float}} is incompatible with {{-msingle-float|-mfpxx}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2 %t-xx.o %t-soft.o 2>&1 \
+# RUN: | FileCheck -check-prefix=XX-SOFT-WARN %s
+
+# XX-SOFT-WARN: FP ABI {{-mfpxx|-msoft-float}} is incompatible with {{-msoft-float|-mfpxx}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t3 %t-dbl.o %t-sgl.o 2>&1 \
+# RUN: | FileCheck -check-prefix=DOUBLE-SINGLE-WARN %s
+
+# DOUBLE-SINGLE-WARN: FP ABI {{-mdouble-float|-msingle-float}} is incompatible with {{-msingle-float|-mdouble-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t4 %t-dbl.o %t-soft.o 2>&1 \
+# RUN: | FileCheck -check-prefix=DOUBLE-SOFT-WARN %s
+
+# DOUBLE-SOFT-WARN: FP ABI {{-mdouble-float|-msoft-float}} is incompatible with {{-msoft-float|-mdouble-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t5 %t-dbl.o %t-64.o 2>&1 \
+# RUN: | FileCheck -check-prefix=DOUBLE-64-WARN %s
+
+# DOUBLE-64-WARN: FP ABI {{-mdouble-float|-mgp32 -mfp64}} is incompatible with {{-mgp32 -mfp64|-mdouble-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t6 %t-dbl.o %t-64a.o 2>&1 \
+# RUN: | FileCheck -check-prefix=DOUBLE-64A-WARN %s
+
+# DOUBLE-64A-WARN: FP ABI {{-mdouble-float|-mgp32 -mfp64 -mno-odd-spreg}} is incompatible with {{-mgp32 -mfp64 -mno-odd-spreg|-mdouble-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t7 %t-sgl.o %t-soft.o 2>&1 \
+# RUN: | FileCheck -check-prefix=SINGLE-SOFT-WARN %s
+
+# SINGLE-SOFT-WARN: FP ABI {{-msingle-float|-msoft-float}} is incompatible with {{-msoft-float|-msingle-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t8 %t-sgl.o %t-64.o 2>&1 \
+# RUN: | FileCheck -check-prefix=SINGLE-64-WARN %s
+
+# SINGLE-64-WARN: FP ABI {{-msingle-float|-mgp32 -mfp64}} is incompatible with {{-mgp32 -mfp64|-msingle-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t9 %t-sgl.o %t-64a.o 2>&1 \
+# RUN: | FileCheck -check-prefix=SINGLE-64A-WARN %s
+
+# SINGLE-64A-WARN: FP ABI {{-msingle-float|-mgp32 -mfp64 -mno-odd-spreg}} is incompatible with {{-mgp32 -mfp64 -mno-odd-spreg|-msingle-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t10 %t-soft.o %t-64.o 2>&1 \
+# RUN: | FileCheck -check-prefix=SOFT-64-WARN %s
+
+# SOFT-64-WARN: FP ABI {{-msoft-float|-mgp32 -mfp64}} is incompatible with {{-mgp32 -mfp64|-msoft-float}}
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t11 %t-soft.o %t-64a.o 2>&1 \
+# RUN: | FileCheck -check-prefix=SOFT-64A-WARN %s
+
+# SOFT-64A-WARN: FP ABI {{-msoft-float|-mgp32 -mfp64 -mno-odd-spreg}} is incompatible with {{-mgp32 -mfp64 -mno-odd-spreg|-msoft-float}}
+
+# xx.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+
+# double.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_DOUBLE
+ GPRSize: REG_32
+ CPR1Size: REG_32
+
+# single.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_SINGLE
+ GPRSize: REG_32
+ CPR1Size: REG_32
+
+# soft.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ FpABI: FP_SOFT
+ GPRSize: REG_32
+ CPR1Size: REG_NONE
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ FpABI: FP_64
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ Flags1: [ODDSPREG]
+
+# 64a.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ FpABI: FP_64A
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ Flags1: []
+...
diff --git a/test/old-elf/Mips/abi-flags-06.test b/test/old-elf/Mips/abi-flags-06.test
new file mode 100644
index 000000000000..d7df379039bb
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-06.test
@@ -0,0 +1,79 @@
+# Check generation of .MIPS.abiflags section under the following conditions:
+# - There are multiple input object files
+# - Not all input files have a .MIPS.abiflags section
+#
+# The .MIPS.abiflags section in the output file should reproduce result
+# of merging input object file sections and data come from ELF header flags.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-abi.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-elf.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-abi.o %t-elf.o
+# RUN: llvm-readobj -mips-abi-flags %t.so | FileCheck %s
+
+# CHECK: MIPS ABI Flags {
+# CHECK-NEXT: Version: 0
+# CHECK-NEXT: ISA: MIPS32r2
+# CHECK-NEXT: ISA Extension: None (0x0)
+# CHECK-NEXT: ASEs [ (0x810)
+# CHECK-NEXT: MDMX (0x10)
+# CHECK-NEXT: microMIPS (0x800)
+# CHECK-NEXT: ]
+# CHECK-NEXT: FP ABI: Hard float (double precision) (0x1)
+# CHECK-NEXT: GPR size: 32
+# CHECK-NEXT: CPR1 size: 64
+# CHECK-NEXT: CPR2 size: 0
+# CHECK-NEXT: Flags 1 [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Flags 2: 0x0
+# CHECK-NEXT: }
+
+# abi.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32, EF_MIPS_ARCH_ASE_MDMX]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ ISAExtension: EXT_NONE
+ ASEs: [ MDMX ]
+ FpABI: FP_DOUBLE
+ GPRSize: REG_32
+ CPR1Size: REG_64
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+# elf.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/abi-flags-07.test b/test/old-elf/Mips/abi-flags-07.test
new file mode 100644
index 000000000000..6cae9b2feb4d
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-07.test
@@ -0,0 +1,60 @@
+# Check that .MIPS.abiflags section is not written if no input object files
+# contain that section.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t1.o %t2.o
+# RUN: llvm-readobj -mips-abi-flags %t.so | FileCheck %s
+
+# CHECK: There is no .MIPS.abiflags section in the file.
+
+# abi.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32, EF_MIPS_ARCH_ASE_MDMX]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# elf.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/abi-flags-08.test b/test/old-elf/Mips/abi-flags-08.test
new file mode 100644
index 000000000000..c4b75bcf4516
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-08.test
@@ -0,0 +1,71 @@
+# Check that the linker shows errors if ELF header flags
+# and .MIPS.abiflags section are incompatible.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-isa.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-ext.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-ases.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t-isa.o 2>&1 \
+# RUN: | FileCheck -check-prefix=ISA-ERR %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t-ext.o 2>&1 \
+# RUN: | FileCheck -check-prefix=EXT-ERR %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t3.so %t-ases.o 2>&1 \
+# RUN: | FileCheck -check-prefix=ASE-ERR %s
+# RUN: llvm-readobj -mips-abi-flags %t1.so %t2.so %t3.so \
+# RUN: | FileCheck -check-prefix=SEC %s
+
+# ISA-ERR: inconsistent ISA between .MIPS.abiflags and ELF header e_flags field
+# EXT-ERR: inconsistent ISA between .MIPS.abiflags and ELF header e_flags field
+# ASE-ERR: inconsistent ASEs between .MIPS.abiflags and ELF header e_flags field
+
+# SEC: There is no .MIPS.abiflags section in the file.
+
+# isa.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+
+# ext.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_3, EF_MIPS_MACH_4650]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS3
+ ISAExtension: EXT_4120
+
+# ases.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ASEs: []
+
+...
diff --git a/test/old-elf/Mips/abi-flags-09.test b/test/old-elf/Mips/abi-flags-09.test
new file mode 100644
index 000000000000..1ab03abe3810
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-09.test
@@ -0,0 +1,67 @@
+# Check position of PT_MIPS_ABIFLAGS segment.
+# It should go right after the PT_INTERP segment.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_INTERP
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 13
+# CHECK-NEXT: MemSize: 13
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 1
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_MIPS_ABIFLAGS
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 24
+# CHECK-NEXT: MemSize: 24
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 8
+# CHECK-NEXT: }
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ISAExtension: EXT_NONE
+ ASEs: [ MICROMIPS ]
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/abi-flags-10.test b/test/old-elf/Mips/abi-flags-10.test
new file mode 100644
index 000000000000..50732d5c1151
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-10.test
@@ -0,0 +1,60 @@
+# Check that SHT_MIPS_REGINFO section does not get a separate segment
+# if there is a SHT_MIPS_ABIFLAGS section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+
+# CHECK: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_PHDR
+# CHECK: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_INTERP
+# CHECK: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_MIPS_ABIFLAGS
+# CHECK: }
+# CHECK-NOT: Type: PT_MIPS_REGINFO
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "F0000000E0000000D0000000C0000000B000000000100000"
+
+- Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 2
+ ISAExtension: EXT_NONE
+ ASEs: [ MICROMIPS ]
+ FpABI: FP_XX
+ GPRSize: REG_32
+ CPR1Size: REG_32
+ CPR2Size: REG_NONE
+ Flags1: [ ]
+ Flags2: 0x0
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/abi-flags-11.test b/test/old-elf/Mips/abi-flags-11.test
new file mode 100644
index 000000000000..e0e8547abbc7
--- /dev/null
+++ b/test/old-elf/Mips/abi-flags-11.test
@@ -0,0 +1,59 @@
+# Check position of PT_MIPS_REGINFO segment.
+# It should go right after the PT_INTERP segment.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_INTERP
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 13
+# CHECK-NEXT: MemSize: 13
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 1
+# CHECK-NEXT: }
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_MIPS_REGINFO
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 24
+# CHECK-NEXT: MemSize: 24
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4
+# CHECK-NEXT: }
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ Size: 4
+ AddressAlign: 16
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "F0000000E0000000D0000000C0000000B000000000100000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/base-address-64.test b/test/old-elf/Mips/base-address-64.test
new file mode 100644
index 000000000000..6b553d227820
--- /dev/null
+++ b/test/old-elf/Mips/base-address-64.test
@@ -0,0 +1,80 @@
+# Check executable base address configuration. Base address should be
+# equal to 0x400000 and the MIPS_BASE_ADDRESS dynamic tag's value should
+# be the same.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el --noinhibit-exec -o %t.exe %t.o
+# RUN: llvm-readobj -dynamic-table -program-headers %t.exe | FileCheck %s
+
+# CHECK: DynamicSection [ (15 entries)
+# CHECK: Tag Type Name/Value
+# CHECK-NEXT: 0x0000000000000004 HASH 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x0000000000000005 STRTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x0000000000000006 SYMTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x000000000000000A STRSZ 1 (bytes)
+# CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes)
+# CHECK-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 1
+# CHECK-NEXT: 0x0000000070000016 MIPS_RLD_MAP 0x120002000
+# CHECK-NEXT: 0x0000000070000035 MIPS_RLD_MAP_REL 0x1DB8
+# CHECK-NEXT: 0x0000000070000005 MIPS_FLAGS NOTPOT
+# CHECK-NEXT: 0x0000000070000006 MIPS_BASE_ADDRESS 0x120000000
+# CHECK-NEXT: 0x000000007000000A MIPS_LOCAL_GOTNO 2
+# CHECK-NEXT: 0x0000000070000011 MIPS_SYMTABNO 1
+# CHECK-NEXT: 0x0000000070000013 MIPS_GOTSYM 0x1
+# CHECK-NEXT: 0x0000000000000003 PLTGOT 0x120001000
+# CHECK-NEXT: 0x0000000000000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# CHECK: ProgramHeaders [
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_PHDR (0x6)
+# CHECK: Offset: 0x40
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_INTERP (0x3)
+# CHECK: Offset: 0x190
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD (0x1)
+# CHECK-NEXT: Offset: 0x0
+# CHECK-NEXT: VirtualAddress: 0x120000000
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_64R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x10
+ Size: 0x00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x10
+ Size: 0x00
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/base-address.test b/test/old-elf/Mips/base-address.test
new file mode 100644
index 000000000000..67c04326cc15
--- /dev/null
+++ b/test/old-elf/Mips/base-address.test
@@ -0,0 +1,95 @@
+# Check executable base address configuration. Base address should be
+# equal to 0x400000 and the MIPS_BASE_ADDRESS dynamic tag's value should
+# be the same.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel --noinhibit-exec -o %t.exe %t.o
+# RUN: llvm-readobj -dynamic-table -program-headers %t.exe | FileCheck %s
+
+# CHECK: DynamicSection [ (15 entries)
+# CHECK: Tag Type Name/Value
+# CHECK-NEXT: 0x00000004 HASH 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000005 STRTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000006 SYMTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x0000000A STRSZ 1 (bytes)
+# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
+# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
+# CHECK-NEXT: 0x70000016 MIPS_RLD_MAP 0x402000
+# CHECK-NEXT: 0x70000035 MIPS_RLD_MAP_REL 0x1E9C
+# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
+# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x400000
+# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
+# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 1
+# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x1
+# CHECK-NEXT: 0x00000003 PLTGOT 0x401000
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# CHECK: ProgramHeaders [
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_PHDR (0x6)
+# CHECK: Offset: 0x34
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_INTERP (0x3)
+# CHECK: Offset: 0xF4
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD (0x1)
+# CHECK: Offset: 0x0
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD (0x1)
+# CHECK: Offset: 0x1000
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_LOAD (0x1)
+# CHECK: Offset: 0x2000
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ProgramHeader {
+# CHECK: Type: PT_DYNAMIC (0x2)
+# CHECK: Offset: 0x12C
+# CHECK: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK: }
+# CHECK: ]
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/ctors-order.test b/test/old-elf/Mips/ctors-order.test
new file mode 100644
index 000000000000..b33ed43292e7
--- /dev/null
+++ b/test/old-elf/Mips/ctors-order.test
@@ -0,0 +1,164 @@
+# Check ordering of .ctors.* sections.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-crtbeginS.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-crtendS.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-obj.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --output-filetype=yaml \
+# RUN: %t-crtbeginS.o %t-obj.o %t-crtendS.o | FileCheck %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-crtbeginS.o %t-obj.o %t-crtendS.o
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=RAW %s
+
+# CHECK: defined-atoms:
+# CHECK-NEXT: - type: data
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors
+# CHECK-NEXT: references:
+# CHECK-NEXT: - kind: layout-after
+# CHECK-NEXT: offset: 0
+# CHECK-NEXT: target: __CTOR_LIST__
+# CHECK-NEXT: - name: __CTOR_LIST__
+# CHECK-NEXT: type: data
+# CHECK-NEXT: content: [ FF, FF, FF, FF ]
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors
+# CHECK-NEXT: - type: data
+# CHECK-NEXT: content: [ 11, 11, 11, 11 ]
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors.1
+# CHECK-NEXT: - type: data
+# CHECK-NEXT: content: [ 22, 22, 22, 22 ]
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors.2
+# CHECK-NEXT: - ref-name: L004
+# CHECK-NEXT: type: data
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors
+# CHECK-NEXT: references:
+# CHECK-NEXT: - kind: layout-after
+# CHECK-NEXT: offset: 0
+# CHECK-NEXT: target: __CTOR_END__
+# CHECK-NEXT: - name: __CTOR_END__
+# CHECK-NEXT: type: data
+# CHECK-NEXT: content: [ 00, 00, 00, 00 ]
+# CHECK-NEXT: alignment: 4
+# CHECK-NEXT: section-choice: custom-required
+# CHECK-NEXT: section-name: .ctors
+
+# RAW: Contents of section .ctors:
+# RAW-NEXT: 1000 ffffffff 11111111 22222222 00000000
+
+# crtbeginS.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .ctors
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Content: 'FFFFFFFF'
+
+Symbols:
+ Local:
+ - Name: .ctors
+ Type: STT_SECTION
+ Section: .ctors
+ - Name: __CTOR_LIST__
+ Type: STT_OBJECT
+ Section: .ctors
+
+# crtendS.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x0F
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: .ctors
+ Type: R_MIPS_GOT16
+ - Offset: 0x04
+ Symbol: .ctors
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: .ctors
+ Type: R_MIPS_GOT16
+ - Offset: 0x0C
+ Symbol: .ctors
+ Type: R_MIPS_LO16
+ - Name: .ctors
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .ctors
+ Type: STT_SECTION
+ Section: .ctors
+ - Name: __CTOR_END__
+ Type: STT_OBJECT
+ Section: .ctors
+ - Name: __do_global_ctors_aux
+ Type: STT_FUNC
+ Section: .text
+
+# obj.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .ctors.2
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Content: '22222222'
+ - Name: .ctors.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Content: '11111111'
+
+Symbols:
+ Local:
+ - Name: .ctors.2
+ Type: STT_SECTION
+ Section: .ctors.2
+ - Name: .ctors.1
+ Type: STT_SECTION
+ Section: .ctors.1
+...
diff --git a/test/old-elf/Mips/driver-hash-style.test b/test/old-elf/Mips/driver-hash-style.test
new file mode 100644
index 000000000000..0ab636c427c9
--- /dev/null
+++ b/test/old-elf/Mips/driver-hash-style.test
@@ -0,0 +1,15 @@
+# REQUIRES: mips
+
+# Check that the driver rejects all --hash-style arguments except 'sysv'
+# because it is the only style supported by MIPS ABI.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: not lld -flavor old-gnu -target mips --hash-style=both %t.o -o %t.exe 2>&1 \
+# RUN: | FileCheck %s
+# RUN: not lld -flavor old-gnu -target mips --hash-style=gnu %t.o -o %t.exe 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: error: .gnu.hash is incompatible with the MIPS ABI
+
+ .globl __start;
+__start:
diff --git a/test/old-elf/Mips/dt-textrel-64.test b/test/old-elf/Mips/dt-textrel-64.test
new file mode 100644
index 000000000000..152e82372799
--- /dev/null
+++ b/test/old-elf/Mips/dt-textrel-64.test
@@ -0,0 +1,74 @@
+# Check that if a dynamic relocation R_MIPS_64 modify a read-only section,
+# .dynamic section contains the DT_TEXTREL tag.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: 0x{{[0-9A-F]+}} TEXTREL
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x08
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Size: 0x8
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_64
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/dt-textrel.test b/test/old-elf/Mips/dt-textrel.test
new file mode 100644
index 000000000000..af86f4926273
--- /dev/null
+++ b/test/old-elf/Mips/dt-textrel.test
@@ -0,0 +1,74 @@
+# Check that if a dynamic relocation modify a read-only section,
+# .dynamic section contains the DT_TEXTREL tag.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: 0x{{[0-9A-F]+}} TEXTREL
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x04
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '00000000'
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/dynamic-linking.test b/test/old-elf/Mips/dynamic-linking.test
new file mode 100644
index 000000000000..aeab7645ed51
--- /dev/null
+++ b/test/old-elf/Mips/dynamic-linking.test
@@ -0,0 +1,22 @@
+# REQUIRES: mips
+
+# Check _DYNAMIC_LINKING symbol definition.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: lld -flavor old-gnu -target mips %t.o -o %t.exe
+# RUN: llvm-nm %t.exe | FileCheck -check-prefix=EXE-DYN %s
+
+# EXE-DYN: 00000001 A _DYNAMIC_LINKING
+
+# RUN: lld -flavor old-gnu -target mips -static %t.o -o %t.exe
+# RUN: llvm-nm -just-symbol-name %t.exe | FileCheck -check-prefix=EXE-STATIC %s
+
+# EXE-STATIC-NOT: _DYNAMIC_LINKING
+
+# RUN: lld -flavor old-gnu -target mips -shared %t.o -o %t.so
+# RUN: llvm-nm -just-symbol-name %t.so | FileCheck -check-prefix=DYNLIB %s
+
+# DYNLIB-NOT: _DYNAMIC_LINKING
+
+ .globl __start;
+__start:
diff --git a/test/old-elf/Mips/dynamic-sym.test b/test/old-elf/Mips/dynamic-sym.test
new file mode 100644
index 000000000000..43a69d82c3a3
--- /dev/null
+++ b/test/old-elf/Mips/dynamic-sym.test
@@ -0,0 +1,41 @@
+# Check _DYNAMIC symbol's value
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -e T0 -o %t.so %t.o
+# RUN: llvm-objdump -h -t %t.so | FileCheck -check-prefix=SHARED %s
+
+# SHARED: Sections:
+# SHARED: Idx Name Size Address Type
+# SHARED: 5 .dynamic 00000068 00000000[[ADDR:[0-9a-f]+]]
+
+# SHARED: SYMBOL TABLE:
+# SHARED: [[ADDR]] g .dynamic 00000000 _DYNAMIC
+
+# RUN: lld -flavor old-gnu -target mipsel -e main -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -h -t %t.exe | FileCheck -check-prefix=EXE %s
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .dynamic 00000078 00000000[[ADDR:[0-9a-f]+]]
+
+# EXE: SYMBOL TABLE:
+# EXE: [[ADDR]] g .dynamic 00000000 _DYNAMIC
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 0x10
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
diff --git a/test/old-elf/Mips/dynlib-dynamic.test b/test/old-elf/Mips/dynlib-dynamic.test
new file mode 100644
index 000000000000..fca036a52624
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-dynamic.test
@@ -0,0 +1,110 @@
+# Check MIPS specific tags in the dynamic table.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t.so %t.o
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: DynamicSection [ (13 entries)
+# CHECK: Tag Type Name/Value
+# CHECK-NEXT: 0x00000004 HASH 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000005 STRTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000006 SYMTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x0000000A STRSZ 17 (bytes)
+# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
+# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
+# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
+# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x0
+# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 4
+# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 4
+# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x2
+# CHECK-NEXT: 0x00000003 PLTGOT 0x1000
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x18
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: '$.str1'
+ Type: R_MIPS_GOT16
+ - Offset: 0x04
+ Symbol: '$.str1'
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: '$.str2'
+ Type: R_MIPS_GOT16
+ - Offset: 0x0C
+ Symbol: '$.str2'
+ Type: R_MIPS_LO16
+ - Offset: 0x10
+ Symbol: glob2
+ Type: R_MIPS_CALL16
+ - Offset: 0x14
+ Symbol: ext1
+ Type: R_MIPS_CALL16
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .rodata.str1
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+ - Name: .rodata.str2
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+
+Symbols:
+ Local:
+ - Name: '$.str1'
+ Section: .rodata.str1
+ - Name: '$.str2'
+ Section: .rodata.str2
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .rodata.str1
+ Type: STT_SECTION
+ Section: .rodata.str1
+ - Name: .rodata.str2
+ Type: STT_SECTION
+ Section: .rodata.str2
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: ext1
+ - Name: glob2
diff --git a/test/old-elf/Mips/dynlib-dynsym-micro.test b/test/old-elf/Mips/dynlib-dynsym-micro.test
new file mode 100644
index 000000000000..6757847fac73
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-dynsym-micro.test
@@ -0,0 +1,208 @@
+# 1. Check sorting of .dynsym content accordingly to .got section
+# in case of using microMIPS relocations.
+# 2. Check that microMIPS records in a dynamic symbol table have:
+# - cleared the STO_MIPS_MICROMIPS flag
+# - adjusted adress
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t-so %t.o
+# RUN: llvm-readobj -dyn-symbols %t-so | FileCheck -check-prefix=CHECK-DYN %s
+
+# Build shared library (yaml format)
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec \
+# RUN: --output-filetype=yaml -o %t-yaml %t.o
+# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t-yaml
+
+# CHECK-DYN: Format: ELF32-mips
+# CHECK-DYN: Arch: mipsel
+# CHECK-DYN: AddressSize: 32bit
+# CHECK-DYN: LoadName:
+# CHECK-DYN: DynamicSymbols [
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: @ (0)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Local (0x0)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: bar@ (5)
+# CHECK-DYN: Value: 0x139
+# CHECK-DYN: Size: 4
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: Function (0x2)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: .text (0x4)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: foo@ (1)
+# CHECK-DYN: Value: 0x121
+# CHECK-DYN: Size: 24
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: Function (0x2)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: .text (0x4)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: ext1@ (9)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: ext2@ (14)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: ]
+
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 80 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - ref-name: L000
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: L007
+# CHECK-GOT: - ref-name: L002
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: L008
+# CHECK-GOT: - ref-name: L004
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: foo
+# CHECK-GOT: - ref-name: L005
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: ext1
+# CHECK-GOT: - ref-name: L006
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: ext2
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x1C
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: .rodata.str1
+ Type: R_MICROMIPS_GOT16
+ - Offset: 0x04
+ Symbol: .rodata.str1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x08
+ Symbol: .rodata.str2
+ Type: R_MICROMIPS_GOT16
+ - Offset: 0x0C
+ Symbol: .rodata.str2
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x10
+ Symbol: foo
+ Type: R_MICROMIPS_CALL16
+ - Offset: 0x14
+ Symbol: ext1
+ Type: R_MICROMIPS_CALL16
+ - Offset: 0x18
+ Symbol: ext2
+ Type: R_MICROMIPS_CALL16
+ - Name: .rodata.str1
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+ - Name: .rodata.str2
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .rodata.str1
+ Type: STT_SECTION
+ Section: .rodata.str1
+ - Name: .rodata.str2
+ Type: STT_SECTION
+ Section: .rodata.str2
+ Global:
+ - Name: bar
+ Section: .text
+ Value: 0x18
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: foo
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: ext1
+ - Name: ext2
+...
diff --git a/test/old-elf/Mips/dynlib-dynsym.test b/test/old-elf/Mips/dynlib-dynsym.test
new file mode 100644
index 000000000000..23b0cd6a90c2
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-dynsym.test
@@ -0,0 +1,202 @@
+# Check sorting of .dynsym content accordingly to .got section.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t-so %t.o
+# RUN: llvm-readobj -dyn-symbols %t-so | FileCheck -check-prefix=CHECK-DYN %s
+
+# Build shared library (yaml format)
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec \
+# RUN: --output-filetype=yaml -o %t-yaml %t.o
+# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t-yaml
+
+# CHECK-DYN: Format: ELF32-mips
+# CHECK-DYN: Arch: mipsel
+# CHECK-DYN: AddressSize: 32bit
+# CHECK-DYN: LoadName:
+# CHECK-DYN: DynamicSymbols [
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: @ (0)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Local (0x0)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: bar@ (5)
+# CHECK-DYN: Value: 0x138
+# CHECK-DYN: Size: 4
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: Function (0x2)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: .text (0x4)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: foo@ (1)
+# CHECK-DYN: Value: 0x120
+# CHECK-DYN: Size: 24
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: Function (0x2)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: .text (0x4)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: ext1@ (9)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: ext2@ (14)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Global (0x1)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: ]
+
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 80 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - ref-name: L000
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: L007
+# CHECK-GOT: - ref-name: L002
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_32_HI16
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: L008
+# CHECK-GOT: - ref-name: L004
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: foo
+# CHECK-GOT: - ref-name: L005
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: ext1
+# CHECK-GOT: - ref-name: L006
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: ext2
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x1C
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: .rodata.str1
+ Type: R_MIPS_GOT16
+ - Offset: 0x04
+ Symbol: .rodata.str1
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: .rodata.str2
+ Type: R_MIPS_GOT16
+ - Offset: 0x0C
+ Symbol: .rodata.str2
+ Type: R_MIPS_LO16
+ - Offset: 0x10
+ Symbol: foo
+ Type: R_MIPS_CALL16
+ - Offset: 0x14
+ Symbol: ext1
+ Type: R_MIPS_CALL16
+ - Offset: 0x18
+ Symbol: ext2
+ Type: R_MIPS_CALL16
+ - Name: .rodata.str1
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+ - Name: .rodata.str2
+ Type: SHT_PROGBITS
+ AddressAlign: 0x01
+ Size: 0x05
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .rodata.str1
+ Type: STT_SECTION
+ Section: .rodata.str1
+ - Name: .rodata.str2
+ Type: STT_SECTION
+ Section: .rodata.str2
+ Global:
+ - Name: bar
+ Section: .text
+ Value: 0x18
+ - Name: foo
+ Section: .text
+ - Name: ext1
+ - Name: ext2
+...
diff --git a/test/old-elf/Mips/dynlib-fileheader-64.test b/test/old-elf/Mips/dynlib-fileheader-64.test
new file mode 100644
index 000000000000..f3b45d4d738e
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-fileheader-64.test
@@ -0,0 +1,72 @@
+# Check ELF Header for 64-bit shared library.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Format: ELF64-mips
+# CHECK: Arch: mips64el
+# CHECK: AddressSize: 64bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 64-bit (0x2)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 0
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: SharedObject (0x3)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x80000006)
+# CHECK: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_PIC (0x2)
+# CHECK: ]
+# CHECK: HeaderSize: 64
+# CHECK: ProgramHeaderEntrySize: 56
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 64
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ Global:
+ - Name: data
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/dynlib-fileheader-micro-64.test b/test/old-elf/Mips/dynlib-fileheader-micro-64.test
new file mode 100644
index 000000000000..531cee134caf
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-fileheader-micro-64.test
@@ -0,0 +1,75 @@
+# Check ELF Header for shared library in case of microMIPS symbols.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Format: ELF64-mips
+# CHECK-NEXT: Arch: mips64el
+# CHECK-NEXT: AddressSize: 64bit
+# CHECK-NEXT: LoadName:
+# CHECK-NEXT: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 64-bit (0x2)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: SharedObject (0x3)
+# CHECK-NEXT: Machine: EM_MIPS (0x8)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Flags [ (0x82000007)
+# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK-NEXT: EF_MIPS_CPIC (0x4)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: EF_MIPS_PIC (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 64
+# CHECK-NEXT: ProgramHeaderEntrySize: 56
+# CHECK-NEXT: ProgramHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: SectionHeaderEntrySize: 64
+# CHECK-NEXT: SectionHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: StringTableSectionIndex: {{[0-9]+}}
+# CHECK-NEXT:}
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_64R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/old-elf/Mips/dynlib-fileheader-micro.test b/test/old-elf/Mips/dynlib-fileheader-micro.test
new file mode 100644
index 000000000000..dcd38f1036d0
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-fileheader-micro.test
@@ -0,0 +1,79 @@
+# Check ELF Header for shared library in case of microMIPS symbols.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK-NEXT: Arch: mipsel
+# CHECK-NEXT: AddressSize: 32bit
+# CHECK-NEXT: LoadName:
+# CHECK-NEXT: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 32-bit (0x1)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: SharedObject (0x3)
+# CHECK-NEXT: Machine: EM_MIPS (0x8)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Flags [ (0x72001007)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
+# CHECK-NEXT: EF_MIPS_CPIC (0x4)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: EF_MIPS_PIC (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 52
+# CHECK-NEXT: ProgramHeaderEntrySize: 32
+# CHECK-NEXT: ProgramHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: SectionHeaderEntrySize: 40
+# CHECK-NEXT: SectionHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: StringTableSectionIndex: {{[0-9]+}}
+# CHECK-NEXT:}
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x08
+ ISA: MIPS32
+ ISARevision: 2
+ ASEs: [ MICROMIPS ]
+
+Symbols:
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/old-elf/Mips/dynlib-fileheader.test b/test/old-elf/Mips/dynlib-fileheader.test
new file mode 100644
index 000000000000..a3b4a19a90f1
--- /dev/null
+++ b/test/old-elf/Mips/dynlib-fileheader.test
@@ -0,0 +1,76 @@
+# Check ELF Header for shared library.
+
+# Build shared library
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 32-bit (0x1)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 0
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: SharedObject (0x3)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x70001007)
+# CHECK: EF_MIPS_ABI_O32 (0x1000)
+# CHECK: EF_MIPS_ARCH_32R2 (0x70000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: EF_MIPS_PIC (0x2)
+# CHECK: ]
+# CHECK: HeaderSize: 52
+# CHECK: ProgramHeaderEntrySize: 32
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 40
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK:}
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x00
+ - Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x08
+ ISA: MIPS32
+ ISARevision: 2
+
+Symbols:
+ Global:
+ - Name: glob
+ Section: .text
diff --git a/test/old-elf/Mips/dynsym-table-1.test b/test/old-elf/Mips/dynsym-table-1.test
new file mode 100644
index 000000000000..8821ae358254
--- /dev/null
+++ b/test/old-elf/Mips/dynsym-table-1.test
@@ -0,0 +1,127 @@
+# Check that LLD does not populate an executable file dynamic symbol table
+# by unnecessary symbols.
+# 1. bar.so defines T2
+# 2. foo.so defines T1 and references T2
+# 3. main.o reference T1
+# 4. a.out dynamic table should contain T1 entry only
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-bar.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-foo.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-bar.so %t-bar.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-foo.so %t-foo.o %t-bar.so
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe --as-needed \
+# RUN: %t-main.o %t-foo.so %t-bar.so
+# RUN: llvm-readobj -dt -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ ({{.*}})
+# CHECK-NEXT: Value: {{.*}}
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 8
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: 0x00000003 PLTGOT 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (dynsym-table-1.test.tmp-foo.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+
+# bar.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+Symbols:
+ Global:
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+
+# foo.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x08
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MIPS_CALL16
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: T2
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x08
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/dynsym-table-2.test b/test/old-elf/Mips/dynsym-table-2.test
new file mode 100644
index 000000000000..ad85bfe84e43
--- /dev/null
+++ b/test/old-elf/Mips/dynsym-table-2.test
@@ -0,0 +1,105 @@
+# Check that LLD does not populate a shared library dynamic symbol table
+# by unnecessary symbols.
+# 1. bar.so defines T2 and T3
+# 2. foo.so defines T1 and references T2
+# 4. foo.so dynamic table should contain T1 and T2 entries only
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-bar.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-foo.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-bar.so %t-bar.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-foo.so %t-foo.o %t-bar.so
+# RUN: llvm-readobj -dt -dynamic-table %t-foo.so | FileCheck %s
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ ({{.*}})
+# CHECK-NEXT: Value: {{.*}}
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text (0x4)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ ({{.*}})
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: 0x00000003 PLTGOT 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (dynsym-table-2.test.tmp-bar.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+
+# bar.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+Symbols:
+ Global:
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ - Name: T3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x04
+ Size: 0x04
+
+# foo.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x08
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MIPS_CALL16
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/e-flags-merge-1-64.test b/test/old-elf/Mips/e-flags-merge-1-64.test
new file mode 100644
index 000000000000..3e52afd223cd
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-1-64.test
@@ -0,0 +1,30 @@
+# Check that the linker shows an error when object
+# file has unsupported ASE flags.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-mips16.o
+# RUN: not lld -flavor old-gnu -target mips64el -e T -o %t.exe %t-mips16.o 2>&1 | \
+# RUN: FileCheck -check-prefix=MIPS16 %s
+
+# MIPS16: Unsupported extension: MIPS16
+
+# mips16.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_ARCH_ASE_M16]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-1.test b/test/old-elf/Mips/e-flags-merge-1.test
new file mode 100644
index 000000000000..bc100534112d
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-1.test
@@ -0,0 +1,56 @@
+# Check that the linker shows an error when object file has missed
+# or unsupported ABI and ARCH flags or unsupported ASE flags.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-no-abi.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T -o %t.exe %t-no-abi.o 2>&1 | \
+# RUN: FileCheck -check-prefix=INVALID-ABI %s
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-mips16.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T -o %t.exe %t-mips16.o 2>&1 | \
+# RUN: FileCheck -check-prefix=MIPS16 %s
+
+# INVALID-ABI: Unsupported ABI
+# MIPS16: Unsupported extension: MIPS16
+
+# no-abi.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: []
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T
+ Section: .text
+
+# mips16.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_ARCH_ASE_M16]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-10.test b/test/old-elf/Mips/e-flags-merge-10.test
new file mode 100644
index 000000000000..5dacaa0e069d
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-10.test
@@ -0,0 +1,43 @@
+# Check that LLD shows an error and does not link files with mips32r2
+# and mips32r6 instructions sets.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32r2.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-32r6.o
+
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-32r2.o %t-32r6.o 2>&1 | FileCheck %s
+
+# CHECK: Linking modules with incompatible ISA
+
+# 32r2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 32r6.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-11.test b/test/old-elf/Mips/e-flags-merge-11.test
new file mode 100644
index 000000000000..e61eb0d6d65a
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-11.test
@@ -0,0 +1,43 @@
+# Check that LLD shows an error and does not link files with mips64r2
+# and mips64r6 instructions sets.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-64r2.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64r6.o
+
+# RUN: not lld -flavor old-gnu -target mips64el -shared -o %t.so \
+# RUN: %t-64r2.o %t-64r6.o 2>&1 | FileCheck %s
+
+# CHECK: Linking modules with incompatible ISA
+
+# 64r2.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64r6.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64R6]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-12.test b/test/old-elf/Mips/e-flags-merge-12.test
new file mode 100644
index 000000000000..0a0c43fc996a
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-12.test
@@ -0,0 +1,44 @@
+# Check that LLD shows an error and does not link files with O32 and N32 ABIs.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o32.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-n32.o
+
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-o32.o %t-n32.o 2>&1 | FileCheck %s
+
+# CHECK: Linking modules with incompatible ABI
+
+# o32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_32BITMODE, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# n32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI2,
+ EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-2-64.test b/test/old-elf/Mips/e-flags-merge-2-64.test
new file mode 100644
index 000000000000..4e024d2a465b
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-2-64.test
@@ -0,0 +1,33 @@
+# Check that the linker copies ELF header flags from the single input object
+# file to the generated executable
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -e T -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Flags [ (0x62000001)
+# CHECK-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: ]
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ARCH_64, EF_MIPS_NOREORDER, EF_MIPS_MICROMIPS ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-2.test b/test/old-elf/Mips/e-flags-merge-2.test
new file mode 100644
index 000000000000..3ca531728728
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-2.test
@@ -0,0 +1,35 @@
+# Check that the linker copies ELF header flags from the single input object
+# file to the generated executable
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Flags [ (0x52001001)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: ]
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
+ EF_MIPS_NOREORDER, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-3-64.test b/test/old-elf/Mips/e-flags-merge-3-64.test
new file mode 100644
index 000000000000..45326813e12f
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-3-64.test
@@ -0,0 +1,130 @@
+# Check PIC/CPIC flags merging in case of multiple input objects.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-cpic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-both.o
+
+# RUN: lld -flavor old-gnu -target mips64el -e T1 -o %t-abi1.exe \
+# RUN: %t-none.o %t-pic.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
+# RUN: llvm-readobj -file-headers %t-abi1.exe \
+# RUN: | FileCheck -check-prefix=ABI-CALLS1 %s
+
+# RUN: lld -flavor old-gnu -target mips64el -e T1 -o %t-abi2.exe \
+# RUN: %t-cpic.o %t-none.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
+# RUN: llvm-readobj -file-headers %t-abi2.exe \
+# RUN: | FileCheck -check-prefix=ABI-CALLS2 %s
+
+# RUN: lld -flavor old-gnu -target mips64el -e T2 -o %t-cpic.exe %t-cpic.o %t-pic.o
+# RUN: llvm-readobj -file-headers %t-cpic.exe | FileCheck -check-prefix=CPIC %s
+
+# RUN: lld -flavor old-gnu -target mips64el -e T3 -o %t-both.exe %t-pic.o %t-both.o
+# RUN: llvm-readobj -file-headers %t-both.exe | FileCheck -check-prefix=BOTH %s
+
+# ABI-CALLS-WARN: lld warning: linking abicalls and non-abicalls files
+
+# ABI-CALLS1: Flags [ (0x60000004)
+# ABI-CALLS1-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# ABI-CALLS1-NEXT: EF_MIPS_CPIC (0x4)
+# ABI-CALLS1-NEXT: ]
+
+# ABI-CALLS2: Flags [ (0x60000004)
+# ABI-CALLS2-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# ABI-CALLS2-NEXT: EF_MIPS_CPIC (0x4)
+# ABI-CALLS2-NEXT: ]
+
+# CPIC: Flags [ (0x60000004)
+# CPIC-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# CPIC-NEXT: EF_MIPS_CPIC (0x4)
+# CPIC-NEXT: ]
+
+# BOTH: Flags [ (0x60000006)
+# BOTH-NEXT: EF_MIPS_ARCH_64 (0x60000000)
+# BOTH-NEXT: EF_MIPS_CPIC (0x4)
+# BOTH-NEXT: EF_MIPS_PIC (0x2)
+# BOTH-NEXT: ]
+
+# none.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+
+# cpic.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_PIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+
+# both.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_CPIC, EF_MIPS_PIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: T4
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-3.test b/test/old-elf/Mips/e-flags-merge-3.test
new file mode 100644
index 000000000000..612f0b458631
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-3.test
@@ -0,0 +1,134 @@
+# Check PIC/CPIC flags merging in case of multiple input objects.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-cpic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-both.o
+
+# RUN: lld -flavor old-gnu -target mipsel -e T1 -o %t-abi1.exe \
+# RUN: %t-none.o %t-pic.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
+# RUN: llvm-readobj -file-headers %t-abi1.exe \
+# RUN: | FileCheck -check-prefix=ABI-CALLS1 %s
+
+# RUN: lld -flavor old-gnu -target mipsel -e T1 -o %t-abi2.exe \
+# RUN: %t-cpic.o %t-none.o 2>&1 | FileCheck -check-prefix=ABI-CALLS-WARN %s
+# RUN: llvm-readobj -file-headers %t-abi2.exe \
+# RUN: | FileCheck -check-prefix=ABI-CALLS2 %s
+
+# RUN: lld -flavor old-gnu -target mipsel -e T2 -o %t-cpic.exe %t-cpic.o %t-pic.o
+# RUN: llvm-readobj -file-headers %t-cpic.exe | FileCheck -check-prefix=CPIC %s
+
+# RUN: lld -flavor old-gnu -target mipsel -e T3 -o %t-both.exe %t-pic.o %t-both.o
+# RUN: llvm-readobj -file-headers %t-both.exe | FileCheck -check-prefix=BOTH %s
+
+# ABI-CALLS-WARN: lld warning: linking abicalls and non-abicalls files
+
+# ABI-CALLS1: Flags [ (0x50001004)
+# ABI-CALLS1-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# ABI-CALLS1-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# ABI-CALLS1-NEXT: EF_MIPS_CPIC (0x4)
+# ABI-CALLS1-NEXT: ]
+
+# ABI-CALLS2: Flags [ (0x50001004)
+# ABI-CALLS2-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# ABI-CALLS2-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# ABI-CALLS2-NEXT: EF_MIPS_CPIC (0x4)
+# ABI-CALLS2-NEXT: ]
+
+# CPIC: Flags [ (0x50001004)
+# CPIC-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CPIC-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# CPIC-NEXT: EF_MIPS_CPIC (0x4)
+# CPIC-NEXT: ]
+
+# BOTH: Flags [ (0x50001006)
+# BOTH-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# BOTH-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# BOTH-NEXT: EF_MIPS_CPIC (0x4)
+# BOTH-NEXT: EF_MIPS_PIC (0x2)
+# BOTH-NEXT: ]
+
+# none.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+
+# cpic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_PIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+
+# both.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T4
+ Section: .text
+...
diff --git a/test/old-elf/Mips/e-flags-merge-4-64.test b/test/old-elf/Mips/e-flags-merge-4-64.test
new file mode 100644
index 000000000000..59a8bf131d95
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-4-64.test
@@ -0,0 +1,64 @@
+# Check ELF flags merging.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-noreorder.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
+
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so \
+# RUN: %t-none.o %t-noreorder.o %t-micro.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Flags [ (0x82000001)
+# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: ]
+
+# none.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_5]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# noreorder.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_NOREORDER]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64R2, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+...
diff --git a/test/old-elf/Mips/e-flags-merge-4.test b/test/old-elf/Mips/e-flags-merge-4.test
new file mode 100644
index 000000000000..6a2de375e624
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-4.test
@@ -0,0 +1,65 @@
+# Check ELF flags merging.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-none.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-noreorder.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-none.o %t-noreorder.o %t-micro.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Flags [ (0x52001001)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: ]
+
+# none.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# noreorder.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_NOREORDER]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-5-64.test b/test/old-elf/Mips/e-flags-merge-5-64.test
new file mode 100644
index 000000000000..f1fdac2c8c05
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-5-64.test
@@ -0,0 +1,42 @@
+# Check that LLD does not allow to mix 32 and 64-bit MIPS object files.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
+
+# RUN: not lld -flavor old-gnu -target mips64el -shared -o %t.so \
+# RUN: %t-32.o %t-64.o 2>&1 | FileCheck %s
+
+# CHECK: ELF64 expected, but got ELF32
+
+# 32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+...
diff --git a/test/old-elf/Mips/e-flags-merge-5.test b/test/old-elf/Mips/e-flags-merge-5.test
new file mode 100644
index 000000000000..56edc4bfa10f
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-5.test
@@ -0,0 +1,42 @@
+# Check that LLD does not allow to mix 32 and 64-bit MIPS object files.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
+
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-32.o %t-64.o 2>&1 | FileCheck %s
+
+# CHECK: ELF32 expected, but got ELF64
+
+# 32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-6-64.test b/test/old-elf/Mips/e-flags-merge-6-64.test
new file mode 100644
index 000000000000..9f83365441af
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-6-64.test
@@ -0,0 +1,79 @@
+# Check selecting ELF header ARCH flag.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-m3.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-m5.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-m64.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-m64r2.o
+
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so \
+# RUN: %t-m64.o %t-m5.o %t-m64r2.o %t-m3.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Flags [ (0x80000000)
+# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK-NEXT: ]
+
+# m3.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_3]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# m5.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_5]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# m64.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# m64r2.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+...
diff --git a/test/old-elf/Mips/e-flags-merge-6.test b/test/old-elf/Mips/e-flags-merge-6.test
new file mode 100644
index 000000000000..0d8bcee5ad64
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-6.test
@@ -0,0 +1,80 @@
+# Check selecting ELF header ARCH flag.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-m1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-m2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-m32.o
+# RUN: yaml2obj -format=elf -docnum 4 %s > %t-m32r2.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-m32.o %t-m2.o %t-m32r2.o %t-m1.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Flags [ (0x70001000)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
+# CHECK-NEXT: ]
+
+# m1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_1]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# m2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# m32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# m32r2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-7-64.test b/test/old-elf/Mips/e-flags-merge-7-64.test
new file mode 100644
index 000000000000..0e74ac53684a
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-7-64.test
@@ -0,0 +1,42 @@
+# Check that LLD does not allow to mix nan2008 and legacy MIPS object files.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-2008.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-legacy.o
+
+# RUN: not lld -flavor old-gnu -target mips64el -shared -o %t.so \
+# RUN: %t-2008.o %t-legacy.o 2>&1 | FileCheck %s
+
+# CHECK: Linking -mnan=2008 and -mnan=legacy modules
+
+# 2008.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64, EF_MIPS_NAN2008]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+# legacy.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+...
diff --git a/test/old-elf/Mips/e-flags-merge-7.test b/test/old-elf/Mips/e-flags-merge-7.test
new file mode 100644
index 000000000000..08051df506be
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-7.test
@@ -0,0 +1,42 @@
+# Check that LLD does not allow to mix nan2008 and legacy MIPS object files.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-2008.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-legacy.o
+
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-2008.o %t-legacy.o 2>&1 | FileCheck %s
+
+# CHECK: Linking -mnan=2008 and -mnan=legacy modules
+
+# 2008.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_NAN2008]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# legacy.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-8.test b/test/old-elf/Mips/e-flags-merge-8.test
new file mode 100644
index 000000000000..2a2fdfee3c46
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-8.test
@@ -0,0 +1,65 @@
+# Check that LLD links files with mips32 and mips64 instructions
+# if all these files satisfy O32 ABI.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-64r2.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-32.o %t-64.o %t-64r2.o
+# RUN: llvm-readobj -file-headers %t.so | FileCheck %s
+
+# CHECK: Flags [ (0x80001100)
+# CHECK-NEXT: EF_MIPS_32BITMODE (0x100)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK-NEXT: ]
+
+
+# 32.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64, EF_MIPS_32BITMODE]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64r2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64R2, EF_MIPS_32BITMODE]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/e-flags-merge-9.test b/test/old-elf/Mips/e-flags-merge-9.test
new file mode 100644
index 000000000000..ada24d788c9a
--- /dev/null
+++ b/test/old-elf/Mips/e-flags-merge-9.test
@@ -0,0 +1,43 @@
+# Check that LLD shows an error and does not link files with mips32r2
+# and mips64 instructions sets.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-32r2.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-64.o
+
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so \
+# RUN: %t-32r2.o %t-64.o 2>&1 | FileCheck %s
+
+# CHECK: Linking modules with incompatible ISA
+
+# 32r2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+# 64.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_64, EF_MIPS_32BITMODE]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/entry-name.test b/test/old-elf/Mips/entry-name.test
new file mode 100644
index 000000000000..f6ce0c4f223b
--- /dev/null
+++ b/test/old-elf/Mips/entry-name.test
@@ -0,0 +1,26 @@
+# Check name of executable entry symbol.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel --noinhibit-exec -o %t.exe %t.o
+# RUN: llvm-nm %t.exe | FileCheck %s
+
+# CHECK: U __start
+# CHECK: {{[0-9A-F]+}} T main
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/exe-dynamic.test b/test/old-elf/Mips/exe-dynamic.test
new file mode 100644
index 000000000000..93fdce9fdc7d
--- /dev/null
+++ b/test/old-elf/Mips/exe-dynamic.test
@@ -0,0 +1,110 @@
+# Check MIPS specific tags in the dynamic table in case executable linking.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: DynamicSection [ (20 entries)
+# CHECK: Tag Type Name/Value
+# CHECK-NEXT: 0x00000004 HASH 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000005 STRTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000006 SYMTAB 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x0000000A STRSZ 28 (bytes)
+# CHECK-NEXT: 0x0000000B SYMENT 16 (bytes)
+# CHECK-NEXT: 0x00000002 PLTRELSZ 8 (bytes)
+# CHECK-NEXT: 0x70000032 MIPS_PLTGOT 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000014 PLTREL REL
+# CHECK-NEXT: 0x00000017 JMPREL 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x70000001 MIPS_RLD_VERSION 1
+# CHECK-NEXT: 0x70000016 MIPS_RLD_MAP 0x40200C
+# CHECK-NEXT: 0x70000035 MIPS_RLD_MAP_REL 0x1E0C
+# CHECK-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
+# CHECK-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x400000
+# CHECK-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
+# CHECK-NEXT: 0x70000011 MIPS_SYMTABNO 2
+# CHECK-NEXT: 0x70000013 MIPS_GOTSYM 0x2
+# CHECK-NEXT: 0x00000003 PLTGOT 0x{{[0-9A-F]+}}
+# CHECK-NEXT: 0x00000001 NEEDED SharedLibrary (exe-dynamic.test.tmp.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: 0000000C000000000000000C000000000000000C00000000
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_26
+ Addend: 0
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MIPS_26
+ Addend: 0
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MIPS_26
+ Addend: 0
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Value: 0x08
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/exe-dynsym-micro.test b/test/old-elf/Mips/exe-dynsym-micro.test
new file mode 100644
index 000000000000..477e174f3d6c
--- /dev/null
+++ b/test/old-elf/Mips/exe-dynsym-micro.test
@@ -0,0 +1,94 @@
+# Check that symbol referenced by an entry in the global part of GOT
+# has a corresponded entry in the .dynsym section. This test covers
+# the case when the GOT entry created because of the R_MICROMIPS_GOT16
+# relocation.
+
+# Build executable
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t.o
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK-DYN %s
+
+# Build executabl (yaml format)e
+# RUN: lld -flavor old-gnu -target mipsel -e glob \
+# RUN: --output-filetype=yaml -o %t.yaml %t.o
+# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t.yaml
+
+# CHECK-DYN: Format: ELF32-mips
+# CHECK-DYN: Arch: mipsel
+# CHECK-DYN: AddressSize: 32bit
+# CHECK-DYN: LoadName:
+# CHECK-DYN: DynamicSymbols [
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: @ (0)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Local (0x0)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: weakf@ (1)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Weak (0x2)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: ]
+
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 80 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - ref-name: L000
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: weakf
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: weakf
+ Type: R_MICROMIPS_GOT16
+
+Symbols:
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ Weak:
+ - Name: weakf
diff --git a/test/old-elf/Mips/exe-dynsym.test b/test/old-elf/Mips/exe-dynsym.test
new file mode 100644
index 000000000000..c50ce67d5f57
--- /dev/null
+++ b/test/old-elf/Mips/exe-dynsym.test
@@ -0,0 +1,91 @@
+# Check that symbol referenced by an entry in the global part of GOT
+# has a corresponded entry in the .dynsym section.
+
+# Build executable
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t.o
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=CHECK-DYN %s
+
+# Build executabl (yaml format)e
+# RUN: lld -flavor old-gnu -target mipsel -e glob \
+# RUN: --output-filetype=yaml -o %t.yaml %t.o
+# RUN: FileCheck -check-prefix=CHECK-GOT %s < %t.yaml
+
+# CHECK-DYN: Format: ELF32-mips
+# CHECK-DYN: Arch: mipsel
+# CHECK-DYN: AddressSize: 32bit
+# CHECK-DYN: LoadName:
+# CHECK-DYN: DynamicSymbols [
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: @ (0)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Local (0x0)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: Symbol {
+# CHECK-DYN: Name: weakf@ (1)
+# CHECK-DYN: Value: 0x0
+# CHECK-DYN: Size: 0
+# CHECK-DYN: Binding: Weak (0x2)
+# CHECK-DYN: Type: None (0x0)
+# CHECK-DYN: Other: 0
+# CHECK-DYN: Section: Undefined (0x0)
+# CHECK-DYN: }
+# CHECK-DYN: ]
+
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - type: got
+# CHECK-GOT: content: [ 00, 00, 00, 80 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: - ref-name: L000
+# CHECK-GOT: type: got
+# CHECK-GOT: content: [ 00, 00, 00, 00 ]
+# CHECK-GOT: alignment: 4
+# CHECK-GOT: section-choice: custom-required
+# CHECK-GOT: section-name: .got
+# CHECK-GOT: permissions: rw-
+# CHECK-GOT: references:
+# CHECK-GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# CHECK-GOT: offset: 0
+# CHECK-GOT: target: weakf
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: weakf
+ Type: R_MIPS_GOT16
+
+Symbols:
+ Global:
+ - Name: glob
+ Section: .text
+ Weak:
+ - Name: weakf
diff --git a/test/old-elf/Mips/exe-fileheader-02.test b/test/old-elf/Mips/exe-fileheader-02.test
new file mode 100644
index 000000000000..b3cd88c139b6
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-02.test
@@ -0,0 +1,62 @@
+# Check that LLD set ABIVersion to '1' if it generates executable
+# file without EF_MIPS_PIC in the ELF header.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 32-bit (0x1)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 1
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x50001005)
+# CHECK: EF_MIPS_ABI_O32 (0x1000)
+# CHECK: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: ]
+# CHECK: HeaderSize: 52
+# CHECK: ProgramHeaderEntrySize: 32
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 40
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader-03.test b/test/old-elf/Mips/exe-fileheader-03.test
new file mode 100644
index 000000000000..dfe4fcc43e67
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-03.test
@@ -0,0 +1,72 @@
+# Check that LLD set ABIVersion to '3' if it generates executable
+# file with FP_64 / FP_64A floating point abi flags.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 32-bit (0x1)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 3
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x50001005)
+# CHECK: EF_MIPS_ABI_O32 (0x1000)
+# CHECK: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: ]
+# CHECK: HeaderSize: 52
+# CHECK: ProgramHeaderEntrySize: 32
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 40
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .MIPS.abiflags
+ Type: SHT_MIPS_ABIFLAGS
+ AddressAlign: 8
+ ISA: MIPS32
+ ISARevision: 1
+ ISAExtension: EXT_NONE
+ FpABI: FP_64
+ GPRSize: REG_32
+ CPR1Size: REG_64
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader-64.test b/test/old-elf/Mips/exe-fileheader-64.test
new file mode 100644
index 000000000000..20bb43a216d5
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-64.test
@@ -0,0 +1,66 @@
+# Check ELF Header for 64-bit executable file.
+
+# Build executable
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e glob -o %t.exe %t-o.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF64-mips
+# CHECK: Arch: mips64el
+# CHECK: AddressSize: 64bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 64-bit (0x2)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 0
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x60000007)
+# CHECK: EF_MIPS_ARCH_64 (0x60000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: EF_MIPS_PIC (0x2)
+# CHECK: ]
+# CHECK: HeaderSize: 64
+# CHECK: ProgramHeaderEntrySize: 56
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 64
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_64 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader-be-64.test b/test/old-elf/Mips/exe-fileheader-be-64.test
new file mode 100644
index 000000000000..70457fe217c6
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-be-64.test
@@ -0,0 +1,60 @@
+# Check ELF Header for non-pic big-endian 64-bit executable file.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64 -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF64-mips
+# CHECK: Arch: mips64
+# CHECK: AddressSize: 64bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 64-bit (0x2)
+# CHECK: DataEncoding: BigEndian (0x2)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 0
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x60000007)
+# CHECK: EF_MIPS_ARCH_64 (0x60000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: EF_MIPS_PIC (0x2)
+# CHECK: ]
+# CHECK: HeaderSize: 64
+# CHECK: ProgramHeaderEntrySize: 56
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 64
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader-be.test b/test/old-elf/Mips/exe-fileheader-be.test
new file mode 100644
index 000000000000..292a92e59097
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-be.test
@@ -0,0 +1,60 @@
+# Check ELF Header for non-pic big-endian 32-bit executable file.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mips
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 32-bit (0x1)
+# CHECK: DataEncoding: BigEndian (0x2)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 1
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x50001005)
+# CHECK: EF_MIPS_ABI_O32 (0x1000)
+# CHECK: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: ]
+# CHECK: HeaderSize: 52
+# CHECK: ProgramHeaderEntrySize: 32
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 40
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader-micro-64.test b/test/old-elf/Mips/exe-fileheader-micro-64.test
new file mode 100644
index 000000000000..a37d2d710637
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-micro-64.test
@@ -0,0 +1,68 @@
+# Check ELF Header for 64-bit executable file in case of microMIPS entry symbol.
+
+# Build executable
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e glob -o %t.exe %t-o.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF64-mips
+# CHECK: Arch: mips64el
+# CHECK: AddressSize: 64bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 64-bit (0x2)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 0
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x82000007)
+# CHECK: EF_MIPS_ARCH_64R2 (0x80000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: EF_MIPS_PIC (0x2)
+# CHECK: ]
+# CHECK: HeaderSize: 64
+# CHECK: ProgramHeaderEntrySize: 56
+# CHECK: ProgramHeaderCount: 6
+# CHECK: SectionHeaderEntrySize: 64
+# CHECK: SectionHeaderCount: 12
+# CHECK: StringTableSectionIndex: 9
+# CHECK: }
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_64R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+...
diff --git a/test/old-elf/Mips/exe-fileheader-micro.test b/test/old-elf/Mips/exe-fileheader-micro.test
new file mode 100644
index 000000000000..0adaf5b17373
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-micro.test
@@ -0,0 +1,69 @@
+# Check ELF Header for non-pic executable file in case
+# of microMIPS entry symbol.
+
+# Build executable
+# RUN: yaml2obj -format=elf %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK-NEXT: Arch: mipsel
+# CHECK-NEXT: AddressSize: 32bit
+# CHECK-NEXT: LoadName:
+# CHECK-NEXT: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 32-bit (0x1)
+# CHECK-NEXT: DataEncoding: LittleEndian (0x1)
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV (0x0)
+# CHECK-NEXT: ABIVersion: 1
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable (0x2)
+# CHECK-NEXT: Machine: EM_MIPS (0x8)
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x{{[0-9A-F]+[13579bdf]}}
+# CHECK-NEXT: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Flags [ (0x72001005)
+# CHECK-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# CHECK-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
+# CHECK-NEXT: EF_MIPS_CPIC (0x4)
+# CHECK-NEXT: EF_MIPS_MICROMIPS (0x2000000)
+# CHECK-NEXT: EF_MIPS_NOREORDER (0x1)
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 52
+# CHECK-NEXT: ProgramHeaderEntrySize: 32
+# CHECK-NEXT: ProgramHeaderCount: 6
+# CHECK-NEXT: SectionHeaderEntrySize: 40
+# CHECK-NEXT: SectionHeaderCount: 12
+# CHECK-NEXT: StringTableSectionIndex: 9
+# CHECK-NEXT: }
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+...
diff --git a/test/old-elf/Mips/exe-fileheader-n32.test b/test/old-elf/Mips/exe-fileheader-n32.test
new file mode 100644
index 000000000000..f6a1725b4443
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader-n32.test
@@ -0,0 +1,65 @@
+# Check ELF Header for N32 ABI executable file.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t.o
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK-NEXT: Arch: mipsel
+# CHECK-NEXT: AddressSize: 32bit
+# CHECK-NEXT: LoadName:
+# CHECK-NEXT: ElfHeader {
+# CHECK-NEXT: Ident {
+# CHECK-NEXT: Magic: (7F 45 4C 46)
+# CHECK-NEXT: Class: 32-bit
+# CHECK-NEXT: DataEncoding: LittleEndian
+# CHECK-NEXT: FileVersion: 1
+# CHECK-NEXT: OS/ABI: SystemV
+# CHECK-NEXT: ABIVersion: 0
+# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
+# CHECK-NEXT: }
+# CHECK-NEXT: Type: Executable
+# CHECK-NEXT: Machine: EM_MIPS
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Entry: 0x10000130
+# CHECK-NEXT: ProgramHeaderOffset: 0x34
+# CHECK-NEXT: SectionHeaderOffset: 0x22C0
+# CHECK-NEXT: Flags [ (0x60000027)
+# CHECK-NEXT: EF_MIPS_ABI2
+# CHECK-NEXT: EF_MIPS_ARCH_64
+# CHECK-NEXT: EF_MIPS_CPIC
+# CHECK-NEXT: EF_MIPS_NOREORDER
+# CHECK-NEXT: EF_MIPS_PIC
+# CHECK-NEXT: ]
+# CHECK-NEXT: HeaderSize: 52
+# CHECK-NEXT: ProgramHeaderEntrySize: 32
+# CHECK-NEXT: ProgramHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: SectionHeaderEntrySize: 40
+# CHECK-NEXT: SectionHeaderCount: {{[0-9]+}}
+# CHECK-NEXT: StringTableSectionIndex: {{[0-9]+}}
+# CHECK-NEXT: }
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI2, EF_MIPS_ARCH_64 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: __start
+ Section: .text
+...
diff --git a/test/old-elf/Mips/exe-fileheader.test b/test/old-elf/Mips/exe-fileheader.test
new file mode 100644
index 000000000000..0188a682b3fb
--- /dev/null
+++ b/test/old-elf/Mips/exe-fileheader.test
@@ -0,0 +1,105 @@
+# Check ELF Header for non-pic executable file.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+
+# CHECK: Format: ELF32-mips
+# CHECK: Arch: mipsel
+# CHECK: AddressSize: 32bit
+# CHECK: LoadName:
+# CHECK: ElfHeader {
+# CHECK: Ident {
+# CHECK: Magic: (7F 45 4C 46)
+# CHECK: Class: 32-bit (0x1)
+# CHECK: DataEncoding: LittleEndian (0x1)
+# CHECK: FileVersion: 1
+# CHECK: OS/ABI: SystemV (0x0)
+# CHECK: ABIVersion: 1
+# CHECK: Unused: (00 00 00 00 00 00 00)
+# CHECK: }
+# CHECK: Type: Executable (0x2)
+# CHECK: Machine: EM_MIPS (0x8)
+# CHECK: Version: 1
+# CHECK: Entry: 0x{{[0-9A-F]+}}
+# CHECK: ProgramHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: SectionHeaderOffset: 0x{{[0-9A-F]+}}
+# CHECK: Flags [ (0x50001005)
+# CHECK: EF_MIPS_ABI_O32 (0x1000)
+# CHECK: EF_MIPS_ARCH_32 (0x50000000)
+# CHECK: EF_MIPS_CPIC (0x4)
+# CHECK: EF_MIPS_NOREORDER (0x1)
+# CHECK: ]
+# CHECK: HeaderSize: 52
+# CHECK: ProgramHeaderEntrySize: 32
+# CHECK: ProgramHeaderCount: {{[0-9]+}}
+# CHECK: SectionHeaderEntrySize: 40
+# CHECK: SectionHeaderCount: {{[0-9]+}}
+# CHECK: StringTableSectionIndex: {{[0-9]+}}
+# CHECK: }
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/exe-got-micro.test b/test/old-elf/Mips/exe-got-micro.test
new file mode 100644
index 000000000000..7b3a919880de
--- /dev/null
+++ b/test/old-elf/Mips/exe-got-micro.test
@@ -0,0 +1,115 @@
+# Check that external symbol defined in the executable file
+# and referenced by R_MICROMIPS_CALL16 relocation has a corresponded
+# entry in the local GOT section.
+#
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob \
+# RUN: --output-filetype=yaml -o %t.exe %t-o.o %t.so
+# RUN: FileCheck -check-prefix=GOT %s < %t.exe
+
+# GOT header
+# GOT: - type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: - type: got
+# GOT: content: [ 00, 00, 00, 80 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# Local GOT entry for 'glob' symbol
+# GOT: - ref-name: L000
+# GOT: type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: references:
+# GOT: - kind: R_MIPS_32
+# GOT: offset: 0
+# GOT: target: glob
+# Global GOT entry for 'T1' symbol
+# GOT: - ref-name: L001
+# GOT: type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: references:
+# GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# GOT: offset: 0
+# GOT: target: T1
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: glob
+ Type: R_MICROMIPS_CALL16
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MICROMIPS_CALL16
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/exe-got.test b/test/old-elf/Mips/exe-got.test
new file mode 100644
index 000000000000..636de16b4202
--- /dev/null
+++ b/test/old-elf/Mips/exe-got.test
@@ -0,0 +1,116 @@
+# Check that external symbol defined in the executable file
+# and referenced by R_MIPS_CALL16 relocation has a corresponded
+# entry in the local GOT section.
+#
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob \
+# RUN: --output-filetype=yaml -o %t.exe %t-o.o %t.so
+# RUN: FileCheck -check-prefix=GOT %s < %t.exe
+
+# GOT header
+# GOT: - type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: - type: got
+# GOT: content: [ 00, 00, 00, 80 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# Local GOT entry for 'glob' symbol
+# GOT: - ref-name: L000
+# GOT: type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: references:
+# GOT: - kind: R_MIPS_32
+# GOT: offset: 0
+# GOT: target: glob
+# Global GOT entry for 'T1' symbol
+# GOT: - ref-name: L001
+# GOT: type: got
+# GOT: content: [ 00, 00, 00, 00 ]
+# GOT: alignment: 4
+# GOT: section-choice: custom-required
+# GOT: section-name: .got
+# GOT: permissions: rw-
+# GOT: references:
+# GOT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# GOT: offset: 0
+# GOT: target: T1
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: glob
+ Type: R_MIPS_CALL16
+ Addend: 0
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MIPS_CALL16
+ Addend: 0
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/got-page-32-micro.test b/test/old-elf/Mips/got-page-32-micro.test
new file mode 100644
index 000000000000..5457ab9f1879
--- /dev/null
+++ b/test/old-elf/Mips/got-page-32-micro.test
@@ -0,0 +1,251 @@
+# Check handling of R_MICROMIPS_GOT_DISP / PAGE / OFST relocations
+# in case of O32 ABI.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
+# RUN: | FileCheck -check-prefix=GOT %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+
+# GOT: Symbol {
+# GOT: Name: LT3
+# GOT-NEXT: Value: 0x[[LT3:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT4
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T0
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: LT1
+# GOT-NEXT: Value: 0x[[LT1:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT2
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T1@
+# GOT-NEXT: Value: 0x0
+# GOT: Symbol {
+# GOT: Name: T2@
+# GOT-NEXT: Value: 0x0
+
+# GOT: Primary GOT {
+# GOT-NEXT: Canonical gp value: 0x408FF0
+# GOT-NEXT: Reserved entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401000
+# GOT-NEXT: Access: -32752
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Purpose: Lazy resolver
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401004
+# GOT-NEXT: Access: -32748
+# GOT-NEXT: Initial: 0x80000000
+# GOT-NEXT: Purpose: Module pointer (GNU extension)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x[[LT1]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x[[LT3]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40101C
+# GOT-NEXT: Access: -32724
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Number of TLS and multi-GOT entries: 0
+# GOT-NEXT: }
+
+# RAW: Contents of section .text:
+# RAW-NEXT: {{[0-9a-f]+}} 00002c80 00001880 00002c80 00003080
+# ^ = -32724 (T1)
+# ^ = -32744 (LT1)
+# ^ -32724 (T1)
+# ^ -32720 (T2)
+# RAW-NEXT: {{[0-9a-f]+}} 00001c80 00002080 00000000 00000000
+# ^ -32740 (PAGE)
+# ^ -32736 (PAGE)
+# ^ T1 OFST
+# ^ T2 OFST
+# RAW-NEXT: {{[0-9a-f]+}} 0000a501 0000a901 00002480 00002880
+# ^ LT1 OFST
+# ^ LT2 OFST
+# ^ = -32732 (LT3)
+# ^ -32728 (PAGE)
+# RAW-NEXT: {{[0-9a-f]+}} 0000b101 00000000
+# ^ LT4 OFST
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_32R2, EF_MIPS_ABI_O32, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 0x4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_32R2, EF_MIPS_ABI_O32, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Size: 0x38
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MICROMIPS_GOT_DISP
+ - Offset: 0x4
+ Symbol: LT1
+ Type: R_MICROMIPS_GOT_DISP
+ - Offset: 0x8
+ Symbol: T1
+ Type: R_MICROMIPS_GOT_PAGE
+ - Offset: 0xC
+ Symbol: T2
+ Type: R_MICROMIPS_GOT_PAGE
+ - Offset: 0x10
+ Symbol: LT1
+ Type: R_MICROMIPS_GOT_PAGE
+ - Offset: 0x14
+ Symbol: LT2
+ Type: R_MICROMIPS_GOT_PAGE
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MICROMIPS_GOT_OFST
+ - Offset: 0x1C
+ Symbol: T2
+ Type: R_MICROMIPS_GOT_OFST
+ - Offset: 0x20
+ Symbol: LT1
+ Type: R_MICROMIPS_GOT_OFST
+ - Offset: 0x24
+ Symbol: LT2
+ Type: R_MICROMIPS_GOT_OFST
+ - Offset: 0x28
+ Symbol: LT3
+ Type: R_MICROMIPS_GOT_DISP
+ - Offset: 0x2C
+ Symbol: LT4
+ Type: R_MICROMIPS_GOT_PAGE
+ - Offset: 0x30
+ Symbol: LT4
+ Type: R_MICROMIPS_GOT_OFST
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: LT3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x30
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: LT4
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x34
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x28
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: LT2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x2c
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/got-page-32.test b/test/old-elf/Mips/got-page-32.test
new file mode 100644
index 000000000000..44f45536d501
--- /dev/null
+++ b/test/old-elf/Mips/got-page-32.test
@@ -0,0 +1,244 @@
+# Check handling of R_MIPS_GOT_DISP / PAGE / OFST relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
+# RUN: | FileCheck -check-prefix=GOT %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+
+# GOT: Symbol {
+# GOT: Name: LT3 (12)
+# GOT-NEXT: Value: 0x[[LT3:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT4 (16)
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T0 (1)
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: LT1 (4)
+# GOT-NEXT: Value: 0x[[LT1:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT2 (8)
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T1@ (1)
+# GOT-NEXT: Value: 0x0
+# GOT: Symbol {
+# GOT: Name: T2@ (4)
+# GOT-NEXT: Value: 0x0
+
+# GOT: Primary GOT {
+# GOT-NEXT: Canonical gp value: 0x408FF0
+# GOT-NEXT: Reserved entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401000
+# GOT-NEXT: Access: -32752
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Purpose: Lazy resolver
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401004
+# GOT-NEXT: Access: -32748
+# GOT-NEXT: Initial: 0x80000000
+# GOT-NEXT: Purpose: Module pointer (GNU extension)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x[[LT1]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x[[LT3]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x400000
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40101C
+# GOT-NEXT: Access: -32724
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Number of TLS and multi-GOT entries: 0
+# GOT-NEXT: }
+
+# RAW: Contents of section .text:
+# RAW-NEXT: {{[0-9a-f]+}} 2c800000 18800000 2c800000 30800000
+# ^ = -32724 (T1)
+# ^ = -32744 (LT1)
+# ^ -32724 (T1)
+# ^ -32720 (T2)
+# RAW-NEXT: {{[0-9a-f]+}} 1c800000 20800000 00000000 00000000
+# ^ -32740 (PAGE)
+# ^ -32736 (PAGE)
+# ^ T1 OFST
+# ^ T2 OFST
+# RAW-NEXT: {{[0-9a-f]+}} 9c010000 a0010000 24800000 28800000
+# ^ LT1 OFST
+# ^ LT2 OFST
+# ^ = -32732 (LT3)
+# ^ -32728 (PAGE)
+# RAW-NEXT: {{[0-9a-f]+}} a8010000 00000000
+# ^ LT4 OFST
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_32, EF_MIPS_ABI_O32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 0x4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_32, EF_MIPS_ABI_O32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Size: 0x38
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x4
+ Symbol: LT1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x8
+ Symbol: T1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0xC
+ Symbol: T2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x10
+ Symbol: LT1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x14
+ Symbol: LT2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x1C
+ Symbol: T2
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x20
+ Symbol: LT1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x24
+ Symbol: LT2
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x28
+ Symbol: LT3
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x2C
+ Symbol: LT4
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x30
+ Symbol: LT4
+ Type: R_MIPS_GOT_OFST
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: LT3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x30
+ Size: 0x4
+ - Name: LT4
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x34
+ Size: 0x4
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x8
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x28
+ Size: 0x4
+ - Name: LT2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x2c
+ Size: 0x4
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/got-page-64-micro.test b/test/old-elf/Mips/got-page-64-micro.test
new file mode 100644
index 000000000000..37bae77001e4
--- /dev/null
+++ b/test/old-elf/Mips/got-page-64-micro.test
@@ -0,0 +1,210 @@
+# Check handling of R_MICROMIPS_GOT_DISP / PAGE / OFST relocations
+# in case of N64 ABI.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
+# RUN: | FileCheck -check-prefix=GOT %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+
+# GOT: Symbol {
+# GOT: Name: T0
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: LT1
+# GOT-NEXT: Value: 0x[[LT1:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT2
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T1@
+# GOT-NEXT: Value: 0x0
+# GOT: Symbol {
+# GOT: Name: T2@
+# GOT-NEXT: Value: 0x0
+
+# GOT: Primary GOT {
+# GOT-NEXT: Canonical gp value: 0x120008FF0
+# GOT-NEXT: Reserved entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001000
+# GOT-NEXT: Access: -32752
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Purpose: Lazy resolver
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x8000000000000000
+# GOT-NEXT: Purpose: Module pointer (GNU extension)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x[[LT1]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x120000000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x120000000
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001028
+# GOT-NEXT: Access: -32712
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001030
+# GOT-NEXT: Access: -32704
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Number of TLS and multi-GOT entries: 0
+# GOT-NEXT: }
+
+# RAW: Contents of section .text:
+# RAW-NEXT: {{[0-9a-f]+}} 38800000 20800000 38800000 40800000
+# ^ = -32712 (T1)
+# ^ = -32736 (LT1)
+# ^ -32712 (T1)
+# ^ -32704 (T2)
+# RAW-NEXT: {{[0-9a-f]+}} 28800000 30800000 00000000 00000000
+# ^ -32728 (PAGE)
+# ^ -32720 (PAGE)
+# ^ T1 OFST
+# ^ T2 OFST
+# RAW-NEXT: {{[0-9a-f]+}} 59020000 5d020000 00000000 00000000
+# ^ LT1 OFST
+# ^ LT2 OFST
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_64R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 0x4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ARCH_64R2, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Size: 0x30
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x4
+ Symbol: LT1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x8
+ Symbol: T1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0xC
+ Symbol: T2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x10
+ Symbol: LT1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x14
+ Symbol: LT2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x1C
+ Symbol: T2
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x20
+ Symbol: LT1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x24
+ Symbol: LT2
+ Type: R_MIPS_GOT_OFST
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x28
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: LT2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x2c
+ Size: 0x4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/got-page-64.test b/test/old-elf/Mips/got-page-64.test
new file mode 100644
index 000000000000..3c6ef57c78f5
--- /dev/null
+++ b/test/old-elf/Mips/got-page-64.test
@@ -0,0 +1,203 @@
+# Check handling of R_MIPS_GOT_DISP / PAGE / OFST relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols -dyn-symbols -mips-plt-got %t.exe \
+# RUN: | FileCheck -check-prefix=GOT %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+
+# GOT: Symbol {
+# GOT: Name: T0 (1)
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: LT1 (4)
+# GOT-NEXT: Value: 0x[[LT1:[0-9A-F]+]]
+# GOT: Symbol {
+# GOT: Name: LT2 (8)
+# GOT-NEXT: Value: 0x{{[0-9A-F]+}}
+# GOT: Symbol {
+# GOT: Name: T1@ (1)
+# GOT-NEXT: Value: 0x0
+# GOT: Symbol {
+# GOT: Name: T2@ (4)
+# GOT-NEXT: Value: 0x0
+
+# GOT: Primary GOT {
+# GOT-NEXT: Canonical gp value: 0x120008FF0
+# GOT-NEXT: Reserved entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001000
+# GOT-NEXT: Access: -32752
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Purpose: Lazy resolver
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x8000000000000000
+# GOT-NEXT: Purpose: Module pointer (GNU extension)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x[[LT1]]
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x120000000
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x120000000
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001028
+# GOT-NEXT: Access: -32712
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001030
+# GOT-NEXT: Access: -32704
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Number of TLS and multi-GOT entries: 0
+# GOT-NEXT: }
+
+# RAW: Contents of section .text:
+# RAW-NEXT: {{[0-9a-f]+}} 38800000 20800000 38800000 40800000
+# ^ = -32712 (T1)
+# ^ = -32736 (LT1)
+# ^ -32712 (T1)
+# ^ -32704 (T2)
+# RAW-NEXT: {{[0-9a-f]+}} 28800000 30800000 00000000 00000000
+# ^ -32728 (PAGE)
+# ^ -32720 (PAGE)
+# ^ T1 OFST
+# ^ T2 OFST
+# RAW-NEXT: {{[0-9a-f]+}} 50020000 54020000 00000000 00000000
+# ^ LT1 OFST
+# ^ LT2 OFST
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 0x4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x4
+ Size: 0x30
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x4
+ Symbol: LT1
+ Type: R_MIPS_GOT_DISP
+ - Offset: 0x8
+ Symbol: T1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0xC
+ Symbol: T2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x10
+ Symbol: LT1
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x14
+ Symbol: LT2
+ Type: R_MIPS_GOT_PAGE
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x1C
+ Symbol: T2
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x20
+ Symbol: LT1
+ Type: R_MIPS_GOT_OFST
+ - Offset: 0x24
+ Symbol: LT2
+ Type: R_MIPS_GOT_OFST
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x8
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x28
+ Size: 0x4
+ - Name: LT2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x2c
+ Size: 0x4
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/got16-2.test b/test/old-elf/Mips/got16-2.test
new file mode 100644
index 000000000000..01f11a5920cd
--- /dev/null
+++ b/test/old-elf/Mips/got16-2.test
@@ -0,0 +1,73 @@
+# Check handling of R_MIPS_GOT16 relocation against local
+# symbols when addresses of local data cross 64 KBytes border.
+
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t-exe %t-obj
+# RUN: llvm-objdump -s %t-exe | FileCheck %s
+
+# CHECK: Contents of section .got:
+# CHECK-NEXT: 40a000 00000000 00000080 00004000 00004100 ..........@...A.
+# lazy module 0x400000 0x410000
+# resolver pointer for L1 for L2
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '00000000000000000000000000000000'
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Address: 0x1000
+ Relocations:
+ - Offset: 0
+ Symbol: L1
+ Type: R_MIPS_GOT16
+ - Offset: 4
+ Symbol: L1
+ Type: R_MIPS_LO16
+ - Offset: 8
+ Symbol: L2
+ Type: R_MIPS_GOT16
+ - Offset: 12
+ Symbol: L2
+ Type: R_MIPS_LO16
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x9000
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: L1
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x00
+ Size: 0x8000
+ - Name: L2
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x8000
+ Size: 0x04
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
diff --git a/test/old-elf/Mips/got16-micro.test b/test/old-elf/Mips/got16-micro.test
new file mode 100644
index 000000000000..25de08e95c4e
--- /dev/null
+++ b/test/old-elf/Mips/got16-micro.test
@@ -0,0 +1,165 @@
+# REQUIRES: mips
+
+# Check handling of global/local R_MICROMIPS_GOT16 relocations.
+# RUN: llvm-mc -triple=mipsel -mattr=micromips -relocation-model=pic \
+# RUN: -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec \
+# RUN: --output-filetype=yaml %t.o \
+# RUN: | FileCheck -check-prefix YAML %s
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t2 %t.o
+# RUN: llvm-objdump -t -disassemble -mattr=micromips %t2 \
+# RUN: | FileCheck -check-prefix RAW %s
+
+# Function glob
+# YAML: - name: main
+# YAML: scope: global
+# YAML: content: [ 5C, FC, 00, 00, 42, 30, 00, 00, 5C, FC, 00, 00,
+# YAML: 42, 30, 00, 00, 5C, FC, 00, 00, 5C, FC, 00, 00,
+# YAML: 5C, FC, 00, 00 ]
+# YAML: alignment: 4 mod 16
+# YAML: code-model: mips-micro
+# YAML: references:
+# YAML-NEXT: - kind: R_MICROMIPS_GOT16
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: L000
+# YAML-NEXT: - kind: R_MICROMIPS_LO16
+# YAML-NEXT: offset: 4
+# YAML-NEXT: target: data_1
+# YAML-NEXT: - kind: R_MICROMIPS_GOT16
+# YAML-NEXT: offset: 8
+# YAML-NEXT: target: L001
+# YAML-NEXT: - kind: R_MICROMIPS_LO16
+# YAML-NEXT: offset: 12
+# YAML-NEXT: target: data_2
+# YAML-NEXT: - kind: R_MICROMIPS_GOT16
+# YAML-NEXT: offset: 16
+# YAML-NEXT: target: L002
+# YAML-NEXT: - kind: R_MICROMIPS_CALL16
+# YAML-NEXT: offset: 20
+# YAML-NEXT: target: L003
+# YAML-NEXT: - kind: R_MICROMIPS_CALL16
+# YAML-NEXT: offset: 24
+# YAML-NEXT: target: L004
+
+# Local GOT entries:
+# YAML: - ref-name: L000
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: data_1
+# YAML-NEXT: - ref-name: L001
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: data_2
+# YAML-NEXT: - ref-name: L002
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: R_MIPS_32
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: data_h
+
+# Global GOT entries:
+# YAML-NEXT: - ref-name: L003
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: bar
+# YAML-NEXT: - kind: R_MIPS_32
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: bar
+# YAML-NEXT: - ref-name: L004
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: foo
+
+# RAW: Disassembly of section .text:
+# RAW: main:
+# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 18 80 lw $2, -32744($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 40 10 addiu $2, $2, 4160
+# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 1c 80 lw $2, -32740($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 60 20 addiu $2, $2, 8288
+# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 20 80 lw $2, -32736($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 24 80 lw $2, -32732($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 28 80 lw $2, -32728($gp)
+
+# RAW: SYMBOL TABLE:
+# RAW: {{[0x0-9a-f]+}} *UND* 00000000
+# RAW: {{[0x0-9a-f]+}} l .data 00001020 data_1
+# RAW: {{[0x0-9a-f]+}} l .data 00000001 data_2
+# RAW: {{[0x0-9a-f]+}} g F .text 00000004 bar
+# RAW: {{[0x0-9a-f]+}} g F .text 0000001c main
+# RAW: {{[0x0-9a-f]+}} g .data 00000001 data_h
+
+ .data
+ .type data_1, @object
+ .size data_1, 4128
+data_1:
+ .byte 1
+ .space 4127
+ .type data_2, @object
+ .size data_2, 1
+data_2:
+ .byte 2
+ .hidden data_h
+ .globl data_h
+ .type data_h, @object
+ .size data_h, 1
+data_h:
+ .byte 3
+
+ .text
+ .globl bar
+ .set micromips
+ .ent bar
+ .type bar, @function
+bar:
+ nop
+ .end bar
+ .size bar, .-bar
+
+ .globl main
+ .set micromips
+ .ent main
+ .type main, @function
+main:
+ lw $2,%got(data_1)($28)
+ addiu $2,$2,%lo(data_1)
+ lw $2,%got(data_2)($28)
+ addiu $2,$2,%lo(data_2)
+ lw $2,%got(data_h)($28)
+ lw $2,%call16(bar)($28)
+ lw $2,%call16(foo)($28)
+
+ .end main
+ .size main, .-main
diff --git a/test/old-elf/Mips/got16.test b/test/old-elf/Mips/got16.test
new file mode 100644
index 000000000000..4dde15a11c26
--- /dev/null
+++ b/test/old-elf/Mips/got16.test
@@ -0,0 +1,196 @@
+# REQUIRES: mips
+
+# Check handling of global/local GOT16 relocations.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec \
+# RUN: --output-filetype=yaml %t.o \
+# RUN: | FileCheck -check-prefix YAML %s
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t2 %t.o
+# RUN: llvm-objdump -t -disassemble %t2 | FileCheck -check-prefix RAW %s
+
+# Function glob
+# YAML: - name: glob
+# YAML: scope: global
+# YAML: content: [ 00, 00, 84, 8F, 00, 00, 84, 24, 01, 00, 84, 8F,
+# YAML: 00, 02, 84, 24, 00, 00, 84, 8F, 00, 00, 84, 8F,
+# YAML: 00, 00, 84, 8F ]
+# YAML: alignment: 4
+# YAML: references:
+# YAML: - kind: R_MIPS_GOT16
+# YAML: offset: 0
+# YAML: target: L000
+# YAML: - kind: R_MIPS_LO16
+# YAML: offset: 4
+# YAML: target: L009
+# YAML: - kind: R_MIPS_GOT16
+# YAML: offset: 8
+# YAML: target: L002
+# YAML: addend: 66048
+# YAML: - kind: R_MIPS_LO16
+# YAML: offset: 12
+# YAML: target: L009
+# YAML: addend: 512
+# YAML: - kind: R_MIPS_GOT16
+# YAML: offset: 16
+# YAML: target: L004
+# YAML: - kind: R_MIPS_CALL16
+# YAML: offset: 20
+# YAML: target: L005
+# YAML: - kind: R_MIPS_CALL16
+# YAML: offset: 24
+# YAML: target: L006
+
+# Local GOT entries:
+# YAML: - ref-name: L000
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: L009
+# YAML-NEXT: - ref-name: L002
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: L009
+# YAML-NEXT: addend: 66048
+# YAML-NEXT: - ref-name: L004
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: R_MIPS_32
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: hidden
+
+# Global GOT entries:
+# YAML-NEXT: - ref-name: L005
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: glob
+# YAML-NEXT: - kind: R_MIPS_32
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: glob
+# YAML-NEXT: - ref-name: L006
+# YAML-NEXT: type: got
+# YAML-NEXT: content: [ 00, 00, 00, 00 ]
+# YAML-NEXT: alignment: 4
+# YAML-NEXT: section-choice: custom-required
+# YAML-NEXT: section-name: .got
+# YAML-NEXT: permissions: rw-
+# YAML-NEXT: references:
+# YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
+# YAML-NEXT: offset: 0
+# YAML-NEXT: target: extern
+
+# RAW: Disassembly of section .text:
+# RAW: glob:
+# RAW-NEXT: {{[0x0-9a-f]+}}: 18 80 84 8f lw $4, -32744($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 00 20 84 24 addiu $4, $4, 8192
+# RAW-NEXT: {{[0x0-9a-f]+}}: 1c 80 84 8f lw $4, -32740($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 00 22 84 24 addiu $4, $4, 8704
+# RAW-NEXT: {{[0x0-9a-f]+}}: 20 80 84 8f lw $4, -32736($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 24 80 84 8f lw $4, -32732($gp)
+# RAW-NEXT: {{[0x0-9a-f]+}}: 28 80 84 8f lw $4, -32728($gp)
+
+# RAW: SYMBOL TABLE:
+# RAW: {{[0x0-9a-f]+}} *UND* 00000000
+# RAW: {{[0x0-9a-f]+}} l .data 00000000 str1
+# RAW: {{[0x0-9a-f]+}} l .data 00000005 str2
+# RAW: {{[0x0-9a-f]+}} g F .text 0000001c glob
+# RAW: {{[0x0-9a-f]+}} g .data 00000004 hidden
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '0000848F000084240100848F000284240000848F0000848F0000848F'
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: .data
+ Type: R_MIPS_GOT16
+ - Offset: 0x04
+ Symbol: .data
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: .data
+ Type: R_MIPS_GOT16
+ - Offset: 0x0C
+ Symbol: .data
+ Type: R_MIPS_LO16
+ - Offset: 0x10
+ Symbol: hidden
+ Type: R_MIPS_GOT16
+ - Offset: 0x14
+ Symbol: glob
+ Type: R_MIPS_CALL16
+ - Offset: 0x18
+ Symbol: extern
+ Type: R_MIPS_CALL16
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x10209
+
+Symbols:
+ Local:
+ - Name: str1
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x10200
+ - Name: str2
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x10200
+ Size: 0x05
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: hidden
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x10205
+ Size: 0x04
+ Visibility: STV_HIDDEN
+ - Name: extern
diff --git a/test/old-elf/Mips/gotsym.test b/test/old-elf/Mips/gotsym.test
new file mode 100644
index 000000000000..bc89ba5d3768
--- /dev/null
+++ b/test/old-elf/Mips/gotsym.test
@@ -0,0 +1,43 @@
+# Check _gp_disp and GOT_OFFSET_TABLE value
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t.so %t.o
+# RUN: llvm-objdump -h -t %t.so | FileCheck -check-prefix=SHARED %s
+
+# SHARED: Sections:
+# SHARED: Idx Name Size Address Type
+# SHARED: 6 .got 00000008 0000000000001000 DATA
+# SHARED: SYMBOL TABLE:
+# SHARED: 00001000 .got 00000000 _GLOBAL_OFFSET_TABLE_
+# SHARED: 00008ff0 g *ABS* 00000000 _gp
+# SHARED: 00008ff0 g *ABS* 00000000 _gp_disp
+
+# RUN: lld -flavor old-gnu -target mipsel -e main --noinhibit-exec -o %t.exe %t.o
+# RUN: llvm-objdump -h -t %t.exe | FileCheck -check-prefix=EXE %s
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 7 .got 00000008 0000000000401000 DATA
+# EXE: SYMBOL TABLE:
+# EXE: 00401000 .got 00000000 _GLOBAL_OFFSET_TABLE_
+# EXE: 00408ff0 g *ABS* 00000000 _gp
+# EXE: 00408ff0 g *ABS* 00000000 _gp_disp
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/gp-sym-1-micro.test b/test/old-elf/Mips/gp-sym-1-micro.test
new file mode 100644
index 000000000000..0e1bea9c38da
--- /dev/null
+++ b/test/old-elf/Mips/gp-sym-1-micro.test
@@ -0,0 +1,88 @@
+# Check that microMIPS relocations against __gnu_local_gp
+# use "gp" value as target.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x408FF0
+
+# SEC: Contents of section .text:
+# SEC-NEXT: 400184 00004100 0000f08f 2000bc00 ..A..... ...
+# SEC: Contents of section .got:
+# SEC-NEXT: 401000 00000000 00000080 ........
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 12
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: __gnu_local_gp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x04
+ Symbol: __gnu_local_gp
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x08
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: __gnu_local_gp
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/gp-sym-1.test b/test/old-elf/Mips/gp-sym-1.test
new file mode 100644
index 000000000000..ebb73c3afd60
--- /dev/null
+++ b/test/old-elf/Mips/gp-sym-1.test
@@ -0,0 +1,86 @@
+# Check that relocations against __gnu_local_gp use "gp" value as target.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x408FF0
+
+# SEC: Contents of section .text:
+# SEC-NEXT: 400190 41000000 f08f0000 60001000
+# SEC: Contents of section .got:
+# SEC-NEXT: 401000 00000000 00000080
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 12
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: __gnu_local_gp
+ Type: R_MIPS_HI16
+ - Offset: 0x04
+ Symbol: __gnu_local_gp
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: __gnu_local_gp
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/gp-sym-2.test b/test/old-elf/Mips/gp-sym-2.test
new file mode 100644
index 000000000000..b6d95f350af3
--- /dev/null
+++ b/test/old-elf/Mips/gp-sym-2.test
@@ -0,0 +1,103 @@
+# Check that R_MIPS32 relocation against __gnu_local_gp causes emitting
+# of R_MIPS_REL32 relocation in case of shared library file linking
+# and does not produce any dynamic relocation in case of linking a non-shared
+# executable file.
+
+# Now the test failed because the __gnu_local_gp symbol becomes defined
+# absolute symbol and we do not generate R_MIPS_REL32 in case of shared
+# library linking.
+# XFAIL: *
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-1.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t-1.so
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=EXE %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t-2.so %t-o.o %t-1.so
+# RUN: llvm-readobj -r %t-2.so | FileCheck -check-prefix=SO %s
+
+# EXE: Relocations [
+# EXE-NEXT: ]
+
+# SO: Relocations [
+# SO-NEXT: Section (5) .rel.dyn {
+# SO-NEXT: 0x0 R_MIPS_NONE - 0x0
+# SO-NEXT: 0x2EC R_MIPS_REL32 __gnu_local_gp 0x0
+# SO-NEXT: }
+# SO-NEXT: ]
+
+# so.so
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 12
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: __gnu_local_gp
+ Type: R_MIPS_32
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: T2
+ Type: R_MIPS_CALL16
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: __gnu_local_gp
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/hilo16-1.test b/test/old-elf/Mips/hilo16-1.test
new file mode 100644
index 000000000000..b284140f748f
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-1.test
@@ -0,0 +1,40 @@
+# REQUIRES: mips
+
+# Check handling multiple HI16 relocation followed by a single LO16 relocation.
+
+# RUN: llvm-mc -arch=mipsel -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -d -t %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: T0:
+# CHECK-NEXT: 400180: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: 42 00 08 3c lui $8, 66
+# CHECK-NEXT: {{[0-9a-f]+}}: 3e 00 08 3c lui $8, 62
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 02 08 3c lui $8, 576
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 fe 08 3c lui $8, 65088
+# CHECK-NEXT: {{[0-9a-f]+}}: a5 01 08 25 addiu $8, $8, 421
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400180 g F .text 00000024 T0
+# CHECK: 004001a4 g F .text 00000004 T1
+
+ .text
+ .globl T0
+T0:
+ lui $8, %hi(T1+1)
+ lui $8, %hi(T1-1)
+ lui $8, %hi(T1+0x1ff)
+ lui $8, %hi(T1+(-0x1ff))
+ lui $8, %hi(T1+0x1ffff)
+ lui $8, %hi(T1+(-0x1ffff))
+ lui $8, %hi(T1+0x1ffffff)
+ lui $8, %hi(T1+(-0x1ffffff))
+ addiu $8, $8, %lo(T1+(-0x1ffffff))
+
+ .globl T1
+T1:
+ nop
diff --git a/test/old-elf/Mips/hilo16-2.test b/test/old-elf/Mips/hilo16-2.test
new file mode 100644
index 000000000000..e47b9003a8dd
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-2.test
@@ -0,0 +1,70 @@
+# REQUIRES: mips
+
+# Check handling of HI16 and LO16 relocations for regular symbol.
+#
+# R_MIPS_HI16: (AHL + S) - (short)(AHL + S)
+# R_MIPS_LO16: AHL + S
+# where AHL = (AHI << 16) + ALO
+
+# RUN: llvm-mc -arch=mipsel -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: T0:
+# CHECK-NEXT: 400180: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: c1 01 08 25 addiu $8, $8, 449
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: bf 01 08 25 addiu $8, $8, 447
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: bf 03 08 25 addiu $8, $8, 959
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 00 08 3c lui $8, 64
+# CHECK-NEXT: {{[0-9a-f]+}}: c1 ff 08 25 addiu $8, $8, -63
+#
+# CHECK: T1:
+# CHECK-NEXT: 4001a0: 42 00 08 3c lui $8, 66
+# CHECK-NEXT: {{[0-9a-f]+}}: bf 01 08 25 addiu $8, $8, 447
+# CHECK-NEXT: {{[0-9a-f]+}}: 3e 00 08 3c lui $8, 62
+# CHECK-NEXT: {{[0-9a-f]+}}: c1 01 08 25 addiu $8, $8, 449
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 02 08 3c lui $8, 576
+# CHECK-NEXT: {{[0-9a-f]+}}: bf 01 08 25 addiu $8, $8, 447
+# CHECK-NEXT: {{[0-9a-f]+}}: 40 fe 08 3c lui $8, 65088
+# CHECK-NEXT: {{[0-9a-f]+}}: c1 01 08 25 addiu $8, $8, 449
+#
+# CHECK: T2:
+# CHECK-NEXT: 4001c0: 00 00 00 00 nop
+
+ .section .text.1,"ax",@progbits
+ .align 4
+ .globl T0
+T0:
+ lui $8, %hi(T2+1)
+ addiu $8, $8, %lo(T2+1)
+ lui $8, %hi(T2+(-1))
+ addiu $8, $8, %lo(T2+(-1))
+ lui $8, %hi(T2+0x1ff)
+ addiu $8, $8, %lo(T2+0x1ff)
+ lui $8, %hi(T2+(-0x1ff))
+ addiu $8, $8, %lo(T2+(-0x1ff))
+ .size T0, .-T0
+
+ .section .text.2,"ax",@progbits
+ .align 4
+ .globl T1
+T1:
+ lui $8, %hi(T2+0x1ffff)
+ addiu $8, $8, %lo(T2+0x1ffff)
+ lui $8, %hi(T2+(-0x1ffff))
+ addiu $8, $8, %lo(T2+(-0x1ffff))
+ lui $8, %hi(T2+0x1ffffff)
+ addiu $8, $8, %lo(T2+0x1ffffff)
+ lui $8, %hi(T2+(-0x1ffffff))
+ addiu $8, $8, %lo(T2+(-0x1ffffff))
+ .size T1, .-T1
+
+ .section .text.3,"ax",@progbits
+ .align 4
+ .globl T2
+T2:
+ nop
+ .size T2, .-T2
diff --git a/test/old-elf/Mips/hilo16-3-overflow.test b/test/old-elf/Mips/hilo16-3-overflow.test
new file mode 100644
index 000000000000..94fc90b3be54
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-3-overflow.test
@@ -0,0 +1,44 @@
+# Check R_MIPS_HI16 relocation overflow handling.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from T0+0 to _gp_disp+2147483648 of type 5 (R_MIPS_HI16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0080000000000000"
+# ^ %hi(gp+0x80000000)
+# ^ %lo(gp+0x80000000)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x4
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: _gp_disp
diff --git a/test/old-elf/Mips/hilo16-3.test b/test/old-elf/Mips/hilo16-3.test
new file mode 100644
index 000000000000..17873c0a629c
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-3.test
@@ -0,0 +1,74 @@
+# Check handling of HI16 and LO16 relocations for _gp_disp.
+#
+# R_MIPS_HI16: (AHL + GP - P) - (short)(AHL + GP - P)
+# R_MIPS_LO16: AHL + GP - P + 4
+# where AHL = (AHI << 16) + ALO
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-objdump -s -t %t.so | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 00d0 0100083c 218f0885 0100083c 178f0885
+# CHECK-NEXT: 00e0 0100083c 0f910885 0100083c 098d0885
+# CHECK-NEXT: 00f0 0200083c ffff0885
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 000000d0 g F .text 00000028 T0
+# CHECK: 00008ff0 g *ABS* 00000000 _gp_disp
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000083C010008850000083CFFFF08850000083CFF0108850000083C01FE08850200083CFFFF0885"
+# ^ %hi(gp+1) ^ %hi(gp-1) ^ %hi(gp+0x1ff) ^ %hi(gp-0x1ff) ^ %lo(gp+0x1ffff)
+# ^ %lo(gp+1) ^ %lo(gp-1) ^ %lo(gp+0x1ff) ^ %lo(gp-0x1ff)
+# ^ %hi(gp+0x1ffff)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x4
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+ - Offset: 0x8
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0xC
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+ - Offset: 0x10
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x14
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+ - Offset: 0x18
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x1C
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 80
+ - Name: _gp_disp
diff --git a/test/old-elf/Mips/hilo16-4.test b/test/old-elf/Mips/hilo16-4.test
new file mode 100644
index 000000000000..2db17344e30f
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-4.test
@@ -0,0 +1,93 @@
+# REQUIRES: mips
+
+# Check pairing of R_MIPS_HI16 and R_MIPS_LO16 relocations.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -e glob1 -o %t-exe %t-obj
+# RUN: llvm-objdump -t -disassemble %t-exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK: glob1:
+# CHECK-NEXT: 400130: 40 00 04 3c lui $4, 64
+# CHECK-NEXT: 400134: ff 9f a6 8c lw $6, -24577($5)
+
+# CHECK: glob2:
+# CHECK-NEXT: 400138: 00 20 c7 80 lb $7, 8192($6)
+# CHECK-NEXT: 40013c: 04 20 c8 80 lb $8, 8196($6)
+
+# CHECK: glob3:
+# CHECK-NEXT: 400140: 40 80 05 3c lui $5, 32832
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400130 g F .text 00000008 glob1
+# CHECK: 00400138 g F .text 00000008 glob2
+# CHECK: 00400140 g F .text 00000004 glob3
+# CHECK: 00402000 g .data 0000000c X
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+# glob1:
+# lui $4,%hi(X) # rel A
+# lw $6,%lo(X+32767)($5) # rel B
+# glob2:
+# lb $7,%lo(X)($6) # rel C
+# lb $8,%lo(X+4)($6) # rel D
+# glob3:
+# lui $5,%hi(X+32767) # rel E
+ Content: "0000043CFF7FA68C0000C7800400C880FF7F053C"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "000000000000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x10 # rel E
+ Symbol: X
+ Type: R_MIPS_HI16
+ - Offset: 0x04 # rel B
+ Symbol: X
+ Type: R_MIPS_LO16
+ - Offset: 0x00 # rel A
+ Symbol: X
+ Type: R_MIPS_HI16
+ - Offset: 0x0C # rel D
+ Symbol: X
+ Type: R_MIPS_LO16
+ - Offset: 0x08 # rel C
+ Symbol: X
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: glob1
+ Section: .text
+ Value: 0x0
+ Size: 8
+ - Name: glob2
+ Section: .text
+ Value: 0x8
+ Size: 8
+ - Name: glob3
+ Section: .text
+ Value: 0x10
+ Size: 4
+ - Name: X
+ Section: .data
+ Value: 0x0
+ Size: 12
diff --git a/test/old-elf/Mips/hilo16-5.test b/test/old-elf/Mips/hilo16-5.test
new file mode 100644
index 000000000000..597425e8ba74
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-5.test
@@ -0,0 +1,103 @@
+# Check that linker shows a warning when
+# there is orphaned R_MIPS_HI16 relocation.
+
+# RUN: yaml2obj -format=elf -o %t-so.o -docnum 1 %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -o %t-o.o -docnum 2 %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so 2>&1 \
+# RUN: | FileCheck -check-prefix=DIAG %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=DATA %s
+
+# DIAG: lld warning: cannot matching LO16 relocation
+# DIAG: lld warning: cannot matching LO16 relocation
+
+# DATA: Contents of section .data:
+# DATA-NEXT: 402000 40000000 10200000 40000000 @.... ..@...
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "000000000000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_HI16
+ - Offset: 0x08
+ Symbol: D2
+ Type: R_MIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_LO16
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MIPS_HI16
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: D1
+ - Name: D2
+...
diff --git a/test/old-elf/Mips/hilo16-8-micro.test b/test/old-elf/Mips/hilo16-8-micro.test
new file mode 100644
index 000000000000..ef8ac782341c
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-8-micro.test
@@ -0,0 +1,81 @@
+# REQUIRES: mips
+
+# Check calculation of AHL addendums for R_MICROMIPS_HI16 / R_MICROMIPS_LO16
+# relocations for a regular symbol.
+
+# RUN: llvm-mc -arch=mipsel -filetype=obj -mattr=micromips -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: T0:
+# CHECK-NEXT: 400180: a8 41 40 00 lui $8, 64
+# CHECK-NEXT: 400184: 08 31 c1 01 addiu $8, $8, 449
+# CHECK-NEXT: 400188: a8 41 41 00 lui $8, 65
+# CHECK-NEXT: 40018c: 08 31 bf 81 addiu $8, $8, -32321
+# CHECK-NEXT: 400190: a8 41 41 00 lui $8, 65
+# CHECK-NEXT: 400194: 08 31 40 82 addiu $8, $8, -32192
+# CHECK-NEXT: 400198: a8 41 42 00 lui $8, 66
+# CHECK-NEXT: 40019c: 08 31 c0 81 addiu $8, $8, -32320
+#
+# CHECK: T1:
+# CHECK-NEXT: 4001a0: a8 41 40 40 lui $8, 16448
+# CHECK-NEXT: 4001a4: 08 31 c0 01 addiu $8, $8, 448
+# CHECK-NEXT: 4001a8: a8 41 40 80 lui $8, 32832
+# CHECK-NEXT: 4001ac: 08 31 c0 01 addiu $8, $8, 448
+# CHECK-NEXT: 4001b0: a8 41 c1 80 lui $8, 32961
+# CHECK-NEXT: 4001b4: 08 31 40 82 addiu $8, $8, -32192
+# CHECK-NEXT: 4001b8: 00 00 00 00 nop
+# CHECK-NEXT: 4001bc: 00 00 00 00 nop
+#
+# CHECK: T2:
+# CHECK-NEXT: 4001c0: 00 00 00 00 nop
+# CHECK-NEXT: 4001c4: a8 41 40 00 lui $8, 64
+# CHECK-NEXT: 4001c8: a8 41 40 00 lui $8, 64
+# CHECK-NEXT: 4001cc: a8 41 41 00 lui $8, 65
+# CHECK-NEXT: 4001d0: a8 41 42 00 lui $8, 66
+# CHECK-NEXT: 4001d4: a8 41 40 40 lui $8, 16448
+# CHECK-NEXT: 4001d8: a8 41 40 80 lui $8, 32832
+# CHECK-NEXT: 4001dc: a8 41 c1 80 lui $8, 32961
+# CHECK-NEXT: 4001e0: 08 31 00 82 addiu $8, $8, -32256
+
+ .section .text.1,"ax",@progbits
+ .align 4
+ .globl T0
+T0:
+ lui $8, %hi(T2+1)
+ addiu $8, $8, %lo(T2+1)
+ lui $8, %hi(T2+0x7fff)
+ addiu $8, $8, %lo(T2+0x7fff)
+ lui $8, %hi(T2+0x8080)
+ addiu $8, $8, %lo(T2+0x8080)
+ lui $8, %hi(T2+0x18000)
+ addiu $8, $8, %lo(T2+0x18000)
+ .size T0, .-T0
+
+ .section .text.2,"ax",@progbits
+ .align 4
+ .globl T1
+T1:
+ lui $8, %hi(T2+0x40000000)
+ addiu $8, $8, %lo(T2+0x40000000)
+ lui $8, %hi(T2+0x80000000)
+ addiu $8, $8, %lo(T2+0x80000000)
+ lui $8, %hi(T2+0x80808080)
+ addiu $8, $8, %lo(T2+0x80808080)
+ .size T1, .-T1
+
+ .section .text.3,"ax",@progbits
+ .align 4
+ .globl T2
+T2:
+ nop
+ lui $8, %hi(T0+0x1)
+ lui $8, %hi(T0+0x7fff)
+ lui $8, %hi(T0+0x8080)
+ lui $8, %hi(T0+0x18000)
+ lui $8, %hi(T0+0x40000000)
+ lui $8, %hi(T0+0x80000000)
+ lui $8, %hi(T0+0x80808080)
+ addiu $8, $8, %lo(T0+0x80808080)
+ .size T2, .-T2
diff --git a/test/old-elf/Mips/hilo16-9-micro.test b/test/old-elf/Mips/hilo16-9-micro.test
new file mode 100644
index 000000000000..293e35f36cd5
--- /dev/null
+++ b/test/old-elf/Mips/hilo16-9-micro.test
@@ -0,0 +1,142 @@
+# Check calculation of AHL addendums for R_MICROMIPS_HI16 / R_MICROMIPS_LO16
+# relocations for the _gp_disp symbol.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-objdump -s -t %t.so | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 0110 00000100 0000e08e 00000100 0000d60e
+# CHECK-NEXT: 0120 00000100 00004f0f 00000000 00000000
+# CHECK-NEXT: 0130 00000200 0000bf0e 00000140 0000378f
+# CHECK-NEXT: 0140 00000100 00000100 00000200 00000300
+# CHECK-NEXT: 0150 00000140 00001f8f
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000110 g F .text 00000018 T0
+# CHECK: 00000130 g F .text 00000010 T1
+# CHECK: 00000140 g F .text 00000018 T2
+# CHECK: 00008ff0 g *ABS* 00000000 _gp_disp
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text.1
+ Type: SHT_PROGBITS
+ Content: "0000000000000100000000000000FF7F0000010000008080"
+# ^ %hi(gp+0x1) ^ %hi(gp+0x7fff) ^ %lo(gp+0x8080)
+# ^ %lo(gp+0x1) ^ %lo(gp+0x7fff)
+# ^ %hi(gp+0x8080)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text.1
+ Type: SHT_REL
+ Info: .text.1
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x4
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x8
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0xC
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x10
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x14
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+
+- Name: .text.2
+ Type: SHT_PROGBITS
+ Content: "00000200000000800000004000008000"
+# ^ %hi(gp+0x18000) ^ %lo(gp+0x40000080)
+# ^ %lo(gp+0x18000)
+# ^ %hi(gp+0x40000080)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text.2
+ Type: SHT_REL
+ Info: .text.2
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x4
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x8
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0xC
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+
+- Name: .text.3
+ Type: SHT_PROGBITS
+ Content: "000000000000000000000100000002000000004000008000"
+# ^ %hi(gp+0x1) ^ %hi(gp+0x8080) ^ %lo(gp+0x40000080)
+# ^ %hi(gp+0x7fff) ^ %hi(gp+0x40000080)
+# ^ %hi(gp+0x18000)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text.3
+ Type: SHT_REL
+ Info: .text.3
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x4
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x8
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0xC
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x10
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x14
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text.1
+ Type: STT_FUNC
+ Value: 0
+ Size: 24
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ Section: .text.2
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+ Section: .text.3
+ Type: STT_FUNC
+ Value: 0
+ Size: 24
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: _gp_disp
diff --git a/test/old-elf/Mips/initfini-micro.test b/test/old-elf/Mips/initfini-micro.test
new file mode 100644
index 000000000000..ca2708f1bb29
--- /dev/null
+++ b/test/old-elf/Mips/initfini-micro.test
@@ -0,0 +1,45 @@
+# Check that if _init/_fini symbols are microMIPS encoded, DT_INIT/DT_FINI tags
+# use adjusted values with set the last bit.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
+
+# CHECK: Name: _init (1)
+# CHECK-NEXT: Value: 0xF5
+# CHECK: Name: _fini (7)
+# CHECK-NEXT: Value: 0xF9
+#
+# CHECK: 0x0000000C INIT 0xF5
+# CHECK: 0x0000000D FINI 0xF9
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x18
+
+Symbols:
+ Global:
+ - Name: _init
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 0x4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: _fini
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x4
+ Size: 0x4
+ Other: [ STO_MIPS_MICROMIPS ]
+...
diff --git a/test/old-elf/Mips/interpreter-64.test b/test/old-elf/Mips/interpreter-64.test
new file mode 100644
index 000000000000..7cfd0c51a3c4
--- /dev/null
+++ b/test/old-elf/Mips/interpreter-64.test
@@ -0,0 +1,26 @@
+# Check program interpreter setup.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -e main -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .interp:
+# CHECK-NEXT: {{[0-9a-f]+}} 2f6c6962 36342f6c 642e736f 2e3100 /lib64/ld.so.1.
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/interpreter-n32.test b/test/old-elf/Mips/interpreter-n32.test
new file mode 100644
index 000000000000..7d17256ba43c
--- /dev/null
+++ b/test/old-elf/Mips/interpreter-n32.test
@@ -0,0 +1,27 @@
+# Check program interpreter setup in case of N32 ABI.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .interp:
+# CHECK-NEXT: {{[0-9a-f ]+}} /lib32/ld.so.1.
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64, EF_MIPS_ABI2 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
diff --git a/test/old-elf/Mips/interpreter.test b/test/old-elf/Mips/interpreter.test
new file mode 100644
index 000000000000..4ae17b42df1c
--- /dev/null
+++ b/test/old-elf/Mips/interpreter.test
@@ -0,0 +1,26 @@
+# Check program interpreter setup.
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e main -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .interp:
+# CHECK-NEXT: {{[0-9a-f]+}} 2f6c6962 2f6c642e 736f2e31 00 /lib/ld.so.1.
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/invalid-reginfo.test b/test/old-elf/Mips/invalid-reginfo.test
new file mode 100644
index 000000000000..2856ecc92607
--- /dev/null
+++ b/test/old-elf/Mips/invalid-reginfo.test
@@ -0,0 +1,28 @@
+# Check that LLD shows an error if .reginfo section has invalid size
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -o %t.exe %t.o 2>&1 | FileCheck %s
+
+# CHECK: Invalid size of MIPS_REGINFO section
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x01
+ Size: 0x25
+Symbols:
+ Global:
+ - Name: main
+ Section: .text
diff --git a/test/old-elf/Mips/jalx-align-err.test b/test/old-elf/Mips/jalx-align-err.test
new file mode 100644
index 000000000000..8fc5310bbad8
--- /dev/null
+++ b/test/old-elf/Mips/jalx-align-err.test
@@ -0,0 +1,46 @@
+# Check that LLD shows an error if jalx target value is not word-aligned.
+
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t-exe %t-obj 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: The jalx target 0x{{[0-9a-f]+}} is not word-aligned
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 6
+ Size: 2
diff --git a/test/old-elf/Mips/jalx-jalr.test b/test/old-elf/Mips/jalx-jalr.test
new file mode 100644
index 000000000000..d02e9d7c2bac
--- /dev/null
+++ b/test/old-elf/Mips/jalx-jalr.test
@@ -0,0 +1,47 @@
+# Check that R_MIPS_JALR relocation does not affect code in case of cross jump.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9a-f]+}} 08002003 00000000
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "0800200300000000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: M1
+ Type: R_MIPS_JALR
+
+Symbols:
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: M1
+ Type: STT_FUNC
+ Section: .text
+ Value: 4
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/old-elf/Mips/jalx.test b/test/old-elf/Mips/jalx.test
new file mode 100644
index 000000000000..60d6ea71193c
--- /dev/null
+++ b/test/old-elf/Mips/jalx.test
@@ -0,0 +1,71 @@
+# Check jal => jalx conversion in case of mixed microMIPS and regular code.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T1 -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+# RUN: llvm-nm %t.exe | FileCheck -check-prefix=SYM %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 400130 00000000 4c001074 10f04d00 4e001074
+
+# SYM: 00400138 T M1
+# SYM: 00400130 T M2
+# SYM: 0040013c T T1
+# SYM: 00400134 T T2
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_MICROMIPS, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "000000000000000c00f400000000000c"
+# ^ M2 ^ T2 ^ M1 ^ T1
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 4
+ Symbol: M2
+ Type: R_MIPS_26
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ - Offset: 12
+ Symbol: M1
+ Type: R_MIPS_26
+
+Symbols:
+ Global:
+ - Name: M2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Value: 4
+ Size: 4
+ - Name: M1
+ Type: STT_FUNC
+ Section: .text
+ Value: 8
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 12
+ Size: 4
diff --git a/test/old-elf/Mips/jump-fix-err.test b/test/old-elf/Mips/jump-fix-err.test
new file mode 100644
index 000000000000..0e5a5298a731
--- /dev/null
+++ b/test/old-elf/Mips/jump-fix-err.test
@@ -0,0 +1,45 @@
+# Check that LLD shows an error in case
+# of replacing an unknown unstruction by jalx.
+
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: not lld -flavor old-gnu -target mipsel -o %t-exe %t-obj 2>&1 | FileCheck %s
+
+# CHECK: Unsupported jump opcode (0x0) for ISA modes cross call
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T0
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Type: STT_FUNC
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/la25-stub-be.test b/test/old-elf/Mips/la25-stub-be.test
new file mode 100644
index 000000000000..9527e7a80644
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-be.test
@@ -0,0 +1,113 @@
+# REQUIRES: mips
+
+# Check LA25 stubs creation in the big-endian case.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t-npic.o %t-pic.o %t-main.o
+
+# RUN: llvm-objdump -disassemble %t.exe | FileCheck %s
+
+# CHECK: 400170: 3c 19 00 40 lui $25, 64
+# CHECK-NEXT: 400174: 08 10 00 50 j 4194624
+# CHECK-NEXT: 400178: 27 39 01 40 addiu $25, $25, 320
+# CHECK-NEXT: 40017c: 00 00 00 00 nop
+
+# npic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1N
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 40
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 8
+ Symbol: .text
+ Type: R_MIPS_26
+ - Offset: 16
+ Symbol: __start
+ Type: R_MIPS_26
+ - Offset: 24
+ Symbol: T1N
+ Type: R_MIPS_26
+ - Offset: 32
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 16
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: __start
+ Section: .text
+ - Name: T1
+ - Name: T1N
+...
diff --git a/test/old-elf/Mips/la25-stub-micro-be.test b/test/old-elf/Mips/la25-stub-micro-be.test
new file mode 100644
index 000000000000..0bea3e6ac8b0
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-micro-be.test
@@ -0,0 +1,121 @@
+# REQUIRES: mips
+
+# Check LA25 stubs creation in the big-endian case.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t-npic.o %t-pic.o %t-main.o
+
+# RUN: llvm-objdump -disassemble -mattr=micromips %t.exe | FileCheck %s
+
+# CHECK: 400170: 41 be 00 40 lui $fp, 64
+# CHECK-NEXT: 400174: d4 20 00 a0 j 4194624
+# CHECK-NEXT: 400178: 33 39 01 41 addiu $25, $25, 321
+# CHECK-NEXT: 40017c: 00 00 00 00 nop
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1N
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Content: '0000000000000000f400000000000000f400000000000000f400000000000000f400000000000000'
+# jal loc jal glob jal T1N jal T1
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 8
+ Symbol: .text
+ Type: R_MICROMIPS_26_S1
+ - Offset: 16
+ Symbol: glob
+ Type: R_MICROMIPS_26_S1
+ - Offset: 24
+ Symbol: T1N
+ Type: R_MICROMIPS_26_S1
+ - Offset: 32
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 16
+ Size: 24
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: __start
+ Section: .text
+ Size: 16
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ - Name: T1N
+...
diff --git a/test/old-elf/Mips/la25-stub-micro.test b/test/old-elf/Mips/la25-stub-micro.test
new file mode 100644
index 000000000000..c01da5908829
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-micro.test
@@ -0,0 +1,136 @@
+# Check microMIPS LA25 stubs creation when PIC code
+# is called from non-PIC routines.
+
+# Build executable from pic and non-pic code.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe \
+# RUN: %t-npic.o %t-pic.o %t-main.o
+
+# RUN: llvm-nm %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=ASM %s
+
+# SYM: 00400140 T T1
+# SYM: 00400130 T T1N
+# SYM: 00400144 T glob
+# SYM: 00400154 t loc
+
+# ASM: Contents of section .text:
+# ASM-NEXT: 400130 00000000 00000000 00000000 00000000
+# ASM-NEXT: 400140 00000000 00000000 00000000 10f05100
+# 0x100055 << 2 == 0x400154 (jalx glob) --^
+# ASM-NEXT: 400150 00000000 20f4a200 00000000 20f49800
+# ^-- 0x100055 << 2 == 0x400154 (jal glob)
+# 0x10004c << 2 == 0x400130 (jal T1N) --^
+# ASM-NEXT: 400160 00000000 20f4b800 00000000 00000000
+# ^-- 0x100054 << 2 == 0x400170 (jal T1 stub)
+# ASM-NEXT: 400170 b9414000 20d4a000 39334101 00000000
+# ^-- j 0x400140 (T1)
+
+# npic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1N
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_CPIC, EF_MIPS_MICROMIPS ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '000000000000000000f400000000000000f400000000000000f400000000000000f4000000000000'
+# jal loc jal glob jal T1N jal T1
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x18
+ Symbol: T1N
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x20
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ Size: 0x18
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Size: 0x10
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ - Name: T1N
+...
diff --git a/test/old-elf/Mips/la25-stub-npic-01.test b/test/old-elf/Mips/la25-stub-npic-01.test
new file mode 100644
index 000000000000..9ff6af06cb2b
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-npic-01.test
@@ -0,0 +1,153 @@
+# Check that LA25 stubs are created for branch relocations
+# when a PIC function is called from non-pic code.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-reg.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe \
+# RUN: %t-reg.o %t-micro.o %t-pic.o
+
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK-NOT: Contents of section .plt:
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 5c001000 0f000000 0e000000 0d000000
+# ^ T0 ^ .pic.T1 (0x400170)
+# ^ 0x400134 + 0x3c = 0x400170
+# ^ ...
+# CHECK-NEXT: 400140 2000c000 1e000000 1c000000 00001a00
+# ^ T3 ^ .pic.T2
+# ^ ...
+# CHECK-NEXT: 400150 00000c00 00000000 00000000 00000000
+# CHECK-NEXT: 400160 00000000 00000000 00000000 00000000
+# ^ T1 ^ T2
+# CHECK-NEXT: 400170 4000193c 58001008 60013927 00000000
+# ^ .pic.T1
+# CHECK-NEXT: 400180 b9414000 20d4b200 39336501 00000000
+# ^ .pic.T2
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400130 g F .text 00000010 T0
+# CHECK: 00400140 g F .text 00000014 T3
+# CHECK: 00400160 g F .text 00000004 T1
+# CHECK: 00400164 g F .text 00000004 T2
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# reg.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+ - Offset: 12
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Size: 16
+ - Name: T1
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 20
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ - Offset: 4
+ Symbol: T2
+ Type: R_MICROMIPS_PC7_S1
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_PC10_S1
+ - Offset: 12
+ Symbol: T2
+ Type: R_MICROMIPS_PC16_S1
+ - Offset: 16
+ Symbol: T2
+ Type: R_MICROMIPS_PC23_S2
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+ Size: 20
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/la25-stub-npic-02.test b/test/old-elf/Mips/la25-stub-npic-02.test
new file mode 100644
index 000000000000..4f2eb14d8c92
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-npic-02.test
@@ -0,0 +1,123 @@
+# Check that LA25 stubs are created for branch relocations
+# when a PIC function is defined in a non-PIC file and
+# is called from non-pic code.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t1.o %t2.o
+
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK-NOT: Contents of section .plt:
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 00000000 00000000 58001000 09000000
+# ^ T1 ^ T2 ^ .pic.T1 (0x400160)
+# CHECK-NEXT: 400140 08000000 07000000 2000b800 12000000
+# ^ .pic.T2 (0x400170)
+# CHECK-NEXT: 400150 10000000 00000e00 00000600 00000000
+# CHECK-NEXT: 400160 4000193c 4c001008 30013927 00000000
+# ^ .pic.T1
+# CHECK-NEXT: 400170 b9414000 20d49a00 39333501 00000000
+# ^ .pic.T2
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400130 g F .text 00000004 T1
+# CHECK: 00400134 g F .text 00000004 T2
+# CHECK: 00400138 g F .text 00000010 T0
+# CHECK: 00400148 g F .text 00000014 T3
+
+# 1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ Other: [STO_MIPS_PIC]
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS, STO_MIPS_PIC]
+
+# 2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 36
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+ - Offset: 12
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+ - Offset: 16
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ - Offset: 20
+ Symbol: T2
+ Type: R_MICROMIPS_PC7_S1
+ - Offset: 24
+ Symbol: T2
+ Type: R_MICROMIPS_PC10_S1
+ - Offset: 28
+ Symbol: T2
+ Type: R_MICROMIPS_PC16_S1
+ - Offset: 32
+ Symbol: T2
+ Type: R_MICROMIPS_PC23_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Value: 0
+ Size: 16
+ - Name: T3
+ Section: .text
+ Value: 16
+ Size: 20
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/la25-stub-npic-shared.test b/test/old-elf/Mips/la25-stub-npic-shared.test
new file mode 100644
index 000000000000..72bac30f86ad
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-npic-shared.test
@@ -0,0 +1,152 @@
+# Check that PLT entries are created for branch relocations
+# when a PIC shared library function is called from non-pic code.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-reg.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-pic.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-reg.o %t-micro.o %t.so
+
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .plt:
+# CHECK-NEXT: 400190 40001c3c 0020998f 00209c27 23c01c03
+# CHECK-NEXT: 4001a0 2578e003 82c01800 09f82003 feff1827
+# CHECK-NEXT: 4001b0 40000f3c 0820f98d 08002003 0820f825
+# ^ PLT.T1
+# CHECK-NEXT: 4001c0 00799307 22ff0000 9945020f
+# ^ PLT.T2
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 4001cc 6c001000 f8ff0000 f7ff1f00 f6ffff03
+# ^ T0 ^ PLT.T1 (0x4001b0)
+# ^ 0x4001d0 -32 = 0x4001b0
+# ^ ...
+# CHECK-NEXT: 4001dc 2000e000 70000000 ee030000 0000ecff
+# ^ T3 ^ PLT.T2
+# ^ ...
+# CHECK-NEXT: 4001ec 7f00f5ff
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 004001cc g F .text 00000010 T0
+# CHECK: 004001dc g F .text 00000014 T3
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# reg.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+ - Offset: 12
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Size: 16
+ - Name: T1
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 20
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ - Offset: 4
+ Symbol: T2
+ Type: R_MICROMIPS_PC7_S1
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_PC10_S1
+ - Offset: 12
+ Symbol: T2
+ Type: R_MICROMIPS_PC16_S1
+ - Offset: 16
+ Symbol: T2
+ Type: R_MICROMIPS_PC23_S2
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+ Size: 20
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/la25-stub-pic.test b/test/old-elf/Mips/la25-stub-pic.test
new file mode 100644
index 000000000000..8db88404aaef
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub-pic.test
@@ -0,0 +1,144 @@
+# Check that we do not create LA26 stubs and PLT entries
+# when a PIC function is called from PIC code.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-reg.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-micro.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o %t-reg.o %t-micro.o
+
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK-NOT: Contents of section .plt:
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 00000000 00000000 4c001000 fdff0000
+# ^ T1 ^ T2 ^ T1 (0x400130)
+# ^ 0x40013c - 12 = 0x0x400130
+# CHECK-NEXT: 400140 fcff1f00 fbffff03 20009a00 74000000
+# ^ T2 (0x400134)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00400130 g F .text 00000004 T1
+# CHECK: 00400134 g F .text 00000004 T2
+# CHECK: 00400138 g F .text 00000010 T0
+# CHECK: 00400148 g F .text 00000014 T3
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# reg.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+ - Offset: 12
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Size: 16
+ - Name: T1
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32,
+ EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 20
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ - Offset: 4
+ Symbol: T2
+ Type: R_MICROMIPS_PC7_S1
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_PC10_S1
+ - Offset: 12
+ Symbol: T2
+ Type: R_MICROMIPS_PC16_S1
+ - Offset: 16
+ Symbol: T2
+ Type: R_MICROMIPS_PC23_S2
+
+Symbols:
+ Global:
+ - Name: T3
+ Section: .text
+ Size: 20
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/la25-stub.test b/test/old-elf/Mips/la25-stub.test
new file mode 100644
index 000000000000..4df7f85e8c89
--- /dev/null
+++ b/test/old-elf/Mips/la25-stub.test
@@ -0,0 +1,133 @@
+# Check LA25 stubs creation when PIC code is called from non-PIC routines.
+
+# Build executable from pic and non-pic code.
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-npic.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-pic.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-main.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe \
+# RUN: %t-npic.o %t-pic.o %t-main.o
+
+# RUN: llvm-readobj -t %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=ASM %s
+
+# SYM: Name: loc (13)
+# SYM-NEXT: Value: 0x400154
+# SYM: Name: T1N (1)
+# SYM-NEXT: Value: 0x400130
+# SYM: Name: T1 (5)
+# SYM-NEXT: Value: 0x400140
+# SYM: Name: glob (8)
+# SYM-NEXT: Value: 0x400144
+
+# ASM: Contents of section .text:
+# ASM-NEXT: 400130 00000000 00000000 00000000 00000000
+# ASM-NEXT: 400140 00000000 00000000 00000000 51001000
+# 0x100051 << 2 == 0x400144 (glob) --^
+# ASM-NEXT: 400150 00000000 51001000 00000000 4c001000
+# ^-- 0x100051 << 2 == 0x400144 (glob)
+# 0x100044 << 2 == 0x400110 (T1N) --^
+# ASM-NEXT: 400160 00000000 5c001000 00000000 00000000
+# ^-- 0x10005c << 2 == 0x400170 (T1 stub)
+# ASM-NEXT: 400170 4000193c 50001008 40013927 00000000
+# ^-- j 0x400140 (T1)
+
+# npic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1N
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# pic.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC, EF_MIPS_PIC ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32, EF_MIPS_CPIC ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x28
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MIPS_26
+ Addend: 0
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MIPS_26
+ Addend: 0
+ - Offset: 0x18
+ Symbol: T1N
+ Type: R_MIPS_26
+ Addend: 0
+ - Offset: 0x20
+ Symbol: T1
+ Type: R_MIPS_26
+ Addend: 0
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: T1
+ - Name: T1N
+...
diff --git a/test/old-elf/Mips/mips-options-01.test b/test/old-elf/Mips/mips-options-01.test
new file mode 100644
index 000000000000..8f2e63ca3b5f
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-01.test
@@ -0,0 +1,34 @@
+# Check that LLD does not write a .MIPS.options section if input
+# object file does not contain such section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-readobj -s -dynamic-table %t.so | FileCheck %s
+
+# CHECK: Sections [
+# CHECK-NOT: Name: .MIPS.options
+
+# CHECK: DynamicSection [
+# CHECK-NOT: 0x{{[0-9A-F]+}} MIPS_OPTIONS
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/mips-options-02.test b/test/old-elf/Mips/mips-options-02.test
new file mode 100644
index 000000000000..a5f19e55735f
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-02.test
@@ -0,0 +1,104 @@
+# Check merging input .MIPS.options sections.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t1.o %t2.o
+# RUN: llvm-readobj -s -dynamic-table %t.so | FileCheck -check-prefix=SEC %s
+# RUN: llvm-objdump -s -t %t.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -program-headers %t.so | FileCheck -check-prefix=PHDR %s
+
+# SEC: Index: 1
+# SEC-NEXT: Name: .MIPS.options (1)
+# SEC-NEXT: Type: SHT_MIPS_OPTIONS (0x7000000D)
+# SEC-NEXT: Flags [ (0x8000002)
+# SEC-NEXT: SHF_ALLOC (0x2)
+# SEC-NEXT: SHF_MIPS_NOSTRIP (0x8000000)
+# SEC-NEXT: ]
+# SEC-NEXT: Address: 0x[[OPT_ADDR:[0-9A-F]+]]
+# SEC-NEXT: Offset: {{[0-9A-F]+}}
+# SEC-NEXT: Size: 40
+# SEC-NEXT: Link: 0
+# SEC-NEXT: Info: 0
+# SEC-NEXT: AddressAlignment: 8
+# SEC-NEXT: EntrySize: 1
+
+# SEC: DynamicSection [
+# SEC: 0x{{[0-9A-F]+}} MIPS_OPTIONS 0x[[OPT_ADDR]]
+
+# RAW: Contents of section .MIPS.options:
+# RAW-NEXT: {{[0-9a-f]+}} 01280000 00000000 f0000001 00000000
+# RAW-NEXT: {{[0-9a-f]+}} e0000002 d0000003 b0000004 c0000005
+# RAW-NEXT: {{[0-9a-f]+}} f08f0000 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 0000000000008ff0 g *ABS* 00000000 _gp
+
+# Check that %t.so contains only two PT_LOAD segments
+# PHDR: ProgramHeaders
+# PHDR: Type: PT_LOAD
+# PHDR: Type: PT_LOAD
+# PHDR-NOT: Type: PT_LOAD
+# PHDR: Type: PT_DYNAMIC
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+# v ODK_NULL 0x18 bytes long v ODK_REGINFO
+ Content: "0018000000000000000000000000000000000000000000000128000000000000F000000000000000E0000000D0000000B0000000C00000000010000000000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+# v ODK_NULL 0x18 bytes long v ODK_REGINFO
+ Content: "00180000000000000000000000000000000000000000000001280000000000000000000100000000000000020000000300000004000000050000010000000000"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/mips-options-03.test b/test/old-elf/Mips/mips-options-03.test
new file mode 100644
index 000000000000..a0dea5709b6f
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-03.test
@@ -0,0 +1,41 @@
+# Check handling a zero-filled input .MIPS.options section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-objdump -s -t %t.so | FileCheck %s
+
+# CHECK: Contents of section .MIPS.options:
+# CHECK-NEXT: {{[0-9a-f]+}} 01280000 00000000 00000000 00000000
+# CHECK-NEXT: {{[0-9a-f]+}} 00000000 00000000 00000000 00000000
+# CHECK-NEXT: {{[0-9a-f]+}} f08f0000 00000000
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00008ff0 g *ABS* 00000000 _gp
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000000000000000000000000000000000000000000000000000000000000000000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/mips-options-04.test b/test/old-elf/Mips/mips-options-04.test
new file mode 100644
index 000000000000..5df94aae9257
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-04.test
@@ -0,0 +1,77 @@
+# Check that .MIPS.options sections from shared libraries do not affect
+# output .MIPS.options section content.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.exe.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t.so %t.exe.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .MIPS.options:
+# CHECK-NEXT: {{[0-9a-f]+}} 01280000 00000000 44444444 00000000
+# CHECK-NEXT: {{[0-9a-f]+}} 44444444 44444444 44444444 44444444
+# CHECK-NEXT: {{[0-9a-f]+}} f08f0020 01000000
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 20008ff0 g *ABS* 00000000 _gp
+
+# t.so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000001111111100000000111111111111111111111111111111110010000000000000"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t.exe.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000004444444400000000444444444444444444444444444444440010000000000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/mips-options-05.test b/test/old-elf/Mips/mips-options-05.test
new file mode 100644
index 000000000000..f7e9728b3cf4
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-05.test
@@ -0,0 +1,119 @@
+# Check that .MIPS.options section gets register usage mask from "used" files
+# only. In this test case we take only t2.o from liboptions.a and should not
+# add register usage masks from t1.o to the output .MIPS.options section.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: llvm-ar q %T/liboptions.a %t1.o %t2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t3.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t3.o -L%T -loptions
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .MIPS.options:
+# CHECK-NEXT: {{[0-9a-f]+}} 01280000 00000000 66666666 00000000
+# CHECK-NEXT: {{[0-9a-f]+}} 66666666 66666666 66666666 66666666
+# CHECK-NEXT: {{[0-9a-f]+}} f08f0020 01000000
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 20008ff0 g *ABS* 00000000 _gp
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000001111111100000000111111111111111111111111111111110010000000000000"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000002222222200000000222222222222222222222222222222220010000000000000"
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t3.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MIPS_32
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 8
+ Content: "01280000000000004444444400000000444444444444444444444444444444440010000000000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/mips-options-gp0.test b/test/old-elf/Mips/mips-options-gp0.test
new file mode 100644
index 000000000000..73e578347f2c
--- /dev/null
+++ b/test/old-elf/Mips/mips-options-gp0.test
@@ -0,0 +1,77 @@
+# Check reading GP0 value from .MIPS.options section
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -e G1 -shared -o %t.so %t.o
+# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: L1
+# SYM-NEXT: Value: 0x15C
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Local (0x0)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x8FF0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Object (0x1)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Absolute (0xFFF1)
+
+# 0xffff816c == 0x0 (addend) + 0x015C (L1) + 0x1000 (GP0) - 0x8ff0 (_gp)
+# SEC: Contents of section .rodata:
+# SEC-NEXT: {{[0-9a-f]+}} 6c81ffff 00000000 00000000 00000000
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64R2 ]
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+
+- Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 16
+
+- Name: .rel.rodata
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: L1
+ Type: R_MIPS_GPREL32
+
+- Name: .MIPS.options
+ Type: SHT_MIPS_OPTIONS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x01
+ Content: "012800000000000000000000000000000000000000000000000000000000000000100000"
+
+Symbols:
+ Local:
+ - Name: L1
+ Section: .text
+ Value: 0x00
+ Size: 0x04
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: G1
+ Section: .text
+ Value: 0x04
+ Size: 0x04
diff --git a/test/old-elf/Mips/n32-rela-chain.test b/test/old-elf/Mips/n32-rela-chain.test
new file mode 100644
index 000000000000..9569eb7c5855
--- /dev/null
+++ b/test/old-elf/Mips/n32-rela-chain.test
@@ -0,0 +1,68 @@
+# Check grouping of multiple consecutive relocations in case of N32
+# and 64-bit MIPS ABIs.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 10000130 00001001 00002004
+
+# CHECK: 10002000 l .data 00000004 D0
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64, EF_MIPS_ABI2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: D0
+ Type: R_MIPS_32
+ Addend: 0x10000
+ - Offset: 0
+ Symbol: D0
+ Type: R_MIPS_HI16
+ - Offset: 4
+ Symbol: D0
+ Type: R_MIPS_32
+ Addend: 4
+ - Offset: 4
+ Symbol: D0
+ Type: R_MIPS_LO16
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Local:
+ - Name: D0
+ Type: STT_FUNC
+ Section: .data
+ Value: 0
+ Size: 4
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 8
+...
diff --git a/test/old-elf/Mips/n64-rel-chain.test b/test/old-elf/Mips/n64-rel-chain.test
new file mode 100644
index 000000000000..3797c4321701
--- /dev/null
+++ b/test/old-elf/Mips/n64-rel-chain.test
@@ -0,0 +1,204 @@
+# Check handling MIPS N64 ABI relocation "chains".
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -s -t -dt -mips-plt-got %t.exe | \
+# RUN: FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+
+# SYM: Section {
+# SYM: Index: 6
+# SYM-NEXT: Name: .rodata
+# SYM-NEXT: Type: SHT_PROGBITS
+# SYM-NEXT: Flags [
+# SYM-NEXT: SHF_ALLOC
+# SYM-NEXT: ]
+# SYM-NEXT: Address: 0x120000230
+#
+# SYM: Symbol {
+# SYM: Name: LT1
+# SYM-NEXT: Value: 0x120000210
+# SYM-NEXT: Size: 16
+# SYM-NEXT: Binding: Global
+# SYM-NEXT: Type: Function
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T0
+# SYM-NEXT: Value: 0x120000220
+# SYM-NEXT: Size: 16
+# SYM-NEXT: Binding: Global
+# SYM-NEXT: Type: Function
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T1@
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Global
+# SYM-NEXT: Type: Function
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Undefined
+# SYM-NEXT: }
+#
+# SYM: Canonical gp value: 0x120008FF0
+# SYM: Local entries [
+# SYM-NEXT: Entry {
+# SYM-NEXT: Address: 0x{{[0-9A-F]+}}
+# SYM-NEXT: Access: -32736
+# SYM-NEXT: Initial: 0x120000000
+# SYM-NEXT: }
+# SYM-NEXT: ]
+# SYM-NEXT: Global entries [
+# SYM-NEXT: Entry {
+# SYM-NEXT: Address: 0x{{[0-9A-F]+}}
+# SYM-NEXT: Access: -32728
+# SYM-NEXT: Initial: 0x0
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Section: Undefined (0x0)
+# SYM-NEXT: Name: T1@ (1)
+# SYM-NEXT: }
+# SYM-NEXT: ]
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 120000210 01000000 00000000 e08d0000 00000000
+# ^
+# S - GP = 0x120000210 - 0x120008ff0 = -36320
+# S - A = 0 - (-36320) = 36320
+# (AHL + S + 0x8000) >> 16 = 1
+# ^
+# S - GP = 0x120000210 - 0x120008ff0 = -36320
+# S - A = 0 - (-36320) = 36320
+# AHL + S = 0x8DE0
+# RAW-NEXT: 120000220 20800000 38020000 28800000 00000000
+# ^ 0x8020 = -32736 GOT
+# ^ (0x120000230 + 8 - page) = 0x238
+# ^ 0x8028 = -32728
+# RAW: Contents of section .pdr:
+# RAW-NEXT: 0000 10020020 20020020
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 8
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 32
+
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 8
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: LT1
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_SUB
+ Type3: R_MIPS_HI16
+ - Offset: 0x08
+ Symbol: LT1
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_SUB
+ Type3: R_MIPS_LO16
+ - Offset: 0x10
+ Symbol: .rodata
+ Type: R_MIPS_GOT_PAGE
+ Addend: 8
+ - Offset: 0x14
+ Symbol: .rodata
+ Type: R_MIPS_GOT_OFST
+ Addend: 8
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_CALL16
+
+ - Name: .pdr
+ Type: SHT_PROGBITS
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .rela.pdr
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 8
+ Info: .pdr
+ Relocations:
+ - Offset: 0x00
+ Symbol: LT1
+ Type: R_MIPS_32
+ - Offset: 0x04
+ Symbol: T0
+ Type: R_MIPS_32
+
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 16
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ - Name: .pdr
+ Type: STT_SECTION
+ Section: .pdr
+
+ Global:
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x00
+ Size: 0x10
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x10
+ Size: 0x10
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/n64-rel-shift.test b/test/old-elf/Mips/n64-rel-shift.test
new file mode 100644
index 000000000000..31a780beb998
--- /dev/null
+++ b/test/old-elf/Mips/n64-rel-shift.test
@@ -0,0 +1,48 @@
+# Check that LLD shift right relocation result after calculation
+# each relocations in N64 relocation chain.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-objdump -s %t.so | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9a-f]+}} 00000000 01000000 00000000 00000000
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 16
+
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 8
+ Info: .text
+ Relocations:
+ - Offset: 4
+ Symbol: T1
+ Addend: 8
+ Type: R_MIPS_PC19_S2
+ Type2: R_MIPS_64
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 8
+ Size: 8
diff --git a/test/old-elf/Mips/opt-emulation.test b/test/old-elf/Mips/opt-emulation.test
new file mode 100644
index 000000000000..a48b49bfaa02
--- /dev/null
+++ b/test/old-elf/Mips/opt-emulation.test
@@ -0,0 +1,43 @@
+# Check MIPS specific arguments of the -m command line option.
+
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -m elf32ltsmip -o %t-exe %t-obj
+# RUN: llvm-readobj -file-headers %t-exe | FileCheck -check-prefix=LE-O32 %s
+# RUN: lld -flavor old-gnu -target mipsel -melf32ltsmip -o %t-exe %t-obj
+# RUN: llvm-readobj -file-headers %t-exe | FileCheck -check-prefix=LE-O32 %s
+
+# LE-O32: Class: 32-bit (0x1)
+# LE-O32: DataEncoding: LittleEndian (0x1)
+# LE-O32: FileVersion: 1
+# LE-O32: OS/ABI: SystemV (0x0)
+# LE-O32: ABIVersion: 1
+# LE-O32: Machine: EM_MIPS (0x8)
+# LE-O32: Version: 1
+# LE-O32: Flags [ (0x70001005)
+# LE-O32-NEXT: EF_MIPS_ABI_O32 (0x1000)
+# LE-O32-NEXT: EF_MIPS_ARCH_32R2 (0x70000000)
+# LE-O32-NEXT: EF_MIPS_CPIC (0x4)
+# LE-O32-NEXT: EF_MIPS_NOREORDER (0x1)
+# LE-O32-NEXT: ]
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0x0
+ Size: 4
diff --git a/test/old-elf/Mips/pc23-range.test b/test/old-elf/Mips/pc23-range.test
new file mode 100644
index 000000000000..89e9ab7bb73f
--- /dev/null
+++ b/test/old-elf/Mips/pc23-range.test
@@ -0,0 +1,54 @@
+# Check that LLD shows an error if ADDIUPC immediate is out of range.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -o %t.exe %t.o 2>&1 | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}}: reference from __start+4 to T0+4 of type 173 (R_MICROMIPS_PC23_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000080780100"
+# ^ PC23: 1 << 2 = 4 => T0 + 4 - 4 = T0
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x4000000
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: T0
+ Type: R_MICROMIPS_PC23_S2
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Type: STT_FUNC
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: TZ
+ Section: .data
+ Type: STT_FUNC
+ Value: 0
+ Size: 0x2000000
+ - Name: T0
+ Section: .data
+ Type: STT_FUNC
+ Value: 0x2000000
+ Size: 4
diff --git a/test/old-elf/Mips/plt-entry-mixed-1.test b/test/old-elf/Mips/plt-entry-mixed-1.test
new file mode 100644
index 000000000000..e05eec4c8109
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-mixed-1.test
@@ -0,0 +1,114 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Object file contains both R_MIPS_26 and microMIPS non-jal relocations.
+# b) The R_MIPS_26 relocation handled first.
+# Check:
+# a) PLT contains the only regular entry.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK-NEXT: .plt:
+# CHECK-NEXT: 400170: 40 00 1c 3c lui $gp, 64
+# CHECK-NEXT: 400174: 00 20 99 8f lw $25, 8192($gp)
+# CHECK-NEXT: 400178: 00 20 9c 27 addiu $gp, $gp, 8192
+# CHECK-NEXT: 40017c: 23 c0 1c 03 subu $24, $24, $gp
+# CHECK-NEXT: 400180: 25 78 e0 03 move $15, $ra
+# CHECK-NEXT: 400184: 82 c0 18 00 srl $24, $24, 2
+# CHECK-NEXT: 400188: 09 f8 20 03 jalr $25
+# CHECK-NEXT: 40018c: fe ff 18 27 addiu $24, $24, -2
+# CHECK-NEXT: 400190: 40 00 0f 3c lui $15, 64
+# CHECK-NEXT: 400194: 08 20 f9 8d lw $25, 8200($15)
+# CHECK-NEXT: 400198: 08 00 20 03 jr $25
+# CHECK-NEXT: 40019c: 08 20 f8 25 addiu $24, $15, 8200
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000C00000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x8
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-entry-mixed-2.test b/test/old-elf/Mips/plt-entry-mixed-2.test
new file mode 100644
index 000000000000..299aa5ce065c
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-mixed-2.test
@@ -0,0 +1,93 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Object file contains both R_MIPS_26 and R_MICROMIPS_26_S1 relocations.
+# Check:
+# a) PLT contains both regular and compressed PLT entries
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# FIXME (simon): Check the disassembler output when llvm-objdump starts
+# to support microMIPS instruction encoding.
+
+# CHECK: Contents of section .plt:
+# CHECK-NEXT: 400170 40001c3c 0020998f 00209c27 23c01c03
+# CHECK-NEXT: 400180 2578e003 82c01800 09f82003 feff1827
+# CHECK-NEXT: 400190 40000f3c 0820f98d 08002003 0820f825
+# CHECK-NEXT: 4001a0 00799a07 22ff0000 9945020f
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000C000000000000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: T2
+ Type: R_MIPS_26
+ - Offset: 0x8
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 0x8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/plt-entry-mixed-3.test b/test/old-elf/Mips/plt-entry-mixed-3.test
new file mode 100644
index 000000000000..c946ecc82d2f
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-mixed-3.test
@@ -0,0 +1,98 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Object file contains microMIPS instructions.
+# b) There is a relocation refers arbitrary symbols and requires a PLT entry.
+# Check:
+# a) PLT contains a compressed entry.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# FIXME (simon): Check the disassembler output when llvm-objdump starts
+# to support microMIPS instruction encoding.
+
+# CHECK: Contents of section .plt:
+# CHECK-NEXT: 400170 8079a407 23ff0000 35052525 0233feff .y..#...5.%%.3..
+# CHECK-NEXT: 400180 ff0df945 830f000c 0079a007 22ff0000 ...E.....y.."...
+# CHECK-NEXT: 400190 9945020f .E..
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 16
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 16
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-entry-mixed-4.test b/test/old-elf/Mips/plt-entry-mixed-4.test
new file mode 100644
index 000000000000..ba8b04866b98
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-mixed-4.test
@@ -0,0 +1,85 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Object file contains R_MIPS_26 relocation refers to the microMIPS symbol.
+# Check:
+# a) PLT contains a regular non-compressed entry.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o.o %t.so
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# FIXME (simon): Check the disassembler output when llvm-objdump starts
+# to support microMIPS instruction encoding.
+
+# CHECK: Contents of section .plt:
+# CHECK-NEXT: 400170 40001c3c 0020998f 00209c27 23c01c03
+# CHECK-NEXT: 400180 2578e003 82c01800 09f82003 feff1827
+# CHECK-NEXT: 400190 40000f3c 0820f98d 08002003 0820f825
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000C00000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-entry-r6-be.test b/test/old-elf/Mips/plt-entry-r6-be.test
new file mode 100644
index 000000000000..3e15ece894e0
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-r6-be.test
@@ -0,0 +1,109 @@
+# REQUIRES: mips
+
+# Check generation of PLT entries in case of R6 big-endian target ABI.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK-NEXT: .plt:
+# CHECK-NEXT: 400160: 3c 1c 00 40 lui $gp, 64
+# CHECK-NEXT: 400164: 8f 99 20 00 lw $25, 8192($gp)
+# CHECK-NEXT: 400168: 27 9c 20 00 addiu $gp, $gp, 8192
+# CHECK-NEXT: 40016c: 03 1c c0 23 subu $24, $24, $gp
+# CHECK-NEXT: 400170: 03 e0 78 25 move $15, $ra
+# CHECK-NEXT: 400174: 00 18 c0 82 srl $24, $24, 2
+# CHECK-NEXT: 400178: 03 20 f8 09 jalr $25
+# CHECK-NEXT: 40017c: 27 18 ff fe addiu $24, $24, -2
+# CHECK-NEXT: 400180: 3c 0f 00 40 lui $15, 64
+# CHECK-NEXT: 400184: 8d f9 20 08 lw $25, 8200($15)
+# CHECK-NEXT: 400188: 03 20 00 09 jr $25
+# CHECK-NEXT: 40018c: 25 f8 20 08 addiu $24, $15, 8200
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0C00000000000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x8
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-entry-r6.test b/test/old-elf/Mips/plt-entry-r6.test
new file mode 100644
index 000000000000..0d8bbf494afe
--- /dev/null
+++ b/test/old-elf/Mips/plt-entry-r6.test
@@ -0,0 +1,109 @@
+# REQUIRES: mips
+
+# Check generation of PLT entries in case of R6 target ABI.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK-NEXT: .plt:
+# CHECK-NEXT: 400160: 40 00 1c 3c lui $gp, 64
+# CHECK-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
+# CHECK-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
+# CHECK-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
+# CHECK-NEXT: 400170: 25 78 e0 03 move $15, $ra
+# CHECK-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
+# CHECK-NEXT: 400178: 09 f8 20 03 jalr $25
+# CHECK-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
+# CHECK-NEXT: 400180: 40 00 0f 3c lui $15, 64
+# CHECK-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
+# CHECK-NEXT: 400188: 09 00 20 03 jr $25
+# CHECK-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000C00000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x8
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-header-be.test b/test/old-elf/Mips/plt-header-be.test
new file mode 100644
index 000000000000..e453e44f76d6
--- /dev/null
+++ b/test/old-elf/Mips/plt-header-be.test
@@ -0,0 +1,104 @@
+# REQUIRES: mips
+
+# Check initialization of big-endian .plt header entries.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -section-headers -disassemble %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK-NEXT: .plt:
+# CHECK-NEXT: 400160: 3c 1c 00 40 lui $gp, 64
+# CHECK-NEXT: 400164: 8f 99 20 00 lw $25, 8192($gp)
+# CHECK-NEXT: 400168: 27 9c 20 00 addiu $gp, $gp, 8192
+# CHECK-NEXT: 40016c: 03 1c c0 23 subu $24, $24, $gp
+# CHECK-NEXT: 400170: 03 e0 78 25 move $15, $ra
+# CHECK-NEXT: 400174: 00 18 c0 82 srl $24, $24, 2
+# CHECK-NEXT: 400178: 03 20 f8 09 jalr $25
+# CHECK-NEXT: 40017c: 27 18 ff fe addiu $24, $24, -2
+
+# CHECK-NEXT: 400180: 3c 0f 00 40 lui $15, 64
+# CHECK-NEXT: 400184: 8d f9 20 08 lw $25, 8200($15)
+# CHECK-NEXT: 400188: 03 20 00 08 jr $25
+# CHECK-NEXT: 40018c: 25 f8 20 08 addiu $24, $15, 8200
+
+# CHECK: Sections:
+# CHECK: Idx Name Size Address Type
+# CHECK: 6 .plt 00000030 0000000000400160 TEXT DATA
+# CHECK: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 12
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 32
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 8
+ Symbol: .text
+ Type: R_MIPS_26
+ - Offset: 16
+ Symbol: __start
+ Type: R_MIPS_26
+ - Offset: 24
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 16
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+
+ Global:
+ - Name: __start
+ Section: .text
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-header-micro-be.test b/test/old-elf/Mips/plt-header-micro-be.test
new file mode 100644
index 000000000000..e9aa51ef85eb
--- /dev/null
+++ b/test/old-elf/Mips/plt-header-micro-be.test
@@ -0,0 +1,105 @@
+# REQUIRES: mips
+
+# Check initialization of .plt header entries
+# if all PLT entries use microMIPS big-endian encoding.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: lld -flavor old-gnu -target mips -shared -o %t.so %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t2.o %t.so
+# RUN: llvm-objdump -section-headers -d -mattr=micromips %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .plt:
+# CHECK-NEXT: .plt:
+# CHECK-NEXT: 400170: 79 80 07 a4 addiupc $3, 7824
+# CHECK-NEXT: 400174: ff 23 00 00 lw $25, 0($3)
+# CHECK-NEXT: 400178: 05 35 subu16 $2, $2, $3
+# CHECK-NEXT: 40017a: 25 25 srl16 $2, $2, 2
+# CHECK-NEXT: 40017c: 33 02 ff fe addiu $24, $2, -2
+# CHECK-NEXT: 400180: 0d ff move $15, $ra
+# CHECK-NEXT: 400182: 45 f9 jalrs16 $25
+# CHECK-NEXT: 400184: 0f 83 move $gp, $3
+# CHECK-NEXT: 400186: 0c 00 nop
+
+# CHECK-NEXT: 400188: 79 00 07 a0 addiupc $2, 7808
+# CHECK-NEXT: 40018c: ff 22 00 00 lw $25, 0($2)
+# CHECK-NEXT: 400190: 45 99 jr16 $25
+# CHECK-NEXT: 400192: 0f 02 move $24, $2
+
+# CHECK: Sections:
+# CHECK: Idx Name Size Address Type
+# CHECK: 6 .plt 00000024 0000000000400170 TEXT DATA
+# CHECK: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 12
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '0000000000000000f40000000000000000000000f400000000000000f4000000'
+# jal .text jal __start jal T1
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 8
+ Symbol: .text
+ Type: R_MICROMIPS_26_S1
+ - Offset: 20
+ Symbol: __start
+ Type: R_MICROMIPS_26_S1
+ - Offset: 28
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 16
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: __start
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-header-micro.test b/test/old-elf/Mips/plt-header-micro.test
new file mode 100644
index 000000000000..743c4c332184
--- /dev/null
+++ b/test/old-elf/Mips/plt-header-micro.test
@@ -0,0 +1,108 @@
+# REQUIRES: mips
+
+# Check initialization of .plt header entries
+# if all PLT entries use microMIPS encoding.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
+# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
+
+# DIS: Disassembly of section .plt:
+# DIS-NEXT: .plt:
+# DIS-NEXT: 400170: 80 79 a4 07 addiupc $3, 7824
+# DIS-NEXT: 400174: 23 ff 00 00 lw $25, 0($3)
+# DIS-NEXT: 400178: 35 05 subu16 $2, $2, $3
+# DIS-NEXT: 40017a: 25 25 srl16 $2, $2, 2
+# DIS-NEXT: 40017c: 02 33 fe ff addiu $24, $2, -2
+# DIS-NEXT: 400180: ff 0d move $15, $ra
+# DIS-NEXT: 400182: f9 45 jalrs16 $25
+# DIS-NEXT: 400184: 83 0f move $gp, $3
+# DIS-NEXT: 400186: 00 0c nop
+
+# DIS-NEXT: 400188: 00 79 a0 07 addiupc $2, 7808
+# DIS-NEXT: 40018c: 22 ff 00 00 lw $25, 0($2)
+# DIS-NEXT: 400190: 99 45 jr16 $25
+# DIS-NEXT: 400192: 02 0f move $24, $2
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .plt 00000024 0000000000400170 TEXT DATA
+# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '000000000000000000f4000000000000f400000000000000f400000000000000'
+# jal .text jal glob jal T1
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-header-mixed.test b/test/old-elf/Mips/plt-header-mixed.test
new file mode 100644
index 000000000000..456f5a91c98b
--- /dev/null
+++ b/test/old-elf/Mips/plt-header-mixed.test
@@ -0,0 +1,105 @@
+# REQUIRES: mips
+
+# Check initialization of .plt header entries if there are both regular
+# and microMIPS encoded PLT entries. Check that R_MIPS_26 and R_MICROMIPS_26_S1
+# relocation with the same target cause generation of two distinct PLT entries.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e globR -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d %t.exe | FileCheck -check-prefix=DIS %s
+# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
+
+# DIS: Disassembly of section .plt:
+# DIS-NEXT: .plt:
+# DIS-NEXT: 400170: 40 00 1c 3c lui $gp, 64
+# DIS-NEXT: 400174: 00 20 99 8f lw $25, 8192($gp)
+# DIS-NEXT: 400178: 00 20 9c 27 addiu $gp, $gp, 8192
+# DIS-NEXT: 40017c: 23 c0 1c 03 subu $24, $24, $gp
+# DIS-NEXT: 400180: 25 78 e0 03 move $15, $ra
+# DIS-NEXT: 400184: 82 c0 18 00 srl $24, $24, 2
+# DIS-NEXT: 400188: 09 f8 20 03 jalr $25
+# DIS-NEXT: 40018c: fe ff 18 27 addiu $24, $24, -2
+
+# DIS-NEXT: 400190: 40 00 0f 3c lui $15, 64
+# DIS-NEXT: 400194: 08 20 f9 8d lw $25, 8200($15)
+# DIS-NEXT: 400198: 08 00 20 03 jr $25
+# DIS-NEXT: 40019c: 08 20 f8 25 addiu $24, $15, 8200
+
+# FIXME (simon): Check micromips PLT entry
+# DIS-NEXT: 4001a8: 99 45 02 0f jal 201922148
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .plt 0000003c 0000000000400170 TEXT DATA
+# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x8
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 0x4
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Global:
+ - Name: globR
+ Section: .text
+ Value: 0x0
+ Size: 0x4
+ - Name: globM
+ Section: .text
+ Value: 0x4
+ Size: 0x4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/plt-header.test b/test/old-elf/Mips/plt-header.test
new file mode 100644
index 000000000000..6d303254d16d
--- /dev/null
+++ b/test/old-elf/Mips/plt-header.test
@@ -0,0 +1,99 @@
+# REQUIRES: mips
+
+# Check initialization of .plt header entries.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -section-headers -disassemble %t.exe | \
+# RUN: FileCheck -check-prefix=EXE %s
+
+# EXE: Disassembly of section .plt:
+# EXE: .plt:
+# PLT0 entry. Points to the .got.plt[0]
+# EXE-NEXT: 400160: 40 00 1c 3c lui $gp, 64
+# EXE-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
+# EXE-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
+# EXE-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
+# EXE-NEXT: 400170: 25 78 e0 03 move $15, $ra
+# EXE-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
+# EXE-NEXT: 400178: 09 f8 20 03 jalr $25
+# EXE-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .plt 00000030 0000000000400160 TEXT DATA
+# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x20
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MIPS_26
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MIPS_26
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/r26-1-micro.test b/test/old-elf/Mips/r26-1-micro.test
new file mode 100644
index 000000000000..c59b5aa61a53
--- /dev/null
+++ b/test/old-elf/Mips/r26-1-micro.test
@@ -0,0 +1,131 @@
+# REQUIRES: mips
+
+# Check handling of R_MICROMIPS_26_S1 relocation.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: llvm-readobj -relocations %t-o.o | \
+# RUN: FileCheck -check-prefix=OBJ-REL %s
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -relocations %t.exe | FileCheck -check-prefix=EXE-REL %s
+# RUN: llvm-objdump -section-headers %t.exe | FileCheck -check-prefix=EXE %s
+# RUN: llvm-objdump -s -d -mattr=micromips %t.exe | \
+# RUN: FileCheck -check-prefix=DIS %s
+
+# Object file has three R_MICROMIPS_26_S1 relocations
+# OBJ-REL: Relocations [
+# OBJ-REL-NEXT: Section (2) .rel.text {
+# OBJ-REL-NEXT: 0x8 R_MICROMIPS_26_S1 loc 0x0
+# OBJ-REL-NEXT: 0x10 R_MICROMIPS_26_S1 glob 0x0
+# OBJ-REL-NEXT: 0x18 R_MICROMIPS_26_S1 T1 0x0
+# OBJ-REL-NEXT: }
+# OBJ-REL-NEXT: ]
+
+# Executable file has the only relocation for external symbol
+# EXE-REL: Relocations [
+# EXE-REL-NEXT: Section (5) .rel.plt {
+# EXE-REL-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
+# EXE-REL-NEXT: }
+# EXE-REL-NEXT: ]
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .plt 00000024 0000000000400160 TEXT DATA
+# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# DIS: Disassembly of section .plt:
+# DIS-NEXT: .plt:
+# DIS-NEXT: 400160: 80 79 a8 07 addiupc $3, 7840
+# DIS-NEXT: 400164: 23 ff 00 00 lw $25, 0($3)
+# DIS-NEXT: 400168: 35 05 subu16 $2, $2, $3
+# DIS-NEXT: 40016a: 25 25 srl16 $2, $2, 2
+# DIS-NEXT: 40016c: 02 33 fe ff addiu $24, $2, -2
+# DIS-NEXT: 400170: ff 0d move $15, $ra
+# DIS-NEXT: 400172: f9 45 jalrs16 $25
+# DIS-NEXT: 400174: 83 0f move $gp, $3
+# DIS-NEXT: 400176: 00 0c nop
+
+# DIS-NEXT: 400178: 00 79 a4 07 addiupc $2, 7824
+# DIS-NEXT: 40017c: 22 ff 00 00 lw $25, 0($2)
+# DIS-NEXT: 400180: 99 45 jr16 $25
+# DIS-NEXT: 400182: 02 0f move $24, $2
+
+# DIS: Contents of section .text:
+# DIS-NEXT: 400184 09f82003 00000000 2400ca0c 00000000 .. .....$.......
+# DIS-NEXT: 400194 2000c20c 00000000 2000bc0c 00000000 ....... .......
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '09F82003000000000400000C000000000000000C000000000000000C00000000'
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: loc
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MICROMIPS_26_S1
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/r26-1.test b/test/old-elf/Mips/r26-1.test
new file mode 100644
index 000000000000..41c58deceedb
--- /dev/null
+++ b/test/old-elf/Mips/r26-1.test
@@ -0,0 +1,132 @@
+# REQUIRES: mips
+
+# Check handling of R_MIPS_26 relocation.
+
+# Build shared library
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: llvm-readobj -relocations %t-o.o | \
+# RUN: FileCheck -check-prefix=OBJ-REL %s
+# RUN: lld -flavor old-gnu -target mipsel -e glob -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -section-headers -disassemble %t.exe | \
+# RUN: FileCheck -check-prefix=EXE %s
+# RUN: llvm-readobj -relocations %t.exe | FileCheck -check-prefix=EXE-REL %s
+
+# Object file has three R_MIPS_26 relocations
+# OBJ-REL: Relocations [
+# OBJ-REL-NEXT: Section (2) .rel.text {
+# OBJ-REL-NEXT: 0x8 R_MIPS_26 .text 0x0
+# OBJ-REL-NEXT: 0x10 R_MIPS_26 glob 0x0
+# OBJ-REL-NEXT: 0x18 R_MIPS_26 T1 0x0
+# OBJ-REL-NEXT: }
+# OBJ-REL-NEXT: ]
+
+# Executable file has the only relocation for external symbol
+# EXE-REL: Relocations [
+# EXE-REL-NEXT: Section (5) .rel.plt {
+# EXE-REL-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
+# EXE-REL-NEXT: }
+# EXE-REL-NEXT: ]
+
+# EXE: Disassembly of section .plt:
+# EXE: .plt:
+# PLTA entry. Points to the .got.plt[1]
+# EXE: 400180: 40 00 0f 3c lui $15, 64
+# EXE-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
+# EXE-NEXT: 400188: 08 00 20 03 jr $25
+# EXE-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
+
+# EXE: Disassembly of section .text:
+# EXE: glob:
+# EXE-NEXT: 400190: 09 f8 20 03 jalr $25
+# EXE-NEXT: 400194: 00 00 00 00 nop
+#
+# Jump to 'loc' label address
+# EXE-NEXT: 400198: 68 00 10 0c jal 4194720
+# EXE-NEXT: 40019c: 00 00 00 00 nop
+#
+# EXE: loc:
+# Jump to 'glob' label address
+# EXE-NEXT: 4001a0: 64 00 10 0c jal 4194704
+# EXE-NEXT: 4001a4: 00 00 00 00 nop
+#
+# Jump to the first PLT entry (.plt + 32) for T1 entry
+# EXE-NEXT: 4001a8: 60 00 10 0c jal 4194688
+# EXE-NEXT: 4001ac: 00 00 00 00 nop
+
+# EXE: Sections:
+# EXE: Idx Name Size Address Type
+# EXE: 6 .plt 00000030 0000000000400160 TEXT DATA
+# EXE: 10 .got.plt 0000000c 0000000000402000 DATA
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: '09F82003000000000400000C000000000000000C000000000000000C00000000'
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x08
+ Symbol: .text
+ Type: R_MIPS_26
+ - Offset: 0x10
+ Symbol: glob
+ Type: R_MIPS_26
+ - Offset: 0x18
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Local:
+ - Name: loc
+ Section: .text
+ Value: 0x10
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: glob
+ Section: .text
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/r26-2-micro.test b/test/old-elf/Mips/r26-2-micro.test
new file mode 100644
index 000000000000..7d4f86e57f70
--- /dev/null
+++ b/test/old-elf/Mips/r26-2-micro.test
@@ -0,0 +1,31 @@
+# REQUIRES: mips
+
+# Check reading addendum for R_MICROMIPS_26_S1 relocation.
+# RUN: llvm-mc -arch=mipsel -filetype=obj -mattr=micromips -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t.o
+# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 400180: 10 f0 60 70 jalx 2154688
+# CHECK-NEXT: 400184: 00 00 00 00 nop
+# CHECK-NEXT: 400188: 10 f0 68 70 jalx 2154704
+# CHECK-NEXT: 40018c: 00 00 00 00 nop
+# CHECK-NEXT: 400190: 10 f0 58 00 jalx 2097328
+# CHECK-NEXT: 400194: 00 00 00 00 nop
+# CHECK-NEXT: 400198: 10 f0 62 00 jalx 2097348
+# CHECK-NEXT: 40019c: 00 00 00 00 nop
+#
+# CHECK: loc:
+# CHECK-NEXT: 4001a0: 00 00 00 00 nop
+
+ .text
+ .globl __start
+__start:
+ jal __start + 0x1C000
+ jal loc + 0x1C000
+ jal __start + 0x7ffffe2
+ jal loc + 0x7ffffea
+
+loc:
+ nop
diff --git a/test/old-elf/Mips/r26-2.test b/test/old-elf/Mips/r26-2.test
new file mode 100644
index 000000000000..b9db959d3ea7
--- /dev/null
+++ b/test/old-elf/Mips/r26-2.test
@@ -0,0 +1,31 @@
+# REQUIRES: mips
+
+# Check reading addendum for R_MIPS_26 relocation.
+# RUN: llvm-mc -arch=mipsel -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t.o
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: __start:
+# CHECK-NEXT: 400180: 60 70 10 0c jal 4309376
+# CHECK-NEXT: 400184: 00 00 00 00 nop
+# CHECK-NEXT: 400188: 68 70 10 0c jal 4309408
+# CHECK-NEXT: 40018c: 00 00 00 00 nop
+# CHECK-NEXT: 400190: 5f 00 10 0c jal 4194684
+# CHECK-NEXT: 400194: 00 00 00 00 nop
+# CHECK-NEXT: 400198: 67 00 10 0c jal 4194716
+# CHECK-NEXT: 40019c: 00 00 00 00 nop
+#
+# CHECK: loc:
+# CHECK-NEXT: 4001a0: 00 00 00 00 nop
+
+ .text
+ .globl __start
+__start:
+ jal __start + 0x1C000
+ jal loc + 0x1C000
+ jal __start + (-1)
+ jal loc + (-1)
+
+loc:
+ nop
diff --git a/test/old-elf/Mips/reginfo-01.test b/test/old-elf/Mips/reginfo-01.test
new file mode 100644
index 000000000000..ee7cd6a5fcee
--- /dev/null
+++ b/test/old-elf/Mips/reginfo-01.test
@@ -0,0 +1,30 @@
+# Check that LLD does not write a .reginfo section if input
+# object file does not contain such section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -s %t.so | FileCheck %s
+
+# CHECK-NOT: Name: .reginfo
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/reginfo-02.test b/test/old-elf/Mips/reginfo-02.test
new file mode 100644
index 000000000000..41eac01a11b1
--- /dev/null
+++ b/test/old-elf/Mips/reginfo-02.test
@@ -0,0 +1,107 @@
+# Check merging input .reginfo sections.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t1.o %t2.o
+# RUN: llvm-readobj -program-headers -s -t -mips-reginfo %t.so | FileCheck %s
+
+# CHECK: Index: 1
+# CHECK-NEXT: Name: .reginfo (1)
+# CHECK-NEXT: Type: SHT_MIPS_REGINFO
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: SHF_ALLOC
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: {{[0-9A-F]+}}
+# CHECK-NEXT: Offset: {{[0-9A-F]+}}
+# CHECK-NEXT: Size: 24
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+# CHECK-NEXT: EntrySize: 24
+
+# CHECK: Name: _gp
+# CHECK-NEXT: 0x8FF0
+
+# CHECK: ProgramHeaders [
+# CHECK-NEXT: ProgramHeader {
+# CHECK-NEXT: Type: PT_MIPS_REGINFO
+# CHECK-NEXT: Offset: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: VirtualAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: PhysicalAddress: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: FileSize: 24
+# CHECK-NEXT: MemSize: 24
+# CHECK-NEXT: Flags [
+# CHECK-NEXT: PF_R
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4
+# CHECK-NEXT: }
+
+# CHECK: MIPS RegInfo {
+# CHECK-NEXT: GP: 0x8FF0
+# CHECK-NEXT: General Mask: 0x10000F0
+# CHECK-NEXT: Co-Proc Mask0: 0x20000E0
+# CHECK-NEXT: Co-Proc Mask1: 0x30000D0
+# CHECK-NEXT: Co-Proc Mask2: 0x40000C0
+# CHECK-NEXT: Co-Proc Mask3: 0x50000B0
+# CHECK-NEXT: }
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "F0000000E0000000D0000000C0000000B000000000100000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "000000010000000200000003000000040000000500000100"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/reginfo-03.test b/test/old-elf/Mips/reginfo-03.test
new file mode 100644
index 000000000000..edee1440d358
--- /dev/null
+++ b/test/old-elf/Mips/reginfo-03.test
@@ -0,0 +1,45 @@
+# Check handling a zero-filled input .reginfo section.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -t -mips-reginfo %t.so | FileCheck %s
+
+# CHECK: Name: _gp
+# CHECK-NEXT: 0x8FF0
+
+# CHECK: MIPS RegInfo {
+# CHECK-NEXT: GP: 0x8FF0
+# CHECK-NEXT: General Mask: 0x0
+# CHECK-NEXT: Co-Proc Mask0: 0x0
+# CHECK-NEXT: Co-Proc Mask1: 0x0
+# CHECK-NEXT: Co-Proc Mask2: 0x0
+# CHECK-NEXT: Co-Proc Mask3: 0x0
+# CHECK-NEXT: }
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "000000000000000000000000000000000000000000000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/reginfo-04.test b/test/old-elf/Mips/reginfo-04.test
new file mode 100644
index 000000000000..bad34e5003f7
--- /dev/null
+++ b/test/old-elf/Mips/reginfo-04.test
@@ -0,0 +1,81 @@
+# Check that .reginfo sections from shared libraries do not affect
+# output .reginfo section content.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.exe.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.so %t.exe.o
+# RUN: llvm-readobj -t -mips-reginfo %t.exe | FileCheck %s
+
+# CHECK: Name: _gp
+# CHECK-NEXT: 0x408FF0
+
+# CHECK: MIPS RegInfo {
+# CHECK-NEXT: GP: 0x408FF0
+# CHECK-NEXT: General Mask: 0x44444444
+# CHECK-NEXT: Co-Proc Mask0: 0x44444444
+# CHECK-NEXT: Co-Proc Mask1: 0x44444444
+# CHECK-NEXT: Co-Proc Mask2: 0x44444444
+# CHECK-NEXT: Co-Proc Mask3: 0x44444444
+# CHECK-NEXT: }
+
+# t.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "111111111111111111111111111111111111111100100000"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t.exe.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "444444444444444444444444444444444444444400000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/reginfo-05.test b/test/old-elf/Mips/reginfo-05.test
new file mode 100644
index 000000000000..9de9fa62149a
--- /dev/null
+++ b/test/old-elf/Mips/reginfo-05.test
@@ -0,0 +1,123 @@
+# Check that .reginfo section gets register usage mask from "used" files only.
+# In this test case we take only t2.o from libreginfo.a and should not add
+# register usage masks from t1.o to the output .reginfo section.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: llvm-ar q %T/libreginfo.a %t1.o %t2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t3.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t3.o -L%T -lreginfo
+# RUN: llvm-readobj -t -mips-reginfo %t.exe | FileCheck %s
+
+# CHECK: Name: _gp
+# CHECK-NEXT: 0x408FF0
+
+# CHECK: MIPS RegInfo {
+# CHECK-NEXT: GP: 0x408FF0
+# CHECK-NEXT: General Mask: 0x66666666
+# CHECK-NEXT: Co-Proc Mask0: 0x66666666
+# CHECK-NEXT: Co-Proc Mask1: 0x66666666
+# CHECK-NEXT: Co-Proc Mask2: 0x66666666
+# CHECK-NEXT: Co-Proc Mask3: 0x66666666
+# CHECK-NEXT: }
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "111111111111111111111111111111111111111100000000"
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "222222222222222222222222222222222222222200000000"
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t3.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T2
+ Type: R_MIPS_32
+
+- Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: "444444444444444444444444444444444444444400000000"
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/rel-16-overflow.test b/test/old-elf/Mips/rel-16-overflow.test
new file mode 100644
index 000000000000..e2a73f693361
--- /dev/null
+++ b/test/old-elf/Mips/rel-16-overflow.test
@@ -0,0 +1,45 @@
+# Check R_MIPS_16 relocation overflow handling.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from T0+0 to T1+32767 of type 1 (R_MIPS_16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ff7f00000000000000000000"
+# ^ T1
+# ^ T0 A := 0x7fff
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-16.test b/test/old-elf/Mips/rel-16.test
new file mode 100644
index 000000000000..24961e8b78ff
--- /dev/null
+++ b/test/old-elf/Mips/rel-16.test
@@ -0,0 +1,51 @@
+# Check handling of R_MIPS_16 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 00f0 f0000000 00000000 00000000
+# ^ V = (T1 - 8) = T0
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 000000f0 g F .text 00000008 T0
+# CHECK: 000000f8 g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "f8ff00000000000000000000"
+# ^ T1
+# ^ T0 A := 0xfff8 = -8
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-32-be.test b/test/old-elf/Mips/rel-32-be.test
new file mode 100644
index 000000000000..3eac8a2848f0
--- /dev/null
+++ b/test/old-elf/Mips/rel-32-be.test
@@ -0,0 +1,60 @@
+# Check handling of R_MIPS_32 relocation in the big-endian case.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 402000 00000000 01402088 01402084
+# ^^ D2 + 0x1000080 = 0x1402088
+# ^^ D1 + 0x1000080 = 0x1402084
+# CHECK: SYMBOL TABLE:
+# CHECK: 00402004 g .data 00000004 D1
+# CHECK: 00402008 g .data 00000004 D2
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+ Size: 4
+
+- Name: .data
+ Type: SHT_PROGBITS
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+ Content: "000000000100008001000080"
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: D2
+ Type: R_MIPS_32
+ - Offset: 8
+ Symbol: D1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: D1
+ Section: .data
+ Value: 4
+ Size: 4
+ - Name: D2
+ Section: .data
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-32.test b/test/old-elf/Mips/rel-32.test
new file mode 100644
index 000000000000..f028d79c8688
--- /dev/null
+++ b/test/old-elf/Mips/rel-32.test
@@ -0,0 +1,59 @@
+# Check handling of R_MIPS_32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 402000 00000000 09204080 05204080 ..... @.. @.
+# ^^ data2 + 0x80000001 = 0x80402009
+# ^^ data1 + 0x80000001 = 0x80402005
+# CHECK: SYMBOL TABLE:
+# CHECK: 00402004 g .data 00000004 data1
+# CHECK: 00402008 g .data 00000004 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "000000000100008001000080"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x4
+ Symbol: data2
+ Type: R_MIPS_32
+ - Offset: 0x8
+ Symbol: data1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Value: 0x4
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-64.test b/test/old-elf/Mips/rel-64.test
new file mode 100644
index 000000000000..c97ff991c0c4
--- /dev/null
+++ b/test/old-elf/Mips/rel-64.test
@@ -0,0 +1,61 @@
+# Check handling of R_MIPS_64 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 120002000 d1010020 01000000 d0010020 01000100 ... ....... ....
+# ^^ __start + 1 = 0x1200001d1
+# ^^ __start + 0x1000000000000
+# = 0x10001200001d0
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000001200001d0 g .rodata 00000008 __start
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x10
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: __start
+ Type: R_MIPS_64
+ Addend: 1
+ - Offset: 0x8
+ Symbol: __start
+ Type: R_MIPS_64
+ Addend: 0x1000000000000
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0x0
+ Size: 8
+ - Name: data1
+ Section: .data
+ Value: 0x0
+ Size: 8
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 8
diff --git a/test/old-elf/Mips/rel-call-hilo-01.test b/test/old-elf/Mips/rel-call-hilo-01.test
new file mode 100644
index 000000000000..88f2e337d928
--- /dev/null
+++ b/test/old-elf/Mips/rel-call-hilo-01.test
@@ -0,0 +1,109 @@
+# Check handling of R_MIPS_CALL_HI16 / R_MIPS_CALL_LO16 relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t1.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t2.so.o %t1.so
+# RUN: llvm-objdump -s -t %t2.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 0110 00000000 18800000 00000000 1c800000
+# ^ -32744 ^ -32740
+# RAW-NEXT: 0120 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 00000120 l F .text 00000004 T1
+
+# GOT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x120
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# t1.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 20
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_CALL_HI16
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_CALL_LO16
+ - Offset: 8
+ Symbol: T2
+ Type: R_MIPS_CALL_HI16
+ - Offset: 12
+ Symbol: T2
+ Type: R_MIPS_CALL_LO16
+
+Symbols:
+ Local:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 16
+ Size: 4
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/rel-call-hilo-micro.test b/test/old-elf/Mips/rel-call-hilo-micro.test
new file mode 100644
index 000000000000..0df68def92b3
--- /dev/null
+++ b/test/old-elf/Mips/rel-call-hilo-micro.test
@@ -0,0 +1,154 @@
+# Check handling of R_MICROMIPS_CALL_HI16 / R_MICROMIPS_CALL_LO16 relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t1.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t2.so.o %t1.so
+# RUN: llvm-objdump -s -t %t2.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 0130 00000000 00001880 00000000 00002080
+# ^ -32744 ^ -32736
+# RAW-NEXT: 0140 00000000 00001c80 00000000 00002480
+# ^ -32740 ^ -32732
+# RAW-NEXT: 0150 00000000 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 00000140 l F .text 00000014 T1
+# RAW: 00000154 l F .text 00000004 M1
+
+# GOT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x140
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x155
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: M2@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# t1.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: M2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# t2.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 40
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_CALL_HI16
+ - Offset: 4
+ Symbol: T1
+ Type: R_MICROMIPS_CALL_LO16
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_CALL_HI16
+ - Offset: 12
+ Symbol: T2
+ Type: R_MICROMIPS_CALL_LO16
+ - Offset: 16
+ Symbol: M1
+ Type: R_MICROMIPS_CALL_HI16
+ - Offset: 20
+ Symbol: M1
+ Type: R_MICROMIPS_CALL_LO16
+ - Offset: 24
+ Symbol: M2
+ Type: R_MICROMIPS_CALL_HI16
+ - Offset: 28
+ Symbol: M2
+ Type: R_MICROMIPS_CALL_LO16
+
+Symbols:
+ Local:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 16
+ Size: 4
+ - Name: M1
+ Section: .text
+ Type: STT_FUNC
+ Value: 36
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+ - Name: M2
+...
diff --git a/test/old-elf/Mips/rel-copy-micro.test b/test/old-elf/Mips/rel-copy-micro.test
new file mode 100644
index 000000000000..ba47c84a2c5c
--- /dev/null
+++ b/test/old-elf/Mips/rel-copy-micro.test
@@ -0,0 +1,159 @@
+# Check R_MIPS_COPY relocation emitting
+# when linking non-shared executable file.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so1.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t-so1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-so2.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t-so2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t1.so %t2.so
+# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x402010 R_MIPS_COPY D1 0x0
+# CHECK-NEXT: 0x402018 R_MIPS_COPY D2 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (1)
+# CHECK-NEXT: Value: 0x402010
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .bss
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (4)
+# CHECK-NEXT: Value: 0x402018
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .bss
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSection [ ({{.*}} entries)
+# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-micro.test.tmp1.so)
+# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-micro.test.tmp2.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# so1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+# so2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x08
+ Symbol: D2
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x08
+ Symbol: D2
+ Type: R_MICROMIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+...
diff --git a/test/old-elf/Mips/rel-copy-pc.test b/test/old-elf/Mips/rel-copy-pc.test
new file mode 100644
index 000000000000..cf723f53719c
--- /dev/null
+++ b/test/old-elf/Mips/rel-copy-pc.test
@@ -0,0 +1,113 @@
+# Check R_MIPS_COPY relocation emitting caused by R_MIPS_PCHI16 / R_MIPS_PCLO16
+# relocations when linking non-shared executable file.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x402008 R_MIPS_COPY D1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (1)
+# CHECK-NEXT: Value: 0x402008
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .bss
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSection [ ({{.*}} entries)
+# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy-pc.test.tmp.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_PCHI16
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_PCLO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+ - Name: D1
+...
diff --git a/test/old-elf/Mips/rel-copy.test b/test/old-elf/Mips/rel-copy.test
new file mode 100644
index 000000000000..751034dcd728
--- /dev/null
+++ b/test/old-elf/Mips/rel-copy.test
@@ -0,0 +1,177 @@
+# Check R_MIPS_COPY relocation emitting
+# when linking non-shared executable file.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so1.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t-so1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-so2.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t-so2.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t1.so %t2.so
+# RUN: llvm-readobj -dt -r -dynamic-table %t.exe | FileCheck %s
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x402004 R_MIPS_REL32 D2 0x0
+# CHECK-NEXT: 0x402010 R_MIPS_COPY D1 0x0
+# CHECK-NEXT: 0x402018 R_MIPS_COPY D3 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (1)
+# CHECK-NEXT: Value: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .bss
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D3@ (4)
+# CHECK-NEXT: Value: 0x{{[0-9A-F]+}}
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .bss
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSection [ ({{.*}} entries)
+# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy.test.tmp1.so)
+# CHECK: 0x00000001 NEEDED SharedLibrary (rel-copy.test.tmp2.so)
+# CHECK-NEXT: 0x00000000 NULL 0x0
+# CHECK-NEXT: ]
+
+# so1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# so2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x04
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: D3
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+ - Offset: 0x08
+ Symbol: D3
+ Type: R_MIPS_HI16
+ - Offset: 0x08
+ Symbol: D3
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D3
+...
diff --git a/test/old-elf/Mips/rel-dynamic-01-micro.test b/test/old-elf/Mips/rel-dynamic-01-micro.test
new file mode 100644
index 000000000000..56dd7dfdeccd
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-01-micro.test
@@ -0,0 +1,201 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# Check:
+# a) Emitting R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
+# b) PLT entries creation.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# DIS: Disassembly of section .plt:
+# DIS-NEXT: .plt:
+# DIS-NEXT: 4001b0: 80 79 94 07 addiupc $3, 7760
+# DIS-NEXT: 4001b4: 23 ff 00 00 lw $25, 0($3)
+# DIS-NEXT: 4001b8: 35 05 subu16 $2, $2, $3
+# DIS-NEXT: 4001ba: 25 25 srl16 $2, $2, 2
+# DIS-NEXT: 4001bc: 02 33 fe ff addiu $24, $2, -2
+# DIS-NEXT: 4001c0: ff 0d move $15, $ra
+# DIS-NEXT: 4001c2: f9 45 jalrs16 $25
+# DIS-NEXT: 4001c4: 83 0f move $gp, $3
+# DIS-NEXT: 4001c6: 00 0c nop
+
+# DIS-NEXT: 4001c8: 00 79 90 07 addiupc $2, 7744
+# DIS-NEXT: 4001cc: 22 ff 00 00 lw $25, 0($2)
+# DIS-NEXT: 4001d0: 99 45 jr16 $25
+# DIS-NEXT: 4001d2: 02 0f move $24, $2
+
+# DIS-NEXT: 4001d4: 00 79 8e 07 addiupc $2, 7736
+# DIS-NEXT: 4001d8: 22 ff 00 00 lw $25, 0($2)
+# DIS-NEXT: 4001dc: 99 45 jr16 $25
+# DIS-NEXT: 4001de: 02 0f move $24, $2
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.dyn {
+# PLT-SYM-NEXT: 0x402020 R_MIPS_COPY D1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Section (6) .rel.plt {
+# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
+# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: D1@ (1)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 8
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Object (0x1)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: .bss
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T1@ (4)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 8
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T3@ (7)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MICROMIPS_26_S1
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-dynamic-01.test b/test/old-elf/Mips/rel-dynamic-01.test
new file mode 100644
index 000000000000..e24449eeeb58
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-01.test
@@ -0,0 +1,261 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# Check:
+# a) Emitting R_MIPS_REL32, R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
+# b) PLT entries creation.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -disassemble %t.exe | FileCheck -check-prefix=PLT %s
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# PLT: Disassembly of section .plt:
+# PLT-NEXT: .plt:
+# PLT-NEXT: 4001f0: 40 00 1c 3c lui $gp, 64
+# PLT-NEXT: 4001f4: 00 20 99 8f lw $25, 8192($gp)
+# PLT-NEXT: 4001f8: 00 20 9c 27 addiu $gp, $gp, 8192
+# PLT-NEXT: 4001fc: 23 c0 1c 03 subu $24, $24, $gp
+# PLT-NEXT: 400200: 25 78 e0 03 move $15, $ra
+# PLT-NEXT: 400204: 82 c0 18 00 srl $24, $24, 2
+# PLT-NEXT: 400208: 09 f8 20 03 jalr $25
+# PLT-NEXT: 40020c: fe ff 18 27 addiu $24, $24, -2
+#
+# PLT-NEXT: 400210: 40 00 0f 3c lui $15, 64
+# PLT-NEXT: 400214: 08 20 f9 8d lw $25, 8200($15)
+# PLT-NEXT: 400218: 08 00 20 03 jr $25
+# PLT-NEXT: 40021c: 08 20 f8 25 addiu $24, $15, 8200
+#
+# PLT-NEXT: 400220: 40 00 0f 3c lui $15, 64
+# PLT-NEXT: 400224: 0c 20 f9 8d lw $25, 8204($15)
+# PLT-NEXT: 400228: 08 00 20 03 jr $25
+# PLT-NEXT: 40022c: 0c 20 f8 25 addiu $24, $15, 8204
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.dyn {
+# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 T2 0x0
+# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 D2 0x0
+# PLT-SYM-NEXT: 0x402020 R_MIPS_COPY D1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Section (6) .rel.plt {
+# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
+# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: D1@ (1)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 4
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Object (0x1)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: .bss
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T1@ (4)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 8
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T3@ (10)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T2@ (7)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: D2@ (13)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 4
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Object (0x1)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x{{[0-9A-F]+}}
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x{{[0-9A-F]+}}
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (13)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-dynamic-02.test b/test/old-elf/Mips/rel-dynamic-02.test
new file mode 100644
index 000000000000..24b7c624c6a0
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-02.test
@@ -0,0 +1,101 @@
+# Conditions:
+# a) Linking a shared library.
+# b) Relocations' targets are undefined symbols.
+# Check:
+# a) Emitting R_MIPS_REL32 relocations for both undefined symbols.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec -o %t.so %t.o
+# RUN: llvm-readobj -dt -r -s %t.so | FileCheck %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+#
+# CHECK: Relocations [
+# CHECK-NEXT: Section (4) .rel.dyn {
+# CHECK-NEXT: 0x[[ADDR1:[0-9A-Z]+]] R_MIPS_REL32 T1 0x0
+# CHECK-NEXT: 0x[[ADDR2:[0-9A-Z]+]] R_MIPS_REL32 T1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+#
+# CHECK: Symbol {
+# CHECK: Name: T0@
+# CHECK-NEXT: Value: 0x[[ADDR1]]
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global
+# CHECK-NEXT: Type: Function
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: }
+# CHECK: Symbol {
+# CHECK: Name: D0@
+# CHECK-NEXT: Value: 0x[[ADDR2]]
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global
+# CHECK-NEXT: Type: Object
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .data
+# CHECK-NEXT: }
+# CHECK: Symbol {
+# CHECK: Name: T1@
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global
+# CHECK-NEXT: Type: None
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined
+# CHECK-NEXT: }
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 8
diff --git a/test/old-elf/Mips/rel-dynamic-03-micro.test b/test/old-elf/Mips/rel-dynamic-03-micro.test
new file mode 100644
index 000000000000..891649d8cdbc
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-03-micro.test
@@ -0,0 +1,133 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' target is a symbol defined in the shared object.
+# c) The target symbol is referenced by both branch (R_MICROMIPS_26_S1)
+# and regular (R_MIPS_32) relocations.
+# Check:
+# a) There should be no R_MIPS_REL32 relocation.
+# b) Linker creates a single PLT entry.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -d -mattr=micromips %t.exe | FileCheck -check-prefix=DIS %s
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# DIS: Disassembly of section .plt:
+# DIS-NEXT: .plt:
+# DIS-NEXT: 400170: 80 79 a4 07 addiupc $3, 7824
+# DIS-NEXT: 400174: 23 ff 00 00 lw $25, 0($3)
+# DIS-NEXT: 400178: 35 05 subu16 $2, $2, $3
+# DIS-NEXT: 40017a: 25 25 srl16 $2, $2, 2
+# DIS-NEXT: 40017c: 02 33 fe ff addiu $24, $2, -2
+# DIS-NEXT: 400180: ff 0d move $15, $ra
+# DIS-NEXT: 400182: f9 45 jalrs16 $25
+# DIS-NEXT: 400184: 83 0f move $gp, $3
+# DIS-NEXT: 400186: 00 0c nop
+
+# DIS-NEXT: 400188: 00 79 a0 07 addiupc $2, 7808
+# DIS-NEXT: 40018c: 22 ff 00 00 lw $25, 0($2)
+# DIS-NEXT: 400190: 99 45 jr16 $25
+# DIS-NEXT: 400192: 02 0f move $24, $2
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.plt {
+# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: Name: T1@ (1)
+# PLT-SYM-NEXT: Value: 0x400189
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 8
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MICROMIPS_26_S1
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+...
diff --git a/test/old-elf/Mips/rel-dynamic-03.test b/test/old-elf/Mips/rel-dynamic-03.test
new file mode 100644
index 000000000000..2552473ca80f
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-03.test
@@ -0,0 +1,129 @@
+# REQUIRES: mips
+
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' target is a symbol defined in the shared object.
+# c) The target symbol is referenced by both branch (R_MIPS_26)
+# and regular (R_MIPS_32) relocations.
+# Check:
+# a) There should be no R_MIPS_REL32 relocation.
+# b) Linker creates a single PLT entry.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -disassemble %t.exe | FileCheck -check-prefix=PLT %s
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT: Disassembly of section .plt:
+# PLT-NEXT: .plt:
+# PLT-NEXT: 400160: 40 00 1c 3c lui $gp, 64
+# PLT-NEXT: 400164: 00 20 99 8f lw $25, 8192($gp)
+# PLT-NEXT: 400168: 00 20 9c 27 addiu $gp, $gp, 8192
+# PLT-NEXT: 40016c: 23 c0 1c 03 subu $24, $24, $gp
+# PLT-NEXT: 400170: 25 78 e0 03 move $15, $ra
+# PLT-NEXT: 400174: 82 c0 18 00 srl $24, $24, 2
+# PLT-NEXT: 400178: 09 f8 20 03 jalr $25
+# PLT-NEXT: 40017c: fe ff 18 27 addiu $24, $24, -2
+#
+# PLT-NEXT: 400180: 40 00 0f 3c lui $15, 64
+# PLT-NEXT: 400184: 08 20 f9 8d lw $25, 8200($15)
+# PLT-NEXT: 400188: 08 00 20 03 jr $25
+# PLT-NEXT: 40018c: 08 20 f8 25 addiu $24, $15, 8200
+#
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.plt {
+# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: Name: T1@ (1)
+# PLT-SYM-NEXT: Value: 0x400180
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 8
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+...
diff --git a/test/old-elf/Mips/rel-dynamic-04-micro.test b/test/old-elf/Mips/rel-dynamic-04-micro.test
new file mode 100644
index 000000000000..de1131c67f43
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-04-micro.test
@@ -0,0 +1,226 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# c) Relocations modify a writable section.
+# d) The first symbol is referenced by R_MIPS32 relocation only
+# e) The second symbol is referenced by R_MIPS_32
+# and R_MICROMIPS_26_S1 relocations.
+# f) The third symbol is referenced by R_MICROMIPS_26_S1
+# and R_MIPS_32 relocations.
+# Check:
+# a) There should be the only R_MIPS_REL32 relocation.
+# b) Linker creates a couple of PLT entry for both symbols referenced
+# by the R_MICROMIPS_26_S1 branch relocation.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# PLT: Section {
+# PLT: Index: 5
+# PLT-NEXT: Name: .rel.dyn (31)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4010A0
+# PLT-NEXT: Offset: 0x10A0
+# PLT-NEXT: Size: 8
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 6
+# PLT-NEXT: Name: .rel.plt (40)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4010A8
+# PLT-NEXT: Offset: 0x10A8
+# PLT-NEXT: Size: 16
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 7
+# PLT-NEXT: Name: .plt (49)
+# PLT-NEXT: Type: SHT_PROGBITS (0x1)
+# PLT-NEXT: Flags [ (0x6)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: SHF_EXECINSTR (0x4)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4010C0
+# PLT-NEXT: Offset: 0x10C0
+# PLT-NEXT: Size: 48
+# PLT-NEXT: Link: 0
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 16
+# PLT-NEXT: EntrySize: 0
+# PLT-NEXT: }
+
+# PLT: Relocations [
+# PLT-NEXT: Section (5) .rel.dyn {
+# PLT-NEXT: 0x400120 R_MIPS_REL32 T1 0x0
+# PLT-NEXT: }
+# PLT-NEXT: Section (6) .rel.plt {
+# PLT-NEXT: 0x403008 R_MIPS_JUMP_SLOT T2 0x0
+# PLT-NEXT: 0x40300C R_MIPS_JUMP_SLOT T3 0x0
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# PLT: DynamicSymbols [
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: @ (0)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Local (0x0)
+# PLT-NEXT: Type: None (0x0)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T2@ (4)
+# PLT-NEXT: Value: 0x4010D9
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T3@ (7)
+# PLT-NEXT: Value: 0x4010E5
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T1@ (1)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x402008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x14
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ # There is no branch relocation for T1.
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+ # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+ # ... but R_MICROMIPS_26_S1 creates PLT entry
+ # and makes R_MIPS_REL32 redundant.
+ - Offset: 0x08
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ # Create PLT entry for T3 symbol.
+ - Offset: 0x0c
+ Symbol: T3
+ Type: R_MICROMIPS_26_S1
+ # Take in account existing PLT entry and do not create R_MIPS_REL32.
+ - Offset: 0x10
+ Symbol: T3
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x14
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+...
diff --git a/test/old-elf/Mips/rel-dynamic-04.test b/test/old-elf/Mips/rel-dynamic-04.test
new file mode 100644
index 000000000000..df8c676af330
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-04.test
@@ -0,0 +1,221 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# c) Relocations modify a writable section.
+# d) The first symbol is referenced by R_MIPS32 relocation only
+# e) The second symbol is referenced by R_MIPS_32 and R_MIPS26 relocations.
+# f) The third symbol is referenced by R_MIPS26 and R_MIPS_32 relocations.
+# Check:
+# a) There should be the only R_MIPS_REL32 relocation.
+# b) Linker creates a couple of PLT entry for both symbols referenced
+# by the R_MIPS_26 branch relocation.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# PLT: Section {
+# PLT: Index: 5
+# PLT-NEXT: Name: .rel.dyn (31)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x40109C
+# PLT-NEXT: Offset: 0x109C
+# PLT-NEXT: Size: 8
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 6
+# PLT-NEXT: Name: .rel.plt (40)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4010A4
+# PLT-NEXT: Offset: 0x10A4
+# PLT-NEXT: Size: 16
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 7
+# PLT-NEXT: Name: .plt (49)
+# PLT-NEXT: Type: SHT_PROGBITS (0x1)
+# PLT-NEXT: Flags [ (0x6)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: SHF_EXECINSTR (0x4)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4010C0
+# PLT-NEXT: Offset: 0x10C0
+# PLT-NEXT: Size: 64
+# PLT-NEXT: Link: 0
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 16
+# PLT-NEXT: EntrySize: 0
+# PLT-NEXT: }
+
+# PLT: Relocations [
+# PLT-NEXT: Section (5) .rel.dyn {
+# PLT-NEXT: 0x400120 R_MIPS_REL32 T1 0x0
+# PLT-NEXT: }
+# PLT-NEXT: Section (6) .rel.plt {
+# PLT-NEXT: 0x403008 R_MIPS_JUMP_SLOT T2 0x0
+# PLT-NEXT: 0x40300C R_MIPS_JUMP_SLOT T3 0x0
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# PLT: DynamicSymbols [
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: @ (0)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Local (0x0)
+# PLT-NEXT: Type: None (0x0)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T2@ (4)
+# PLT-NEXT: Value: 0x4010E0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T3@ (7)
+# PLT-NEXT: Value: 0x4010F0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T1@ (1)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x402008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ # There is no branch relocation for T1.
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+ # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
+ - Offset: 0x00
+ Symbol: T2
+ Type: R_MIPS_32
+ # ... but R_MIPS_26 creates PLT entry and makes R_MIPS_REL32 redundant.
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_26
+ # Create PLT entry for T3 symbol.
+ - Offset: 0x00
+ Symbol: T3
+ Type: R_MIPS_26
+ # Take in account existing PLT entry and do not create R_MIPS_REL32.
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+...
diff --git a/test/old-elf/Mips/rel-dynamic-05-micro.test b/test/old-elf/Mips/rel-dynamic-05-micro.test
new file mode 100644
index 000000000000..16c6a9c6aad5
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-05-micro.test
@@ -0,0 +1,192 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# c) Relocations modify a read-only section.
+# d) The first symbol is referenced by R_MIPS32 relocation only
+# e) The second symbol is referenced by R_MIPS_32
+# and R_MICROMIPS_26_S1 relocations.
+# f) The third symbol is referenced by R_MICROMIPS_26_S1
+# and R_MIPS_32 relocations.
+# Check:
+# a) There should be no R_MIPS_REL32 relocations.
+# b) Linker creates PLT entries for all three relocations.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
+
+# PLT: Section {
+# PLT: Index: 5
+# PLT-NEXT: Name: .rel.plt (31)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x400194
+# PLT-NEXT: Offset: 0x194
+# PLT-NEXT: Size: 24
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 6
+# PLT-NEXT: Name: .plt (40)
+# PLT-NEXT: Type: SHT_PROGBITS (0x1)
+# PLT-NEXT: Flags [ (0x6)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: SHF_EXECINSTR (0x4)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x4001B0
+# PLT-NEXT: Offset: 0x1B0
+# PLT-NEXT: Size: 60
+# PLT-NEXT: Link: 0
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 16
+# PLT-NEXT: EntrySize: 0
+# PLT-NEXT: }
+
+# PLT: Relocations [
+# PLT-NEXT: Section (5) .rel.plt {
+# PLT-NEXT: 0x402008 R_MIPS_JUMP_SLOT T1 0x0
+# PLT-NEXT: 0x40200C R_MIPS_JUMP_SLOT T2 0x0
+# PLT-NEXT: 0x402010 R_MIPS_JUMP_SLOT T3 0x0
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# PLT: DynamicSymbols [
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: @ (0)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Local (0x0)
+# PLT-NEXT: Type: None (0x0)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T1@ (1)
+# PLT-NEXT: Value: 0x4001C9
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T2@ (4)
+# PLT-NEXT: Value: 0x4001D5
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T3@ (7)
+# PLT-NEXT: Value: 0x4001E1
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x14
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ # There is no branch relocation for T1.
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+ # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+ # ... but R_MICROMIPS_26_S1 creates PLT entry and makes R_MIPS_REL32 redundant.
+ - Offset: 0x08
+ Symbol: T2
+ Type: R_MICROMIPS_26_S1
+ # Create PLT entry for T3 symbol.
+ - Offset: 0x0C
+ Symbol: T3
+ Type: R_MICROMIPS_26_S1
+ # Take in account existing PLT entry and do not create R_MIPS_REL32.
+ - Offset: 0x10
+ Symbol: T3
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 0x14
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+...
diff --git a/test/old-elf/Mips/rel-dynamic-05.test b/test/old-elf/Mips/rel-dynamic-05.test
new file mode 100644
index 000000000000..8348bc511fbd
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-05.test
@@ -0,0 +1,188 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# c) Relocations modify a read-only section.
+# d) The first symbol is referenced by R_MIPS32 relocation only
+# e) The second symbol is referenced by R_MIPS_32 and R_MIPS26 relocations.
+# f) The third symbol is referenced by R_MIPS26 and R_MIPS_32 relocations.
+# Check:
+# a) There should be no R_MIPS_REL32 relocations.
+# b) Linker creates PLT entries for all three relocations.
+# c) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT %s
+
+# PLT: Section {
+# PLT: Index: 5
+# PLT-NEXT: Name: .rel.plt (31)
+# PLT-NEXT: Type: SHT_REL (0x9)
+# PLT-NEXT: Flags [ (0x2)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Offset: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Size: 24
+# PLT-NEXT: Link: 3
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 4
+# PLT-NEXT: EntrySize: 8
+# PLT-NEXT: }
+# PLT-NEXT: Section {
+# PLT-NEXT: Index: 6
+# PLT-NEXT: Name: .plt (40)
+# PLT-NEXT: Type: SHT_PROGBITS (0x1)
+# PLT-NEXT: Flags [ (0x6)
+# PLT-NEXT: SHF_ALLOC (0x2)
+# PLT-NEXT: SHF_EXECINSTR (0x4)
+# PLT-NEXT: ]
+# PLT-NEXT: Address: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Offset: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Size: 80
+# PLT-NEXT: Link: 0
+# PLT-NEXT: Info: 0
+# PLT-NEXT: AddressAlignment: 16
+# PLT-NEXT: EntrySize: 0
+# PLT-NEXT: }
+
+# PLT: Relocations [
+# PLT-NEXT: Section (5) .rel.plt {
+# PLT-NEXT: {{[0-9A-F]+}} R_MIPS_JUMP_SLOT T1 0x0
+# PLT-NEXT: {{[0-9A-F]+}} R_MIPS_JUMP_SLOT T2 0x0
+# PLT-NEXT: {{[0-9A-F]+}} R_MIPS_JUMP_SLOT T3 0x0
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# PLT: DynamicSymbols [
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: @ (0)
+# PLT-NEXT: Value: 0x0
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Local (0x0)
+# PLT-NEXT: Type: None (0x0)
+# PLT-NEXT: Other: 0
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T1@ (1)
+# PLT-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T2@ (4)
+# PLT-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: Symbol {
+# PLT-NEXT: Name: T3@ (7)
+# PLT-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-NEXT: Size: 0
+# PLT-NEXT: Binding: Global (0x1)
+# PLT-NEXT: Type: Function (0x2)
+# PLT-NEXT: Other: 8
+# PLT-NEXT: Section: Undefined (0x0)
+# PLT-NEXT: }
+# PLT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+
+# o.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ # There is no branch relocation for T1.
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+ # The R_MIPS_32 relocation for T2 might produce R_MIPS_REL32 ...
+ - Offset: 0x00
+ Symbol: T2
+ Type: R_MIPS_32
+ # ... but R_MIPS_26 creates PLT entry and makes R_MIPS_REL32 redundant.
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_26
+ # Create PLT entry for T3 symbol.
+ - Offset: 0x00
+ Symbol: T3
+ Type: R_MIPS_26
+ # Take in account existing PLT entry and do not create R_MIPS_REL32.
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+...
diff --git a/test/old-elf/Mips/rel-dynamic-06-64.test b/test/old-elf/Mips/rel-dynamic-06-64.test
new file mode 100644
index 000000000000..6b0d28993f94
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-06-64.test
@@ -0,0 +1,114 @@
+# Conditions:
+# a) Linking a shared library.
+# b) The first relocation modifies a regular .text section.
+# c) The second relocation modifies a .pdr section without SHF_ALLOC flag.
+# Check:
+# a) There should be no PLT entries.
+# b) Linker creates a single R_MIPS_REL32 relocation.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-readobj -dt -r -s %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-readobj -mips-plt-got %t.so | FileCheck -check-prefix=GOT %s
+
+# SYM: Sections [
+# SYM: Section {
+# SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# SYM: Relocations [
+# SYM-NEXT: Section (4) .rel.dyn {
+# SYM-NEXT: 0x[[ADDR:[0-9A-Z]+]] R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T0 0x0
+# SYM-NEXT: }
+# SYM-NEXT: ]
+
+# SYM: Symbol {
+# SYM: Name: @ (0)
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Local (0x0)
+# SYM-NEXT: Type: None (0x0)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Undefined (0x0)
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T1@ (4)
+# SYM-NEXT: Value: 0x174
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T0@ (1)
+# SYM-NEXT: Value: 0x[[ADDR]]
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+# SYM-NEXT: }
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x170
+# GOT-NEXT: Value: 0x170
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: .text (0x5)
+# GOT-NEXT: Name: T0@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T0
+ Type: R_MIPS_64
+
+- Name: .pdr
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+
+- Name: .rel.pdr
+ Type: SHT_RELA
+ Info: .pdr
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_64
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/rel-dynamic-06.test b/test/old-elf/Mips/rel-dynamic-06.test
new file mode 100644
index 000000000000..ead7dfb08ddf
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-06.test
@@ -0,0 +1,115 @@
+# Conditions:
+# a) Linking a shared library.
+# b) The first relocation modifies a regular .text section.
+# c) The second relocation modifies a .pdr section without SHF_ALLOC flag.
+# Check:
+# a) There should be no PLT entries.
+# b) Linker creates a single R_MIPS_REL32 relocation.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -dt -r -s %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-readobj -mips-plt-got %t.so | FileCheck -check-prefix=GOT %s
+
+# SYM: Sections [
+# SYM: Section {
+# SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# SYM: Relocations [
+# SYM-NEXT: Section (4) .rel.dyn {
+# SYM-NEXT: 0x[[ADDR:[0-9A-Z]+]] R_MIPS_REL32 T0 0x0
+# SYM-NEXT: }
+# SYM-NEXT: ]
+
+# SYM: Symbol {
+# SYM: Name: @ (0)
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Local (0x0)
+# SYM-NEXT: Type: None (0x0)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Undefined (0x0)
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T1@ (4)
+# SYM-NEXT: Value: 0x104
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+# SYM-NEXT: }
+# SYM: Symbol {
+# SYM: Name: T0@ (1)
+# SYM-NEXT: Value: 0x[[ADDR]]
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+# SYM-NEXT: }
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x100
+# GOT-NEXT: Value: 0x100
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: .text (0x5)
+# GOT-NEXT: Name: T0@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T0
+ Type: R_MIPS_32
+
+- Name: .pdr
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: []
+
+- Name: .rel.pdr
+ Type: SHT_REL
+ Info: .pdr
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/rel-dynamic-07-64.test b/test/old-elf/Mips/rel-dynamic-07-64.test
new file mode 100644
index 000000000000..823a66d521e2
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-07-64.test
@@ -0,0 +1,348 @@
+# Conditions:
+# a) Linking a shared library.
+# b) There ars multiple R_MIPS_64 relocations with various targets.
+# Check:
+# a) Emitting of R_MIPS_REL32 relocations.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t1.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -shared --noinhibit-exec \
+# RUN: -o %t2.so %t-o.o %t1.so
+# RUN: llvm-readobj -dt -r -sections %t2.so | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (4) .rel.dyn {
+# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T0 0x0
+# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T4 0x0
+# CHECK-NEXT: 0x2000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D2 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T1 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T2 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D0 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D1 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D4 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE U1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T0@ (1)
+# CHECK-NEXT: Value: 0x324
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text (0x5)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T4@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (25)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ (16)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ (19)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D0@ (4)
+# CHECK-NEXT: Value: 0x2004
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .data (0x8)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (22)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D4@ (10)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: U1@ (13)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x324
+# GOT-NEXT: Value: 0x324
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: .text (0x5)
+# GOT-NEXT: Name: T0@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T4@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (25)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1028
+# GOT-NEXT: Access: -32712
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (16)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1030
+# GOT-NEXT: Access: -32704
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (19)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1038
+# GOT-NEXT: Access: -32696
+# GOT-NEXT: Initial: 0x2004
+# GOT-NEXT: Value: 0x2004
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: .data (0x8)
+# GOT-NEXT: Name: D0@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1040
+# GOT-NEXT: Access: -32688
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D1@ (22)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1048
+# GOT-NEXT: Access: -32680
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D4@ (10)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1050
+# GOT-NEXT: Access: -32672
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: U1@ (13)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00 # T0 is a defined function
+ Symbol: T0
+ Type: R_MIPS_64
+ - Offset: 0x04 # T1 is a function from shared lib
+ Symbol: T1
+ Type: R_MIPS_64
+ - Offset: 0x08 # T2 has unknown type and defined in shared lib
+ Symbol: T2
+ Type: R_MIPS_64
+ - Offset: 0x00 # T4 is an undefined function
+ Symbol: T4
+ Type: R_MIPS_64
+ - Offset: 0x04 # D0 is a defined data object
+ Symbol: D0
+ Type: R_MIPS_64
+ - Offset: 0x08 # D1 is a data object from shared lib
+ Symbol: D1
+ Type: R_MIPS_64
+ - Offset: 0x00 # D2 has unknown type and defined in shared lib
+ Symbol: D2
+ Type: R_MIPS_64
+ - Offset: 0x04 # D4 is an undefined data object
+ Symbol: D4
+ Type: R_MIPS_64
+ - Offset: 0x08 # U1 is undefined and has unknown type
+ Symbol: U1
+ Type: R_MIPS_64
+
+Symbols:
+ Local:
+ - Name: LT0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: LD0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ - Name: T4
+ Type: STT_FUNC
+
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D4
+ Type: STT_OBJECT
+ - Name: U1
+...
diff --git a/test/old-elf/Mips/rel-dynamic-07.test b/test/old-elf/Mips/rel-dynamic-07.test
new file mode 100644
index 000000000000..41c31c66a5f3
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-07.test
@@ -0,0 +1,363 @@
+# Conditions:
+# a) Linking a shared library.
+# b) There ars multiple R_MIPS_32 relocations with various targets.
+# Check:
+# a) Emitting of R_MIPS_REL32 relocations.
+# b) There should be no R_MIPS_REL32 relocations for the _gp_disp symbol.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -shared --noinhibit-exec \
+# RUN: -o %t2.so %t-o.o %t1.so
+# RUN: llvm-readobj -dt -r -sections %t2.so | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (4) .rel.dyn {
+# CHECK-NEXT: 0x2000 R_MIPS_REL32 T0 0x0
+# CHECK-NEXT: 0x2000 R_MIPS_REL32 T4 0x0
+# CHECK-NEXT: 0x2000 R_MIPS_REL32 D2 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32 T1 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32 T2 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32 D0 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32 D1 0x0
+# CHECK-NEXT: 0x2004 R_MIPS_REL32 D4 0x0
+# CHECK-NEXT: 0x2008 R_MIPS_REL32 U1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T0@ (1)
+# CHECK-NEXT: Value: 0x214
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .text (0x5)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T4@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (25)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ (16)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ (19)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D0@ (4)
+# CHECK-NEXT: Value: 0x2004
+# CHECK-NEXT: Size: 8
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: .data (0x8)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (22)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D4@ (10)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: U1@ (13)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x214
+# GOT-NEXT: Value: 0x214
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: .text (0x5)
+# GOT-NEXT: Name: T0@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T4@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (25)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (16)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (19)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x101C
+# GOT-NEXT: Access: -32724
+# GOT-NEXT: Initial: 0x2004
+# GOT-NEXT: Value: 0x2004
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: .data (0x8)
+# GOT-NEXT: Name: D0@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D1@ (22)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1024
+# GOT-NEXT: Access: -32716
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D4@ (10)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1028
+# GOT-NEXT: Access: -32712
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: None (0x0)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: U1@ (13)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00 # T0 is a defined function
+ Symbol: T0
+ Type: R_MIPS_32
+ - Offset: 0x04 # T1 is a function from shared lib
+ Symbol: T1
+ Type: R_MIPS_32
+ - Offset: 0x08 # T2 has unknown type and defined in shared lib
+ Symbol: T2
+ Type: R_MIPS_32
+ - Offset: 0x00 # T4 is an undefined function
+ Symbol: T4
+ Type: R_MIPS_32
+ - Offset: 0x04 # D0 is a defined data object
+ Symbol: D0
+ Type: R_MIPS_32
+ - Offset: 0x08 # D1 is a data object from shared lib
+ Symbol: D1
+ Type: R_MIPS_32
+ - Offset: 0x00 # D2 has unknown type and defined in shared lib
+ Symbol: D2
+ Type: R_MIPS_32
+ - Offset: 0x04 # D4 is an undefined data object
+ Symbol: D4
+ Type: R_MIPS_32
+ - Offset: 0x08 # U1 is undefined and has unknown type
+ Symbol: U1
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Name: LT0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: LD0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+ Global:
+ - Name: _gp_disp
+ Type: STT_OBJECT
+
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ - Name: T4
+ Type: STT_FUNC
+
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D4
+ Type: STT_OBJECT
+ - Name: U1
diff --git a/test/old-elf/Mips/rel-dynamic-08-64.test b/test/old-elf/Mips/rel-dynamic-08-64.test
new file mode 100644
index 000000000000..019b8e5161a8
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-08-64.test
@@ -0,0 +1,275 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) There ars multiple R_MIPS_64/R_MIPS_HI16/R_MIPS_LO16 relocations
+# with various targets.
+# Check:
+# a) Emitting of R_MIPS_REL32 relocations.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 --noinhibit-exec \
+# RUN: -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x120002000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D2 0x0
+# CHECK-NEXT: 0x120002004 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T1 0x0
+# CHECK-NEXT: 0x120002008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T2 0x0
+# CHECK-NEXT: 0x120002008 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE D1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (10)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ (1)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ (4)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (10)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001018
+# GOT-NEXT: Access: -32728
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001020
+# GOT-NEXT: Access: -32720
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x120001028
+# GOT-NEXT: Access: -32712
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D1@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_RELA
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+
+- Name: .rel.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00 # LT0 is a locally defined function
+ Symbol: LT0
+ Type: R_MIPS_64
+ - Offset: 0x00 # LD0 is a locally defined data object
+ Symbol: LD0
+ Type: R_MIPS_64
+ - Offset: 0x00 # T0 is a defined function
+ Symbol: T0
+ Type: R_MIPS_64
+ - Offset: 0x04 # T1 is a function from shared lib
+ Symbol: T1
+ Type: R_MIPS_64
+ - Offset: 0x08 # T2 has unknown type and defined in shared lib
+ Symbol: T2
+ Type: R_MIPS_64
+ - Offset: 0x00 # T4 is an undefined function
+ Symbol: T4
+ Type: R_MIPS_64
+ - Offset: 0x04 # D0 is a defined data object
+ Symbol: D0
+ Type: R_MIPS_64
+ - Offset: 0x08 # D1 is a data object from shared lib
+ Symbol: D1
+ Type: R_MIPS_64
+ - Offset: 0x00 # D2 has unknown type and defined in shared lib
+ Symbol: D2
+ Type: R_MIPS_64
+ - Offset: 0x04 # D4 is an undefined data object
+ Symbol: D4
+ Type: R_MIPS_64
+ - Offset: 0x08 # U1 is undefined and has unknown type
+ Symbol: U1
+ Type: R_MIPS_64
+
+Symbols:
+ Local:
+ - Name: LT0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: LD0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+
+ Global:
+ - Name: _gp_disp
+ Type: STT_OBJECT
+
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ - Name: T4
+ Type: STT_FUNC
+
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D4
+ Type: STT_OBJECT
+ - Name: U1
+...
diff --git a/test/old-elf/Mips/rel-dynamic-08-micro.test b/test/old-elf/Mips/rel-dynamic-08-micro.test
new file mode 100644
index 000000000000..2d25b504ee28
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-08-micro.test
@@ -0,0 +1,278 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) There ars multiple R_MIPS_32/R_MICROMIPS_HI16/R_MICROMIPS_LO16
+# relocations with various targets.
+# Check:
+# a) Emitting of R_MIPS_REL32 relocations.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 --noinhibit-exec \
+# RUN: -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x402000 R_MIPS_REL32 D2 0x0
+# CHECK-NEXT: 0x402004 R_MIPS_REL32 T1 0x0
+# CHECK-NEXT: 0x402008 R_MIPS_REL32 T2 0x0
+# CHECK-NEXT: 0x402008 R_MIPS_REL32 D1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (10)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ (1)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ (4)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (10)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D1@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MICROMIPS_LO16
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00 # LT0 is a locally defined function
+ Symbol: LT0
+ Type: R_MIPS_32
+ - Offset: 0x00 # LD0 is a locally defined data object
+ Symbol: LD0
+ Type: R_MIPS_32
+ - Offset: 0x00 # T0 is a defined function
+ Symbol: T0
+ Type: R_MIPS_32
+ - Offset: 0x04 # T1 is a function from shared lib
+ Symbol: T1
+ Type: R_MIPS_32
+ - Offset: 0x08 # T2 has unknown type and defined in shared lib
+ Symbol: T2
+ Type: R_MIPS_32
+ - Offset: 0x00 # T4 is an undefined function
+ Symbol: T4
+ Type: R_MIPS_32
+ - Offset: 0x04 # D0 is a defined data object
+ Symbol: D0
+ Type: R_MIPS_32
+ - Offset: 0x08 # D1 is a data object from shared lib
+ Symbol: D1
+ Type: R_MIPS_32
+ - Offset: 0x00 # D2 has unknown type and defined in shared lib
+ Symbol: D2
+ Type: R_MIPS_32
+ - Offset: 0x04 # D4 is an undefined data object
+ Symbol: D4
+ Type: R_MIPS_32
+ - Offset: 0x08 # U1 is undefined and has unknown type
+ Symbol: U1
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Name: LT0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: LD0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+ Global:
+ - Name: _gp_disp
+ Type: STT_OBJECT
+
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ - Name: T4
+ Type: STT_FUNC
+
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D4
+ Type: STT_OBJECT
+ - Name: U1
+...
diff --git a/test/old-elf/Mips/rel-dynamic-08.test b/test/old-elf/Mips/rel-dynamic-08.test
new file mode 100644
index 000000000000..a89e6ecf480e
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-08.test
@@ -0,0 +1,275 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) There ars multiple R_MIPS_32/R_MIPS_HI16/R_MIPS_LO16 relocations
+# with various targets.
+# Check:
+# a) Emitting of R_MIPS_REL32 relocations.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 --noinhibit-exec \
+# RUN: -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r -sections %t.exe | FileCheck %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# CHECK: Sections [
+# CHECK: Section {
+# CHECK-NOT: Name: .plt ({{[0-9]+}})
+
+# CHECK: Relocations [
+# CHECK-NEXT: Section (5) .rel.dyn {
+# CHECK-NEXT: 0x402000 R_MIPS_REL32 D2 0x0
+# CHECK-NEXT: 0x402004 R_MIPS_REL32 T1 0x0
+# CHECK-NEXT: 0x402008 R_MIPS_REL32 T2 0x0
+# CHECK-NEXT: 0x402008 R_MIPS_REL32 D1 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# CHECK: DynamicSymbols [
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: @ (0)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Local (0x0)
+# CHECK-NEXT: Type: None (0x0)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D2@ (10)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T1@ (1)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: T2@ (4)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Function (0x2)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: Symbol {
+# CHECK-NEXT: Name: D1@ (7)
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 4
+# CHECK-NEXT: Binding: Global (0x1)
+# CHECK-NEXT: Type: Object (0x1)
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined (0x0)
+# CHECK-NEXT: }
+# CHECK-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (10)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D1@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: _gp_disp
+ Type: R_MIPS_LO16
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00 # LT0 is a locally defined function
+ Symbol: LT0
+ Type: R_MIPS_32
+ - Offset: 0x00 # LD0 is a locally defined data object
+ Symbol: LD0
+ Type: R_MIPS_32
+ - Offset: 0x00 # T0 is a defined function
+ Symbol: T0
+ Type: R_MIPS_32
+ - Offset: 0x04 # T1 is a function from shared lib
+ Symbol: T1
+ Type: R_MIPS_32
+ - Offset: 0x08 # T2 has unknown type and defined in shared lib
+ Symbol: T2
+ Type: R_MIPS_32
+ - Offset: 0x00 # T4 is an undefined function
+ Symbol: T4
+ Type: R_MIPS_32
+ - Offset: 0x04 # D0 is a defined data object
+ Symbol: D0
+ Type: R_MIPS_32
+ - Offset: 0x08 # D1 is a data object from shared lib
+ Symbol: D1
+ Type: R_MIPS_32
+ - Offset: 0x00 # D2 has unknown type and defined in shared lib
+ Symbol: D2
+ Type: R_MIPS_32
+ - Offset: 0x04 # D4 is an undefined data object
+ Symbol: D4
+ Type: R_MIPS_32
+ - Offset: 0x08 # U1 is undefined and has unknown type
+ Symbol: U1
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Name: LT0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: LD0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+
+ Global:
+ - Name: _gp_disp
+ Type: STT_OBJECT
+
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ - Name: T4
+ Type: STT_FUNC
+
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ - Name: D4
+ Type: STT_OBJECT
+ - Name: U1
+...
diff --git a/test/old-elf/Mips/rel-dynamic-09-micro.test b/test/old-elf/Mips/rel-dynamic-09-micro.test
new file mode 100644
index 000000000000..2011ae079645
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-09-micro.test
@@ -0,0 +1,109 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are undefined symbols.
+# Check:
+# a) There should be no dynamic relocations.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel --noinhibit-exec -e T0 -o %t2-exe %t-obj
+# RUN: llvm-readobj -dt -r -s %t2-exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Sections [
+# PLT-SYM: Section {
+# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MICROMIPS_26_S1
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
diff --git a/test/old-elf/Mips/rel-dynamic-09.test b/test/old-elf/Mips/rel-dynamic-09.test
new file mode 100644
index 000000000000..9b02ec1b5707
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-09.test
@@ -0,0 +1,107 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are undefined symbols.
+# Check:
+# a) There should be no dynamic relocations.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel --noinhibit-exec -e T0 -o %t2-exe %t-obj
+# RUN: llvm-readobj -dt -r -s %t2-exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Sections [
+# PLT-SYM: Section {
+# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32 ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
diff --git a/test/old-elf/Mips/rel-dynamic-10-micro.test b/test/old-elf/Mips/rel-dynamic-10-micro.test
new file mode 100644
index 000000000000..4600af85c27c
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-10-micro.test
@@ -0,0 +1,166 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the other object.
+# Check:
+# a) There should be no dynamic relocations.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Sections [
+# PLT-SYM: Section {
+# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o2.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MICROMIPS_26_S1
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MICROMIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-dynamic-10.test b/test/old-elf/Mips/rel-dynamic-10.test
new file mode 100644
index 000000000000..68a311df73e4
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-10.test
@@ -0,0 +1,160 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the other object.
+# Check:
+# a) There should be no dynamic relocations.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-o1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o
+# RUN: llvm-readobj -dt -r -s %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Sections [
+# PLT-SYM: Section {
+# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o2.o
+---
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_HI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_HI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_LO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-dynamic-11.test b/test/old-elf/Mips/rel-dynamic-11.test
new file mode 100644
index 000000000000..01edbd64812f
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-11.test
@@ -0,0 +1,110 @@
+# Conditions:
+# a) Linking a shared library.
+# b) Relocations' targets are symbols defined in the other shared object.
+# Check:
+# a) Emitting R_MIPS_REL32 relocations for both symbols.
+# b) There should be no PLT entries.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t-o.o %t1.so
+# RUN: llvm-readobj -dt -r -s %t2.so | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Sections [
+# PLT-SYM: Section {
+# PLT-SYM-NOT: Name: .plt ({{[0-9]+}})
+#
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (4) .rel.dyn {
+# PLT-SYM-NEXT: 0x150 R_MIPS_REL32 T1 0x0
+# PLT-SYM-NEXT: 0x2000 R_MIPS_REL32 T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+#
+# PLT-SYM: Name: T1@ (7)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T1
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+...
diff --git a/test/old-elf/Mips/rel-dynamic-12.test b/test/old-elf/Mips/rel-dynamic-12.test
new file mode 100644
index 000000000000..c684df3f2628
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-12.test
@@ -0,0 +1,237 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# c) Relocations are R_MIPS_PCHI16 / R_MIPS_PCLO16.
+# Check:
+# a) Emitting R_MIPS_REL32, R_MIPS_COPY, R_MIPS_JUMP_SLOT relocations.
+# b) STO_MIPS_PLT flag in the dynamic symbol table for symbols require
+# a pointer equality.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.dyn {
+# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 T2 0x0
+# PLT-SYM-NEXT: 0x402014 R_MIPS_REL32 D2 0x0
+# PLT-SYM-NEXT: 0x402020 R_MIPS_COPY D1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Section (6) .rel.plt {
+# PLT-SYM-NEXT: 0x402008 R_MIPS_JUMP_SLOT T3 0x0
+# PLT-SYM-NEXT: 0x40200C R_MIPS_JUMP_SLOT T1 0x0
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: @ (0)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Local (0x0)
+# PLT-SYM-NEXT: Type: None (0x0)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: D1@ (1)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 4
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Object (0x1)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: .bss
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T1@ (4)
+# PLT-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 8
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T3@ (10)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: T2@ (7)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 0
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Function (0x2)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: Symbol {
+# PLT-SYM-NEXT: Name: D2@ (13)
+# PLT-SYM-NEXT: Value: 0x0
+# PLT-SYM-NEXT: Size: 4
+# PLT-SYM-NEXT: Binding: Global (0x1)
+# PLT-SYM-NEXT: Type: Object (0x1)
+# PLT-SYM-NEXT: Other: 0
+# PLT-SYM-NEXT: Section: Undefined (0x0)
+# PLT-SYM-NEXT: }
+# PLT-SYM-NEXT: ]
+
+# GOT: Local entries [
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x{{[0-9A-F]+}}
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x{{[0-9A-F]+}}
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Object (0x1)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: D2@ (13)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x0C
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x4
+ Size: 4
+ - Name: T3
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x8
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 4
+ - Name: D2
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x4
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x04
+ Symbol: T3
+ Type: R_MIPS_26
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_PCHI16
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_PCLO16
+ - Offset: 0x04
+ Symbol: T2
+ Type: R_MIPS_32
+
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_PCHI16
+ - Offset: 0x04
+ Symbol: D1
+ Type: R_MIPS_PCLO16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_32
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: T3
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+ - Name: D2
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-dynamic-13.test b/test/old-elf/Mips/rel-dynamic-13.test
new file mode 100644
index 000000000000..2bf014e51025
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-13.test
@@ -0,0 +1,94 @@
+# Conditions:
+# a) Linking a non-shared 32-bit executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# Check:
+# a) Emitting R_MIPS_REL32 relocation.
+# b) Applying addendum from the original relocation.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+
+# RAW: Contents of section .data:
+# RAW-NEXT: 402000 01000000
+
+# REL: Relocations [
+# REL-NEXT: Section (5) .rel.dyn {
+# REL-NEXT: 0x402000 R_MIPS_REL32 T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_32
+ Addend: 1
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-dynamic-14.test b/test/old-elf/Mips/rel-dynamic-14.test
new file mode 100644
index 000000000000..33197ae92b81
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-14.test
@@ -0,0 +1,94 @@
+# Conditions:
+# a) Linking a non-shared 64-bit executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# Check:
+# a) Emitting R_MIPS_REL32/R_MIPS_64 relocation.
+# b) Applying addendum from the original relocation.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+
+# RAW: Contents of section .data:
+# RAW-NEXT: 120002000 04000000 00000000
+
+# REL: Relocations [
+# REL-NEXT: Section (5) .rel.dyn {
+# REL-NEXT: 0x120002000 R_MIPS_REL32/R_MIPS_64/R_MIPS_NONE T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_64
+ Addend: 4
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-dynamic-15.test b/test/old-elf/Mips/rel-dynamic-15.test
new file mode 100644
index 000000000000..13e2083bfc02
--- /dev/null
+++ b/test/old-elf/Mips/rel-dynamic-15.test
@@ -0,0 +1,81 @@
+# Check that LLD generates dynamic relocation R_MIPS_REL32 for local
+# symbols if the symbols referenced by R_MIPS_32 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 0120 00000000 00000000
+# RAW: Contents of section .data.rel.local:
+# RAW-NEXT: 2000 20010000 00000000
+
+# REL: Relocations [
+# REL-NEXT: Section (4) .rel.dyn {
+# REL-NEXT: 0x2000 R_MIPS_REL32 - 0x0
+# REL-NEXT: 0x2004 R_MIPS_REL32 T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .data.rel.local
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .rel.data.rel.local
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .data.rel.local
+ Relocations:
+ - Offset: 0
+ Symbol: .text
+ Type: R_MIPS_32
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: .data.rel.local
+ Type: STT_SECTION
+ Section: .data.rel.local
+
+ Global:
+ - Name: D0
+ Type: STT_OBJECT
+ Section: .data.rel.local
+ Value: 0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 4
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-eh-01.test b/test/old-elf/Mips/rel-eh-01.test
new file mode 100644
index 000000000000..08e5d78683a8
--- /dev/null
+++ b/test/old-elf/Mips/rel-eh-01.test
@@ -0,0 +1,186 @@
+# Check R_MIPS_EH relocation handling: writing result of a relocation
+# calculation, adding GOT entries etc.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 3 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t1.o %t2.o %t.so
+# RUN: llvm-objdump -s -t %t.exe | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -mips-plt-got %t.exe | FileCheck -check-prefix=GOT %s
+
+# RAW: Contents of section .gnu_extab:
+# RAW-NEXT: 400178 001880ff ff000000 1c80ffff 2080ffff
+# ^ T1 GOT entry = 0xffff8018 = -32744
+# ^ L1 GOT entry = 0xffff801c = -32740
+# E1 GOT entry = 0xffff8020 = -32736 ^
+# RAW: Contents of section .got:
+# RAW-NEXT: 401000 00000000 00000080 60014000 00204000
+# RAW-NEXT: 401010 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 00402000 l .data 00000004 L1
+# RAW: 00400160 g F .text 00000004 T1
+
+# GOT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x400160
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x40100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x402000
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x401010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: E1@ (1)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Number of TLS and multi-GOT entries: 0
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: E1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [SHF_WRITE, SHF_ALLOC]
+ AddressAlign: 16
+ Size: 4
+
+ - Name: .gnu_extab
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .rel.gnu_extab
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .gnu_extab
+ Relocations:
+ - Offset: 1
+ Symbol: T1
+ Type: R_MIPS_EH
+ - Offset: 8
+ Symbol: L1
+ Type: R_MIPS_EH
+ - Offset: 12
+ Symbol: E1
+ Type: R_MIPS_EH
+
+ - Name: .eh_frame_entry
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC]
+ AddressAlign: 4
+ Content: "0000000100000001"
+
+ - Name: .rel.eh_frame_entry
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .eh_frame_entry
+ Relocations:
+ - Offset: 0
+ Symbol: .text
+ Type: R_MIPS_PC32
+ - Offset: 4
+ Symbol: .gnu_extab
+ Type: R_MIPS_PC32
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .gnu_extab
+ Type: STT_SECTION
+ Section: .gnu_extab
+ - Name: L1
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0
+ Size: 4
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 8
+ - Name: E1
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/rel-eh-02.test b/test/old-elf/Mips/rel-eh-02.test
new file mode 100644
index 000000000000..e78c967ed301
--- /dev/null
+++ b/test/old-elf/Mips/rel-eh-02.test
@@ -0,0 +1,130 @@
+# Conditions:
+# a) Linking a non-shared executable file.
+# b) Relocations' targets are symbols defined in the shared object.
+# Check:
+# a) The R_MIPS_REL32 relocation is not created for any symbols.
+# b) The R_MIPS_COPY relocation is created for the D1 symbol.
+# c) No entries in the dynamic symbols table has the STO_MIPS_PLT flag.
+#
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-o.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o %t.so
+# RUN: llvm-readobj -dt -r %t.exe | FileCheck -check-prefix=PLT-SYM %s
+
+# PLT-SYM: Relocations [
+# PLT-SYM-NEXT: Section (5) .rel.dyn {
+# PLT-SYM-NEXT: 0x{{[0-9A-F]+}} R_MIPS_COPY D1 0x0
+# PLT-SYM-NEXT: }
+
+# PLT-SYM: DynamicSymbols [
+# PLT-SYM-NOT: Other: 8
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 4
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ - Name: D1
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0
+ Size: 4
+
+# o.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_EXECINSTR, SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_WRITE, SHF_ALLOC]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 4
+ Symbol: D1
+ Type: R_MIPS_PC32
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_EH
+ - Offset: 4
+ Symbol: T2
+ Type: R_MIPS_EH
+ - Offset: 8
+ Symbol: D1
+ Type: R_MIPS_EH
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ - Name: T1
+ Type: STT_FUNC
+ - Name: T2
+ Type: STT_FUNC
+ - Name: D0
+ Section: .data
+ Type: STT_OBJECT
+ Value: 0x0
+ Size: 8
+ - Name: D1
+ Type: STT_OBJECT
+...
diff --git a/test/old-elf/Mips/rel-eh-03.test b/test/old-elf/Mips/rel-eh-03.test
new file mode 100644
index 000000000000..63ed74cd56f8
--- /dev/null
+++ b/test/old-elf/Mips/rel-eh-03.test
@@ -0,0 +1,128 @@
+# Check R_MIPS_EH relocation handling in case of -pcrel-eh-reloc option.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 \
+# RUN: -pcrel-eh-reloc -o %t.exe %t1.o %t2.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck -check-prefix=RAW %s
+
+# RAW: Contents of section .gnu_extab:
+# RAW-NEXT: 400148 00e7ffff ff000000 b01e0000 00000000
+# ^ 0x400130 + 0 - 0x400149 = 0xffffffe7
+# ^ 0x402000 + 0 - 0x400150 = 0x1eb0
+# E1 GOT entry = 0xffff8020 = -32736 ^
+# RAW: Contents of section .got:
+# RAW-NEXT: 401000 00000000 00000080
+
+# RAW: SYMBOL TABLE:
+# RAW: 00402000 l .data 00000004 L1
+# RAW: 00400130 g F .text 00000004 T1
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_CPIC, EF_MIPS_PIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [SHF_WRITE, SHF_ALLOC]
+ AddressAlign: 16
+ Size: 4
+
+ - Name: .gnu_extab
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .rel.gnu_extab
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .gnu_extab
+ Relocations:
+ - Offset: 1
+ Symbol: T1
+ Type: R_MIPS_EH
+ - Offset: 8
+ Symbol: L1
+ Type: R_MIPS_EH
+
+ - Name: .eh_frame_entry
+ Type: SHT_PROGBITS
+ Flags: [SHF_ALLOC]
+ AddressAlign: 4
+ Content: "0000000100000001"
+
+ - Name: .rel.eh_frame_entry
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .eh_frame_entry
+ Relocations:
+ - Offset: 0
+ Symbol: .text
+ Type: R_MIPS_PC32
+ - Offset: 4
+ Symbol: .gnu_extab
+ Type: R_MIPS_PC32
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .gnu_extab
+ Type: STT_SECTION
+ Section: .gnu_extab
+ - Name: L1
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0
+ Size: 4
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 8
+ - Name: T1
+...
diff --git a/test/old-elf/Mips/rel-got-hilo-01.test b/test/old-elf/Mips/rel-got-hilo-01.test
new file mode 100644
index 000000000000..c73d8765cbd5
--- /dev/null
+++ b/test/old-elf/Mips/rel-got-hilo-01.test
@@ -0,0 +1,109 @@
+# Check handling of R_MIPS_GOT_HI16 / R_MIPS_GOT_LO16 relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t1.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t2.so.o %t1.so
+# RUN: llvm-objdump -s -t %t2.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 0110 00000000 18800000 00000000 1c800000
+# ^ -32744 ^ -32740
+# RAW-NEXT: 0120 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 00000120 l F .text 00000004 T1
+
+# GOT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x120
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# t1.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 4
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+
+# t2.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 20
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_GOT_HI16
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_GOT_LO16
+ - Offset: 8
+ Symbol: T2
+ Type: R_MIPS_GOT_HI16
+ - Offset: 12
+ Symbol: T2
+ Type: R_MIPS_GOT_LO16
+
+Symbols:
+ Local:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 16
+ Size: 4
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ - Name: T2
+...
diff --git a/test/old-elf/Mips/rel-got-hilo-micro.test b/test/old-elf/Mips/rel-got-hilo-micro.test
new file mode 100644
index 000000000000..39dd1848f92e
--- /dev/null
+++ b/test/old-elf/Mips/rel-got-hilo-micro.test
@@ -0,0 +1,154 @@
+# Check handling of R_MICROMIPS_GOT_HI16 / R_MICROMIPS_GOT_LO16 relocations.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t1.so %t1.so.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.so.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t2.so %t2.so.o %t1.so
+# RUN: llvm-objdump -s -t %t2.so | FileCheck -check-prefix=RAW %s
+# RUN: llvm-readobj -mips-plt-got %t2.so | FileCheck -check-prefix=GOT %s
+
+# RAW: Contents of section .text:
+# RAW-NEXT: 0130 00000000 00001880 00000000 00002080
+# ^ -32744 ^ -32736
+# RAW-NEXT: 0140 00000000 00001c80 00000000 00002480
+# ^ -32740 ^ -32732
+# RAW-NEXT: 0150 00000000 00000000
+
+# RAW: SYMBOL TABLE:
+# RAW: 00000150 l F .text 00000004 T1
+# RAW: 00000154 l F .text 00000004 M1
+
+# GOT: Local entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1008
+# GOT-NEXT: Access: -32744
+# GOT-NEXT: Initial: 0x150
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x100C
+# GOT-NEXT: Access: -32740
+# GOT-NEXT: Initial: 0x155
+# GOT-NEXT: }
+# GOT-NEXT: ]
+# GOT-NEXT: Global entries [
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1010
+# GOT-NEXT: Access: -32736
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: T2@ (4)
+# GOT-NEXT: }
+# GOT-NEXT: Entry {
+# GOT-NEXT: Address: 0x1014
+# GOT-NEXT: Access: -32732
+# GOT-NEXT: Initial: 0x0
+# GOT-NEXT: Value: 0x0
+# GOT-NEXT: Type: Function (0x2)
+# GOT-NEXT: Section: Undefined (0x0)
+# GOT-NEXT: Name: M2@ (7)
+# GOT-NEXT: }
+# GOT-NEXT: ]
+
+# t1.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+Symbols:
+ Global:
+ - Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: M2
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+
+# t2.so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 40
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_GOT_HI16
+ - Offset: 4
+ Symbol: T1
+ Type: R_MICROMIPS_GOT_LO16
+ - Offset: 8
+ Symbol: T2
+ Type: R_MICROMIPS_GOT_HI16
+ - Offset: 12
+ Symbol: T2
+ Type: R_MICROMIPS_GOT_LO16
+ - Offset: 16
+ Symbol: M1
+ Type: R_MICROMIPS_GOT_HI16
+ - Offset: 20
+ Symbol: M1
+ Type: R_MICROMIPS_GOT_LO16
+ - Offset: 24
+ Symbol: M2
+ Type: R_MICROMIPS_GOT_HI16
+ - Offset: 28
+ Symbol: M2
+ Type: R_MICROMIPS_GOT_LO16
+
+Symbols:
+ Local:
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 32
+ Size: 4
+ - Name: M1
+ Section: .text
+ Type: STT_FUNC
+ Value: 36
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 32
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T2
+ - Name: M2
+...
diff --git a/test/old-elf/Mips/rel-gprel16-micro-overflow.test b/test/old-elf/Mips/rel-gprel16-micro-overflow.test
new file mode 100644
index 000000000000..7b023aecba41
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel16-micro-overflow.test
@@ -0,0 +1,57 @@
+# Check R_MICROMIPS_GPREL16 relocation overflow handling.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from +0 to L0+0 of type 136 (R_MICROMIPS_GPREL16)
+# CHECK: Relocation out of range in file {{.*}} reference from +4 to G0+0 of type 136 (R_MICROMIPS_GPREL16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Size: 8
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: L0
+ Type: R_MICROMIPS_GPREL16
+ - Offset: 4
+ Symbol: G0
+ Type: R_MICROMIPS_GPREL16
+
+Symbols:
+ Local:
+ - Name: L0
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: G0
+ Section: .text
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/rel-gprel16-micro.test b/test/old-elf/Mips/rel-gprel16-micro.test
new file mode 100644
index 000000000000..c0119a51e484
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel16-micro.test
@@ -0,0 +1,78 @@
+# Check R_MICROMIPS_GPREL16 relocation handling.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: L0
+# SYM-NEXT: Value: 0x104
+# SYM-NEXT: Size: 4
+
+# SYM: Name: G0
+# SYM-NEXT: Value: 0x108
+# SYM-NEXT: Size: 4
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x8FF0
+# SYM-NEXT: Size: 0
+
+# SEC: Contents of section .rodata:
+# SEC-NEXT: 010c 00001071 000017f1
+# ^ 0x104 (L0) + 0x10000 (GP0) - 0x8ff0 (_gp) - 4 = 0x7110
+# ^ 0x108 (G0) - 0x8ff0 (_gp) + 0x7fff = 0xf117
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: 0000fcff0000ff7f
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: L0
+ Type: R_MICROMIPS_GPREL16
+ - Offset: 4
+ Symbol: G0
+ Type: R_MICROMIPS_GPREL16
+
+- Type: SHT_MIPS_REGINFO
+ Name: .reginfo
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 1
+ Content: 000000000000000000000000000000000000000000000100
+
+Symbols:
+ Local:
+ - Name: L0
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: G0
+ Section: .text
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/rel-gprel16-overflow.test b/test/old-elf/Mips/rel-gprel16-overflow.test
new file mode 100644
index 000000000000..2943b5d200f4
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel16-overflow.test
@@ -0,0 +1,48 @@
+# Check R_MIPS_GPREL16 relocation overflow handling.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from +0 to T1+-32768 of type 7 (R_MIPS_GPREL16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 4
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: 00800000
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Type: SHT_REL
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_GPREL16
+
+Symbols:
+ Global:
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
diff --git a/test/old-elf/Mips/rel-gprel16.test b/test/old-elf/Mips/rel-gprel16.test
new file mode 100644
index 000000000000..d7e8a1a92598
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel16.test
@@ -0,0 +1,104 @@
+# Check R_MIPS_GPREL16 relocation handling.
+#
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -e G1 -shared -o %t.so %t-obj
+# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: L1
+# SYM-NEXT: Value: 0x104
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Local (0x0)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+
+# SYM: Name: G1
+# SYM-NEXT: Value: 0x108
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x5)
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x8FF0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Object (0x1)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Absolute (0xFFF1)
+
+# 0x6110 == 0xfffc (addend) + 0x0104 (L1) + 0xf000 (GP0) - 0x8ff0 (_gp)
+# SEC: Contents of section .rodata:
+# SEC-NEXT: 010c 10610008 00000000 00000000 00000000
+
+!ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+
+- Type: SHT_REL
+ Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: .rodata
+ Type: R_MIPS_GOT16
+ - Offset: 4
+ Symbol: .rodata
+ Type: R_MIPS_LO16
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x04
+ Content: fcff0008000000000000000000000000
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Type: SHT_REL
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: L1
+ Type: R_MIPS_GPREL16
+
+- Type: SHT_MIPS_REGINFO
+ Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x01
+ Content: 000000000000000000000000000000000000000000f00000
+
+Symbols:
+ Local:
+ - Name: L1
+ Section: .text
+ Value: 0x00
+ Size: 0x04
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: G1
+ Section: .text
+ Value: 0x04
+ Size: 0x04
diff --git a/test/old-elf/Mips/rel-gprel32-64.test b/test/old-elf/Mips/rel-gprel32-64.test
new file mode 100644
index 000000000000..15498a693e4d
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel32-64.test
@@ -0,0 +1,84 @@
+# Check R_MIPS_GPREL32/R_MIPS_64 relocations handling.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t.o
+# RUN: llvm-readobj -r %t.exe | FileCheck --check-prefix=REL-EXE %s
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+# RUN: llvm-nm %t.exe | FileCheck --check-prefix=SYM %s
+
+# REL-EXE: Relocations [
+# REL-EXE-NEXT: ]
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 1200001d0 f871ffff ffffffff f871ffff f871ffff
+# CHECK-NEXT: 1200001e0 f871ffff ffffffff 00000000 00000000
+
+# SYM: 00000001200001e8 t LT1
+# SYM: 0000000120001000 N _GLOBAL_OFFSET_TABLE_
+
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t.o
+# RUN: llvm-readobj -r %t.so | FileCheck --check-prefix=REL-SO %s
+
+# REL-SO: Relocations [
+# REL-SO-NEXT: ]
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 32
+
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 8
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: LT1
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_64
+ Type3: R_MIPS_NONE
+ - Offset: 0x08
+ Symbol: LT1
+ Type: R_MIPS_GPREL16
+ Type2: R_MIPS_64
+ Type3: R_MIPS_NONE
+ - Offset: 0x0C
+ Symbol: LT1
+ Type: R_MIPS_GPREL32
+ Type2: R_MIPS_64
+ Type3: R_MIPS_NONE
+ - Offset: 0x10
+ Symbol: LT1
+ Type: R_MIPS_GPREL32
+ Type2: R_MIPS_64
+ Type3: R_MIPS_NONE
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: LT1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x18
+ Size: 0x8
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 0x18
+...
diff --git a/test/old-elf/Mips/rel-gprel32.test b/test/old-elf/Mips/rel-gprel32.test
new file mode 100644
index 000000000000..14ec8cebcabd
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel32.test
@@ -0,0 +1,84 @@
+# Check R_MIPS_GPREL32 relocation handling.
+#
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -o %t-exe %t-obj
+# RUN: llvm-readobj -symbols %t-exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t-exe | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: $L1
+# SYM-NEXT: Value: 0x400160
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Local (0x0)
+# SYM-NEXT: Type: Function (0x2)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .text (0x6)
+#
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x408FF0
+# SYM-NEXT: Size: 0
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: Object (0x1)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: Absolute (0xFFF1)
+
+# 0x08ff7153 == 0x8000001 (addend) + 0x400140 ($L1) +
+# 0x1000002 (GP0) - 0x408FF0 (_gp)
+# SEC: Contents of section .rodata:
+# SEC-NEXT: 400170 7371ff08 00000000 00000000 00000000
+
+!ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: 00000000000000000000000000000000
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x04
+ Content: 01000008000000000000000000000000
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Type: SHT_REL
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0
+ Symbol: $L1
+ Type: R_MIPS_GPREL32
+
+- Type: SHT_MIPS_REGINFO
+ Name: .reginfo
+ Type: SHT_MIPS_REGINFO
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x01
+ Content: 000000000000000000000000000000000000000002000001
+
+Symbols:
+ Local:
+ - Name: $L1
+ Section: .text
+ Value: 0x00
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ Global:
+ - Name: __start
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x04
+ Size: 12
+ - Name: _gp_disp
diff --git a/test/old-elf/Mips/rel-gprel7-micro-overflow.test b/test/old-elf/Mips/rel-gprel7-micro-overflow.test
new file mode 100644
index 000000000000..5609786aa04a
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel7-micro-overflow.test
@@ -0,0 +1,48 @@
+# Check R_MICROMIPS_GPREL7_S2 relocation overflow handling.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from +0 to L0+-4 of type 172 (R_MICROMIPS_GPREL7_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 4
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: 7f000000
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: L0
+ Type: R_MICROMIPS_GPREL7_S2
+
+Symbols:
+ Local:
+ - Name: L0
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
diff --git a/test/old-elf/Mips/rel-gprel7-micro.test b/test/old-elf/Mips/rel-gprel7-micro.test
new file mode 100644
index 000000000000..b7790d9d169c
--- /dev/null
+++ b/test/old-elf/Mips/rel-gprel7-micro.test
@@ -0,0 +1,65 @@
+# Check R_MICROMIPS_GPREL7_S2 relocation handling.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-readobj -symbols %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=SEC %s
+
+# SYM: Name: L0
+# SYM-NEXT: Value: 0xF0
+# SYM-NEXT: Size: 4
+
+# SYM: Name: _gp
+# SYM-NEXT: Value: 0x8FF0
+# SYM-NEXT: Size: 0
+
+# SEC: Contents of section .rodata:
+# SEC-NEXT: 0f4 3b000000
+# ^ 0xf0 (L0) + 0x8ff0 (GP0) - 0x8ff0 (_gp) - 4 = 0xec >> 2
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+- Type: SHT_PROGBITS
+ Name: .text
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 4
+
+- Type: SHT_PROGBITS
+ Name: .rodata
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 4
+ Content: 7f000000
+
+- Type: SHT_REL
+ Name: .rel.rodata
+ Link: .symtab
+ Info: .rodata
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: L0
+ Type: R_MICROMIPS_GPREL7_S2
+
+- Type: SHT_MIPS_REGINFO
+ Name: .reginfo
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 1
+ Content: 0000000000000000000000000000000000000000f08f0000
+
+Symbols:
+ Local:
+ - Name: L0
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
diff --git a/test/old-elf/Mips/rel-hi0-lo16-micro.test b/test/old-elf/Mips/rel-hi0-lo16-micro.test
new file mode 100644
index 000000000000..82f62954b992
--- /dev/null
+++ b/test/old-elf/Mips/rel-hi0-lo16-micro.test
@@ -0,0 +1,58 @@
+# Check handling of R_MICROMIPS_HI0_LO16 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 00000420
+# ^ 0x402000 + 0x4 = 0x402004
+
+# CHECK: 00402000 g .data 00000004 D0
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "00000400"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: D0
+ Type: R_MICROMIPS_HI0_LO16
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_WRITE ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: D0
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-high-01.test b/test/old-elf/Mips/rel-high-01.test
new file mode 100644
index 000000000000..613fedbe31db
--- /dev/null
+++ b/test/old-elf/Mips/rel-high-01.test
@@ -0,0 +1,25 @@
+# REQUIRES: mips
+
+# Check handling R_MIPS_HIGHER / R_MIPS_HIGHEST relocations.
+
+# RUN: llvm-mc -arch=mips64el -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: T0:
+# CHECK-NEXT: 120000250: 01 00 62 64 daddiu $2, $3, 1
+# CHECK-NEXT: 120000254: 00 00 62 64 daddiu $2, $3, 0
+#
+# CHECK: T1:
+# CHECK-NEXT: 120000258: 00 00 00 00 nop
+
+ .text
+ .globl T0
+T0:
+ daddiu $2, $3, %higher(T1)
+ daddiu $2, $3, %highest(T1)
+
+ .globl T1
+T1:
+ nop
diff --git a/test/old-elf/Mips/rel-high-02.test b/test/old-elf/Mips/rel-high-02.test
new file mode 100644
index 000000000000..7a40a617a680
--- /dev/null
+++ b/test/old-elf/Mips/rel-high-02.test
@@ -0,0 +1,25 @@
+# REQUIRES: mips
+
+# Check handling R_MICROMIPS_HIGHER / R_MICROMIPS_HIGHEST relocations.
+
+# RUN: llvm-mc -arch=mips64el -filetype=obj -o=%t.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: Disassembly of section .text:
+# CHECK-NEXT: T0:
+# CHECK-NEXT: 120000250: 01 00 62 64 daddiu $2, $3, 1
+# CHECK-NEXT: 120000254: 00 00 62 64 daddiu $2, $3, 0
+#
+# CHECK: T1:
+# CHECK-NEXT: 120000258: 00 00 00 00 nop
+
+ .text
+ .globl T0
+T0:
+ daddiu $2, $3, %higher(T1+0x0000800100000000)
+ daddiu $2, $3, %highest(T1+0x4001000000000000)
+
+ .globl T1
+T1:
+ nop
diff --git a/test/old-elf/Mips/rel-jalr-01.test b/test/old-elf/Mips/rel-jalr-01.test
new file mode 100644
index 000000000000..3c519056e1a9
--- /dev/null
+++ b/test/old-elf/Mips/rel-jalr-01.test
@@ -0,0 +1,101 @@
+# REQUIRES: mips
+
+# Check handling of the R_MIPS_JALR relocation.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -o %t.exe %t2.o %t.so
+# RUN: llvm-objdump -d %t.exe | FileCheck %s
+
+# CHECK: __start:
+# CHECK-NEXT: {{[0-9a-f]+}}: 05 00 11 04 bal 24
+# CHECK-NEXT: {{[0-9a-f]+}}: 00 00 00 00 nop
+# CHECK-NEXT: {{[0-9a-f]+}}: 04 00 00 10 b 20
+# CHECK-NEXT: {{[0-9a-f]+}}: 00 00 00 00 nop
+# CHECK-NEXT: {{[0-9a-f]+}}: 09 f8 20 03 jalr $25
+# CHECK-NEXT: {{[0-9a-f]+}}: 00 00 00 00 nop
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "09f8200300000000080020030000000009f82003000000000000000000000000"
+# ^ jalr T1 ^ j T2 ^ jalr T3
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_JALR
+ - Offset: 8
+ Symbol: T2
+ Type: R_MIPS_JALR
+ - Offset: 16
+ Symbol: T3
+ Type: R_MIPS_JALR
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 0
+
+Symbols:
+ Local:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 24
+ Size: 4
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 24
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Value: 28
+ Size: 4
+ - Name: T3
+...
diff --git a/test/old-elf/Mips/rel-jalr-02.test b/test/old-elf/Mips/rel-jalr-02.test
new file mode 100644
index 000000000000..e9c74c4c3300
--- /dev/null
+++ b/test/old-elf/Mips/rel-jalr-02.test
@@ -0,0 +1,68 @@
+# REQUIRES: mips
+
+# Check R_MIPS_JALR relocations do not affect the code
+# in case of relocatable targets.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t.o
+# RUN: llvm-objdump -d %t.so | FileCheck %s
+
+# CHECK: __start:
+# CHECK-NEXT: {{[0-9a-f]+}}: 09 f8 20 03 jalr $25
+# CHECK-NEXT: {{[0-9a-f]+}}: 00 00 00 00 nop
+# CHECK-NEXT: {{[0-9a-f]+}}: 08 00 20 03 jr $25
+# CHECK-NEXT: {{[0-9a-f]+}}: 00 00 00 00 nop
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "09f820030000000008002003000000000000000000000000"
+# ^ jalr ^ jr ^ T1 ^ T2
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_JALR
+ - Offset: 8
+ Symbol: T2
+ Type: R_MIPS_JALR
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 0
+
+Symbols:
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 16
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 16
+ Size: 4
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Value: 20
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-lit-micro.test b/test/old-elf/Mips/rel-lit-micro.test
new file mode 100644
index 000000000000..783b24f83813
--- /dev/null
+++ b/test/old-elf/Mips/rel-lit-micro.test
@@ -0,0 +1,59 @@
+# Check handling of R_MICROMIPS_LITERAL relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 00000f10
+# ^ 0x402000 + 0x7fff - 0x408ff0 = 0x100f
+
+# CHECK: 00402000 g .data 00000004 D0
+# CHECK: 00408ff0 g *ABS* 00000000 _gp_disp
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32,
+ EF_MIPS_ARCH_32, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "0000ff7f"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: D0
+ Type: R_MICROMIPS_LITERAL
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_WRITE ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: D0
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-lit.test b/test/old-elf/Mips/rel-lit.test
new file mode 100644
index 000000000000..19aa68721691
--- /dev/null
+++ b/test/old-elf/Mips/rel-lit.test
@@ -0,0 +1,57 @@
+# Check handling of R_MIPS_LITERAL relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400130 0f100000
+# ^ 0x402000 + 0x7fff - 0x408ff0 = 0x100f
+
+# CHECK: 00402000 g .data 00000004 D0
+# CHECK: 00408ff0 g *ABS* 00000000 _gp_disp
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Content: "ff7f0000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: D0
+ Type: R_MIPS_LITERAL
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_WRITE ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ - Name: D0
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0
+ Size: 4
+...
diff --git a/test/old-elf/Mips/rel-pc-hilo.test b/test/old-elf/Mips/rel-pc-hilo.test
new file mode 100644
index 000000000000..6791926762b2
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc-hilo.test
@@ -0,0 +1,70 @@
+# Check handling of R_MIPS_PCHI16 / R_MIPS_PCLO16 relocations.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 01000000 02000000 03000000 00000000
+# ^
+# A = 0x10000 - 1 == 0xffff
+# V = (T1 + 0xffff - T0) >> 16 =>
+# V => 0x1000b >> 16 = 1
+# ^
+# A = 0x20000 - 1 == 0x1ffff
+# V = (T1 + 0x1ffff - T0 - 4) >> 16 =>
+# V => 0x20007 >> 16 = 2
+# ^
+# A = 0xffff == -1
+# V = T1 - 1 - T0 - 8 = 3
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9a-f]+}} g F .text 0000000c T0
+# CHECK: {{[0-9a-f]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0100000002000000ffff000000000000"
+# ^ T0
+# ^ A := 0x1 == 0x10000
+# ^ A := 0x2 == 0x20000
+# ^ A := 0xffff == -1
+# ^ T1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PCHI16
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PCHI16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_PCLO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 12
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 12
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc16-align.test b/test/old-elf/Mips/rel-pc16-align.test
new file mode 100644
index 000000000000..6366a4d67e92
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc16-align.test
@@ -0,0 +1,43 @@
+# Check incorrect alignment handling for R_MIPS_PC16 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation not aligned in file {{.*}} reference from T0+0 to T1+0 of type 10 (R_MIPS_PC16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 6
+ Size: 2
diff --git a/test/old-elf/Mips/rel-pc16-overflow.test b/test/old-elf/Mips/rel-pc16-overflow.test
new file mode 100644
index 000000000000..910482ee6154
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc16-overflow.test
@@ -0,0 +1,45 @@
+# Check R_MIPS_PC16 relocation overflow handling.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from T0+0 to T1+131068 of type 10 (R_MIPS_PC16)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ff7f00000000000000000000"
+# ^ T1
+# ^ T0 A := 0x7fff << 2 = 0x1fffc
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc16.test b/test/old-elf/Mips/rel-pc16.test
new file mode 100644
index 000000000000..f298afd81cd6
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc16.test
@@ -0,0 +1,53 @@
+# Check handling of R_MIPS_PC16 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} feff0000 00000000 00000000
+# ^ V
+# A = -16 =>
+# V = (T1 - 16 - T0) >> 2 = -2
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "fcff00000000000000000000"
+# ^ T1
+# ^ T0 A := 0xfffc << 2 = -16
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC16
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc18-s3-align.test b/test/old-elf/Mips/rel-pc18-s3-align.test
new file mode 100644
index 000000000000..ca2fa18ecaa0
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc18-s3-align.test
@@ -0,0 +1,44 @@
+# Check incorrect alignment handling for R_MIPS_PC18_S3 relocation target.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation not aligned in file {{.*}} reference from T1+0 to T1+0 of type 62 (R_MIPS_PC18_S3)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+# ^ T0 ^ T1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC18_S3
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 4
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc18-s3-micro.test b/test/old-elf/Mips/rel-pc18-s3-micro.test
new file mode 100644
index 000000000000..fc143a75e569
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc18-s3-micro.test
@@ -0,0 +1,56 @@
+# Check handling of R_MICROMIPS_PC18_S3 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000000 00000100 00000000 00000000
+# ^ V
+# A = -1 << 3 = -8 =>
+# V = (T1 - 8 - (T0|7)^7) >> 3 =>
+# V => 8 >> 3 = 1 (shuffled)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000010 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "000000000300ffff000000000000000000000000"
+# ^ T1
+# ^ T0 ^ A := 0x3ffff == -1 (shuffled)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: T1
+ Type: R_MICROMIPS_PC18_S3
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 16
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
diff --git a/test/old-elf/Mips/rel-pc18-s3.test b/test/old-elf/Mips/rel-pc18-s3.test
new file mode 100644
index 000000000000..d61427448d53
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc18-s3.test
@@ -0,0 +1,54 @@
+# Check handling of R_MIPS_PC18_S3 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000000 01000000 00000000 00000000
+# ^ V
+# A = -1 << 3 = -8 =>
+# V = (T1 - 8 - (T0|7)^7) >> 3 =>
+# V => 8 >> 3 = 1
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000010 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000ffff0300000000000000000000000000"
+# ^ T1
+# ^ T0 ^ A := 0x3ffff == -1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: T1
+ Type: R_MIPS_PC18_S3
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 16
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 16
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc19-s2-align.test b/test/old-elf/Mips/rel-pc19-s2-align.test
new file mode 100644
index 000000000000..19010a445578
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc19-s2-align.test
@@ -0,0 +1,44 @@
+# Check incorrect alignment handling for R_MIPS_PC19_S2 relocation target.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation not aligned in file {{.*}} reference from T0+0 to T1+0 of type 63 (R_MIPS_PC19_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+# ^ T0 ^ T1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC19_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 6
+ Size: 2
diff --git a/test/old-elf/Mips/rel-pc19-s2-micro.test b/test/old-elf/Mips/rel-pc19-s2-micro.test
new file mode 100644
index 000000000000..d9a930e41d88
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc19-s2-micro.test
@@ -0,0 +1,56 @@
+# Check handling of R_MICROMIPS_PC19_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000100 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1 (shuffled)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0700ffff0000000000000000"
+# ^ T1
+# ^ T0 A := 0x7ffff == -1 (shuffled)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_PC19_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
diff --git a/test/old-elf/Mips/rel-pc19-s2.test b/test/old-elf/Mips/rel-pc19-s2.test
new file mode 100644
index 000000000000..da21864a1214
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc19-s2.test
@@ -0,0 +1,54 @@
+# Check handling of R_MIPS_PC19_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 01000000 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ffff07000000000000000000"
+# ^ T1
+# ^ T0 A := 0x7ffff == -1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC19_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc21-s2-align.test b/test/old-elf/Mips/rel-pc21-s2-align.test
new file mode 100644
index 000000000000..a79e1e2a46e0
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc21-s2-align.test
@@ -0,0 +1,44 @@
+# Check incorrect alignment handling for R_MIPS_PC21_S2 relocation target.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation not aligned in file {{.*}} reference from T0+0 to T1+0 of type 60 (R_MIPS_PC21_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+# ^ T0 ^ T1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 6
+ Size: 2
diff --git a/test/old-elf/Mips/rel-pc21-s2-micro.test b/test/old-elf/Mips/rel-pc21-s2-micro.test
new file mode 100644
index 000000000000..4aa0a7de9489
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc21-s2-micro.test
@@ -0,0 +1,56 @@
+# Check handling of R_MICROMIPS_PC21_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000100 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1 (shuffled)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "1f00ffff0000000000000000"
+# ^ T1
+# ^ T0 A := 0x1fffff (shuffled)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_PC21_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
diff --git a/test/old-elf/Mips/rel-pc21-s2-overflow.test b/test/old-elf/Mips/rel-pc21-s2-overflow.test
new file mode 100644
index 000000000000..ad88e0c14b44
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc21-s2-overflow.test
@@ -0,0 +1,45 @@
+# Check R_MIPS_PC21_S2 relocation overflow handling.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation out of range in file {{.*}} reference from T0+0 to T1+4194300 of type 60 (R_MIPS_PC21_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ffff0f000000000000000000"
+# ^ T1
+# ^ T0 A := 0xfffff
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc21-s2.test b/test/old-elf/Mips/rel-pc21-s2.test
new file mode 100644
index 000000000000..c2b58c859af9
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc21-s2.test
@@ -0,0 +1,54 @@
+# Check handling of R_MIPS_PC21_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 01000000 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ffff1f000000000000000000"
+# ^ T1
+# ^ T0 A := 0x1fffff
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC21_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc26-s2-align.test b/test/old-elf/Mips/rel-pc26-s2-align.test
new file mode 100644
index 000000000000..23e660848365
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc26-s2-align.test
@@ -0,0 +1,44 @@
+# Check incorrect alignment handling for R_MIPS_PC26_S2 relocation target.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: Relocation not aligned in file {{.*}} reference from T0+0 to T1+0 of type 61 (R_MIPS_PC26_S2)
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "0000000000000000"
+# ^ T0 ^ T1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 4
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 6
+ Size: 2
diff --git a/test/old-elf/Mips/rel-pc26-s2-micro.test b/test/old-elf/Mips/rel-pc26-s2-micro.test
new file mode 100644
index 000000000000..193c328be687
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc26-s2-micro.test
@@ -0,0 +1,56 @@
+# Check handling of R_MICROMIPS_PC26_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000100 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1 (shuffled)
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ff03ffff0000000000000000"
+# ^ T1
+# ^ T0 A := 0x3ffffff == -1 (shuffled)
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MICROMIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ Other: [STO_MIPS_MICROMIPS]
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
+ Other: [STO_MIPS_MICROMIPS]
diff --git a/test/old-elf/Mips/rel-pc26-s2.test b/test/old-elf/Mips/rel-pc26-s2.test
new file mode 100644
index 000000000000..c500f00cb860
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc26-s2.test
@@ -0,0 +1,54 @@
+# Check handling of R_MIPS_PC26_S2 relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 01000000 00000000 00000000
+# ^ V
+# A = -1 << 2 = -4 =>
+# V = (T1 - 4 - T0) >> 2 =>
+# V => 4 >> 2 = 1
+
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g F .text 00000008 T0
+# CHECK: {{[0-9A-F]+}} g F .text 00000004 T1
+
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "ffffff030000000000000000"
+# ^ T1
+# ^ T0 A := 0x3ffffff == -1
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_PC26_S2
+
+Symbols:
+ Global:
+ - Name: T0
+ Section: .text
+ Type: STT_FUNC
+ Value: 0
+ Size: 8
+ - Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc32.test b/test/old-elf/Mips/rel-pc32.test
new file mode 100644
index 000000000000..9faa32efec7b
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc32.test
@@ -0,0 +1,59 @@
+# Check handling of R_MIPS_PC32 relocation.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000000 05000080 fdffff7f
+# ^^ data2 + 0x80000001 - data1
+# ^^ data1 + 0x80000001 - data2
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9A-F]+}} g .data 00000004 data1
+# CHECK: {{[0-9A-F]+}} g .data 00000004 data2
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "00000000"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "000000000100008001000080"
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rel.data
+ Type: SHT_REL
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x4
+ Symbol: data2
+ Type: R_MIPS_PC32
+ - Offset: 0x8
+ Symbol: data1
+ Type: R_MIPS_PC32
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0x0
+ Size: 4
+ - Name: data1
+ Section: .data
+ Value: 0x4
+ Size: 4
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 4
diff --git a/test/old-elf/Mips/rel-pc7-10-16-23.test b/test/old-elf/Mips/rel-pc7-10-16-23.test
new file mode 100644
index 000000000000..51c4c3a670f1
--- /dev/null
+++ b/test/old-elf/Mips/rel-pc7-10-16-23.test
@@ -0,0 +1,86 @@
+# Check handling of R_MICROMIPS_PC7_S1, R_MICROMIPS_PC10_S1,
+# R_MICROMIPS_PC16_S1, and R_MICROMIPS_PC23_S2 relocations.
+
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target mipsel -o %t-exe %t-obj
+# RUN: llvm-objdump -s -t %t-exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: {{[0-9A-F]+}} 00000000 80780500 a240fcff 000c03cc
+# ^^ addiu s1,$pc,20
+# ^^ bnezc v0,400114 <__start+0x4>
+# ^^ b 400126 <L1>
+# CHECK-NEXT: {{[0-9A-F]+}} 000c03ad 00000000 00000000 00000000
+# ^^ bnez v0,40012a <L2>
+# CHECK: SYMBOL TABLE:
+# CHECK: {{[0-9a-f]+}} l F .text 00000002 L0
+# CHECK: {{[0-9a-f]+}} l F .text 00000004 L1
+# CHECK: {{[0-9a-f]+}} l F .text 00000004 L2
+# CHECK: {{[0-9a-f]+}} l F .text 00000002 L3
+# CHECK: {{[0-9a-f]+}} g F .text 00000014 __start
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2,
+ EF_MIPS_MICROMIPS ]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+# v nop v nop v L0
+ Content: "0000000080780100a240f5ff000cfdcf000c7dad000000000000000000000000"
+# ^ PC23 ^ PC16 ^ PC10 ^ PC7 ^ L1 ^ L2 ^ L3
+# 7d << 1 = -6 => L3 + 2 - 6 = L2
+# 3fd << 1 = -6 => L2 + 2 - 6 = L1
+# fff5 << 1 = -22 => L1 + 2 - 22 = __start
+# 1 << 2 = 4 => L0 + 4 - 4 = L0
+ AddressAlign: 16
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+
+- Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 4
+ Symbol: L0
+ Type: R_MICROMIPS_PC23_S2
+ - Offset: 8
+ Symbol: L1
+ Type: R_MICROMIPS_PC16_S1
+ - Offset: 14
+ Symbol: L2
+ Type: R_MICROMIPS_PC10_S1
+ - Offset: 18
+ Symbol: L3
+ Type: R_MICROMIPS_PC7_S1
+
+Symbols:
+ Local:
+ - Name: L0
+ Section: .text
+ Value: 20
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: L1
+ Section: .text
+ Value: 22
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: L2
+ Section: .text
+ Value: 26
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: L3
+ Section: .text
+ Value: 30
+ Other: [ STO_MIPS_MICROMIPS ]
+ Global:
+ - Name: __start
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 32
+ Other: [ STO_MIPS_MICROMIPS ]
diff --git a/test/old-elf/Mips/rel-sub-micro.test b/test/old-elf/Mips/rel-sub-micro.test
new file mode 100644
index 000000000000..831a020ce2f9
--- /dev/null
+++ b/test/old-elf/Mips/rel-sub-micro.test
@@ -0,0 +1,62 @@
+# Check handling of R_MICROMIPS_SUB relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 120002000 0020cc01 01000000 0020d001 0100ffff
+# ^^ __start - 4 = 0x1200001cc
+# ^^ __start - 0x1000000000000
+# = 0xffff0001200001d0
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000001200001d0 g .rodata 00000008 __start
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64, EF_MIPS_MICROMIPS]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 8
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 16
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: __start
+ Type: R_MICROMIPS_SUB
+ Addend: 4
+ - Offset: 8
+ Symbol: __start
+ Type: R_MICROMIPS_SUB
+ Addend: 0x1000000000000
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0
+ Size: 8
+ - Name: D1
+ Section: .data
+ Value: 0
+ Size: 8
+ - Name: D2
+ Section: .data
+ Value: 8
+ Size: 8
diff --git a/test/old-elf/Mips/rel-sub.test b/test/old-elf/Mips/rel-sub.test
new file mode 100644
index 000000000000..5100406fd5d5
--- /dev/null
+++ b/test/old-elf/Mips/rel-sub.test
@@ -0,0 +1,61 @@
+# Check handling of R_MIPS_SUB relocation.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -o %t.exe %t.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .data:
+# CHECK-NEXT: 120002000 cf010020 01000000 d0010020 0100ffff ... ....... ....
+# ^^ __start - 1 = 0x1200001cf
+# ^^ __start - 0x1000000000000
+# = 0Xffff0001200001d0
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000001200001d0 g .rodata 00000008 __start
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Size: 0x08
+ AddressAlign: 16
+ Flags: [SHF_ALLOC]
+- Name: .data
+ Type: SHT_PROGBITS
+ Size: 0x10
+ AddressAlign: 16
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+- Name: .rela.data
+ Type: SHT_RELA
+ Info: .data
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0x0
+ Symbol: __start
+ Type: R_MIPS_SUB
+ Addend: 1
+ - Offset: 0x8
+ Symbol: __start
+ Type: R_MIPS_SUB
+ Addend: 0x1000000000000
+
+Symbols:
+ Global:
+ - Name: __start
+ Section: .text
+ Value: 0x0
+ Size: 8
+ - Name: data1
+ Section: .data
+ Value: 0x0
+ Size: 8
+ - Name: data2
+ Section: .data
+ Value: 0x8
+ Size: 8
diff --git a/test/old-elf/Mips/rld_map.test b/test/old-elf/Mips/rld_map.test
new file mode 100644
index 000000000000..ee063be1d7fc
--- /dev/null
+++ b/test/old-elf/Mips/rld_map.test
@@ -0,0 +1,42 @@
+# REQUIRES: mips
+
+# Check definition of DT_MIPS_RLD_MAP and DT_MIPS_RLD_MAP_REL dynamic tags,
+# .rld_map section, and __RLD_MAP symbol.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: lld -flavor old-gnu -target mips %t.o -o %t.exe
+# RUN: llvm-readobj -dynamic-table -s -st %t.exe \
+# RUN: | FileCheck -check-prefix=EXE-DYN %s
+
+# EXE-DYN: Name: .rld_map
+# EXE-DYN-NEXT: Type: SHT_PROGBITS
+# EXE-DYN-NEXT: Flags [
+# EXE-DYN-NEXT: SHF_ALLOC
+# EXE-DYN-NEXT: SHF_WRITE
+# EXE-DYN-NEXT: ]
+# EXE-DYN-NEXT: Address: 0x[[ADDR:[0-9A-F]+]]
+# EXE-DYN: Size: 4
+# EXE-DYN: AddressAlignment: 4
+# EXE-DYN: Symbols [
+# EXE-DYN-NEXT: Symbol {
+# EXE-DYN-NEXT: Name: __RLD_MAP
+# EXE-DYN-NEXT: Value: 0x[[ADDR]]
+# EXE-DYN-NEXT: Size: 4
+# EXE-DYN-NEXT: Binding: Global
+# EXE-DYN-NEXT: Type: Object
+#
+# EXE-DYN: 0x70000016 MIPS_RLD_MAP 0x[[ADDR]]
+# EXE-DYN: 0x70000035 MIPS_RLD_MAP_REL 0x1E48
+
+# RUN: lld -flavor old-gnu -target mips -static %t.o -o %t.exe
+# RUN: llvm-nm -just-symbol-name %t.exe | FileCheck -check-prefix=EXE-STATIC %s
+
+# EXE-STATIC-NOT: __RLD_MAP
+
+# RUN: lld -flavor old-gnu -target mips -shared %t.o -o %t.so
+# RUN: llvm-nm -just-symbol-name %t.so | FileCheck -check-prefix=DYNLIB %s
+
+# DYNLIB-NOT: __RLD_MAP
+
+ .globl __start;
+__start:
diff --git a/test/old-elf/Mips/sign-rela.test b/test/old-elf/Mips/sign-rela.test
new file mode 100644
index 000000000000..3e5341f2c230
--- /dev/null
+++ b/test/old-elf/Mips/sign-rela.test
@@ -0,0 +1,54 @@
+# Check that relocation addend read from RELA record is not sign-extended.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target mips64el -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: {{[0-9a-f]+}} 01000000 00000000 ........
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 0x20008
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0x20000
+ Symbol: __start
+ Type: R_MIPS_PC16
+ Addend: 0x20000
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 0
+
+Symbols:
+ Local:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Global:
+ - Name: __start
+ Type: STT_FUNC
+ Section: .text
+ Value: 4
+ Size: 0x20004
+...
diff --git a/test/old-elf/Mips/st-other.test b/test/old-elf/Mips/st-other.test
new file mode 100644
index 000000000000..2bb1f8b96e07
--- /dev/null
+++ b/test/old-elf/Mips/st-other.test
@@ -0,0 +1,90 @@
+# Check STO_MICROMIPS flag handling. microMIPS symbol records in a dynamic
+# symbol table should not have STO_MICROMIPS flag but their value field
+# must be odd. microMIPS symbol records in a regular symbol table should
+# have the STO_MICROMIPS flag.
+
+# RUN: yaml2obj -format=elf %s > %t-micro.o
+
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-micro.o
+# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck -check-prefix=SO %s
+
+# RUN: lld -flavor old-gnu -target mipsel -e S0 -o %t.exe %t-micro.o
+# RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=EXE-SYM %s
+# RUN: llvm-readobj -dyn-symbols %t.exe | FileCheck -check-prefix=EXE-DSYM %s
+
+# SO: Symbol {
+# SO: Name: S0@ (1)
+# SO-NEXT: Value: 0x{{[0-9A-F]+}}
+# SO-NEXT: Size: 4
+# SO-NEXT: Binding: Global (0x1)
+# SO-NEXT: Type: Function (0x2)
+# SO-NEXT: Other: 0
+# SO-NEXT: Section: .text (0x4)
+# SO-NEXT: }
+
+# SO: Symbol {
+# SO: Name: S1@ (4)
+# SO-NEXT: Value: 0x{{[0-9A-F]+}}
+# SO-NEXT: Size: 4
+# SO-NEXT: Binding: Global (0x1)
+# SO-NEXT: Type: Function (0x2)
+# SO-NEXT: Other: 0
+# SO-NEXT: Section: .text (0x4)
+# SO-NEXT: }
+
+# EXE-SYM: Symbol {
+# EXE-SYM: Name: S0 (1)
+# EXE-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# EXE-SYM-NEXT: Size: 4
+# EXE-SYM-NEXT: Binding: Global (0x1)
+# EXE-SYM-NEXT: Type: Function (0x2)
+# EXE-SYM-NEXT: Other: 0
+# EXE-SYM-NEXT: Section: .text (0x5)
+# EXE-SYM-NEXT: }
+
+# EXE-SYM: Symbol {
+# EXE-SYM: Name: S1 (4)
+# EXE-SYM-NEXT: Value: 0x{{[0-9A-F]+}}
+# EXE-SYM-NEXT: Size: 4
+# EXE-SYM-NEXT: Binding: Global (0x1)
+# EXE-SYM-NEXT: Type: Function (0x2)
+# EXE-SYM-NEXT: Other: 128
+# EXE-SYM-NEXT: Section: .text (0x5)
+# EXE-SYM-NEXT: }
+
+# EXE-DSYM-NOT: Name: S1 (4)
+
+# micro.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: S0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Value: 0x00
+ Visibility: STV_DEFAULT
+ Other: [ ]
+
+ - Name: S1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Value: 0x04
+ Visibility: STV_DEFAULT
+ Other: [ STO_MIPS_MICROMIPS ]
+...
diff --git a/test/old-elf/Mips/static-01.test b/test/old-elf/Mips/static-01.test
new file mode 100644
index 000000000000..77a33469df3f
--- /dev/null
+++ b/test/old-elf/Mips/static-01.test
@@ -0,0 +1,119 @@
+# Check handling relocations against _gp/__gnu_local_gp symbols
+# in case of "-static" linking.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -static -o %t.exe %t1.o %t2.o
+# RUN: llvm-nm %t.exe | FileCheck %s
+
+# CHECK: 00401000 N _GLOBAL_OFFSET_TABLE_
+# CHECK: 00408ff0 A __gnu_local_gp
+# CHECK: 00408ff0 A _gp
+# CHECK: 00408ff0 A _gp_disp
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 28
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: .data
+ Type: R_MIPS_HI16
+ - Offset: 4
+ Symbol: .data
+ Type: R_MIPS_LO16
+ - Offset: 8
+ Symbol: T1
+ Type: R_MIPS_26
+ - Offset: 12
+ Symbol: _gp
+ Type: R_MIPS_HI16
+ - Offset: 16
+ Symbol: _gp
+ Type: R_MIPS_LO16
+ - Offset: 20
+ Symbol: __gnu_local_gp
+ Type: R_MIPS_HI16
+ - Offset: 24
+ Symbol: __gnu_local_gp
+ Type: R_MIPS_LO16
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 4
+
+ - Name: .pdr
+ Type: SHT_PROGBITS
+ AddressAlign: 4
+ Size: 4
+
+ - Name: .rel.pdr
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .pdr
+ Relocations:
+ - Offset: 0
+ Symbol: T0
+ Type: R_MIPS_32
+
+Symbols:
+ Local:
+ - Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .data
+ - Type: STT_SECTION
+ Section: .pdr
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 28
+ - Name: T1
+ - Name: _gp
+ - Name: __gnu_local_gp
+
+# o2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 20
+...
diff --git a/test/old-elf/Mips/tls-1-micro.test b/test/old-elf/Mips/tls-1-micro.test
new file mode 100644
index 000000000000..f47592a5ab7d
--- /dev/null
+++ b/test/old-elf/Mips/tls-1-micro.test
@@ -0,0 +1,65 @@
+# Check handling of R_MICROMIPS_TLS_TPREL_HI16 / R_MICROMIPS_TLS_TPREL_LO16
+# relocations.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e L0 -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: {{[0-9A-F]+}} 00000000 00000100 00000380 00000480
+
+!ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Content: '00000100000002000000030000000400'
+ - Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: L1
+ Type: R_MICROMIPS_TLS_TPREL_HI16
+ - Offset: 0x04
+ Symbol: L2
+ Type: R_MICROMIPS_TLS_TPREL_HI16
+ - Offset: 0x08
+ Symbol: L2
+ Type: R_MICROMIPS_TLS_TPREL_LO16
+ - Offset: 0x0C
+ Symbol: L1
+ Type: R_MICROMIPS_TLS_TPREL_LO16
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Address: 0x1000
+ Size: 0x20000
+
+Symbols:
+ Global:
+ - Name: L0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x58
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: L1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x00
+ Size: 0x04
+ - Name: L2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x10000
+ Size: 0x04
diff --git a/test/old-elf/Mips/tls-1.test b/test/old-elf/Mips/tls-1.test
new file mode 100644
index 000000000000..c25a06c1dee9
--- /dev/null
+++ b/test/old-elf/Mips/tls-1.test
@@ -0,0 +1,63 @@
+# Check handling of R_MIPS_TLS_TPREL_HI16 / R_MIPS_TLS_TPREL_LO16 relocations.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e L0 -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK: {{[0-9A-F]+}} 00000000 01000000 03800000 04800000
+
+!ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Content: '01000000020000000300000004000000'
+ - Name: .rel.text
+ Type: SHT_REL
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: L1
+ Type: R_MIPS_TLS_TPREL_HI16
+ - Offset: 0x04
+ Symbol: L2
+ Type: R_MIPS_TLS_TPREL_HI16
+ - Offset: 0x08
+ Symbol: L2
+ Type: R_MIPS_TLS_TPREL_LO16
+ - Offset: 0x0C
+ Symbol: L1
+ Type: R_MIPS_TLS_TPREL_LO16
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Address: 0x1000
+ Size: 0x20000
+
+Symbols:
+ Global:
+ - Name: L0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x58
+ - Name: L1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x00
+ Size: 0x04
+ - Name: L2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x10000
+ Size: 0x04
diff --git a/test/old-elf/Mips/tls-2-64-static.test b/test/old-elf/Mips/tls-2-64-static.test
new file mode 100644
index 000000000000..c8c30ea06c60
--- /dev/null
+++ b/test/old-elf/Mips/tls-2-64-static.test
@@ -0,0 +1,71 @@
+# Check handling of R_MIPS_TLS_GD relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -static -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 120000120 20800000 30800000
+# ^ -32736 ^ -32720
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 120001000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 120002000 00000000 00000000 00000000 00000080
+# CHECK-NEXT: 120002010 01000000 00000000 0480ffff ffffffff
+# CHECK-NEXT: 120002020 01000000 00000000 0c80ffff ffffffff
+# D1 0x120001000 + 4 - (0x120001000 + 0x8000) = 0xffff8004 => 0480ffff
+# D2 0x120001040 + 8 - (0x120001000 + 0x8000) = 0xffff800c => 0c80ffff
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_TLS_GD
+ Addend: 4
+ - Offset: 4
+ Symbol: D2
+ Type: R_MIPS_TLS_GD
+ Addend: 8
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+...
diff --git a/test/old-elf/Mips/tls-2-64.test b/test/old-elf/Mips/tls-2-64.test
new file mode 100644
index 000000000000..3a6f6b3bedea
--- /dev/null
+++ b/test/old-elf/Mips/tls-2-64.test
@@ -0,0 +1,69 @@
+# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
+# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL64,
+# R_MIPS_TLS_DTPMOD64 and R_MIPS_TLS_DTPREL64 in case of shared library.
+
+# Create a shared library with thread symbol D1.
+# RUN: yaml2obj -format=elf -o %t-so.o %s
+# RUN: lld -flavor old-gnu -target mips64el -shared -o %t.so %t-so.o
+
+# Check dynamic relocations and GOT in the shared library.
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
+
+# REL: Section (4) .rel.dyn {
+# REL-NEXT: 0x2010 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE D1 0x0
+# REL-NEXT: 0x2018 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE D1 0x0
+# REL-NEXT: }
+
+# DYN: 0x000000007000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x0000000070000013 MIPS_GOTSYM 0x3
+
+# SYM: Name: T1@ (1)
+# SYM: Name: D1@ (4)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 2000 00000000 00000000 00000000 00000080 ................
+# GOT-NEXT: 2010 00000000 00000000 00000000 00000000 ................
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 4
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 4
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-2-micro.test b/test/old-elf/Mips/tls-2-micro.test
new file mode 100644
index 000000000000..88d8797cd06a
--- /dev/null
+++ b/test/old-elf/Mips/tls-2-micro.test
@@ -0,0 +1,70 @@
+# Check handling of R_MICROMIPS_TLS_GOTTPREL and R_MICROMIPS_TLS_GD relocations
+# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
+# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of shared library.
+
+# Create a shared library with thread symbol D1.
+# RUN: yaml2obj -format=elf -o %t-so.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Check dynamic relocations and GOT in the shared library.
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
+
+# REL: Section (4) .rel.dyn {
+# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 D1 0x0
+# REL-NEXT: 0x200C R_MIPS_TLS_DTPREL32 D1 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x3
+
+# SYM: Name: T1@ (1)
+# SYM: Name: D1@ (4)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MICROMIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/tls-2-static.test b/test/old-elf/Mips/tls-2-static.test
new file mode 100644
index 000000000000..3ac2122628d6
--- /dev/null
+++ b/test/old-elf/Mips/tls-2-static.test
@@ -0,0 +1,125 @@
+# Check handling of R_MIPS_TLS_GD relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -docnum 1 -o %t1.o %s
+# RUN: yaml2obj -format=elf -docnum 2 -o %t2.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -static -o %t.exe %t1.o %t2.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 4000b4 18800000 20800000 28800000 30800000
+# ^ -32744 ^ -32736 ^ -32728 ^ -32720
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 401000 00000000 00000000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 402000 00000000 00000080 01000000 0480ffff
+# CHECK-NEXT: 402010 01000000 0c80ffff 01000000 0c80ffff
+# CHECK-NEXT: 402020 01000000 1480ffff
+# D1 0x401000 + 4 - (0x401000 + 0x8000) = 0xffff8004 => 0480ffff
+# D2 0x401004 + 8 - (0x401000 + 0x8000) = 0xffff800c => 0c80ffff
+# D3 0x401008 + 4 - (0x401000 + 0x8000) = 0xffff800c => 0c80ffff
+# D4 0x40100c + 8 - (0x401000 + 0x8000) = 0xffff8014 => 1480ffff
+
+# t1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Content: "0400000008000000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_TLS_GD
+ - Offset: 4
+ Symbol: D2
+ Type: R_MIPS_TLS_GD
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+
+# t2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Content: "0400000008000000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D3
+ Type: R_MIPS_TLS_GD
+ - Offset: 4
+ Symbol: D4
+ Type: R_MIPS_TLS_GD
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+ - Name: D3
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: D4
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+...
diff --git a/test/old-elf/Mips/tls-2.test b/test/old-elf/Mips/tls-2.test
new file mode 100644
index 000000000000..de8fc2a70861
--- /dev/null
+++ b/test/old-elf/Mips/tls-2.test
@@ -0,0 +1,69 @@
+# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
+# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
+# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of shared library.
+
+# Create a shared library with thread symbol D1.
+# RUN: yaml2obj -format=elf -o %t-so.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Check dynamic relocations and GOT in the shared library.
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
+
+# REL: Section (4) .rel.dyn {
+# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 D1 0x0
+# REL-NEXT: 0x200C R_MIPS_TLS_DTPREL32 D1 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x3
+
+# SYM: Name: T1@ (1)
+# SYM: Name: D1@ (4)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/tls-3-64-static.test b/test/old-elf/Mips/tls-3-64-static.test
new file mode 100644
index 000000000000..2183d1fd6833
--- /dev/null
+++ b/test/old-elf/Mips/tls-3-64-static.test
@@ -0,0 +1,70 @@
+# Check handling of R_MIPS_TLS_GOTTPREL relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -static -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 120000120 20800000 28800000
+# ^ -32736 ^ -32728
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 120001000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 120002000 00000000 00000000 00000000 00000080
+# CHECK-NEXT: 120002010 0490ffff ffffffff 0c90ffff ffffffff
+# D1 0x120001000 + 4 - (0x120001000 + 0x7000) = 0xffff9004 => 0490ffff
+# D2 0x120001004 + 8 - (0x120001000 + 0x7000) = 0xffff900c => 0c90ffff
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_PIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_TLS_GOTTPREL
+ Addend: 4
+ - Offset: 4
+ Symbol: D2
+ Type: R_MIPS_TLS_GOTTPREL
+ Addend: 8
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-3-micro.test b/test/old-elf/Mips/tls-3-micro.test
new file mode 100644
index 000000000000..347332e6633e
--- /dev/null
+++ b/test/old-elf/Mips/tls-3-micro.test
@@ -0,0 +1,183 @@
+# Check handling of R_MICROMIPS_TLS_GOTTPREL and R_MICROMIPS_TLS_GD relocations
+# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
+# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of executable linking.
+
+# Create a shared library with thread symbol D1.
+# RUN: yaml2obj -format=elf -docnum 1 -o %t-so.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Create executable file linked using two object files and the shared library.
+# The object files defines thread symbols D0 and D2.
+# RUN: yaml2obj -format=elf -docnum 2 -o %t-o1.o %s
+# RUN: yaml2obj -format=elf -docnum 3 -o %t-o2.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o %t.so
+
+# Check dynamic relocations and GOT in the executable file.
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=GOT %s
+
+# REL: Section (5) .rel.dyn {
+# REL-NEXT: 0x402008 R_MIPS_TLS_TPREL32 D1 0x0
+# REL-NEXT: 0x40200C R_MIPS_TLS_TPREL32 D2 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x3
+
+# SYM: Name: D2@ (1)
+# SYM: Name: D1@ (4)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 402000 00000000 00000080 00000000 00000000 ................
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MICROMIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D2
+ Type: R_MICROMIPS_TLS_TPREL_HI16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MICROMIPS_TLS_TPREL_LO16
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+
+# o2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x10
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MICROMIPS_TLS_GOTTPREL
+ Addend: 0
+ - Offset: 0x04
+ Symbol: D0
+ Type: R_MICROMIPS_TLS_TPREL_HI16
+ Addend: 0
+ - Offset: 0x08
+ Symbol: D0
+ Type: R_MICROMIPS_TLS_TPREL_LO16
+ Addend: 0
+ - Offset: 0x0C
+ Symbol: D2
+ Type: R_MICROMIPS_TLS_GOTTPREL
+ Addend: 0
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: D0
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x10
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: D1
+ Type: STT_TLS
+ - Name: D2
+ Type: STT_TLS
+...
diff --git a/test/old-elf/Mips/tls-3-static.test b/test/old-elf/Mips/tls-3-static.test
new file mode 100644
index 000000000000..5d3a7b8bfd6a
--- /dev/null
+++ b/test/old-elf/Mips/tls-3-static.test
@@ -0,0 +1,67 @@
+# Check handling of R_MIPS_TLS_GOTTPREL relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -static -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 4000b4 18800000 1c800000
+# ^ -32744 ^ -32740
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 401000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 402000 00000000 00000080 0490ffff 0c90ffff
+# D1 0x401000 + 4 - (0x401000 + 0x7000) = 0xffff9004 => 0490ffff
+# D2 0x401004 + 8 - (0x401000 + 0x7000) = 0xffff900c => 0c90ffff
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Content: "0400000008000000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 4
+ Relocations:
+ - Offset: 0
+ Symbol: D1
+ Type: R_MIPS_TLS_GOTTPREL
+ - Offset: 4
+ Symbol: D2
+ Type: R_MIPS_TLS_GOTTPREL
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-3.test b/test/old-elf/Mips/tls-3.test
new file mode 100644
index 000000000000..eb9750fee28d
--- /dev/null
+++ b/test/old-elf/Mips/tls-3.test
@@ -0,0 +1,180 @@
+# Check handling of R_MIPS_TLS_GOTTPREL and R_MIPS_TLS_GD relocations
+# and generation of corresponding dynamic relocations R_MIPS_TLS_TPREL32,
+# R_MIPS_TLS_DTPMOD32 and R_MIPS_TLS_DTPREL32 in case of executable linking.
+
+# Create a shared library with thread symbol D1.
+# RUN: yaml2obj -format=elf -docnum 1 -o %t-so.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so.o
+
+# Create executable file linked using two object files and the shared library.
+# The object files defines thread symbols D0 and D2.
+# RUN: yaml2obj -format=elf -docnum 2 -o %t-o1.o %s
+# RUN: yaml2obj -format=elf -docnum 3 -o %t-o2.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o1.o %t-o2.o %t.so
+
+# Check dynamic relocations and GOT in the executable file.
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.exe | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.exe | FileCheck -check-prefix=GOT %s
+
+# REL: Section (5) .rel.dyn {
+# REL-NEXT: 0x402008 R_MIPS_TLS_TPREL32 D1 0x0
+# REL-NEXT: 0x40200C R_MIPS_TLS_TPREL32 D2 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x3
+
+# SYM: Name: D2@ (1)
+# SYM: Name: D1@ (4)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 402000 00000000 00000080 00000000 00000000 ................
+
+# so.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ - Name: D1
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+
+# o1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D2
+ Type: R_MIPS_TLS_TPREL_HI16
+ - Offset: 0x04
+ Symbol: D2
+ Type: R_MIPS_TLS_TPREL_LO16
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: D2
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+
+# o2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x10
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ Info: .text
+ AddressAlign: 0x04
+ Relocations:
+ - Offset: 0x00
+ Symbol: D1
+ Type: R_MIPS_TLS_GOTTPREL
+ Addend: 0
+ - Offset: 0x04
+ Symbol: D0
+ Type: R_MIPS_TLS_TPREL_HI16
+ Addend: 0
+ - Offset: 0x08
+ Symbol: D0
+ Type: R_MIPS_TLS_TPREL_LO16
+ Addend: 0
+ - Offset: 0x0C
+ Symbol: D2
+ Type: R_MIPS_TLS_GOTTPREL
+ Addend: 0
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: D0
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x10
+ - Name: D1
+ Type: STT_TLS
+ - Name: D2
+ Type: STT_TLS
+...
diff --git a/test/old-elf/Mips/tls-4-64-static.test b/test/old-elf/Mips/tls-4-64-static.test
new file mode 100644
index 000000000000..3aa37046d36b
--- /dev/null
+++ b/test/old-elf/Mips/tls-4-64-static.test
@@ -0,0 +1,71 @@
+# Check handling of R_MIPS_TLS_LDM relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -static -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 120000120 20800000 20800000
+# ^ -32736 ^ -32736
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 120001000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 120002000 00000000 00000000 00000000 00000080
+# CHECK-NEXT: 120002010 01000000 00000000 00000000 00000000
+# ^ R_MIPS_TLS_DTPMOD64
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: L1
+ Type: R_MIPS_TLS_LDM
+ Addend: 4
+ - Offset: 4
+ Symbol: L2
+ Type: R_MIPS_TLS_LDM
+ Addend: 8
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Local:
+ - Name: L1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: L2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-4-micro.test b/test/old-elf/Mips/tls-4-micro.test
new file mode 100644
index 000000000000..23d8e0a1de31
--- /dev/null
+++ b/test/old-elf/Mips/tls-4-micro.test
@@ -0,0 +1,126 @@
+# Check handling of R_MICROMIPS_TLS_LDM relocation and generation
+# of corresponding dynamic relocation R_MICROMIPS_TLS_DTPMOD32.
+
+# RUN: yaml2obj -format=elf -docnum 1 -o %t-so1.o %s
+# RUN: yaml2obj -format=elf -docnum 2 -o %t-so2.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so1.o %t-so2.o
+
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
+
+# REL: Section (4) .rel.dyn {
+# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 - 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x4
+
+# SYM: Name: @ (0)
+# SYM: Name: T1@ (1)
+# SYM: Name: T2@ (4)
+# SYM: Name: T3@ (7)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
+# Two LDM entries --^--------^
+
+# so1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: L01
+ Type: R_MICROMIPS_TLS_LDM
+ - Offset: 0x04
+ Symbol: L01
+ Type: R_MICROMIPS_TLS_LDM
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Local:
+ - Name: L01
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x00
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x04
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+
+# so2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: L02
+ Type: R_MICROMIPS_TLS_LDM
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Local:
+ - Name: L02
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ Global:
+ - Name: T3
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+...
diff --git a/test/old-elf/Mips/tls-4-static.test b/test/old-elf/Mips/tls-4-static.test
new file mode 100644
index 000000000000..5fdb11df874b
--- /dev/null
+++ b/test/old-elf/Mips/tls-4-static.test
@@ -0,0 +1,68 @@
+# Check handling of R_MIPS_TLS_LDM relocation in case of -static linking.
+
+# RUN: yaml2obj -format=elf -o %t.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -static -o %t.exe %t.o
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 4000b4 18800000 18800000
+# ^ -32744 ^ -32744
+# CHECK-NEXT: Contents of section .tdata:
+# CHECK-NEXT: 401000 00000000 00000000
+# CHECK-NEXT: Contents of section .got:
+# CHECK-NEXT: 402000 00000000 00000080 01000000 00000000
+# ^ R_MIPS_TLS_DTPMOD32
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Content: "0400000008000000"
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: L1
+ Type: R_MIPS_TLS_LDM
+ - Offset: 4
+ Symbol: L2
+ Type: R_MIPS_TLS_LDM
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Local:
+ - Name: L1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 4
+ - Name: L2
+ Type: STT_TLS
+ Section: .tdata
+ Value: 4
+ Size: 4
+
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-4.test b/test/old-elf/Mips/tls-4.test
new file mode 100644
index 000000000000..95df6d67151f
--- /dev/null
+++ b/test/old-elf/Mips/tls-4.test
@@ -0,0 +1,123 @@
+# Check handling of R_MIPS_TLS_LDM relocation and generation of corresponding
+# dynamic relocation R_MIPS_TLS_DTPMOD32.
+
+# RUN: yaml2obj -format=elf -docnum 1 -o %t-so1.o %s
+# RUN: yaml2obj -format=elf -docnum 2 -o %t-so2.o %s
+# RUN: lld -flavor old-gnu -target mipsel -shared -o %t.so %t-so1.o %t-so2.o
+
+# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck -check-prefix=DYN %s
+# RUN: llvm-readobj -dt %t.so | FileCheck -check-prefix=SYM %s
+# RUN: llvm-objdump -s %t.so | FileCheck -check-prefix=GOT %s
+
+# REL: Section (4) .rel.dyn {
+# REL-NEXT: 0x2008 R_MIPS_TLS_DTPMOD32 - 0x0
+# REL-NEXT: }
+
+# DYN: 0x7000000A MIPS_LOCAL_GOTNO 2
+# DYN: 0x70000013 MIPS_GOTSYM 0x4
+
+# SYM: Name: @ (0)
+# SYM: Name: T1@ (1)
+# SYM: Name: T2@ (4)
+# SYM: Name: T3@ (7)
+
+# GOT: Contents of section .got:
+# GOT-NEXT: 2000 00000000 00000080 00000000 00000000 ................
+# Two LDM entries --^--------^
+
+# so1.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: L01
+ Type: R_MIPS_TLS_LDM
+ - Offset: 0x04
+ Symbol: L01
+ Type: R_MIPS_TLS_LDM
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Local:
+ - Name: L01
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x00
+ Size: 0x04
+ - Name: T2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x04
+ Size: 0x04
+
+# so2.o
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: L02
+ Type: R_MIPS_TLS_LDM
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Local:
+ - Name: L02
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x04
+ Global:
+ - Name: T3
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/tls-5-64.test b/test/old-elf/Mips/tls-5-64.test
new file mode 100644
index 000000000000..43e6e6c1cf30
--- /dev/null
+++ b/test/old-elf/Mips/tls-5-64.test
@@ -0,0 +1,71 @@
+# Check that in case of an executable file linking symbol referred
+# by the R_MIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
+
+# RUN: yaml2obj -format=elf -o %t-o.o %s
+# RUN: lld -flavor old-gnu -target mips64el -e T0 -o %t.exe %t-o.o
+
+# Check dynamic relocations:
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+# Check dynamic symbol table:
+# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
+
+# REL: Relocations [
+# REL-NEXT: Section (5) .rel.dyn {
+# REL-NEXT: 0x120002010 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE T1 0x0
+# REL-NEXT: 0x120002018 R_MIPS_TLS_DTPREL64/R_MIPS_NONE/R_MIPS_NONE T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+# SYM: Symbol {
+# SYM: Name: T1@ (1)
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 8
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: TLS (0x6)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .tdata (0x7)
+# SYM-NEXT: }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ARCH_64]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_TLS_GD
+
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 4
+ Size: 8
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+ - Name: T1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0
+ Size: 8
+...
diff --git a/test/old-elf/Mips/tls-5-micro.test b/test/old-elf/Mips/tls-5-micro.test
new file mode 100644
index 000000000000..412456417826
--- /dev/null
+++ b/test/old-elf/Mips/tls-5-micro.test
@@ -0,0 +1,70 @@
+# Check that in case of an executable file linking symbol referred by
+# the R_MICROMIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
+
+# RUN: yaml2obj -format=elf -o %t-o.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o
+
+# Check dynamic relocations:
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+# Check dynamic symbol table:
+# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
+
+# REL: Relocations [
+# REL-NEXT: Section (5) .rel.dyn {
+# REL-NEXT: 0x402008 R_MIPS_TLS_DTPMOD32 T1 0x0
+# REL-NEXT: 0x40200C R_MIPS_TLS_DTPREL32 T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+# SYM: Symbol {
+# SYM: Name: T1@ (1)
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: TLS (0x6)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .tdata (0x7)
+# SYM-NEXT: }
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2, EF_MIPS_MICROMIPS ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MICROMIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ Other: [ STO_MIPS_MICROMIPS ]
+ - Name: T1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x00
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/tls-5.test b/test/old-elf/Mips/tls-5.test
new file mode 100644
index 000000000000..cb71e3ac5f9e
--- /dev/null
+++ b/test/old-elf/Mips/tls-5.test
@@ -0,0 +1,69 @@
+# Check that in case of an executable file linking symbol referred
+# by the R_MIPS_TLS_GD relocation gets an entry in the dynamic symbol table.
+
+# RUN: yaml2obj -format=elf -o %t-o.o %s
+# RUN: lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t-o.o
+
+# Check dynamic relocations:
+# RUN: llvm-readobj -r %t.exe | FileCheck -check-prefix=REL %s
+# Check dynamic symbol table:
+# RUN: llvm-readobj -dt %t.exe | FileCheck -check-prefix=SYM %s
+
+# REL: Relocations [
+# REL-NEXT: Section (5) .rel.dyn {
+# REL-NEXT: 0x402008 R_MIPS_TLS_DTPMOD32 T1 0x0
+# REL-NEXT: 0x40200C R_MIPS_TLS_DTPREL32 T1 0x0
+# REL-NEXT: }
+# REL-NEXT: ]
+
+# SYM: Symbol {
+# SYM: Name: T1@ (1)
+# SYM-NEXT: Value: 0x0
+# SYM-NEXT: Size: 4
+# SYM-NEXT: Binding: Global (0x1)
+# SYM-NEXT: Type: TLS (0x6)
+# SYM-NEXT: Other: 0
+# SYM-NEXT: Section: .tdata (0x7)
+# SYM-NEXT: }
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_NOREORDER, EF_MIPS_PIC, EF_MIPS_CPIC,
+ EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R2 ]
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Size: 0x04
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: T1
+ Type: R_MIPS_TLS_GD
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x04
+ - Name: T1
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x00
+ Size: 0x04
+...
diff --git a/test/old-elf/Mips/validate-rel-01.test b/test/old-elf/Mips/validate-rel-01.test
new file mode 100644
index 000000000000..0b8734c5429e
--- /dev/null
+++ b/test/old-elf/Mips/validate-rel-01.test
@@ -0,0 +1,82 @@
+# Check that the linker does not accept position-dependent relocations
+# in case of shared library linking.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t-hi.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t-hi.o 2>&1 \
+# RUN: | FileCheck -check-prefix=RHI %s
+
+# RHI: R_MIPS_HI16 (5) relocation cannot be used when making a shared object, recompile {{.*}}validate-rel-01.test.tmp-hi.o with -fPIC
+
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t-26.o
+# RUN: not lld -flavor old-gnu -target mipsel -shared -o %t.so %t-26.o 2>&1 \
+# RUN: | FileCheck -check-prefix=R26 %s
+
+# R26: R_MIPS_26 (4) relocation cannot be used when making a shared object, recompile {{.*}}validate-rel-01.test.tmp-26.o with -fPIC
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T0
+ Type: R_MIPS_HI16
+ - Offset: 0
+ Symbol: T0
+ Type: R_MIPS_LO16
+
+Symbols:
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 4
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 4
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: T1
+ Type: R_MIPS_26
+
+Symbols:
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 4
+...
diff --git a/test/old-elf/Mips/validate-rel-03.test b/test/old-elf/Mips/validate-rel-03.test
new file mode 100644
index 000000000000..baf8516c63b0
--- /dev/null
+++ b/test/old-elf/Mips/validate-rel-03.test
@@ -0,0 +1,56 @@
+# Check that the linker does not accept R_MIPS_CALL16 relocation
+# against local symbol.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.o
+# RUN: not lld -flavor old-gnu -target mipsel -e T0 -o %t.exe %t.o 2>&1 \
+# RUN: | FileCheck %s
+
+# CHECK: R_MIPS_CALL16 (11) relocation cannot be used against local symbol L0 in file {{.*}}validate-rel-03.test.tmp.o
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 16
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 8
+ Symbol: T0
+ Type: R_MIPS_CALL16
+ - Offset: 4
+ Symbol: L0
+ Type: R_MIPS_CALL16
+
+Symbols:
+ Local:
+ - Name: L0
+ Type: STT_FUNC
+ Section: .text
+ Value: 0
+ Size: 4
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Value: 4
+ Size: 4
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Value: 8
+ Size: 8
+...
diff --git a/test/old-elf/X86_64/ExampleTarget/triple.test b/test/old-elf/X86_64/ExampleTarget/triple.test
new file mode 100644
index 000000000000..aec09eae3a30
--- /dev/null
+++ b/test/old-elf/X86_64/ExampleTarget/triple.test
@@ -0,0 +1,32 @@
+# Check that the Example Target is actually used.
+
+# RUN: yaml2obj -format=elf %s -o %t.o
+# RUN: lld -flavor old-gnu -target x86_64-example-freebsd9 %t.o -o %t.exe
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
+#
+# CHECK: Type: 0xFF00
+
+# object
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000000
diff --git a/test/elf/X86_64/Inputs/constint.c b/test/old-elf/X86_64/Inputs/constint.c
index 9fc0ebcf6591..9fc0ebcf6591 100644
--- a/test/elf/X86_64/Inputs/constint.c
+++ b/test/old-elf/X86_64/Inputs/constint.c
diff --git a/test/elf/X86_64/Inputs/constint.o b/test/old-elf/X86_64/Inputs/constint.o
index 8324b73014d0..8324b73014d0 100644
--- a/test/elf/X86_64/Inputs/constint.o
+++ b/test/old-elf/X86_64/Inputs/constint.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/debug0.c b/test/old-elf/X86_64/Inputs/debug0.c
index 1ebe50087383..1ebe50087383 100644
--- a/test/elf/X86_64/Inputs/debug0.c
+++ b/test/old-elf/X86_64/Inputs/debug0.c
diff --git a/test/elf/X86_64/Inputs/debug0.x86-64 b/test/old-elf/X86_64/Inputs/debug0.x86-64
index 914f5224b9a2..914f5224b9a2 100644
--- a/test/elf/X86_64/Inputs/debug0.x86-64
+++ b/test/old-elf/X86_64/Inputs/debug0.x86-64
Binary files differ
diff --git a/test/elf/X86_64/Inputs/debug1.c b/test/old-elf/X86_64/Inputs/debug1.c
index 281b8a361dbb..281b8a361dbb 100644
--- a/test/elf/X86_64/Inputs/debug1.c
+++ b/test/old-elf/X86_64/Inputs/debug1.c
diff --git a/test/elf/X86_64/Inputs/debug1.x86-64 b/test/old-elf/X86_64/Inputs/debug1.x86-64
index bfc81458a034..bfc81458a034 100644
--- a/test/elf/X86_64/Inputs/debug1.x86-64
+++ b/test/old-elf/X86_64/Inputs/debug1.x86-64
Binary files differ
diff --git a/test/elf/X86_64/Inputs/externtls.c b/test/old-elf/X86_64/Inputs/externtls.c
index 499a645a9217..499a645a9217 100644
--- a/test/elf/X86_64/Inputs/externtls.c
+++ b/test/old-elf/X86_64/Inputs/externtls.c
diff --git a/test/elf/X86_64/Inputs/externtls.x86-64 b/test/old-elf/X86_64/Inputs/externtls.x86-64
index 3019aa0ca27c..3019aa0ca27c 100644
--- a/test/elf/X86_64/Inputs/externtls.x86-64
+++ b/test/old-elf/X86_64/Inputs/externtls.x86-64
Binary files differ
diff --git a/test/elf/X86_64/Inputs/fn.c b/test/old-elf/X86_64/Inputs/fn.c
index 54939a2426b2..54939a2426b2 100644
--- a/test/elf/X86_64/Inputs/fn.c
+++ b/test/old-elf/X86_64/Inputs/fn.c
diff --git a/test/elf/X86_64/Inputs/fn.o b/test/old-elf/X86_64/Inputs/fn.o
index 4b67d459dfdb..4b67d459dfdb 100644
--- a/test/elf/X86_64/Inputs/fn.o
+++ b/test/old-elf/X86_64/Inputs/fn.o
Binary files differ
diff --git a/test/old-elf/X86_64/Inputs/generaltls-so.o.yaml b/test/old-elf/X86_64/Inputs/generaltls-so.o.yaml
new file mode 100644
index 000000000000..53a7fb6435e9
--- /dev/null
+++ b/test/old-elf/X86_64/Inputs/generaltls-so.o.yaml
@@ -0,0 +1,67 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E566488D3D00000000666648E8000000008B005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: mynumber
+ Type: R_X86_64_TLSGD
+ Addend: -4
+ - Offset: 0x0000000000000010
+ Symbol: __tls_get_addr
+ Type: R_X86_64_PLT32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: '21000000'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .tdata
+ Type: STT_SECTION
+ Section: .tdata
+ Global:
+ - Name: getnumber
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000018
+ - Name: mynumber
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: _GLOBAL_OFFSET_TABLE_
+ - Name: __tls_get_addr
+...
diff --git a/test/elf/X86_64/Inputs/group/1.c b/test/old-elf/X86_64/Inputs/group/1.c
index f5e618bc4a85..f5e618bc4a85 100644
--- a/test/elf/X86_64/Inputs/group/1.c
+++ b/test/old-elf/X86_64/Inputs/group/1.c
diff --git a/test/elf/X86_64/Inputs/group/1.o b/test/old-elf/X86_64/Inputs/group/1.o
index 743518eb0fa3..743518eb0fa3 100644
--- a/test/elf/X86_64/Inputs/group/1.o
+++ b/test/old-elf/X86_64/Inputs/group/1.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/fn.c b/test/old-elf/X86_64/Inputs/group/fn.c
index e443c73a1ee0..e443c73a1ee0 100644
--- a/test/elf/X86_64/Inputs/group/fn.c
+++ b/test/old-elf/X86_64/Inputs/group/fn.c
diff --git a/test/elf/X86_64/Inputs/group/fn.o b/test/old-elf/X86_64/Inputs/group/fn.o
index 1134432449cd..1134432449cd 100644
--- a/test/elf/X86_64/Inputs/group/fn.o
+++ b/test/old-elf/X86_64/Inputs/group/fn.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/fn1.c b/test/old-elf/X86_64/Inputs/group/fn1.c
index cca0df7fd277..cca0df7fd277 100644
--- a/test/elf/X86_64/Inputs/group/fn1.c
+++ b/test/old-elf/X86_64/Inputs/group/fn1.c
diff --git a/test/elf/X86_64/Inputs/group/fn1.o b/test/old-elf/X86_64/Inputs/group/fn1.o
index 2b02310003db..2b02310003db 100644
--- a/test/elf/X86_64/Inputs/group/fn1.o
+++ b/test/old-elf/X86_64/Inputs/group/fn1.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/fn2.c b/test/old-elf/X86_64/Inputs/group/fn2.c
index a60370ed1e6b..a60370ed1e6b 100644
--- a/test/elf/X86_64/Inputs/group/fn2.c
+++ b/test/old-elf/X86_64/Inputs/group/fn2.c
diff --git a/test/elf/X86_64/Inputs/group/fn2.o b/test/old-elf/X86_64/Inputs/group/fn2.o
index fabec849a775..fabec849a775 100644
--- a/test/elf/X86_64/Inputs/group/fn2.o
+++ b/test/old-elf/X86_64/Inputs/group/fn2.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/group.sh b/test/old-elf/X86_64/Inputs/group/group.sh
index 2eba1030160b..2eba1030160b 100755
--- a/test/elf/X86_64/Inputs/group/group.sh
+++ b/test/old-elf/X86_64/Inputs/group/group.sh
diff --git a/test/elf/X86_64/Inputs/group/libfn.a b/test/old-elf/X86_64/Inputs/group/libfn.a
index c157c3babed9..c157c3babed9 100644
--- a/test/elf/X86_64/Inputs/group/libfn.a
+++ b/test/old-elf/X86_64/Inputs/group/libfn.a
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/libfn.so b/test/old-elf/X86_64/Inputs/group/libfn.so
index fcbd11fe5519..fcbd11fe5519 100755
--- a/test/elf/X86_64/Inputs/group/libfn.so
+++ b/test/old-elf/X86_64/Inputs/group/libfn.so
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/libfn1.a b/test/old-elf/X86_64/Inputs/group/libfn1.a
index 69b9c75b5d16..69b9c75b5d16 100644
--- a/test/elf/X86_64/Inputs/group/libfn1.a
+++ b/test/old-elf/X86_64/Inputs/group/libfn1.a
Binary files differ
diff --git a/test/elf/X86_64/Inputs/group/libfn2.so b/test/old-elf/X86_64/Inputs/group/libfn2.so
index 7ce867373910..7ce867373910 100755
--- a/test/elf/X86_64/Inputs/group/libfn2.so
+++ b/test/old-elf/X86_64/Inputs/group/libfn2.so
Binary files differ
diff --git a/test/elf/X86_64/Inputs/initfini-option.c b/test/old-elf/X86_64/Inputs/initfini-option.c
index e9a6c08c12ac..e9a6c08c12ac 100644
--- a/test/elf/X86_64/Inputs/initfini-option.c
+++ b/test/old-elf/X86_64/Inputs/initfini-option.c
diff --git a/test/elf/X86_64/Inputs/initfini-option.o b/test/old-elf/X86_64/Inputs/initfini-option.o
index b1ba0557353c..b1ba0557353c 100644
--- a/test/elf/X86_64/Inputs/initfini-option.o
+++ b/test/old-elf/X86_64/Inputs/initfini-option.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/initfini.c b/test/old-elf/X86_64/Inputs/initfini.c
index 9427a86b6c9b..9427a86b6c9b 100644
--- a/test/elf/X86_64/Inputs/initfini.c
+++ b/test/old-elf/X86_64/Inputs/initfini.c
diff --git a/test/elf/X86_64/Inputs/initfini.o b/test/old-elf/X86_64/Inputs/initfini.o
index f0e55a90b8b6..f0e55a90b8b6 100644
--- a/test/elf/X86_64/Inputs/initfini.o
+++ b/test/old-elf/X86_64/Inputs/initfini.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/largebss.c b/test/old-elf/X86_64/Inputs/largebss.c
index 157d01755b6a..157d01755b6a 100644
--- a/test/elf/X86_64/Inputs/largebss.c
+++ b/test/old-elf/X86_64/Inputs/largebss.c
diff --git a/test/elf/X86_64/Inputs/largebss.o b/test/old-elf/X86_64/Inputs/largebss.o
index 377370ec2db2..377370ec2db2 100644
--- a/test/elf/X86_64/Inputs/largebss.o
+++ b/test/old-elf/X86_64/Inputs/largebss.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/layoutpass/1.c b/test/old-elf/X86_64/Inputs/layoutpass/1.c
index fec984503214..fec984503214 100644
--- a/test/elf/X86_64/Inputs/layoutpass/1.c
+++ b/test/old-elf/X86_64/Inputs/layoutpass/1.c
diff --git a/test/elf/X86_64/Inputs/layoutpass/1.o b/test/old-elf/X86_64/Inputs/layoutpass/1.o
index 848a5b3321ac..848a5b3321ac 100644
--- a/test/elf/X86_64/Inputs/layoutpass/1.o
+++ b/test/old-elf/X86_64/Inputs/layoutpass/1.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/layoutpass/2.c b/test/old-elf/X86_64/Inputs/layoutpass/2.c
index fb9dbcc28aa6..fb9dbcc28aa6 100644
--- a/test/elf/X86_64/Inputs/layoutpass/2.c
+++ b/test/old-elf/X86_64/Inputs/layoutpass/2.c
diff --git a/test/elf/X86_64/Inputs/layoutpass/2.o b/test/old-elf/X86_64/Inputs/layoutpass/2.o
index 4c5ef8679581..4c5ef8679581 100644
--- a/test/elf/X86_64/Inputs/layoutpass/2.o
+++ b/test/old-elf/X86_64/Inputs/layoutpass/2.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/layoutpass/3.c b/test/old-elf/X86_64/Inputs/layoutpass/3.c
index 054029fe5cfe..054029fe5cfe 100644
--- a/test/elf/X86_64/Inputs/layoutpass/3.c
+++ b/test/old-elf/X86_64/Inputs/layoutpass/3.c
diff --git a/test/elf/X86_64/Inputs/layoutpass/3.o b/test/old-elf/X86_64/Inputs/layoutpass/3.o
index 76ef76e97901..76ef76e97901 100644
--- a/test/elf/X86_64/Inputs/layoutpass/3.o
+++ b/test/old-elf/X86_64/Inputs/layoutpass/3.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/layoutpass/lib2.a b/test/old-elf/X86_64/Inputs/layoutpass/lib2.a
index 5f076c869817..5f076c869817 100644
--- a/test/elf/X86_64/Inputs/layoutpass/lib2.a
+++ b/test/old-elf/X86_64/Inputs/layoutpass/lib2.a
Binary files differ
diff --git a/test/elf/X86_64/Inputs/libfn.a b/test/old-elf/X86_64/Inputs/libfn.a
index 380844b0838d..380844b0838d 100644
--- a/test/elf/X86_64/Inputs/libfn.a
+++ b/test/old-elf/X86_64/Inputs/libfn.a
Binary files differ
diff --git a/test/elf/X86_64/Inputs/libfn.so b/test/old-elf/X86_64/Inputs/libfn.so
index dc02480aa690..dc02480aa690 100755
--- a/test/elf/X86_64/Inputs/libfn.so
+++ b/test/old-elf/X86_64/Inputs/libfn.so
Binary files differ
diff --git a/test/elf/X86_64/Inputs/main.c b/test/old-elf/X86_64/Inputs/main.c
index 0280c9127076..0280c9127076 100644
--- a/test/elf/X86_64/Inputs/main.c
+++ b/test/old-elf/X86_64/Inputs/main.c
diff --git a/test/elf/X86_64/Inputs/main.o b/test/old-elf/X86_64/Inputs/main.o
index ec8929f4b51d..ec8929f4b51d 100644
--- a/test/elf/X86_64/Inputs/main.o
+++ b/test/old-elf/X86_64/Inputs/main.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/multi-ovrd.c b/test/old-elf/X86_64/Inputs/multi-ovrd.c
index cf6c0b6ac361..cf6c0b6ac361 100644
--- a/test/elf/X86_64/Inputs/multi-ovrd.c
+++ b/test/old-elf/X86_64/Inputs/multi-ovrd.c
diff --git a/test/elf/X86_64/Inputs/multi-ovrd.o b/test/old-elf/X86_64/Inputs/multi-ovrd.o
index e4c4d6037fdd..e4c4d6037fdd 100644
--- a/test/elf/X86_64/Inputs/multi-ovrd.o
+++ b/test/old-elf/X86_64/Inputs/multi-ovrd.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/multi-weak.c b/test/old-elf/X86_64/Inputs/multi-weak.c
index 10b9160352d9..10b9160352d9 100644
--- a/test/elf/X86_64/Inputs/multi-weak.c
+++ b/test/old-elf/X86_64/Inputs/multi-weak.c
diff --git a/test/elf/X86_64/Inputs/multi-weak.o b/test/old-elf/X86_64/Inputs/multi-weak.o
index d5677b699ac4..d5677b699ac4 100644
--- a/test/elf/X86_64/Inputs/multi-weak.o
+++ b/test/old-elf/X86_64/Inputs/multi-weak.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/multiweaksyms.o b/test/old-elf/X86_64/Inputs/multiweaksyms.o
index 5e2e54d66b0d..5e2e54d66b0d 100644
--- a/test/elf/X86_64/Inputs/multiweaksyms.o
+++ b/test/old-elf/X86_64/Inputs/multiweaksyms.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/nmagic.c b/test/old-elf/X86_64/Inputs/nmagic.c
index 3ad15f0c4971..3ad15f0c4971 100644
--- a/test/elf/X86_64/Inputs/nmagic.c
+++ b/test/old-elf/X86_64/Inputs/nmagic.c
diff --git a/test/elf/X86_64/Inputs/nmagic.o b/test/old-elf/X86_64/Inputs/nmagic.o
index af28e0ada8b3..af28e0ada8b3 100644
--- a/test/elf/X86_64/Inputs/nmagic.o
+++ b/test/old-elf/X86_64/Inputs/nmagic.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/no-interp-section.c b/test/old-elf/X86_64/Inputs/no-interp-section.c
index 3981c038ed33..3981c038ed33 100644
--- a/test/elf/X86_64/Inputs/no-interp-section.c
+++ b/test/old-elf/X86_64/Inputs/no-interp-section.c
diff --git a/test/elf/X86_64/Inputs/no-interp-section.o b/test/old-elf/X86_64/Inputs/no-interp-section.o
index 063eb3244f22..063eb3244f22 100644
--- a/test/elf/X86_64/Inputs/no-interp-section.o
+++ b/test/old-elf/X86_64/Inputs/no-interp-section.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/note.o b/test/old-elf/X86_64/Inputs/note.o
index d86b0cf85d19..d86b0cf85d19 100644
--- a/test/elf/X86_64/Inputs/note.o
+++ b/test/old-elf/X86_64/Inputs/note.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/note.s b/test/old-elf/X86_64/Inputs/note.s
index 0a0b03da6bb7..0a0b03da6bb7 100644
--- a/test/elf/X86_64/Inputs/note.s
+++ b/test/old-elf/X86_64/Inputs/note.s
diff --git a/test/elf/X86_64/Inputs/note_ro_rw.o b/test/old-elf/X86_64/Inputs/note_ro_rw.o
index 76f2486d2736..76f2486d2736 100644
--- a/test/elf/X86_64/Inputs/note_ro_rw.o
+++ b/test/old-elf/X86_64/Inputs/note_ro_rw.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/note_ro_rw.s b/test/old-elf/X86_64/Inputs/note_ro_rw.s
index 2a0eff5dfb2b..2a0eff5dfb2b 100644
--- a/test/elf/X86_64/Inputs/note_ro_rw.s
+++ b/test/old-elf/X86_64/Inputs/note_ro_rw.s
diff --git a/test/elf/X86_64/Inputs/ovrd.c b/test/old-elf/X86_64/Inputs/ovrd.c
index a3d721dac2aa..a3d721dac2aa 100644
--- a/test/elf/X86_64/Inputs/ovrd.c
+++ b/test/old-elf/X86_64/Inputs/ovrd.c
diff --git a/test/elf/X86_64/Inputs/ovrd.o b/test/old-elf/X86_64/Inputs/ovrd.o
index ea7353d94ed9..ea7353d94ed9 100644
--- a/test/elf/X86_64/Inputs/ovrd.o
+++ b/test/old-elf/X86_64/Inputs/ovrd.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/rodata.c b/test/old-elf/X86_64/Inputs/rodata.c
index 01489fe550c8..01489fe550c8 100644
--- a/test/elf/X86_64/Inputs/rodata.c
+++ b/test/old-elf/X86_64/Inputs/rodata.c
diff --git a/test/elf/X86_64/Inputs/rodata.o b/test/old-elf/X86_64/Inputs/rodata.o
index 660606cdc9c0..660606cdc9c0 100644
--- a/test/elf/X86_64/Inputs/rodata.o
+++ b/test/old-elf/X86_64/Inputs/rodata.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/rodata.s b/test/old-elf/X86_64/Inputs/rodata.s
index e1a2eb702736..e1a2eb702736 100644
--- a/test/elf/X86_64/Inputs/rodata.s
+++ b/test/old-elf/X86_64/Inputs/rodata.s
diff --git a/test/elf/X86_64/Inputs/rwint.c b/test/old-elf/X86_64/Inputs/rwint.c
index d1cf7d62c801..d1cf7d62c801 100644
--- a/test/elf/X86_64/Inputs/rwint.c
+++ b/test/old-elf/X86_64/Inputs/rwint.c
diff --git a/test/elf/X86_64/Inputs/rwint.o b/test/old-elf/X86_64/Inputs/rwint.o
index 9fba51f07add..9fba51f07add 100644
--- a/test/elf/X86_64/Inputs/rwint.o
+++ b/test/old-elf/X86_64/Inputs/rwint.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/sectionmap.c b/test/old-elf/X86_64/Inputs/sectionmap.c
index c4f530148949..c4f530148949 100644
--- a/test/elf/X86_64/Inputs/sectionmap.c
+++ b/test/old-elf/X86_64/Inputs/sectionmap.c
diff --git a/test/elf/X86_64/Inputs/sectionmap.o b/test/old-elf/X86_64/Inputs/sectionmap.o
index 599cf2cca563..599cf2cca563 100644
--- a/test/elf/X86_64/Inputs/sectionmap.o
+++ b/test/old-elf/X86_64/Inputs/sectionmap.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/undefcpp.c b/test/old-elf/X86_64/Inputs/undefcpp.c
index ce84c2a592b6..ce84c2a592b6 100644
--- a/test/elf/X86_64/Inputs/undefcpp.c
+++ b/test/old-elf/X86_64/Inputs/undefcpp.c
diff --git a/test/elf/X86_64/Inputs/undefcpp.o b/test/old-elf/X86_64/Inputs/undefcpp.o
index 6b8ebf5b6ab0..6b8ebf5b6ab0 100644
--- a/test/elf/X86_64/Inputs/undefcpp.o
+++ b/test/old-elf/X86_64/Inputs/undefcpp.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/weak-zero-sized.o b/test/old-elf/X86_64/Inputs/weak-zero-sized.o
index 7c10c6a509ed..7c10c6a509ed 100644
--- a/test/elf/X86_64/Inputs/weak-zero-sized.o
+++ b/test/old-elf/X86_64/Inputs/weak-zero-sized.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/weak.c b/test/old-elf/X86_64/Inputs/weak.c
index ae07ffc745d8..ae07ffc745d8 100644
--- a/test/elf/X86_64/Inputs/weak.c
+++ b/test/old-elf/X86_64/Inputs/weak.c
diff --git a/test/elf/X86_64/Inputs/weak.o b/test/old-elf/X86_64/Inputs/weak.o
index 41cc88a0c482..41cc88a0c482 100644
--- a/test/elf/X86_64/Inputs/weak.o
+++ b/test/old-elf/X86_64/Inputs/weak.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/weak.s b/test/old-elf/X86_64/Inputs/weak.s
index 64ce779553b6..64ce779553b6 100644
--- a/test/elf/X86_64/Inputs/weak.s
+++ b/test/old-elf/X86_64/Inputs/weak.s
diff --git a/test/elf/X86_64/Inputs/zerosizedsection.o b/test/old-elf/X86_64/Inputs/zerosizedsection.o
index a0f2f13a307a..a0f2f13a307a 100644
--- a/test/elf/X86_64/Inputs/zerosizedsection.o
+++ b/test/old-elf/X86_64/Inputs/zerosizedsection.o
Binary files differ
diff --git a/test/elf/X86_64/Inputs/zerosizedsection.s b/test/old-elf/X86_64/Inputs/zerosizedsection.s
index 651ee3aab503..651ee3aab503 100644
--- a/test/elf/X86_64/Inputs/zerosizedsection.s
+++ b/test/old-elf/X86_64/Inputs/zerosizedsection.s
diff --git a/test/old-elf/X86_64/alignoffset.test b/test/old-elf/X86_64/alignoffset.test
new file mode 100644
index 000000000000..53e29211af67
--- /dev/null
+++ b/test/old-elf/X86_64/alignoffset.test
@@ -0,0 +1,118 @@
+# Checks that segments are aligned as per ELF spec. The segment virtual address
+# modulo page alignment should be equal to offset modulo page alignment.
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --rosegment --noinhibit-exec
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+#
+#CHECK: Offset: 0x15C
+#CHECK: VirtualAddress: 0x40015C
+#CHECK: PhysicalAddress: 0x40015C
+#
+#
+#const int a = 0;
+#int main() {
+# foo();
+# return 0;
+#}
+#
+#int foo() { return 0; }
+
+# object
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10C745FC00000000E81C000000B9000000008945F889C84883C4105DC36666662E0F1F840000000000554889E5B8000000005DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '00000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 005562756E747520636C616E672076657273696F6E20332E352E302D73766E3231373330342D317E6578703120286272616E636865732F72656C656173655F33352920286261736564206F6E204C4C564D20332E352E302900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002400000000410E108602430D060000001800000038000000000000000B00000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 48
+Symbols:
+ Local:
+ - Name: 1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: a
+ Type: STT_OBJECT
+ Section: .rodata
+ Size: 0x0000000000000004
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000030
+ Size: 0x000000000000000B
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000024
+...
diff --git a/test/old-elf/X86_64/debug.test b/test/old-elf/X86_64/debug.test
new file mode 100644
index 000000000000..26ba367da574
--- /dev/null
+++ b/test/old-elf/X86_64/debug.test
@@ -0,0 +1,57 @@
+# Test that debug info is assigned typeNoAlloc and that the output sections have
+# a virtual address of 0.
+RUN: lld -flavor old-gnu -target x86_64 -e main --output-filetype=yaml \
+RUN: %p/Inputs/debug0.x86-64 %p/Inputs/debug1.x86-64 -o %t
+RUN: FileCheck %s -check-prefix YAML < %t
+
+RUN: lld -flavor old-gnu -target x86_64 -e main %p/Inputs/debug0.x86-64 \
+RUN: %p/Inputs/debug1.x86-64 -o %t1
+RUN: llvm-readobj -sections %t1 | FileCheck %s -check-prefix ELF
+# Verify that non SHF_ALLOC sections are relocated correctly.
+RUN: llvm-objdump -s %t1 | FileCheck %s -check-prefix RELOC
+
+YAML: type: no-alloc
+
+ELF: Section {
+ELF: Name: .debug_info
+ELF: Type: SHT_PROGBITS (0x1)
+ELF: Flags [ (0x0)
+ELF: ]
+ELF: Address: 0x0
+ELF: }
+ELF: Section {
+ELF: Name: .debug_abbrev
+ELF: Type: SHT_PROGBITS (0x1)
+ELF: Flags [ (0x0)
+ELF: ]
+ELF: Address: 0x0
+ELF: }
+ELF: Section {
+ELF: Name: .debug_aranges
+ELF: Type: SHT_PROGBITS (0x1)
+ELF: Flags [ (0x0)
+ELF: ]
+ELF: Address: 0x0
+ELF: }
+ELF: Section {
+ELF: Name: .debug_line
+ELF: Type: SHT_PROGBITS (0x1)
+ELF: Flags [ (0x0)
+ELF: ]
+ELF: Address: 0x0
+ELF: }
+ELF: Section {
+ELF: Name: .debug_str
+ELF: Type: SHT_PROGBITS (0x1)
+ELF: Flags [ (0x0)
+ELF: ]
+ELF: Address: 0x0
+ELF: }
+
+RELOC: Contents of section .debug_info:
+RELOC: 0000 4e000000 04000000 00000801 3a000000 N...........:...
+# ^^ Relocation: ._debug_str + 0x3a
+RELOC: 0010 01780000 00000000 00dc0140 00000000 .x.........@....
+# ^^ Relocation: .debug_str + 0x78
+RELOC: 0020 00100000 00000000 00000000 00028100 ................
+# ^^ Relocation: .debug_str + 0x81
diff --git a/test/old-elf/X86_64/defsym.test b/test/old-elf/X86_64/defsym.test
new file mode 100644
index 000000000000..d98abf39d428
--- /dev/null
+++ b/test/old-elf/X86_64/defsym.test
@@ -0,0 +1,22 @@
+RUN: lld -flavor old-gnu -target x86_64 --defsym=main=fn --noinhibit-exec \
+RUN: %p/Inputs/fn.o -o %t
+RUN: llvm-readobj -symbols %t | FileCheck %s
+
+CHECK: Symbol {
+CHECK: Name: main (1)
+CHECK: Value: 0x4001E0
+CHECK: Size: 0
+CHECK: Binding: Global (0x1)
+CHECK: Type: Function (0x2)
+CHECK: Other: 0
+CHECK: Section: .text (0x5)
+CHECK: }
+CHECK: Symbol {
+CHECK: Name: fn (6)
+CHECK: Value: 0x4001E0
+CHECK: Size: 6
+CHECK: Binding: Global (0x1)
+CHECK: Type: Function (0x2)
+CHECK: Other: 0
+CHECK: Section: .text (0x5)
+CHECK: }
diff --git a/test/old-elf/X86_64/demangle.test b/test/old-elf/X86_64/demangle.test
new file mode 100644
index 000000000000..caae8256d99a
--- /dev/null
+++ b/test/old-elf/X86_64/demangle.test
@@ -0,0 +1,12 @@
+# XFAIL: win32
+#
+# Check that the linker is able to demangle strings properly.
+# Once there is a way to add undefined symbols using yaml2obj, the test will be
+# changed.
+
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec 2>&1 | FileCheck -check-prefix=DEMANGLE %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec --no-demangle 2>&1 | FileCheck -check-prefix=NODEMANGLE %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/undefcpp.o --noinhibit-exec --demangle 2>&1 | FileCheck -check-prefix=DEMANGLE %s
+
+#DEMANGLE: undefcpp.o: foo(char const*)
+#NODEMANGLE: undefcpp.o: _Z3fooPKc
diff --git a/test/old-elf/X86_64/dontignorezerosize-sections.test b/test/old-elf/X86_64/dontignorezerosize-sections.test
new file mode 100644
index 000000000000..f3042b5508fd
--- /dev/null
+++ b/test/old-elf/X86_64/dontignorezerosize-sections.test
@@ -0,0 +1,9 @@
+# This tests that lld is not ignoring zero sized sections
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \
+RUN: --noinhibit-exec --output-filetype=yaml -o %t
+RUN: FileCheck %s < %t
+
+CHECK: references:
+CHECK: - kind: R_X86_64_16
+CHECK: offset: 0
+CHECK: target: L000
diff --git a/test/old-elf/X86_64/dynamicvars.test b/test/old-elf/X86_64/dynamicvars.test
new file mode 100644
index 000000000000..c6f679038320
--- /dev/null
+++ b/test/old-elf/X86_64/dynamicvars.test
@@ -0,0 +1,123 @@
+# Tests that the dynamic variables created by the linker are set to the right
+# values.
+
+#RUN: yaml2obj --format elf -docnum 1 %s -o %t.o
+#RUN: lld -flavor old-gnu -target x86_64 -e main %t.o -o %t1 --noinhibit-exec
+#RUN: llvm-readobj -sections -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+
+#CHECKSYMS: Name: .dynamic
+#CHECKSYMS: Type: SHT_DYNAMIC
+#CHECKSYMS: Address: [[TARGETA:[0xa-fA-f0-9]+]]
+#CHECKSYMS: Name: .got.plt
+#CHECKSYMS: Type: SHT_PROGBITS
+#CHECKSYMS: Address: [[TARGETB:[0xa-fA-f0-9]+]]
+#CHECKSYMS: Name: _DYNAMIC
+#CHECKSYMS: Value: [[TARGETA]]
+#CHECKSYMS: Section: .dynamic
+#CHECKSYMS: Name: _GLOBAL_OFFSET_TABLE_
+#CHECKSYMS: Value: [[TARGETB]]
+#CHECKSYMS: Section: .got.plt
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10488B0500000000C745FC00000000C7000A000000E80000000031C98945F889C84883C4105DC36690554889E531C05DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000000B
+ Symbol: a
+ Type: R_X86_64_GOTPCREL
+ Addend: -4
+ - Offset: 0x000000000000001D
+ Symbol: foo
+ Type: R_X86_64_PLT32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E362E302000
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002E00000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 48
+Symbols:
+ Local:
+ - Name: 1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: a
+ Type: STT_OBJECT
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000030
+ Size: 0x0000000000000008
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000002E
+ - Name: _GLOBAL_OFFSET_TABLE_
+...
diff --git a/test/old-elf/X86_64/dynlib-nointerp-section.test b/test/old-elf/X86_64/dynlib-nointerp-section.test
new file mode 100644
index 000000000000..c23d283d2a6d
--- /dev/null
+++ b/test/old-elf/X86_64/dynlib-nointerp-section.test
@@ -0,0 +1,4 @@
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/no-interp-section.o -o %t -shared
+RUN: llvm-objdump -section-headers %t | FileCheck %s
+
+CHECK-NOT: .interp
diff --git a/test/old-elf/X86_64/dynlib-search.test b/test/old-elf/X86_64/dynlib-search.test
new file mode 100644
index 000000000000..efd7272fb145
--- /dev/null
+++ b/test/old-elf/X86_64/dynlib-search.test
@@ -0,0 +1,6 @@
+# This tests the functionality for finding the shared library libfn.so for ELF
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/main.o -L%p/Inputs/ -lfn -o %t \
+RUN: --noinhibit-exec -t 2> %t1
+RUN: FileCheck %s < %t1
+
+CHECK: {{[\/0-9A-Za-z_]+}}libfn.so
diff --git a/test/old-elf/X86_64/dynsym-weak.test b/test/old-elf/X86_64/dynsym-weak.test
new file mode 100644
index 000000000000..8e1cc9fa8ec9
--- /dev/null
+++ b/test/old-elf/X86_64/dynsym-weak.test
@@ -0,0 +1,118 @@
+# Check that a symbol declared as a week in a shared library gets a dynamic
+# symbol table record in an executable file if this executabe file declares the
+# symbol as strong.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t.foo.o
+# RUN: lld -flavor old-gnu -target x86_64 -shared -o %t.so %t.foo.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t.main.o
+#
+# Link executable file with strong symbol. Weak symbol is in the shared lib.
+# RUN: lld -flavor old-gnu -target x86_64 -e main -o %t1.exe %t.main.o %t.so
+# RUN: llvm-readobj -dyn-symbols %t1.exe | FileCheck -check-prefix=EXE %s
+#
+# Link executable file. Strong and weak symbol come from different object files.
+# RUN: lld -flavor old-gnu -target x86_64 -e main -o %t2.exe %t.main.o %t.foo.o
+# RUN: llvm-readobj -dyn-symbols %t2.exe | FileCheck -check-prefix=OBJ %s
+#
+# Link shared library. Weak symbol is in the another shared lib.
+# RUN: lld -flavor old-gnu -target x86_64 -shared -o %t.res.so %t.main.o %t.so
+# RUN: llvm-readobj -dyn-symbols %t.res.so | FileCheck -check-prefix=SO %s
+
+# EXE: Symbol {
+# EXE: Name: flag@ ({{[0-9]+}})
+# EXE-NEXT: Value: 0x{{[0-9A-F]+}}
+# EXE-NEXT: Size: 4
+# EXE-NEXT: Binding: Global (0x1)
+# EXE-NEXT: Type: Object (0x1)
+# EXE-NEXT: Other: 0
+# EXE-NEXT: Section: .data (0x{{[0-9A-F]+}})
+# EXE-NEXT: }
+
+# OBJ-NOT: Name: flag@ ({{[0-9]+}})
+
+# SO: Symbol {
+# SO: Name: flag@ ({{[0-9]+}})
+# SO-NEXT: Value: 0x{{[0-9A-F]+}}
+# SO-NEXT: Size: 4
+# SO-NEXT: Binding: Global (0x1)
+# SO-NEXT: Type: Object (0x1)
+# SO-NEXT: Other: 0
+# SO-NEXT: Section: .data (0x{{[0-9A-F]+}})
+# SO-NEXT: }
+
+# foo.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x08
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: flag
+ Type: R_X86_64_GOTPCREL
+ Addend: -4
+
+Symbols:
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Weak:
+ - Name: flag
+
+# main.o
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x08
+ Info: .text
+ Relocations:
+ - Offset: 0x00
+ Symbol: foo
+ Type: R_X86_64_PLT32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x04
+ Size: 0x04
+
+Symbols:
+ Global:
+ - Name: flag
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x04
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: foo
+...
diff --git a/test/old-elf/X86_64/extern-tls.test b/test/old-elf/X86_64/extern-tls.test
new file mode 100644
index 000000000000..d22b06057a9a
--- /dev/null
+++ b/test/old-elf/X86_64/extern-tls.test
@@ -0,0 +1,16 @@
+# This tests verifies that TLS variables have correct offsets
+# when variables the TLS variables are not defined in the program
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/externtls.x86-64 -static \
+RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s -check-prefix=CHECKGOT
+
+# Currently x86_64 relocation pass handles the R_X86_64_GOTTPOFF by
+# creatng R_X86_64_TPOFF64 dynamic ones. For output yaml, this is
+# not changed.
+ - name: __got_tls_extern_tls
+CHECKGOT: alignment: 4
+CHECKGOT: section-name: .text
+CHECKGOT: references:
+CHECKGOT: - kind: R_X86_64_GOTTPOFF
+CHECKGOT: offset: 7
+CHECKGOT: target: extern_tls
+CHECKGOT: addend: -4
diff --git a/test/old-elf/X86_64/general-dynamic-tls.test b/test/old-elf/X86_64/general-dynamic-tls.test
new file mode 100644
index 000000000000..12ad1071ae1e
--- /dev/null
+++ b/test/old-elf/X86_64/general-dynamic-tls.test
@@ -0,0 +1,128 @@
+# This test exercises a simple general dynamic TLS access model in X86_64.
+#
+# It is composed of two parts: a program and a shared library. The shared
+# library uses TLS, but the program does not.
+#
+# The shared library should import __tls_get_addr, since it uses the general
+# dynamic TLS access mode (see www.akkadia.org/drepper/tls.pdf). Notice that
+# once we support TLS strength reduction, this test should be updated, since
+# this can be converted into a local dynamic TLS model.
+
+# Prepare inputs
+#RUN: yaml2obj -format=elf %p/Inputs/generaltls-so.o.yaml -o=%t.o.so
+#RUN: lld -flavor old-gnu -target x86_64 -shared %t.o.so -o %T/libgeneraltls.so
+#RUN: yaml2obj -format=elf %s -o=%t.o
+
+# Link - (we supply --defsym=__tls_get_addr to avoid the need to link with
+# system libraries)
+#RUN: lld -flavor old-gnu -target x86_64 -e main %t.o -L%T -lgeneraltls -o %t1 \
+#RUN: --defsym=__tls_get_addr=0
+
+# Check
+#RUN: llvm-readobj -dyn-symbols %t1 | FileCheck -check-prefix CHECKPROG %s
+#RUN: llvm-readobj -relocations -dyn-symbols %T/libgeneraltls.so | FileCheck \
+#RUN: -check-prefix CHECKDSO %s
+
+# Test case generated with the following code:
+#
+# DSO: (file %p/Inputs/generaltls-so.o.yaml)
+#
+# __thread int mynumber=33;
+#
+# int getnumber() {
+# return mynumber;
+# }
+#
+# Program: (this file). Note: The printf() relocation was removed to simplify
+# this test and allow us to test this without libc.
+#
+# #include <stdio.h>
+# int getnumber();
+#
+# int main() {
+# printf("getnumber() = %d\n", getnumber());
+# return 0;
+# }
+#
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10C745FC00000000B000E80000000048BF000000000000000089C6B000E80000000031F68945F889F04883C4105DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000012
+ Symbol: getnumber
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Offset: 0x0000000000000018
+ Symbol: .rodata.str1.1
+ Type: R_X86_64_64
+ Addend: 0
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .rodata.str1.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 6765746E756D6265722829203D2025640A00
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .rodata.str1.1
+ Type: STT_SECTION
+ Section: .rodata.str1.1
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000036
+ - Name: getnumber
+
+# Program should import the function defined in the shared library
+#CHECKPROG: getnumber@
+# Program should not import __tls_get_addr, since it does not directly use TLS
+#CHECKPROG-NOT: __tls_get_addr@
+
+# Check for the presence of X86_64 TLS relocations in the shared library
+#CHECKDSO: R_X86_64_DTPMOD64
+#CHECKDSO: R_X86_64_DTPOFF64
+#CHECKDSO: R_X86_64_JUMP_SLOT
+
+# The shared library should import __tls_get_addr, since it uses the general
+# dynamic TLS access mode.
+#CHECKDSO: Name: __tls_get_addr@
+#CHECKDSO-NEXT: Value: 0x0
+#CHECKDSO-NEXT: Size: 0
+#CHECKDSO-NEXT: Binding: Global
+#CHECKDSO-NEXT: Type: None
+#CHECKDSO-NEXT: Other: 0
+#CHECKDSO-NEXT: Section: Undefined
+
diff --git a/test/old-elf/X86_64/imagebase.test b/test/old-elf/X86_64/imagebase.test
new file mode 100644
index 000000000000..7b6f7318d72d
--- /dev/null
+++ b/test/old-elf/X86_64/imagebase.test
@@ -0,0 +1,94 @@
+# Checks that segments start at the image address specified.
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec --image-base 0x600000
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+#
+#CHECK: VirtualAddress: 0x600000
+#CHECK: PhysicalAddress: 0x600000
+#CHECK: VirtualAddress: 0x600178
+#CHECK: PhysicalAddress: 0x600178
+
+# object
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '64000000'
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000008
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000012
+ - Name: myval
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: val
+ Type: STT_OBJECT
+ Section: .rodata
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/X86_64/initfini-order.test b/test/old-elf/X86_64/initfini-order.test
new file mode 100644
index 000000000000..e6afcf644346
--- /dev/null
+++ b/test/old-elf/X86_64/initfini-order.test
@@ -0,0 +1,10 @@
+# This tests the functionality that lld is able to emit
+# init_array/fini_array sections in the right order.
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/initfini.o \
+RUN: --noinhibit-exec -o %t
+RUN: llvm-objdump -t -section-headers %t | FileCheck %s
+
+CHECK: {{[0-9]+}} .eh_frame {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
+CHECK: {{[0-9]+}} .init_array {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
+CHECK: {{[0-9]+}} .fini_array {{[0-9a-z]+}} {{[0-9a-z]+}} DATA
diff --git a/test/old-elf/X86_64/initfini.test b/test/old-elf/X86_64/initfini.test
new file mode 100644
index 000000000000..09d2bc129c25
--- /dev/null
+++ b/test/old-elf/X86_64/initfini.test
@@ -0,0 +1,23 @@
+# This tests the functionality that lld is able to read
+# init_array/fini_array sections in the input ELF. This
+# corresponds to the the .init_array/.fini_array sections
+# in the output ELF.
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/initfini.o \
+RUN: --noinhibit-exec --output-filetype=yaml -o %t
+RUN: FileCheck %s < %t
+
+CHECK: - type: data
+CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECK: section-name: .init_array
+CHECK: references:
+CHECK: - kind: R_X86_64_64
+CHECK: offset: 0
+CHECK: target: constructor
+CHECK: - type: data
+CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECK: section-name: .fini_array
+CHECK: references:
+CHECK: - kind: R_X86_64_64
+CHECK: offset: 0
+CHECK: target: destructor
diff --git a/test/old-elf/X86_64/largebss.test b/test/old-elf/X86_64/largebss.test
new file mode 100644
index 000000000000..722ec1c72bf9
--- /dev/null
+++ b/test/old-elf/X86_64/largebss.test
@@ -0,0 +1,20 @@
+# This tests the functionality of handling BSS symbols
+# BSS symbols don't occupy file content and are associated with typeZeroFill
+# Any typeZeroFill content wouldn't have space reserved in the file to store
+# its content
+
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/largebss.o --output-filetype=yaml --noinhibit-exec | FileCheck %s
+
+CHECK: - name: largecommon
+CHECK: scope: global
+CHECK: type: zero-fill
+CHECK: size: 4000
+CHECK: merge: as-tentative
+CHECK: - name: largebss
+CHECK: scope: global
+CHECK: type: zero-fill
+CHECK: size: 4000
+CHECK: - name: largetbss
+CHECK: scope: global
+CHECK: type: thread-zero-fill
+CHECK: size: 4000
diff --git a/test/old-elf/X86_64/layoutpass-order.test b/test/old-elf/X86_64/layoutpass-order.test
new file mode 100644
index 000000000000..ec180c970e78
--- /dev/null
+++ b/test/old-elf/X86_64/layoutpass-order.test
@@ -0,0 +1,14 @@
+# This test checks that we follow the command line order of layouting
+# symbols in the output file
+
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/layoutpass/1.o \
+RUN: %p/Inputs/layoutpass/lib2.a %p/Inputs/layoutpass/3.o -o %t \
+RUN: --noinhibit-exec -static
+
+RUN: llvm-nm -n %t | FileCheck -check-prefix=SYMBOLSORDER %s
+
+SYMBOLSORDER: {{[A-Fa-f0-9]+}} T main
+SYMBOLSORDER: {{[A-Fa-f0-9]+}} T b
+SYMBOLSORDER: {{[A-Fa-f0-9]+}} T a
+SYMBOLSORDER: {{[A-Fa-f0-9]+}} T c
+SYMBOLSORDER: {{[A-Fa-f0-9]+}} T d
diff --git a/test/old-elf/X86_64/maxpagesize.test b/test/old-elf/X86_64/maxpagesize.test
new file mode 100644
index 000000000000..303bd86eec0b
--- /dev/null
+++ b/test/old-elf/X86_64/maxpagesize.test
@@ -0,0 +1,113 @@
+# Checks that segments are aligned as per ELF spec when the user specifies
+# max-page-size option, and the segment alignment is set to the page size
+# specified by the user.
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
+# RUN: not lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0
+# RUN: not lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0xFF
+# RUN: not lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x1010
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t1.exe -static \
+# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x100000
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec -z max-page-size=0x10000
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+# RUN: llvm-readobj -program-headers %t1.exe | FileCheck %s -check-prefix=CHECKLARGE
+#
+#CHECK: VirtualAddress: 0x400000
+#CHECK: PhysicalAddress: 0x400000
+#CHECK: Alignment: 65536
+#CHECK: VirtualAddress: 0x400178
+#CHECK: PhysicalAddress: 0x400178
+#CHECK: Alignment: 65536
+#CHECKLARGE: VirtualAddress: 0x400000
+#CHECKLARGE: PhysicalAddress: 0x400000
+#CHECKLARGE: Alignment: 1048576
+#CHECKLARGE: VirtualAddress: 0x400178
+#CHECKLARGE: PhysicalAddress: 0x400178
+#CHECKLARGE: Alignment: 1048576
+
+# object
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '64000000'
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000008
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000012
+ - Name: myval
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: val
+ Type: STT_OBJECT
+ Section: .rodata
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/X86_64/mergesimilarstrings.test b/test/old-elf/X86_64/mergesimilarstrings.test
new file mode 100644
index 000000000000..2b9b08faa23f
--- /dev/null
+++ b/test/old-elf/X86_64/mergesimilarstrings.test
@@ -0,0 +1,47 @@
+# Check that relocations to section that contains strings is properly handled
+# when merging strings is enabled.
+#
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target x86_64 %t.o --noinhibit-exec -o %t1.out
+# RUN: llvm-readobj -sections %t1.out | FileCheck %s
+# RUN: lld -flavor old-gnu -target x86_64 %t.o --noinhibit-exec -o %t2.out --output-filetype=yaml
+# RUN: FileCheck %s -check-prefix=CHECKRELOCS < %t2.out
+
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Content: 54889e5488d3d00000000e80000000088d3d00000000e800000000b8000000005dc3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x04
+ Info: .text
+ Relocations:
+ - Offset: 0x07
+ Symbol: .rodata
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x01
+ Content: 48656c6c6f20576f726c6400576f726c6400
+Symbols:
+ Global:
+ - Name: .rodata
+ Section: .rodata
+
+#CHECK: Name: .rodata
+#CHECK: Size: 18
+#CHECKRELOCS: references:
+#CHECKRELOCS: - kind: R_X86_64_PC32
+#CHECKRELOCS: offset: 7
+#CHECKRELOCS: target: .rodata
+#CHECKRELOCS: addend: -4
diff --git a/test/old-elf/X86_64/multi-weak-layout.test b/test/old-elf/X86_64/multi-weak-layout.test
new file mode 100644
index 000000000000..879b4b1b3052
--- /dev/null
+++ b/test/old-elf/X86_64/multi-weak-layout.test
@@ -0,0 +1,52 @@
+# Test that we are able to layout multiple weak symbols
+# properly
+
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/multiweaksyms.o \
+RUN: --noinhibit-exec -static --output-filetype=yaml -o %t
+RUN: FileCheck %s -check-prefix=WEAKSYMS < %t
+
+WEAKSYMS: - type: data
+WEAKSYMS: alignment: 8
+WEAKSYMS: references:
+WEAKSYMS: - kind: layout-after
+WEAKSYMS: offset: 0
+WEAKSYMS: target: [[L001:[-a-zA-Z0-9_]+]]
+WEAKSYMS: - name: myfn2
+WEAKSYMS: scope: global
+WEAKSYMS: type: data
+WEAKSYMS: merge: as-weak
+WEAKSYMS: alignment: 8
+WEAKSYMS: references:
+WEAKSYMS: - kind: layout-after
+WEAKSYMS: offset: 0
+WEAKSYMS: target: [[L001]]
+WEAKSYMS: - ref-name: [[L001]]
+WEAKSYMS: scope: global
+WEAKSYMS: type: data
+WEAKSYMS: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+WEAKSYMS: alignment: 8
+WEAKSYMS: references:
+WEAKSYMS: - kind: R_X86_64_64
+WEAKSYMS: offset: 0
+WEAKSYMS: target: test
+WEAKSYMS: - kind: layout-after
+WEAKSYMS: offset: 0
+WEAKSYMS: target: [[L003:[-a-zA-Z0-9_]+]]
+WEAKSYMS: - name: myfn1
+WEAKSYMS: scope: global
+WEAKSYMS: type: data
+WEAKSYMS: merge: as-weak
+WEAKSYMS: alignment: 8
+WEAKSYMS: references:
+WEAKSYMS: - kind: layout-after
+WEAKSYMS: offset: 0
+WEAKSYMS: target: [[L003]]
+WEAKSYMS: - ref-name: [[L003]]
+WEAKSYMS: scope: global
+WEAKSYMS: type: data
+WEAKSYMS: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+WEAKSYMS: alignment: 8
+WEAKSYMS: references:
+WEAKSYMS: - kind: R_X86_64_64
+WEAKSYMS: offset: 0
+WEAKSYMS: target: test
diff --git a/test/old-elf/X86_64/multi-weak-override.test b/test/old-elf/X86_64/multi-weak-override.test
new file mode 100644
index 000000000000..75c86e7e405f
--- /dev/null
+++ b/test/old-elf/X86_64/multi-weak-override.test
@@ -0,0 +1,16 @@
+# Test for weak symbol getting overridden
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/multi-weak.o \
+RUN: %p/Inputs/multi-ovrd.o -o %t -e main --noinhibit-exec
+RUN: llvm-nm -n %t | FileCheck -check-prefix=WEAKORDER %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/multi-weak.o \
+RUN: %p/Inputs/multi-ovrd.o --output-filetype=yaml -o %t2 --noinhibit-exec
+RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
+
+WEAKORDER: {{[0-9a-f]+}} T f
+WEAKORDER: {{[0-9a-f]+}} T g
+
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
+WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
+WEAKATOMSORDER: - name: f
+WEAKATOMSORDER: - name: g
+
diff --git a/test/old-elf/X86_64/multi-weak-syms-order.test b/test/old-elf/X86_64/multi-weak-syms-order.test
new file mode 100644
index 000000000000..a8e21e13f870
--- /dev/null
+++ b/test/old-elf/X86_64/multi-weak-syms-order.test
@@ -0,0 +1,13 @@
+# Test for weak symbol getting overridden
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/multi-weak.o -o %t --noinhibit-exec
+RUN: llvm-nm -n %t | FileCheck -check-prefix=WEAKORDER %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/multi-weak.o -o %t2 --output-filetype=yaml --noinhibit-exec
+RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
+
+WEAKORDER: {{[0-9a-f]+}} T fn
+WEAKORDER: {{[0-9a-f]+}} T f
+WEAKORDER: {{[0-9a-f]+}} T g
+WEAKORDER: {{[0-9a-f]+}} T main
+
+WEAKATOMSORDER: - name: f
+WEAKATOMSORDER: - name: g
diff --git a/test/old-elf/X86_64/nmagic.test b/test/old-elf/X86_64/nmagic.test
new file mode 100644
index 000000000000..3ed9228fa787
--- /dev/null
+++ b/test/old-elf/X86_64/nmagic.test
@@ -0,0 +1,91 @@
+# This tests verifies functionality of NMAGIC that we create only two segments,
+# PT_LOAD, PT_TLS
+# The data segment should be aligned to a page boundary
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/nmagic.o \
+RUN: --noinhibit-exec -o %t --nmagic -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NMAGICSECTIONS %s
+RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NMAGICPROGRAMHEADERS %s
+
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Index: 0
+NMAGICSECTIONS: Name: (0)
+NMAGICSECTIONS: Type: SHT_NULL (0x0)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .text
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .eh_frame
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .tdata
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .tbss
+NMAGICSECTIONS: Type: SHT_NOBITS (0x8)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .got.plt
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .data
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .bss
+NMAGICSECTIONS: Type: SHT_NOBITS (0x8)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .comment
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .note.GNU-stack
+NMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .shstrtab
+NMAGICSECTIONS: Type: SHT_STRTAB (0x3)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .symtab
+NMAGICSECTIONS: Type: SHT_SYMTAB (0x2)
+NMAGICSECTIONS: }
+NMAGICSECTIONS: Section {
+NMAGICSECTIONS: Name: .strtab
+NMAGICSECTIONS: Type: SHT_STRTAB (0x3)
+NMAGICSECTIONS: }
+
+NMAGICPROGRAMHEADERS: ProgramHeaders [
+NMAGICPROGRAMHEADERS: ProgramHeader {
+NMAGICPROGRAMHEADERS: Type: PT_LOAD (0x1)
+NMAGICPROGRAMHEADERS: Offset: 0x0
+NMAGICPROGRAMHEADERS: VirtualAddress: 0x400000
+NMAGICPROGRAMHEADERS: PhysicalAddress: 0x400000
+NMAGICPROGRAMHEADERS: FileSize: 4108
+NMAGICPROGRAMHEADERS: MemSize: 4108
+NMAGICPROGRAMHEADERS: Flags [ (0x7)
+NMAGICPROGRAMHEADERS: PF_R (0x4)
+NMAGICPROGRAMHEADERS: PF_W (0x2)
+NMAGICPROGRAMHEADERS: PF_X (0x1)
+NMAGICPROGRAMHEADERS: ]
+NMAGICPROGRAMHEADERS: Alignment: 8
+NMAGICPROGRAMHEADERS: }
+NMAGICPROGRAMHEADERS: ProgramHeader {
+NMAGICPROGRAMHEADERS: Type: PT_TLS (0x7)
+NMAGICPROGRAMHEADERS: Offset: 0x1000
+NMAGICPROGRAMHEADERS: VirtualAddress: 0x401000
+NMAGICPROGRAMHEADERS: PhysicalAddress: 0x401000
+NMAGICPROGRAMHEADERS: FileSize: 4
+NMAGICPROGRAMHEADERS: MemSize: 12
+NMAGICPROGRAMHEADERS: Flags [ (0x6)
+NMAGICPROGRAMHEADERS: PF_R (0x4)
+NMAGICPROGRAMHEADERS: PF_W (0x2)
+NMAGICPROGRAMHEADERS: ]
+NMAGICPROGRAMHEADERS: Alignment: 4
+NMAGICPROGRAMHEADERS: }
+NMAGICPROGRAMHEADERS: ]
diff --git a/test/old-elf/X86_64/noalignsegments.test b/test/old-elf/X86_64/noalignsegments.test
new file mode 100644
index 000000000000..4963575b674b
--- /dev/null
+++ b/test/old-elf/X86_64/noalignsegments.test
@@ -0,0 +1,95 @@
+# Checks that segments are aligned as per ELF spec than aligning each
+# segment fileoffset / virtual address to a page.
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t.exe -static \
+# RUN: --no-align-segments --noinhibit-exec
+# RUN: llvm-readobj -program-headers %t.exe | FileCheck %s
+#
+#CHECK: VirtualAddress: 0x400000
+#CHECK: PhysicalAddress: 0x400000
+#CHECK: VirtualAddress: 0x400178
+#CHECK: PhysicalAddress: 0x400178
+
+# object
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B864000000C745FC000000005DC366666666662E0F1F840000000000554889E531C05DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+ - Name: .rodata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: '64000000'
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000800000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000008
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000012
+ - Name: myval
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: val
+ Type: STT_OBJECT
+ Section: .rodata
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/X86_64/note-sections-ro_plus_rw.test b/test/old-elf/X86_64/note-sections-ro_plus_rw.test
new file mode 100644
index 000000000000..b4eafaf277c4
--- /dev/null
+++ b/test/old-elf/X86_64/note-sections-ro_plus_rw.test
@@ -0,0 +1,42 @@
+# This tests the functionality that lld is able to recreate the note sections
+# if they appear in the input, it looks like we need to differentiate RO note
+# sections from RW note sections, and each creating a segment of its own
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/note_ro_rw.o \
+RUN: --noinhibit-exec -o %t -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NOTESECTIONS %s
+RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NOTESEGMENT %s
+
+NOTESECTIONS: Section {
+NOTESECTIONS: Name: .note.ro (1)
+NOTESECTIONS: Type: SHT_NOTE (0x7)
+NOTESECTIONS: Flags [ (0x2)
+NOTESECTIONS: SHF_ALLOC (0x2)
+NOTESECTIONS: ]
+NOTESECTIONS: AddressAlignment: 4
+NOTESECTIONS: }
+NOTESECTIONS: Section {
+NOTESECTIONS: Name: .note.rw (31)
+NOTESECTIONS: Type: SHT_NOTE (0x7)
+NOTESECTIONS: Flags [ (0x3)
+NOTESECTIONS: SHF_ALLOC (0x2)
+NOTESECTIONS: SHF_WRITE (0x1)
+NOTESECTIONS: ]
+NOTESECTIONS: Size: 28
+NOTESECTIONS: AddressAlignment: 4
+NOTESECTIONS: }
+NOTESEGMENT: ProgramHeader {
+NOTESEGMENT: Type: PT_NOTE (0x4)
+NOTESEGMENT: Flags [ (0x4)
+NOTESEGMENT: PF_R (0x4)
+NOTESEGMENT: ]
+NOTESEGMENT: Alignment: 4
+NOTESEGMENT: }
+NOTESEGMENT: ProgramHeader {
+NOTESEGMENT: Type: PT_NOTE (0x4)
+NOTESEGMENT: Flags [ (0x6)
+NOTESEGMENT: PF_R (0x4)
+NOTESEGMENT: PF_W (0x2)
+NOTESEGMENT: ]
+NOTESEGMENT: Alignment: 4
+NOTESEGMENT: }
diff --git a/test/old-elf/X86_64/note-sections.test b/test/old-elf/X86_64/note-sections.test
new file mode 100644
index 000000000000..b831e7e192b4
--- /dev/null
+++ b/test/old-elf/X86_64/note-sections.test
@@ -0,0 +1,23 @@
+# This tests the functionality that lld is able to recreate the note sections
+# if they appear in the input
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/note.o \
+RUN: --noinhibit-exec -o %t -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NOTESECTIONS %s
+RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NOTESEGMENT %s
+
+
+NOTESECTIONS: Section {
+NOTESECTIONS: Index: 1
+NOTESECTIONS: Name: .note.ident (1)
+NOTESECTIONS: Type: SHT_NOTE (0x7)
+NOTESECTIONS: Size: 28
+NOTESECTIONS: AddressAlignment: 4
+NOTESECTIONS: }
+
+NOTESEGMENT: ProgramHeader {
+NOTESEGMENT: Type: PT_NOTE (0x4)
+NOTESEGMENT: FileSize: 28
+NOTESEGMENT: MemSize: 28
+NOTESEGMENT: Alignment: 4
+NOTESEGMENT: }
diff --git a/test/old-elf/X86_64/omagic.test b/test/old-elf/X86_64/omagic.test
new file mode 100644
index 000000000000..fe2633e67a95
--- /dev/null
+++ b/test/old-elf/X86_64/omagic.test
@@ -0,0 +1,237 @@
+# This tests verifies functionality of omagic that we create only two segments,
+# PT_LOAD, PT_TLS
+# The data segment should not be aligned to a page boundary
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/nmagic.o \
+RUN: --noinhibit-exec -o %t --omagic -static
+RUN: llvm-readobj -sections %t | FileCheck -check-prefix=OMAGICSECTIONS %s
+RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=OMAGICPROGRAMHEADERS %s
+
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: (0)
+OMAGICSECTIONS: Type: SHT_NULL (0x0)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x0
+OMAGICSECTIONS: Size: 0
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 0
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .text
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x6)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_EXECINSTR (0x4)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x4000E8
+OMAGICSECTIONS: Offset: 0xE8
+OMAGICSECTIONS: Size: 11
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 4
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .eh_frame
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x2)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x4000F8
+OMAGICSECTIONS: Offset: 0xF8
+OMAGICSECTIONS: Size: 56
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 8
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .eh_frame_hdr
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x2)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x400130
+OMAGICSECTIONS: Offset: 0x130
+OMAGICSECTIONS: Size: 8
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 8
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .tdata
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x403)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_TLS (0x400)
+OMAGICSECTIONS: SHF_WRITE (0x1)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x400138
+OMAGICSECTIONS: Offset: 0x138
+OMAGICSECTIONS: Size: 4
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 4
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .tbss
+OMAGICSECTIONS: Type: SHT_NOBITS (0x8)
+OMAGICSECTIONS: Flags [ (0x403)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_TLS (0x400)
+OMAGICSECTIONS: SHF_WRITE (0x1)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x40013C
+OMAGICSECTIONS: Offset: 0x13C
+OMAGICSECTIONS: Size: 8
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 4
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .got.plt
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x3)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_WRITE (0x1)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x400140
+OMAGICSECTIONS: Offset: 0x140
+OMAGICSECTIONS: Size: 0
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 8
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .data
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x3)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_WRITE (0x1)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x400140
+OMAGICSECTIONS: Offset: 0x140
+OMAGICSECTIONS: Size: 4
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 4
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .bss
+OMAGICSECTIONS: Type: SHT_NOBITS (0x8)
+OMAGICSECTIONS: Flags [ (0x3)
+OMAGICSECTIONS: SHF_ALLOC (0x2)
+OMAGICSECTIONS: SHF_WRITE (0x1)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x400144
+OMAGICSECTIONS: Offset: 0x144
+OMAGICSECTIONS: Size: 0
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 4
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .comment
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x144
+OMAGICSECTIONS: Size: 43
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 1
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .note.GNU-stack
+OMAGICSECTIONS: Type: SHT_PROGBITS (0x1)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x16F
+OMAGICSECTIONS: Size: 0
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 1
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .shstrtab
+OMAGICSECTIONS: Type: SHT_STRTAB (0x3)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x16F
+OMAGICSECTIONS: Size: 115
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 1
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .symtab
+OMAGICSECTIONS: Type: SHT_SYMTAB (0x2)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x1E8
+OMAGICSECTIONS: Size: 504
+OMAGICSECTIONS: Link: 13
+OMAGICSECTIONS: Info: 8
+OMAGICSECTIONS: AddressAlignment: 8
+OMAGICSECTIONS: EntrySize: 24
+OMAGICSECTIONS: }
+OMAGICSECTIONS: Section {
+OMAGICSECTIONS: Name: .strtab
+OMAGICSECTIONS: Type: SHT_STRTAB (0x3)
+OMAGICSECTIONS: Flags [ (0x0)
+OMAGICSECTIONS: ]
+OMAGICSECTIONS: Address: 0x0
+OMAGICSECTIONS: Offset: 0x3E0
+OMAGICSECTIONS: Size: 231
+OMAGICSECTIONS: Link: 0
+OMAGICSECTIONS: Info: 0
+OMAGICSECTIONS: AddressAlignment: 1
+OMAGICSECTIONS: EntrySize: 0
+OMAGICSECTIONS: }
+OMAGICSECTIONS: ]
+
+OMAGICPROGRAMHEADERS: ProgramHeaders [
+OMAGICPROGRAMHEADERS: ProgramHeader {
+OMAGICPROGRAMHEADERS: Type: PT_LOAD (0x1)
+OMAGICPROGRAMHEADERS: Offset: 0x0
+OMAGICPROGRAMHEADERS: VirtualAddress: 0x400000
+OMAGICPROGRAMHEADERS: PhysicalAddress: 0x400000
+OMAGICPROGRAMHEADERS: FileSize: 324
+OMAGICPROGRAMHEADERS: MemSize: 324
+OMAGICPROGRAMHEADERS: Flags [ (0x7)
+OMAGICPROGRAMHEADERS: PF_R (0x4)
+OMAGICPROGRAMHEADERS: PF_W (0x2)
+OMAGICPROGRAMHEADERS: PF_X (0x1)
+OMAGICPROGRAMHEADERS: ]
+OMAGICPROGRAMHEADERS: Alignment: 8
+OMAGICPROGRAMHEADERS: }
+OMAGICPROGRAMHEADERS: ProgramHeader {
+OMAGICPROGRAMHEADERS: Type: PT_TLS (0x7)
+OMAGICPROGRAMHEADERS: Offset: 0x138
+OMAGICPROGRAMHEADERS: VirtualAddress: 0x400138
+OMAGICPROGRAMHEADERS: PhysicalAddress: 0x400138
+OMAGICPROGRAMHEADERS: FileSize: 4
+OMAGICPROGRAMHEADERS: MemSize: 12
+OMAGICPROGRAMHEADERS: Flags [ (0x6)
+OMAGICPROGRAMHEADERS: PF_R (0x4)
+OMAGICPROGRAMHEADERS: PF_W (0x2)
+OMAGICPROGRAMHEADERS: ]
+OMAGICPROGRAMHEADERS: Alignment: 4
+OMAGICPROGRAMHEADERS: }
+OMAGICPROGRAMHEADERS: ]
diff --git a/test/old-elf/X86_64/outputsegments.test b/test/old-elf/X86_64/outputsegments.test
new file mode 100644
index 000000000000..1c76b6eb855c
--- /dev/null
+++ b/test/old-elf/X86_64/outputsegments.test
@@ -0,0 +1,188 @@
+# Tests that lld does not create separate segment if the input sections are part
+# of the same output section
+
+# Build executable
+# RUN: yaml2obj -format=elf -docnum 1 %s -o %t.o
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t1.exe -static \
+# RUN: --no-align-segments --noinhibit-exec
+# RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t2.exe -static \
+# RUN: --noinhibit-exec
+# RUN: llvm-readobj -program-headers %t1.exe | FileCheck %s -check-prefix=SEGMENTS
+# RUN: llvm-readobj -program-headers %t2.exe | FileCheck %s -check-prefix=SEGMENTS
+#
+#SEGMENTS: VirtualAddress: 0x400000
+#SEGMENTS: PhysicalAddress: 0x400000
+#SEGMENTS: FileSize: 288
+#SEGMENTS: MemSize: 288
+#SEGMENTS: VirtualAddress: 0x404000
+#SEGMENTS: PhysicalAddress: 0x404000
+#SEGMENTS: FileSize: 16608
+#SEGMENTS: MemSize: 16608
+#SEGMENTS: Alignment: 16384
+#
+# object
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .text.foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000002000
+ Content: 554889E54883EC1048BF0000000000000000B000E800000000B9000000008945FC89C84883C4105DC3
+ - Name: .rela.text.foo
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text.foo
+ Relocations:
+ - Offset: 0x000000000000000A
+ Symbol: .rodata.str1.1
+ Type: R_X86_64_64
+ Addend: 0
+ - Offset: 0x0000000000000015
+ Symbol: printf
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .text.bar
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000004000
+ Content: 554889E54883EC1048BF0000000000000000B000E800000000B9000000008945FC89C84883C4105DC3
+ - Name: .rela.text.bar
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text.bar
+ Relocations:
+ - Offset: 0x000000000000000A
+ Symbol: .rodata.str1.1
+ Type: R_X86_64_64
+ Addend: 7
+ - Offset: 0x0000000000000015
+ Symbol: printf
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .text.main
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10C745FC00000000E8000000008945F8E8000000008B4DF801C189C84883C4105DC3
+ - Name: .rela.text.main
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text.main
+ Relocations:
+ - Offset: 0x0000000000000010
+ Symbol: foo
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Offset: 0x0000000000000018
+ Symbol: bar
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .rodata.str1.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 48656C6C6F0A00576F726C640A00
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 005562756E747520636C616E672076657273696F6E20332E352E302D73766E3231373330342D317E6578703120286272616E636865732F72656C656173655F33352920286261736564206F6E204C4C564D20332E352E302900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000180000001C000000000000002900000000410E108602430D060000001800000038000000000000002900000000410E108602430D060000001C00000054000000000000002900000000410E108602430D0600000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text.foo
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x000000000000003C
+ Symbol: .text.bar
+ Type: R_X86_64_PC32
+ Addend: 0
+ - Offset: 0x0000000000000058
+ Symbol: .text.main
+ Type: R_X86_64_PC32
+ Addend: 0
+Symbols:
+ Local:
+ - Name: 1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .text.foo
+ Type: STT_SECTION
+ Section: .text.foo
+ - Name: .text.bar
+ Type: STT_SECTION
+ Section: .text.bar
+ - Name: .text.main
+ Type: STT_SECTION
+ Section: .text.main
+ - Name: .rodata.str1.1
+ Type: STT_SECTION
+ Section: .rodata.str1.1
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text.bar
+ Size: 0x0000000000000029
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text.foo
+ Size: 0x0000000000000029
+ - Name: main
+ Type: STT_FUNC
+ Section: .text.main
+ Size: 0x0000000000000029
+ - Name: printf
+...
diff --git a/test/old-elf/X86_64/reloc_r_x86_64_16.test b/test/old-elf/X86_64/reloc_r_x86_64_16.test
new file mode 100644
index 000000000000..093fbeb4f137
--- /dev/null
+++ b/test/old-elf/X86_64/reloc_r_x86_64_16.test
@@ -0,0 +1,59 @@
+# Tests that lld can handle relocations of type R_X86_64_16
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
+#RUN: llvm-objdump -s %t2.out | FileCheck %s
+#CHECK: Contents of section .data:
+#CHECK: 401000 0210
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: '0000'
+ - Name: .rela.data
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: foo
+ Type: R_X86_64_16
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000008
+ - Name: foo
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x0000000000000002
+ Size: 0x0000000000000002
+...
diff --git a/test/old-elf/X86_64/reloc_r_x86_64_pc16.test b/test/old-elf/X86_64/reloc_r_x86_64_pc16.test
new file mode 100644
index 000000000000..c6e53ad636e8
--- /dev/null
+++ b/test/old-elf/X86_64/reloc_r_x86_64_pc16.test
@@ -0,0 +1,60 @@
+# Tests that lld can handle relocations of type R_X86_64_PC16
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
+#RUN: llvm-objdump -s %t2.out | FileCheck %s
+#CHECK: Contents of section .data:
+#CHECK: 401000 0700
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: '0000'
+ - Name: .rela.data
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: foo
+ Type: R_X86_64_PC16
+ Addend: 5
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000008
+ - Name: foo
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x0000000000000002
+ Size: 0x0000000000000002
+...
diff --git a/test/old-elf/X86_64/reloc_r_x86_64_pc64.test b/test/old-elf/X86_64/reloc_r_x86_64_pc64.test
new file mode 100644
index 000000000000..a7c5e88965c5
--- /dev/null
+++ b/test/old-elf/X86_64/reloc_r_x86_64_pc64.test
@@ -0,0 +1,60 @@
+# Tests that lld can handle relocations of type R_X86_64_PC64
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t1.o --noinhibit-exec -o %t2.out -static
+#RUN: llvm-objdump -s %t2.out | FileCheck %s
+#CHECK: Contents of section .data:
+#CHECK: 401000 0a00
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: '0000'
+ - Name: .rela.data
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .data
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: foo
+ Type: R_X86_64_PC64
+ Addend: 8
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000008
+ - Name: foo
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x0000000000000002
+ Size: 0x0000000000000002
+...
diff --git a/test/old-elf/X86_64/rodata.test b/test/old-elf/X86_64/rodata.test
new file mode 100644
index 000000000000..6f85ac0423fd
--- /dev/null
+++ b/test/old-elf/X86_64/rodata.test
@@ -0,0 +1,9 @@
+# This tests that the ordinals for all merge atoms and defined atoms have been
+# set properly
+
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/rodata.o --noinhibit-exec \
+RUN: --merge-strings -static -o %t1
+RUN: llvm-nm -n %t1 | FileCheck %s
+
+CHECK: {{[0-9a-f]+}} R _nl_default_default_domain
+CHECK: {{[0-9a-f]+}} R _nl_default_default_dirname
diff --git a/test/old-elf/X86_64/sectionchoice.test b/test/old-elf/X86_64/sectionchoice.test
new file mode 100644
index 000000000000..7ff838fed98d
--- /dev/null
+++ b/test/old-elf/X86_64/sectionchoice.test
@@ -0,0 +1,7 @@
+# This tests that we are able to properly set the sectionChoice for DefinedAtoms
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \
+RUN: --noinhibit-exec -o %t --output-filetype=yaml
+RUN: FileCheck %s < %t
+
+CHECK-NOT: section-choice: sectionCustomRequired
+
diff --git a/test/old-elf/X86_64/sectionmap.test b/test/old-elf/X86_64/sectionmap.test
new file mode 100644
index 000000000000..5fa04bd87051
--- /dev/null
+++ b/test/old-elf/X86_64/sectionmap.test
@@ -0,0 +1,22 @@
+# This tests that we are able to merge the section .gcc_except_table,
+# .data.rel.local, .data.rel.ro, any other sections that belong to .data
+# into appropriate output sections
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/sectionmap.o \
+RUN: --noinhibit-exec -o %t
+RUN: llvm-readobj -sections %t | FileCheck %s -check-prefix=VERIFYSECTIONHEADERS
+
+VERIFYSECTIONHEADERS: Section {
+VERIFYSECTIONHEADERS: Name: .data
+VERIFYSECTIONHEADERS: }
+VERIFYSECTIONHEADERS: Section {
+VERIFYSECTIONHEADERS: Name: .gcc_except_table
+VERIFYSECTIONHEADERS: }
+VERIFYSECTIONHEADERS: Section {
+VERIFYSECTIONHEADERS: Name: .data.rel.local
+VERIFYSECTIONHEADERS: }
+VERIFYSECTIONHEADERS: Section {
+VERIFYSECTIONHEADERS: Name: .data.rel.ro
+VERIFYSECTIONHEADERS: }
+VERIFYSECTIONHEADERS: Section {
+VERIFYSECTIONHEADERS: Name: .bss
+VERIFYSECTIONHEADERS: }
diff --git a/test/old-elf/X86_64/startGroupEndGroup.test b/test/old-elf/X86_64/startGroupEndGroup.test
new file mode 100644
index 000000000000..e79e436a6513
--- /dev/null
+++ b/test/old-elf/X86_64/startGroupEndGroup.test
@@ -0,0 +1,48 @@
+# This tests functionality of --start-group, --end-group
+
+# This link should fail with unresolve symbol
+RUN: not lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o \
+RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a -o x 2> %t.err
+
+# Test group
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o --start-group \
+RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a --end-group -o %t1
+
+# Mix object files in group
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o --start-group \
+RUN: %p/Inputs/group/fn.o %p/Inputs/group/fn2.o \
+RUN: %p/Inputs/group/fn1.o --end-group -o %t2
+
+# Mix Whole archive input, the group should not iterate the file libfn.a
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o --start-group \
+RUN: --whole-archive %p/Inputs/group/libfn.a --no-whole-archive \
+RUN: %p/Inputs/group/libfn1.a --end-group -o %t3
+
+# Defined symbols in a shared library.
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o --start-group \
+RUN: %p/Inputs/group/libfn2.so %p/Inputs/group/fn1.o %p/Inputs/group/fn.o \
+RUN: --end-group -o %t4
+
+# Test alias options too, as they are more widely used
+# Test group
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o '-(' \
+RUN: %p/Inputs/group/libfn.a %p/Inputs/group/libfn1.a '-)' -o %t1.alias
+
+# Mix object files in group
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o '-(' \
+RUN: %p/Inputs/group/fn.o %p/Inputs/group/fn2.o \
+RUN: %p/Inputs/group/fn1.o '-)' -o %t2.alias
+
+# Mix Whole archive input, the group should not iterate the file libfn.a
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o '-(' \
+RUN: --whole-archive %p/Inputs/group/libfn.a --no-whole-archive \
+RUN: %p/Inputs/group/libfn1.a '-)' -o %t3.alias
+
+RUN: llvm-nm %t1 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+RUN: llvm-nm %t2 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+RUN: llvm-nm %t3 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+RUN: llvm-nm %t1.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+RUN: llvm-nm %t2.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+RUN: llvm-nm %t3.alias | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+
+RESOLVEDEXTERNAL: {{[0-9a-z]+}} T fn2
diff --git a/test/old-elf/X86_64/startGroupEndGroupWithDynlib.test b/test/old-elf/X86_64/startGroupEndGroupWithDynlib.test
new file mode 100644
index 000000000000..30bfe1530f8e
--- /dev/null
+++ b/test/old-elf/X86_64/startGroupEndGroupWithDynlib.test
@@ -0,0 +1,10 @@
+# This tests functionality of --start-group, --end-group with a dynamic library
+
+# Mix dynamic libraries/object files in group
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/group/1.o --start-group \
+RUN: %p/Inputs/group/libfn.so %p/Inputs/group/fn2.o \
+RUN: %p/Inputs/group/fn1.o --end-group -o %t1
+
+RUN: llvm-nm %t1 | FileCheck -check-prefix=RESOLVEDEXTERNAL %s
+
+RESOLVEDEXTERNAL: {{[0-9a-z]+}} T fn2
diff --git a/test/old-elf/X86_64/staticlib-search.test b/test/old-elf/X86_64/staticlib-search.test
new file mode 100644
index 000000000000..b84bd299f385
--- /dev/null
+++ b/test/old-elf/X86_64/staticlib-search.test
@@ -0,0 +1,6 @@
+# This tests the functionality for finding the static library libfn.a for ELF
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/main.o -L%p/Inputs/ -lfn -o %t \
+RUN: --noinhibit-exec -static -t 2> %t1
+RUN: FileCheck %s < %t1
+
+CHECK: {{[\/0-9A-Za-z_]+}}libfn.a
diff --git a/test/old-elf/X86_64/undef.test b/test/old-elf/X86_64/undef.test
new file mode 100644
index 000000000000..f948286a339b
--- /dev/null
+++ b/test/old-elf/X86_64/undef.test
@@ -0,0 +1,18 @@
+# This tests the functionality that an undefined symbol thats defined in the
+# commmand line pulls in the required object file from the archive library
+# which is usually the usecase for it
+RUN: lld -flavor old-gnu -target x86_64 -u fn %p/Inputs/libfn.a -o %t --noinhibit-exec
+RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=SYMFROMARCHIVE %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/libfn.a -o %t --noinhibit-exec
+RUN: llvm-readobj -symbols %t | FileCheck %s
+
+SYMFROMARCHIVE: Symbol {
+SYMFROMARCHIVE: Name: fn ({{[0-9]+}}
+SYMFROMARCHIVE: Size: 11
+SYMFROMARCHIVE: Binding: Global (0x1)
+SYMFROMARCHIVE: Type: Function (0x2)
+SYMFROMARCHIVE: Other: 0
+SYMFROMARCHIVE: Section: .text
+SYMFROMARCHIVE: }
+
+CHECK-NOT: Name: fn
diff --git a/test/old-elf/X86_64/underscore-end.test b/test/old-elf/X86_64/underscore-end.test
new file mode 100644
index 000000000000..4ca0c94013ea
--- /dev/null
+++ b/test/old-elf/X86_64/underscore-end.test
@@ -0,0 +1,81 @@
+# This tests verifies that the value of _end symbol is point to the right value
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/nmagic.o \
+RUN: --noinhibit-exec -o %t --nmagic
+RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=NMAGICABSSYMBOLS %s
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/nmagic.o \
+RUN: --noinhibit-exec -o %t --omagic
+RUN: llvm-readobj -symbols %t | FileCheck -check-prefix=OMAGICABSSYMBOLS %s
+
+NMAGICABSSYMBOLS: Symbol {
+NMAGICABSSYMBOLS: Name: __bss_start ({{[0-9]+}}
+NMAGICABSSYMBOLS: Value: 0x40100C
+NMAGICABSSYMBOLS: Size: 0
+NMAGICABSSYMBOLS: Binding: Global (0x1)
+NMAGICABSSYMBOLS: Type: Object (0x1)
+NMAGICABSSYMBOLS: Other: 0
+NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+NMAGICABSSYMBOLS: }
+NMAGICABSSYMBOLS: Symbol {
+NMAGICABSSYMBOLS: Name: __bss_end ({{[0-9]+}}
+NMAGICABSSYMBOLS: Value: 0x40100C
+NMAGICABSSYMBOLS: Size: 0
+NMAGICABSSYMBOLS: Binding: Global (0x1)
+NMAGICABSSYMBOLS: Type: Object (0x1)
+NMAGICABSSYMBOLS: Other: 0
+NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+NMAGICABSSYMBOLS: }
+NMAGICABSSYMBOLS: Symbol {
+NMAGICABSSYMBOLS: Name: _end ({{[0-9]+}}
+NMAGICABSSYMBOLS: Value: 0x40100C
+NMAGICABSSYMBOLS: Size: 0
+NMAGICABSSYMBOLS: Binding: Global (0x1)
+NMAGICABSSYMBOLS: Type: Object (0x1)
+NMAGICABSSYMBOLS: Other: 0
+NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+NMAGICABSSYMBOLS: }
+NMAGICABSSYMBOLS: Symbol {
+NMAGICABSSYMBOLS: Name: end ({{[0-9]+}}
+NMAGICABSSYMBOLS: Value: 0x40100C
+NMAGICABSSYMBOLS: Size: 0
+NMAGICABSSYMBOLS: Binding: Global (0x1)
+NMAGICABSSYMBOLS: Type: Object (0x1)
+NMAGICABSSYMBOLS: Other: 0
+NMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+NMAGICABSSYMBOLS: }
+
+OMAGICABSSYMBOLS: Symbol {
+OMAGICABSSYMBOLS: Name: __bss_start ({{[0-9]+}})
+OMAGICABSSYMBOLS: Value: 0x400144
+OMAGICABSSYMBOLS: Size: 0
+OMAGICABSSYMBOLS: Binding: Global (0x1)
+OMAGICABSSYMBOLS: Type: Object (0x1)
+OMAGICABSSYMBOLS: Other: 0
+OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+OMAGICABSSYMBOLS: }
+OMAGICABSSYMBOLS: Symbol {
+OMAGICABSSYMBOLS: Name: __bss_end ({{[0-9]+}}
+OMAGICABSSYMBOLS: Value: 0x400144
+OMAGICABSSYMBOLS: Size: 0
+OMAGICABSSYMBOLS: Binding: Global (0x1)
+OMAGICABSSYMBOLS: Type: Object (0x1)
+OMAGICABSSYMBOLS: Other: 0
+OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+OMAGICABSSYMBOLS: }
+OMAGICABSSYMBOLS: Symbol {
+OMAGICABSSYMBOLS: Name: _end ({{[0-9]+}}
+OMAGICABSSYMBOLS: Value: 0x400144
+OMAGICABSSYMBOLS: Size: 0
+OMAGICABSSYMBOLS: Binding: Global (0x1)
+OMAGICABSSYMBOLS: Type: Object (0x1)
+OMAGICABSSYMBOLS: Other: 0
+OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+OMAGICABSSYMBOLS: }
+OMAGICABSSYMBOLS: Symbol {
+OMAGICABSSYMBOLS: Name: end ({{[0-9]+}}
+OMAGICABSSYMBOLS: Value: 0x400144
+OMAGICABSSYMBOLS: Size: 0
+OMAGICABSSYMBOLS: Binding: Global (0x1)
+OMAGICABSSYMBOLS: Type: Object (0x1)
+OMAGICABSSYMBOLS: Other: 0
+OMAGICABSSYMBOLS: Section: Absolute (0xFFF1)
+OMAGICABSSYMBOLS: }
diff --git a/test/old-elf/X86_64/weak-override.test b/test/old-elf/X86_64/weak-override.test
new file mode 100644
index 000000000000..25cb9d5d687f
--- /dev/null
+++ b/test/old-elf/X86_64/weak-override.test
@@ -0,0 +1,45 @@
+# Test for weak symbol getting overridden
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/weak.o %p/Inputs/ovrd.o \
+RUN: -o %t --noinhibit-exec
+RUN: llvm-nm %t | FileCheck -check-prefix=WEAKORDER %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/weak.o \
+RUN: %p/Inputs/ovrd.o -o %t2 --output-filetype=yaml --noinhibit-exec
+RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
+
+WEAKORDER: {{[0-9a-c]+}} T f
+
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: fn
+WEAKATOMSORDER: - name: fn
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: [[CONSTSTRA:[-a-zA-Z0-9_]+]]
+WEAKATOMSORDER: - ref-name: [[CONSTSTRA]]
+WEAKATOMSORDER: scope: global
+WEAKATOMSORDER: content: [ 55, 48, 89, E5, BF, 00, 00, 00, 00, E8, 00, 00,
+WEAKATOMSORDER: 00, 00, 5D, C3 ]
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: main
+WEAKATOMSORDER: - name: main
+WEAKATOMSORDER: scope: global
+WEAKATOMSORDER: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, E8, 00, 00,
+WEAKATOMSORDER: 00, 00, B8, 00, 00, 00, 00, 5D, C3 ]
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: R_X86_64_PC32
+WEAKATOMSORDER: offset: 10
+WEAKATOMSORDER: target: f
+WEAKATOMSORDER: addend: -4
+WEAKATOMSORDER: - ref-name: {{[0-9A-Z]+}}
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: f
+WEAKATOMSORDER: - name: f
+WEAKATOMSORDER: scope: global
+WEAKATOMSORDER: content: [ 55, 48, 89, E5, BF, 00, 00, 00, 00, E8, 00, 00,
+WEAKATOMSORDER: 00, 00, 5D, C3 ]
diff --git a/test/old-elf/X86_64/weak-zero-sized.test b/test/old-elf/X86_64/weak-zero-sized.test
new file mode 100644
index 000000000000..93e27a355d64
--- /dev/null
+++ b/test/old-elf/X86_64/weak-zero-sized.test
@@ -0,0 +1,26 @@
+# Test for zero sized weak atoms, there is only a single weak atom
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/weak-zero-sized.o -o %t \
+RUN: --noinhibit-exec
+RUN: llvm-nm %t | FileCheck -check-prefix=WEAKORDER %s
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/weak-zero-sized.o \
+RUN: --output-filetype=yaml -o %t2 --noinhibit-exec
+RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
+
+WEAKORDER: 004001a4 T _start
+
+WEAKATOMSORDER: alignment: 4
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: [[TARGETC:[-a-zA-Z0-9_]+]]
+WEAKATOMSORDER: - name: [[TARGETA:[-a-zA-Z0-9_]+]]
+WEAKATOMSORDER: scope: global
+WEAKATOMSORDER: merge: as-weak
+WEAKATOMSORDER: alignment: 4
+WEAKATOMSORDER: references:
+WEAKATOMSORDER: - kind: layout-after
+WEAKATOMSORDER: offset: 0
+WEAKATOMSORDER: target: [[TARGETC]]
+WEAKATOMSORDER: - ref-name: [[TARGETC]]
+WEAKATOMSORDER: scope: global
+WEAKATOMSORDER: content: [ C3 ]
+WEAKATOMSORDER: alignment: 4
diff --git a/test/old-elf/X86_64/weaksym.test b/test/old-elf/X86_64/weaksym.test
new file mode 100644
index 000000000000..9e4f2da9bdba
--- /dev/null
+++ b/test/old-elf/X86_64/weaksym.test
@@ -0,0 +1,77 @@
+# Tests that an executable with a weak undefine will put this symbol in the
+# dynamic symbol table if the executable has a dynamic relocation against this
+# symbol.
+
+#RUN: yaml2obj --format elf %s -o %t.o
+#RUN: lld -flavor old-gnu -target x86_64 -e main %t.o -o %t1
+#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+#CHECKSYMS: Name: x@
+#CHECKSYMS-NEXT: Value: 0x0
+#CHECKSYMS-NEXT: Size: 0
+#CHECKSYMS-NEXT: Binding: Weak (0x2)
+#CHECKSYMS-NEXT: Type: None (0x0)
+#CHECKSYMS-NEXT: Other: 0
+#CHECKSYMS-NEXT: Section: Undefined (0x0)
+
+# The object file above corresponds to the following C program compiled with
+# -fPIC:
+# extern int *x __attribute__((weak));
+#
+# int main() {
+# if (x)
+# return 1;
+# return 0;
+# }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5488B0500000000C745FC00000000488138000000000F840C000000C745FC01000000E907000000C745FC000000008B45FC5DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000007
+ Symbol: x
+ Type: R_X86_64_GOTPCREL
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000037
+ - Name: _GLOBAL_OFFSET_TABLE_
+ Weak:
+ - Name: x
diff --git a/test/old-elf/X86_64/yamlinput.test b/test/old-elf/X86_64/yamlinput.test
new file mode 100644
index 000000000000..1c51811eec95
--- /dev/null
+++ b/test/old-elf/X86_64/yamlinput.test
@@ -0,0 +1,166 @@
+# This tests the functionality that lld is able to read
+# an input YAML from a previous link
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/initfini.o \
+RUN: --noinhibit-exec --output-filetype=yaml -o %t.objtxt
+RUN: lld -flavor old-gnu -target x86_64-linux %t.objtxt \
+RUN: --noinhibit-exec -o %t1
+RUN: llvm-readobj -sections %t1 | FileCheck %s -check-prefix=SECTIONS
+
+SECTIONS: Section {
+SECTIONS: Index: 0
+SECTIONS: Name: (0)
+SECTIONS: Type: SHT_NULL (0x0)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 1
+SECTIONS: Name: .interp
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 2
+SECTIONS: Name: .hash
+SECTIONS: Type: SHT_HASH (0x5)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 3
+SECTIONS: Name: .dynsym
+SECTIONS: Type: SHT_DYNSYM (0xB)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 4
+SECTIONS: Name: .dynstr
+SECTIONS: Type: SHT_STRTAB (0x3)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 5
+SECTIONS: Name: .text
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x6)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_EXECINSTR (0x4)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 6
+SECTIONS: Name: .rodata
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 7
+SECTIONS: Name: .eh_frame
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x2)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 8
+SECTIONS: Name: .eh_frame_hdr
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 9
+SECTIONS: Name: .init_array
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 10
+SECTIONS: Name: .fini_array
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 11
+SECTIONS: Name: .dynamic
+SECTIONS: Type: SHT_DYNAMIC (0x6)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 12
+SECTIONS: Name: .got.plt
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 13
+SECTIONS: Name: .data
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 14
+SECTIONS: Name: .bss
+SECTIONS: Type: SHT_NOBITS (0x8)
+SECTIONS: Flags [ (0x3)
+SECTIONS: SHF_ALLOC (0x2)
+SECTIONS: SHF_WRITE (0x1)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 15
+SECTIONS: Name: .comment
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 16
+SECTIONS: Name: .note.GNU-stack
+SECTIONS: Type: SHT_PROGBITS (0x1)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 17
+SECTIONS: Name: .shstrtab
+SECTIONS: Type: SHT_STRTAB (0x3)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 18
+SECTIONS: Name: .symtab
+SECTIONS: Type: SHT_SYMTAB (0x2)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
+SECTIONS: Section {
+SECTIONS: Index: 19
+SECTIONS: Name: .strtab
+SECTIONS: Type: SHT_STRTAB (0x3)
+SECTIONS: Flags [ (0x0)
+SECTIONS: ]
+SECTIONS: }
diff --git a/test/old-elf/abs-dup.objtxt b/test/old-elf/abs-dup.objtxt
new file mode 100644
index 000000000000..c662c9b44b4a
--- /dev/null
+++ b/test/old-elf/abs-dup.objtxt
@@ -0,0 +1,19 @@
+# Tests handling an absolute symbol with no name
+# RUN: lld -flavor old-gnu -target x86_64 -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+absolute-atoms:
+ - name: abs
+ scope: static
+ value: 0x10
+ - name: ''
+ scope: static
+ value: 0x15
+
+# CHECK: absolute-atoms:
+# CHECK: - name: abs
+# CHECK: scope: static
+# CHECK: value: 0x0000000000000010
+# CHECK: - name: ''
+# CHECK: scope: static
+# CHECK: value: 0x0000000000000015
diff --git a/test/old-elf/abs.test b/test/old-elf/abs.test
new file mode 100644
index 000000000000..f542582bfa85
--- /dev/null
+++ b/test/old-elf/abs.test
@@ -0,0 +1,19 @@
+#
+# Source File:
+# .local absGlobalSymbol
+# .set absLocalSymbol,0xC0000
+# .type absLocalSymbol, @object
+# .globl absGlobalSymbol
+# .set absGlobalSymbol,0xD0000
+# .type absGlobalSymbol, @object
+
+# built using: "gcc -m32"
+#
+RUN: lld -flavor old-gnu -target i386 --output-filetype=yaml -r %p/Inputs/abs-test.i386 | FileCheck -check-prefix=YAML %s
+
+YAML: absolute-atoms:
+YAML: - name: absLocalSymbol
+YAML: value: {{0x[0]+C0000}}
+YAML: - name: absGlobalSymbol
+YAML: scope: global
+YAML: value: {{0x[0]+D0000}}
diff --git a/test/old-elf/allowduplicates.objtxt b/test/old-elf/allowduplicates.objtxt
new file mode 100644
index 000000000000..b2f263148b60
--- /dev/null
+++ b/test/old-elf/allowduplicates.objtxt
@@ -0,0 +1,41 @@
+# RUN: lld -flavor old-gnu -target x86_64 --allow-multiple-definition %s \
+# RUN: %p/Inputs/allowduplicates.objtxt \
+# RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
+#
+# RUN: not lld -flavor old-gnu -target x86_64 %s %p/Inputs/allowduplicates.objtxt \
+# RUN: --output-filetype=yaml \
+# RUN: --noinhibit-exec 2>&1 | FileCheck -check-prefix=ERROR %s
+#
+# RUN: lld -flavor old-gnu -target x86_64 -z muldefs %s \
+# RUN: %p/Inputs/allowduplicates.objtxt \
+# RUN: --noinhibit-exec --output-filetype=yaml | FileCheck %s
+
+---
+defined-atoms:
+ - name: .text
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
+ 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+---
+
+# CHECK: defined-atoms:
+# CHECK: - name: .text
+# CHECK: alignment: 16
+# CHECK: section-choice: custom-required
+# CHECK: section-name: .text
+# CHECK: - name: main
+# CHECK: scope: global
+# CHECK: content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
+# CHECK: 00, C3 ]
+# CHECK: alignment: 16
+# CHECK: section-choice: custom-required
+# CHECK: section-name: .text
+
+# ERROR: duplicate symbol error
diff --git a/test/old-elf/archive-elf-forceload.test b/test/old-elf/archive-elf-forceload.test
new file mode 100644
index 000000000000..db5ba6cdfaa2
--- /dev/null
+++ b/test/old-elf/archive-elf-forceload.test
@@ -0,0 +1,43 @@
+# Tests the functionality of archive libraries reading
+# and resolution
+# Note: The binary files would not be required once we have support to generate
+# binary archives from textual(yaml) input
+#
+# Tests generated using the source files below
+# main file
+# int main()
+# {
+# fn();
+# return 0;
+# }
+#
+# archive file
+# int fn()
+# {
+# return 0;
+# }
+#
+# int fn1()
+# {
+# return 0;
+# }
+# gcc -c main.c fn.c fn1.c
+
+RUN: lld -flavor old-gnu -target x86_64-linux -e main %p/Inputs/mainobj.x86_64 \
+RUN: --whole-archive %p/Inputs/libfnarchive.a --no-whole-archive --output-filetype=yaml \
+RUN: | FileCheck -check-prefix FORCELOAD %s
+
+FORCELOAD: defined-atoms:
+FORCELOAD: - name: fn1
+FORCELOAD: scope: global
+FORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
+FORCELOAD: - name: fn
+FORCELOAD: scope: global
+FORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
+FORCELOAD: absolute-atoms:
+FORCELOAD: - name: main.c
+FORCELOAD: value: 0x0
+FORCELOAD: - name: fn1.c
+FORCELOAD: value: 0x0
+FORCELOAD: - name: fn.c
+FORCELOAD: value: 0x0
diff --git a/test/old-elf/archive-elf.test b/test/old-elf/archive-elf.test
new file mode 100644
index 000000000000..7784eb9279dc
--- /dev/null
+++ b/test/old-elf/archive-elf.test
@@ -0,0 +1,38 @@
+# Tests the functionality of archive libraries reading
+# and resolution
+# Note: The binary files would not be required once we have support to generate
+# binary archives from textual(yaml) input
+#
+# Tests generated using the source files below
+# main file
+# int main()
+# {
+# fn();
+# return 0;
+# }
+#
+# archive file
+# int fn()
+# {
+# return 0;
+# }
+#
+# int fn1()
+# {
+# return 0;
+# }
+# gcc -c main.c fn.c fn1.c
+
+RUN: lld -flavor old-gnu -target x86_64-linux --output-filetype=yaml -r \
+RUN: %p/Inputs/mainobj.x86_64 %p/Inputs/libfnarchive.a | \
+RUN: FileCheck -check-prefix NOFORCELOAD %s
+
+NOFORCELOAD: defined-atoms:
+NOFORCELOAD: - name: fn
+NOFORCELOAD: scope: global
+NOFORCELOAD: content: [ 55, 48, 89, E5, B8, 00, 00, 00, 00, 5D, C3 ]
+NOFORCELOAD: absolute-atoms:
+NOFORCELOAD: - name: main.c
+NOFORCELOAD: value: 0x0
+NOFORCELOAD: - name: fn.c
+NOFORCELOAD: value: 0x0
diff --git a/test/old-elf/as-needed.test b/test/old-elf/as-needed.test
new file mode 100644
index 000000000000..bcebfbac2f24
--- /dev/null
+++ b/test/old-elf/as-needed.test
@@ -0,0 +1,15 @@
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
+RUN: --as-needed %p/Inputs/shared.so-x86-64 %p/Inputs/libifunc.x86-64.so \
+RUN: -o %t1 -e main --allow-shlib-undefined
+RUN: llvm-readobj -dynamic-table %t1 | FileCheck %s -check-prefix AS_NEEDED
+
+AS_NEEDED: NEEDED SharedLibrary (shared.so-x86-64)
+AS_NEEDED-NOT: NEEDED SharedLibrary (libifunc.x86-64.so)
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 %p/Inputs/libifunc.x86-64.so \
+RUN: -o %t2 -e main --allow-shlib-undefined
+RUN: llvm-readobj -dynamic-table %t2 | FileCheck %s -check-prefix NO_AS_NEEDED
+
+NO_AS_NEEDED: NEEDED SharedLibrary (shared.so-x86-64)
+NO_AS_NEEDED: NEEDED SharedLibrary (libifunc.x86-64.so)
diff --git a/test/old-elf/branch.test b/test/old-elf/branch.test
new file mode 100644
index 000000000000..116fd0f07c5e
--- /dev/null
+++ b/test/old-elf/branch.test
@@ -0,0 +1,34 @@
+RUN: lld -flavor old-gnu -target hexagon -static --output-filetype=yaml \
+RUN: %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon --noinhibit-exec | FileCheck %s -check-prefix hexagon-yaml
+RUN: lld -flavor old-gnu -target hexagon -e target -o %t1 \
+RUN: %p/Inputs/branch-test.hexagon %p/Inputs/target-test.hexagon --noinhibit-exec
+RUN: llvm-readobj -h %t1 | FileCheck -check-prefix=hexagon-readobj %s
+
+hexagon-yaml: - name: back
+hexagon-yaml: scope: global
+hexagon-yaml: content: [ 00, C0, 00, 7F, 00, C0, 00, 5A, 00, 00, 00, 00,
+hexagon-yaml: 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 ]
+hexagon-yaml: references:
+hexagon-yaml: - kind:
+hexagon-yaml: offset: 4
+hexagon-yaml: target: target
+
+hexagon-yaml: - name: target
+hexagon-yaml: scope: global
+hexagon-yaml: content: [ 00, C0, 00, 5A ]
+hexagon-yaml: references:
+hexagon-yaml: - kind:
+hexagon-yaml: offset: 0
+hexagon-yaml: target: back
+
+
+hexagon-readobj: ElfHeader {
+hexagon-readobj: Ident {
+hexagon-readobj: Class: 32-bit (0x1)
+hexagon-readobj: DataEncoding: LittleEndian (0x1)
+hexagon-readobj: FileVersion: 1
+hexagon-readobj: OS/ABI: SystemV (0x0)
+hexagon-readobj: ABIVersion: 0
+hexagon-readobj: }
+hexagon-readobj: Type: Executable (0x2)
+hexagon-readobj: Machine: EM_HEXAGON (0xA4)
diff --git a/test/old-elf/check.test b/test/old-elf/check.test
new file mode 100644
index 000000000000..3fc11728e12d
--- /dev/null
+++ b/test/old-elf/check.test
@@ -0,0 +1,39 @@
+# This tests the basic functionality of ordering data and functions as they
+# appear in the inputs
+RUN: lld -flavor old-gnu -target i386 -e global_func --noinhibit-exec --output-filetype=yaml \
+RUN: %p/Inputs/object-test.elf-i386 -o %t
+RUN: FileCheck %s -check-prefix ELF-i386 < %t
+RUN: lld -flavor old-gnu -target hexagon -e global_func --noinhibit-exec --output-filetype=yaml \
+RUN: %p/Inputs/object-test.elf-hexagon -o %t1
+RUN: FileCheck %s -check-prefix ELF-hexagon < %t1
+
+ELF-i386: defined-atoms:
+ELF-i386: - name: global_func
+ELF-i386: - name: static_func
+ELF-i386: - name: weak_func
+ELF-i386: - name: hidden_func
+ELF-i386: - name: no_dead_strip
+ELF-i386: - name: no_special_section_func
+ELF-i386: - name: global_variable
+ELF-i386: - name: uninitialized_static_variable
+ELF-i386: - name: special_section_func
+ELF-i386: undefined-atoms:
+ELF-i386: - name: puts
+ELF-i386: absolute-atoms:
+ELF-i386: - name: sample.c
+
+ELF-hexagon: - name: global_func
+ELF-hexagon: - name: static_func
+ELF-hexagon: - name: weak_func
+ELF-hexagon: - name: hidden_func
+ELF-hexagon: - name: no_dead_strip
+ELF-hexagon: - name: no_special_section_func
+ELF-hexagon: - name: global_variable
+ELF-hexagon: - name: uninitialized_static_variable
+ELF-hexagon: - name: special_section_func
+ELF-hexagon: undefined-atoms:
+ELF-hexagon: - name: puts
+ELF-hexagon: absolute-atoms:
+ELF-hexagon: - name: sample.c
+ELF-hexagon: scope: static
+ELF-hexagon: value: 0x0000000000000000
diff --git a/test/old-elf/checkrodata.test b/test/old-elf/checkrodata.test
new file mode 100644
index 000000000000..71304a443b8b
--- /dev/null
+++ b/test/old-elf/checkrodata.test
@@ -0,0 +1,9 @@
+
+RUN: lld -flavor old-gnu -target i386 -o %t1 %p/Inputs/rodata-test.i386 --noinhibit-exec
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=i386 %s
+RUN: lld -flavor old-gnu -target hexagon -o %t2 %p/Inputs/rodata-test.hexagon --noinhibit-exec
+RUN: llvm-objdump -section-headers %t2 | FileCheck -check-prefix=hexagon %s
+
+i386: .rodata 00000004 0000000000000114 DATA
+
+hexagon: .rodata 00000004 0000000000000114 DATA
diff --git a/test/old-elf/common.test b/test/old-elf/common.test
new file mode 100644
index 000000000000..e337ac399140
--- /dev/null
+++ b/test/old-elf/common.test
@@ -0,0 +1,10 @@
+RUN: lld -flavor old-gnu -target x86_64-linux -o %t %p/Inputs/relocs.x86-64 \
+RUN: -e _start -static
+RUN: llvm-readobj -t %t | FileCheck %s
+
+CHECK: Symbol {
+CHECK: Name: i
+CHECK-NEXT: Value:
+CHECK-NEXT: Size:
+CHECK-NEXT: Binding:
+CHECK-NEXT: Type: Object
diff --git a/test/old-elf/consecutive-weak-sym-defs.test b/test/old-elf/consecutive-weak-sym-defs.test
new file mode 100644
index 000000000000..0120aa126551
--- /dev/null
+++ b/test/old-elf/consecutive-weak-sym-defs.test
@@ -0,0 +1,81 @@
+#Tests that multiple consecutive weak symbol definitions do not confuse the
+#ELF reader. For example:
+#
+# my_weak_func1:
+# my_weak_func2:
+# my_weak_func3:
+# code
+#
+#If my_weak_func2 is merged to other definition, this should not disturb the
+#definition my_weak_func1 to "code".
+#
+#
+#RUN: yaml2obj -format=elf %p/Inputs/consecutive-weak-defs.o.yaml -o=%t1.o
+#RUN: yaml2obj -format=elf %p/Inputs/main-with-global-def.o.yaml -o=%t2.o
+#RUN: lld -flavor old-gnu -target x86_64 %t1.o %t2.o -e=main -o %t1
+#RUN: obj2yaml %t1 | FileCheck -check-prefix CHECKLAYOUT %s
+#
+# Check that the layout has not been changed:
+#
+#CHECKLAYOUT: Name: .text
+#CHECKLAYOUT-NEXT: Type:
+#CHECKLAYOUT-NEXT: Flags:
+#CHECKLAYOUT-NEXT: Address:
+#CHECKLAYOUT-NEXT: AddressAlign:
+#CHECKLAYOUT-NEXT: Content: 554889E5E8020000005DC3554889E5B8640000005DC3
+# ^~~> my_func ^~~> my_weak_func
+#
+#
+#
+#Our two input files were produced by the following code:
+#
+#Inputs/consecutive-weak-defs.o.yaml (this one is in assembly to allow us to
+# easily define multiple labels)
+#
+# .text
+# .globl my_func
+# .type my_func,@function
+# my_func:
+# pushq %rbp
+# movq %rsp, %rbp
+# callq my_weak_func
+# popq %rbp
+# retq
+# .Ltmp0:
+# .size my_func, .Ltmp0-my_func
+#
+# .text
+# .weak my_weak_func
+# .type my_weak_func,@function
+# .weak my_weak_func2
+# .type my_weak_func2,@function
+# .weak my_weak_func3
+# .type my_weak_func3,@function
+# my_weak_func:
+# my_weak_func2:
+# my_weak_func3:
+# pushq %rbp
+# movq %rsp, %rbp
+# movl $100, %eax
+# popq %rbp
+# retq
+# .Ltmp1:
+# .size my_weak_func, .Ltmp1-my_weak_func
+# .size my_weak_func2, .Ltmp1-my_weak_func2
+# .size my_weak_func3, .Ltmp1-my_weak_func3
+#
+#Inputs/main-with-global-def.o.yaml:
+#
+# int my_func();
+#
+# int my_weak_func2() {
+# return 200;
+# }
+#
+# int main() {
+# return my_func();
+# }
+#
+#-------------------------------------------------------------------------------
+# The net effect is that this program should return 100.
+
diff --git a/test/old-elf/defsym.objtxt b/test/old-elf/defsym.objtxt
new file mode 100644
index 000000000000..7fdc20d4dd93
--- /dev/null
+++ b/test/old-elf/defsym.objtxt
@@ -0,0 +1,31 @@
+# RUN: lld -flavor old-gnu -target x86_64 --defsym=foo=0x1234 -r %s \
+# RUN: --output-filetype=yaml | FileCheck -check-prefix=ABS %s
+
+# RUN: lld -flavor old-gnu -target x86_64 --defsym=foo=main -r %s \
+# RUN: --output-filetype=yaml | FileCheck -check-prefix=ALIAS %s
+
+# RUN: lld -flavor old-gnu -target x86_64 --defsym foo=main -r %s \
+# RUN: --output-filetype=yaml | FileCheck -check-prefix=ALIAS %s
+
+defined-atoms:
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+
+# ABS: absolute-atoms:
+# ABS: - name: foo
+# ABS: scope: global
+# ABS: value: 0x0000000000001234
+
+# ALIAS: defined-atoms:
+# ALIAS: - name: foo
+# ALIAS: scope: global
+# ALIAS: section-choice: custom-required
+# ALIAS: section-name: .text
+# ALIAS: references:
+# ALIAS: - kind: layout-after
+# ALIAS: offset: 0
+# ALIAS: target: main
diff --git a/test/old-elf/discard-all.test b/test/old-elf/discard-all.test
new file mode 100644
index 000000000000..7fca435008ab
--- /dev/null
+++ b/test/old-elf/discard-all.test
@@ -0,0 +1,88 @@
+# Test that -x/--discard all works.
+#
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -e=main -x -o %t1
+#RUN: llvm-objdump -t %t1 | FileCheck %s
+
+#CHECK-NOT: 0000000000400210 l F .text 00000009 local
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10C745FC00000000E81C000000B9000000008945F889C84883C4105DC36666662E0F1F840000000000554889E58B45FC5DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000002400000000410E108602430D060000001800000038000000000000000900000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 48
+Symbols:
+ Local:
+ - Name: local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000030
+ Size: 0x0000000000000009
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000024
+...
diff --git a/test/old-elf/discard-locals.test b/test/old-elf/discard-locals.test
new file mode 100644
index 000000000000..d1a0918949ad
--- /dev/null
+++ b/test/old-elf/discard-locals.test
@@ -0,0 +1,65 @@
+# Test that -X/--discard-locals works.
+#
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -shared -X -o %t1
+#RUN: llvm-objdump -t %t1 | FileCheck %s
+
+#CHECK-NOT: 0000000000400121 l .rodata 00000000 .Lsym8
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: 00000000F20F100D00000000C3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .rodata.str1.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000008
+ Symbol: .Lsym8
+ Type: R_X86_64_PC32
+ Addend: -4
+Symbols:
+ Local:
+ - Name: .Lsym8
+ Section: .rodata.str1.1
+ - Name: test
+ Section: .text
+ Value: 0x000000000000000C
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .rodata.str1.1
+ Type: STT_SECTION
+ Section: .rodata.str1.1
+...
diff --git a/test/old-elf/dynamic-segorder.test b/test/old-elf/dynamic-segorder.test
new file mode 100644
index 000000000000..e9143d83f0f6
--- /dev/null
+++ b/test/old-elf/dynamic-segorder.test
@@ -0,0 +1,17 @@
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
+RUN: --defsym=__tls_get_addr=0
+RUN: llvm-objdump -p %t | FileCheck %s
+
+CHECK: PHDR
+CHECK: flags r-x
+CHECK: INTERP
+CHECK: flags r--
+CHECK: LOAD
+CHECK: flags r-x
+CHECK: LOAD
+CHECK: flags rw-
+CHECK: DYNAMIC
+CHECK: flags rw-
+CHECK: TLS
+CHECK: flags rw-
diff --git a/test/old-elf/dynamic-undef.test b/test/old-elf/dynamic-undef.test
new file mode 100644
index 000000000000..fc661684b19b
--- /dev/null
+++ b/test/old-elf/dynamic-undef.test
@@ -0,0 +1,38 @@
+#
+# This test creates a executable and tests the options that are used to
+# to create an executable and a shared library
+#
+# This test will fail because there are unresolved symbols from the shared
+# library and we are passing --no-allow-shlib-undefined
+RUN: not lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --no-allow-shlib-undefined 2> %t1
+RUN: FileCheck -check-prefix=EXEC %s < %t1
+# This test will pass because of --allow-shlib-undefined
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
+RUN: --defsym=__tls_get_addr=0
+# This test will pass becase --allow-shlib-undefined is the default.
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t -e main \
+RUN: --defsym=__tls_get_addr=0
+# Building shared libraries should not fail when there is a undefined symbol.
+# Test creation of shared library, this should pass because we are using
+# shared option and by default, dynamic library wouldn't create undefined atoms
+# from the input shared library
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t.usenoundefines -e main -shared
+RUN: llvm-readobj -symbols %t.usenoundefines | FileCheck %s -check-prefix=SHLIB-NOUNDEF
+# Test creation of shared library, this should fail because we are using
+# shared option setting the options to use the shared library undefines to
+# create undefined atoms from the input shared library
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t.useundefines -e main -shared \
+RUN: --use-shlib-undefines --no-allow-shlib-undefined 2> %t2
+RUN: llvm-readobj -symbols %t.useundefines | FileCheck -check-prefix=SHLIB-UNDEF-SYMBOLS %s
+
+EXEC: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: puts
+SHLIB: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: puts
+EXEC-NOT: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: weakfoo
+SHLIB-NOT: Undefined symbol: {{.+[\\/]}}shared.so-x86-64: weakfoo
+SHLIB-NOUNDEF-NOT: Name: puts
+SHLIB-UNDEF-SYMBOLS: Name: puts
diff --git a/test/old-elf/dynamic.test b/test/old-elf/dynamic.test
new file mode 100644
index 000000000000..2b548a7aaf5e
--- /dev/null
+++ b/test/old-elf/dynamic.test
@@ -0,0 +1,80 @@
+# Checks functionality of dynamic executables
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
+RUN: -rpath /l1:/l2 -rpath /l3
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t2 --allow-shlib-undefined \
+RUN: --noinhibit-exec
+RUN: llvm-objdump -p %t >> %t2
+RUN: llvm-readobj -s -dyn-symbols -dynamic-table %t >> %t2
+RUN: FileCheck %s < %t2
+
+CHECK: name: main
+CHECK: kind: R_X86_64_PC32
+CHECK: offset: 18
+CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
+
+CHECK: name: [[PLTNAME]]
+CHECK: type: stub
+
+CHECK: type: got
+CHECK: references:
+CHECK: kind: R_X86_64_JUMP_SLOT
+
+CHECK: shared-library-atoms:
+CHECK: name: foo
+CHECK: load-name: shared.so-x86-64
+
+CHECK: PHDR off 0x{{0+}}40
+CHECK: INTERP
+CHECK: flags r--
+
+CHECK: Section {
+CHECK: Name: .hash
+CHECK-NEXT: Type: SHT_HASH
+CHECK-NEXT: Flags [
+CHECK-NEXT: SHF_ALLOC
+CHECK-NEXT: ]
+CHECK-NEXT: Address:
+CHECK-NEXT: Offset:
+CHECK-NEXT: Size: 32
+CHECK-NEXT: Link:
+CHECK-NEXT: Info:
+CHECK-NEXT: AddressAlignment: 8
+CHECK-NEXT: EntrySize:
+CHECK-NEXT: }
+
+CHECK: DynamicSymbols [
+CHECK: Symbol {
+CHECK: Name: foo
+CHECK-NEXT: Value: 0
+CHECK-NEXT: Size:
+CHECK-NEXT: Binding: Global
+CHECK-NEXT: Type: Function
+CHECK: }
+CHECK: Symbol {
+CHECK: Name: i
+CHECK-NEXT: Value: 0
+CHECK-NEXT: Size:
+CHECK-NEXT: Binding: Global
+CHECK-NEXT: Type: Object
+CHECK: }
+
+CHECK: DynamicSection [ (15 entries)
+CHECK: Tag Type Name/Value
+CHECK: 0x0000000000000004 HASH
+CHECK: 0x0000000000000005 STRTAB
+CHECK: 0x0000000000000006 SYMTAB
+CHECK: 0x000000000000000A STRSZ
+CHECK: 0x000000000000000B SYMENT 24
+CHECK: 0x0000000000000007 RELA
+CHECK: 0x0000000000000008 RELASZ 24
+CHECK: 0x0000000000000009 RELAENT 24
+CHECK: 0x0000000000000002 PLTRELSZ 24
+CHECK: 0x0000000000000003 PLTGOT
+CHECK: 0x0000000000000014 PLTREL RELA
+CHECK: 0x0000000000000017 JMPREL
+CHECK: 0x0000000000000001 NEEDED SharedLibrary (shared.so-x86-64)
+CHECK: 0x000000000000000F RPATH /l1:/l2:/l3
+CHECK: 0x0000000000000000 NULL 0x0
+CHECK: ]
diff --git a/test/old-elf/eh_frame_hdr.test b/test/old-elf/eh_frame_hdr.test
new file mode 100644
index 000000000000..74383b8dbc5b
--- /dev/null
+++ b/test/old-elf/eh_frame_hdr.test
@@ -0,0 +1,30 @@
+#RUN: yaml2obj -format=elf %s > %t
+#RUN: lld -flavor old-gnu -target x86_64-linux %t --noinhibit-exec \
+#RUN: -o %t1
+#RUN: llvm-objdump -s %t1 | FileCheck %s
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+- Name: .eh_frame
+ Type: SHT_PROGBITS
+ Content: "00"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC]
+
+Symbols:
+ Local:
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+
+# CHECK: Contents of section .eh_frame:
+# CHECK-NEXT: 4001e0 00
+# CHECK-NEXT: Contents of section .eh_frame_hdr:
+# CHECK-NEXT: 4001e8 011bffff f4ffffff
+# ^ 0x4001e0 - 0x4001e8 - 4 = 0xfffffff4
diff --git a/test/old-elf/entry.objtxt b/test/old-elf/entry.objtxt
new file mode 100644
index 000000000000..6590d139c417
--- /dev/null
+++ b/test/old-elf/entry.objtxt
@@ -0,0 +1,58 @@
+# Tests entry point handling
+#
+# Test generated using the source file below:
+#
+# int main()
+# {
+# return 0;
+# }
+#
+
+# RUN: lld -flavor old-gnu -target x86_64 %s -e _entrypoint --noinhibit-exec -o %t1
+# RUN: llvm-nm -n %t1 | FileCheck %s
+#
+# CHECK: U _entrypoint
+# CHECK: 004001e0 T main
+# CHECK: 00401000 D _DYNAMIC
+# CHECK: 00401060 A _end
+# CHECK: 00401060 A end
+
+defined-atoms:
+ - name: .text
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00,
+ 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+ - name: .data
+ type: data
+ alignment: 4
+ section-choice: custom-required
+ section-name: .data
+ - name: .bss
+ type: zero-fill
+ alignment: 4
+ section-choice: custom-required
+ section-name: .bss
+ - name: .note.GNU-stack
+ section-choice: custom-required
+ section-name: .note.GNU-stack
+ permissions: r--
+ - name: .eh_frame
+ content: [ 14, 00, 00, 00, 00, 00, 00, 00, 01, 7A, 52, 00,
+ 01, 78, 10, 01, 1B, 0C, 07, 08, 90, 01, 00, 00,
+ 14, 00, 00, 00, 1C, 00, 00, 00, 00, 00, 00, 00,
+ 0E, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 ]
+ alignment: 8
+ section-choice: custom-required
+ section-name: .eh_frame
+ permissions: r--
+ references:
+ - kind: R_X86_64_PC32
+ offset: 32
+ target: .text
diff --git a/test/old-elf/export-dynamic.test b/test/old-elf/export-dynamic.test
new file mode 100644
index 000000000000..b88961597ea0
--- /dev/null
+++ b/test/old-elf/export-dynamic.test
@@ -0,0 +1,98 @@
+# Tests the --export-dynamic (-E) flag. When creating a dynamic executable and
+# receiving this flag, the linker should export all globally visible symbols in
+# its dynamic symbol table.
+
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 -E %t.o -e=main -o %t1
+#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+#CHECKSYMS: myfunc1@
+#CHECKSYMS: main@
+#CHECKSYMS: myvar1@
+
+# The object file below was generated with the following code:
+#
+# (command line clang -c prog.c -o prog.o)
+#
+# int myvar1 = 22;
+#
+# static int mysecretvar = 11;
+#
+# int myfunc1() {
+# return 23;
+# }
+#
+# static int mysecretfunc() {
+# return 42;
+# }
+#
+# int main() {
+# return mysecretfunc() + mysecretvar;
+# }
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B8170000005DC30F1F440000554889E54883EC10C745FC00000000E81C000000030425000000004883C4105DC36666666666662E0F1F840000000000554889E5B82A0000005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000027
+ Symbol: .data
+ Type: R_X86_64_32S
+ Addend: 4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: 160000000B000000
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: mysecretfunc
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000040
+ Size: 0x000000000000000B
+ - Name: mysecretvar
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000010
+ Size: 0x0000000000000021
+ - Name: myfunc1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000B
+ - Name: myvar1
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000004
diff --git a/test/old-elf/filenotfound.test b/test/old-elf/filenotfound.test
new file mode 100644
index 000000000000..5020e9cf9b74
--- /dev/null
+++ b/test/old-elf/filenotfound.test
@@ -0,0 +1,3 @@
+# Check that a file that cannot be found results in a proper error message
+RUN: not lld -flavor old-gnu -target x86_64 %p/Inputs/nofile.o 2>&1 | FileCheck %s
+#CHECK: lld: cannot find file {{.+[\\/]}}nofile.o
diff --git a/test/old-elf/gnulinkonce/gnulinkonce-report-discarded-reference.test b/test/old-elf/gnulinkonce/gnulinkonce-report-discarded-reference.test
new file mode 100644
index 000000000000..c05a06fab32b
--- /dev/null
+++ b/test/old-elf/gnulinkonce/gnulinkonce-report-discarded-reference.test
@@ -0,0 +1,145 @@
+# Tests that the linker is able to read .gnu.linkonce sections and link them
+# appropriately. The testcase has been created by using the following source
+# code.
+# TODO: This test should produce a discarded reference error message which it
+# does not currently.
+# linkoncea.s
+# .section .gnu.linkonce.d.dummy,"aw"
+#bar:
+# .long 0
+# linkonceb.s
+# .section .gnu.linkonce.d.dummy,"aw"
+#foo:
+# .long 0
+# .section .blah, "aw"
+# .long foo
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGNULINKONCE < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGNULINKONCESECTIONS
+#CHECKGNULINKONCE: - name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCE: scope: global
+#CHECKGNULINKONCE: type: gnu-linkonce
+#CHECKGNULINKONCE: section-choice: custom-required
+#CHECKGNULINKONCE: section-name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCE: permissions: rw-
+#CHECKGNULINKONCE: references:
+#CHECKGNULINKONCE: - kind: group-child
+#CHECKGNULINKONCE: offset: 0
+#CHECKGNULINKONCE: target: bar
+#CHECKGNULINKONCESECTIONS: Section {
+#CHECKGNULINKONCESECTIONS: Name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCESECTIONS: Type: SHT_PROGBITS
+#CHECKGNULINKONCESECTIONS: Flags [ (0x3)
+#CHECKGNULINKONCESECTIONS: SHF_ALLOC (0x2)
+#CHECKGNULINKONCESECTIONS: SHF_WRITE (0x1)
+#CHECKGNULINKONCESECTIONS: ]
+#CHECKGNULINKONCESECTIONS: Size: 4
+#CHECKGNULINKONCESECTIONS: }
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+ - Name: bar
+ Section: .gnu.linkonce.d.dummy
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+ - Name: .blah
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+ - Name: .rela.blah
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .blah
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: foo
+ Type: R_X86_64_32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+ - Name: foo
+ Section: .gnu.linkonce.d.dummy
+ - Name: .blah
+ Type: STT_SECTION
+ Section: .blah
+...
diff --git a/test/old-elf/gnulinkonce/gnulinkonce-report-undef.test b/test/old-elf/gnulinkonce/gnulinkonce-report-undef.test
new file mode 100644
index 000000000000..f91123f0efad
--- /dev/null
+++ b/test/old-elf/gnulinkonce/gnulinkonce-report-undef.test
@@ -0,0 +1,127 @@
+# Tests that the linker is able to read .gnu.linkonce sections and link them
+# appropriately. The testcase has been created by using the following source
+# code. This test checks that the linker produces an undefined error.
+# linkoncea.s
+# .section .gnu.linkonce.d.dummy,"aw"
+#bar:
+# .long 0
+# linkonceb.s
+# .section .gnu.linkonce.d.dummy,"aw"
+# .global foo
+#foo:
+# .long 0
+# .section .blah, "aw"
+# .long foo
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
+#RUN: not lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: --output-filetype=yaml -o %t2.out.yaml 2>&1 | FileCheck \
+#RUN: -check-prefix=UNDEFS %s
+#RUN: not lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: -o %t2.out 2>&1 | FileCheck -check-prefix=UNDEFS %s
+#UNDEFS: Undefined symbol: {{.*}} foo
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+ - Name: bar
+ Section: .gnu.linkonce.d.dummy
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+ - Name: .blah
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+ - Name: .rela.blah
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .blah
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: foo
+ Type: R_X86_64_32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+ - Name: .blah
+ Type: STT_SECTION
+ Section: .blah
+ Global:
+ - Name: foo
+ Section: .gnu.linkonce.d.dummy
+...
diff --git a/test/old-elf/gnulinkonce/gnulinkonce.test b/test/old-elf/gnulinkonce/gnulinkonce.test
new file mode 100644
index 000000000000..eacd41d6ded5
--- /dev/null
+++ b/test/old-elf/gnulinkonce/gnulinkonce.test
@@ -0,0 +1,149 @@
+# Tests that the linker is able to read .gnu.linkonce sections and link them
+# appropriately. The testcase has been created by using the following source
+# code
+# linkonce1a.s
+# ------------
+# .section .gnu.linkonce.d.dummy,"aw"
+#bar:
+# .long 0
+# linkonce1b.s
+# ------------
+# .globl main
+# .globl start
+# .globl _start
+# .globl __start
+# .text
+#main:
+#start:
+#_start:
+#__start:
+# .long 0
+#
+# .section .gnu.linkonce.d.dummy,"aw"
+#foo:
+# .long 0
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.linkonce1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.linkonce1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.linkonce1a.o %t.linkonce1b.o \
+#RUN: --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGNULINKONCE < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGNULINKONCESECTIONS
+#CHECKGNULINKONCE: - name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCE: scope: global
+#CHECKGNULINKONCE: type: gnu-linkonce
+#CHECKGNULINKONCE: section-choice: custom-required
+#CHECKGNULINKONCE: section-name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCE: permissions: rw-
+#CHECKGNULINKONCE: references:
+#CHECKGNULINKONCE: - kind: group-child
+#CHECKGNULINKONCE: offset: 0
+#CHECKGNULINKONCE: target: bar
+#CHECKGNULINKONCE: - kind: group-child
+#CHECKGNULINKONCE: offset: 0
+#CHECKGNULINKONCESECTIONS: Section {
+#CHECKGNULINKONCESECTIONS: Name: .gnu.linkonce.d.dummy
+#CHECKGNULINKONCESECTIONS: Type: SHT_PROGBITS
+#CHECKGNULINKONCESECTIONS: Flags [ (0x3)
+#CHECKGNULINKONCESECTIONS: SHF_ALLOC (0x2)
+#CHECKGNULINKONCESECTIONS: SHF_WRITE (0x1)
+#CHECKGNULINKONCESECTIONS: ]
+#CHECKGNULINKONCESECTIONS: Size: 4
+#CHECKGNULINKONCESECTIONS: }
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+Symbols:
+ Local:
+ - Name: bar
+ Section: .gnu.linkonce.d.dummy
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: '00000000'
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .gnu.linkonce.d.dummy
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: '00000000'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .gnu.linkonce.d.dummy
+ Type: STT_SECTION
+ Section: .gnu.linkonce.d.dummy
+ - Name: foo
+ Section: .gnu.linkonce.d.dummy
+ Global:
+ - Name: main
+ Section: .text
+ - Name: start
+ Section: .text
+ - Name: _start
+ Section: .text
+ - Name: __start
+ Section: .text
+...
diff --git a/test/old-elf/gotpcrel.test b/test/old-elf/gotpcrel.test
new file mode 100644
index 000000000000..b8695f1aedfb
--- /dev/null
+++ b/test/old-elf/gotpcrel.test
@@ -0,0 +1,21 @@
+# This test checks that GOTPCREL entries are being handled properly
+RUN: lld -flavor old-gnu -target x86_64-linux -static -e main --output-filetype=yaml \
+RUN: --noinhibit-exec %p/Inputs/gotpcrel.x86-64 \
+RUN: | FileCheck %s -check-prefix=YAML
+
+YAML: name: main
+YAML: references:
+YAML: kind: R_X86_64_GOTPCREL
+YAML: offset: 3
+YAML: target: [[NULLGOT:[a-zA-Z0-9_]+]]
+YAML: kind: R_X86_64_GOTPCREL
+YAML: offset: 10
+YAML: target: [[MAINGOT:[a-zA-Z0-9_]+]]
+
+YAML: name: [[NULLGOT]]
+YAML: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+YAML-NOT: references:
+
+YAML: name: [[MAINGOT]]
+YAML: kind: R_X86_64_64
+YAML: target: main
diff --git a/test/old-elf/gottpoff.test b/test/old-elf/gottpoff.test
new file mode 100644
index 000000000000..969874e538a5
--- /dev/null
+++ b/test/old-elf/gottpoff.test
@@ -0,0 +1,119 @@
+# Test that GOTTPOFF reloc generates an outstanding R_X86_64_TPOFF64
+# to be processed at startup time.
+# Reference: Ulrich Drepper's "ELF Handling for Thread-Local storage"
+
+#RUN: yaml2obj -format=elf %s -o %t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t -e=main --defsym=__tls_get_addr=0
+#RUN: llvm-readobj -r %t | FileCheck %s
+#
+#CHECK: Section (5) .rela.dyn {
+#CHECK: 0x401098 R_X86_64_TPOFF64 tls2 0x0
+#CHECK: }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: E819000000640304250000000064030425000000006403042500000000C3488B0500000000648B00C3488D3D00000000E800000000488D8000000000C3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000009
+ Symbol: tls1
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000011
+ Symbol: tls0
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000019
+ Symbol: tls2
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000021
+ Symbol: tls2
+ Type: R_X86_64_GOTTPOFF
+ Addend: -4
+ - Offset: 0x000000000000002C
+ Symbol: tls0
+ Type: R_X86_64_TLSLD
+ Addend: -4
+ - Offset: 0x0000000000000031
+ Symbol: __tls_get_addr
+ Type: R_X86_64_PLT32
+ Addend: -4
+ - Offset: 0x0000000000000038
+ Symbol: tls0
+ Type: R_X86_64_DTPOFF32
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 8
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: '01000000'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .tbss
+ Type: STT_SECTION
+ Section: .tbss
+ - Name: .tdata
+ Type: STT_SECTION
+ Section: .tdata
+ Global:
+ - Name: GOTTPOFF
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x000000000000001E
+ - Name: TLSLD
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000029
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ - Name: tls0
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+ - Name: tls1
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: tls2
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: _GLOBAL_OFFSET_TABLE_
+ - Name: __tls_get_addr
+...
diff --git a/test/old-elf/group-cmd-search.test b/test/old-elf/group-cmd-search.test
new file mode 100644
index 000000000000..1d7f5ee43367
--- /dev/null
+++ b/test/old-elf/group-cmd-search.test
@@ -0,0 +1,134 @@
+/*
+ XFAIL: win32
+
+ This test does not pass on Windows because a path starting with
+ "/" is not considered as an absolute path. (It needs a drive
+ letter.)
+*/
+
+/*
+ In general the linker scripts's GROUP command works like a pair
+ of command line options --start-group/--end-group. But there is
+ a difference in the files look up algorithm.
+
+ The --start-group/--end-group commands use a trivial approach:
+ a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
+ suffix and search the path through library search directories.
+ b) Otherwise, use the path 'as-is'.
+
+ The GROUP command implements more compicated approach:
+ a) If the path has '-l' prefix, add 'lib' prefix and '.a'/'.so'
+ suffix and search the path through library search directories.
+ b) If the path does not have '-l' prefix, and sysroot is configured,
+ and the path starts with the / character, and the script being
+ processed is located inside the sysroot, search the path under
+ the sysroot. Otherwise, try to open the path in the current
+ directory. If it is not found, search through library search
+ directories.
+*/
+
+/*
+ This link should finish successfully. The --start-group/--end-group
+ contains an existing absolute path to the file.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: --start-group %p/Inputs/shared.so-x86-64 --end-group -o %t1
+*/
+
+/*
+ This link should fail with unknown input file format error.
+ There is no shared.so-x86-64 file in the current directory.
+
+RUN: not \
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: --start-group shared.so-x86-64 --end-group -o %t2
+*/
+
+/*
+ This link should fail with unknown input file format error.
+ The absolute path /shared.so-x86-64 does not exist and the linker
+ should not attempt to search it under the sysroot directory.
+
+RUN: not \
+RUN: lld -flavor old-gnu -target x86_64 -shared --sysroot=%p/Inputs \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: --start-group /shared.so-x86-64 --end-group -o %t3
+*/
+
+/*
+ This link should finish successfully. The group-cmd-search-1.ls
+ script contains "GROUP ( shared.so-x86-64 )" command and the linker
+ has to search shared.so-x86-64 through the library search paths.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/group-cmd-search-1.ls -o %t4
+*/
+
+/*
+ This link should fail with unknown input file format error.
+ The group-cmd-search-2.ls script contains GROUP command with
+ a non-existing absolute path but there is no --sysroot argument.
+
+RUN: not \
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/group-cmd-search-2.ls -o %t5
+*/
+
+/*
+ This link should finish successfully. The group-cmd-search-2.ls
+ script contains GROUP command with an absolute path and the sysroot
+ directory is provided. The linker has to search the absolute path
+ under the sysroot directory.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared --sysroot=%p/Inputs \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
+*/
+
+/*
+ This link should finish successfully. The group-cmd-search-2.ls
+ script contains GROUP command with an absolute path and the sysroot
+ directory is provided. The linker has to search the absolute path
+ under the sysroot directory.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared --sysroot=%p/Inputs/../Inputs \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/group-cmd-search-2.ls -o %t6
+*/
+
+/*
+ This link should finish successfully. The group-cmd-search-3.ls
+ script contains GROUP command with two elements. The first one
+ has a -l:<path> form and should be found by iterating through
+ lib dirs and searching the 'path' name exactly. The second element
+ has a -l<lib name> form and should be found by constructing a full
+ library name lib<lib name>.a and iterating through lib dirs.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/group-cmd-search-3.ls -o %t8
+*/
+
+/*
+ This link should fail with unknown input file format error.
+ The linker script from this file contains GROUP with an absolute
+ path which can be found under provided sysroot directory.
+ But the linker script itself is not under the sysroot.
+
+RUN: not \
+RUN: lld -flavor old-gnu -target x86_64 -shared --sysroot=%p/Inputs \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: %s -o %t7
+*/
+
+/*
+RUN: lld -flavor old-gnu -target x86_64 -shared \
+RUN: -L%p/Inputs %p/Inputs/use-shared.x86-64 \
+RUN: -l:group-cmd-search-1.ls -o %t9
+*/
+
+GROUP ( /shared.so-x86-64 )
diff --git a/test/old-elf/hexagon-quickdata-sort.test b/test/old-elf/hexagon-quickdata-sort.test
new file mode 100644
index 000000000000..98488b75ceb7
--- /dev/null
+++ b/test/old-elf/hexagon-quickdata-sort.test
@@ -0,0 +1,12 @@
+RUN: lld -flavor old-gnu -target hexagon %p/Inputs/quickdata-sort-test.o.elf-hexagon -o %t1 --noinhibit-exec
+RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSort
+
+quickdataSort: 00002000 D A1
+quickdataSort: 00002001 D AA1
+quickdataSort: 00002002 D B1
+quickdataSort: 00002004 D BB1
+quickdataSort: 00002008 D C1
+quickdataSort: 0000200c D CC1
+quickdataSort: 00002010 D D1
+quickdataSort: 00002018 D DD1
+
diff --git a/test/old-elf/hexagon-quickdata-sortcommon.test b/test/old-elf/hexagon-quickdata-sortcommon.test
new file mode 100644
index 000000000000..d4d7d6a617e6
--- /dev/null
+++ b/test/old-elf/hexagon-quickdata-sortcommon.test
@@ -0,0 +1,16 @@
+RUN: lld -flavor old-gnu -target hexagon -o %t1 --noinhibit-exec \
+RUN: %p/Inputs/quickdata-sortcommon-test.o.elf-hexagon
+RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSortCommon
+
+quickdataSortCommon: 00002000 D A1
+quickdataSortCommon: 00002001 D AA1
+quickdataSortCommon: 00002002 D AAA1
+quickdataSortCommon: 00002004 D B1
+quickdataSortCommon: 00002006 D BB1
+quickdataSortCommon: 00002008 D BBB1
+quickdataSortCommon: 0000200c D C1
+quickdataSortCommon: 00002010 D CC1
+quickdataSortCommon: 00002014 D CCC1
+quickdataSortCommon: 00002018 D D1
+quickdataSortCommon: 00002020 D DD1
+quickdataSortCommon: 00002028 D DDD1
diff --git a/test/old-elf/ifunc.test b/test/old-elf/ifunc.test
new file mode 100644
index 000000000000..0aa317a24e6f
--- /dev/null
+++ b/test/old-elf/ifunc.test
@@ -0,0 +1,69 @@
+# REQUIRES: x86
+
+# This test checks that IRELATIVE relocations are created for symbols that
+# need relocation even for static links.
+RUN: lld -flavor old-gnu -target x86_64-linux --output-filetype=yaml -r \
+RUN: %p/Inputs/ifunc.x86-64 | FileCheck %s
+
+RUN: lld -flavor old-gnu -target x86_64-linux --output-filetype=yaml --noinhibit-exec \
+RUN: %p/Inputs/ifunc.x86-64 %p/Inputs/ifunc.cpp.x86-64 \
+RUN: | FileCheck %s --check-prefix=PLT
+
+RUN: lld -flavor old-gnu -target x86_64-linux -o %t %p/Inputs/ifunc.x86-64 \
+RUN: -e main -static %p/Inputs/ifunc.cpp.x86-64
+RUN: llvm-objdump -d -s %t| FileCheck %s --check-prefix=BIN
+RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=RELATIVEADDEND
+
+# Test that STT_GNU_IFUNC symbols have type Code in SharedLibraryAtom.
+RUN: lld -flavor old-gnu -target x86_64-linux --output-filetype=yaml \
+RUN: --noinhibit-exec %p/Inputs/ifunc.cpp.x86-64 -L%p/Inputs -lifunc.x86-64 \
+RUN: | FileCheck %s --check-prefix=SHARED
+
+PLT: defined-atoms:
+
+PLT: name: plt
+PLT: scope: global
+PLT: references:
+PLT: kind: R_X86_64_PC32
+PLT: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
+
+PLT: name: main
+PLT: scope: global
+PLT: references:
+PLT: kind: R_X86_64_PC32
+PLT: target: [[PLTNAME]]
+
+// Make sure the target of main's relocation is a stub with a PC32 relocation.
+// This relocation is to the got atom, but you can't really write that check in
+// FileCheck.
+PLT: name:
+PLT: type: stub
+PLT: references
+PLT: kind: R_X86_64_PC32
+
+// Make sure there's a got entry with a IRELATIVE relocation.
+PLT: type: got
+PLT: references:
+PLT: kind: R_X86_64_IRELATIVE
+PLT: target: hey
+
+CHECK: name: hey
+CHECK: scope: global
+CHECK: type: resolver
+
+
+// This is a horribly brittle test. We need a way to do arithmetic on captured
+// variables.
+BIN: {{[0-9a-f]+}}: ff 25 {{[0-9a-f]+}} {{[0-9a-f]+}} 00 00 jmpq *{{[0-9]+}}(%rip)
+BIN: .got.plt:
+BIN-NEXT: {{[0-9a-f]+}} 00000000 00000000
+
+RELATIVEADDEND: Relocations [
+RELATIVEADDEND-NEXT: Section (1) .rela.plt {
+RELATIVEADDEND-NEXT: 0x401000 R_X86_64_IRELATIVE - 0x400110
+RELATIVEADDEND-NEXT: }
+RELATIVEADDEND-NEXT: ]
+
+SHARED: shared-library-atoms
+SHARED: name: hey
+SHARED-NOT: data
diff --git a/test/old-elf/ignore-unknownoption.test b/test/old-elf/ignore-unknownoption.test
new file mode 100644
index 000000000000..aa03a2eb4e73
--- /dev/null
+++ b/test/old-elf/ignore-unknownoption.test
@@ -0,0 +1,5 @@
+# This test tests that lld is able to print unknown options that are not
+# recognized.
+RUN: not lld -flavor old-gnu -target x86_64 --gc-sections 2> %t
+RUN: FileCheck %s < %t
+CHECK: warning: ignoring unknown argument: --gc-sections
diff --git a/test/old-elf/init_array-order.test b/test/old-elf/init_array-order.test
new file mode 100644
index 000000000000..2b8bcb65c3e4
--- /dev/null
+++ b/test/old-elf/init_array-order.test
@@ -0,0 +1,67 @@
+#RUN: yaml2obj -format=elf %s > %t
+#RUN: lld -flavor old-gnu -target x86_64-linux %t --noinhibit-exec \
+#RUN: -o %t1.out
+#RUN: llvm-objdump -s %t1.out | FileCheck %s
+
+!ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: "1100000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .init_array.2
+ Type: SHT_INIT_ARRAY
+ Content: "0200000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC]
+- Name: .init_array.3
+ Type: SHT_INIT_ARRAY
+ Content: "0300000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC]
+- Name: .init_array
+ Type: SHT_INIT_ARRAY
+ Content: "9900000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC]
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: "2200000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC, SHF_WRITE]
+- Name: .init_array.1
+ Type: SHT_INIT_ARRAY
+ Content: "0100000000000000"
+ AddressAlign: 8
+ Flags: [SHF_ALLOC]
+
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .init_array.3
+ Type: STT_SECTION
+ Section: .init_array.3
+ - Name: .init_array.2
+ Type: STT_SECTION
+ Section: .init_array.2
+ - Name: .init_array.1
+ Type: STT_SECTION
+ Section: .init_array.1
+ - Name: .init_array
+ Type: STT_SECTION
+ Section: .init_array
+
+#CHECK: {{[0xa-f0-9]+}} 01000000 00000000 02000000 00000000
+#CHECK: {{[0xa-f0-9]+}} 03000000 00000000 99000000 00000000
diff --git a/test/old-elf/init_array.test b/test/old-elf/init_array.test
new file mode 100644
index 000000000000..f7f48445621e
--- /dev/null
+++ b/test/old-elf/init_array.test
@@ -0,0 +1,127 @@
+# Test .init_array.
+# Generated from the following C code:
+#
+# static void
+# init () {}
+#
+# static void (*const init_array []) ()
+# __attribute__ ((used, section (".init_array"), aligned (sizeof (void *))))
+# = { init };
+#
+# int
+# main() { return (0); }
+#
+# Note: both STT_OBJECT and STT_SECTION for .init_array are commented in yaml
+# declaration to check if lld correct adds the object's .init_array when the
+# section has no symbol (some compilers may create object with this behavior,
+# specially for C++ global constructors).
+
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -o %t -e=main
+#RUN: llvm-objdump -t -section-headers %t | FileCheck %s
+
+#CHECK: .init_array {{[0-9]+}} [[ADDR:[0-9]+]]
+#CHECK: [[ADDR]] l *ABS* {{[0-9]+}} .hidden __init_array_start
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B800000000C745FC000000005DC366666666662E0F1F840000000000554889E55DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .init_array
+ Type: SHT_INIT_ARRAY
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: '0000000000000000'
+ - Name: .rela.init_array
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .init_array
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: .text
+ Type: R_X86_64_64
+ Addend: 32
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000001200000000410E108602430D060000001800000038000000000000000600000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 32
+Symbols:
+ Local:
+ - Name: init
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000006
+# - Name: init_array
+# Type: STT_OBJECT
+# Section: .init_array
+# Size: 0x0000000000000008
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+# - Name: .init_array
+# Type: STT_SECTION
+# Section: .init_array
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000012
+...
diff --git a/test/old-elf/initfini-options.test-1.test b/test/old-elf/initfini-options.test-1.test
new file mode 100644
index 000000000000..f8571a637197
--- /dev/null
+++ b/test/old-elf/initfini-options.test-1.test
@@ -0,0 +1,33 @@
+# Check that if there are no -init/-fini options and _init/_fini symbols
+# are undefined the linker does not emit DT_INIT/DT_FINI tags.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target x86_64 -shared --noinhibit-exec -o %t.so %t.o
+# RUN: llvm-readobj -dynamic-table %t.so | FileCheck %s
+
+# CHECK-NOT: 0x000000000000000C INIT 0x{{[0-9A-F]+}}
+# CHECK-NOT: 0x000000000000000D FINI 0x{{[0-9A-F]+}}
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x08
+
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ - Name: _init
+ - Name: _fini
+...
diff --git a/test/old-elf/initfini-options.test-2.test b/test/old-elf/initfini-options.test-2.test
new file mode 100644
index 000000000000..35361c76d973
--- /dev/null
+++ b/test/old-elf/initfini-options.test-2.test
@@ -0,0 +1,47 @@
+# Check that if _init/_fini symbols are defined the linker emits
+# DT_INIT/DT_FINI tags point to these symbols.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target x86_64 -shared -o %t.so %t.o
+# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
+
+# CHECK: Name: _init (8)
+# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
+# CHECK: Name: _fini (14)
+# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
+#
+# CHECK: 0x000000000000000C INIT {{[0x0-9a-f]+}}
+# CHECK: 0x000000000000000D FINI {{[0x0-9a-f]+}}
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x18
+
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 0x8
+ - Name: _init
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x8
+ Size: 0x8
+ - Name: _fini
+ Type: STT_FUNC
+ Section: .text
+ Value: 0xF
+ Size: 0x8
+...
diff --git a/test/old-elf/initfini-options.test-3.test b/test/old-elf/initfini-options.test-3.test
new file mode 100644
index 000000000000..2c9ab3cceb94
--- /dev/null
+++ b/test/old-elf/initfini-options.test-3.test
@@ -0,0 +1,53 @@
+# Check that -init/-fini command line options override default function names
+# and the linker uses these name to search symbols and setup DT_INIT/DT_FINI.
+
+# RUN: yaml2obj -format=elf %s > %t.o
+# RUN: lld -flavor old-gnu -target x86_64 -shared -o %t.so %t.o \
+# RUN: -init _init -init _start -fini _fini -fini _stop
+# RUN: llvm-readobj -symbols -dynamic-table %t.so | FileCheck %s
+
+# CHECK: Name: _start (1)
+# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
+# CHECK: Name: _stop (8)
+# CHECK-NEXT: Value: {{[0x0-9a-f]+}}
+#
+# CHECK: 0x000000000000000C INIT {{[0x0-9a-f]+}}
+# CHECK: 0x000000000000000D FINI {{[0x0-9a-f]+}}
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x04
+ Size: 0x20
+
+Symbols:
+ Global:
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Size: 0x8
+ - Name: _stop
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x8
+ Size: 0x8
+ - Name: _init
+ Type: STT_FUNC
+ Section: .text
+ Value: 0xF
+ Size: 0x8
+ - Name: _fini
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x18
+ Size: 0x8
+...
diff --git a/test/old-elf/librarynotfound.test b/test/old-elf/librarynotfound.test
new file mode 100644
index 000000000000..9b1b8f2cffc4
--- /dev/null
+++ b/test/old-elf/librarynotfound.test
@@ -0,0 +1,5 @@
+# Tests the functionality of library not found
+RUN: not lld -flavor old-gnu -lfn 2> %t1
+RUN: FileCheck %s < %t1
+
+CHECK: Unable to find library -lfn
diff --git a/test/old-elf/linker-as-ld.test b/test/old-elf/linker-as-ld.test
new file mode 100644
index 000000000000..8b07ae9d1a71
--- /dev/null
+++ b/test/old-elf/linker-as-ld.test
@@ -0,0 +1,16 @@
+REQUIRES: system-linker-elf
+
+RUN: mkdir -p %t.dir && cp `which lld` %t.dir/ld
+RUN: %t.dir/ld -o %t %p/Inputs/relocs.x86-64 \
+RUN: -e _start -static
+RUN: llvm-readobj -t %t | FileCheck %s
+
+# Test linker run as "ld" on elf based system works like gnu linker.
+
+
+CHECK: Symbol {
+CHECK: Name: i
+CHECK-NEXT: Value:
+CHECK-NEXT: Size:
+CHECK-NEXT: Binding:
+CHECK-NEXT: Type: Object
diff --git a/test/elf/linkerscript/Inputs/externs.ls b/test/old-elf/linkerscript/Inputs/externs.ls
index 20fdc0c3f980..20fdc0c3f980 100644
--- a/test/elf/linkerscript/Inputs/externs.ls
+++ b/test/old-elf/linkerscript/Inputs/externs.ls
diff --git a/test/elf/linkerscript/Inputs/invalid.ls b/test/old-elf/linkerscript/Inputs/invalid.ls
index 894d4bef2732..894d4bef2732 100644
--- a/test/elf/linkerscript/Inputs/invalid.ls
+++ b/test/old-elf/linkerscript/Inputs/invalid.ls
diff --git a/test/old-elf/linkerscript/Inputs/prog1.o.yaml b/test/old-elf/linkerscript/Inputs/prog1.o.yaml
new file mode 100644
index 000000000000..f450048ab37b
--- /dev/null
+++ b/test/old-elf/linkerscript/Inputs/prog1.o.yaml
@@ -0,0 +1,87 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E5B000E800000000BF01000000BA0E0000004889C6E80000000031C05DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000007
+ Symbol: prog2
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Offset: 0x0000000000000019
+ Symbol: write
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742036336134646334616430343938646139623934386330383263623735336430353735323938346638292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623838363135326664656538376564653738613565643965616638663664313839343033616266312900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000002100000000410E108602430D0600000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000021
+ - Name: prog2
+ - Name: write
+...
diff --git a/test/old-elf/linkerscript/Inputs/prog2.o.yaml b/test/old-elf/linkerscript/Inputs/prog2.o.yaml
new file mode 100644
index 000000000000..4d1bbd5754ea
--- /dev/null
+++ b/test/old-elf/linkerscript/Inputs/prog2.o.yaml
@@ -0,0 +1,88 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E548B800000000000000005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000006
+ Symbol: .rodata.str1.1
+ Type: R_X86_64_64
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .rodata.str1.1
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 48656C6C6F2C20776F726C64210A00
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E302028687474703A2F2F6C6C766D2E6F72672F6769742F636C616E672E6769742036336134646334616430343938646139623934386330383263623735336430353735323938346638292028687474703A2F2F6C6C766D2E6F72672F6769742F6C6C766D2E67697420623838363135326664656538376564653738613565643965616638663664313839343033616266312900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000001000000000410E108602430D0600000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .rodata.str1.1
+ Type: STT_SECTION
+ Section: .rodata.str1.1
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: prog2
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000010
+...
diff --git a/test/old-elf/linkerscript/Inputs/prog3.o.yaml b/test/old-elf/linkerscript/Inputs/prog3.o.yaml
new file mode 100644
index 000000000000..2402be4d42b6
--- /dev/null
+++ b/test/old-elf/linkerscript/Inputs/prog3.o.yaml
@@ -0,0 +1,51 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: B8010000000F05C3E800000000B83C0000000F05C3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000009
+ Symbol: main
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0000000000000008
+ - Name: write
+ Section: .text
+ - Name: main
+...
diff --git a/test/old-elf/linkerscript/Inputs/simple-pic.o.yaml b/test/old-elf/linkerscript/Inputs/simple-pic.o.yaml
new file mode 100644
index 000000000000..f826034053c3
--- /dev/null
+++ b/test/old-elf/linkerscript/Inputs/simple-pic.o.yaml
@@ -0,0 +1,32 @@
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 4
+ Size: 16
+
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 4
+ Size: 16
+
+Symbols:
+ Local:
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 16
diff --git a/test/old-elf/linkerscript/Inputs/simple.o.yaml b/test/old-elf/linkerscript/Inputs/simple.o.yaml
new file mode 100644
index 000000000000..fc9cd4c5f67d
--- /dev/null
+++ b/test/old-elf/linkerscript/Inputs/simple.o.yaml
@@ -0,0 +1,51 @@
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: B80100000048C7C70100000048C7C60000000048C7C20E0000000F05C3E8DEFFFFFFB83C0000000F05C3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x000000000000000F
+ Symbol: .data
+ Type: R_X86_64_32S
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: 48656C6C6F2C20576F726C64210A00
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+Symbols:
+ Local:
+ - Name: main
+ Section: .text
+ - Name: msg
+ Section: .data
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x000000000000001D
+...
diff --git a/test/elf/linkerscript/Inputs/valid.ls b/test/old-elf/linkerscript/Inputs/valid.ls
index 43593602d3fb..43593602d3fb 100644
--- a/test/elf/linkerscript/Inputs/valid.ls
+++ b/test/old-elf/linkerscript/Inputs/valid.ls
diff --git a/test/old-elf/linkerscript/externs.objtxt b/test/old-elf/linkerscript/externs.objtxt
new file mode 100644
index 000000000000..d79c56a142c9
--- /dev/null
+++ b/test/old-elf/linkerscript/externs.objtxt
@@ -0,0 +1,21 @@
+# Check symbols defined with the EXTERN command are added as undefined
+# symbols.
+
+# RUN: lld -flavor old-gnu -target x86_64 -T %p/Inputs/externs.ls -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+defined-atoms:
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+
+# CHECK: undefined-atoms:
+# CHECK: - name: _foo
+# CHECK: can-be-null: at-buildtime
+# CHECK: - name: bar
+# CHECK: can-be-null: at-buildtime
+# CHECK: - name: __baz
+# CHECK: can-be-null: at-buildtime
diff --git a/test/old-elf/linkerscript/filename-with-wildcards.test b/test/old-elf/linkerscript/filename-with-wildcards.test
new file mode 100644
index 000000000000..9376d5a5cfb4
--- /dev/null
+++ b/test/old-elf/linkerscript/filename-with-wildcards.test
@@ -0,0 +1,49 @@
+/*
+Tests a linker script that uses the SECTIONS command with rules containing
+wildcards that matching input object files.
+*/
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = 0x500000;
+ .foo : { *p1-wc.o(.text .rodata*) }
+ .bar : { *(.text .rodata*) }
+}
+
+/*
+RUN: mkdir -p %T
+RUN: yaml2obj -format=elf %p/Inputs/prog1.o.yaml -o=%T/p1-wc.o
+RUN: yaml2obj -format=elf %p/Inputs/prog2.o.yaml -o=%T/p2-wc.o
+RUN: yaml2obj -format=elf %p/Inputs/prog3.o.yaml -o=%T/p3-wc.o
+RUN: cd %T
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s p1-wc.o p2-wc.o p3-wc.o \
+RUN: -static -o %t1
+RUN: llvm-readobj -s %t1 | FileCheck -check-prefix CHECKSECTIONS %s
+
+CHECKSECTIONS: Index: 1
+CHECKSECTIONS: Name: .foo
+CHECKSECTIONS: Address: 0x500000
+CHECKSECTIONS: Size: 33
+
+CHECKSECTIONS: Index: 2
+CHECKSECTIONS: Name: .bar
+CHECKSECTIONS: Address: 0x500030
+CHECKSECTIONS: Size: 52
+
+RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: Name: main
+CHECKSYMS-NEXT: Value: 0x500000
+
+CHECKSYMS: Name: prog2
+CHECKSYMS-NEXT: Value: 0x500030
+
+CHECKSYMS: Name: write
+CHECKSYMS-NEXT: Value: 0x500040
+
+CHECKSYMS: Name: _start
+CHECKSYMS-NEXT: Value: 0x500048
+*/
diff --git a/test/old-elf/linkerscript/invalid-script-cli-1.test b/test/old-elf/linkerscript/invalid-script-cli-1.test
new file mode 100644
index 000000000000..72d2edebb4d5
--- /dev/null
+++ b/test/old-elf/linkerscript/invalid-script-cli-1.test
@@ -0,0 +1,10 @@
+# Check that the -T/--script options issue an error when passed
+# filenames for files that do not exist.
+
+RUN: not lld -flavor old-gnu -target x86_64 -T idonotexist.ls 2> %t.err
+RUN: FileCheck %s < %t.err
+
+RUN: not lld -flavor old-gnu -target x86_64 --script=idonotexist.ls 2> %t.err
+RUN: FileCheck %s < %t.err
+
+CHECK: {{.*}}lld: cannot find file {{.*}}idonotexist.ls
diff --git a/test/old-elf/linkerscript/invalid-script-cli-2.test b/test/old-elf/linkerscript/invalid-script-cli-2.test
new file mode 100644
index 000000000000..cc76f0e55a81
--- /dev/null
+++ b/test/old-elf/linkerscript/invalid-script-cli-2.test
@@ -0,0 +1,6 @@
+# Check that linker script are *not* picked up with -lscript.ls.
+
+RUN: not lld -flavor old-gnu -target x86_64 -L%p/Inputs/ -lvalid.ls 2> %t.err
+RUN: FileCheck %s < %t.err
+
+CHECK: {{.*}}: Unable to find library -lvalid.ls
diff --git a/test/old-elf/linkerscript/invalid.test b/test/old-elf/linkerscript/invalid.test
new file mode 100644
index 000000000000..a00a200225dc
--- /dev/null
+++ b/test/old-elf/linkerscript/invalid.test
@@ -0,0 +1,5 @@
+# Check for errors from invalid linker scripts
+RUN: not lld -flavor old-gnu -target x86_64 %p/Inputs/invalid.ls 2> %t.err
+RUN: FileCheck %s < %t.err
+
+CHECK: {{.*}}invalid.ls: Error parsing linker script
diff --git a/test/old-elf/linkerscript/phdrs-all-none.test b/test/old-elf/linkerscript/phdrs-all-none.test
new file mode 100644
index 000000000000..45baf188d8d8
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-all-none.test
@@ -0,0 +1,26 @@
+/*
+Test when all segments are marked as NONE.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix NONE-ALL-PHDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :NONE
+ .data : { *(.data) }
+}
+
+/*
+NONE-ALL-PHDRS: .text {{[0-9a-f]+}} 0000000000000000
+NONE-ALL-PHDRS: .data {{[0-9a-f]+}} 000000000000002c
+*/
diff --git a/test/old-elf/linkerscript/phdrs-custom-none.test b/test/old-elf/linkerscript/phdrs-custom-none.test
new file mode 100644
index 000000000000..e3672cf8fd30
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-custom-none.test
@@ -0,0 +1,36 @@
+/*
+Test when PHDRS contains custom NONE segment.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix CUSTOM-NONE-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix CUSTOM-NONE-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ NONE PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :NONE
+ .data : { *(.data) }
+}
+
+/*
+CUSTOM-NONE-SECS: .text {{[0-9a-f]+}} 00000000004000b0
+CUSTOM-NONE-SECS: .data {{[0-9a-f]+}} 00000000004000dc
+
+CUSTOM-NONE-HDRS: ProgramHeader {
+CUSTOM-NONE-HDRS: Type: PT_LOAD (0x1)
+CUSTOM-NONE-HDRS: VirtualAddress: 0x400000
+CUSTOM-NONE-HDRS: Flags [ (0x5)
+CUSTOM-NONE-HDRS: PF_R (0x4)
+CUSTOM-NONE-HDRS: PF_X (0x1)
+CUSTOM-NONE-HDRS: ]
+CUSTOM-NONE-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-default.test b/test/old-elf/linkerscript/phdrs-default.test
new file mode 100644
index 000000000000..8c493d020504
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-default.test
@@ -0,0 +1,82 @@
+/*
+This group of tests checks usage of default headers during linking,
+when PHDRS command is not defined or defined empty in linker scripts.
+
+This test uses a single X86-64 input object, simple.o, created with the
+following X86-64 assembly code:
+
+*** simple.S:
+
+(command line clang -c simple.S -o simple.o)
+
+ .text
+ main:
+ mov $1, %eax
+ movq $1, %rdi
+ movq $msg, %rsi
+ movq $14, %rdx
+ syscall
+ ret
+
+ .globl _start
+ _start:
+ call main
+ mov $60, %eax
+ syscall
+ ret
+
+ .data
+ msg: .asciz "Hello, World!\n"
+*/
+
+/*
+Prepare the object file to test on.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+*/
+
+/*
+Test when no linker script passed.
+
+RUN: lld -flavor old-gnu -target x86_64 %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix SECTIONS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix HEADERS %s
+
+SECTIONS: .text {{[0-9a-f]+}} 00000000004000b0
+SECTIONS: .data {{[0-9a-f]+}} 0000000000401000
+
+HEADERS: ProgramHeader {
+HEADERS: Type: PT_LOAD (0x1)
+HEADERS: VirtualAddress: 0x400000
+HEADERS: }
+HEADERS: ProgramHeader {
+HEADERS: Type: PT_LOAD (0x1)
+HEADERS: VirtualAddress: 0x401000
+HEADERS: }
+*/
+
+/*
+Test when linker script doesn't contain PHDRS and sections are not assigned to any segments.
+
+RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-no-phdrs.script %t.o -static -o %t2
+RUN: llvm-objdump -section-headers %t2 | FileCheck -check-prefix SECTIONS %s
+RUN: llvm-readobj -program-headers %t2 | FileCheck -check-prefix HEADERS %s
+*/
+
+/*
+Test when linker script contains empty PHDRS and sections are not assigned to any segments.
+
+RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-empty-phdrs.script %t.o -static -o %t3
+RUN: llvm-objdump -section-headers %t3 | FileCheck -check-prefix SECTIONS %s
+RUN: llvm-readobj -program-headers %t3 | FileCheck -check-prefix HEADERS %s
+*/
+
+/*
+Test when linker script contains empty PHDRS and sections are only assigned to NONE segments
+or not assigned at all.
+NOTE: Segments with the name NONE are ignored in such a case.
+
+RUN: lld -flavor old-gnu -target x86_64 -T %p/phdrs/sections-none-phdrs.script %t.o -static -o %t4
+RUN: llvm-objdump -section-headers %t4 | FileCheck -check-prefix SECTIONS %s
+RUN: llvm-readobj -program-headers %t4 | FileCheck -check-prefix HEADERS %s
+*/
diff --git a/test/old-elf/linkerscript/phdrs-different.test b/test/old-elf/linkerscript/phdrs-different.test
new file mode 100644
index 000000000000..7fe14dd543d1
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-different.test
@@ -0,0 +1,45 @@
+/*
+Test sections put to different segments.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix DIFF-PHDRS-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix DIFF-PHDRS-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+ data PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) } :data
+}
+
+/*
+DIFF-PHDRS-SECS: .text {{[0-9a-f]+}} 00000000004000e8
+DIFF-PHDRS-SECS: .data {{[0-9a-f]+}} 0000000000401000
+
+DIFF-PHDRS-HDRS: ProgramHeader {
+DIFF-PHDRS-HDRS: Type: PT_LOAD (0x1)
+DIFF-PHDRS-HDRS: VirtualAddress: 0x400000
+DIFF-PHDRS-HDRS: Flags [ (0x5)
+DIFF-PHDRS-HDRS: PF_R (0x4)
+DIFF-PHDRS-HDRS: PF_X (0x1)
+DIFF-PHDRS-HDRS: ]
+DIFF-PHDRS-HDRS: }
+DIFF-PHDRS-HDRS: ProgramHeader {
+DIFF-PHDRS-HDRS: Type: PT_LOAD (0x1)
+DIFF-PHDRS-HDRS: VirtualAddress: 0x401000
+DIFF-PHDRS-HDRS: Flags [ (0x6)
+DIFF-PHDRS-HDRS: PF_R (0x4)
+DIFF-PHDRS-HDRS: PF_W (0x2)
+DIFF-PHDRS-HDRS: ]
+DIFF-PHDRS-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-extra-program.test b/test/old-elf/linkerscript/phdrs-extra-program.test
new file mode 100644
index 000000000000..3bf27dcb1f5a
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-extra-program.test
@@ -0,0 +1,27 @@
+/*
+Test extra program header generates error.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1 &> %t1-error
+RUN: FileCheck -check-prefix EXTRA-PROGRAM-PHDR %s < %t1-error
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR PHDRS;
+ header2 PT_PHDR PHDRS;
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :NONE
+ .data : { *(.data) }
+}
+
+/*
+EXTRA-PROGRAM-PHDR: Extra program header is found
+*/
diff --git a/test/old-elf/linkerscript/phdrs-flags.test b/test/old-elf/linkerscript/phdrs-flags.test
new file mode 100644
index 000000000000..0fac53e75302
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-flags.test
@@ -0,0 +1,46 @@
+/*
+Test sections put to different segments with FLAGS attribute set.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix FLAGS-PHDRS-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix FLAGS-PHDRS-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD FLAGS(0x5);
+ data PT_LOAD FLAGS(0x7);
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) } :data
+}
+
+/*
+FLAGS-PHDRS-SECS: .text {{[0-9a-f]+}} 0000000000401000
+FLAGS-PHDRS-SECS: .data {{[0-9a-f]+}} 00000000004000e8
+
+FLAGS-PHDRS-HDRS: ProgramHeader {
+FLAGS-PHDRS-HDRS: Type: PT_LOAD (0x1)
+FLAGS-PHDRS-HDRS: VirtualAddress: 0x400000
+FLAGS-PHDRS-HDRS: Flags [ (0x7)
+FLAGS-PHDRS-HDRS: PF_R (0x4)
+FLAGS-PHDRS-HDRS: PF_W (0x2)
+FLAGS-PHDRS-HDRS: PF_X (0x1)
+FLAGS-PHDRS-HDRS: ]
+FLAGS-PHDRS-HDRS: }
+FLAGS-PHDRS-HDRS: ProgramHeader {
+FLAGS-PHDRS-HDRS: Type: PT_LOAD (0x1)
+FLAGS-PHDRS-HDRS: VirtualAddress: 0x401000
+FLAGS-PHDRS-HDRS: Flags [ (0x5)
+FLAGS-PHDRS-HDRS: PF_R (0x4)
+FLAGS-PHDRS-HDRS: PF_X (0x1)
+FLAGS-PHDRS-HDRS: ]
+FLAGS-PHDRS-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-has-program.test b/test/old-elf/linkerscript/phdrs-has-program.test
new file mode 100644
index 000000000000..83fe94c70614
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-has-program.test
@@ -0,0 +1,33 @@
+/*
+Test when program segment is set it's generated.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix PROGRAM-PHDR %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR FILEHDR PHDRS;
+ text PT_LOAD PHDRS;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-PHDR: ProgramHeader {
+PROGRAM-PHDR: Type: PT_PHDR (0x6)
+PROGRAM-PHDR: VirtualAddress: 0x400040
+PROGRAM-PHDR: Flags [ (0x5)
+PROGRAM-PHDR: PF_R (0x4)
+PROGRAM-PHDR: PF_X (0x1)
+PROGRAM-PHDR: ]
+PROGRAM-PHDR: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-invalid.test b/test/old-elf/linkerscript/phdrs-invalid.test
new file mode 100644
index 000000000000..c1426e8ffa5f
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-invalid.test
@@ -0,0 +1,63 @@
+/*
+This group of tests checks invalid cases of defining and using PHDRS
+command in linker scripts.
+
+This test uses a single X86-64 input object, simple.o, created with the
+following X86-64 assembly code:
+
+*** simple.S:
+
+(command line clang -c simple.S -o simple.o)
+
+ .text
+ main:
+ mov $1, %eax
+ movq $1, %rdi
+ movq $msg, %rsi
+ movq $14, %rdx
+ syscall
+ ret
+
+ .globl _start
+ _start:
+ call main
+ mov $60, %eax
+ syscall
+ ret
+
+ .data
+ msg: .asciz "Hello, World!\n"
+*/
+
+/*
+Prepare the object file to test on.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+*/
+
+/*
+Test undefined header used when no PHDRS defined.
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %p/phdrs/undef-no-phdrs.script %t.o -static -o %t1 &> %t1-error
+RUN: FileCheck -check-prefix UNDEF-NO-PHDRS %s < %t1-error
+
+UNDEF-NO-PHDRS: Unknown header identifiers (missing in PHDRS command) are used
+*/
+
+/*
+Test undefined header used when PHDRS is empty.
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %p/phdrs/undef-empty-phdrs.script %t.o -static -o %t2 &> %t2-error
+RUN: FileCheck -check-prefix UNDEF-EMPTY-PHDRS %s < %t2-error
+
+UNDEF-EMPTY-PHDRS: Unknown header identifiers (missing in PHDRS command) are used
+*/
+
+/*
+Test undefined header used when PHDRS contains definitions.
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %p/phdrs/undef-id-phdrs.script %t.o -static -o %t3 &> %t3-error
+RUN: FileCheck -check-prefix UNDEF-ID-PHDRS %s < %t3-error
+
+UNDEF-ID-PHDRS: Unknown header identifiers (missing in PHDRS command) are used
+*/
diff --git a/test/old-elf/linkerscript/phdrs-misplaced-program.test b/test/old-elf/linkerscript/phdrs-misplaced-program.test
new file mode 100644
index 000000000000..0fb669d818c4
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-misplaced-program.test
@@ -0,0 +1,26 @@
+/*
+Test misplaced program header generates error.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1 &> %t1-error
+RUN: FileCheck -check-prefix MISPLACED-PROGRAM-PHDR %s < %t1-error
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+ header PT_PHDR PHDRS;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :NONE
+ .data : { *(.data) }
+}
+
+/*
+MISPLACED-PROGRAM-PHDR: Program header must precede load segments
+*/
diff --git a/test/old-elf/linkerscript/phdrs-no-program.test b/test/old-elf/linkerscript/phdrs-no-program.test
new file mode 100644
index 000000000000..e461d5061019
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-no-program.test
@@ -0,0 +1,25 @@
+/*
+Test when no program segment set it's not generated.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix PROGRAM-PHDR %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-PHDR-NOT: Type: PT_PHDR (0x6)
+*/
diff --git a/test/old-elf/linkerscript/phdrs-one-none.test b/test/old-elf/linkerscript/phdrs-one-none.test
new file mode 100644
index 000000000000..a1c84e59fc60
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-one-none.test
@@ -0,0 +1,36 @@
+/*
+Test when one segment is marked as NONE.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix NONE-PHDRS-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix NONE-PHDRS-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) } :NONE
+}
+
+/*
+NONE-PHDRS-SECS: .text {{[0-9a-f]+}} 00000000004000b0
+NONE-PHDRS-SECS: .data {{[0-9a-f]+}} 0000000000000000
+
+NONE-PHDRS-HDRS: ProgramHeader {
+NONE-PHDRS-HDRS: Type: PT_LOAD (0x1)
+NONE-PHDRS-HDRS: VirtualAddress: 0x400000
+NONE-PHDRS-HDRS: Flags [ (0x5)
+NONE-PHDRS-HDRS: PF_R (0x4)
+NONE-PHDRS-HDRS: PF_X (0x1)
+NONE-PHDRS-HDRS: ]
+NONE-PHDRS-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-program-flags.test b/test/old-elf/linkerscript/phdrs-program-flags.test
new file mode 100644
index 000000000000..2a719a6cb296
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-program-flags.test
@@ -0,0 +1,33 @@
+/*
+Test when program segment contains only FLAGS attribute.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix PROGRAM-FLAGS-PHDR %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR PHDRS FLAGS(0x7);
+ text PT_LOAD FILEHDR PHDRS;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-FLAGS-PHDR: ProgramHeader {
+PROGRAM-FLAGS-PHDR: Type: PT_PHDR (0x6)
+PROGRAM-FLAGS-PHDR: Flags [ (0x7)
+PROGRAM-FLAGS-PHDR: PF_R (0x4)
+PROGRAM-FLAGS-PHDR: PF_W (0x2)
+PROGRAM-FLAGS-PHDR: PF_X (0x1)
+PROGRAM-FLAGS-PHDR: ]
+PROGRAM-FLAGS-PHDR: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-program-good-phdrs.test b/test/old-elf/linkerscript/phdrs-program-good-phdrs.test
new file mode 100644
index 000000000000..373facc380ba
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-program-good-phdrs.test
@@ -0,0 +1,34 @@
+/*
+Test when program segment contains only PHDRS attribute.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix PROGRAM-PHDRS-PHDR %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR PHDRS;
+ text PT_LOAD PHDRS;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-PHDRS-PHDR: ProgramHeader {
+PROGRAM-PHDRS-PHDR: Type: PT_PHDR (0x6)
+PROGRAM-PHDRS-PHDR: VirtualAddress: 0x400040
+PROGRAM-PHDRS-PHDR: MemSize: 168
+PROGRAM-PHDRS-PHDR: Flags [ (0x5)
+PROGRAM-PHDRS-PHDR: PF_R (0x4)
+PROGRAM-PHDRS-PHDR: PF_X (0x1)
+PROGRAM-PHDRS-PHDR: ]
+PROGRAM-PHDRS-PHDR: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-program-no-phdrs.test b/test/old-elf/linkerscript/phdrs-program-no-phdrs.test
new file mode 100644
index 000000000000..3e639bdb0f43
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-program-no-phdrs.test
@@ -0,0 +1,26 @@
+/*
+Test when program segment doesn't contain PHDRS attribute.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1 &> %t1-error
+RUN: FileCheck -check-prefix PROGRAM-PHDR-NO-PHDRS %s < %t1-error
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR;
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-PHDR-NO-PHDRS: Program header has invalid PHDRS attribute
+*/
diff --git a/test/old-elf/linkerscript/phdrs-program-wrong-phdrs.test b/test/old-elf/linkerscript/phdrs-program-wrong-phdrs.test
new file mode 100644
index 000000000000..c27b23d85876
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-program-wrong-phdrs.test
@@ -0,0 +1,26 @@
+/*
+Test when program segment contains PHDRS attribute not mapped to load segment.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: not lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1 &> %t1-error
+RUN: FileCheck -check-prefix PROGRAM-PHDR-WRONG-PHDRS %s < %t1-error
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ header PT_PHDR PHDRS;
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+PROGRAM-PHDR-WRONG-PHDRS: Program header has invalid PHDRS attribute
+*/
diff --git a/test/old-elf/linkerscript/phdrs-same-flags.test b/test/old-elf/linkerscript/phdrs-same-flags.test
new file mode 100644
index 000000000000..e39f61881033
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-same-flags.test
@@ -0,0 +1,35 @@
+/*
+Test sections put to same segment with FLAGS attribute set.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix FLAGS-PHDRS-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix FLAGS-PHDRS-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD FLAGS(0x4);
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+FLAGS-PHDRS-SECS: .text {{[0-9a-f]+}} 00000000004000b0
+FLAGS-PHDRS-SECS: .data {{[0-9a-f]+}} 00000000004000dc
+
+FLAGS-PHDRS-HDRS: ProgramHeader {
+FLAGS-PHDRS-HDRS: Type: PT_LOAD (0x1)
+FLAGS-PHDRS-HDRS: VirtualAddress: 0x400000
+FLAGS-PHDRS-HDRS: Flags [ (0x4)
+FLAGS-PHDRS-HDRS: PF_R (0x4)
+FLAGS-PHDRS-HDRS: ]
+FLAGS-PHDRS-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs-same.test b/test/old-elf/linkerscript/phdrs-same.test
new file mode 100644
index 000000000000..92b3ad3909c3
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs-same.test
@@ -0,0 +1,36 @@
+/*
+Test sections put to same segment.
+
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %t.o -static -o %t1
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix SAME-PHDRS-SECS %s
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix SAME-PHDRS-HDRS %s
+*/
+
+ENTRY(_start)
+
+PHDRS
+{
+ text PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :text
+ .data : { *(.data) }
+}
+
+/*
+SAME-PHDRS-SECS: .text {{[0-9a-f]+}} 00000000004000b0
+SAME-PHDRS-SECS: .data {{[0-9a-f]+}} 00000000004000dc
+
+SAME-PHDRS-HDRS: ProgramHeader {
+SAME-PHDRS-HDRS: Type: PT_LOAD (0x1)
+SAME-PHDRS-HDRS: VirtualAddress: 0x400000
+SAME-PHDRS-HDRS: Flags [ (0x5)
+SAME-PHDRS-HDRS: PF_R (0x4)
+SAME-PHDRS-HDRS: PF_X (0x1)
+SAME-PHDRS-HDRS: ]
+SAME-PHDRS-HDRS: }
+*/
diff --git a/test/old-elf/linkerscript/phdrs/sections-empty-phdrs.script b/test/old-elf/linkerscript/phdrs/sections-empty-phdrs.script
new file mode 100644
index 000000000000..ac30df78d5e1
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/sections-empty-phdrs.script
@@ -0,0 +1,11 @@
+ENTRY(_start)
+
+PHDRS
+{
+}
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+}
diff --git a/test/old-elf/linkerscript/phdrs/sections-no-phdrs.script b/test/old-elf/linkerscript/phdrs/sections-no-phdrs.script
new file mode 100644
index 000000000000..b8848cd3ab0d
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/sections-no-phdrs.script
@@ -0,0 +1,7 @@
+ENTRY(_start)
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+}
diff --git a/test/old-elf/linkerscript/phdrs/sections-none-phdrs.script b/test/old-elf/linkerscript/phdrs/sections-none-phdrs.script
new file mode 100644
index 000000000000..4b240245d2b2
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/sections-none-phdrs.script
@@ -0,0 +1,11 @@
+ENTRY(_start)
+
+PHDRS
+{
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :NONE
+ .data : { *(.data) }
+}
diff --git a/test/old-elf/linkerscript/phdrs/undef-empty-phdrs.script b/test/old-elf/linkerscript/phdrs/undef-empty-phdrs.script
new file mode 100644
index 000000000000..f92b452d2346
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/undef-empty-phdrs.script
@@ -0,0 +1,11 @@
+ENTRY(_start)
+
+PHDRS
+{
+}
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) } :phdr
+}
diff --git a/test/old-elf/linkerscript/phdrs/undef-id-phdrs.script b/test/old-elf/linkerscript/phdrs/undef-id-phdrs.script
new file mode 100644
index 000000000000..8ac56695f00a
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/undef-id-phdrs.script
@@ -0,0 +1,12 @@
+ENTRY(_start)
+
+PHDRS
+{
+ phdr PT_LOAD;
+}
+
+SECTIONS
+{
+ .text : { *(.text) } :phdr_wrong
+ .data : { *(.data) }
+}
diff --git a/test/old-elf/linkerscript/phdrs/undef-no-phdrs.script b/test/old-elf/linkerscript/phdrs/undef-no-phdrs.script
new file mode 100644
index 000000000000..d3ee5bdebe41
--- /dev/null
+++ b/test/old-elf/linkerscript/phdrs/undef-no-phdrs.script
@@ -0,0 +1,7 @@
+ENTRY(_start)
+
+SECTIONS
+{
+ .text : { *(.text) } :phdr
+ .data : { *(.data) }
+}
diff --git a/test/old-elf/linkerscript/sections-order.test b/test/old-elf/linkerscript/sections-order.test
new file mode 100644
index 000000000000..4d23f5eb9d54
--- /dev/null
+++ b/test/old-elf/linkerscript/sections-order.test
@@ -0,0 +1,113 @@
+/*
+Tests a simple linker script that changes the order of output sections and
+also changes the address of output sections by using simple expressions.
+
+This test uses three X86-64 input objects, prog1.o, prog2.o and prog3.o,
+which were created with the following C or assembly code:
+
+*** prog1.o:
+
+(command line clang -c prog1.c -o prog1.o)
+
+const char *prog2();
+void write(int, const char *, int);
+
+int main() {
+ write(1, prog2(), 14);
+}
+
+*** prog2.o:
+
+(command line clang -c prog2.c -o prog2.o)
+
+const char *prog2() {
+ return "Hello, world!\n";
+}
+
+*** prog3.o:
+
+(command line clang -c prog3.S -o prog3.o)
+
+ .globl write
+write:
+ mov $1, %eax
+ syscall
+ ret
+
+ .globl _start
+_start:
+ call main
+ mov $60, %eax
+ syscall
+ ret
+
+We use the following linker script for this test:
+*/
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = 0x500000;
+ .text : { prog1.o(.text) }
+ .mystring : { prog2.o(.rodata.str1.1) }
+ . = . + 0x6000;
+ .text.2 : {prog3.o(.text) prog2.o(.text) }
+}
+
+/*
+RUN: mkdir -p %T
+RUN: yaml2obj -format=elf %p/Inputs/prog1.o.yaml -o=%T/prog1.o
+RUN: yaml2obj -format=elf %p/Inputs/prog2.o.yaml -o=%T/prog2.o
+RUN: yaml2obj -format=elf %p/Inputs/prog3.o.yaml -o=%T/prog3.o
+RUN: cd %T
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s prog1.o prog2.o prog3.o \
+RUN: -static -o %t1
+RUN: llvm-readobj -s %t1 | FileCheck -check-prefix CHECKSECTIONS %s
+
+CHECKSECTIONS: Index: 1
+CHECKSECTIONS: Name: .text
+CHECKSECTIONS: Address: 0x500000
+CHECKSECTIONS: Size: 33
+
+CHECKSECTIONS: Index: 2
+CHECKSECTIONS: Name: .mystring
+CHECKSECTIONS: Address: 0x500021
+CHECKSECTIONS: Size: 15
+
+CHECKSECTIONS: Index: 3
+CHECKSECTIONS: Name: .text.2
+CHECKSECTIONS: Address: 0x506030
+CHECKSECTIONS: Size: 48
+
+RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: Name: main
+CHECKSYMS-NEXT: Value: 0x500000
+
+CHECKSYMS: Name: write
+CHECKSYMS-NEXT: Value: 0x506030
+
+CHECKSYMS: Name: _start
+CHECKSYMS-NEXT: Value: 0x506038
+
+CHECKSYMS: Name: prog2
+CHECKSYMS-NEXT: Value: 0x506050
+
+RUN: llvm-readobj -program-headers %t1 | FileCheck -check-prefix CHECKPHDRS %s
+
+CHECKPHDRS: Type: PT_LOAD (0x1)
+CHECKPHDRS: Offset: 0x1000
+CHECKPHDRS-NEXT: VirtualAddress: 0x500000
+CHECKPHDRS-NEXT: PhysicalAddress: 0x500000
+CHECKPHDRS-NEXT: FileSize: 48
+CHECKPHDRS-NEXT: MemSize: 48
+
+CHECKPHDRS: Type: PT_LOAD (0x1)
+CHECKPHDRS: Offset: 0x2030
+CHECKPHDRS-NEXT: VirtualAddress: 0x506030
+CHECKPHDRS-NEXT: PhysicalAddress: 0x506030
+CHECKPHDRS-NEXT: FileSize: 168
+CHECKPHDRS-NEXT: MemSize: 168
+*/
diff --git a/test/old-elf/linkerscript/sections-with-wildcards.test b/test/old-elf/linkerscript/sections-with-wildcards.test
new file mode 100644
index 000000000000..a390a2b2d36a
--- /dev/null
+++ b/test/old-elf/linkerscript/sections-with-wildcards.test
@@ -0,0 +1,88 @@
+/*
+Tests a linker script that uses the SECTIONS command with rules containing
+wildcards and simple SORT directives. It also tests that the linker script
+evaluates the expressions in the same order as the one written in the script
+file.
+
+This test uses three X86-64 input objects, prog1.o, prog2.o and prog3.o,
+which were created with the following C or assembly code:
+
+*** prog1.o:
+
+(command line clang -c prog1.c -o prog1.o)
+
+const char *prog2();
+void write(int, const char *, int);
+
+int main() {
+ write(1, prog2(), 14);
+}
+
+*** prog2.o:
+
+(command line clang -c prog2.c -o prog2.o)
+
+const char *prog2() {
+ return "Hello, world!\n";
+}
+
+*** prog3.o:
+
+(command line clang -c prog3.S -o prog3.o)
+
+ .globl write
+write:
+ mov $1, %eax
+ syscall
+ ret
+
+ .globl _start
+_start:
+ call main
+ mov $60, %eax
+ syscall
+ ret
+
+We use the following linker script for this test:
+*/
+
+ENTRY(_start)
+
+SECTIONS
+{
+ my_start_addr = 0x500000;
+ my_symbol = my_start_addr;
+ . = my_symbol;
+ .foo : { SORT(*)(.text .rodata*) }
+}
+
+/*
+RUN: mkdir -p %T
+RUN: yaml2obj -format=elf %p/Inputs/prog1.o.yaml -o=%T/p1.o
+RUN: yaml2obj -format=elf %p/Inputs/prog2.o.yaml -o=%T/p2.o
+RUN: yaml2obj -format=elf %p/Inputs/prog3.o.yaml -o=%T/p3.o
+RUN: cd %T
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s p1.o p2.o p3.o \
+RUN: -static -o %t1
+RUN: llvm-readobj -s %t1 | FileCheck -check-prefix CHECKSECTIONS %s
+
+CHECKSECTIONS: Index: 1
+CHECKSECTIONS: Name: .foo
+CHECKSECTIONS: Address: 0x500000
+CHECKSECTIONS: Size: 101
+
+RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: Name: main
+CHECKSYMS-NEXT: Value: 0x500000
+
+CHECKSYMS: Name: prog2
+CHECKSYMS-NEXT: Value: 0x500030
+
+CHECKSYMS: Name: write
+CHECKSYMS-NEXT: Value: 0x500050
+
+CHECKSYMS: Name: _start
+CHECKSYMS-NEXT: Value: 0x500058
+*/
diff --git a/test/old-elf/linkerscript/symbol-definition-so.test b/test/old-elf/linkerscript/symbol-definition-so.test
new file mode 100644
index 000000000000..15b22f6f581f
--- /dev/null
+++ b/test/old-elf/linkerscript/symbol-definition-so.test
@@ -0,0 +1,32 @@
+/*
+We test whether we can define symbols in a linker script and have them exported
+to the output file symbol table. This test is the same as symbol-definition.test
+but make checking in case of shared library linking.
+
+We use the following linker script for this test:
+*/
+
+SECTIONS
+{
+ .text : { *(.text) }
+ MYSTRING = .;
+ .data : { *(.data) }
+}
+
+/*
+RUN: yaml2obj -format=elf %p/Inputs/simple-pic.o.yaml -o=%t.o
+
+RUN: lld -flavor old-gnu -target x86_64 -shared -T %s %t.o -o %t.so
+RUN: llvm-readobj -s -symbols %t.so | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: Name: .data
+CHECKSYMS-NEXT: Type: SHT_PROGBITS
+CHECKSYMS-NEXT: Flags [
+CHECKSYMS-NEXT: SHF_ALLOC
+CHECKSYMS-NEXT: SHF_WRITE
+CHECKSYMS-NEXT: ]
+CHECKSYMS-NEXT: Address: 0x401060
+
+CHECKSYMS: Name: MYSTRING
+CHECKSYMS-NEXT: Value: 0x401060
+*/
diff --git a/test/old-elf/linkerscript/symbol-definition.test b/test/old-elf/linkerscript/symbol-definition.test
new file mode 100644
index 000000000000..daa3b17e9965
--- /dev/null
+++ b/test/old-elf/linkerscript/symbol-definition.test
@@ -0,0 +1,54 @@
+/*
+We test whether we can define symbols in a linker script and have them exported
+to the output file symbol table.
+
+This test uses a single X86-64 input object, simple.o, created with the
+following X86-64 assembly code:
+
+*** simple.S:
+
+(command line clang -c simple.S -o simple.o)
+
+ .text
+ main:
+ mov $1, %eax
+ movq $1, %rdi
+ movq $msg, %rsi
+ movq $14, %rdx
+ syscall
+ ret
+
+ .globl _start
+ _start:
+ call main
+ mov $60, %eax
+ syscall
+ ret
+
+ .data
+ msg: .asciz "Hello, World!\n"
+
+
+We use the following linker script for this test:
+*/
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = 0x500000;
+ .text : { *(.text) }
+ MYSTRING = .;
+ .data : { *(.data) }
+}
+
+/*
+RUN: mkdir -p %T
+RUN: yaml2obj -format=elf %p/Inputs/simple.o.yaml -o=%T/simple.o
+
+RUN: lld -flavor old-gnu -target x86_64 -T %s %T/simple.o -static -o %t1
+RUN: llvm-readobj -symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: Name: MYSTRING
+CHECKSYMS-NEXT: Value: 0x501000
+*/
diff --git a/test/old-elf/linkerscript/valid-script-cli.objtxt b/test/old-elf/linkerscript/valid-script-cli.objtxt
new file mode 100644
index 000000000000..a7342c41f529
--- /dev/null
+++ b/test/old-elf/linkerscript/valid-script-cli.objtxt
@@ -0,0 +1,23 @@
+# Check that the linker script inputs are accepted properly.
+
+# RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/valid.ls -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+# RUN: lld -flavor old-gnu -target x86_64 -T %p/Inputs/valid.ls -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+# RUN: lld -flavor old-gnu -target x86_64 --script=%p/Inputs/valid.ls -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+# RUN: lld -flavor old-gnu -target x86_64 -L%p/Inputs/ -l:valid.ls -r %s \
+# RUN: --output-filetype=yaml | FileCheck %s
+
+defined-atoms:
+ - name: main
+ scope: global
+ content: [ B8, 00, 00, 00, 00, C7, 44, 24, FC, 00, 00, 00, 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+
+# CHECK: _entry_point
diff --git a/test/old-elf/loginputfiles.test b/test/old-elf/loginputfiles.test
new file mode 100644
index 000000000000..f1b78558e9c5
--- /dev/null
+++ b/test/old-elf/loginputfiles.test
@@ -0,0 +1,28 @@
+# Tests functionality of -t
+#
+# Tests generated using the source files below
+# main file
+# int main()
+# {
+# fn();
+# return 0;
+# }
+#
+# archive file
+# int fn()
+# {
+# return 0;
+# }
+#
+# int fn1()
+# {
+# return 0;
+# }
+# gcc -c main.c fn.c fn1.c
+
+RUN: lld -flavor old-gnu -target x86_64-linux \
+RUN: %p/Inputs/mainobj.x86_64 %p/Inputs/libfnarchive.a -t --noinhibit-exec 2>&1 | \
+RUN: FileCheck -check-prefix INPUTFILES %s
+
+#INPUTFILES: mainobj.x86_64
+#INPUTFILES: libfnarchive.a(fn.o)
diff --git a/test/old-elf/mergeatoms.test b/test/old-elf/mergeatoms.test
new file mode 100644
index 000000000000..ec83ac2b8849
--- /dev/null
+++ b/test/old-elf/mergeatoms.test
@@ -0,0 +1,6 @@
+# Tests that atoms are merged by testing it with --merge-strings option
+RUN: lld -flavor old-gnu -target x86_64-linux --merge-strings -o %t1 \
+RUN: %p/Inputs/foo.o.x86-64 %p/Inputs/bar.o.x86-64 -e bar1
+RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=mergeAtoms %s
+
+mergeAtoms: 62617200 666f6f00 bar.foo.
diff --git a/test/old-elf/mergeconstants.test b/test/old-elf/mergeconstants.test
new file mode 100644
index 000000000000..719ae8a8b24e
--- /dev/null
+++ b/test/old-elf/mergeconstants.test
@@ -0,0 +1,20 @@
+# The test checks for mergeable strings that appear in the object file
+RUN: lld -flavor old-gnu --merge-strings --output-filetype=yaml -target x86_64 \
+RUN: %p/Inputs/constants-merge.x86-64 --noinhibit-exec \
+RUN: | FileCheck -check-prefix=mergeAtoms %s
+
+mergeAtoms: - ref-name: [[CONSTANT:[-a-zA-Z0-9_]+]]
+mergeAtoms: type: constant
+mergeAtoms: content: [ 62, 61, 72, 66, 6F, 6F, 00 ]
+mergeAtoms: merge: by-content
+mergeAtoms: section-choice: custom-required
+mergeAtoms: section-name: .rodata.str1.1
+mergeAtoms: - name: foo
+mergeAtoms: scope: global
+mergeAtoms: type: data
+mergeAtoms: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+mergeAtoms: alignment: 8
+mergeAtoms: references:
+mergeAtoms: - kind: R_X86_64_64
+mergeAtoms: offset: 3
+mergeAtoms: target: [[CONSTANT]]
diff --git a/test/old-elf/mergeglobalatoms.test b/test/old-elf/mergeglobalatoms.test
new file mode 100644
index 000000000000..bf8dbf7593f0
--- /dev/null
+++ b/test/old-elf/mergeglobalatoms.test
@@ -0,0 +1,11 @@
+# ELF files can have mergeable strings which are global!, treat them as global
+# defined atoms
+RUN: lld -flavor old-gnu --output-filetype=yaml %p/Inputs/globalconst.o.x86-64 \
+RUN: --noinhibit-exec -target x86_64 | FileCheck -check-prefix=globalatoms %s
+
+globalatoms: - name: mystr
+globalatoms: scope: global
+globalatoms: type: constant
+globalatoms: content: [ 66, 6F, 6F, 62, 61, 72, 00 ]
+globalatoms: section-choice: custom-required
+globalatoms: section-name: .rodata.str1.1
diff --git a/test/old-elf/no-unique-section-names.test b/test/old-elf/no-unique-section-names.test
new file mode 100644
index 000000000000..4c5f79588dbe
--- /dev/null
+++ b/test/old-elf/no-unique-section-names.test
@@ -0,0 +1,19 @@
+# Check handling object files with non-unique named sections.
+
+RUN: lld -flavor old-gnu -target x86_64-linux -shared -o %t \
+RUN: %p/Inputs/no-unique-section-names.x86-64
+RUN: llvm-objdump -s %p/Inputs/no-unique-section-names.x86-64 %t \
+RUN: | FileCheck %s
+
+CHECK: Contents of section .group:
+CHECK-NEXT: 0000 01000000 08000000
+CHECK-NEXT: Contents of section .text:
+CHECK-NEXT: 0000 [[A1:[0-9a-f]+]] [[A2:[0-9a-f]+]] [[A3:[0-9a-f]+]]
+CHECK-NEXT: Contents of section .group:
+CHECK-NEXT: 0000 01000000 0a000000
+CHECK-NEXT: Contents of section .text:
+CHECK-NEXT: 0000 [[B1:[0-9a-f]+]] [[B2:[0-9a-f]+]] [[B3:[0-9a-f]+]]
+
+CHECK: Contents of section .text:
+CHECK: {{[0-9a-f]+}} [[A1]] [[A2]] [[A3]]
+CHECK-NEXT: {{[0-9a-f]+}} [[B1]] [[B2]] [[B3]]
diff --git a/test/old-elf/note.test b/test/old-elf/note.test
new file mode 100644
index 000000000000..aff01c3e5b2a
--- /dev/null
+++ b/test/old-elf/note.test
@@ -0,0 +1,50 @@
+# Check that the linker is not ignoring input sections.
+# RUN: yaml2obj -format=elf %s > %t.obj
+# RUN: lld -flavor old-gnu -target x86_64 %t.obj -o %t.exe --noinhibit-exec
+# RUN: llvm-readobj -s %t.exe | FileCheck %s
+
+# CHECK: Section {
+# CHECK: Name: .note
+# CHECK-NEXT: Type: SHT_NOTE
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .note
+ Type: SHT_NOTE
+ AddressAlign: 0x0000000000000001
+ Content: '00'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .note
+ Type: STT_SECTION
+ Section: .note
+...
diff --git a/test/old-elf/options/dynamic-linker.test b/test/old-elf/options/dynamic-linker.test
new file mode 100644
index 000000000000..6b56f17c677d
--- /dev/null
+++ b/test/old-elf/options/dynamic-linker.test
@@ -0,0 +1,17 @@
+# This tests the functionality of specifying dynamic-linker argument in the
+# command line
+RUN: lld -flavor old-gnu -target x86_64 --dynamic-linker="/xyz.so" \
+RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t
+RUN: llvm-objdump -s %t | FileCheck -check-prefix=DYNAMICINTERP1 %s
+RUN: lld -flavor old-gnu -target x86_64 --dynamic-linker="" \
+RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t1
+RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=DYNAMICINTERP2 %s
+RUN: lld -flavor old-gnu -target x86_64 -dynamic-linker /xyz.so \
+RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t2
+RUN: llvm-objdump -s %t2 | FileCheck -check-prefix=DYNAMICINTERP1 %s
+
+DYNAMICINTERP1:Contents of section .interp:
+DYNAMICINTERP1: 400158 2f78797a 2e736f00 /xyz.so.
+DYNAMICINTERP2:Contents of section .interp:
+DYNAMICINTERP2: 400158 00
+
diff --git a/test/old-elf/options/target-specific-args.test b/test/old-elf/options/target-specific-args.test
new file mode 100644
index 000000000000..ec5edf0ad62e
--- /dev/null
+++ b/test/old-elf/options/target-specific-args.test
@@ -0,0 +1,5 @@
+# Test of target specific options
+# RUN: lld -flavor old-gnu -target x86_64 --target1-rel \
+# RUN: %p/../Inputs/foo.o.x86-64 --noinhibit-exec -o %t 2>&1 | FileCheck %s
+
+# CHECK: warning: ignoring unsupported ARM/ELF specific argument: --target1-rel
diff --git a/test/old-elf/phdr.test b/test/old-elf/phdr.test
new file mode 100644
index 000000000000..c8b3664d025f
--- /dev/null
+++ b/test/old-elf/phdr.test
@@ -0,0 +1,99 @@
+# This test checks emission for program header for ELF binaries
+RUN: lld -flavor old-gnu -target i386-linux -o %t1 -e main %p/Inputs/phdr.i386 \
+RUN: && llvm-readobj -program-headers %t1 | FileCheck -check-prefix=I386 %s
+RUN: lld -flavor old-gnu -target x86_64-linux -o %t1 -e _start %p/Inputs/relocs.x86-64 -static \
+RUN: && llvm-objdump -p %t1 | FileCheck %s -check-prefix=X86_64
+
+
+I386: ProgramHeaders [
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_PHDR (0x6)
+I386-NEXT: Offset: 0x34
+I386-NEXT: VirtualAddress: 0x34
+I386-NEXT: PhysicalAddress: 0x34
+I386-NEXT: FileSize: 224
+I386-NEXT: MemSize: 224
+I386-NEXT: Flags [ (0x5)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: PF_X (0x1)
+I386-NEXT: ]
+I386-NEXT: Alignment: 8
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_INTERP (0x3)
+I386-NEXT: Offset: 0x114
+I386-NEXT: VirtualAddress: 0x114
+I386-NEXT: PhysicalAddress: 0x114
+I386-NEXT: FileSize: 28
+I386-NEXT: MemSize: 28
+I386-NEXT: Flags [ (0x4)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: ]
+I386-NEXT: Alignment: 1
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_LOAD (0x1)
+I386-NEXT: Offset: 0x0
+I386-NEXT: VirtualAddress: 0x0
+I386-NEXT: PhysicalAddress: 0x0
+I386-NEXT: FileSize: 556
+I386-NEXT: MemSize: 556
+I386-NEXT: Flags [ (0x5)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: PF_X (0x1)
+I386-NEXT: ]
+I386-NEXT: Alignment: 4096
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_LOAD (0x1)
+I386-NEXT: Offset: 0x1000
+I386-NEXT: VirtualAddress: 0x1000
+I386-NEXT: PhysicalAddress: 0x1000
+I386-NEXT: FileSize: 260
+I386-NEXT: MemSize: 260
+I386-NEXT: Flags [ (0x6)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: PF_W (0x2)
+I386-NEXT: ]
+I386-NEXT: Alignment: 4096
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_LOAD (0x1)
+I386-NEXT: Offset: 0x4000
+I386-NEXT: VirtualAddress: 0x4000
+I386-NEXT: PhysicalAddress: 0x4000
+I386-NEXT: FileSize: 4
+I386-NEXT: MemSize: 8
+I386-NEXT: Flags [ (0x6)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: PF_W (0x2)
+I386-NEXT: ]
+I386-NEXT: Alignment: 16384
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_DYNAMIC (0x2)
+I386-NEXT: Offset: 0x1FC
+I386-NEXT: VirtualAddress: 0x1FC
+I386-NEXT: PhysicalAddress: 0x1FC
+I386-NEXT: FileSize: 48
+I386-NEXT: MemSize: 48
+I386-NEXT: Flags [ (0x4)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: ]
+I386-NEXT: Alignment: 4
+I386-NEXT: }
+I386-NEXT: ProgramHeader {
+I386-NEXT: Type: PT_GNU_EH_FRAME (0x6474E550)
+I386-NEXT: Offset: 0x1F4
+I386-NEXT: VirtualAddress: 0x1F4
+I386-NEXT: PhysicalAddress: 0x1F4
+I386-NEXT: FileSize: 8
+I386-NEXT: MemSize: 8
+I386-NEXT: Flags [ (0x4)
+I386-NEXT: PF_R (0x4)
+I386-NEXT: ]
+I386-NEXT: Alignment: 4
+I386-NEXT: }
+
+X86_64: LOAD off 0x0000000000000000
+X86_64: LOAD off 0x0000000000001000
diff --git a/test/old-elf/quickdata.test b/test/old-elf/quickdata.test
new file mode 100644
index 000000000000..85ad23d0b8e9
--- /dev/null
+++ b/test/old-elf/quickdata.test
@@ -0,0 +1,15 @@
+RUN: lld -flavor old-gnu -target hexagon --output-filetype=yaml %p/Inputs/quickdata-test.elf-hexagon \
+RUN: --noinhibit-exec | FileCheck %s -check-prefix hexagon
+
+hexagon: - name: ac1
+hexagon: scope: global
+hexagon: type: zero-fill-quick
+hexagon: size: 1
+hexagon: merge: as-tentative
+hexagon: - name: init
+hexagon: scope: global
+hexagon: type: quick-data
+hexagon: - name: bss1
+hexagon: scope: global
+hexagon: type: zero-fill-quick
+
diff --git a/test/old-elf/reloc.test b/test/old-elf/reloc.test
new file mode 100644
index 000000000000..f8cb056e03da
--- /dev/null
+++ b/test/old-elf/reloc.test
@@ -0,0 +1,38 @@
+RUN: lld -flavor old-gnu -target i386 --merge-strings -r --output-filetype=yaml \
+RUN: %p/Inputs/reloc-test.elf-i386 | FileCheck %s -check-prefix ELF-i386
+
+ELF-i386: defined-atoms:
+ELF-i386: - ref-name: [[STRNAMEA:[-a-zA-Z0-9_]+]]
+ELF-i386: type: constant
+ELF-i386: content: [ 68, 65, 6C, 6C, 6F, 20, 77, 6F, 72, 6C, 64, 00 ]
+ELF-i386: merge: by-content
+ELF-i386: - ref-name: [[STRNAMEB:[-a-zA-Z0-9_]+]]
+ELF-i386: alignment: 16
+ELF-i386: section-choice: custom-required
+ELF-i386: section-name: .text.startup
+ELF-i386: references:
+ELF-i386: - kind: layout-after
+ELF-i386: offset: 0
+ELF-i386: target: main
+ELF-i386: - name: main
+ELF-i386: scope: global
+ELF-i386: content: [ 55, 89, E5, 83, E4, F0, 83, EC, 10, C7, 04, 24,
+ELF-i386: 00, 00, 00, 00, E8, FC, FF, FF, FF, 31, C0, C9,
+ELF-i386: C3 ]
+ELF-i386: alignment: 16
+ELF-i386: section-choice: custom-required
+ELF-i386: section-name: .text.startup
+ELF-i386: references:
+ELF-i386: - kind: R_386_32
+ELF-i386: offset: 12
+ELF-i386: target: [[STRNAMEA]]
+ELF-i386: - kind: R_386_PC32
+ELF-i386: offset: 17
+ELF-i386: target: puts
+ELF-i386: addend: 252
+ELF-i386: undefined-atoms:
+ELF-i386: - name: puts
+ELF-i386: absolute-atoms:
+ELF-i386: - name: test.c
+ELF-i386: scope: static
+ELF-i386: value: 0x0000000000000000
diff --git a/test/old-elf/responsefile.test b/test/old-elf/responsefile.test
new file mode 100644
index 000000000000..89e9ffd015bd
--- /dev/null
+++ b/test/old-elf/responsefile.test
@@ -0,0 +1,6 @@
+# RUN: not lld -flavor old-gnu --abc @%p/Inputs/responsefile --baz >& %t.log
+# RUN: FileCheck %s < %t.log
+
+CHECK: warning: ignoring unknown argument: --abc
+CHECK: warning: ignoring unknown argument: --inresponsefile
+CHECK: warning: ignoring unknown argument: --baz
diff --git a/test/old-elf/rodata.test b/test/old-elf/rodata.test
new file mode 100644
index 000000000000..12d9abb2a194
--- /dev/null
+++ b/test/old-elf/rodata.test
@@ -0,0 +1,5 @@
+RUN: lld -flavor old-gnu -target x86_64-linux -o %t %p/Inputs/constdata.x86-64 \
+RUN: -static -e _start
+RUN: llvm-objdump -s %t | FileCheck %s
+
+CHECK: Hellooooooooo
diff --git a/test/old-elf/rosegment.test b/test/old-elf/rosegment.test
new file mode 100644
index 000000000000..675dc3861867
--- /dev/null
+++ b/test/old-elf/rosegment.test
@@ -0,0 +1,26 @@
+# Tests that the option --rosegment produces an output file with a separate
+# segment created for read only data.
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/rodata.o -o %t1.elf \
+RUN: --noinhibit-exec
+RUN: lld -flavor old-gnu -target x86_64 %p/Inputs/rodata.o --rosegment -o %t2.elf \
+RUN: --noinhibit-exec
+RUN: llvm-readobj -program-headers %t1.elf | FileCheck %s -check-prefix=NORO-SEGMENT
+RUN: llvm-readobj -program-headers %t2.elf | FileCheck %s -check-prefix=RO-SEGMENT
+
+#NORO-SEGMENT: Type: PT_PHDR
+#NORO-SEGMENT: Type: PT_INTERP
+#NORO-SEGMENT: Type: PT_LOAD
+#NORO-SEGMENT: Type: PT_LOAD
+#NORO-SEGMENT: Type: PT_DYNAMIC
+#NORO-SEGMENT: Type: PT_GNU_EH_FRAME
+
+#RO-SEGMENT: Type: PT_PHDR
+#RO-SEGMENT: Type: PT_INTERP
+#RO-SEGMENT: Type: PT_LOAD
+#RO-SEGMENT: Type: PT_LOAD
+#RO-SEGMENT: Flags [
+#RO-SEGMENT: PF_R (0x4)
+#RO-SEGMENT: ]
+#RO-SEGMENT: Type: PT_LOAD
+#RO-SEGMENT: Type: PT_DYNAMIC
+#RO-SEGMENT: Type: PT_GNU_EH_FRAME
diff --git a/test/old-elf/sectionGroups/sectiongroup-new-members.test b/test/old-elf/sectionGroups/sectiongroup-new-members.test
new file mode 100644
index 000000000000..dff1a96b07ee
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-new-members.test
@@ -0,0 +1,151 @@
+# Checks that the linker picks the first group in the output file when the file
+# have some members dont appear in the first group.
+# 1a.s
+# ------
+#
+# .section .text,"axG",%progbits,foo_group,comdat
+# .weak foo
+#foo:
+# .word 0
+# 1b.s
+# -----
+# .section .text,"axG",%progbits,foo_group,comdat
+# .global foo
+# .global bar
+#foo:
+# .word 0
+#bar:
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
+#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
+#CHECKGROUP: - name: foo
+#CHECKGROUP: scope: global
+#CHECKGROUP: merge: as-weak
+#CHECKGROUP: section-name: .text
+#CHECKGROUP: - name: foo_group
+#CHECKGROUP: scope: global
+#CHECKGROUP: type: group-comdat
+#CHECKGROUP: section-choice: custom-required
+#CHECKGROUP: section-name: .group
+#CHECKGROUP: permissions: ---
+#CHECKGROUP: references:
+#CHECKGROUP: - kind: group-child
+#CHECKGROUP: offset: 0
+#CHECKGROUP: target: foo
+#CHECKGROUPSECTIONS: Section {
+#CHECKGROUPSECTIONS: Name: .text
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [ (0x6)
+#CHECKGROUPSECTIONS: SHF_ALLOC (0x2)
+#CHECKGROUPSECTIONS: SHF_EXECINSTR (0x4)
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 2
+#CHECKGROUPSECTIONS: AddressAlignment: 1
+#CHECKGROUPSECTIONS: }
+#CHECKSYMBOLS: Name: foo
+#CHECKSYMBOLS: Type: Function
+#CHECKSYMBOLS: Section: .text
+#CHECKSYMBOLS-NOT: Name: bar
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: foo_group
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .text
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+Symbols:
+ Local:
+ - Name: foo_group
+ Section: .group
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Weak:
+ - Name: foo
+ Section: .text
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: foo_group
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .text
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+Symbols:
+ Local:
+ - Name: foo_group
+ Section: .group
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: bar
+ Section: .text
+ Value: 0x0000000000000002
+ - Name: foo
+ Section: .text
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-simple.test b/test/old-elf/sectionGroups/sectiongroup-simple.test
new file mode 100644
index 000000000000..57707f84475e
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-simple.test
@@ -0,0 +1,144 @@
+# Checks that the linker picks the first group in the output file when the file
+# have some members dont appear in the first group.
+# 1a.s
+# ------
+# .section .text,"axG",%progbits,foo_group,comdat
+# .weak foo
+#foo:
+# .word 0
+# 1b.s
+# -----
+# .section .text,"axG",%progbits,foo_group,comdat
+# .global bar
+#bar:
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
+#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
+#CHECKGROUP: - name: foo
+#CHECKGROUP: scope: global
+#CHECKGROUP: merge: as-weak
+#CHECKGROUP: section-name: .text
+#CHECKGROUP: - name: foo_group
+#CHECKGROUP: scope: global
+#CHECKGROUP: type: group-comdat
+#CHECKGROUP: section-choice: custom-required
+#CHECKGROUP: section-name: .group
+#CHECKGROUP: permissions: ---
+#CHECKGROUP: references:
+#CHECKGROUP: - kind: group-child
+#CHECKGROUP: offset: 0
+#CHECKGROUP: target: foo
+#CHECKGROUPSECTIONS: Section {
+#CHECKGROUPSECTIONS: Name: .text
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [ (0x6)
+#CHECKGROUPSECTIONS: SHF_ALLOC (0x2)
+#CHECKGROUPSECTIONS: SHF_EXECINSTR (0x4)
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 2
+#CHECKGROUPSECTIONS: AddressAlignment: 1
+#CHECKGROUPSECTIONS: }
+#CHECKSYMBOLS: Name: foo
+#CHECKSYMBOLS: Type: Function
+#CHECKSYMBOLS: Section: .text
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: foo_group
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .text
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+Symbols:
+ Local:
+ - Name: foo_group
+ Section: .group
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Weak:
+ - Name: foo
+ Section: .text
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: foo_group
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .text
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: foo_group
+ Section: .group
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: bar
+ Section: .text
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-undef-member-other.test b/test/old-elf/sectionGroups/sectiongroup-undef-member-other.test
new file mode 100644
index 000000000000..56595e59d8d6
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-undef-member-other.test
@@ -0,0 +1,156 @@
+# Tests that linker throws an error for an undefined symbol in the section
+# group, which is the same as the signature in the next input file.
+# comdat1.s
+# ------------
+# .section .foo,"axG",@progbits,g1,comdat
+# .word g1
+#comdat2.s
+#-----------
+# .global g1
+# .section .bar,"axG",@progbits,g1,comdat
+#g2:
+# nop
+# .section .car,"axG",@progbits,g1,comdat
+#g3:
+# nop
+#
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec -o %t2.out 2>&1 | FileCheck %s
+#CHECK: Undefined symbol: {{.*}} g1
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - SectionOrType: .rela.foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+ - Name: .rela.foo
+ Type: SHT_RELA
+ Flags: [ SHF_GROUP ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .foo
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: g1
+ Type: R_X86_64_16
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ - Name: .group
+ Type: STT_SECTION
+ Section: .group
+ Global:
+ - Name: g1
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .bar
+ - SectionOrType: .car
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .bar
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '90'
+ - Name: .car
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '90'
+Symbols:
+ Local:
+ - Name: g2
+ Section: .bar
+ - Name: g3
+ Section: .car
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .bar
+ Type: STT_SECTION
+ Section: .bar
+ - Name: .car
+ Type: STT_SECTION
+ Section: .car
+ - Name: .group
+ Type: STT_SECTION
+ Section: .group
+ Global:
+ - Name: g1
+ Section: .group
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-undef-member.test b/test/old-elf/sectionGroups/sectiongroup-undef-member.test
new file mode 100644
index 000000000000..65e9ec7632bf
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-undef-member.test
@@ -0,0 +1,142 @@
+# Tests that linker throws an error for an undefined symbol in the section
+# group.
+#
+#comdata.s
+#------------
+# .section .foo,"axG",@progbits,g1,comdat
+# .word g1
+#
+#comdatb.s
+#------------
+# .global g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# nop
+#
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.group1a.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.group1b.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.group1a.o %t.group1b.o \
+#RUN: --noinhibit-exec -o %t2.out 2>&1 | FileCheck %s
+#CHECK: Undefined symbol: {{.*}} g1
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - SectionOrType: .rela.foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+ - Name: .rela.foo
+ Type: SHT_RELA
+ Flags: [ SHF_GROUP ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .foo
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: g1
+ Type: R_X86_64_16
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ - Name: .group
+ Type: STT_SECTION
+ Section: .group
+ Global:
+ - Name: g1
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '90'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ - Name: .group
+ Type: STT_SECTION
+ Section: .group
+ Global:
+ - Name: g1
+ Section: .foo
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-with-globalsymbols.test b/test/old-elf/sectionGroups/sectiongroup-with-globalsymbols.test
new file mode 100644
index 000000000000..9f8f80c23605
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-with-globalsymbols.test
@@ -0,0 +1,250 @@
+# This tests that comdat weak symbol can be overridden by a global symbol.
+# comdat1.s
+#------------------------
+# .weak g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# nop
+# .global g2
+#g2:
+# nop
+#!
+#
+#comdat2.s << \!
+#-----------------
+# .global g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# nop
+# .global g2
+#g2:
+# nop
+#
+#cat > g1.c << \!
+#int g1() {
+# return 0;
+#}
+#
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
+#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
+#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
+#CHECKGROUP: - name: g2
+#CHECKGROUP: content: [ 90 ]
+#CHECKGROUP: section-choice: custom-required
+#CHECKGROUP: section-name: .foo
+#CHECKGROUP: - name: g1
+#CHECKGROUP: scope: global
+#CHECKGROUP: content: [ 55, 48, 89, E5, 31, C0, 5D, C3 ]
+#CHECKGROUP: alignment: 16
+#CHECKGROUP: section-name: .text
+#CHECKGROUPSECTIONS: Name: .text
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [
+#CHECKGROUPSECTIONS: SHF_ALLOC
+#CHECKGROUPSECTIONS: SHF_EXECINSTR
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 8
+#CHECKGROUPSECTIONS: Name: .foo
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [
+#CHECKGROUPSECTIONS: SHF_ALLOC
+#CHECKGROUPSECTIONS: SHF_EXECINSTR
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 2
+#CHECKSYMBOLS: Name: g2
+#CHECKSYMBOLS: Section: .foo
+#CHECKSYMBOLS: Name: g1
+#CHECKSYMBOLS: Section: .text
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '9090'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g2
+ Section: .foo
+ Value: 0x0000000000000001
+ Weak:
+ - Name: g1
+ Section: .foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '9090'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g1
+ Section: .foo
+ - Name: g2
+ Section: .foo
+ Value: 0x0000000000000001
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E531C05DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000000800000000410E108602430D0600000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: g1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: g1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000008
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-with-undef-external-reference.test b/test/old-elf/sectionGroups/sectiongroup-with-undef-external-reference.test
new file mode 100644
index 000000000000..0c5d65ad544f
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-with-undef-external-reference.test
@@ -0,0 +1,236 @@
+# This tests that comdat undef symbol is overridden by a global symbol.
+# comdat1.s
+#------------------------
+# .global g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# .word 5
+#
+#comdat2.s << \!
+#-----------------
+# .global g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# nop
+#
+#g1.c
+#-----------
+#extern int g1;
+#int fn() { return g1;}
+#
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
+#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
+#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
+#CHECKGROUP: - name: g1
+#CHECKGROUP: scope: global
+#CHECKGROUP: content: [ 05, 00 ]
+#CHECKGROUP: section-name: .foo
+#CHECKGROUPSECTIONS: Section {
+#CHECKGROUPSECTIONS: Name: .foo
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [
+#CHECKGROUPSECTIONS: SHF_ALLOC
+#CHECKGROUPSECTIONS: SHF_EXECINSTR
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 2
+#CHECKGROUPSECTIONS: }
+#CHECKSYMBOLS: Name: g1
+#CHECKSYMBOLS: Section: .foo
+#CHECKSYMBOLS: Name: fn
+#CHECKSYMBOLS: Section: .text
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0500'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g1
+ Section: .foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '90'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g1
+ Section: .foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E58B0425000000005DC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000007
+ Symbol: g1
+ Type: R_X86_64_32S
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C0708900100001C0000001C000000000000000D00000000410E108602430D0600000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: global-g1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: fn
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000D
+ - Name: g1
+...
diff --git a/test/old-elf/sectionGroups/sectiongroup-with-undef-signature.test b/test/old-elf/sectionGroups/sectiongroup-with-undef-signature.test
new file mode 100644
index 000000000000..83a69a3828b2
--- /dev/null
+++ b/test/old-elf/sectionGroups/sectiongroup-with-undef-signature.test
@@ -0,0 +1,219 @@
+# This tests that comdat undef symbol is overridden by a global symbol.
+# comdat1.s
+#------------------------
+# .section .foo,"axG",@progbits,g1,comdat
+# word g1
+#
+#comdat2.s << \!
+#-----------------
+# .global g1
+# .section .foo,"axG",@progbits,g1,comdat
+#g1:
+# nop
+#
+#global-g1.c
+#-----------
+#int g1=10;
+#
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.comdat1.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.comdat2.o
+#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.g1.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec --output-filetype=yaml -o %t2.out.yaml
+#RUN: lld -flavor old-gnu -target x86_64 %t.comdat1.o %t.comdat2.o \
+#RUN: %t.g1.o --noinhibit-exec -o %t2.out
+#RUN: FileCheck %s -check-prefix=CHECKGROUP < %t2.out.yaml
+#RUN: llvm-readobj -sections %t2.out | FileCheck %s -check-prefix=CHECKGROUPSECTIONS
+#RUN: llvm-readobj -symbols %t2.out | FileCheck %s -check-prefix=CHECKSYMBOLS
+#CHECKGROUP: - name: g1
+#CHECKGROUP: scope: global
+#CHECKGROUP: content: [ 0A, 00, 00, 00 ]
+#CHECKGROUP: section-name: .data
+#CHECKGROUPSECTIONS: Name: .foo
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [
+#CHECKGROUPSECTIONS: SHF_ALLOC
+#CHECKGROUPSECTIONS: SHF_EXECINSTR
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 2
+#CHECKGROUPSECTIONS: Name: .data
+#CHECKGROUPSECTIONS: Type: SHT_PROGBITS
+#CHECKGROUPSECTIONS: Flags [
+#CHECKGROUPSECTIONS: SHF_ALLOC
+#CHECKGROUPSECTIONS: SHF_WRITE
+#CHECKGROUPSECTIONS: ]
+#CHECKGROUPSECTIONS: Size: 4
+#CHECKSYMBOLS: Name: g1
+#CHECKSYMBOLS: Section: .data
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - SectionOrType: .rela.foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '0000'
+ - Name: .rela.foo
+ Type: SHT_RELA
+ Flags: [ SHF_GROUP ]
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .foo
+ Relocations:
+ - Offset: 0x0000000000000000
+ Symbol: g1
+ Type: R_X86_64_16
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g1
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 0x0000000000000004
+ Info: g1
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .foo
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ AddressAlign: 0x0000000000000001
+ Content: '90'
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .foo
+ Type: STT_SECTION
+ Section: .foo
+ Global:
+ - Name: g1
+ Section: .foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: 0A000000
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232393535372920286C6C766D2F7472756E6B203232393536332900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+Symbols:
+ Local:
+ - Name: global-g1.c
+ Type: STT_FILE
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ Global:
+ - Name: g1
+ Type: STT_OBJECT
+ Section: .data
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/sections.test b/test/old-elf/sections.test
new file mode 100644
index 000000000000..f36cad619186
--- /dev/null
+++ b/test/old-elf/sections.test
@@ -0,0 +1,142 @@
+# This test checks if sections are created properly in the output that appear in
+# the input
+RUN: lld -flavor old-gnu -target i386 -o %t1 %p/Inputs/section-test.i386 \
+RUN: -static -e baz
+RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=OBJDUMP %s
+RUN: llvm-readobj -h -s -t %t1 | FileCheck -check-prefix=READOBJ %s
+
+OBJDUMP: 0 00000000 0000000000000000
+OBJDUMP: 1 .text 0000000a 0000000000000074 TEXT DATA
+OBJDUMP: 2 .data 00000004 0000000000001000 DATA
+OBJDUMP: 3 .special 00000004 0000000000001004 DATA
+OBJDUMP: 4 .anotherspecial 00000004 0000000000001008 DATA
+OBJDUMP: 5 .bss 00000004 000000000000100c BSS
+OBJDUMP: 6 .shstrtab {{[0-9a-f]+}} 0000000000000000
+OBJDUMP: 7 .symtab {{[0-9a-f]+}} 0000000000000000
+OBJDUMP: 8 .strtab {{[0-9a-f]+}} 0000000000000000
+
+READOBJ: Format: ELF32-i386
+READOBJ: Arch: i386
+READOBJ: AddressSize: 32bit
+READOBJ: ElfHeader {
+READOBJ: Ident {
+READOBJ: DataEncoding: LittleEndian (0x1)
+READOBJ: }
+READOBJ: Machine: EM_386
+READOBJ: }
+
+READOBJ: Sections [
+READOBJ: Section {
+READOBJ: Index: 0
+READOBJ: Name: (0)
+READOBJ: Type: SHT_NULL
+READOBJ: Flags [ (0x0)
+READOBJ: ]
+READOBJ: Address: 0x0
+READOBJ: Size: 0
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 1
+READOBJ: Name: .text
+READOBJ: Type: SHT_PROGBITS
+READOBJ: Flags [ (0x6)
+READOBJ: SHF_ALLOC
+READOBJ: SHF_EXECINSTR
+READOBJ: ]
+READOBJ: Address: 0x74
+READOBJ: Size: 10
+READOBJ: AddressAlignment: 4
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 2
+READOBJ: Name: .data
+READOBJ: Type: SHT_PROGBITS
+READOBJ: Flags [ (0x3)
+READOBJ: SHF_ALLOC
+READOBJ: SHF_WRITE
+READOBJ: ]
+READOBJ: Address: 0x1000
+READOBJ: Size: 4
+READOBJ: AddressAlignment: 4
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 3
+READOBJ: Name: .special
+READOBJ: Type: SHT_PROGBITS
+READOBJ: Flags [ (0x3)
+READOBJ: SHF_ALLOC
+READOBJ: SHF_WRITE
+READOBJ: ]
+READOBJ: Address: 0x1004
+READOBJ: Size: 4
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 4
+READOBJ: Name: .anotherspecial
+READOBJ: Type: SHT_PROGBITS
+READOBJ: Flags [ (0x3)
+READOBJ: SHF_ALLOC
+READOBJ: SHF_WRITE
+READOBJ: ]
+READOBJ: Address: 0x1008
+READOBJ: Size: 4
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 5
+READOBJ: Name: .bss
+READOBJ: Type: SHT_NOBITS
+READOBJ: Flags [ (0x3)
+READOBJ: SHF_ALLOC
+READOBJ: SHF_WRITE
+READOBJ: ]
+READOBJ: Address: 0x100C
+READOBJ: Size: 4
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 6
+READOBJ: Name: .shstrtab
+READOBJ: Type: SHT_STRTAB
+READOBJ: Flags [ (0x0)
+READOBJ: ]
+READOBJ: Address: 0x0
+READOBJ: Link: 0
+READOBJ: AddressAlignment: 1
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 7
+READOBJ: Name: .symtab
+READOBJ: Type: SHT_SYMTAB
+READOBJ: Flags [ (0x0)
+READOBJ: ]
+READOBJ: Address: 0x0
+READOBJ: Link: 8
+READOBJ: AddressAlignment: 4
+READOBJ: EntrySize: 16
+READOBJ: }
+READOBJ: Section {
+READOBJ: Index: 8
+READOBJ: Name: .strtab
+READOBJ: Type: SHT_STRTAB
+READOBJ: Flags [ (0x0)
+READOBJ: ]
+READOBJ: Address: 0x0
+READOBJ: }
+READOBJ: ]
+
+READOBJ: Symbols [
+READOBJ: Symbol {
+READOBJ: Name: baz
+READOBJ: Value: 0x74
+READOBJ: Size: 10
+READOBJ: Binding: Global
+READOBJ: Type: Function
+READOBJ: Section: .text
+READOBJ: }
+READOBJ: Symbol {
+READOBJ: Name: y
+READOBJ: Value: 0x1004
+READOBJ: Size: 4
+READOBJ: Binding: Global
+READOBJ: Type: Object
+READOBJ: Section: .special
+READOBJ: }
diff --git a/test/old-elf/sh_addralign.test b/test/old-elf/sh_addralign.test
new file mode 100644
index 000000000000..97ddd5f1030a
--- /dev/null
+++ b/test/old-elf/sh_addralign.test
@@ -0,0 +1,37 @@
+# Check handling of section alignment.
+# RUN: yaml2obj -format=elf %s > %t-obj
+# RUN: lld -flavor old-gnu -target arm64 -o %t-exe %t-obj
+# RUN: llvm-objdump -h %t-exe | FileCheck %s
+
+# CHECK: 8 .data 00000000 0000000000402000 DATA
+
+!ELF
+FileHeader: !FileHeader
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_AARCH64
+
+Sections:
+- Name: .text
+ Type: SHT_PROGBITS
+ Content: ''
+ AddressAlign: 0
+ Flags: [SHF_ALLOC, SHF_EXECINSTR]
+- Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 1
+ Size: 0x1000
+- Name: .data
+ Type: SHT_PROGBITS
+ Content: ''
+ AddressAlign: 4096
+ Flags: [SHF_ALLOC, SHF_WRITE]
+
+Symbols:
+ Global:
+ - Name: _start
+ Section: .text
+ Value: 0x0
+ Size: 4
diff --git a/test/old-elf/shndx.test b/test/old-elf/shndx.test
new file mode 100644
index 000000000000..c86fa3349b5f
--- /dev/null
+++ b/test/old-elf/shndx.test
@@ -0,0 +1,18 @@
+Test that we can handle shndx. The test file has a shndx despite having only
+a few sections. One might consider it invalid, but it has a clear interpretation
+and avoids needing 65K sections to test the corresponding code path.
+
+RUN: lld -target x86_64-pc-linux -flavor old-gnu %p/Inputs/shndx.o-x86_64 -o %t.so -shared
+RUN: llvm-readobj -s -t %t.so | FileCheck %s
+
+CHECK: Name: .text
+CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+CHECK-NEXT: Flags [ (0x6)
+CHECK-NEXT: SHF_ALLOC (0x2)
+CHECK-NEXT: SHF_EXECINSTR (0x4)
+CHECK-NEXT: ]
+CHECK-NEXT: Address: [[ADDR:.*]]
+
+// CHECK: Symbol {
+// CHECK: Name: foo
+// CHECK-NEXT: Value: [[ADDR]]
diff --git a/test/old-elf/soname.test b/test/old-elf/soname.test
new file mode 100644
index 000000000000..b4dce9746d48
--- /dev/null
+++ b/test/old-elf/soname.test
@@ -0,0 +1,6 @@
+RUN: lld -flavor old-gnu -shared -target i386 -e main %p/Inputs/writersyms.o \
+RUN: -o %t -soname libtest.so
+RUN: llvm-readobj -dynamic-table %t | FileCheck %s
+
+CHECK: LoadName: libtest.so
+CHECK: 0x0000000E SONAME LibrarySoname (libtest.so)
diff --git a/test/old-elf/start-stop-sym.test b/test/old-elf/start-stop-sym.test
new file mode 100644
index 000000000000..62c16a91ee69
--- /dev/null
+++ b/test/old-elf/start-stop-sym.test
@@ -0,0 +1,108 @@
+# Check __start_XXX and __stop_XXX symbols handling where XXX
+# is a section name which can be represented as a C identifier.
+
+# RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
+# RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
+# RUN: lld -flavor old-gnu -target mipsel -static -e T0 -o %t.exe %t1.o %t2.o
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s
+
+# CHECK: Contents of section .text:
+# CHECK-NEXT: 400080 a0004000 b4004000 00000000 00000000
+# ^ start of _csec section
+# ^ end of _csec section
+# CHECK-NEXT: 400090 a0004000 b4004000
+# CHECK-NEXT: Contents of section _csec:
+# CHECK-NEXT: 4000a0 00000000 00000000 00000000 00000000
+# CHECK-NEXT: 4000b0 00000000
+
+# CHECK: 004000a0 g *ABS* 00000000 __start__csec
+# CHECK: 004000b4 g *ABS* 00000000 __stop__csec
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: __start__csec
+ Type: R_MIPS_32
+ - Offset: 4
+ Symbol: __stop__csec
+ Type: R_MIPS_32
+
+ - Name: _csec
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Weak:
+ - Name: __start__csec
+ - Name: __stop__csec
+ Global:
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+
+---
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
+
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 16
+ Size: 8
+
+ - Name: .rel.text
+ Type: SHT_REL
+ Link: .symtab
+ AddressAlign: 4
+ Info: .text
+ Relocations:
+ - Offset: 0
+ Symbol: __start__csec
+ Type: R_MIPS_32
+ - Offset: 4
+ Symbol: __stop__csec
+ Type: R_MIPS_32
+
+ - Name: _csec
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 16
+ Size: 4
+
+Symbols:
+ Weak:
+ - Name: __start__csec
+ - Name: __stop__csec
+ Global:
+ - Name: T1
+ Type: STT_FUNC
+ Section: .text
+ Size: 8
+...
diff --git a/test/old-elf/strip-all.test b/test/old-elf/strip-all.test
new file mode 100644
index 000000000000..faf30349ec84
--- /dev/null
+++ b/test/old-elf/strip-all.test
@@ -0,0 +1,108 @@
+# Tests the --strip-all (-s) flag.
+# We expect that .symtab and .strtab are stripped from the final executable.
+#
+# The following code was used to generate the object.
+# $ clang -c blah.c -o blah
+#
+# void
+# callMeMaybe(int *v)
+# {
+# *v += 1;
+# }
+#
+# int
+# main(void)
+# {
+#
+# int blah = 42;
+# callMeMaybe(&blah);
+# }
+
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -e=main --strip-all -o %t1
+#RUN: llvm-objdump -section-headers %t1 | FileCheck %s
+
+#CHECK: 14 .shstrtab 0000007d 0000000000000000
+#CHECK-NOT: 15 .symtab 00000198 0000000000000000
+#CHECK-NOT: 16 .strtab 000000e4 0000000000000000
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E548897DF8488B7DF88B07050100000089075DC3660F1F840000000000554889E54883EC10488D7DFCC745FC2A000000E8C8FFFFFFB8000000004883C4105DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000001700000000410E108602430D060000001800000038000000000000002300000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: callMeMaybe
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000017
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000023
+...
diff --git a/test/old-elf/stripped-empty.test b/test/old-elf/stripped-empty.test
new file mode 100644
index 000000000000..ddf3b3899d10
--- /dev/null
+++ b/test/old-elf/stripped-empty.test
@@ -0,0 +1,4 @@
+RUN: lld -flavor old-gnu -shared -o test.so \
+RUN: -target x86_64 %p/Inputs/stripped-empty.x86_64
+
+test that we handle files without a symbol table.
diff --git a/test/old-elf/symbols.test b/test/old-elf/symbols.test
new file mode 100644
index 000000000000..bcf399e86eb8
--- /dev/null
+++ b/test/old-elf/symbols.test
@@ -0,0 +1,33 @@
+# Tests the functionality of archive libraries reading
+# and resolution
+# Note: The binary files would not be required once we have support to generate
+# binary archives from textual(yaml) input
+#
+# Tests generated using the source files below
+# main file
+#
+#extern int __bss_start __attribute__ ((weak));
+#int a;
+#int main()
+#{
+# return 0;
+#}
+#
+
+RUN: lld -flavor old-gnu -target i386 -e main %p/Inputs/writersyms.o -o %t1
+RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSYMS %s
+RUN: lld -flavor old-gnu -shared -target i386 -e main %p/Inputs/writersyms.o -o %t1
+RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSHAREDSYMS %s
+
+CHECKSYMS: {{[0-9a-f]+}} a 1.c
+CHECKSYMS: {{[0-9a-f]+}} T main
+CHECKSYMS: {{[0-9a-f]+}} A __bss_start
+CHECKSYMS: {{[0-9a-f]+}} B a
+CHECKSYMS: {{[0-9a-f]+}} A __bss_end
+CHECKSYMS: {{[0-9a-f]+}} A _end
+CHECKSYMS: {{[0-9a-f]+}} A end
+
+CHECKSHAREDSYMS: {{[0-9a-f]+}} a 1.c
+CHECKSHAREDSYMS: {{[0-9a-f]+}} T main
+CHECKSHAREDSYMS: {{[0-9a-f]+}} B a
+CHECKSHAREDSYMS: {{[0-9a-f]+}} A _end
diff --git a/test/old-elf/tls-tbss-size.test b/test/old-elf/tls-tbss-size.test
new file mode 100644
index 000000000000..a7fd86cb7b43
--- /dev/null
+++ b/test/old-elf/tls-tbss-size.test
@@ -0,0 +1,176 @@
+# This test verify if external TLS non initialized variables (tbss) are
+# accounted in TBSS segment size
+
+# The input file 'test/elf/Inputs/tls-tbss-size.yaml' declares:
+#
+# __thread int t0;
+# __thread int t1;
+# __thread int t2;
+# __thread int t3;
+#
+# And the 'test/elf/tls-tbss-size.test' defines:
+#
+# __thread int t4;
+# __thread int t5;
+# __thread int t6;
+# __thread int t7;
+#
+# __thread int t8 = 3;
+# __thread int t9 = 4;
+# __thread int t10 = 5;
+# __thread int t11 = 6;
+
+#RUN: yaml2obj -format=elf -o=%t-t1.o %p/Inputs/tls-tbss-size.yaml
+#RUN: yaml2obj -format=elf -o=%t-t0.o %s
+#RUN: lld -flavor old-gnu -target x86_64-linux --noinhibit-exec -o %t.exe %t-t0.o %t-t1.o
+#RUN: llvm-readobj --sections %t.exe | FileCheck %s
+
+#CHECK: Sections [
+#CHECK: Section {
+#CHECK: Index: 9
+#CHECK: Name: .tdata (71)
+#CHECK: Size: 16
+#CHECK: }
+#CHECK: Section {
+#CHECK: Index: 10
+#CHECK: Name: .tbss (78)
+#CHECK: Size: 32
+#CHECK: }
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 488B050000000064C70001000000488B050000000064C70002000000488B050000000064C70003000000488B050000000064C7000400000064C70425000000000500000064C70425000000000600000064C70425000000000700000064C70425000000000800000031C0C3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000003
+ Symbol: t0
+ Type: R_X86_64_GOTTPOFF
+ Addend: -4
+ - Offset: 0x0000000000000011
+ Symbol: t1
+ Type: R_X86_64_GOTTPOFF
+ Addend: -4
+ - Offset: 0x000000000000001F
+ Symbol: t2
+ Type: R_X86_64_GOTTPOFF
+ Addend: -4
+ - Offset: 0x000000000000002D
+ Symbol: t3
+ Type: R_X86_64_GOTTPOFF
+ Addend: -4
+ - Offset: 0x000000000000003C
+ Symbol: t4
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000048
+ Symbol: t5
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000054
+ Symbol: t6
+ Type: R_X86_64_TPOFF32
+ - Offset: 0x0000000000000060
+ Symbol: t7
+ Type: R_X86_64_TPOFF32
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .tdata
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Content: '03000000040000000500000006000000'
+ - Name: .tbss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ]
+ AddressAlign: 0x0000000000000004
+ Size: 16
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000017A5200017810011B0C070890010000140000001C000000000000006B0000000000000000000000
+Symbols:
+ Local:
+ - Name: .tbss
+ Type: STT_TLS
+ Section: .tbss
+ - Name: .tdata
+ Type: STT_TLS
+ Section: .tdata
+ - Type: STT_SECTION
+ Section: .text
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000006B
+ - Name: t0
+ Type: STT_TLS
+ - Name: t1
+ Type: STT_TLS
+ - Name: t10
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x0000000000000008
+ Size: 0x0000000000000004
+ - Name: t11
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x000000000000000C
+ Size: 0x0000000000000004
+ - Name: t2
+ Type: STT_TLS
+ - Name: t3
+ Type: STT_TLS
+ - Name: t4
+ Type: STT_TLS
+ Section: .tbss
+ Size: 0x0000000000000004
+ - Name: t5
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+ - Name: t6
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x0000000000000008
+ Size: 0x0000000000000004
+ - Name: t7
+ Type: STT_TLS
+ Section: .tbss
+ Value: 0x000000000000000C
+ Size: 0x0000000000000004
+ - Name: t8
+ Type: STT_TLS
+ Section: .tdata
+ Size: 0x0000000000000004
+ - Name: t9
+ Type: STT_TLS
+ Section: .tdata
+ Value: 0x0000000000000004
+ Size: 0x0000000000000004
+...
diff --git a/test/old-elf/tls.test b/test/old-elf/tls.test
new file mode 100644
index 000000000000..6fb33941a88c
--- /dev/null
+++ b/test/old-elf/tls.test
@@ -0,0 +1,43 @@
+# REQUIRES: x86
+
+# This tests verifies that TLS variables have correct offsets
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 -static \
+RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s -check-prefix=YAML
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tls.x86-64 -o %t \
+RUN: --noinhibit-exec -e main -static && llvm-objdump -d %t | FileCheck %s
+
+// Verify that the TLS accesses have the correct offsets.
+
+YAML: name: main
+YAML: references:
+YAML: kind: R_X86_64_TPOFF32
+YAML: offset: 9
+YAML: target: tls1
+YAML: kind: R_X86_64_TPOFF32
+YAML: offset: 17
+YAML: target: tls0
+YAML: kind: R_X86_64_TPOFF32
+YAML: offset: 25
+YAML: target: tls2
+
+YAML: name: GOTTPOFF
+YAML: kind: R_X86_64_GOTTPOFF
+YAML: target: [[GOTNAME:[a-zA-Z0-9_]+]]
+
+YAML: type: got
+YAML: references:
+YAML: kind: R_X86_64_TPOFF64
+YAML: target: tls2
+
+// main
+CHECK: addl %fs:-4
+CHECK: addl %fs:-8
+CHECK: addl %fs:-12
+
+// GOTTPOFF
+CHECK: movq {{[0-9]+}}(%rip)
+
+// TLSLD
+CHECK: movq %fs:0, %rax
+CHECK: leaq -8(%rax), %rax
diff --git a/test/old-elf/tlsAddr.test b/test/old-elf/tlsAddr.test
new file mode 100644
index 000000000000..bcb089c504ed
--- /dev/null
+++ b/test/old-elf/tlsAddr.test
@@ -0,0 +1,7 @@
+# This tests verifies that TLS variables have correct offsets
+# and that TBSS doesn't occupy memory
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/tlsAddr.x86-64 -static \
+RUN: -o %t --noinhibit-exec
+RUN: llvm-objdump -section-headers %t | FileCheck -check-prefix=CHECKADDR %s
+
+CHECKADDR: {{[0-9]+}} .data 00000000 0000000000401008 DATA
diff --git a/test/old-elf/undef-from-dso-to-main.test b/test/old-elf/undef-from-dso-to-main.test
new file mode 100644
index 000000000000..c19a0197061e
--- /dev/null
+++ b/test/old-elf/undef-from-dso-to-main.test
@@ -0,0 +1,52 @@
+# Tests that a reference from a DSO to a regular object
+# forces the final executable to export the symbol.
+
+#RUN: yaml2obj -format=elf %p/Inputs/undef2-so.o.yaml -o=%t.o.so
+#RUN: lld -flavor old-gnu -target x86_64 -shared %t.o.so -o %T/libundef2.so
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -L%T -lundef2 -o %t1
+#RUN: llvm-readobj -dyn-symbols %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000001
+ Content: C3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Size: 4
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ Global:
+ - Name: myexportedsymbol
+ Type: STT_OBJECT
+ Section: .bss
+ Size: 0x0000000000000004
+ - Name: _start
+ Section: .text
+ Size: 0x0000000000000001
+
+#CHECKSYMS: myexportedsymbol
diff --git a/test/old-elf/undef-from-main-dso.test b/test/old-elf/undef-from-main-dso.test
new file mode 100644
index 000000000000..8722a55f672c
--- /dev/null
+++ b/test/old-elf/undef-from-main-dso.test
@@ -0,0 +1,43 @@
+RUN: lld -flavor old-gnu -target x86_64 -e main -o %t -L%p/Inputs \
+RUN: %p/Inputs/undef.o -lundef
+RUN: llvm-readobj -relocations -symbols -dyn-symbols %t | FileCheck %s
+
+RUN: lld -flavor old-gnu -target x86_64 -e main -o %t -L%p/Inputs \
+RUN: %p/Inputs/undef-pc32.o -lundef
+RUN: llvm-readobj -relocations -symbols -dyn-symbols %t | FileCheck %s
+
+# DSO source code:
+# int x[2] = { 1, 2 };
+#
+# Main binary source code:
+#
+# extern int x[2];
+#
+# int main(void)
+# {
+# x[0] = 2;
+# }
+#
+
+CHECK: Relocations [
+CHECK-NEXT: Section ({{[0-9]+}}) .rela.dyn {
+CHECK-NEXT: 0x{{[1-9A-F][0-9A-F]*}} R_X86_64_COPY x 0x0
+CHECK-NEXT: }
+CHECK-NEXT: ]
+
+CHECK: Name: x ({{[0-9]+}}
+CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
+CHECK-NEXT: Size: 8
+CHECK-NEXT: Binding: Global (0x1)
+CHECK-NEXT: Type: Object (0x1)
+CHECK-NEXT: Other: 0
+CHECK-NEXT: Section: .bss
+
+CHECK: Name: x@ ({{[0-9]+}}
+CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
+CHECK-NEXT: Size: 8
+CHECK-NEXT: Binding: Global (0x1)
+CHECK-NEXT: Type: Object (0x1)
+CHECK-NEXT: Other: 0
+CHECK-NEXT: Section: .bss
+
diff --git a/test/old-elf/weaksym.test b/test/old-elf/weaksym.test
new file mode 100644
index 000000000000..59d997edc64c
--- /dev/null
+++ b/test/old-elf/weaksym.test
@@ -0,0 +1,7 @@
+# Tests that a weak reference remains a weak reference,
+# even if a shared library defines the symbol weak as well.
+
+RUN: lld -flavor old-gnu -target x86_64 -shared %p/Inputs/weaksym.o -L%p/Inputs -lweaksym -o %t1
+RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: w weaksym
diff --git a/test/old-elf/wrap.test b/test/old-elf/wrap.test
new file mode 100644
index 000000000000..427764970be8
--- /dev/null
+++ b/test/old-elf/wrap.test
@@ -0,0 +1,276 @@
+# This tests the functionality of using the --wrap option.
+# The test case is extracted by compiling and linking the following code.
+#
+#cat > main.c << \!
+#int main() {
+# foo();
+# return 0;
+#}
+#!
+#
+#cat > wrapfoo.c << \!
+#int __wrap_foo() {
+# __real_foo();
+# return 0;
+#}
+#!
+#
+#cat > realfoo.c << \!
+#int foo() {
+# return 0;
+#}
+#!
+#
+#clang main.c wrapfoo.c realfoo.c -Xlinker --wrap -Xlinker foo
+#RUN: yaml2obj -format=elf -docnum 1 %s -o %t.main.o
+#RUN: yaml2obj -format=elf -docnum 2 %s -o %t.wrapfoo.o
+#RUN: yaml2obj -format=elf -docnum 3 %s -o %t.realfoo.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.main.o %t.wrapfoo.o %t.realfoo.o \
+#RUN: --wrap foo --wrap foo --noinhibit-exec --output-filetype=yaml -o %t2.out
+#RUN: lld -flavor old-gnu -target x86_64 %t.main.o %t.wrapfoo.o \
+#RUN: --wrap foo --wrap foo --noinhibit-exec --output-filetype=yaml -o %t2.out.undef 2>&1 | \
+#RUN: FileCheck %s -check-prefix=CHECKUNDEF
+#CHECKWRAP: - name: main
+#CHECKWRAP: references:
+#CHECKWRAP: - kind: R_X86_64_PC32
+#CHECKWRAP: target: __wrap_foo
+#CHECKWRAP: - name: __wrap_foo
+#CHECKWRAP: references:
+#CHECKWRAP: - kind: R_X86_64_PC32
+#CHECKWRAP: target: foo
+#CHECKUNDEF: Undefined symbol: {{.*}}main.o: foo
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 5031C0E80000000031C05AC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: foo
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000140000001C000000000000000C00000000410E1000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000C
+ - Name: foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 5031C0E80000000031C05AC3
+ - Name: .rela.text
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .text
+ Relocations:
+ - Offset: 0x0000000000000004
+ Symbol: __real_foo
+ Type: R_X86_64_PC32
+ Addend: -4
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000140000001C000000000000000C00000000410E1000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: __wrap_foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000C
+ - Name: __real_foo
+...
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_GNU
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 31C0C3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 00636C616E672076657273696F6E20332E372E3020287472756E6B203232383733392920286C6C766D2F7472756E6B203232383734382900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000037A5200017810011B0C070890010000140000001C00000000000000030000000000000000000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+Symbols:
+ Local:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000003
+...
diff --git a/test/old-elf/x86-64-dynamic-relocs.test b/test/old-elf/x86-64-dynamic-relocs.test
new file mode 100644
index 000000000000..c5572d0aa3a3
--- /dev/null
+++ b/test/old-elf/x86-64-dynamic-relocs.test
@@ -0,0 +1,26 @@
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/relocs-dynamic.x86-64 \
+RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
+
+path: <linker-internal>
+defined-atoms:
+ - name: main
+ scope: global
+ content: [ E8, 00, 00, 00, 00, C3 ]
+ alignment: 16
+ section-choice: custom-required
+ section-name: .text
+ references:
+ - kind: R_X86_64_PLT32
+ offset: 1
+ target: foo
+ addend: -4
+ - name: foo
+ scope: global
+ content: [ C3 ]
+ alignment: 6 mod 16
+ section-choice: custom-required
+ section-name: .text
+
+# Don't generate a PLT/GOT entry for a PLT32 relocation to a non-shared symbol.
+CHECK-NOT: got
+CHECK-NOT: stub
diff --git a/test/old-elf/x86-64-dynamic.test b/test/old-elf/x86-64-dynamic.test
new file mode 100644
index 000000000000..d957e6ee85ee
--- /dev/null
+++ b/test/old-elf/x86-64-dynamic.test
@@ -0,0 +1,79 @@
+# Checks that linking an object file with a shared object creates the necessary
+# PLT/GOT Entries
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml -o %t1 --noinhibit-exec
+RUN: FileCheck %s < %t1
+
+RUN: lld -flavor old-gnu -target x86_64-linux %p/Inputs/use-shared-32s.x86-64 \
+RUN: %p/Inputs/shared.so-x86-64 --output-filetype=yaml --noinhibit-exec \
+RUN: | FileCheck %s --check-prefix=32S
+
+CHECK: - name: main
+CHECK: scope: global
+CHECK: references:
+CHECK: - kind: R_X86_64_PC32
+CHECK: offset: 18
+CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
+CHECK: addend: -4
+CHECK: - kind: R_X86_64_GOTPCREL
+CHECK: offset: 25
+CHECK: target: [[GOTNAME:[-a-zA-Z0-9_]+]]
+CHECK: addend: -4
+
+ - name: .PLT0
+CHECK: type: stub
+CHECK: content: [ FF, 35, 00, 00, 00, 00, FF, 25, 00, 00, 00, 00,
+CHECK: 90, 90, 90, 90 ]
+CHECK: alignment: 16
+CHECK: section-choice: custom-required
+CHECK: section-name: .plt
+CHECK: references:
+CHECK: - kind: R_X86_64_PC32
+CHECK: offset: 2
+ target: __got0
+CHECK: addend: -4
+CHECK: - kind: R_X86_64_PC32
+CHECK: offset: 8
+ target: __got1
+CHECK: addend: -4
+ - name: [[PLTNAME]]
+CHECK: type: stub
+CHECK: content: [ FF, 25, 00, 00, 00, 00, 68, 00, 00, 00, 00, E9,
+CHECK: 00, 00, 00, 00 ]
+CHECK: alignment: 16
+CHECK: section-choice: custom-required
+CHECK: section-name: .plt
+CHECK: references:
+CHECK: - kind: R_X86_64_PC32
+CHECK: offset: 2
+ target: __got_foo
+CHECK: addend: -4
+CHECK: - kind: LLD_R_X86_64_GOTRELINDEX
+CHECK: offset: 7
+ target: __got_foo
+CHECK: - kind: R_X86_64_PC32
+CHECK: offset: 12
+ target: .PLT0
+CHECK: addend: -4
+
+// Don't check the GOT and PLT names as they are only present in assert builds.
+CHECK: type: got
+CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ]
+CHECK: section-choice: custom-required
+CHECK: section-name: .got
+CHECK: permissions: rw-
+CHECK: references:
+CHECK: - kind: R_X86_64_GLOB_DAT
+CHECK: offset: 0
+CHECK: target: i
+
+CHECK:shared-library-atoms:
+CHECK: - name: foo
+CHECK: load-name: shared.so-x86-64
+
+32S: name: main
+32S: kind: R_X86_64_PC32
+32S: target: func
+32S: kind: R_X86_64_32S
+32S: kind: R_X86_64_PC32
+32S: type: stub
diff --git a/test/old-elf/x86.test b/test/old-elf/x86.test
new file mode 100644
index 000000000000..3bc4a6963a50
--- /dev/null
+++ b/test/old-elf/x86.test
@@ -0,0 +1,38 @@
+# Source for input file: reloc-xb.x86
+# xb.S:
+# .section .text, "ax", @progbits
+# .align 0x4
+# .globl _start
+# _start:
+# .globl back
+# back:
+# call target
+#
+# Source for input file: reloc-xt.x86
+# xt.S:
+# .section .text, "ax", @progbits
+#
+# .globl target
+# target:
+# call back
+#
+# Assembled with: "as --32"
+
+RUN: lld -flavor old-gnu -target i386 -e back --output-filetype=yaml %p/Inputs/reloc-xb.x86 %p/Inputs/reloc-xt.x86 | FileCheck %s -check-prefix x86-yaml
+
+x86-yaml: - name: back
+x86-yaml: scope: global
+x86-yaml: content: [ E8, FC, FF, FF, FF ]
+x86-yaml: references:
+x86-yaml: - kind: R_386_PC32
+x86-yaml: offset: 1
+x86-yaml: target: target
+
+x86-yaml: - name: target
+x86-yaml: scope: global
+x86-yaml: content: [ E8, FC, FF, FF, FF ]
+x86-yaml: references:
+x86-yaml: - kind: R_386_PC32
+x86-yaml: offset: 1
+x86-yaml: target: back
+
diff --git a/test/old-elf/x86_64-kinds.test b/test/old-elf/x86_64-kinds.test
new file mode 100644
index 000000000000..111cea53bf0c
--- /dev/null
+++ b/test/old-elf/x86_64-kinds.test
@@ -0,0 +1,23 @@
+REQUIRES: x86
+
+RUN: lld -flavor old-gnu -target x86_64-linux -o %t1 %p/Inputs/relocs.x86-64 \
+RUN: -e _start -static
+RUN: llvm-objdump -d %t1 | FileCheck %s -check-prefix=RELOCS
+
+RUN: lld -flavor old-gnu -target x86_64-linux --output-filetype=yaml -e _start -static \
+RUN: %p/Inputs/relocs.x86-64 | FileCheck %s -check-prefix=X86_64
+
+RELOCS: ELF64-x86-64
+
+// R_X86_64_32S
+RELOCS: c7 04 25
+RELOCS-NOT: 00 00 00 00
+RELOCS: 05 00 00 00 movl
+
+// R_X86_64_PC32
+RELOCS: e8
+RELOCS-NOT: 00 00 00 00
+RELOCS: callq
+
+X86_64: R_X86_64_32S
+X86_64: R_X86_64_PC32
diff --git a/test/old-elf/zoption_dtflags.test b/test/old-elf/zoption_dtflags.test
new file mode 100644
index 000000000000..274981bb1360
--- /dev/null
+++ b/test/old-elf/zoption_dtflags.test
@@ -0,0 +1,89 @@
+# Test that -z {origin, now} options work.
+#
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor old-gnu -target x86_64 %t.o -e=main -z now -z origin -o %t1
+#RUN: llvm-readobj -dynamic-table %t1 | FileCheck %s
+#
+#CHECK: 0x000000000000001E FLAGS ORIGIN BIND_NOW
+#CHECK: 0x000000006FFFFFFB FLAGS_1 NOW ORIGIN
+
+---
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ OSABI: ELFOSABI_FREEBSD
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x0000000000000010
+ Content: 554889E54883EC10C745FC00000000E81C000000B9000000008945F889C84883C4105DC36666662E0F1F840000000000554889E58B45FC5DC3
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ Content: ''
+ - Name: .bss
+ Type: SHT_NOBITS
+ Flags: [ SHF_WRITE, SHF_ALLOC ]
+ AddressAlign: 0x0000000000000004
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x0000000000000001
+ Content: 004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x0000000000000001
+ Content: ''
+ - Name: .eh_frame
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x0000000000000008
+ Content: 1400000000000000017A5200017810011B0C070890010000180000001C000000000000002400000000410E108602430D060000001800000038000000000000000900000000410E108602430D06000000
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Link: .symtab
+ AddressAlign: 0x0000000000000008
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x0000000000000020
+ Symbol: .text
+ Type: R_X86_64_PC32
+ - Offset: 0x000000000000003C
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 48
+Symbols:
+ Local:
+ - Name: local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000030
+ Size: 0x0000000000000009
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: .comment
+ Type: STT_SECTION
+ Section: .comment
+ - Name: .note.GNU-stack
+ Type: STT_SECTION
+ Section: .note.GNU-stack
+ - Name: .eh_frame
+ Type: STT_SECTION
+ Section: .eh_frame
+ Global:
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000024
+...
diff --git a/test/pecoff/Inputs/abs.obj.yaml b/test/pecoff/Inputs/abs.obj.yaml
deleted file mode 100644
index 65c3901ad8e7..000000000000
--- a/test/pecoff/Inputs/abs.obj.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
-symbols:
- - Name: _abs_value
- Value: 0xDEADBEEF
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
diff --git a/test/pecoff/Inputs/alignment.obj.yaml b/test/pecoff/Inputs/alignment.obj.yaml
deleted file mode 100644
index 1b12da0e6bad..000000000000
--- a/test/pecoff/Inputs/alignment.obj.yaml
+++ /dev/null
@@ -1,103 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 256
- SectionData: CC
- - Name: .text$1
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: 00
- - Name: .data$1
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00
- - Name: .data$2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 11
- - Name: .data$3
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 0
- SectionData: 22
- - Name: .bss$1
- Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 0000
- - Name: .bss$2
- Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 0000
- - Name: .yyy
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4096
- SectionData: 0000
- - Name: .zzz
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16384
- SectionData: 0000
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text$1
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$1
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$2
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data$3
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .bss$1
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bss$2
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .foo
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bar
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-...
diff --git a/test/pecoff/Inputs/alternatename1.obj.yaml b/test/pecoff/Inputs/alternatename1.obj.yaml
deleted file mode 100644
index dac18a8ef595..000000000000
--- a/test/pecoff/Inputs/alternatename1.obj.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 90909090
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/alternatename2.obj.yaml b/test/pecoff/Inputs/alternatename2.obj.yaml
deleted file mode 100644
index 5b70bfced6a1..000000000000
--- a/test/pecoff/Inputs/alternatename2.obj.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: CCCCCCCC
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/alternatename3.obj.yaml b/test/pecoff/Inputs/alternatename3.obj.yaml
deleted file mode 100644
index 1865653ea668..000000000000
--- a/test/pecoff/Inputs/alternatename3.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 90909090
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F616C7465726E6174656E616D653A5F6D61696E3D5F666F6F00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
diff --git a/test/pecoff/Inputs/armnt-ImageBase.obj.yaml b/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
deleted file mode 100644
index 69cd530253b0..000000000000
--- a/test/pecoff/Inputs/armnt-ImageBase.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 7047FEDE00000000
- Relocations:
- - VirtualAddress: 4
- SymbolName: __ImageBase
- Type: 1
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-ImageBase.s b/test/pecoff/Inputs/armnt-ImageBase.s
deleted file mode 100644
index a17458eddb15..000000000000
--- a/test/pecoff/Inputs/armnt-ImageBase.s
+++ /dev/null
@@ -1,16 +0,0 @@
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .type 32
- .scl 2
- .endef
- .align 2
- .thumb_func
-mainCRTStartup:
- bx lr
- trap
- .long __ImageBase
-
diff --git a/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml b/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml
deleted file mode 100644
index b550f58c03e6..000000000000
--- a/test/pecoff/Inputs/armnt-addr32-exec.obj.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '00000000'
- Relocations:
- - VirtualAddress: 0
- SymbolName: function
- Type: 1
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .rdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: fps
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-addr32-exec.s b/test/pecoff/Inputs/armnt-addr32-exec.s
deleted file mode 100644
index 6a0776de7dd3..000000000000
--- a/test/pecoff/Inputs/armnt-addr32-exec.s
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# __declspec(dllexport) void function(void) { }
-# const void * const fps[] = { &function, };
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .section .rdata,"rd"
- .global fps
- .align 2
-fps:
- .long function
-
diff --git a/test/pecoff/Inputs/armnt-addr32.obj.yaml b/test/pecoff/Inputs/armnt-addr32.obj.yaml
deleted file mode 100644
index 62ae2c6ea992..000000000000
--- a/test/pecoff/Inputs/armnt-addr32.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '0000000000000000'
- Relocations:
- - VirtualAddress: 0
- SymbolName: i
- Type: 1
-symbols:
- - Name: .rdata
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: i
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: is
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-addr32.s b/test/pecoff/Inputs/armnt-addr32.s
deleted file mode 100644
index c718e9518af9..000000000000
--- a/test/pecoff/Inputs/armnt-addr32.s
+++ /dev/null
@@ -1,18 +0,0 @@
-
-@ static const int i = 0;
-@ const int * const is[] = { &i, };
-
- .syntax unified
- .thumb
- .text
-
- .section .rdata,"rd"
- .align 2 # @i
-i:
- .long 0 # 0x0
-
- .global is # @is
- .align 2
-is:
- .long i
-
diff --git a/test/pecoff/Inputs/armnt-blx23t.obj.yaml b/test/pecoff/Inputs/armnt-blx23t.obj.yaml
deleted file mode 100644
index 03f82609f4e6..000000000000
--- a/test/pecoff/Inputs/armnt-blx23t.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF2DE90048EB46202000F000F80130BDE80088
- Relocations:
- - VirtualAddress: 12
- SymbolName: identity
- Type: 21
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 22
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: identity
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-blx23t.s b/test/pecoff/Inputs/armnt-blx23t.s
deleted file mode 100644
index 89aa4194faae..000000000000
--- a/test/pecoff/Inputs/armnt-blx23t.s
+++ /dev/null
@@ -1,33 +0,0 @@
-
-# __declspec(noinline) int identity(int i) { return i; }
-# int function() { return identity(32) + 1; }
-
- .syntax unified
- .thumb
- .text
-
- .def identity
- .scl 2
- .type 32
- .endef
- .global identity
- .align 2
- .thumb_func
-identity:
- bx lr
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- push.w {r11, lr}
- mov r11, sp
- movs r0, 32
- bl identity
- adds r0, 1
- pop.w {r11, pc}
-
diff --git a/test/pecoff/Inputs/armnt-branch24t.obj.yaml b/test/pecoff/Inputs/armnt-branch24t.obj.yaml
deleted file mode 100644
index 02815a4957dd..000000000000
--- a/test/pecoff/Inputs/armnt-branch24t.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF202000F000B8
- Relocations:
- - VirtualAddress: 6
- SymbolName: identity
- Type: 20
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 10
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: identity
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-branch24t.s b/test/pecoff/Inputs/armnt-branch24t.s
deleted file mode 100644
index 8d85cbe0cab2..000000000000
--- a/test/pecoff/Inputs/armnt-branch24t.s
+++ /dev/null
@@ -1,26 +0,0 @@
-
-# int ___declspec(noinline) identity(int i) { return i; }
-# int function(void) { return identity(32); }
-
- .syntax unified
- .thumb
- .text
-
- .def identity
- .scl 2
- .type 32
- .endef
- .global identity
- .align 2
- .thumb_func
-identity:
- bx lr
-
- .def function
- .scl 2
- .type 32
- .endef
-function:
- movs r0, 32
- b identity
-
diff --git a/test/pecoff/Inputs/armnt-exports.def b/test/pecoff/Inputs/armnt-exports.def
deleted file mode 100644
index afb8258f95bc..000000000000
--- a/test/pecoff/Inputs/armnt-exports.def
+++ /dev/null
@@ -1,4 +0,0 @@
-LIBRARY "armnt-exports"
-EXPORTS
- function
-
diff --git a/test/pecoff/Inputs/armnt-exports.obj.yaml b/test/pecoff/Inputs/armnt-exports.obj.yaml
deleted file mode 100644
index 2a971db2fdaa..000000000000
--- a/test/pecoff/Inputs/armnt-exports.obj.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF7047
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _DllMainCRTStartup
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-import.obj.yaml b/test/pecoff/Inputs/armnt-import.obj.yaml
deleted file mode 100644
index 08876eeb0d4c..000000000000
--- a/test/pecoff/Inputs/armnt-import.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 40F20000C0F2000000680047
- Relocations:
- - VirtualAddress: 0
- SymbolName: __imp_function
- Type: 17
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp_function
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-import.s b/test/pecoff/Inputs/armnt-import.s
deleted file mode 100644
index 2790d0edc8d9..000000000000
--- a/test/pecoff/Inputs/armnt-import.s
+++ /dev/null
@@ -1,21 +0,0 @@
-
-# void __declspec(dllimport) function(void);
-# int mainCRTStartup(void) { return function(); }
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .scl 2
- .type 32
- .endef
- .global mainCRTStartup
- .align 2
- .thumb_func
-mainCRTStartup:
- movw r0, :lower16:__imp_function
- movt r0, :upper16:__imp_function
- ldr r0, [r0]
- bx r0
-
diff --git a/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml b/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml
deleted file mode 100644
index a4630bcb9e0e..000000000000
--- a/test/pecoff/Inputs/armnt-mov32t-exec.obj.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 704700BF40F20000C0F200007047
- Relocations:
- - VirtualAddress: 4
- SymbolName: function
- Type: 17
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 14
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: function
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: get_function
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/armnt-mov32t-exec.s b/test/pecoff/Inputs/armnt-mov32t-exec.s
deleted file mode 100644
index 10a20f468c34..000000000000
--- a/test/pecoff/Inputs/armnt-mov32t-exec.s
+++ /dev/null
@@ -1,30 +0,0 @@
-
-# void function(void) { }
-# void *get_function() { return &function; }
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .def get_function
- .scl 2
- .type 32
- .endef
- .global get_function
- .align 2
- .thumb_func
-get_function:
- movw r0, :lower16:function
- movt r0, :upper16:function
- bx lr
-
diff --git a/test/pecoff/Inputs/armnt-mov32t.obj.yaml b/test/pecoff/Inputs/armnt-mov32t.obj.yaml
deleted file mode 100644
index 21e890ace28f..000000000000
--- a/test/pecoff/Inputs/armnt-mov32t.obj.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 40F20000C0F200007047
- Relocations:
- - VirtualAddress: 0
- SymbolName: buffer
- Type: 17
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: '62756666657200'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 10
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .rdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: get_buffer
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: buffer
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-...
diff --git a/test/pecoff/Inputs/armnt-mov32t.s b/test/pecoff/Inputs/armnt-mov32t.s
deleted file mode 100644
index 289f917597d6..000000000000
--- a/test/pecoff/Inputs/armnt-mov32t.s
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# static const char buffer[] = "buffer";
-# const char *get_buffer() { return buffer; }
-
- .syntax unified
- .thumb
- .text
-
- .def get_buffer
- .scl 2
- .type 32
- .endef
- .global get_buffer
- .align 2
- .thumb_func
-get_buffer:
- movw r0, :lower16:buffer
- movt r0, :upper16:buffer
- bx lr
-
- .section .rdata,"rd"
-buffer:
- .asciz "buffer"
-
diff --git a/test/pecoff/Inputs/armnt-obj.s b/test/pecoff/Inputs/armnt-obj.s
deleted file mode 100644
index 20eeab0e1dda..000000000000
--- a/test/pecoff/Inputs/armnt-obj.s
+++ /dev/null
@@ -1,12 +0,0 @@
-
- .syntax unified
- .thumb
- .text
-
- .def main
- .scl 2
- .type 32
- .endef
-main:
- bx lr
-
diff --git a/test/pecoff/Inputs/armnt-obj.yaml b/test/pecoff/Inputs/armnt-obj.yaml
deleted file mode 100644
index 7c53c6f00693..000000000000
--- a/test/pecoff/Inputs/armnt-obj.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/associative1.obj.yaml b/test/pecoff/Inputs/associative1.obj.yaml
deleted file mode 100644
index 51a7be0b34d7..000000000000
--- a/test/pecoff/Inputs/associative1.obj.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000
- - Name: '.CRT$XCU'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 77777777
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: _var
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '.CRT$XCU'
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
- - Name: _init
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/associative3.obj.yaml b/test/pecoff/Inputs/associative3.obj.yaml
deleted file mode 100644
index ffea761a357c..000000000000
--- a/test/pecoff/Inputs/associative3.obj.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 0000000000000000
- Relocations:
- - VirtualAddress: 4
- SymbolName: _var
- Type: IMAGE_REL_I386_DIR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/basereloc.obj.yaml b/test/pecoff/Inputs/basereloc.obj.yaml
deleted file mode 100644
index 5e5ca16a0ac7..000000000000
--- a/test/pecoff/Inputs/basereloc.obj.yaml
+++ /dev/null
@@ -1,164 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: B800000000506800000000680000000050E80000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: abs_symbol
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA@16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess@4
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 30
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .text2
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4096
- SectionData: B800000000506800000000680000000050E80000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: abs_symbol
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA@16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess@4
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 30
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F454E5452593A6D61696E20
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 6
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .text2
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 6
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _MessageBoxA@16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _ExitProcess@4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .file
- Value: 0
- SectionNumber: 65534
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- File: "hello.c"
- - Name: abs_symbol
- Value: 0xDEADBEEF
- SectionNumber: -1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/bss.asm b/test/pecoff/Inputs/bss.asm
deleted file mode 100644
index 802edee8591d..000000000000
--- a/test/pecoff/Inputs/bss.asm
+++ /dev/null
@@ -1,20 +0,0 @@
-.586
-.model flat, c
-
-extern ExitProcess@4 : PROC
-
-_BSS SEGMENT
- _x DD 064H DUP (?)
- _y DD 064H DUP (?)
-_BSS ENDS
-
-.code
-start:
- mov eax, 42
- mov _x, eax
- mov eax, _x
- push eax
- call ExitProcess@4
-end start
-
-end
diff --git a/test/pecoff/Inputs/bss.obj b/test/pecoff/Inputs/bss.obj
deleted file mode 100644
index 3c00dfeb830b..000000000000
--- a/test/pecoff/Inputs/bss.obj
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/comdat.obj.yaml b/test/pecoff/Inputs/comdat.obj.yaml
deleted file mode 100644
index 5537499873a3..000000000000
--- a/test/pecoff/Inputs/comdat.obj.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC33C05DC3
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC33C05DC3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: .text
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: "?inlinefn1@@YAHXZ"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "?inlinefn2@@YAHXZ"
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/common-symbol.obj.yaml b/test/pecoff/Inputs/common-symbol.obj.yaml
deleted file mode 100644
index 05ddd022f286..000000000000
--- a/test/pecoff/Inputs/common-symbol.obj.yaml
+++ /dev/null
@@ -1,85 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: b800000000b800000000b800000000b800000000b800000000
- Relocations:
- - VirtualAddress: 1
- SymbolName: _bssdata4
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 6
- SymbolName: _bsspad1
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 11
- SymbolName: _bssdata64
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 16
- SymbolName: _bsspad2
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 21
- SymbolName: _bssdata16
- Type: IMAGE_REL_AMD64_ADDR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 03000000
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 5
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _bssdata4
- Value: 4
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bsspad1
- Value: 1
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bssdata64
- Value: 64
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bsspad2
- Value: 1
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _bssdata16
- Value: 16
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/drectve.obj.yaml b/test/pecoff/Inputs/drectve.obj.yaml
deleted file mode 100644
index 22ec63f96e3e..000000000000
--- a/test/pecoff/Inputs/drectve.obj.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp__fn
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: __imp__var
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 22
- SymbolName: __imp___name_with_underscore
- Type: IMAGE_REL_I386_DIR32
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f64656661756c746c69623a766172732e6c6962202f73756273797374656d3a636f6e736f6c652c34322e313935202d3f666f6f00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp___name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
diff --git a/test/pecoff/Inputs/drectve2.obj.yaml b/test/pecoff/Inputs/drectve2.obj.yaml
deleted file mode 100644
index 836cbc3e743d..000000000000
--- a/test/pecoff/Inputs/drectve2.obj.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f696e636c7564653a666f6f00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
diff --git a/test/pecoff/Inputs/drectve3.lib b/test/pecoff/Inputs/drectve3.lib
deleted file mode 100644
index c295d1ff6d04..000000000000
--- a/test/pecoff/Inputs/drectve3.lib
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/entry.obj.yaml b/test/pecoff/Inputs/entry.obj.yaml
deleted file mode 100644
index 35eae143c430..000000000000
--- a/test/pecoff/Inputs/entry.obj.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: A100000000030500000000C3
-
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
-
- - Name: _foo
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-
- - Name: _bar
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-
- - Name: "?baz@@YAXXZ"
- Value: 4
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/executable.obj.yaml b/test/pecoff/Inputs/executable.obj.yaml
deleted file mode 100644
index 73ba0fe71914..000000000000
--- a/test/pecoff/Inputs/executable.obj.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_ARMNT
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: '7047'
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/executable.s b/test/pecoff/Inputs/executable.s
deleted file mode 100644
index 1c58f7331b26..000000000000
--- a/test/pecoff/Inputs/executable.s
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# void mainCRTStartup(){}
-
- .syntax unified
- .thumb
- .text
-
- .def mainCRTStartup
- .scl 2
- .type 32
- .endef
- .global mainCRTStartup
- .align 2
- .thumb_func
-mainCRTStartup:
- bx lr
-
diff --git a/test/pecoff/Inputs/export.obj.yaml b/test/pecoff/Inputs/export.obj.yaml
deleted file mode 100644
index fa92cd09bee4..000000000000
--- a/test/pecoff/Inputs/export.obj.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B800000000506800000000680000000050E80000000050E800000000
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2f6578706f72743a5f6578706f7274666e334032353600 # /export:_exportfn3@256
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _init
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn1
- Value: 8
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn2
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn3@256
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn6
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _exportfn7@8
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "?exportfn8@@YAXXZ"
- Value: 16
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/exports.def b/test/pecoff/Inputs/exports.def
deleted file mode 100644
index 7b444f9719d1..000000000000
--- a/test/pecoff/Inputs/exports.def
+++ /dev/null
@@ -1,6 +0,0 @@
-; This is a comment line
-
-EXPORTS
- exportfn1 @5 ; foo
- exportfn2
- exportfn5=exportfn6 PRIVATE
diff --git a/test/pecoff/Inputs/exports2.def b/test/pecoff/Inputs/exports2.def
deleted file mode 100644
index 1c95f42ceb60..000000000000
--- a/test/pecoff/Inputs/exports2.def
+++ /dev/null
@@ -1,6 +0,0 @@
-; This is a comment line
-
-EXPORTS
- exportfn1 @5 ; foo
- exportfn7
- exportfn5=exportfn6 PRIVATE
diff --git a/test/pecoff/Inputs/grouped-sections.asm b/test/pecoff/Inputs/grouped-sections.asm
deleted file mode 100644
index af69363efefb..000000000000
--- a/test/pecoff/Inputs/grouped-sections.asm
+++ /dev/null
@@ -1,18 +0,0 @@
-.386
-.model flat, c
-
-_data$2 SEGMENT BYTE alias(".data$2")
- db "orld", 0
-_data$2 ends
-
-_data$1 SEGMENT BYTE alias(".data$1")
- db "o, w"
-_data$1 ends
-
-.data
- db "Hell"
-
-.code
-main:
- nop
-end main
diff --git a/test/pecoff/Inputs/grouped-sections.obj.yaml b/test/pecoff/Inputs/grouped-sections.obj.yaml
deleted file mode 100644
index 2180312acf92..000000000000
--- a/test/pecoff/Inputs/grouped-sections.obj.yaml
+++ /dev/null
@@ -1,83 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 90
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C
- - Name: ".data$2"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 1
- SectionData: 6F726C6400
- - Name: ".data$1"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 1
- SectionData: 6F2C2077
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".data$2"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 5
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".data$1"
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: foo
- Value: 2
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/hello.asm b/test/pecoff/Inputs/hello.asm
deleted file mode 100644
index e360bbf65706..000000000000
--- a/test/pecoff/Inputs/hello.asm
+++ /dev/null
@@ -1,24 +0,0 @@
-;;; ml hello.asm /link /subsystem:windows /defaultlib:kernel32.lib \
-;;; /defaultlib:user32.lib /out:hello.exe /entry:main
-
-.386
-.model flat, c
-
-extern MessageBoxA@16 : PROC
-extern ExitProcess@4 : PROC
-
-.data
- caption db "Hello", 0
- message db "Hello World", 0
-
-.code
-main:
- mov eax, 0
- push eax
- push offset caption
- push offset message
- push eax
- call MessageBoxA@16
- push eax
- call ExitProcess@4
-end main
diff --git a/test/pecoff/Inputs/hello.obj.yaml b/test/pecoff/Inputs/hello.obj.yaml
deleted file mode 100644
index 6268a74057bd..000000000000
--- a/test/pecoff/Inputs/hello.obj.yaml
+++ /dev/null
@@ -1,111 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B800000000506800000000680000000050E80000000050E800000000
- Relocations:
- - VirtualAddress: 7
- SymbolName: caption
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: message
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 18
- SymbolName: _MessageBoxA@16
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 24
- SymbolName: _ExitProcess@4
- Type: IMAGE_REL_I386_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: 2F454E5452593A6D61696E20
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 28
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _MessageBoxA@16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _ExitProcess@4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .file
- Value: 0
- SectionNumber: 65534
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- File: "hello.c"
-...
diff --git a/test/pecoff/Inputs/hello64.asm b/test/pecoff/Inputs/hello64.asm
deleted file mode 100644
index bc1a41b500d0..000000000000
--- a/test/pecoff/Inputs/hello64.asm
+++ /dev/null
@@ -1,22 +0,0 @@
-;; ml hello64.asm /link /subsystem:windows /defaultlib:kernel32 \
-;; /defaultlib:user32 /out:hello64.exe /entry:main
-
-extern ExitProcess : PROC
-extern MessageBoxA : PROC
-
-.data
- caption db 'Hello', 0
- message db 'Hello World', 0
-
-.code
-main PROC
- sub rsp,28h
- mov rcx, 0
- lea rdx, message
- lea r8, caption
- mov r9d, 0
- call MessageBoxA
- mov ecx, 0
- call ExitProcess
-main ENDP
-END
diff --git a/test/pecoff/Inputs/hello64.obj.yaml b/test/pecoff/Inputs/hello64.obj.yaml
deleted file mode 100644
index 36b699623101..000000000000
--- a/test/pecoff/Inputs/hello64.obj.yaml
+++ /dev/null
@@ -1,110 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 4883EC2848C7C100000000488D15000000004C8D050000000041B900000000E800000000B900000000E800000000
- Relocations:
- - VirtualAddress: 14
- SymbolName: message
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 21
- SymbolName: caption
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 32
- SymbolName: MessageBoxA
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 42
- SymbolName: ExitProcess
- Type: IMAGE_REL_AMD64_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: 48656C6C6F0048656C6C6F20576F726C6400
- - Name: '.debug$S'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000830000004800011100000000433A5C63796777696E5C686F6D655C727569755C6C6C766D5C746F6F6C735C6C6C645C746573745C7065636F66665C496E707574735C68656C6C6F36342E6F626A0037003C1103020000D00000000000000000000C0000000D5201004D6963726F736F667420285229204D6163726F20417373656D626C6572000000
-symbols:
- - Name: '@comp.id'
- Value: 14635533
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 16
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 46
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 18
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: '.debug$S'
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 144
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ExitProcess
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: MessageBoxA
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: message
- Value: 6
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: caption
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/hello64lib.asm b/test/pecoff/Inputs/hello64lib.asm
deleted file mode 100644
index 89f95cd49af1..000000000000
--- a/test/pecoff/Inputs/hello64lib.asm
+++ /dev/null
@@ -1,14 +0,0 @@
-.code
-ExitProcess PROC
- RET
-ExitProcess ENDP
-
-MessageBoxA PROC
- RET
-MessageBoxA ENDP
-
-_DllMainCRTStartup PROC
- RET
-_DllMainCRTStartup ENDP
-
-END
diff --git a/test/pecoff/Inputs/hello64lib.lib b/test/pecoff/Inputs/hello64lib.lib
deleted file mode 100644
index 3109c32593ca..000000000000
--- a/test/pecoff/Inputs/hello64lib.lib
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/imagebase.obj.yaml b/test/pecoff/Inputs/imagebase.obj.yaml
deleted file mode 100644
index e31e744fa058..000000000000
--- a/test/pecoff/Inputs/imagebase.obj.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: A100000000C3
- Relocations:
- - VirtualAddress: 1
- SymbolName: ___ImageBase
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: ""
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/machine-type-unknown.obj.yaml b/test/pecoff/Inputs/machine-type-unknown.obj.yaml
deleted file mode 100644
index f0da1ea7ac34..000000000000
--- a/test/pecoff/Inputs/machine-type-unknown.obj.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_UNKNOWN
- Characteristics: []
-sections:
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
- SectionData: ''
-symbols:
- - Name: '@comp.id'
- Value: 1
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 1
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: __imp___close
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__close
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 2
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_ALIAS
-...
diff --git a/test/pecoff/Inputs/main.obj.yaml b/test/pecoff/Inputs/main.obj.yaml
deleted file mode 100644
index 73a788049063..000000000000
--- a/test/pecoff/Inputs/main.obj.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: A100000000030500000000C3
- Relocations:
- - VirtualAddress: 1
- SymbolName: _val1
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 7
- SymbolName: _val2
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 12
- NumberOfRelocations: 2
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/merge-largest1.obj.yaml b/test/pecoff/Inputs/merge-largest1.obj.yaml
deleted file mode 100644
index e372f9030603..000000000000
--- a/test/pecoff/Inputs/merge-largest1.obj.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 00112233
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_LARGEST
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/merge-largest2.obj.yaml b/test/pecoff/Inputs/merge-largest2.obj.yaml
deleted file mode 100644
index f232cd3fd870..000000000000
--- a/test/pecoff/Inputs/merge-largest2.obj.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 0011223344556677
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_LARGEST
- - Name: "_foo"
- Value: 6
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/merge-same-size1.obj.yaml b/test/pecoff/Inputs/merge-same-size1.obj.yaml
deleted file mode 100644
index 02516f37220e..000000000000
--- a/test/pecoff/Inputs/merge-same-size1.obj.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: FFFFFFFFFFFFFF
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/merge-same-size2.obj.yaml b/test/pecoff/Inputs/merge-same-size2.obj.yaml
deleted file mode 100644
index 6b5b593bbab1..000000000000
--- a/test/pecoff/Inputs/merge-same-size2.obj.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: AAAAAAAAAAAAAA
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 7
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/merge-same-size3.obj.yaml b/test/pecoff/Inputs/merge-same-size3.obj.yaml
deleted file mode 100644
index 47ad417f2f0c..000000000000
--- a/test/pecoff/Inputs/merge-same-size3.obj.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: FFFF
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 2
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2532800969
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_SAME_SIZE
- - Name: "_foo"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/nonstandard-sections.obj.yaml b/test/pecoff/Inputs/nonstandard-sections.obj.yaml
deleted file mode 100644
index b80d8862ec61..000000000000
--- a/test/pecoff/Inputs/nonstandard-sections.obj.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 01234678
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 01234678
- - Name: .foo
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, IMAGE_SCN_MEM_EXECUTE ]
- Alignment: 4
- SectionData: 01234678
- - Name: .bar
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 01234678
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .foo
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .bar
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/nop.asm b/test/pecoff/Inputs/nop.asm
deleted file mode 100644
index 8e53070e7f5c..000000000000
--- a/test/pecoff/Inputs/nop.asm
+++ /dev/null
@@ -1,9 +0,0 @@
-.386
-.model flat, stdcall
-option casemap :none
-
-.code
-start:
- mov eax, 42
- ret
-end start
diff --git a/test/pecoff/Inputs/nop.obj.yaml b/test/pecoff/Inputs/nop.obj.yaml
deleted file mode 100644
index ccc097e7c926..000000000000
--- a/test/pecoff/Inputs/nop.obj.yaml
+++ /dev/null
@@ -1,51 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/nop64.obj.yaml b/test/pecoff/Inputs/nop64.obj.yaml
deleted file mode 100644
index 66edc376a90e..000000000000
--- a/test/pecoff/Inputs/nop64.obj.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: C3C3C3C3
- Relocations:
- - VirtualAddress: 0
- SymbolName: __imp__fn
- Type: IMAGE_REL_AMD64_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 16
- SectionData: ''
-symbols:
- - Name: '@comp.id'
- Value: 13485607
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 16
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: start
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/reloc.obj.yaml b/test/pecoff/Inputs/reloc.obj.yaml
deleted file mode 100644
index 4c83258c623c..000000000000
--- a/test/pecoff/Inputs/reloc.obj.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 680000000068000000006800000000680000000068000000006800000000
- Relocations:
- - VirtualAddress: 1
- SymbolName: _message
- Type: IMAGE_REL_I386_SECTION
- - VirtualAddress: 6
- SymbolName: _message
- Type: IMAGE_REL_I386_SECREL
- - VirtualAddress: 11
- SymbolName: .data
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 16
- SymbolName: .data
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 21
- SymbolName: __imp__MessageBoxA@16
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 26
- SymbolName: _abs_value
- Type: IMAGE_REL_I386_DIR32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 576F726C64210048656C6C6F2C00
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 14
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _message
- Value: 5
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: __imp__MessageBoxA@16
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _abs_value
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/reloc64.obj.yaml b/test/pecoff/Inputs/reloc64.obj.yaml
deleted file mode 100644
index 3230ca51c6cc..000000000000
--- a/test/pecoff/Inputs/reloc64.obj.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: []
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 48B800000000000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffE8000000ffC3
- Relocations:
- - VirtualAddress: 2
- SymbolName: end
- Type: IMAGE_REL_AMD64_ADDR64
- - VirtualAddress: 11
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32
- - VirtualAddress: 16
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_1
- - VirtualAddress: 21
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_2
- - VirtualAddress: 26
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_3
- - VirtualAddress: 31
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_4
- - VirtualAddress: 36
- SymbolName: end
- Type: IMAGE_REL_AMD64_REL32_5
- - VirtualAddress: 41
- SymbolName: end
- Type: IMAGE_REL_AMD64_SECTION
- - VirtualAddress: 46
- SymbolName: end
- Type: IMAGE_REL_AMD64_SECREL
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 41
- NumberOfRelocations: 7
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: entry
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: end
- Value: 40
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/resource.rc b/test/pecoff/Inputs/resource.rc
deleted file mode 100644
index df933e83b77a..000000000000
--- a/test/pecoff/Inputs/resource.rc
+++ /dev/null
@@ -1,4 +0,0 @@
-STRINGTABLE
-{
- 1, "Hello"
-}
diff --git a/test/pecoff/Inputs/responsefile.txt b/test/pecoff/Inputs/responsefile.txt
deleted file mode 100644
index 08286119d4ed..000000000000
--- a/test/pecoff/Inputs/responsefile.txt
+++ /dev/null
@@ -1 +0,0 @@
--foo -bar\baz
diff --git a/test/pecoff/Inputs/secrel1.obj.yaml b/test/pecoff/Inputs/secrel1.obj.yaml
deleted file mode 100644
index 1c49261bbc43..000000000000
--- a/test/pecoff/Inputs/secrel1.obj.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: C3
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data
- Type: IMAGE_REL_I386_SECREL
- - Name: .data2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data2
- Type: IMAGE_REL_I386_SECREL
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: .data2
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 3
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/secrel2.obj.yaml b/test/pecoff/Inputs/secrel2.obj.yaml
deleted file mode 100644
index 2885fd07bb3a..000000000000
--- a/test/pecoff/Inputs/secrel2.obj.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data
- Type: IMAGE_REL_I386_SECREL
- - Name: .data2
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 00000000000000000000000000000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: .data2
- Type: IMAGE_REL_I386_SECREL
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .data2
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 1
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
-...
diff --git a/test/pecoff/Inputs/seh.c b/test/pecoff/Inputs/seh.c
deleted file mode 100644
index b1c139a58f22..000000000000
--- a/test/pecoff/Inputs/seh.c
+++ /dev/null
@@ -1,13 +0,0 @@
-__declspec(noinline) void triggerSEH() {
- volatile int *p = 0;
- *p = 1;
-}
-
-int main() {
- __try {
- triggerSEH();
- } __except(1) {
- return 42;
- }
- return 0;
-}
diff --git a/test/pecoff/Inputs/seh.obj.yaml b/test/pecoff/Inputs/seh.obj.yaml
deleted file mode 100644
index 6767671cdafe..000000000000
--- a/test/pecoff/Inputs/seh.obj.yaml
+++ /dev/null
@@ -1,387 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 1
- SectionData: 2020202F44454641554C544C49423A22757569642E6C696222202F44454641554C544C49423A22757569642E6C696222202F4641494C49464D49534D415443483A225F4D53435F5645523D3138303022202F4641494C49464D49534D415443483A225F4954455241544F525F44454255475F4C4556454C3D3022202F4641494C49464D49534D415443483A2252756E74696D654C6962726172793D4D445F44796E616D696352656C6561736522202F44454641554C544C49423A226D73766370727422202F44454641554C544C49423A224D535643525422202F44454641554C544C49423A224F4C444E414D45532220
- - Name: '.debug$S'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000600000002200011100000000433A5C63796777696E5C686F6D655C727569755C7365682E6F626A003A003C11012200000700120000000D520100120000000D5201004D6963726F736F667420285229204F7074696D697A696E6720436F6D70696C657200
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 00
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 01
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 54726967676572696E672053454820657863657074696F6E0D0A0000457865637574696E6720534548205F5F65786365707420626C6F636B20696E20666F6F0D0A000000457865637574696E6720534548205F5F65786365707420626C6F636B0D0A00
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC516800000000FF150000000083C404C745FC000000008B45FCC700140000008BE55DC3CCCCCCCCCCCCCCCCCCCC558BEC51E8000000008D4DFFE8000000008BE55DC3CCCCCCCCCCCCCCCCCCCCCC558BEC6AFE6800000000680000000064A1000000005083EC08535657A1000000003145F833C5508D45F064A3000000008965E8C745FC00000000E800000000C745FCFEFFFFFFEB1EB801000000C38B65E86800000000FF150000000083C404C745FCFEFFFFFF8B4DF064890D00000000595F5E5B8BE55DC3CCCCCCCCCCCCCCCC558BEC6AFE6800000000680000000064A1000000005083EC08535657A1000000003145F833C5508D45F064A3000000008965E8C745FC00000000E800000000E800000000C745FCFEFFFFFFEB1EB801000000C38B65E86800000000FF150000000083C404C745FCFEFFFFFF33C08B4DF064890D00000000595F5E5B8BE55DC3
- Relocations:
- - VirtualAddress: 5
- SymbolName: '$SG73531'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 11
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 53
- SymbolName: '?TestCPPEX@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 61
- SymbolName: '??1TestClass@@QAE@XZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 86
- SymbolName: '__sehtable$?foo@@YAXXZ'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 91
- SymbolName: __except_handler4
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 109
- SymbolName: ___security_cookie
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 139
- SymbolName: '?TestExceptions@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 162
- SymbolName: '$SG73539'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 168
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 214
- SymbolName: '__sehtable$_main'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 219
- SymbolName: __except_handler4
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 237
- SymbolName: ___security_cookie
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 267
- SymbolName: '?foo@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 272
- SymbolName: '?TestExceptions@@YAXXZ'
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 295
- SymbolName: '$SG73543'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 301
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - Name: '.text$mn'
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC51894DFC6800000000FF150000000083C4048BE55DC3
- Relocations:
- - VirtualAddress: 8
- SymbolName: '??_C@_0BI@BBHGNMOG@Destroying?5TestClass?$CB?$AN?6?$AA@'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 14
- SymbolName: __imp__printf
- Type: IMAGE_REL_I386_DIR32
- - Name: '.xdata$x'
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 8
- SectionData: FEFFFFFF00000000D8FFFFFF00000000FEFFFFFF000000000000000000000000FEFFFFFF00000000D8FFFFFF00000000FEFFFFFF0000000000000000
- Relocations:
- - VirtualAddress: 20
- SymbolName: '$LN5'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 24
- SymbolName: '$LN6'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 52
- SymbolName: '$LN5'
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 56
- SymbolName: '$LN6'
- Type: IMAGE_REL_I386_DIR32
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 44657374726F79696E672054657374436C617373210D0A00
- - Name: .sxdata
- Characteristics: [ IMAGE_SCN_LNK_INFO ]
- Alignment: 4
- SectionData: 1B0000001A000000
-symbols:
- - Name: '@comp.id'
- Value: 14766605
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '@feat.00'
- Value: 2147484049
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .drectve
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 240
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: '.debug$S'
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 108
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .rdata
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '?value@?$integral_constant@_N$0A@@std@@2_NB'
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .rdata
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 1
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 1996959894
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '?value@?$integral_constant@_N$00@std@@2_NB'
- Value: 0
- SectionNumber: 4
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .rdata
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 99
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 2801625422
- Number: 0
- - Name: '$SG73531'
- Value: 0
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '$SG73539'
- Value: 28
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '$SG73543'
- Value: 68
- SectionNumber: 5
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 335
- NumberOfRelocations: 17
- NumberOfLinenumbers: 0
- CheckSum: 2488225337
- Number: 0
- - Name: '.text$mn'
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 25
- NumberOfRelocations: 2
- NumberOfLinenumbers: 0
- CheckSum: 210566957
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: __imp__printf
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '??1TestClass@@QAE@XZ'
- Value: 0
- SectionNumber: 7
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?TestCPPEX@@YAXXZ'
- Value: 0
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?TestExceptions@@YAXXZ'
- Value: 48
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '?foo@@YAXXZ'
- Value: 80
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 208
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __except_handler4
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: '$LN5'
- Value: 152
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN7'
- Value: 157
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN6'
- Value: 158
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN5'
- Value: 285
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN7'
- Value: 290
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '$LN6'
- Value: 291
- SectionNumber: 6
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_LABEL
- - Name: '.xdata$x'
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 60
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 2900129504
- Number: 0
- - Name: '__sehtable$?foo@@YAXXZ'
- Value: 32
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: '__sehtable$_main'
- Value: 0
- SectionNumber: 8
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .rdata
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 24
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 1296623929
- Number: 0
- Selection: IMAGE_COMDAT_SELECT_ANY
- - Name: '??_C@_0BI@BBHGNMOG@Destroying?5TestClass?$CB?$AN?6?$AA@'
- Value: 0
- SectionNumber: 9
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___security_cookie
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: .sxdata
- Value: 0
- SectionNumber: 10
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
diff --git a/test/pecoff/Inputs/static-data1.obj.yaml b/test/pecoff/Inputs/static-data1.obj.yaml
deleted file mode 100644
index 8dbe3e97eb51..000000000000
--- a/test/pecoff/Inputs/static-data1.obj.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: ""
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 03000000
- - Name: ".debug$S"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000660000002B00011100000000433A5C63796777696E5C686F6D655C727569755C7374617469635C64617461312E6F626A0037003C1103020000030000000000000000000A0000001B9D01004D6963726F736F667420285229204D6163726F20417373656D626C657200000000
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".debug$S"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 116
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val1
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/static-data2.obj.yaml b/test/pecoff/Inputs/static-data2.obj.yaml
deleted file mode 100644
index 9b368c033887..000000000000
--- a/test/pecoff/Inputs/static-data2.obj.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: ""
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: 04000000
- - Name: ".debug$S"
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
- Alignment: 1
- SectionData: 04000000F1000000660000002B00011100000000433A5C63796777696E5C686F6D655C727569755C7374617469635C64617461322E6F626A0037003C1103020000030000000000000000000A0000001B9D01004D6963726F736F667420285229204D6163726F20417373656D626C657200000000
-symbols:
- - Name: "@comp.id"
- Value: 10394907
- SectionNumber: 65535
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 4
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: ".debug$S"
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 116
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _val2
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/static.lib b/test/pecoff/Inputs/static.lib
deleted file mode 100644
index 5a631010e1d3..000000000000
--- a/test/pecoff/Inputs/static.lib
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/subsystem.main.yaml b/test/pecoff/Inputs/subsystem.main.yaml
deleted file mode 100644
index 25fbe1be0143..000000000000
--- a/test/pecoff/Inputs/subsystem.main.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _mainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/subsystem.winmain.yaml b/test/pecoff/Inputs/subsystem.winmain.yaml
deleted file mode 100644
index 7f0381e2dc69..000000000000
--- a/test/pecoff/Inputs/subsystem.winmain.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: B82A000000C3
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 6
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _WinMain
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _WinMainCRTStartup
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/tlsused.obj.yaml b/test/pecoff/Inputs/tlsused.obj.yaml
deleted file mode 100644
index 6a7880fa7878..000000000000
--- a/test/pecoff/Inputs/tlsused.obj.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: []
-sections:
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: "0000000000000000"
-symbols:
- - Name: .data
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 8
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: __tls_used
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/unknown-drectve.obj.yaml b/test/pecoff/Inputs/unknown-drectve.obj.yaml
deleted file mode 100644
index 79a12fe7bfa2..000000000000
--- a/test/pecoff/Inputs/unknown-drectve.obj.yaml
+++ /dev/null
@@ -1,42 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- - Name: .drectve
- Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
- Alignment: 2147483648
-
- # /nosuchoption:foobar
- SectionData: 2f6e6f737563686f7074696f6e3a666f6f62617200
-
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: .drectve
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 13
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
-...
diff --git a/test/pecoff/Inputs/unwind.obj.yaml b/test/pecoff/Inputs/unwind.obj.yaml
deleted file mode 100644
index 2328cd565601..000000000000
--- a/test/pecoff/Inputs/unwind.obj.yaml
+++ /dev/null
@@ -1,129 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 4883EC184889742410440F110424534889E3488D235B4883C418C3C34881ECF0FF00004881ECF0FF80004881C4F0FF80004881C4F0FF0000C3
- - Name: .xdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 0912080312030F300E880000096402000422001A000000000000000021000000000000001B000000000000000100000000000000010E06000E11F0FF80000701FE1F001A
- Relocations:
- - VirtualAddress: 20
- SymbolName: __C_specific_handler
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 32
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 36
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 40
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - Name: .pdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 000000001B0000000000000012000000120000001C00000000000000010000002C000000000000001D00000034000000
- Relocations:
- - VirtualAddress: 0
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 4
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 8
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 12
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 16
- SymbolName: func
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 20
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 24
- SymbolName: smallFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 28
- SymbolName: smallFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 32
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 36
- SymbolName: allocFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 40
- SymbolName: allocFunc
- Type: IMAGE_REL_AMD64_ADDR32NB
- - VirtualAddress: 44
- SymbolName: .xdata
- Type: IMAGE_REL_AMD64_ADDR32NB
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 57
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 1
- - Name: .xdata
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 68
- NumberOfRelocations: 4
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 2
- - Name: .pdata
- Value: 0
- SectionNumber: 3
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 48
- NumberOfRelocations: 12
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 3
- - Name: func
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __C_specific_handler
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: smallFunc
- Value: 27
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: allocFunc
- Value: 28
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/vars-main-x64.obj.yaml b/test/pecoff/Inputs/vars-main-x64.obj.yaml
deleted file mode 100644
index c888c28e4a67..000000000000
--- a/test/pecoff/Inputs/vars-main-x64.obj.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_AMD64
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp_fn
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 12
- SymbolName: __imp_var
- Type: IMAGE_REL_AMD64_ADDR32
- - VirtualAddress: 22
- SymbolName: __imp__name_with_underscore
- Type: IMAGE_REL_AMD64_ADDR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp_fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "__delayLoadHelper2"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp_var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/vars-main-x86.obj.yaml b/test/pecoff/Inputs/vars-main-x86.obj.yaml
deleted file mode 100644
index fb016828df94..000000000000
--- a/test/pecoff/Inputs/vars-main-x86.obj.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 16
- SectionData: 558BEC56FF15000000008B0D000000008B3103F0FF150000000003C65E5DC3
- Relocations:
- - VirtualAddress: 6
- SymbolName: __imp__fn
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 12
- SymbolName: __imp__var
- Type: IMAGE_REL_I386_DIR32
- - VirtualAddress: 22
- SymbolName: __imp___name_with_underscore
- Type: IMAGE_REL_I386_DIR32
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 31
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 3595596940
- Number: 0
- - Name: __imp__fn
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp___name_with_underscore
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _main
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_FUNCTION
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: "___delayLoadHelper2@8"
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: __imp__var
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: ___ImageBase
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/Inputs/vars-main.c b/test/pecoff/Inputs/vars-main.c
deleted file mode 100644
index d588ca54b88e..000000000000
--- a/test/pecoff/Inputs/vars-main.c
+++ /dev/null
@@ -1,7 +0,0 @@
-__declspec(dllimport) int var;
-__declspec(dllimport) int fn(void);
-__declspec(dllimport) int _name_with_underscore(void);
-
-int main() {
- return var + fn() + _name_with_underscore();
-}
diff --git a/test/pecoff/Inputs/vars.c b/test/pecoff/Inputs/vars.c
deleted file mode 100644
index ae2ec46d1f47..000000000000
--- a/test/pecoff/Inputs/vars.c
+++ /dev/null
@@ -1,20 +0,0 @@
-// cl.exe /c vars.c
-// link /dll /nodefaultlib /entry:dllmain /export:var,@1,NONAME,DATA \
-// /export:fn /export:_name_with_underscore vars.obj
-
-// will be exported by ordinal
-int var = 3;
-
-// will be exported by name
-int fn(void) {
- return 4;
-}
-
-// will be exported by name
-int _name_with_underscore(void) {
- return 5;
-}
-
-int dllmain() {
- return 1;
-}
diff --git a/test/pecoff/Inputs/vars.dll.yaml b/test/pecoff/Inputs/vars.dll.yaml
deleted file mode 100644
index 06f65ced6933..000000000000
--- a/test/pecoff/Inputs/vars.dll.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_32BIT_MACHINE, IMAGE_FILE_DLL ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 2147483648
- SectionData: 558BECB8040000005DC3CCCCCCCCCCCC558BECB8050000005DC3CCCCCCCCCCCC558BECB8010000005DC30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- - Name: .rdata
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
- Alignment: 2147483648
- SectionData: 0000000050570852000000004020000001000000030000000200000028200000342000003C200000003000001010000000100000492000005F20000001000200766172732E646C6C005F6E616D655F776974685F756E64657273636F726500666E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 2147483648
- SectionData: 0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-symbols:
-...
diff --git a/test/pecoff/Inputs/vars.lib b/test/pecoff/Inputs/vars.lib
deleted file mode 100644
index 2d3aa2af678e..000000000000
--- a/test/pecoff/Inputs/vars.lib
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/vars64.lib b/test/pecoff/Inputs/vars64.lib
deleted file mode 100644
index fb48c9ab141e..000000000000
--- a/test/pecoff/Inputs/vars64.lib
+++ /dev/null
Binary files differ
diff --git a/test/pecoff/Inputs/weak-externals.asm b/test/pecoff/Inputs/weak-externals.asm
deleted file mode 100644
index 7a5e918b92e7..000000000000
--- a/test/pecoff/Inputs/weak-externals.asm
+++ /dev/null
@@ -1,25 +0,0 @@
-.386
-.model flat
-
-;; val1 should be linked normally. no_such_symbol1 should be ignored.
-extern _no_such_symbol1 : PROC
-extern _val1 (_no_such_symbol1): PROC
-
-;; no_such_symbol2 should be linked as val2.
-extern _val2 : PROC
-extern _no_such_symbol2 (_val2) : PROC
-
-;; no_such_symbol3 should fail to link.
-extern _no_such_symbol3 : PROC
-
-public _fn1
-.code
-_fn1:
- push ebp
- mov ebp, esp
- call _val1
- call _no_such_symbol2
- call _no_such_symbol3
- pop ebp
- ret 0
-end _fn1
diff --git a/test/pecoff/Inputs/weak-externals.obj.yaml b/test/pecoff/Inputs/weak-externals.obj.yaml
deleted file mode 100644
index ee76936c5326..000000000000
--- a/test/pecoff/Inputs/weak-externals.obj.yaml
+++ /dev/null
@@ -1,91 +0,0 @@
----
-header:
- Machine: IMAGE_FILE_MACHINE_I386
- Characteristics: [ ]
-sections:
- - Name: .text
- Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
- Alignment: 4
- SectionData: 558BECE800000000E800000000E8000000005DC3
- Relocations:
- - VirtualAddress: 4
- SymbolName: _val1
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 9
- SymbolName: _no_such_symbol2
- Type: IMAGE_REL_I386_REL32
- - VirtualAddress: 14
- SymbolName: _no_such_symbol3
- Type: IMAGE_REL_I386_REL32
- - Name: .data
- Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
- Alignment: 4
- SectionData: ""
-symbols:
- - Name: .text
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 20
- NumberOfRelocations: 3
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: .data
- Value: 0
- SectionNumber: 2
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_STATIC
- SectionDefinition:
- Length: 0
- NumberOfRelocations: 0
- NumberOfLinenumbers: 0
- CheckSum: 0
- Number: 0
- - Name: _no_such_symbol1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _no_such_symbol3
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- - Name: _val1
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 4
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
- - Name: _no_such_symbol2
- Value: 0
- SectionNumber: 0
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_WEAK_EXTERNAL
- WeakExternal:
- TagIndex: 5
- Characteristics: IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
- - Name: _fn1
- Value: 0
- SectionNumber: 1
- SimpleType: IMAGE_SYM_TYPE_NULL
- ComplexType: IMAGE_SYM_DTYPE_NULL
- StorageClass: IMAGE_SYM_CLASS_EXTERNAL
-...
diff --git a/test/pecoff/alignment.test b/test/pecoff/alignment.test
deleted file mode 100644
index bdf8bbaa2a3e..000000000000
--- a/test/pecoff/alignment.test
+++ /dev/null
@@ -1,22 +0,0 @@
-# RUN: yaml2obj %p/Inputs/alignment.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /entry:start /opt:noref -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Name: .bss (2E 62 73 73 00 00 00 00)
-CHECK: RawDataSize: 0
-
-CHECK: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x6
-
-CHECK: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x1001
-
-CHECK: Name: .yyy
-CHECK-NEXT: VirtualSize: 0x2
-CHECK-NEXT: VirtualAddress: 0x5000
-
-CHECK: Name: .zzz
-CHECK-NEXT: VirtualSize: 0x2
-CHECK-NEXT: VirtualAddress: 0x8000
diff --git a/test/pecoff/alternatename.test b/test/pecoff/alternatename.test
deleted file mode 100644
index 926a8eae2876..000000000000
--- a/test/pecoff/alternatename.test
+++ /dev/null
@@ -1,44 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/alternatename1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/alternatename2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/alternatename3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /force /out:%t1.exe /alternatename:_main=_foo \
-# RUN: /subsystem:console -- %t1.obj
-# RUN: llvm-objdump -d %t1.exe | FileCheck -check-prefix=CHECK1 %s
-#
-# RUN: lld -flavor link /force /out:%t2.exe /alternatename:_main=_foo \
-# RUN: /subsystem:console -- %t1.obj %t2.obj
-# RUN: llvm-objdump -d %t2.exe | FileCheck -check-prefix=CHECK2 %s
-#
-# RUN: lld -flavor link /force /out:%t3.exe /subsystem:console -- %t3.obj
-# RUN: llvm-objdump -d %t3.exe | FileCheck -check-prefix=CHECK3 %s
-#
-# RUN: lld -flavor link /force /out:%t4.exe /alternatename:_main=_foo \
-# RUN: /alternatename:_xyz=_foo /subsystem:console -- %t1.obj
-# RUN: llvm-objdump -d %t4.exe | FileCheck -check-prefix=CHECK4 %s
-
-CHECK1: nop
-CHECK1-NEXT: nop
-CHECK1-NEXT: nop
-CHECK1-NEXT: nop
-CHECK1-NOT: int3
-
-CHECK2: int3
-CHECK2-NEXT: int3
-CHECK2-NEXT: int3
-CHECK2-NEXT: int3
-CHECK2-NOT: nop
-
-CHECK3: nop
-CHECK3-NEXT: nop
-CHECK3-NEXT: nop
-CHECK3-NEXT: nop
-CHECK3-NOT: int3
-
-CHECK4: nop
-CHECK4-NEXT: nop
-CHECK4-NEXT: nop
-CHECK4-NEXT: nop
-CHECK4-NOT: int3
diff --git a/test/pecoff/armnt-ImageBase.test b/test/pecoff/armnt-ImageBase.test
deleted file mode 100644
index b4bf28c5eb81..000000000000
--- a/test/pecoff/armnt-ImageBase.test
+++ /dev/null
@@ -1,14 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-ImageBase.obj.yaml
-# RUN: llvm-readobj -r %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe %t.obj /subsystem:console
-# RUN: llvm-readobj -r %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Relocations [
-BEFORE: Section {{.*}} .text {
-BEFORE: 0x4 IMAGE_REL_ARM_ADDR32 __ImageBase
-BEFORE: }
-BEFORE: ]
-
-AFTER: Relocations [
-AFTER-NEXT: ]
-
diff --git a/test/pecoff/armnt-addr32-exec.test b/test/pecoff/armnt-addr32-exec.test
deleted file mode 100644
index be223a0e7e5d..000000000000
--- a/test/pecoff/armnt-addr32-exec.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-addr32-exec.obj.yaml
-# RUN: llvm-objdump -s %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe /entry:function /subsystem:console %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Contents of section .rdata:
-BEFORE: 0000 00000000
-
-AFTER: Contents of section .rdata:
-AFTER: 1000 01204000
-
diff --git a/test/pecoff/armnt-addr32.test b/test/pecoff/armnt-addr32.test
deleted file mode 100644
index 716217d45758..000000000000
--- a/test/pecoff/armnt-addr32.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-addr32.obj.yaml
-# RUN: llvm-objdump -s %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:is /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Contents of section .rdata:
-BEFORE: 0000 00000000 00000000
-
-AFTER: Contents of section .rdata:
-AFTER: 1000 00104000 00000000
-
diff --git a/test/pecoff/armnt-address-of-entry-point.test b/test/pecoff/armnt-address-of-entry-point.test
deleted file mode 100644
index 3013b230bbd1..000000000000
--- a/test/pecoff/armnt-address-of-entry-point.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/executable.obj.yaml
-# RUN: lld -flavor link /out:%t.exe %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-# CHECK: AddressOfEntryPoint: 0x1001
-
diff --git a/test/pecoff/armnt-blx23t.test b/test/pecoff/armnt-blx23t.test
deleted file mode 100644
index 56639fa22be9..000000000000
--- a/test/pecoff/armnt-blx23t.test
+++ /dev/null
@@ -1,27 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-blx23t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 2d e9 00 48 push.w {r11, lr}
-BEFORE: 8: eb 46 mov r11, sp
-BEFORE: a: 20 20 movs r0, #32
-BEFORE: c: 00 f0 00 f8 bl #0
-BEFORE: 10: 01 30 adds r0, #1
-BEFORE: 12: bd e8 00 88 pop.w {r11, pc}
-
-AFTER: Disassembly of section .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 2d e9 00 48 push.w {r11, lr}
-AFTER: 1008: eb 46 mov r11, sp
-AFTER: 100a: 20 20 movs r0, #32
-AFTER: 100c: ff f7 f8 ff bl #-16
-AFTER: 1010: 01 30 adds r0, #1
-AFTER: 1012: bd e8 00 88 pop.w {r11, pc}
-
diff --git a/test/pecoff/armnt-branch24t.test b/test/pecoff/armnt-branch24t.test
deleted file mode 100644
index 1a727ed7d725..000000000000
--- a/test/pecoff/armnt-branch24t.test
+++ /dev/null
@@ -1,20 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-branch24t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:function /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 20 20 movs r0, #32
-BEFORE: 6: 00 f0 00 b8 b.w #0
-
-AFTER: Disassembly of section .text:
-AFTER: .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 20 20 movs r0, #32
-AFTER: 1006: ff f7 fb bf b.w #-10
-
diff --git a/test/pecoff/armnt-exports.s b/test/pecoff/armnt-exports.s
deleted file mode 100644
index cb500bf02e07..000000000000
--- a/test/pecoff/armnt-exports.s
+++ /dev/null
@@ -1,28 +0,0 @@
-
-# void __declspec(dllexport) function() {}
-# void _DllMainCRTStartup() {}
-
- .syntax unified
- .thumb
- .text
-
- .def function
- .scl 2
- .type 32
- .endef
- .global function
- .align 2
- .thumb_func
-function:
- bx lr
-
- .def _DllMainCRTStartup
- .scl 2
- .type 32
- .endef
- .global _DllMainCRTStartup
- .align 2
- .thumb_func
-_DllMainCRTStartup
- bx lr
-
diff --git a/test/pecoff/armnt-exports.test b/test/pecoff/armnt-exports.test
deleted file mode 100644
index f0aa3eabcacc..000000000000
--- a/test/pecoff/armnt-exports.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-exports.obj.yaml
-# RUN: lld -flavor link /dll /def:%p/Inputs/armnt-exports.def /out:%t.dll %t.obj
-# RUN: llvm-readobj -coff-exports %t.dll | FileCheck %s
-
-CHECK: Export {
-CHECK: Ordinal: 1
-CHECK: Name: function
-CHECK: RVA: 0x2001
-CHECK: }
-
diff --git a/test/pecoff/armnt-imports.test b/test/pecoff/armnt-imports.test
deleted file mode 100644
index 596270909c52..000000000000
--- a/test/pecoff/armnt-imports.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-import.obj.yaml
-# RUN: lld -flavor link /out:%t.exe /subsystem:console %t.obj %p/Inputs/library.lib
-# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
-
-CHECK: Import {
-CHECK: Name: library.dll
-CHECK: ImportLookupTableRVA: 0x4000
-CHECK: ImportAddressTableRVA: 0x2000
-CHECK: Symbol: function (0)
-CHECK: }
-
diff --git a/test/pecoff/armnt-mov32t-exec.test b/test/pecoff/armnt-mov32t-exec.test
deleted file mode 100644
index de4feffea0cc..000000000000
--- a/test/pecoff/armnt-mov32t-exec.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-mov32t-exec.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:get_function %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 70 47 bx lr
-BEFORE: 2: 00 bf nop
-BEFORE: 4: 40 f2 00 00 movw r0, #0
-BEFORE: 8: c0 f2 00 00 movt r0, #0
-BEFORE: c: 70 47 bx lr
-
-AFTER: Disassembly of section .text:
-AFTER: 1000: 70 47 bx lr
-AFTER: 1002: 00 bf nop
-AFTER: 1004: 41 f2 01 00 movw r0, #4097
-AFTER: 1008: c0 f2 40 00 movt r0, #64
-AFTER: 100c: 70 47 bx lr
-
diff --git a/test/pecoff/armnt-movt32t.test b/test/pecoff/armnt-movt32t.test
deleted file mode 100644
index 2ae47ef75846..000000000000
--- a/test/pecoff/armnt-movt32t.test
+++ /dev/null
@@ -1,17 +0,0 @@
-# REQUIRES: arm
-
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-mov32t.obj.yaml
-# RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
-
-BEFORE: Disassembly of section .text:
-BEFORE: 0: 40 f2 00 00 movw r0, #0
-BEFORE: 4: c0 f2 00 00 movt r0, #0
-BEFORE: 8: 70 47 bx lr
-
-AFTER: Disassembly of section .text:
-AFTER: 0: 41 f2 00 00 movw r0, #4096
-AFTER: 4: c0 f2 40 00 movt r0, #64
-AFTER: 8: 70 47 bx lr
-
diff --git a/test/pecoff/armnt.test b/test/pecoff/armnt.test
deleted file mode 100644
index 1cf6cd8114a4..000000000000
--- a/test/pecoff/armnt.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: yaml2obj -format coff -o %t.obj %p/Inputs/armnt-obj.yaml
-# RUN: lld -flavor link /out:%t.dll /subsystem:console /entry:main %t.obj
-# RUN: llvm-readobj -sections %t.dll | FileCheck %s
-
-CHECK: Format: COFF-ARM
-
diff --git a/test/pecoff/associative.test b/test/pecoff/associative.test
deleted file mode 100644
index f998befd007e..000000000000
--- a/test/pecoff/associative.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/associative1.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/associative3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /machine:x86 /subsystem:console /entry:main \
-# RUN: /out:%t.exe -- %t1.obj %t2.obj %t3.obj
-# RUN: obj2yaml %t.exe | FileCheck %s
-
-CHECK: - Name: .CRT
-CHECK: SectionData: '77777777'
diff --git a/test/pecoff/base-reloc.test b/test/pecoff/base-reloc.test
deleted file mode 100644
index 5bc83de4d1c2..000000000000
--- a/test/pecoff/base-reloc.test
+++ /dev/null
@@ -1,78 +0,0 @@
-# RUN: yaml2obj %p/Inputs/basereloc.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -coff-basereloc %t.exe | FileCheck %s --check-prefix=BASEREL
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force /fixed \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-readobj -coff-basereloc %t2.exe | FileCheck %s --check-prefix=NOBASEREL
-
-BASEREL: BaseReloc [
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x2007
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x200C
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x201E
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: ABSOLUTE
-BASEREL-NEXT: Address: 0x2000
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x3007
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x300C
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: HIGHLOW
-BASEREL-NEXT: Address: 0x301E
-BASEREL-NEXT: }
-BASEREL-NEXT: Entry {
-BASEREL-NEXT: Type: ABSOLUTE
-BASEREL-NEXT: Address: 0x3000
-BASEREL-NEXT: }
-BASEREL-NEXT: ]
-
-NOBASEREL: BaseReloc [
-NOBASEREL-NEXT: ]
-
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers -sections %t3.exe | FileCheck %s \
-# RUN: --check-prefix=BASEREL-HEADER
-#
-# RUN: lld -flavor link /out:%t4.exe /subsystem:console /force /opt:noref \
-# RUN: /fixed -- %t.obj
-# RUN: llvm-readobj -file-headers %t4.exe | FileCheck %s \
-# RUN: --check-prefix=NOBASEREL-HEADER
-
-BASEREL-HEADER-NOT: IMAGE_FILE_RELOCS_STRIPPED
-
-NOBASEREL-HEADER: IMAGE_FILE_RELOCS_STRIPPED
-
-BASEREL-HEADER: BaseRelocationTableRVA: 0x4000
-BASEREL-HEADER: BaseRelocationTableSize: 0x20
-BASEREL-HEADER: Name: .reloc (2E 72 65 6C 6F 63 00 00)
-BASEREL-HEADER-NEXT: VirtualSize: 0x20
-BASEREL-HEADER-NEXT: VirtualAddress: 0x4000
-BASEREL-HEADER-NEXT: RawDataSize: 512
-BASEREL-HEADER-NEXT: PointerToRawData: 0xA00
-BASEREL-HEADER-NEXT: PointerToRelocations: 0x0
-BASEREL-HEADER-NEXT: PointerToLineNumbers: 0x0
-BASEREL-HEADER-NEXT: RelocationCount: 0
-BASEREL-HEADER-NEXT: LineNumberCount: 0
-BASEREL-HEADER-NEXT: Characteristics [ (0x42000040)
-BASEREL-HEADER-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-BASEREL-HEADER-NEXT: ]
diff --git a/test/pecoff/baseaddr.test b/test/pecoff/baseaddr.test
deleted file mode 100644
index dbd091bc2e30..000000000000
--- a/test/pecoff/baseaddr.test
+++ /dev/null
@@ -1,18 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /opt:noref /subsystem:console /force \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=DEFAULT %s
-#
-# RUN: lld -flavor link /out:%t2.exe /opt:noref /base:8388608 \
-# RUN: /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck -check-prefix=BASE %s
-
-DEFAULT: ImageBase: 0x400000
-
-BASE: ImageBase: 0x800000
-
-# RUN: not lld -flavor link /base:3 /subsystem:console -- %t.obj >& %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-ERROR: Base address have to be multiple of 64K, but got 3
diff --git a/test/pecoff/bss-section.test b/test/pecoff/bss-section.test
deleted file mode 100644
index 4181e994fbf5..000000000000
--- a/test/pecoff/bss-section.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: -- %p/Inputs/bss.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Section {
-CHECK: Number: 1
-CHECK-NEXT: Name: .bss
-CHECK-NEXT: VirtualSize: 0x320
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 0
-CHECK-NEXT: PointerToRawData: 0x0
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [
-CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA
-CHECK-NEXT: IMAGE_SCN_MEM_READ
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE
-CHECK-NEXT: ]
-CHECK-NEXT: }
diff --git a/test/pecoff/comdat.test b/test/pecoff/comdat.test
deleted file mode 100644
index d752309d7515..000000000000
--- a/test/pecoff/comdat.test
+++ /dev/null
@@ -1,12 +0,0 @@
-# RUN: yaml2obj %p/Inputs/comdat.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/comdat.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj 2>&1 > %t.log
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t.log
-#
-# RUN: FileCheck %s < %t.log
-
-CHECK-NOT: duplicate symbol error
diff --git a/test/pecoff/common-symbol.test b/test/pecoff/common-symbol.test
deleted file mode 100644
index 49d4d8725da4..000000000000
--- a/test/pecoff/common-symbol.test
+++ /dev/null
@@ -1,14 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/common-symbol.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /machine:x64 /out:%t.exe /subsystem:console /force \
-# RUN: /opt:noref -- %t.obj %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-# Operands of B8 (MOV EAX) are common symbols
-CHECK: 3000: b8 00 10 00 40
-CHECK: 3005: b8 04 10 00 40
-CHECK: 300a: b8 20 10 00 40
-CHECK: 300f: b8 60 10 00 40
-CHECK: 3014: b8 80 10 00 40
diff --git a/test/pecoff/conflicting-machine.test b/test/pecoff/conflicting-machine.test
deleted file mode 100644
index 6c71521fe1b7..000000000000
--- a/test/pecoff/conflicting-machine.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x64.obj.yaml > %t-x64.obj
-
-# RUN: not lld -flavor link /machine:x86 /out:%t.exe /entry:main %t-x64.obj 2>&1 \
-# RUN: | FileCheck %s
-
-CHECK: module machine type 'X64' conflicts with target machine type 'X86'
diff --git a/test/pecoff/delayimport.test b/test/pecoff/delayimport.test
deleted file mode 100644
index 89ceb4ad5b20..000000000000
--- a/test/pecoff/delayimport.test
+++ /dev/null
@@ -1,54 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t-x86.obj
-# RUN: yaml2obj %p/Inputs/vars-main-x64.obj.yaml > %t-x64.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:main \
-# RUN: /delayload:vars.dll -- %t-x86.obj %p/Inputs/vars.lib
-# RUN: llvm-readobj -coff-imports %t1.exe | FileCheck -check-prefix=X86 %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:main \
-# RUN: /machine:x64 /delayload:vars64.dll -- %t-x64.obj %p/Inputs/vars64.lib
-# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=X64 %s
-
-X86: DelayImport {
-X86-NEXT: Name: vars.dll
-X86-NEXT: Attributes: 0x1
-X86-NEXT: ModuleHandle: 0x1000
-X86-NEXT: ImportAddressTable: 0x1004
-X86-NEXT: ImportNameTable: 0x2000
-X86-NEXT: BoundDelayImportTable: 0x0
-X86-NEXT: UnloadDelayImportTable: 0x0
-X86-NEXT: Import {
-X86-NEXT: Symbol: _name_with_underscore (0)
-X86-NEXT: Address: 0x40501F
-X86-NEXT: }
-X86-NEXT: Import {
-X86-NEXT: Symbol: fn (1)
-X86-NEXT: Address: 0x405034
-X86-NEXT: }
-X86-NEXT: Import {
-X86-NEXT: Symbol: (1)
-X86-NEXT: Address: 0x405049
-X86-NEXT: }
-X86-NEXT: }
-
-X64: DelayImport {
-X64-NEXT: Name: vars64.dll
-X64-NEXT: Attributes: 0x1
-X64-NEXT: ModuleHandle: 0x1000
-X64-NEXT: ImportAddressTable: 0x1008
-X64-NEXT: ImportNameTable: 0x2000
-X64-NEXT: BoundDelayImportTable: 0x0
-X64-NEXT: UnloadDelayImportTable: 0x0
-X64-NEXT: Import {
-X64-NEXT: Symbol: _name_with_underscore (0)
-X64-NEXT: Address: 0x14000501F
-X64-NEXT: }
-X64-NEXT: Import {
-X64-NEXT: Symbol: fn (1)
-X64-NEXT: Address: 0x140005076
-X64-NEXT: }
-X64-NEXT: Import {
-X64-NEXT: Symbol: (1)
-X64-NEXT: Address: 0x1400050CD
-X64-NEXT: }
-X64-NEXT: }
diff --git a/test/pecoff/dll.test b/test/pecoff/dll.test
deleted file mode 100644
index 666e9f1152b0..000000000000
--- a/test/pecoff/dll.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console \
-# RUN: /entry:start /dll -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: IMAGE_FILE_DLL (0x2000)
diff --git a/test/pecoff/dosstub.test b/test/pecoff/dosstub.test
deleted file mode 100644
index f0458501704d..000000000000
--- a/test/pecoff/dosstub.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: echo "MZ Hello world" > %t.stub
-# RUN: lld -flavor link /out:%t.exe /entry:start /subsystem:console \
-# RUN: /stub:%t.stub -- %t.obj
-# RUN: FileCheck -check-prefix=FILE %s < %t.exe
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=READOBJ %s
-
-FILE: MZ Hello world
-
-READOBJ: Format: COFF-i386
diff --git a/test/pecoff/drectve.test b/test/pecoff/drectve.test
deleted file mode 100644
index 258f608e5dff..000000000000
--- a/test/pecoff/drectve.test
+++ /dev/null
@@ -1,39 +0,0 @@
-# Test if the linker can properly parse the .drectve section contents.
-# "drectve.obj" contains "/defaultlib:vars /subsystem:console,42.195 -?foo"
-# in its .drectve section.
-
-# RUN: yaml2obj %p/Inputs/drectve.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /entry:main /opt:noref /libpath:%p/Inputs \
-# RUN: -- %t.obj >& %t.log
-#
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
-# RUN: llvm-objdump -p %t.exe | FileCheck -check-prefix=IMPORT %s
-# RUN: echo >> %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-HEADER: MajorOperatingSystemVersion: 42
-HEADER: MinorOperatingSystemVersion: 195
-
-IMPORT: DLL Name: vars.dll
-IMPORT-NEXT: Hint/Ord Name
-IMPORT-NEXT: 0 _name_with_underscore
-IMPORT-NEXT: 1 fn
-IMPORT-NEXT: 1
-
-ERROR-NOT: foo
-
-
-# drectve2.obj contains "/include:foo".
-# RUN: yaml2obj %p/Inputs/drectve2.obj.yaml > %t2.obj
-# RUN: not lld -flavor link /out:%t2.exe /entry:main -- %t2.obj >& %t2.log
-# RUN: FileCheck -check-prefix=UNDEF2 %s < %t2.log
-
-UNDEF2: Undefined symbol: {{.*}}: foo
-
-# drectve4.lib contains "/include:bar".
-# RUN: not lld -flavor link /force /out:%t3.exe /entry:main /include:_fn1 -- \
-# RUN: %t2.obj %p/Inputs/drectve3.lib >& %t3.log
-# RUN: FileCheck -check-prefix=UNDEF3 %s < %t3.log
-
-UNDEF3: Undefined symbol: {{.*}}: bar
diff --git a/test/pecoff/dynamic.test b/test/pecoff/dynamic.test
deleted file mode 100644
index 6b9a945b1fc5..000000000000
--- a/test/pecoff/dynamic.test
+++ /dev/null
@@ -1,11 +0,0 @@
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-objdump -p %t.exe | FileCheck %s
-
-CHECK: DLL Name: vars.dll
-CHECK-NEXT: Hint/Ord Name
-CHECK-NEXT: 0 _name_with_underscore
-CHECK-NEXT: 1 fn
-CHECK-NEXT: 1
diff --git a/test/pecoff/dynamicbase.test b/test/pecoff/dynamicbase.test
deleted file mode 100644
index 9ed795b99db9..000000000000
--- a/test/pecoff/dynamicbase.test
+++ /dev/null
@@ -1,24 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck %s \
-# RUN: --check-prefix=DYNAMICBASE
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force /dynamicbase:no \
-# RUN: -- %t.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck %s \
-# RUN: --check-prefix=NODYNAMICBASE
-#
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force /fixed -- %t.obj
-# RUN: llvm-readobj -file-headers %t3.exe | FileCheck %s \
-# RUN: --check-prefix=NODYNAMICBASE
-#
-# RUN: not lld -flavor link /out:%t4.exe /subsystem:console /force /fixed \
-# RUN: /dynamicbase -- %t.obj 2> %t.err
-# RUN: FileCheck %s --check-prefix=DYNAMIC-AND-FIXED < %t.err
-
-DYNAMICBASE: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
-
-NODYNAMICBASE-NOT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
-
-DYNAMIC-AND-FIXED: /dynamicbase must not be specified with /fixed
diff --git a/test/pecoff/entry.test b/test/pecoff/entry.test
deleted file mode 100644
index b48e5a038293..000000000000
--- a/test/pecoff/entry.test
+++ /dev/null
@@ -1,41 +0,0 @@
-# REQUIRES: asserts
-
-# RUN: yaml2obj %p/Inputs/entry.obj.yaml > %t.obj
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_main=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=MAIN %s < %t.log
-
-MAIN: _mainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_wmain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WMAIN %s < %t.log
-
-WMAIN: _wmainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain@16=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
-
-WINMAIN: _WinMainCRTStartup
-
-# RUN: not lld -flavor link /out:%t.exe /alternatename:_wWinMain=_foo \
-# RUN: -- %t.obj 2> %t.log
-# RUN: FileCheck -check-prefix=WWINMAIN %s < %t.log
-
-WWINMAIN: _wWinMainCRTStartup
-
-# RUN: lld -flavor link /out:%t.exe /alternatename:_main=_foo \
-# RUN: /alternatename:_mainCRTStartup=_bar -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MAINADDR %s
-
-MAINADDR: AddressOfEntryPoint: 0x1004
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:baz -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=MANGLE %s
-
-MANGLE: AddressOfEntryPoint: 0x1004
diff --git a/test/pecoff/export-warning.test b/test/pecoff/export-warning.test
deleted file mode 100644
index 5c7647de00bd..000000000000
--- a/test/pecoff/export-warning.test
+++ /dev/null
@@ -1,19 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn1 -- %t.obj 2> %t1.log
-# RUN: echo >> %t1.log
-# RUN: FileCheck -check-prefix=CHECK1 %s < %t1.log
-CHECK1-NOT: Export symbol '_exportfn1' specified more than once.
-
-# RUN: lld -flavor link /out:%t2.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn1,@5 -- %t.obj 2> %t2.log
-# RUN: echo >> %t2.log
-# RUN: FileCheck -check-prefix=CHECK2 %s < %t2.log
-CHECK2: Export symbol '_exportfn1' specified more than once.
-
-# RUN: lld -flavor link /out:%t3.dll /dll /entry:init \
-# RUN: /export:exportfn1,@8 /export:exportfn1,@5 -- %t.obj 2> %t3.log
-# RUN: echo >> %t3.log
-# RUN: FileCheck -check-prefix=CHECK3 %s < %t3.log
-CHECK3: Export symbol '_exportfn1' specified more than once.
diff --git a/test/pecoff/export.test b/test/pecoff/export.test
deleted file mode 100644
index 63b8677cd4b7..000000000000
--- a/test/pecoff/export.test
+++ /dev/null
@@ -1,90 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t1.dll | FileCheck -check-prefix=CHECK1 %s
-
-CHECK1: Export Table:
-CHECK1: DLL name: export.test.tmp1.dll
-CHECK1: Ordinal RVA Name
-CHECK1-NEXT: 1 0x2008 exportfn1
-CHECK1-NEXT: 2 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t2.dll /dll /subsystem:console /entry:init \
-# RUN: /export:exportfn1,@5 /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t2.dll | FileCheck -check-prefix=CHECK2 %s
-
-CHECK2: Export Table:
-CHECK2: DLL name: export.test.tmp2.dll
-CHECK2: Ordinal RVA Name
-CHECK2-NEXT: 5 0x2008 exportfn1
-CHECK2-NEXT: 6 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t3.dll /dll /subsystem:console /entry:init \
-# RUN: /export:exportfn1,@5,noname /export:exportfn2 -- %t.obj
-# RUN: llvm-objdump -p %t3.dll | FileCheck -check-prefix=CHECK3 %s
-
-CHECK3: Export Table:
-CHECK3: DLL name: export.test.tmp3.dll
-CHECK3: Ordinal RVA Name
-CHECK3-NEXT: 5 0x2008
-CHECK3-NEXT: 6 0x2010 exportfn2
-
-# RUN: lld -flavor link /out:%t4.dll /dll /entry:init \
-# RUN: /def:%p/Inputs/exports.def -- %t.obj
-# RUN: llvm-objdump -p %t4.dll | FileCheck -check-prefix=CHECK4 %s
-
-CHECK4: Export Table:
-CHECK4: DLL name: export.test.tmp4.dll
-CHECK4: Ordinal RVA Name
-CHECK4-NEXT: 5 0x2008 exportfn1
-CHECK4-NEXT: 6 0x2010 exportfn2
-CHECK4-NEXT: 7 0x2010 exportfn3@256
-CHECK4-NEXT: 8 0x2010 exportfn5
-
-# RUN: lld -flavor link /out:%t5.dll /dll /entry:init \
-# RUN: /export:exportfn7 -- %t.obj
-# RUN: llvm-objdump -p %t5.dll | FileCheck -check-prefix=CHECK5 %s
-
-CHECK5: Export Table:
-CHECK5: DLL name: export.test.tmp5.dll
-CHECK5: Ordinal RVA Name
-CHECK5-NEXT: 1 0x2010 exportfn3@256
-CHECK5-NEXT: 2 0x2010 exportfn7
-
-# RUN: lld -flavor link /out:%t6.dll /dll /entry:init \
-# RUN: /export:exportfn8 -- %t.obj
-# RUN: llvm-objdump -p %t6.dll | FileCheck -check-prefix=CHECK6 %s
-
-CHECK6: Export Table:
-CHECK6: DLL name: export.test.tmp6.dll
-CHECK6: Ordinal RVA Name
-CHECK6-NEXT: 1 0x2010 exportfn3@256
-CHECK6-NEXT: 2 0x2010 exportfn8
-
-# RUN: lld -flavor link /out:%t7.dll /dll /entry:init \
-# RUN: /export:exportfn7 /export:exportfn7@8 \
-# RUN: /export:exportfn8 /export:exportfn8 /export:exportfn3 -- %t.obj
-# RUN: llvm-objdump -p %t7.dll | FileCheck -check-prefix=DUP %s
-
-DUP: Export Table:
-DUP: DLL name: export.test.tmp7.dll
-DUP: Ordinal RVA Name
-DUP-NEXT: 1 0x2010 exportfn3
-DUP-NEXT: 2 0x2010 exportfn7
-DUP-NEXT: 3 0x2010 exportfn8
-DUP-NOT: ?exportfn8@@YAXXZ
-DUP-NOT: exportfn3@256
-
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t8.dll /dll /entry:init \
-# RUN: /export:f1=exportfn1 /export:f2@4=exportfn2,private -- %t.obj
-# RUN: llvm-objdump -p %t8.dll | FileCheck -check-prefix=EQUAL %s
-
-EQUAL: Export Table:
-EQUAL: DLL name: export.test.tmp8.dll
-EQUAL: Ordinal RVA Name
-EQUAL-NEXT: 1 0x2010 exportfn3@256
-EQUAL-NEXT: 2 0x2008 f1
-EQUAL-NEXT: 3 0x2010 f2{{$}}
diff --git a/test/pecoff/exportlib.test b/test/pecoff/exportlib.test
deleted file mode 100644
index b65751cfebd7..000000000000
--- a/test/pecoff/exportlib.test
+++ /dev/null
@@ -1,32 +0,0 @@
-# REQUIRES: winlib
-
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 -- %t.obj
-# RUN: llvm-readobj %t.lib | FileCheck %s
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-i386
-CHECK: Arch: i386
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-<unknown arch>
-CHECK: Arch: unknown
-CHECK: AddressSize: 32bit
-
-CHECK: File: exportlib.test.tmp.dll
-CHECK: Format: COFF-<unknown arch>
-CHECK: Arch: unknown
-CHECK: AddressSize: 32bit
diff --git a/test/pecoff/exportlib2.test b/test/pecoff/exportlib2.test
deleted file mode 100644
index e846b0bdd064..000000000000
--- a/test/pecoff/exportlib2.test
+++ /dev/null
@@ -1,21 +0,0 @@
-# RUN: yaml2obj %p/Inputs/export.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /export:exportfn1 /export:exportfn2 /lldmoduledeffile:%t1.def -- %t.obj
-# RUN: FileCheck -check-prefix=CHECK1 %s < %t1.def
-
-CHECK1: LIBRARY "exportlib2.test.tmp.dll"
-CHECK1: EXPORTS
-CHECK1: exportfn1 @1
-CHECK1: exportfn2 @2
-CHECK1: exportfn3@256 @3
-
-# RUN: lld -flavor link /out:%t.dll /dll /entry:init \
-# RUN: /def:%p/Inputs/exports2.def /lldmoduledeffile:%t2.def -- %t.obj
-# RUN: FileCheck -check-prefix=CHECK2 %s < %t2.def
-
-CHECK2: LIBRARY "exportlib2.test.tmp.dll"
-CHECK2: EXPORTS
-CHECK2: exportfn1 @5
-CHECK2: exportfn3@256 @6
-CHECK2: exportfn7@8 @7
diff --git a/test/pecoff/grouped-sections.test b/test/pecoff/grouped-sections.test
deleted file mode 100644
index 40ae1478997e..000000000000
--- a/test/pecoff/grouped-sections.test
+++ /dev/null
@@ -1,17 +0,0 @@
-# RUN: yaml2obj %p/Inputs/grouped-sections.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main -- %t.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-#
-# The file "grouped-sections.obj" has three data sections in the following
-# order:
-#
-# .data$2
-# .data$1
-# .data
-#
-# If all the sections will be merged correctly, the resulting ".data"
-# section will have the string "Hello, world".
-
-CHECK: Contents of section .data:
-CHECK-NEXT: Hello, world
diff --git a/test/pecoff/hello.test b/test/pecoff/hello.test
deleted file mode 100644
index 679b8b3ad984..000000000000
--- a/test/pecoff/hello.test
+++ /dev/null
@@ -1,51 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=FILE %s
-
-FILE: ImageOptionalHeader {
-FILE: SizeOfInitializedData: 1024
-FILE: SizeOfHeaders: 512
-FILE: }
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -sections %t2.exe | FileCheck -check-prefix=SECTIONS %s
-
-SECTIONS: Format: COFF-i386
-SECTIONS-NEXT: Arch: i386
-SECTIONS-NEXT: AddressSize: 32bit
-SECTIONS-NEXT: Sections [
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 1
-SECTIONS-NEXT: Name: .data
-SECTIONS-NEXT: VirtualSize: 0x12
-SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x200
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: IMAGE_SCN_MEM_WRITE
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 2
-SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-SECTIONS-NEXT: VirtualSize: 0x1C
-SECTIONS-NEXT: VirtualAddress: 0x2000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x400
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_CODE
-SECTIONS-NEXT: IMAGE_SCN_MEM_EXECUTE
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
diff --git a/test/pecoff/hello64.test b/test/pecoff/hello64.test
deleted file mode 100644
index 7536e5a8fd26..000000000000
--- a/test/pecoff/hello64.test
+++ /dev/null
@@ -1,22 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:windows /machine:x64 \
-# RUN: /entry:main -- %t.obj %p/Inputs/hello64lib.lib
-# RUN: llvm-objdump -disassemble %t.exe | FileCheck %s
-
-CHECK: 6000: 48 83 ec 28 subq $40, %rsp
-CHECK: 6004: 48 c7 c1 00 00 00 00 movq $0, %rcx
-CHECK: 600b: 48 8d 15 f4 af ff ff leaq -20492(%rip), %rdx
-CHECK: 6012: 4c 8d 05 e7 af ff ff leaq -20505(%rip), %r8
-CHECK: 6019: 41 b9 00 00 00 00 movl $0, %r9d
-CHECK: 601f: e8 12 00 00 00 callq 18
-CHECK: 6024: b9 00 00 00 00 movl $0, %ecx
-CHECK: 6029: e8 00 00 00 00 callq 0
-CHECK: 602e: ff 25 cc cf ff ff jmpq *-12340(%rip)
-CHECK: 6034: cc int3
-CHECK: 6035: cc int3
-CHECK: 6036: ff 25 cc cf ff ff jmpq *-12340(%rip)
-CHECK: 603c: cc int3
-CHECK: 603d: cc int3
diff --git a/test/pecoff/help.test b/test/pecoff/help.test
deleted file mode 100644
index f5e9c358f1a8..000000000000
--- a/test/pecoff/help.test
+++ /dev/null
@@ -1,4 +0,0 @@
-# RUN: not lld -flavor link /help | FileCheck %s
-# RUN: not lld -flavor link '/?' | FileCheck %s
-
-CHECK: USAGE
diff --git a/test/pecoff/imagebase.test b/test/pecoff/imagebase.test
deleted file mode 100644
index bb83e6b66124..000000000000
--- a/test/pecoff/imagebase.test
+++ /dev/null
@@ -1,15 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/imagebase.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:_start \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-objdump -disassemble %t1.exe | FileCheck -check-prefix=DEFAULT %s
-
-DEFAULT: a1 00 00 40 00 movl 4194304, %eax
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:_start \
-# RUN: /base:65536 /opt:noref -- %t.obj
-# RUN: llvm-objdump -disassemble %t2.exe | FileCheck -check-prefix=BASE %s
-
-BASE: a1 00 00 01 00 movl 65536, %eax
diff --git a/test/pecoff/importlib.test b/test/pecoff/importlib.test
deleted file mode 100644
index 28e74f9dc78d..000000000000
--- a/test/pecoff/importlib.test
+++ /dev/null
@@ -1,55 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle .lib files. "main.obj" refers "var" and
-# "fn" defined in "vars.lib".
-#
-# RUN: yaml2obj %p/Inputs/vars-main-x86.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-objdump -d %t1.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t1.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:main /opt:noref \
-# RUN: /libpath:%p/Inputs -- %t.obj vars.lib
-# RUN: llvm-objdump -d %t2.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t2.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /entry:main /opt:noref \
-# RUN: /libpath:%p/Inputs /defaultlib:vars.lib -- %t.obj
-# RUN: llvm-objdump -d %t3.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t3.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: env LIB=%p/Inputs lld -flavor link /out:%t4.exe /subsystem:console \
-# RUN: /opt:noref /entry:main -- %t.obj vars.lib
-# RUN: llvm-objdump -d %t4.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t4.exe | FileCheck -check-prefix=IMPORT %s
-#
-# RUN: env LINK="/out:%t5.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj" lld -flavor link %p/Inputs/vars.lib
-# RUN: llvm-objdump -d %t5.exe | FileCheck -check-prefix=TEXT %s
-# RUN: llvm-readobj -coff-imports %t5.exe | FileCheck -check-prefix=IMPORT %s
-
-TEXT: Disassembly of section .text:
-TEXT-NEXT: .text:
-TEXT-NEXT: pushl %ebp
-TEXT-NEXT: movl %esp, %ebp
-TEXT-NEXT: pushl %esi
-TEXT-NEXT: calll *{{[0-9]+}}
-TEXT-NEXT: movl {{[0-9]+}}, %ecx
-TEXT-NEXT: movl (%ecx), %esi
-TEXT-NEXT: addl %eax, %esi
-TEXT-NEXT: calll *{{[0-9]+}}
-TEXT-NEXT: addl %esi, %eax
-TEXT-NEXT: popl %esi
-TEXT-NEXT: popl %ebp
-TEXT-NEXT: ret
-
-IMPORT: Import {
-IMPORT-NEXT: Name: vars.dll
-IMPORT-NEXT: ImportLookupTableRVA: 0x4000
-IMPORT-NEXT: ImportAddressTableRVA: 0x2000
-IMPORT-NEXT: Symbol: _name_with_underscore (0)
-IMPORT-NEXT: Symbol: fn (1)
-IMPORT-NEXT: Symbol: (1)
-IMPORT-NEXT: }
diff --git a/test/pecoff/include.test b/test/pecoff/include.test
deleted file mode 100644
index bee1f48bf1a7..000000000000
--- a/test/pecoff/include.test
+++ /dev/null
@@ -1,8 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe /include:sym1 /include:sym2 \
-# RUN: /subsystem:console -- %t.obj 2> %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK: Undefined symbol: <command line option /include>: sym1
-CHECK: Undefined symbol: <command line option /include>: sym2
diff --git a/test/pecoff/lib.test b/test/pecoff/lib.test
deleted file mode 100644
index f435c117bc46..000000000000
--- a/test/pecoff/lib.test
+++ /dev/null
@@ -1,15 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle a library file.
-#
-# RUN: yaml2obj %p/Inputs/main.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t.obj %p/Inputs/static.lib
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK-NEXT: .text:
-CHECK-NEXT: movl 4198400, %eax
-CHECK-NEXT: addl 4198404, %eax
-CHECK-NEXT: ret
diff --git a/test/pecoff/libarg.test b/test/pecoff/libarg.test
deleted file mode 100644
index 314f030c4fe0..000000000000
--- a/test/pecoff/libarg.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# REQUIRES: winlib
-#
-# If argv[1] == "/lib", link.exe morphs into lib.exe.
-#
-# RUN: lld -flavor link /lib >& %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK-NOT: unrecognized option '/lib'
-CHECK: usage: LIB
diff --git a/test/pecoff/localyimported.test b/test/pecoff/localyimported.test
deleted file mode 100644
index 52b32d7b80bd..000000000000
--- a/test/pecoff/localyimported.test
+++ /dev/null
@@ -1,15 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe /include:__imp__nosuchsym %t.obj \
-# RUN: >& %t.log
-# RUN: FileCheck -check-prefix=X86 %s < %t.log
-
-X86: Undefined symbol: __imp__nosuchsym: _nosuchsym
-
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t2.obj
-#
-# RUN: not lld -flavor link /out:%t2.exe /include:__imp__nosuchsym %t2.obj \
-# RUN: /machine:x64 >& %t2.log
-# RUN: FileCheck -check-prefix=X64 %s < %t2.log
-
-X64: Undefined symbol: __imp__nosuchsym: _nosuchsym
diff --git a/test/pecoff/long-section-name.test b/test/pecoff/long-section-name.test
deleted file mode 100644
index e6721c28302f..000000000000
--- a/test/pecoff/long-section-name.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start \
-# RUN: /merge:.text=.longsectionname -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Name: .longsectionname (2F 34 00 00 00 00 00 00)
diff --git a/test/pecoff/machinetype.test b/test/pecoff/machinetype.test
deleted file mode 100644
index 5d387f3b0393..000000000000
--- a/test/pecoff/machinetype.test
+++ /dev/null
@@ -1,13 +0,0 @@
-# RUN: yaml2obj %p/Inputs/machine-type-unknown.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/hello64.obj.yaml > %t3.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t1.obj %t2.obj
-# RUN: llvm-readobj %t.exe | FileCheck -check-prefix=X86 %s
-
-X86: Arch: i386
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t1.obj %t3.obj
-# RUN: llvm-readobj %t.exe | FileCheck -check-prefix=X64 %s
-
-X64: Arch: x86_64
diff --git a/test/pecoff/manifest.test b/test/pecoff/manifest.test
deleted file mode 100644
index 33229a45516b..000000000000
--- a/test/pecoff/manifest.test
+++ /dev/null
@@ -1,63 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force \
-# RUN: -- %t.obj
-# RUN: FileCheck -check-prefix=MANIFEST %s < %t1.exe.manifest
-
-MANIFEST: <?xml version="1.0" standalone="yes"?>
-MANIFEST: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-MANIFEST: manifestVersion="1.0">
-MANIFEST: <trustInfo>
-MANIFEST: <security>
-MANIFEST: <requestedPrivileges>
-MANIFEST: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
-MANIFEST: </requestedPrivileges>
-MANIFEST: </security>
-MANIFEST: </trustInfo>
-MANIFEST: </assembly>
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force \
-# RUN: /manifestuac:"level='requireAdministrator' uiAccess='true'" -- %t.obj
-# RUN: FileCheck -check-prefix=UAC %s < %t2.exe.manifest
-
-UAC: <?xml version="1.0" standalone="yes"?>
-UAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-UAC: manifestVersion="1.0">
-UAC: <trustInfo>
-UAC: <security>
-UAC: <requestedPrivileges>
-UAC: <requestedExecutionLevel level='requireAdministrator' uiAccess='true'/>
-UAC: </requestedPrivileges>
-UAC: </security>
-UAC: </trustInfo>
-UAC: </assembly>
-
-# RUN: lld -flavor link /out:%t3.exe /subsystem:console /force \
-# RUN: /manifestdependency:"foo='bar'" -- %t.obj
-# RUN: FileCheck -check-prefix=DEPENDENCY %s < %t3.exe.manifest
-
-DEPENDENCY: <?xml version="1.0" standalone="yes"?>
-DEPENDENCY: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-DEPENDENCY: manifestVersion="1.0">
-DEPENDENCY: <trustInfo>
-DEPENDENCY: <security>
-DEPENDENCY: <requestedPrivileges>
-DEPENDENCY: <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
-DEPENDENCY: </requestedPrivileges>
-DEPENDENCY: </security>
-DEPENDENCY: </trustInfo>
-DEPENDENCY: <dependency>
-DEPENDENCY: <dependentAssembly>
-DEPENDENCY: <assemblyIdentity foo='bar' />
-DEPENDENCY: </dependentAssembly>
-DEPENDENCY: </dependency>
-DEPENDENCY: </assembly>
-
-# RUN: lld -flavor link /out:%t4.exe /subsystem:console /force \
-# RUN: /manifestuac:no -- %t.obj
-# RUN: FileCheck -check-prefix=NOUAC %s < %t4.exe.manifest
-
-NOUAC: <?xml version="1.0" standalone="yes"?>
-NOUAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
-NOUAC: manifestVersion="1.0">
-NOUAC: </assembly>
diff --git a/test/pecoff/merge-largest.test b/test/pecoff/merge-largest.test
deleted file mode 100644
index c3ee96ca9c53..000000000000
--- a/test/pecoff/merge-largest.test
+++ /dev/null
@@ -1,24 +0,0 @@
-# RUN: yaml2obj %p/Inputs/merge-largest1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/merge-largest2.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj 2>&1 > %t.log
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t.log
-# RUN: FileCheck -check-prefix=STDERR %s < %t.log
-#
-# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=READOBJ %s
-
-STDERR-NOT: duplicate symbol error
-
-READOBJ: Format: COFF-i386
-READOBJ-NEXT: Arch: i386
-READOBJ-NEXT: AddressSize: 32bit
-READOBJ-NEXT: Sections [
-READOBJ-NEXT: Section {
-READOBJ-NEXT: Number: 1
-READOBJ-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-READOBJ-NEXT: VirtualSize: 0x8
-READOBJ-NEXT: VirtualAddress: 0x1000
-READOBJ-NEXT: RawDataSize: 512
diff --git a/test/pecoff/merge-same-size.test b/test/pecoff/merge-same-size.test
deleted file mode 100644
index c2918a2bc1a4..000000000000
--- a/test/pecoff/merge-same-size.test
+++ /dev/null
@@ -1,32 +0,0 @@
-# RUN: yaml2obj %p/Inputs/merge-same-size1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/merge-same-size2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/merge-same-size3.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t2.obj > %t1.log 2>&1
-#
-# FileCheck complains if the input files is empty, so add a dummy line.
-# RUN: echo foo >> %t1.log
-# RUN: FileCheck -check-prefix=SAMESIZE %s < %t1.log
-#
-# RUN: not lld -flavor link /out:%t.exe /subsystem:console /opt:noref /force \
-# RUN: -- %t1.obj %t3.obj > %t2.log 2>&1
-# RUN: FileCheck -check-prefix=DIFFERENT %s < %t2.log
-#
-# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=READOBJ %s
-
-SAMESIZE-NOT: duplicate symbol error
-
-DIFFERENT: Size mismatch
-DIFFERENT: duplicate symbol error
-
-READOBJ: Format: COFF-i386
-READOBJ-NEXT: Arch: i386
-READOBJ-NEXT: AddressSize: 32bit
-READOBJ-NEXT: Sections [
-READOBJ-NEXT: Section {
-READOBJ-NEXT: Number: 1
-READOBJ-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-READOBJ-NEXT: VirtualSize: 0x7
-READOBJ-NEXT: VirtualAddress: 0x1000
-READOBJ-NEXT: RawDataSize: 512
diff --git a/test/pecoff/multi.test b/test/pecoff/multi.test
deleted file mode 100644
index e0bfdba6dda4..000000000000
--- a/test/pecoff/multi.test
+++ /dev/null
@@ -1,17 +0,0 @@
-# REQUIRES: x86
-
-# Verify that lld can handle multiple input files.
-#
-# RUN: yaml2obj %p/Inputs/main.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/static-data1.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/static-data2.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main /opt:noref \
-# RUN: -- %t1.obj %t2.obj %t3.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK: .text:
-CHECK: movl {{[0-9]+}}, %eax
-CHECK: addl {{[0-9]+}}, %eax
-CHECK: ret
diff --git a/test/pecoff/noentry.test b/test/pecoff/noentry.test
deleted file mode 100644
index 55b326dd84cb..000000000000
--- a/test/pecoff/noentry.test
+++ /dev/null
@@ -1,10 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /noentry /dll -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: AddressOfEntryPoint: 0x0
-
-# RUN: not lld -flavor link /out:%t.exe /noentry -- %t.obj >& %t.log
-# RUN: FileCheck --check-prefix=ERROR %s < %t.log
-
-ERROR: /noentry must be specified with /dll
diff --git a/test/pecoff/nonstandard-sections.test b/test/pecoff/nonstandard-sections.test
deleted file mode 100644
index 2ca181629230..000000000000
--- a/test/pecoff/nonstandard-sections.test
+++ /dev/null
@@ -1,75 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Arch: i386
-CHECK-NEXT: AddressSize: 32bit
-CHECK-NEXT: Sections [
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 1
-CHECK-NEXT: Name: .bar (2E 62 61 72 00 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x400
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x40000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 2
-CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x600
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 3
-CHECK-NEXT: Name: .foo (2E 66 6F 6F 00 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x800
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 4
-CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x4000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0xA00
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x60000020)
-CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20)
-CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ]
diff --git a/test/pecoff/options.test b/test/pecoff/options.test
deleted file mode 100644
index 3aca2c9fcc91..000000000000
--- a/test/pecoff/options.test
+++ /dev/null
@@ -1,40 +0,0 @@
-# Tests for miscellaneous command line options.
-
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t-x86.obj
-# RUN: yaml2obj %p/Inputs/nop64.obj.yaml > %t-x64.obj
-
-# RUN: lld -flavor link /align:8192 /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ALIGN %s
-ALIGN: SectionAlignment: 8192
-
-# RUN: lld -flavor link /allowbind:no /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOBIND %s
-NOBIND: IMAGE_DLL_CHARACTERISTICS_NO_BIND
-
-# RUN: lld -flavor link /allowisolation:no /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOISO %s
-NOISO: IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION
-
-# RUN: lld -flavor link /swaprun:cd /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=RUNCD %s
-RUNCD: IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
-
-# RUN: lld -flavor link /swaprun:net /out:%t.exe /entry:start \
-# RUN: /subsystem:console -- %t-x86.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=RUNNET %s
-RUNNET: IMAGE_FILE_NET_RUN_FROM_SWAP
-
-# RUN: lld -flavor link /machine:x64 /force /highentropyva /out:%t.exe \
-# RUN: /entry:start /subsystem:console -- %t-x64.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=ENT %s
-ENT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-
-# RUN: lld -flavor link /machine:x64 /force /highentropyva:no /out:%t.exe \
-# RUN: /entry:start /subsystem:console -- %t-x64.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=NOENT %s
-NOENT-NOT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA
-
diff --git a/test/pecoff/pe32plus.test b/test/pecoff/pe32plus.test
deleted file mode 100644
index 1c64e184cbaf..000000000000
--- a/test/pecoff/pe32plus.test
+++ /dev/null
@@ -1,87 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nop64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start \
-# RUN: /machine:x64 -- %t.obj %p/Inputs/vars.lib
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: Format: COFF-x86-64
-CHECK-NEXT: Arch: x86_64
-CHECK-NEXT: AddressSize: 64bit
-CHECK-NEXT: ImageFileHeader {
-CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664)
-CHECK-NEXT: SectionCount: 5
-CHECK-NEXT: TimeDateStamp:
-CHECK-NEXT: PointerToSymbolTable: 0x0
-CHECK-NEXT: SymbolCount: 0
-CHECK-NEXT: OptionalHeaderSize: 240
-CHECK-NEXT: Characteristics [ (0x22)
-CHECK-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
-CHECK-NEXT: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ImageOptionalHeader {
-CHECK-NEXT: MajorLinkerVersion: 0
-CHECK-NEXT: MinorLinkerVersion: 0
-CHECK-NEXT: SizeOfCode: 512
-CHECK-NEXT: SizeOfInitializedData: 2048
-CHECK-NEXT: SizeOfUninitializedData: 0
-CHECK-NEXT: AddressOfEntryPoint: 0x5000
-CHECK-NEXT: BaseOfCode: 0x5000
-CHECK-NEXT: ImageBase: 0x140000000
-CHECK-NEXT: SectionAlignment: 4096
-CHECK-NEXT: FileAlignment: 512
-CHECK-NEXT: MajorOperatingSystemVersion: 6
-CHECK-NEXT: MinorOperatingSystemVersion: 0
-CHECK-NEXT: MajorImageVersion: 0
-CHECK-NEXT: MinorImageVersion: 0
-CHECK-NEXT: MajorSubsystemVersion: 6
-CHECK-NEXT: MinorSubsystemVersion: 0
-CHECK-NEXT: SizeOfImage: 24576
-CHECK-NEXT: SizeOfHeaders: 1024
-CHECK-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
-CHECK-NEXT: Characteristics [ (0x8160)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA (0x20)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100)
-CHECK-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000)
-CHECK-NEXT: ]
-CHECK-NEXT: SizeOfStackReserve: 1048576
-CHECK-NEXT: SizeOfStackCommit: 4096
-CHECK-NEXT: SizeOfHeapReserve: 1048576
-CHECK-NEXT: SizeOfHeapCommit: 4096
-CHECK-NEXT: NumberOfRvaAndSize: 16
-CHECK-NEXT: DataDirectory {
-CHECK-NEXT: ExportTableRVA: 0x0
-CHECK-NEXT: ExportTableSize: 0x0
-CHECK-NEXT: ImportTableRVA: 0x3000
-CHECK-NEXT: ImportTableSize: 0x28
-CHECK-NEXT: ResourceTableRVA: 0x0
-CHECK-NEXT: ResourceTableSize: 0x0
-CHECK-NEXT: ExceptionTableRVA: 0x0
-CHECK-NEXT: ExceptionTableSize: 0x0
-CHECK-NEXT: CertificateTableRVA: 0x0
-CHECK-NEXT: CertificateTableSize: 0x0
-CHECK-NEXT: BaseRelocationTableRVA: 0x0
-CHECK-NEXT: BaseRelocationTableSize: 0x0
-CHECK-NEXT: DebugRVA: 0x0
-CHECK-NEXT: DebugSize: 0x0
-CHECK-NEXT: ArchitectureRVA: 0x0
-CHECK-NEXT: ArchitectureSize: 0x0
-CHECK-NEXT: GlobalPtrRVA: 0x0
-CHECK-NEXT: GlobalPtrSize: 0x0
-CHECK-NEXT: TLSTableRVA: 0x0
-CHECK-NEXT: TLSTableSize: 0x0
-CHECK-NEXT: LoadConfigTableRVA: 0x0
-CHECK-NEXT: LoadConfigTableSize: 0x0
-CHECK-NEXT: BoundImportRVA: 0x0
-CHECK-NEXT: BoundImportSize: 0x0
-CHECK-NEXT: IATRVA: 0x2000
-CHECK-NEXT: IATSize: 0x10
-CHECK-NEXT: DelayImportDescriptorRVA: 0x0
-CHECK-NEXT: DelayImportDescriptorSize: 0x0
-CHECK-NEXT: CLRRuntimeHeaderRVA: 0x0
-CHECK-NEXT: CLRRuntimeHeaderSize: 0x0
-CHECK-NEXT: ReservedRVA: 0x0
-CHECK-NEXT: ReservedSize: 0x0
-CHECK-NEXT: }
-CHECK-NEXT: }
diff --git a/test/pecoff/reloc.test b/test/pecoff/reloc.test
deleted file mode 100644
index 5a969e9beaa0..000000000000
--- a/test/pecoff/reloc.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/reloc.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/abs.obj.yaml > %t2.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /opt:noref \
-# RUN: -- %t1.obj %t2.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: .text:
-CHECK: 3000: 68 02 00 00 00
-CHECK: 3005: 68 05 00 00 00
-CHECK: 300a: 68 00 10 40 00
-CHECK: 300f: 68 00 10 40 00
-CHECK: 3014: 68 00 20 40 00
-CHECK: 3019: 68 ef be ad de
diff --git a/test/pecoff/reloc64.test b/test/pecoff/reloc64.test
deleted file mode 100644
index fc38bff03275..000000000000
--- a/test/pecoff/reloc64.test
+++ /dev/null
@@ -1,20 +0,0 @@
-# REQUIRES: x86
-
-# RUN: yaml2obj %p/Inputs/reloc64.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /machine:x64 \
-# RUN: /entry:entry -- %t.obj
-# RUN: llvm-objdump -d %t.exe | FileCheck %s
-
-CHECK: Disassembly of section .text:
-CHECK-NEXT: .text:
-CHECK-NEXT: 1000: 48 b8 28 10 00 40 01 00 00 ff
-CHECK-NEXT: 100a: e8 19 00 00 ff
-CHECK-NEXT: 100f: e8 13 00 00 ff
-CHECK-NEXT: 1014: e8 0d 00 00 ff
-CHECK-NEXT: 1019: e8 07 00 00 ff
-CHECK-NEXT: 101e: e8 01 00 00 ff
-CHECK-NEXT: 1023: e8 fb ff ff fe
-CHECK-NEXT: 1028: e8 01 00 00 ff
-CHECK-NEXT: 102d: e8 28 00 00 ff
-CHECK-NEXT: 1032: c3
diff --git a/test/pecoff/resource.test b/test/pecoff/resource.test
deleted file mode 100644
index 8cdc9a5bf83f..000000000000
--- a/test/pecoff/resource.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# REQUIRES: winres
-
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start /opt:noref \
-# RUN: -- %t.obj %p/Inputs/resource.res
-
-# Check if the binary contains UTF-16LE string "Hello" copied from resource.res.
-# RUN: cat %t.exe | grep 'H.e.l.l.o'
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start /opt:noref \
-# RUN: /manifest:embed -- %t.obj %p/Inputs/resource.res
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
-
-CHECK: ResourceTableRVA: 0x1000
-CHECK: ResourceTableSize: 0x208
diff --git a/test/pecoff/responsefile.test b/test/pecoff/responsefile.test
deleted file mode 100644
index 6a5da298e730..000000000000
--- a/test/pecoff/responsefile.test
+++ /dev/null
@@ -1,7 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t.obj
-# RUN: not lld -flavor link /verbose @%p/Inputs/responsefile.txt >& %t.log
-# RUN: FileCheck %s < %t.log
-
-CHECK: warning: ignoring unknown argument: -foo
-CHECK: warning: ignoring unknown argument: -bar\baz
-Command line: link /verbose -foo -bar\baz
diff --git a/test/pecoff/safeseh.test b/test/pecoff/safeseh.test
deleted file mode 100644
index 78b1b0b53ac1..000000000000
--- a/test/pecoff/safeseh.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# "hello.obj" does not have the symbol "@feat.00", so it's not
-# compatible with SEH.
-
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t1.obj
-# RUN: not lld -flavor link /safeseh /out:%t1.exe /subsystem:console \
-# RUN: -- %t1.obj 2> %t1.err
-# RUN: FileCheck -check-prefix=INCOMPAT %s < %t1.err
-
-INCOMPAT: /SAFESEH is specified, but {{.*}} is not compatible with SEH.
diff --git a/test/pecoff/secrel.test b/test/pecoff/secrel.test
deleted file mode 100644
index 05014c47af48..000000000000
--- a/test/pecoff/secrel.test
+++ /dev/null
@@ -1,16 +0,0 @@
-# RUN: yaml2obj %p/Inputs/secrel1.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/secrel2.obj.yaml > %t2.obj
-# RUN: yaml2obj %p/Inputs/secrel2.obj.yaml > %t3.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:main \
-# RUN: -- %t1.obj %t2.obj %t3.obj
-# RUN: llvm-objdump -s %t.exe | FileCheck %s
-
-CHECK: Contents of section .data:
-CHECK: 1000 00000000 00000000 00000000 00000000
-CHECK: 1010 10000000 00000000 00000000 00000000
-CHECK: 1020 20000000 00000000 00000000 00000000
-CHECK: Contents of section .data2:
-CHECK: 2000 00000000 00000000 00000000 00000000
-CHECK: 2010 10000000 00000000 00000000 00000000
-CHECK: 2020 20000000 00000000 00000000 00000000
diff --git a/test/pecoff/section-attribute.test b/test/pecoff/section-attribute.test
deleted file mode 100644
index a5e71625df99..000000000000
--- a/test/pecoff/section-attribute.test
+++ /dev/null
@@ -1,45 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /section:.foo,d /section:.bar,rw /section:.text,rwe -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Sections [
-CHECK: Section {
-CHECK: Number: 1
-CHECK: Name: .bar (2E 62 61 72 00 00 00 00)
-CHECK: Characteristics [ (0xC0000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 2
-CHECK: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK: Characteristics [ (0xC0000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 3
-CHECK: Name: .foo (2E 66 6F 6F 00 00 00 00)
-CHECK: Characteristics [ (0xC2000040)
-CHECK: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: Section {
-CHECK: Number: 4
-CHECK: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK: Characteristics [ (0xE0000020)
-CHECK: IMAGE_SCN_CNT_CODE (0x20)
-CHECK: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK: ]
-CHECK: }
-CHECK: ]
diff --git a/test/pecoff/section-renaming.test b/test/pecoff/section-renaming.test
deleted file mode 100644
index d4fc154693af..000000000000
--- a/test/pecoff/section-renaming.test
+++ /dev/null
@@ -1,61 +0,0 @@
-# RUN: yaml2obj %p/Inputs/nonstandard-sections.obj.yaml > %t.obj
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force \
-# RUN: /merge:.foo=.hoge /merge:.bar=.text -- %t.obj
-# RUN: llvm-readobj -sections %t.exe | FileCheck %s
-
-CHECK: Format: COFF-i386
-CHECK-NEXT: Arch: i386
-CHECK-NEXT: AddressSize: 32bit
-CHECK-NEXT: Sections [
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 1
-CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x200
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 2
-CHECK-NEXT: Name: .hoge (2E 68 6F 67 65 00 00 00)
-CHECK-NEXT: VirtualSize: 0x4
-CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x400
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0xC0000040)
-CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: Section {
-CHECK-NEXT: Number: 3
-CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-CHECK-NEXT: VirtualSize: 0x8
-CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
-CHECK-NEXT: PointerToRawData: 0x600
-CHECK-NEXT: PointerToRelocations: 0x0
-CHECK-NEXT: PointerToLineNumbers: 0x0
-CHECK-NEXT: RelocationCount: 0
-CHECK-NEXT: LineNumberCount: 0
-CHECK-NEXT: Characteristics [ (0x60000020)
-CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20)
-CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000)
-CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000)
-CHECK-NEXT: ]
-CHECK-NEXT: }
-CHECK-NEXT: ]
diff --git a/test/pecoff/seh.test b/test/pecoff/seh.test
deleted file mode 100644
index c563dc3f31e0..000000000000
--- a/test/pecoff/seh.test
+++ /dev/null
@@ -1,31 +0,0 @@
-# RUN: yaml2obj %p/Inputs/seh.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /nodefaultlib \
-# RUN: -- %t.obj
-# RUN: llvm-objdump -private-headers %t.exe | FileCheck %s
-
-CHECK: Load configuration:
-CHECK: Timestamp: 0
-CHECK: Major Version: 0
-CHECK: Minor Version: 0
-CHECK: GlobalFlags Clear: 0
-CHECK: GlobalFlags Set: 0
-CHECK: Critical Section Default Timeout: 0
-CHECK: Decommit Free Block Threshold: 0
-CHECK: Decommit Total Free Threshold: 0
-CHECK: Lock Prefix Table: 0
-CHECK: Maximum Allocation Size: 0
-CHECK: Virtual Memory Threshold: 0
-CHECK: Process Affinity Mask: 0
-CHECK: Process Heap Flags: 0
-CHECK: CSD Version: 0
-CHECK: Security Cookie: 0
-CHECK: SEH Table: 4206592
-CHECK: SEH Count: 2
-CHECK: SEH Table: 0x{{[0-9a-f]+}} 0x{{[0-9a-f]+}}
-
-# RUN: lld -flavor link /out:%t.exe /subsystem:console /force /nodefaultlib \
-# RUN: /safeseh:no -- %t.obj
-# RUN: llvm-objdump -private-headers %t.exe | FileCheck -check-prefix=NOSEH %s
-
-NOSEH-NOT: SEH Table:
diff --git a/test/pecoff/seh64.test b/test/pecoff/seh64.test
deleted file mode 100644
index 664ec29e5258..000000000000
--- a/test/pecoff/seh64.test
+++ /dev/null
@@ -1,57 +0,0 @@
-# RUN: yaml2obj %p/Inputs/unwind.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /machine:x64 /out:%t.exe /subsystem:console /force \
-# RUN: /nodefaultlib -- %t.obj
-# RUN: llvm-readobj -file-headers %t.exe | FileCheck -check-prefix=HEADER %s
-# RUN: llvm-objdump -unwind-info %t.exe | FileCheck -check-prefix=UNWIND %s
-
-HEADER: ExceptionTableRVA: 0x1000
-
-UNWIND: Function Table:
-UNWIND: Start Address: 0x2000
-UNWIND: End Address: 0x201b
-UNWIND: Unwind Info Address: 0x3000
-UNWIND: Version: 1
-UNWIND: Flags: 1 UNW_ExceptionHandler
-UNWIND: Size of prolog: 18
-UNWIND: Number of Codes: 8
-UNWIND: Frame register: RBX
-UNWIND: Frame offset: 0
-UNWIND: Unwind Codes:
-UNWIND: 0x12: UOP_SetFPReg
-UNWIND: 0x0f: UOP_PushNonVol RBX
-UNWIND: 0x0e: UOP_SaveXMM128 XMM8 [0x0000]
-UNWIND: 0x09: UOP_SaveNonVol RSI [0x0010]
-UNWIND: 0x04: UOP_AllocSmall 24
-UNWIND: 0x00: UOP_PushMachFrame w/o error code
-UNWIND: Function Table:
-UNWIND: Start Address: 0x2012
-UNWIND: End Address: 0x2012
-UNWIND: Unwind Info Address: 0x301c
-UNWIND: Version: 1
-UNWIND: Flags: 4 UNW_ChainInfo
-UNWIND: Size of prolog: 0
-UNWIND: Number of Codes: 0
-UNWIND: No frame pointer used
-UNWIND: Function Table:
-UNWIND: Start Address: 0x201b
-UNWIND: End Address: 0x201c
-UNWIND: Unwind Info Address: 0x302c
-UNWIND: Version: 1
-UNWIND: Flags: 0
-UNWIND: Size of prolog: 0
-UNWIND: Number of Codes: 0
-UNWIND: No frame pointer used
-UNWIND: Function Table:
-UNWIND: Start Address: 0x201c
-UNWIND: End Address: 0x2039
-UNWIND: Unwind Info Address: 0x3034
-UNWIND: Version: 1
-UNWIND: Flags: 0
-UNWIND: Size of prolog: 14
-UNWIND: Number of Codes: 6
-UNWIND: No frame pointer used
-UNWIND: Unwind Codes:
-UNWIND: 0x0e: UOP_AllocLarge 8454128
-UNWIND: 0x07: UOP_AllocLarge 8190
-UNWIND: 0x00: UOP_PushMachFrame w/o error code
diff --git a/test/pecoff/subsystem.test b/test/pecoff/subsystem.test
deleted file mode 100644
index 3ed3572bf231..000000000000
--- a/test/pecoff/subsystem.test
+++ /dev/null
@@ -1,12 +0,0 @@
-# RUN: yaml2obj %p/Inputs/subsystem.main.yaml > %t.main.obj
-# RUN: yaml2obj %p/Inputs/subsystem.winmain.yaml > %t.winmain.obj
-#
-# RUN: lld -flavor link /out:%t.main.exe -- %t.main.obj
-# RUN: llvm-readobj -file-headers %t.main.exe | FileCheck -check-prefix=MAIN %s
-#
-# RUN: lld -flavor link /out:%t.winmain.exe -- %t.winmain.obj
-# RUN: llvm-readobj -file-headers %t.winmain.exe | \
-# RUN: FileCheck -check-prefix=WINMAIN %s
-
-MAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
-WINMAIN: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
diff --git a/test/pecoff/tls.test b/test/pecoff/tls.test
deleted file mode 100644
index 7e400ff60a0b..000000000000
--- a/test/pecoff/tls.test
+++ /dev/null
@@ -1,14 +0,0 @@
-# RUN: yaml2obj %p/Inputs/hello.obj.yaml > %t1.obj
-# RUN: yaml2obj %p/Inputs/tlsused.obj.yaml > %t2.obj
-
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console /force -- %t1.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=NOTLS %s
-
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /force -- %t1.obj %t2.obj
-# RUN: llvm-readobj -file-headers %t2.exe | FileCheck -check-prefix=TLS %s
-
-NOTLS: TLSTableRVA: 0x0
-NOTLS: TLSTableSize: 0x0
-
-TLS: TLSTableRVA: 0x1014
-TLS: TLSTableSize: 0x18
diff --git a/test/pecoff/trivial.test b/test/pecoff/trivial.test
deleted file mode 100644
index b1960f632813..000000000000
--- a/test/pecoff/trivial.test
+++ /dev/null
@@ -1,103 +0,0 @@
-# Checks functionality of PECOFF writer. "nop.obj" is an object that has only
-# text section. Other data, including data sections, relocations, symbol
-# tables are not present in nop.obj.
-#
-# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
-#
-# RUN: lld -flavor link /out:%t1.exe /subsystem:console,3.11 /version:1.25 \
-# RUN: /entry:start /opt:noref -- %t.obj
-# RUN: llvm-readobj -file-headers %t1.exe | FileCheck -check-prefix=FILE %s
-#
-# RUN: lld -flavor link /out:%t2.exe /subsystem:console /entry:start \
-# RUN: /opt:noref -- %t.obj
-# RUN: llvm-readobj -sections %t2.exe | FileCheck -check-prefix=SECTIONS %s
-
-FILE: Format: COFF-i386
-FILE-NEXT: Arch: i386
-FILE-NEXT: AddressSize: 32bit
-FILE-NEXT: ImageFileHeader {
-FILE-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C)
-FILE-NEXT: SectionCount: 1
-FILE-NEXT: TimeDateStamp:
-FILE-NEXT: PointerToSymbolTable: 0x0
-FILE-NEXT: SymbolCount: 0
-FILE-NEXT: OptionalHeaderSize: 224
-FILE-NEXT: Characteristics [ (0x102)
-FILE-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100)
-FILE-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2)
-FILE-NEXT: ]
-FILE-NEXT: }
-FILE-NEXT: ImageOptionalHeader {
-FILE-NEXT: MajorLinkerVersion: 0
-FILE-NEXT: MinorLinkerVersion: 0
-FILE-NEXT: SizeOfCode: 512
-FILE-NEXT: SizeOfInitializedData: 0
-FILE-NEXT: SizeOfUninitializedData: 0
-FILE-NEXT: AddressOfEntryPoint: 0x1000
-FILE-NEXT: BaseOfCode: 0x1000
-FILE-NEXT: BaseOfData: 0
-FILE-NEXT: ImageBase: 0x400000
-FILE-NEXT: SectionAlignment: 4096
-FILE-NEXT: FileAlignment: 512
-FILE-NEXT: MajorOperatingSystemVersion: 3
-FILE-NEXT: MinorOperatingSystemVersion: 11
-FILE-NEXT: MajorImageVersion: 1
-FILE-NEXT: MinorImageVersion: 25
-FILE-NEXT: MajorSubsystemVersion: 3
-FILE-NEXT: MinorSubsystemVersion: 11
-FILE-NEXT: SizeOfImage: 8192
-FILE-NEXT: SizeOfHeaders: 512
-FILE-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3)
-FILE-NEXT: Characteristics [ (0x8540)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_NO_SEH (0x400)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100)
-FILE-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000)
-FILE-NEXT: ]
-FILE-NEXT: SizeOfStackReserve: 1048576
-FILE-NEXT: SizeOfStackCommit: 4096
-FILE-NEXT: SizeOfHeapReserve: 1048576
-FILE-NEXT: SizeOfHeapCommit: 4096
-FILE-NEXT: NumberOfRvaAndSize: 16
-FILE: DOSHeader {
-FILE-NEXT: Magic: MZ
-FILE-NEXT: UsedBytesInTheLastPage: 0
-FILE-NEXT: FileSizeInPages: 0
-FILE-NEXT: NumberOfRelocationItems: 0
-FILE-NEXT: HeaderSizeInParagraphs: 0
-FILE-NEXT: MinimumExtraParagraphs: 0
-FILE-NEXT: MaximumExtraParagraphs: 0
-FILE-NEXT: InitialRelativeSS: 0
-FILE-NEXT: InitialSP: 0
-FILE-NEXT: Checksum: 0
-FILE-NEXT: InitialIP: 0
-FILE-NEXT: InitialRelativeCS: 0
-FILE-NEXT: AddressOfRelocationTable: 64
-FILE-NEXT: OverlayNumber: 0
-FILE-NEXT: OEMid: 0
-FILE-NEXT: OEMinfo: 0
-FILE-NEXT: AddressOfNewExeHeader: 128
-FILE-NEXT: }
-
-SECTIONS: Format: COFF-i386
-SECTIONS-NEXT: Arch: i386
-SECTIONS-NEXT: AddressSize: 32bit
-SECTIONS-NEXT: Sections [
-SECTIONS-NEXT: Section {
-SECTIONS-NEXT: Number: 1
-SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
-SECTIONS-NEXT: VirtualSize: 0x6
-SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
-SECTIONS-NEXT: PointerToRawData: 0x200
-SECTIONS-NEXT: PointerToRelocations: 0x0
-SECTIONS-NEXT: PointerToLineNumbers: 0x0
-SECTIONS-NEXT: RelocationCount: 0
-SECTIONS-NEXT: LineNumberCount: 0
-SECTIONS-NEXT: Characteristics [
-SECTIONS-NEXT: IMAGE_SCN_CNT_CODE
-SECTIONS-NEXT: IMAGE_SCN_MEM_EXECUTE
-SECTIONS-NEXT: IMAGE_SCN_MEM_READ
-SECTIONS-NEXT: ]
-SECTIONS-NEXT: }
-SECTIONS-NEXT: ]
diff --git a/test/pecoff/unknown-drectve.test b/test/pecoff/unknown-drectve.test
deleted file mode 100644
index 2c687c5d9163..000000000000
--- a/test/pecoff/unknown-drectve.test
+++ /dev/null
@@ -1,6 +0,0 @@
-# RUN: yaml2obj %p/Inputs/unknown-drectve.obj.yaml > %t.obj
-#
-# RUN: not lld -flavor link /out:%t.exe -- %t.obj >& %t.log
-# RUN: FileCheck -check-prefix=ERROR %s < %t.log
-
-ERROR: Cannot open /nosuchoption:foobar
diff --git a/test/pecoff/weak-external.test b/test/pecoff/weak-external.test
deleted file mode 100644
index ff7492dcfd5e..000000000000
--- a/test/pecoff/weak-external.test
+++ /dev/null
@@ -1,9 +0,0 @@
-# RUN: yaml2obj %p/Inputs/weak-externals.obj.yaml > %t.obj
-
-# RUN: lld -flavor link /force /out:%t.exe /subsystem:console \
-# RUN: /entry:fn -- %t.obj %p/Inputs/static.lib 2> %t2.log
-# RUN: FileCheck %s < %t2.log
-
-CHECK: _no_such_symbol1
-CHECK-NOT: _no_such_symbol2
-CHECK: _no_such_symbol3