All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Huang, Yuanjie" <yuanjie.huang@windriver.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH 1/1] ldconfig-native: Add 64-bit flag for ELF64 entries
Date: Thu, 30 Apr 2015 10:13:12 +0800	[thread overview]
Message-ID: <55418FB8.8070508@windriver.com> (raw)
In-Reply-To: <1430219312.13022.168.camel@linuxfoundation.org>

[-- Attachment #1: Type: text/plain, Size: 5713 bytes --]

Sorry I was on the wrong tree and was one patch behind. Please see the 
revised patch.

Best,
Yuanjie

On 04/28/2015 07:08 PM, Richard Purdie wrote:
> 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
>


[-- Attachment #2: 0001-ldconfig-native-Add-64-bit-flag-for-ELF64-entries.patch --]
[-- Type: text/x-patch, Size: 5139 bytes --]

From 3bb982232e7914a078688151630e71905f01cc49 Mon Sep 17 00:00:00 2001
From: Yuanjie Huang <yuanjie.huang@windriver.com>
Date: Mon, 27 Apr 2015 15:42:03 +0800
Subject: [PATCH] ldconfig-native: 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.

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 1debf8e..93c0b18 100644
--- a/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
+++ b/meta/recipes-core/glibc/ldconfig-native_2.12.1.bb
@@ -13,6 +13,7 @@ SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
            file://endianess-header.patch \
            file://ldconfig-default-to-all-multilib-dirs.patch \
            file://endian-ness_handling_fix.patch \
+           file://add-64-bit-flag-for-ELF64-entries.patch \
 "
 
 PR = "r2"
-- 
2.3.6


  reply	other threads:[~2015-04-30  2:11 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
2015-04-30  2:13   ` Huang, Yuanjie [this message]
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=55418FB8.8070508@windriver.com \
    --to=yuanjie.huang@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=richard.purdie@linuxfoundation.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.