diff --git a/clang/test/Interpreter/Inputs/dynamic-library-test.cpp b/clang/test/Interpreter/Inputs/dynamic-library-test.cpp deleted file mode 100644 --- a/clang/test/Interpreter/Inputs/dynamic-library-test.cpp +++ /dev/null @@ -1,6 +0,0 @@ -int ultimate_answer = 0; - -int calculate_answer() { - ultimate_answer = 42; - return 5; -} diff --git a/clang/test/Interpreter/Inputs/libdynamic-library-test.yaml b/clang/test/Interpreter/Inputs/libdynamic-library-test.yaml new file mode 100644 --- /dev/null +++ b/clang/test/Interpreter/Inputs/libdynamic-library-test.yaml @@ -0,0 +1,433 @@ +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +ProgramHeaders: + - Type: PT_PHDR + Flags: [ PF_R ] + VAddr: 0x40 + Align: 0x8 + - Type: PT_LOAD + Flags: [ PF_R ] + FirstSec: .dynsym + LastSec: .eh_frame + Align: 0x1000 + - Type: PT_LOAD + Flags: [ PF_X, PF_R ] + FirstSec: .text + LastSec: .plt + VAddr: 0x1500 + Align: 0x1000 + - Type: PT_LOAD + Flags: [ PF_W, PF_R ] + FirstSec: .data.rel.ro + LastSec: .got + VAddr: 0x2630 + Align: 0x1000 + - Type: PT_LOAD + Flags: [ PF_W, PF_R ] + FirstSec: .data + LastSec: .bss + VAddr: 0x37F0 + Align: 0x1000 + - Type: PT_DYNAMIC + Flags: [ PF_W, PF_R ] + FirstSec: .dynamic + LastSec: .dynamic + VAddr: 0x2648 + Align: 0x8 + - Type: PT_GNU_RELRO + Flags: [ PF_R ] + FirstSec: .data.rel.ro + LastSec: .got + VAddr: 0x2630 + - Type: PT_GNU_EH_FRAME + Flags: [ PF_R ] + FirstSec: .eh_frame_hdr + LastSec: .eh_frame_hdr + VAddr: 0x4A0 + Align: 0x4 + - Type: PT_GNU_STACK + Flags: [ PF_W, PF_R ] + Align: 0x0 +Sections: + - Name: .dynsym + Type: SHT_DYNSYM + Flags: [ SHF_ALLOC ] + Address: 0x238 + Link: .dynstr + AddressAlign: 0x8 + - Name: .gnu.version + Type: SHT_GNU_versym + Flags: [ SHF_ALLOC ] + Address: 0x2E0 + Link: .dynsym + AddressAlign: 0x2 + Entries: [ 0, 1, 1, 1, 2, 1, 1 ] + - Name: .gnu.version_r + Type: SHT_GNU_verneed + Flags: [ SHF_ALLOC ] + Address: 0x2F0 + Link: .dynstr + AddressAlign: 0x4 + Dependencies: + - Version: 1 + File: libc.so.6 + Entries: + - Name: GLIBC_2.2.5 + Hash: 157882997 + Flags: 0 + Other: 2 + - Name: .gnu.hash + Type: SHT_GNU_HASH + Flags: [ SHF_ALLOC ] + Address: 0x310 + Link: .dynsym + AddressAlign: 0x8 + Header: + SymNdx: 0x5 + Shift2: 0x1A + BloomFilter: [ 0x200010001000008 ] + HashBuckets: [ 0x5 ] + HashValues: [ 0xA1434758, 0xCC33179 ] + - Name: .dynstr + Type: SHT_STRTAB + Flags: [ SHF_ALLOC ] + Address: 0x334 + AddressAlign: 0x1 + - Name: .rela.dyn + Type: SHT_RELA + Flags: [ SHF_ALLOC ] + Address: 0x3C8 + Link: .dynsym + AddressAlign: 0x8 + Relocations: + - Offset: 0x2630 + Type: R_X86_64_RELATIVE + Addend: 9776 + - Offset: 0x2638 + Type: R_X86_64_RELATIVE + Addend: 5488 + - Offset: 0x2640 + Type: R_X86_64_RELATIVE + Addend: 5552 + - Offset: 0x27C8 + Symbol: __gmon_start__ + Type: R_X86_64_GLOB_DAT + - Offset: 0x27D0 + Symbol: _ITM_deregisterTMCloneTable + Type: R_X86_64_GLOB_DAT + - Offset: 0x27D8 + Symbol: _ITM_registerTMCloneTable + Type: R_X86_64_GLOB_DAT + - Offset: 0x27E0 + Symbol: __cxa_finalize + Type: R_X86_64_GLOB_DAT + - Offset: 0x27E8 + Symbol: ultimate_answer + Type: R_X86_64_GLOB_DAT + - Name: .rela.plt + Type: SHT_RELA + Flags: [ SHF_ALLOC, SHF_INFO_LINK ] + Address: 0x488 + Link: .dynsym + AddressAlign: 0x8 + Info: .got.plt + Relocations: + - Offset: 0x3808 + Symbol: __cxa_finalize + Type: R_X86_64_JUMP_SLOT + - Name: .eh_frame_hdr + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x4A0 + AddressAlign: 0x4 + Content: 011B033B14000000010000002011000030000000 + - Name: .eh_frame + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x4B8 + AddressAlign: 0x8 + Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000E81000001800000000410E108602430D06530C070800000000000000 + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x1500 + AddressAlign: 0x10 + Content: 488D3DE9220000488D05E22200004839F87415488B05B61200004885C07409FFE00F1F8000000000C30F1F8000000000488D3DB9220000488D35B22200004829FE4889F048C1EE3F48C1F8034801C648D1FE7414488B057D1200004885C07408FFE0660F1F440000C30F1F8000000000F30F1EFA803D9522000000752B5548833D5A120000004889E5740C488D3D9E100000E889000000E864FFFFFFC6056D220000015DC30F1F00C30F1F8000000000F30F1EFAE977FFFFFFCCCCCCCCCCCCCC554889E5488B051D120000C7002A000000B8050000005DC3 + - Name: .init + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x15D8 + AddressAlign: 0x4 + Content: F30F1EFA4883EC08488B05E11100004885C07402FFD04883C408C3 + - Name: .fini + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x15F4 + AddressAlign: 0x4 + Content: F30F1EFA4883EC084883C408C3 + - Name: .plt + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x1610 + AddressAlign: 0x10 + Content: FF35E2210000FF25E42100000F1F4000FF25E22100006800000000E9E0FFFFFF + - Name: .data.rel.ro + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x2630 + AddressAlign: 0x8 + Content: '0000000000000000' + - Name: .fini_array + Type: SHT_FINI_ARRAY + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x2638 + AddressAlign: 0x8 + EntSize: 0x8 + Content: '0000000000000000' + - Name: .init_array + Type: SHT_INIT_ARRAY + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x2640 + AddressAlign: 0x8 + EntSize: 0x8 + Content: '0000000000000000' + - Name: .dynamic + Type: SHT_DYNAMIC + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x2648 + Link: .dynstr + AddressAlign: 0x8 + Entries: + - Tag: DT_NEEDED + Value: 0x7B + - Tag: DT_RELA + Value: 0x3C8 + - Tag: DT_RELASZ + Value: 0xC0 + - Tag: DT_RELAENT + Value: 0x18 + - Tag: DT_RELACOUNT + Value: 0x3 + - Tag: DT_JMPREL + Value: 0x488 + - Tag: DT_PLTRELSZ + Value: 0x18 + - Tag: DT_PLTGOT + Value: 0x37F0 + - Tag: DT_PLTREL + Value: 0x7 + - Tag: DT_SYMTAB + Value: 0x238 + - Tag: DT_SYMENT + Value: 0x18 + - Tag: DT_STRTAB + Value: 0x334 + - Tag: DT_STRSZ + Value: 0x91 + - Tag: DT_GNU_HASH + Value: 0x310 + - Tag: DT_INIT_ARRAY + Value: 0x2640 + - Tag: DT_INIT_ARRAYSZ + Value: 0x8 + - Tag: DT_FINI_ARRAY + Value: 0x2638 + - Tag: DT_FINI_ARRAYSZ + Value: 0x8 + - Tag: DT_INIT + Value: 0x15D8 + - Tag: DT_FINI + Value: 0x15F4 + - Tag: DT_VERSYM + Value: 0x2E0 + - Tag: DT_VERNEED + Value: 0x2F0 + - Tag: DT_VERNEEDNUM + Value: 0x1 + - Tag: DT_NULL + Value: 0x0 + - Name: .got + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x27C8 + AddressAlign: 0x8 + Content: '00000000000000000000000000000000000000000000000000000000000000000000000000000000' + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x37F0 + AddressAlign: 0x1 + - Name: .tm_clone_table + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x37F0 + AddressAlign: 0x8 + - Name: .got.plt + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x37F0 + AddressAlign: 0x8 + Content: '4826000000000000000000000000000000000000000000002616000000000000' + - Name: .bss + Type: SHT_NOBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x3810 + AddressAlign: 0x4 + Size: 0x8 + - Name: .gnu.build.attributes + Type: SHT_NOTE + AddressAlign: 0x4 + Notes: + - Name: "GA$\x013a1" + Desc: '00150000000000000015000000000000' + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: D815000000000000EE15000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: F415000000000000FC15000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: 0015000000000000B915000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: D815000000000000D815000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: D815000000000000D815000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: EE15000000000000F315000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: "GA$\x013a1" + Desc: FC150000000000000116000000000000 + Type: NT_GNU_BUILD_ATTRIBUTE_OPEN + - Name: .comment + Type: SHT_PROGBITS + Flags: [ SHF_MERGE, SHF_STRINGS ] + AddressAlign: 0x1 + EntSize: 0x1 + Content: 004743433A2028474E55292031302E332E312032303231303432322028526564204861742031302E332E312D3129004C696E6B65723A204C4C442031372E302E3000636C616E672076657273696F6E2031372E302E30202868747470733A2F2F6769746875622E636F6D2F6C6C766D2F6C6C766D2D70726F6A6563742E67697420613130333239396663343461643561646234653163376232303134643463306332623832613538372900 +Symbols: + - Name: crtstuff.c + Type: STT_FILE + Index: SHN_ABS + - Name: __TMC_LIST__ + Type: STT_OBJECT + Section: .tm_clone_table + Value: 0x37F0 + - Name: deregister_tm_clones + Type: STT_FUNC + Section: .text + Value: 0x1500 + - Name: register_tm_clones + Type: STT_FUNC + Section: .text + Value: 0x1530 + - Name: __do_global_dtors_aux + Type: STT_FUNC + Section: .text + Value: 0x1570 + - Name: completed.0 + Type: STT_OBJECT + Section: .bss + Value: 0x3810 + Size: 0x1 + - Name: __do_global_dtors_aux_fini_array_entry + Type: STT_OBJECT + Section: .fini_array + Value: 0x2638 + - Name: frame_dummy + Type: STT_FUNC + Section: .text + Value: 0x15B0 + - Name: __frame_dummy_init_array_entry + Type: STT_OBJECT + Section: .init_array + Value: 0x2640 + - Name: __dso_handle + Type: STT_OBJECT + Section: .data.rel.ro + Value: 0x2630 + Other: [ STV_HIDDEN ] + - Name: foo.cpp + Type: STT_FILE + Index: SHN_ABS + - Name: 'crtstuff.c (1)' + Type: STT_FILE + Index: SHN_ABS + - Name: __FRAME_END__ + Type: STT_OBJECT + Section: .eh_frame + Value: 0x4B8 + - Name: __TMC_END__ + Type: STT_OBJECT + Section: .tm_clone_table + Value: 0x37F0 + Other: [ STV_HIDDEN ] + - Name: _init + Type: STT_FUNC + Section: .init + Value: 0x15D8 + Other: [ STV_HIDDEN ] + - Name: _fini + Type: STT_FUNC + Section: .fini + Value: 0x15F4 + Other: [ STV_HIDDEN ] + - Name: _GLOBAL_OFFSET_TABLE_ + Section: .got.plt + Value: 0x37F0 + Other: [ STV_HIDDEN ] + - Name: _DYNAMIC + Section: .dynamic + Value: 0x2648 + Other: [ STV_HIDDEN ] + - Name: __gmon_start__ + Binding: STB_WEAK + - Name: _ITM_deregisterTMCloneTable + Binding: STB_WEAK + - Name: _ITM_registerTMCloneTable + Binding: STB_WEAK + - Name: __cxa_finalize + Type: STT_FUNC + Binding: STB_WEAK + - Name: _Z16calculate_answerv + Type: STT_FUNC + Section: .text + Binding: STB_GLOBAL + Value: 0x15C0 + Size: 0x18 + - Name: ultimate_answer + Type: STT_OBJECT + Section: .bss + Binding: STB_GLOBAL + Value: 0x3814 + Size: 0x4 +DynamicSymbols: + - Name: __gmon_start__ + Binding: STB_WEAK + - Name: _ITM_deregisterTMCloneTable + Binding: STB_WEAK + - Name: _ITM_registerTMCloneTable + Binding: STB_WEAK + - Name: __cxa_finalize + Type: STT_FUNC + Binding: STB_WEAK + - Name: _Z16calculate_answerv + Type: STT_FUNC + Section: .text + Binding: STB_GLOBAL + Value: 0x15C0 + Size: 0x18 + - Name: ultimate_answer + Type: STT_OBJECT + Section: .bss + Binding: STB_GLOBAL + Value: 0x3814 + Size: 0x4 +... diff --git a/clang/test/Interpreter/dynamic-library.cpp b/clang/test/Interpreter/dynamic-library.cpp --- a/clang/test/Interpreter/dynamic-library.cpp +++ b/clang/test/Interpreter/dynamic-library.cpp @@ -1,9 +1,20 @@ // REQUIRES: host-supports-jit, system-linux // UNSUPPORTED: target={{.*-(ps4|ps5)}} -// RUN: %clang -xc++ -o %T/libdynamic-library-test.so -fPIC -shared -DLIBRARY %S/Inputs/dynamic-library-test.cpp +// RUN: yaml2obj %S/Inputs/libdynamic-library-test.yaml &> %T/libdynamic-library-test.so // RUN: cat %s | env LD_LIBRARY_PATH=%T:$LD_LIBRARY_PATH clang-repl | FileCheck %s +// Input source dynamic-library-test.cpp: +// +// int ultimate_answer = 0; +// int calculate_answer() { +// ultimate_answer = 42; +// return 5; +// } +// +// Compile with: +// clang -xc++ -o libdynamic-library-test.so -fPIC -fuse-ld=lld -shared dynamic-library-test.cpp + #include extern int ultimate_answer;