Index: lldb/lit/Modules/ELF/netbsd-core-amd64.test =================================================================== --- /dev/null +++ lldb/lit/Modules/ELF/netbsd-core-amd64.test @@ -0,0 +1,12 @@ +# Test whether NetBSD core dumps are recognized correctly. + +# Core dump generated by the following program: +# int main() { +# void* v = 0; +# *v = 1; +# return 0; +# } + +# RUN: lldb-test object-file %S/Inputs/netbsd-amd64.core | FileCheck %s +# CHECK: Architecture: x86_64-unknown-netbsd +# CHECK: Type: core file Index: lldb/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml =================================================================== --- /dev/null +++ lldb/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml @@ -0,0 +1,341 @@ +# Test whether NetBSD executables are recognized correctly. + +# Data obtained from compiling the following program: +# int main() { +# return 0; +# } +# Then converting it using obj2yaml. + +# RUN: yaml2obj %s > %t +# RUN: lldb-test object-file %t | FileCheck %s +# CHECK: Architecture: x86_64--netbsd8.99.30 +# CHECK: Type: executable + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + Entry: 0x00000000002006F0 +Sections: + - Name: .interp + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x0000000000200200 + AddressAlign: 0x0000000000000001 + Content: 2F7573722F6C6962657865632F6C642E656C665F736F00 + - Name: .gnu.hash + Type: SHT_GNU_HASH + Flags: [ SHF_ALLOC ] + Address: 0x0000000000200368 + Link: .dynsym + AddressAlign: 0x0000000000000008 + Content: 0100000008000000020000000600000004C4000040004019008000000004000008000000B88DF10EA6DDA36BBC50769EEAD3EF0E8E029870BBE3927C + - Name: .hash + Type: SHT_HASH + Flags: [ SHF_ALLOC ] + Address: 0x00000000002003A4 + Link: .dynsym + AddressAlign: 0x0000000000000004 + EntSize: 0x0000000000000004 + Content: 0E0000000E0000000D0000000C0000000900000000000000080000000A00000000000000000000000200000000000000040000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000030000000100000007000000060000000B00000000000000 + - Name: .note.netbsd.ident + Type: SHT_NOTE + Flags: [ SHF_ALLOC ] + Address: 0x00000000002005A8 + AddressAlign: 0x0000000000000004 + Content: 0700000004000000010000004E6574425344000078B29535 + - Name: .note.netbsd.pax + Type: SHT_NOTE + Flags: [ SHF_ALLOC ] + Address: 0x00000000002005C0 + AddressAlign: 0x0000000000000004 + Content: '0400000004000000030000005061580000000000' + - Name: .eh_frame_hdr + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x00000000002005D4 + AddressAlign: 0x0000000000000004 + Content: 011B033B30000000050000002F0100004C0000005A0100007400000094010000A4000000D3020000C40000009C040000EC000000 + - Name: .eh_frame + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC ] + Address: 0x0000000000200608 + AddressAlign: 0x0000000000000008 + Content: 1400000000000000017A5200017810011B0C070890010000240000001C000000DB0000002B00000000410E108602410E188303440E20620E18410E10410E08002C00000044000000DE0000003A00000000420E108C02410E188603410E2083046D0A0E18410E10420E08410B000000001C00000074000000E80000003F010000000316010E10450E08000000000000002400000094000000070200002301000000420E108D02420E188C03410E208604410E288305440E301C000000BC000000A80300001D00000000410E108602430D06580C0708000000CCCCCCCC + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x00000000002006F0 + AddressAlign: 0x0000000000000010 + Content: 4883E4F04883EC084889D74889DEE9A401000055534883EC08488D2DE0FFFFFF488D1DD9FFFFFF4839EB730BFF134883C3084839EB72F54883C4085B5DC341545553488B1D0F1A00004C8B25101A00004C39E37319837B08257518488B2BFF5310488945004883C3184C39E372E75B5D415CC3E8580300004863D24863F6488D443202488D14C78B0285C00F840D010000BEFFFFFFFF31C9EB1C83F8070F84F000000083F8037504488B4A084883C2108B0285C0741383F80575DF0FB772084883C2108B0285C075ED4885C90F84CC0000006683FEFF0F84C20000000FB7D6486BD2384801CA4839CA0F86AF000000BEFFFFFFFF31FFEB1583F80675074889CE482B71104883C1384839CA76138B0183F80275E44889CF4883C1384839CA77ED4885FF7479B8FFFFFFFF4839C6746F4889F248035710488B024885C0746031FF31C9EB164883F8087504488B7A084883C210488B024885C074194883F80775E44889F148034A084883C210488B024885C075E74801CF4839CF76238B41084883F808741B4883F82574234883EC08E83D02000048837A08000F840EFFFFFFC3488B014889F248035110488914304883C1184839CF77C5C34155415455534883EC084889FB4889F58B56188B7608488B7D00E8A2FEFFFF488D053B2700004889284C8D2529270000488B451049890424488B4500488B104885D20F84BB000000488D0D0A070000488911488B000FB6104883C00184D2741380FA2F75F04889010FB6104883C00184D275ED4885DB74084889DFE8A9010000E8B401000048833D24180000000F84860000004C8D2DAFFDFFFF488D1DA8FDFFFF4C39EB730BFF134883C3084C39EB72F5488D3DA4FDFFFFE86C0100004C8D2D85FDFFFF488D1D7EFDFFFF4C39EB730BFF134883C3084C39EB72F5488D3D17010000E842010000E8FD0000008B7D08498B1424488B7500E8CD00000089C7E846010000488D054F060000488D0D58260000488908E95AFFFFFFE869FDFFFFE970FFFFFF803D80060000007401C353C6057506000001488D1D35160000488B034885C07408FFD04883C308EBF048833D6517000000740C488D3D04FCFFFFE8F70000005BC3803D3E060000007401C353C605330600000148833D43170000007413488D35E2050000488D3DD3FBFFFFE8D600000048833D2E170000007412488D3DD515000048833F007405E8CA000000488D1DA3150000488B034883F8FF7408FFD04883EB08EBEF5BC3554889E548C745F800000000488B45F8C70001000000B8000000005DC3 + - Name: .init + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000200A90 + AddressAlign: 0x0000000000000010 + Content: 4883EC08E872FFFFFF4883C408C3 + - Name: .fini + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000200AA0 + AddressAlign: 0x0000000000000010 + Content: 4883EC08E821FFFFFF4883C408C3 + - Name: .plt + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000200AB0 + AddressAlign: 0x0000000000000010 + Content: FF35AA050000FF25AC0500000F1F4000FF25AA0500006800000000E9E0FFFFFFFF25A20500006801000000E9D0FFFFFFFF259A0500006802000000E9C0FFFFFFFF25920500006803000000E9B0FFFFFFFF258A0500006804000000E9A0FFFFFFFF25820500006805000000E990FFFFFFFF257A0500006806000000E980FFFFFF + - Name: .data + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000201000 + AddressAlign: 0x0000000000000008 + Content: '10302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' + - Name: .got.plt + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000201058 + AddressAlign: 0x0000000000000008 + Content: 282020000000000000000000000000000000000000000000C60A200000000000D60A200000000000E60A200000000000F60A200000000000060B200000000000160B200000000000260B200000000000 + - Name: .ctors + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000202000 + AddressAlign: 0x0000000000000008 + Content: FFFFFFFFFFFFFFFF0000000000000000 + - Name: .dtors + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000202010 + AddressAlign: 0x0000000000000008 + Content: FFFFFFFFFFFFFFFF0000000000000000 + - Name: .jcr + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000202020 + AddressAlign: 0x0000000000000008 + Content: '0000000000000000' + - Name: .dynamic + Type: SHT_DYNAMIC + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000202028 + Link: .dynstr + AddressAlign: 0x0000000000000008 + EntSize: 0x0000000000000010 + Entries: + - Tag: DT_NEEDED + Value: 0x0000000000000001 + - Tag: DT_DEBUG + Value: 0x0000000000000000 + - Tag: DT_RELA + Value: 0x00000000002004B8 + - Tag: DT_RELASZ + Value: 0x0000000000000048 + - Tag: DT_RELAENT + Value: 0x0000000000000018 + - Tag: DT_JMPREL + Value: 0x0000000000200500 + - Tag: DT_PLTRELSZ + Value: 0x00000000000000A8 + - Tag: DT_PLTGOT + Value: 0x0000000000201058 + - Tag: DT_PLTREL + Value: 0x0000000000000007 + - Tag: DT_SYMTAB + Value: 0x0000000000200218 + - Tag: DT_SYMENT + Value: 0x0000000000000018 + - Tag: DT_STRTAB + Value: 0x000000000020041C + - Tag: DT_STRSZ + Value: 0x000000000000009C + - Tag: DT_GNU_HASH + Value: 0x0000000000200368 + - Tag: DT_HASH + Value: 0x00000000002003A4 + - Tag: DT_INIT + Value: 0x0000000000200A90 + - Tag: DT_FINI + Value: 0x0000000000200AA0 + - Tag: DT_NULL + Value: 0x0000000000000000 + - Name: .got + Type: SHT_PROGBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000202148 + AddressAlign: 0x0000000000000008 + Content: '000000000000000000000000000000002820200000000000000000000000000000000000000000000000000000000000' + - Name: .bss + Type: SHT_NOBITS + Flags: [ SHF_WRITE, SHF_ALLOC ] + Address: 0x0000000000203000 + AddressAlign: 0x0000000000000008 + Size: 0x0000000000000011 + - Name: .comment + Type: SHT_PROGBITS + Flags: [ SHF_MERGE, SHF_STRINGS ] + AddressAlign: 0x0000000000000001 + EntSize: 0x0000000000000001 + Content: 4C696E6B65723A204C4C4420372E302E31004743433A20284E6574425344206E62342032303138313130392920362E352E30004743433A20286E62342032303138313130392920362E352E300000 + - Name: .ident + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: 244E65744253443A20637274302E532C7620312E3420323031382F31312F32362031373A33373A3436206A6F65726720457870202400244E65744253443A20637274302D636F6D6D6F6E2E632C7620312E323320323031382F31322F32382032303A31323A3335206368726973746F7320457870202400244E65744253443A20637274692E532C7620312E3120323031302F30382F30372031383A30313A3335206A6F65726720457870202400244E65744253443A20637274626567696E2E532C7620312E3220323031302F31312F33302031383A33373A3539206A6F65726720457870202400244E65744253443A20637274656E642E532C7620312E3120323031302F30382F30372031383A30313A3334206A6F65726720457870202400244E65744253443A206372746E2E532C7620312E3120323031302F30382F30372031383A30313A3335206A6F65726720457870202400 + - Name: .SUNW_ctf + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000004 + Content: F1CF0200000000000000000000000000080000000800000008000000080000001B0000000100000000000000002A2A2A204E6F204C6162656C2050726F7669646564202A2A2A0000F1CF0200000000000000000000000000080000000800000008000000080000001B0000000100000000000000002A2A2A204E6F204C6162656C2050726F7669646564202A2A2A00 +Symbols: + Local: + - Name: crt0-common.c + Type: STT_FILE + - Name: __rela_iplt_end + Visibility: STV_HIDDEN + - Name: __rela_iplt_start + Visibility: STV_HIDDEN + - Name: ___start + Type: STT_FUNC + Section: .text + Value: 0x00000000002008A7 + Size: 0x0000000000000123 + Visibility: STV_HIDDEN + - Name: hello.c + Type: STT_FILE + - Name: _DYNAMIC + Section: .dynamic + Value: 0x0000000000202028 + Visibility: STV_HIDDEN + - Name: __fini_array_end + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: __fini_array_start + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: __init_array_end + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: __preinit_array_end + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: _GLOBAL_OFFSET_TABLE_ + Section: .got.plt + Value: 0x0000000000201058 + Visibility: STV_HIDDEN + - Name: __init_array_start + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: __preinit_array_start + Section: .text + Value: 0x00000000002006F0 + Visibility: STV_HIDDEN + - Name: __dso_handle + Type: STT_OBJECT + Section: .data + Value: 0x0000000000201008 + Size: 0x0000000000000008 + Visibility: STV_HIDDEN + - Name: __CTOR_LIST_END__ + Section: .ctors + Value: 0x0000000000202008 + Visibility: STV_HIDDEN + Global: + - Name: abort + Type: STT_FUNC + - Name: _init + Section: .init + Value: 0x0000000000200A90 + - Name: environ + Type: STT_OBJECT + Section: .bss + Value: 0x0000000000203000 + Size: 0x0000000000000008 + - Name: __start + Type: STT_FUNC + Section: .text + Value: 0x00000000002006F0 + - Name: __progname + Type: STT_OBJECT + Section: .data + Value: 0x0000000000201000 + Size: 0x0000000000000008 + - Name: _start + Type: STT_FUNC + Section: .text + Value: 0x00000000002006F0 + - Name: main + Type: STT_FUNC + Section: .text + Value: 0x0000000000200A70 + Size: 0x000000000000001D + - Name: _fini + Section: .fini + Value: 0x0000000000200AA0 + - Name: atexit + Type: STT_FUNC + - Name: __ps_strings + Type: STT_OBJECT + Section: .bss + Value: 0x0000000000203008 + Size: 0x0000000000000008 + - Name: exit + Type: STT_FUNC + - Name: _libc_init + Type: STT_FUNC + - Name: _end + Section: .bss + Value: 0x0000000000203011 + Weak: + - Name: __deregister_frame_info + Type: STT_FUNC + - Name: __register_frame_info + Type: STT_FUNC + - Name: _Jv_RegisterClasses +DynamicSymbols: + Global: + - Name: abort + Type: STT_FUNC + - Name: atexit + Type: STT_FUNC + - Name: exit + Type: STT_FUNC + - Name: _libc_init + Type: STT_FUNC + - Name: _init + Section: .init + Value: 0x0000000000200A90 + - Name: environ + Type: STT_OBJECT + Section: .bss + Value: 0x0000000000203000 + Size: 0x0000000000000008 + - Name: __progname + Type: STT_OBJECT + Section: .data + Value: 0x0000000000201000 + Size: 0x0000000000000008 + - Name: _fini + Section: .fini + Value: 0x0000000000200AA0 + - Name: __ps_strings + Type: STT_OBJECT + Section: .bss + Value: 0x0000000000203008 + Size: 0x0000000000000008 + - Name: _end + Section: .bss + Value: 0x0000000000203011 + Weak: + - Name: __deregister_frame_info + Type: STT_FUNC + - Name: __register_frame_info + Type: STT_FUNC + - Name: _Jv_RegisterClasses +... Index: lldb/lit/Modules/lit.local.cfg =================================================================== --- lldb/lit/Modules/lit.local.cfg +++ lldb/lit/Modules/lit.local.cfg @@ -1 +1 @@ -config.suffixes = ['.s', '.yaml'] +config.suffixes = ['.s', '.test', '.yaml'] Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp =================================================================== --- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp +++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp @@ -55,6 +55,7 @@ const char *const LLDB_NT_OWNER_FREEBSD = "FreeBSD"; const char *const LLDB_NT_OWNER_GNU = "GNU"; const char *const LLDB_NT_OWNER_NETBSD = "NetBSD"; +const char *const LLDB_NT_OWNER_NETBSDCORE = "NetBSD-CORE"; const char *const LLDB_NT_OWNER_OPENBSD = "OpenBSD"; const char *const LLDB_NT_OWNER_CSR = "csr"; const char *const LLDB_NT_OWNER_ANDROID = "Android"; @@ -70,8 +71,10 @@ const elf_word LLDB_NT_GNU_BUILD_ID_TAG = 0x03; -const elf_word LLDB_NT_NETBSD_ABI_TAG = 0x01; -const elf_word LLDB_NT_NETBSD_ABI_SIZE = 4; +const elf_word LLDB_NT_NETBSD_NT_NETBSD_IDENT_TAG = 1; +const elf_word LLDB_NT_NETBSD_NT_NETBSD_IDENT_DESCSZ = 4; +const elf_word LLDB_NT_NETBSD_NT_NETBSD_IDENT_NAMESZ = 7; +const elf_word LLDB_NT_NETBSD_NT_PROCINFO = 1; // GNU ABI note OS constants const elf_word LLDB_NT_GNU_ABI_OS_LINUX = 0x00; @@ -1294,25 +1297,39 @@ // The note.n_name == LLDB_NT_OWNER_GNU is valid for Linux platform arch_spec.GetTriple().setOS(llvm::Triple::OSType::Linux); } - // Process NetBSD ELF notes. + // Process NetBSD ELF executables and shared libraries else if ((note.n_name == LLDB_NT_OWNER_NETBSD) && - (note.n_type == LLDB_NT_NETBSD_ABI_TAG) && - (note.n_descsz == LLDB_NT_NETBSD_ABI_SIZE)) { - // Pull out the min version info. + (note.n_type == LLDB_NT_NETBSD_NT_NETBSD_IDENT_TAG) && + (note.n_descsz == LLDB_NT_NETBSD_NT_NETBSD_IDENT_DESCSZ) && + (note.n_namesz == LLDB_NT_NETBSD_NT_NETBSD_IDENT_NAMESZ)) { + // Pull out the version info. uint32_t version_info; if (data.GetU32(&offset, &version_info, 1) == nullptr) { error.SetErrorString("failed to read NetBSD ABI note payload"); return error; } - + // Convert the version info into a major/minor/patch number. + // #define __NetBSD_Version__ MMmmrrpp00 + // + // M = major version + // m = minor version; a minor number of 99 indicates current. + // r = 0 (since NetBSD 3.0 not used) + // p = patchlevel + const uint32_t version_major = version_info / 100000000; + const uint32_t version_minor = (version_info % 100000000) / 1000000; + const uint32_t version_patch = (version_info % 10000) / 100; + // Set the elf OS version to NetBSD. Also clear the vendor. + arch_spec.GetTriple().setOSName( + llvm::formatv("netbsd{0}.{1}.{2}", version_major, version_minor, + version_patch).str()); + arch_spec.GetTriple().setVendor(llvm::Triple::VendorType::UnknownVendor); + } + // Process NetBSD ELF core(5) notes + else if ((note.n_name == LLDB_NT_OWNER_NETBSDCORE) && + (note.n_type == LLDB_NT_NETBSD_NT_PROCINFO)) { // Set the elf OS version to NetBSD. Also clear the vendor. arch_spec.GetTriple().setOS(llvm::Triple::OSType::NetBSD); arch_spec.GetTriple().setVendor(llvm::Triple::VendorType::UnknownVendor); - - if (log) - log->Printf( - "ObjectFileELF::%s detected NetBSD, min version constant %" PRIu32, - __FUNCTION__, version_info); } // Process OpenBSD ELF notes. else if (note.n_name == LLDB_NT_OWNER_OPENBSD) {