diff options
Diffstat (limited to 'test')
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 Binary files differnew file mode 100644 index 000000000000..90c1ce4aa4cf --- /dev/null +++ b/test/COFF/Inputs/hello64.obj 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 Binary files differnew file mode 100644 index 000000000000..f3c722ad0746 --- /dev/null +++ b/test/COFF/Inputs/imports-mangle.lib 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 Binary files differindex 2f4207d7983d..2f4207d7983d 100755 --- a/test/pecoff/Inputs/library.lib +++ b/test/COFF/Inputs/library.lib 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 Binary files differindex f1c799fbbb08..f1c799fbbb08 100755..100644 --- a/test/pecoff/Inputs/resource.res +++ b/test/COFF/Inputs/resource.res diff --git a/test/COFF/Inputs/ret42.lib b/test/COFF/Inputs/ret42.lib Binary files differnew file mode 100644 index 000000000000..f60a9cdf6f90 --- /dev/null +++ b/test/COFF/Inputs/ret42.lib diff --git a/test/COFF/Inputs/ret42.obj b/test/COFF/Inputs/ret42.obj Binary files differnew file mode 100644 index 000000000000..1765f0e7c36e --- /dev/null +++ b/test/COFF/Inputs/ret42.obj 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 Binary files differnew file mode 100644 index 000000000000..7401ff3faf9e --- /dev/null +++ b/test/COFF/Inputs/std32.lib diff --git a/test/COFF/Inputs/std64.lib b/test/COFF/Inputs/std64.lib Binary files differnew file mode 100644 index 000000000000..bbd223c59f40 --- /dev/null +++ b/test/COFF/Inputs/std64.lib 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 Binary files differnew file mode 100644 index 000000000000..040addf04f4e --- /dev/null +++ b/test/ELF/Inputs/discard-merge-unnamed.o 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 Binary files differnew file mode 100644 index 000000000000..61b5af9b456c --- /dev/null +++ b/test/ELF/Inputs/invalid-binding.elf diff --git a/test/ELF/Inputs/invalid-data-encoding.a b/test/ELF/Inputs/invalid-data-encoding.a Binary files differnew file mode 100644 index 000000000000..ff2b37318c1e --- /dev/null +++ b/test/ELF/Inputs/invalid-data-encoding.a diff --git a/test/ELF/Inputs/invalid-file-class.a b/test/ELF/Inputs/invalid-file-class.a Binary files differnew file mode 100644 index 000000000000..f0ce607b4fdc --- /dev/null +++ b/test/ELF/Inputs/invalid-file-class.a diff --git a/test/ELF/Inputs/invalid-multiple-eh-relocs.elf b/test/ELF/Inputs/invalid-multiple-eh-relocs.elf Binary files differnew file mode 100644 index 000000000000..62914596256a --- /dev/null +++ b/test/ELF/Inputs/invalid-multiple-eh-relocs.elf diff --git a/test/ELF/Inputs/invalid-section-index.elf b/test/ELF/Inputs/invalid-section-index.elf Binary files differnew file mode 100644 index 000000000000..ec5adcf3b0b8 --- /dev/null +++ b/test/ELF/Inputs/invalid-section-index.elf diff --git a/test/ELF/Inputs/invalid-shentsize-zero.elf b/test/ELF/Inputs/invalid-shentsize-zero.elf Binary files differnew file mode 100644 index 000000000000..5fa7df245619 --- /dev/null +++ b/test/ELF/Inputs/invalid-shentsize-zero.elf diff --git a/test/ELF/Inputs/invalid-shstrndx.so b/test/ELF/Inputs/invalid-shstrndx.so Binary files differnew file mode 100755 index 000000000000..dc332b9292ea --- /dev/null +++ b/test/ELF/Inputs/invalid-shstrndx.so diff --git a/test/ELF/Inputs/invalid-symtab-sh_info.elf b/test/ELF/Inputs/invalid-symtab-sh_info.elf Binary files differnew file mode 100644 index 000000000000..aa63d582d757 --- /dev/null +++ b/test/ELF/Inputs/invalid-symtab-sh_info.elf 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 Binary files differindex 7368ba280d79..7368ba280d79 100644 --- a/test/elf/Inputs/stripped-empty.x86_64 +++ b/test/ELF/Inputs/no-symtab.o 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 Binary files differdeleted file mode 100644 index 2425c227fd42..000000000000 --- a/test/elf/Inputs/init_array.x86-64 +++ /dev/null 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 Binary files differindex 53e47ad37742..53e47ad37742 100644 --- a/test/elf/AArch64/Inputs/fn.o +++ b/test/old-elf/AArch64/Inputs/fn.o 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 Binary files differindex c75079b013fa..c75079b013fa 100644 --- a/test/elf/AArch64/Inputs/initfini-option.o +++ b/test/old-elf/AArch64/Inputs/initfini-option.o 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 Binary files differindex 030fe59878be..030fe59878be 100644 --- a/test/elf/AArch64/Inputs/initfini.o +++ b/test/old-elf/AArch64/Inputs/initfini.o 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 Binary files differindex 8c0f049da6a8..8c0f049da6a8 100644 --- a/test/elf/AArch64/Inputs/main.o +++ b/test/old-elf/AArch64/Inputs/main.o 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 Binary files differindex 36b41fdbf782..36b41fdbf782 100644 --- a/test/elf/AArch64/Inputs/no-interp-section.o +++ b/test/old-elf/AArch64/Inputs/no-interp-section.o diff --git a/test/elf/AArch64/Inputs/zerosizedsection.o b/test/old-elf/AArch64/Inputs/zerosizedsection.o Binary files differindex 10123fcef90d..10123fcef90d 100644 --- a/test/elf/AArch64/Inputs/zerosizedsection.o +++ b/test/old-elf/AArch64/Inputs/zerosizedsection.o 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 Binary files differnew file mode 100755 index 000000000000..51934714841b --- /dev/null +++ b/test/old-elf/ARM/Inputs/libfn.so diff --git a/test/old-elf/ARM/Inputs/libobj.so b/test/old-elf/ARM/Inputs/libobj.so Binary files differnew file mode 100755 index 000000000000..85b3ae4ca3d1 --- /dev/null +++ b/test/old-elf/ARM/Inputs/libobj.so 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 Binary files differindex 13d283cd0eff..13d283cd0eff 100644 --- a/test/elf/Hexagon/Inputs/dynobj-data.o +++ b/test/old-elf/Hexagon/Inputs/dynobj-data.o 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 Binary files differindex 6c184f2edd60..6c184f2edd60 100644 --- a/test/elf/Hexagon/Inputs/dynobj.o +++ b/test/old-elf/Hexagon/Inputs/dynobj.o 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 Binary files differindex e97678b739bd..e97678b739bd 100644 --- a/test/elf/Hexagon/Inputs/got-plt-order.o +++ b/test/old-elf/Hexagon/Inputs/got-plt-order.o diff --git a/test/elf/Hexagon/Inputs/libMaxAlignment.a b/test/old-elf/Hexagon/Inputs/libMaxAlignment.a Binary files differindex cc5461a09ae4..cc5461a09ae4 100644 --- a/test/elf/Hexagon/Inputs/libMaxAlignment.a +++ b/test/old-elf/Hexagon/Inputs/libMaxAlignment.a diff --git a/test/elf/Hexagon/Inputs/sda-base.o b/test/old-elf/Hexagon/Inputs/sda-base.o Binary files differindex 410a3d47d320..410a3d47d320 100644 --- a/test/elf/Hexagon/Inputs/sda-base.o +++ b/test/old-elf/Hexagon/Inputs/sda-base.o 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 Binary files differindex bf908fed27e9..bf908fed27e9 100644 --- a/test/elf/Hexagon/Inputs/sdata1.o +++ b/test/old-elf/Hexagon/Inputs/sdata1.o 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 Binary files differindex e4ec810866e5..e4ec810866e5 100644 --- a/test/elf/Hexagon/Inputs/sdata2.o +++ b/test/old-elf/Hexagon/Inputs/sdata2.o diff --git a/test/elf/Hexagon/Inputs/use-shared.hexagon b/test/old-elf/Hexagon/Inputs/use-shared.hexagon Binary files differindex 9e5ffb42d36a..9e5ffb42d36a 100644 --- a/test/elf/Hexagon/Inputs/use-shared.hexagon +++ b/test/old-elf/Hexagon/Inputs/use-shared.hexagon 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 Binary files differindex 8556c24da551..8556c24da551 100644 --- a/test/elf/Inputs/abs-test.i386 +++ b/test/old-elf/Inputs/abs-test.i386 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 Binary files differindex 467485f0bb96..467485f0bb96 100644 --- a/test/elf/Inputs/bar.o.x86-64 +++ b/test/old-elf/Inputs/bar.o.x86-64 diff --git a/test/elf/Inputs/branch-test.hexagon b/test/old-elf/Inputs/branch-test.hexagon Binary files differindex 1ffb47228e32..1ffb47228e32 100644 --- a/test/elf/Inputs/branch-test.hexagon +++ b/test/old-elf/Inputs/branch-test.hexagon diff --git a/test/elf/Inputs/branch-test.ppc b/test/old-elf/Inputs/branch-test.ppc Binary files differindex 4698941e7503..4698941e7503 100644 --- a/test/elf/Inputs/branch-test.ppc +++ b/test/old-elf/Inputs/branch-test.ppc 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 Binary files differindex 0087eb8f8cb5..0087eb8f8cb5 100644 --- a/test/elf/Inputs/constants-merge.x86-64 +++ b/test/old-elf/Inputs/constants-merge.x86-64 diff --git a/test/elf/Inputs/constdata.x86-64 b/test/old-elf/Inputs/constdata.x86-64 Binary files differindex d877a5535357..d877a5535357 100644 --- a/test/elf/Inputs/constdata.x86-64 +++ b/test/old-elf/Inputs/constdata.x86-64 diff --git a/test/elf/Inputs/foo.o.x86-64 b/test/old-elf/Inputs/foo.o.x86-64 Binary files differindex 72a89eefa8ed..72a89eefa8ed 100644 --- a/test/elf/Inputs/foo.o.x86-64 +++ b/test/old-elf/Inputs/foo.o.x86-64 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 Binary files differindex d8e266e76334..d8e266e76334 100644 --- a/test/elf/Inputs/globalconst.o.x86-64 +++ b/test/old-elf/Inputs/globalconst.o.x86-64 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 Binary files differindex f9c61d0edf15..f9c61d0edf15 100644 --- a/test/elf/Inputs/gotpcrel.x86-64 +++ b/test/old-elf/Inputs/gotpcrel.x86-64 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 Binary files differindex 20c812cabd2c..20c812cabd2c 100644 --- a/test/elf/Inputs/ifunc.cpp.x86-64 +++ b/test/old-elf/Inputs/ifunc.cpp.x86-64 diff --git a/test/elf/Inputs/ifunc.x86-64 b/test/old-elf/Inputs/ifunc.x86-64 Binary files differindex 36c8e04ca837..36c8e04ca837 100644 --- a/test/elf/Inputs/ifunc.x86-64 +++ b/test/old-elf/Inputs/ifunc.x86-64 diff --git a/test/elf/Inputs/libfnarchive.a b/test/old-elf/Inputs/libfnarchive.a Binary files differindex 753acd6e2c65..753acd6e2c65 100644 --- a/test/elf/Inputs/libfnarchive.a +++ b/test/old-elf/Inputs/libfnarchive.a diff --git a/test/elf/Inputs/libifunc.x86-64.so b/test/old-elf/Inputs/libifunc.x86-64.so Binary files differindex 0f05b308ce78..0f05b308ce78 100644 --- a/test/elf/Inputs/libifunc.x86-64.so +++ b/test/old-elf/Inputs/libifunc.x86-64.so diff --git a/test/elf/Inputs/libundef.so b/test/old-elf/Inputs/libundef.so Binary files differindex 41f2a668f360..41f2a668f360 100644 --- a/test/elf/Inputs/libundef.so +++ b/test/old-elf/Inputs/libundef.so diff --git a/test/elf/Inputs/libweaksym.so b/test/old-elf/Inputs/libweaksym.so Binary files differindex 7ff4ea56ae60..7ff4ea56ae60 100755 --- a/test/elf/Inputs/libweaksym.so +++ b/test/old-elf/Inputs/libweaksym.so 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 Binary files differindex d0f29418237d..d0f29418237d 100644 --- a/test/elf/Inputs/mainobj.x86_64 +++ b/test/old-elf/Inputs/mainobj.x86_64 diff --git a/test/old-elf/Inputs/no-unique-section-names.x86-64 b/test/old-elf/Inputs/no-unique-section-names.x86-64 Binary files differnew file mode 100644 index 000000000000..fd92f5f0c6e7 --- /dev/null +++ b/test/old-elf/Inputs/no-unique-section-names.x86-64 diff --git a/test/elf/Inputs/object-test.elf-hexagon b/test/old-elf/Inputs/object-test.elf-hexagon Binary files differindex bfc85a7d0b76..bfc85a7d0b76 100644 --- a/test/elf/Inputs/object-test.elf-hexagon +++ b/test/old-elf/Inputs/object-test.elf-hexagon diff --git a/test/elf/Inputs/object-test.elf-i386 b/test/old-elf/Inputs/object-test.elf-i386 Binary files differindex 872684c7fcc1..872684c7fcc1 100644 --- a/test/elf/Inputs/object-test.elf-i386 +++ b/test/old-elf/Inputs/object-test.elf-i386 diff --git a/test/elf/Inputs/phdr.i386 b/test/old-elf/Inputs/phdr.i386 Binary files differindex 7c83dd314891..7c83dd314891 100644 --- a/test/elf/Inputs/phdr.i386 +++ b/test/old-elf/Inputs/phdr.i386 diff --git a/test/elf/Inputs/quickdata-sort-test.o.elf-hexagon b/test/old-elf/Inputs/quickdata-sort-test.o.elf-hexagon Binary files differindex 03d028707129..03d028707129 100644 --- a/test/elf/Inputs/quickdata-sort-test.o.elf-hexagon +++ b/test/old-elf/Inputs/quickdata-sort-test.o.elf-hexagon diff --git a/test/elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon b/test/old-elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon Binary files differindex 410a3d47d320..410a3d47d320 100644 --- a/test/elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon +++ b/test/old-elf/Inputs/quickdata-sortcommon-test.o.elf-hexagon diff --git a/test/elf/Inputs/quickdata-test.elf-hexagon b/test/old-elf/Inputs/quickdata-test.elf-hexagon Binary files differindex c3ae53a6babe..c3ae53a6babe 100644 --- a/test/elf/Inputs/quickdata-test.elf-hexagon +++ b/test/old-elf/Inputs/quickdata-test.elf-hexagon diff --git a/test/elf/Inputs/reloc-test.elf-i386 b/test/old-elf/Inputs/reloc-test.elf-i386 Binary files differindex 1a5558131fff..1a5558131fff 100644 --- a/test/elf/Inputs/reloc-test.elf-i386 +++ b/test/old-elf/Inputs/reloc-test.elf-i386 diff --git a/test/elf/Inputs/reloc-xb.x86 b/test/old-elf/Inputs/reloc-xb.x86 Binary files differindex 4d9770aa2356..4d9770aa2356 100644 --- a/test/elf/Inputs/reloc-xb.x86 +++ b/test/old-elf/Inputs/reloc-xb.x86 diff --git a/test/elf/Inputs/reloc-xt.x86 b/test/old-elf/Inputs/reloc-xt.x86 Binary files differindex dcdfbfb09f71..dcdfbfb09f71 100644 --- a/test/elf/Inputs/reloc-xt.x86 +++ b/test/old-elf/Inputs/reloc-xt.x86 diff --git a/test/elf/Inputs/relocs-dynamic.x86-64 b/test/old-elf/Inputs/relocs-dynamic.x86-64 Binary files differindex 0c44924d18e6..0c44924d18e6 100644 --- a/test/elf/Inputs/relocs-dynamic.x86-64 +++ b/test/old-elf/Inputs/relocs-dynamic.x86-64 diff --git a/test/elf/Inputs/relocs.x86-64 b/test/old-elf/Inputs/relocs.x86-64 Binary files differindex 112dfa733db9..112dfa733db9 100644 --- a/test/elf/Inputs/relocs.x86-64 +++ b/test/old-elf/Inputs/relocs.x86-64 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 Binary files differindex f448748e2abe..f448748e2abe 100644 --- a/test/elf/Inputs/rodata-test.hexagon +++ b/test/old-elf/Inputs/rodata-test.hexagon diff --git a/test/elf/Inputs/rodata-test.i386 b/test/old-elf/Inputs/rodata-test.i386 Binary files differindex 09f71eb59969..09f71eb59969 100644 --- a/test/elf/Inputs/rodata-test.i386 +++ b/test/old-elf/Inputs/rodata-test.i386 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 Binary files differindex f13ddc9bba98..f13ddc9bba98 100644 --- a/test/elf/Inputs/rodata.o +++ b/test/old-elf/Inputs/rodata.o diff --git a/test/elf/Inputs/section-test.i386 b/test/old-elf/Inputs/section-test.i386 Binary files differindex 2b447a9f8f5b..2b447a9f8f5b 100644 --- a/test/elf/Inputs/section-test.i386 +++ b/test/old-elf/Inputs/section-test.i386 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 Binary files differindex 0240f0e67431..0240f0e67431 100644 --- a/test/elf/Inputs/shared.so-x86-64 +++ b/test/old-elf/Inputs/shared.so-x86-64 diff --git a/test/old-elf/Inputs/shndx.o-x86_64 b/test/old-elf/Inputs/shndx.o-x86_64 Binary files differnew file mode 100644 index 000000000000..9e3e5d8526d7 --- /dev/null +++ b/test/old-elf/Inputs/shndx.o-x86_64 diff --git a/test/old-elf/Inputs/stripped-empty.x86_64 b/test/old-elf/Inputs/stripped-empty.x86_64 Binary files differnew file mode 100644 index 000000000000..7368ba280d79 --- /dev/null +++ b/test/old-elf/Inputs/stripped-empty.x86_64 diff --git a/test/elf/Inputs/target-test.hexagon b/test/old-elf/Inputs/target-test.hexagon Binary files differindex 7da114561920..7da114561920 100644 --- a/test/elf/Inputs/target-test.hexagon +++ b/test/old-elf/Inputs/target-test.hexagon diff --git a/test/elf/Inputs/target-test.ppc b/test/old-elf/Inputs/target-test.ppc Binary files differindex 001be338c20d..001be338c20d 100644 --- a/test/elf/Inputs/target-test.ppc +++ b/test/old-elf/Inputs/target-test.ppc 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 Binary files differindex b420ce89b19b..b420ce89b19b 100644 --- a/test/elf/Inputs/tls.x86-64 +++ b/test/old-elf/Inputs/tls.x86-64 diff --git a/test/elf/Inputs/tlsAddr.x86-64 b/test/old-elf/Inputs/tlsAddr.x86-64 Binary files differindex 16cc9ab25abf..16cc9ab25abf 100644 --- a/test/elf/Inputs/tlsAddr.x86-64 +++ b/test/old-elf/Inputs/tlsAddr.x86-64 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 Binary files differindex 954916d59991..954916d59991 100644 --- a/test/elf/Inputs/undef-pc32.o +++ b/test/old-elf/Inputs/undef-pc32.o diff --git a/test/elf/Inputs/undef.o b/test/old-elf/Inputs/undef.o Binary files differindex 3c9b60c6ca33..3c9b60c6ca33 100644 --- a/test/elf/Inputs/undef.o +++ b/test/old-elf/Inputs/undef.o 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 Binary files differindex 7e223677b93f..7e223677b93f 100644 --- a/test/elf/Inputs/use-shared-32s.x86-64 +++ b/test/old-elf/Inputs/use-shared-32s.x86-64 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 Binary files differindex 25e1eb87a2b4..25e1eb87a2b4 100644 --- a/test/elf/Inputs/use-shared.x86-64 +++ b/test/old-elf/Inputs/use-shared.x86-64 diff --git a/test/elf/Inputs/weaksym.o b/test/old-elf/Inputs/weaksym.o Binary files differindex 010ce704a313..010ce704a313 100644 --- a/test/elf/Inputs/weaksym.o +++ b/test/old-elf/Inputs/weaksym.o diff --git a/test/elf/Inputs/writersyms.o b/test/old-elf/Inputs/writersyms.o Binary files differindex 7cd472d99d77..7cd472d99d77 100644 --- a/test/elf/Inputs/writersyms.o +++ b/test/old-elf/Inputs/writersyms.o 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 Binary files differindex 8324b73014d0..8324b73014d0 100644 --- a/test/elf/X86_64/Inputs/constint.o +++ b/test/old-elf/X86_64/Inputs/constint.o 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 Binary files differindex 914f5224b9a2..914f5224b9a2 100644 --- a/test/elf/X86_64/Inputs/debug0.x86-64 +++ b/test/old-elf/X86_64/Inputs/debug0.x86-64 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 Binary files differindex bfc81458a034..bfc81458a034 100644 --- a/test/elf/X86_64/Inputs/debug1.x86-64 +++ b/test/old-elf/X86_64/Inputs/debug1.x86-64 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 Binary files differindex 3019aa0ca27c..3019aa0ca27c 100644 --- a/test/elf/X86_64/Inputs/externtls.x86-64 +++ b/test/old-elf/X86_64/Inputs/externtls.x86-64 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 Binary files differindex 4b67d459dfdb..4b67d459dfdb 100644 --- a/test/elf/X86_64/Inputs/fn.o +++ b/test/old-elf/X86_64/Inputs/fn.o 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 Binary files differindex 743518eb0fa3..743518eb0fa3 100644 --- a/test/elf/X86_64/Inputs/group/1.o +++ b/test/old-elf/X86_64/Inputs/group/1.o 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 Binary files differindex 1134432449cd..1134432449cd 100644 --- a/test/elf/X86_64/Inputs/group/fn.o +++ b/test/old-elf/X86_64/Inputs/group/fn.o 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 Binary files differindex 2b02310003db..2b02310003db 100644 --- a/test/elf/X86_64/Inputs/group/fn1.o +++ b/test/old-elf/X86_64/Inputs/group/fn1.o 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 Binary files differindex fabec849a775..fabec849a775 100644 --- a/test/elf/X86_64/Inputs/group/fn2.o +++ b/test/old-elf/X86_64/Inputs/group/fn2.o 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 Binary files differindex c157c3babed9..c157c3babed9 100644 --- a/test/elf/X86_64/Inputs/group/libfn.a +++ b/test/old-elf/X86_64/Inputs/group/libfn.a diff --git a/test/elf/X86_64/Inputs/group/libfn.so b/test/old-elf/X86_64/Inputs/group/libfn.so Binary files differindex fcbd11fe5519..fcbd11fe5519 100755 --- a/test/elf/X86_64/Inputs/group/libfn.so +++ b/test/old-elf/X86_64/Inputs/group/libfn.so diff --git a/test/elf/X86_64/Inputs/group/libfn1.a b/test/old-elf/X86_64/Inputs/group/libfn1.a Binary files differindex 69b9c75b5d16..69b9c75b5d16 100644 --- a/test/elf/X86_64/Inputs/group/libfn1.a +++ b/test/old-elf/X86_64/Inputs/group/libfn1.a diff --git a/test/elf/X86_64/Inputs/group/libfn2.so b/test/old-elf/X86_64/Inputs/group/libfn2.so Binary files differindex 7ce867373910..7ce867373910 100755 --- a/test/elf/X86_64/Inputs/group/libfn2.so +++ b/test/old-elf/X86_64/Inputs/group/libfn2.so 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 Binary files differindex b1ba0557353c..b1ba0557353c 100644 --- a/test/elf/X86_64/Inputs/initfini-option.o +++ b/test/old-elf/X86_64/Inputs/initfini-option.o 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 Binary files differindex f0e55a90b8b6..f0e55a90b8b6 100644 --- a/test/elf/X86_64/Inputs/initfini.o +++ b/test/old-elf/X86_64/Inputs/initfini.o 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 Binary files differindex 377370ec2db2..377370ec2db2 100644 --- a/test/elf/X86_64/Inputs/largebss.o +++ b/test/old-elf/X86_64/Inputs/largebss.o 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 Binary files differindex 848a5b3321ac..848a5b3321ac 100644 --- a/test/elf/X86_64/Inputs/layoutpass/1.o +++ b/test/old-elf/X86_64/Inputs/layoutpass/1.o 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 Binary files differindex 4c5ef8679581..4c5ef8679581 100644 --- a/test/elf/X86_64/Inputs/layoutpass/2.o +++ b/test/old-elf/X86_64/Inputs/layoutpass/2.o 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 Binary files differindex 76ef76e97901..76ef76e97901 100644 --- a/test/elf/X86_64/Inputs/layoutpass/3.o +++ b/test/old-elf/X86_64/Inputs/layoutpass/3.o diff --git a/test/elf/X86_64/Inputs/layoutpass/lib2.a b/test/old-elf/X86_64/Inputs/layoutpass/lib2.a Binary files differindex 5f076c869817..5f076c869817 100644 --- a/test/elf/X86_64/Inputs/layoutpass/lib2.a +++ b/test/old-elf/X86_64/Inputs/layoutpass/lib2.a diff --git a/test/elf/X86_64/Inputs/libfn.a b/test/old-elf/X86_64/Inputs/libfn.a Binary files differindex 380844b0838d..380844b0838d 100644 --- a/test/elf/X86_64/Inputs/libfn.a +++ b/test/old-elf/X86_64/Inputs/libfn.a diff --git a/test/elf/X86_64/Inputs/libfn.so b/test/old-elf/X86_64/Inputs/libfn.so Binary files differindex dc02480aa690..dc02480aa690 100755 --- a/test/elf/X86_64/Inputs/libfn.so +++ b/test/old-elf/X86_64/Inputs/libfn.so 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 Binary files differindex ec8929f4b51d..ec8929f4b51d 100644 --- a/test/elf/X86_64/Inputs/main.o +++ b/test/old-elf/X86_64/Inputs/main.o 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 Binary files differindex e4c4d6037fdd..e4c4d6037fdd 100644 --- a/test/elf/X86_64/Inputs/multi-ovrd.o +++ b/test/old-elf/X86_64/Inputs/multi-ovrd.o 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 Binary files differindex d5677b699ac4..d5677b699ac4 100644 --- a/test/elf/X86_64/Inputs/multi-weak.o +++ b/test/old-elf/X86_64/Inputs/multi-weak.o diff --git a/test/elf/X86_64/Inputs/multiweaksyms.o b/test/old-elf/X86_64/Inputs/multiweaksyms.o Binary files differindex 5e2e54d66b0d..5e2e54d66b0d 100644 --- a/test/elf/X86_64/Inputs/multiweaksyms.o +++ b/test/old-elf/X86_64/Inputs/multiweaksyms.o 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 Binary files differindex af28e0ada8b3..af28e0ada8b3 100644 --- a/test/elf/X86_64/Inputs/nmagic.o +++ b/test/old-elf/X86_64/Inputs/nmagic.o 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 Binary files differindex 063eb3244f22..063eb3244f22 100644 --- a/test/elf/X86_64/Inputs/no-interp-section.o +++ b/test/old-elf/X86_64/Inputs/no-interp-section.o diff --git a/test/elf/X86_64/Inputs/note.o b/test/old-elf/X86_64/Inputs/note.o Binary files differindex d86b0cf85d19..d86b0cf85d19 100644 --- a/test/elf/X86_64/Inputs/note.o +++ b/test/old-elf/X86_64/Inputs/note.o 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 Binary files differindex 76f2486d2736..76f2486d2736 100644 --- a/test/elf/X86_64/Inputs/note_ro_rw.o +++ b/test/old-elf/X86_64/Inputs/note_ro_rw.o 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 Binary files differindex ea7353d94ed9..ea7353d94ed9 100644 --- a/test/elf/X86_64/Inputs/ovrd.o +++ b/test/old-elf/X86_64/Inputs/ovrd.o 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 Binary files differindex 660606cdc9c0..660606cdc9c0 100644 --- a/test/elf/X86_64/Inputs/rodata.o +++ b/test/old-elf/X86_64/Inputs/rodata.o 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 Binary files differindex 9fba51f07add..9fba51f07add 100644 --- a/test/elf/X86_64/Inputs/rwint.o +++ b/test/old-elf/X86_64/Inputs/rwint.o 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 Binary files differindex 599cf2cca563..599cf2cca563 100644 --- a/test/elf/X86_64/Inputs/sectionmap.o +++ b/test/old-elf/X86_64/Inputs/sectionmap.o 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 Binary files differindex 6b8ebf5b6ab0..6b8ebf5b6ab0 100644 --- a/test/elf/X86_64/Inputs/undefcpp.o +++ b/test/old-elf/X86_64/Inputs/undefcpp.o diff --git a/test/elf/X86_64/Inputs/weak-zero-sized.o b/test/old-elf/X86_64/Inputs/weak-zero-sized.o Binary files differindex 7c10c6a509ed..7c10c6a509ed 100644 --- a/test/elf/X86_64/Inputs/weak-zero-sized.o +++ b/test/old-elf/X86_64/Inputs/weak-zero-sized.o 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 Binary files differindex 41cc88a0c482..41cc88a0c482 100644 --- a/test/elf/X86_64/Inputs/weak.o +++ b/test/old-elf/X86_64/Inputs/weak.o 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 Binary files differindex a0f2f13a307a..a0f2f13a307a 100644 --- a/test/elf/X86_64/Inputs/zerosizedsection.o +++ b/test/old-elf/X86_64/Inputs/zerosizedsection.o 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 Binary files differdeleted file mode 100644 index 3c00dfeb830b..000000000000 --- a/test/pecoff/Inputs/bss.obj +++ /dev/null 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 Binary files differdeleted file mode 100644 index c295d1ff6d04..000000000000 --- a/test/pecoff/Inputs/drectve3.lib +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3109c32593ca..000000000000 --- a/test/pecoff/Inputs/hello64lib.lib +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5a631010e1d3..000000000000 --- a/test/pecoff/Inputs/static.lib +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2d3aa2af678e..000000000000 --- a/test/pecoff/Inputs/vars.lib +++ /dev/null diff --git a/test/pecoff/Inputs/vars64.lib b/test/pecoff/Inputs/vars64.lib Binary files differdeleted file mode 100644 index fb48c9ab141e..000000000000 --- a/test/pecoff/Inputs/vars64.lib +++ /dev/null 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 |