[Lldb-commits] [lldb] r354466 - [lldb] [ObjectFile/ELF] Fix recognizing NetBSD images

Davide Italiano via lldb-commits lldb-commits at lists.llvm.org
Wed Feb 20 08:39:07 PST 2019


This broke the bots, link:

http://green.lab.llvm.org/green/job/lldb-cmake/20047/

Can you please take a look and see what's needed to fix (and revert otherwise)?

Thanks

On Wed, Feb 20, 2019 at 6:30 AM Michal Gorny via lldb-commits
<lldb-commits at lists.llvm.org> wrote:
>
> Author: mgorny
> Date: Wed Feb 20 06:31:06 2019
> New Revision: 354466
>
> URL: http://llvm.org/viewvc/llvm-project?rev=354466&view=rev
> Log:
> [lldb] [ObjectFile/ELF] Fix recognizing NetBSD images
>
> Split the recognition into NetBSD executables & shared libraries
> and core(5) files.
>
> Introduce new owner type: "NetBSD-CORE", as core(5) files are not tagged
> in the same way as regular NetBSD executables.
>
> Stop using incorrectly ABI_TAG and ABI_SIZE.  Introduce IDENT_TAG,
> IDENT_DECSZ, IDENT_NAMESZ and PROCINFO.
>
> The new values detect correctly the NetBSD images.
>
> The patch has been originally written by Kamil Rytarowski.  I've added
> tests and applied minor code changes per review.  The work has been
> sponsored by the NetBSD Foundation.
>
> Differential Revision: https://reviews.llvm.org/D42870
>
> Added:
>     lldb/trunk/lit/Modules/ELF/Inputs/netbsd-amd64.core   (with props)
>     lldb/trunk/lit/Modules/ELF/netbsd-core-amd64.test
>     lldb/trunk/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml
> Modified:
>     lldb/trunk/lit/Modules/lit.local.cfg
>     lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
>
> Added: lldb/trunk/lit/Modules/ELF/Inputs/netbsd-amd64.core
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Modules/ELF/Inputs/netbsd-amd64.core?rev=354466&view=auto
> ==============================================================================
> Binary file - no diff available.
>
> Propchange: lldb/trunk/lit/Modules/ELF/Inputs/netbsd-amd64.core
> ------------------------------------------------------------------------------
>     svn:mime-type = application/x-coredump
>
> Added: lldb/trunk/lit/Modules/ELF/netbsd-core-amd64.test
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Modules/ELF/netbsd-core-amd64.test?rev=354466&view=auto
> ==============================================================================
> --- lldb/trunk/lit/Modules/ELF/netbsd-core-amd64.test (added)
> +++ lldb/trunk/lit/Modules/ELF/netbsd-core-amd64.test Wed Feb 20 06:31:06 2019
> @@ -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
>
> Added: lldb/trunk/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml?rev=354466&view=auto
> ==============================================================================
> --- lldb/trunk/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml (added)
> +++ lldb/trunk/lit/Modules/ELF/netbsd-exec-8.99.30-amd64.yaml Wed Feb 20 06:31:06 2019
> @@ -0,0 +1,22 @@
> +# Test whether NetBSD executables are recognized correctly.
> +
> +# 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:            .note.netbsd.ident
> +    Type:            SHT_NOTE
> +    Flags:           [ SHF_ALLOC ]
> +    Address:         0x00000000002005A8
> +    AddressAlign:    0x0000000000000004
> +    Content:         0700000004000000010000004E6574425344000078B29535
> +...
>
> Modified: lldb/trunk/lit/Modules/lit.local.cfg
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Modules/lit.local.cfg?rev=354466&r1=354465&r2=354466&view=diff
> ==============================================================================
> --- lldb/trunk/lit/Modules/lit.local.cfg (original)
> +++ lldb/trunk/lit/Modules/lit.local.cfg Wed Feb 20 06:31:06 2019
> @@ -1 +1 @@
> -config.suffixes = ['.s', '.yaml']
> +config.suffixes = ['.s', '.test', '.yaml']
>
> Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp?rev=354466&r1=354465&r2=354466&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp (original)
> +++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp Wed Feb 20 06:31:06 2019
> @@ -55,6 +55,7 @@ namespace {
>  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_ABI_SIZE = 16
>
>  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_IDENT_TAG = 1;
> +const elf_word LLDB_NT_NETBSD_IDENT_DESCSZ = 4;
> +const elf_word LLDB_NT_NETBSD_IDENT_NAMESZ = 7;
> +const elf_word LLDB_NT_NETBSD_PROCINFO = 1;
>
>  // GNU ABI note OS constants
>  const elf_word LLDB_NT_GNU_ABI_OS_LINUX = 0x00;
> @@ -1294,25 +1297,39 @@ ObjectFileELF::RefineModuleDetailsFromNo
>          // 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_IDENT_TAG) &&
> +             (note.n_descsz == LLDB_NT_NETBSD_IDENT_DESCSZ) &&
> +             (note.n_namesz == LLDB_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_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) {
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


More information about the lldb-commits mailing list