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
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to