All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Yuanjie Huang <Yuanjie.Huang@windriver.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH 1/1] ldconfig-native: Add 64-bit flag for ELF64 entries
Date: Tue, 28 Apr 2015 12:08:32 +0100	[thread overview]
Message-ID: <1430219312.13022.168.camel@linuxfoundation.org> (raw)
In-Reply-To: <1430207172-6926-1-git-send-email-Yuanjie.Huang@windriver.com>

On Tue, 2015-04-28 at 15:46 +0800, Yuanjie Huang wrote:
> From: Yuanjie Huang <yuanjie.huang@windriver.com>
> 
> ldconfig-native was grepped from an old version of glibc, and its output
> lacks neccessary 64bit flag in entries.
> Due to this defect, ctypes.util.find_library() python function fails to
> detect any library due to the old file format that ldconfig-native
> creates. This fix sets architecture-dependent 64bit flags for 64-bit ELF.
> 
> Since the host's elf.h may not have definition for new AArch64 machine
> type, a work-around is added to correctly flag 64-bit ARM libraries.
> 
> Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
> ---
>  .../add-64-bit-flag-for-ELF64-entries.patch        | 103 +++++++++++++++++++++
>  meta/recipes-core/glibc/ldconfig-native_2.12.1.bb  |   1 +
>  2 files changed, 104 insertions(+)
>  create mode 100644 meta/recipes-core/glibc/ldconfig-native-2.12.1/add-64-bit-flag-for-ELF64-entries.patch
> 
> diff --git a/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-64-bit-flag-for-ELF64-entries.patch b/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-64-bit-flag-for-ELF64-entries.patch
> new file mode 100644
> index 0000000..d42f7a1
> --- /dev/null
> +++ b/meta/recipes-core/glibc/ldconfig-native-2.12.1/add-64-bit-flag-for-ELF64-entries.patch
> @@ -0,0 +1,103 @@
> +From 9d62544090b08849218cd1fc52a36cdd5d90363e Mon Sep 17 00:00:00 2001
> +From: Yuanjie Huang <yuanjie.huang@windriver.com>
> +Date: Fri, 24 Apr 2015 03:29:31 +0000
> +Subject: [PATCH] Add 64-bit flag for ELF64 entries.
> +
> +ldconfig-native was grepped from an old version of glibc, and its output
> +lacks neccessary 64bit flag in entries.
> +Due to this defect, ctypes.util.find_library() python function fails to
> +detect any library due to the old file format that ldconfig-native
> +creates. This fix sets architecture-dependent 64bit flags for 64-bit ELF.
> +
> +Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
> +---
> + cache.c      |  4 ++++
> + ldconfig.h   |  4 ++++
> + readelflib.c | 34 ++++++++++++++++++++++++++++++++++
> + 3 files changed, 42 insertions(+)
> +
> +diff --git a/cache.c b/cache.c
> +index a904d44..c4f5411 100644
> +--- a/cache.c
> ++++ b/cache.c
> +@@ -121,6 +121,10 @@ print_entry (const char *lib, int flag, unsigned int osversion,
> +       break;
> +     case FLAG_MIPS64_LIBN64:
> +       fputs (",64bit", stdout);
> ++      break;
> ++    case FLAG_AARCH64_LIB64:
> ++      fputs (",AArch64", stdout);
> ++      break;
> +     case 0:
> +       break;
> +     default:
> +diff --git a/ldconfig.h b/ldconfig.h
> +index fadd5ec..6a8a750 100644
> +--- a/ldconfig.h
> ++++ b/ldconfig.h
> +@@ -34,6 +34,10 @@
> + #define FLAG_POWERPC_LIB64	0x0500
> + #define FLAG_MIPS64_LIBN32	0x0600
> + #define FLAG_MIPS64_LIBN64	0x0700
> ++#define FLAG_X8664_LIBX32		0x0800
> ++#define FLAG_ARM_LIBHF			0x0900
> ++#define FLAG_AARCH64_LIB64		0x0a00
> ++#define FLAG_ARM_LIBSF			0x0b00
> + 
> + /* Name of auxiliary cache.  */
> + #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"
> +diff --git a/readelflib.c b/readelflib.c
> +index 0bf0de3..6e87afc 100644
> +--- a/readelflib.c
> ++++ b/readelflib.c
> +@@ -28,6 +28,11 @@
> + 
> + #include "endian_extra.h"
> + 
> ++/* Work-around for old host that does not have AArch64 defined in elf.h. */
> ++#ifndef EM_AARCH64
> ++#define EM_AARCH64	183		/* ARM AARCH64 */
> ++#endif
> ++
> + #undef check_ptr
> + #define check_ptr(ptr)						\
> + do								\
> +@@ -290,6 +295,35 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
> +      libc5/libc6.  */
> +   *flag = FLAG_ELF;
> + 
> ++  /* Set flags according to information in ELF header to align with target
> ++     ldconfig */
> ++  switch (elf_header->e_machine)
> ++    {
> ++    case EM_IA_64:
> ++      *flag |= FLAG_IA64_LIB64;
> ++      break;
> ++    case EM_X86_64:
> ++      *flag |= FLAG_X8664_LIB64;
> ++      break;
> ++    case EM_S390:
> ++      *flag |= FLAG_S390_LIB64;
> ++      break;
> ++    case EM_PPC64:
> ++      *flag |= FLAG_POWERPC_LIB64;
> ++      break;
> ++    case EM_MIPS:
> ++    case EM_MIPS_RS3_LE:
> ++      *flag |= FLAG_MIPS64_LIBN64;
> ++      break;
> ++    case EM_AARCH64:
> ++      *flag |= FLAG_AARCH64_LIB64;
> ++      break;
> ++    default:
> ++      error(0, 0, "%s is a 64-bit ELF for unknown machine %lx\n",
> ++            file_name, (long)elf_header->e_machine);
> ++      break;
> ++    }
> ++
> +   loadaddr = -1;
> +   dynamic_addr = 0;
> +   dynamic_size = 0;
> +-- 
> +1.8.5.2.233.g932f7e4
> +
> diff --git a/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb b/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
> index 7c34635..8a2ea90 100644
> --- a/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
> +++ b/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
> @@ -12,6 +12,7 @@ SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
>             file://flag_fix.patch \
>             file://endianess-header.patch \
>             file://ldconfig-default-to-all-multilib-dirs.patch \
> +           file://add-64-bit-flag-for-ELF64-entries.patch \
>  "
>  
>  PR = "r2"

The patch doesn't seem to apply against master? Master appears to have
an additional patch than the list above?

Cheers,

Richard



  reply	other threads:[~2015-04-28 11:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-28  7:46 [PATCH 1/1] ldconfig-native: Add 64-bit flag for ELF64 entries Yuanjie Huang
2015-04-28 11:08 ` Richard Purdie [this message]
2015-04-30  2:13   ` Huang, Yuanjie
2015-07-01  3:19 ` wenzong fan
2015-07-01  8:58   ` Huang, Yuanjie
2015-07-01  9:29     ` wenzong fan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1430219312.13022.168.camel@linuxfoundation.org \
    --to=richard.purdie@linuxfoundation.org \
    --cc=Yuanjie.Huang@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.