[OE-core] [PATCH 1/1] ldconfig-native: Add 64-bit flag for ELF64 entries

wenzong fan wenzong.fan at windriver.com
Wed Jul 1 03:19:39 UTC 2015


Hi Yuanjie,

Could you resend your patch with "Upstream-status:xxx"?

Please send the V2 patch directly w/o attachment.

Thanks
Wenzong

On 04/28/2015 03:46 PM, Yuanjie Huang wrote:
> From: Yuanjie Huang <yuanjie.huang at 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 at 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 at 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 at 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"
>



More information about the Openembedded-core mailing list