mgorny updated this revision to Diff 187264.
mgorny added a comment.
Herald added a subscriber: jdoerfert.
Added comments on how test data was generated.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D42870/new/
https://reviews.llvm.org/D42870
Files:
lldb/lit/Modules/ELF/Inputs/netbsd-amd64.core
lldb/lit/Modules/ELF/netbsd-core-amd64.test
lldb/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml
lldb/lit/Modules/lit.local.cfg
lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
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) {
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/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/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
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits