[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