From patchwork Mon Dec 3 18:17:05 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve McIntyre X-Patchwork-Id: 13344 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id A314223E1A for ; Mon, 3 Dec 2012 18:18:06 +0000 (UTC) Received: from mail-ie0-f180.google.com (mail-ie0-f180.google.com [209.85.223.180]) by fiordland.canonical.com (Postfix) with ESMTP id 3B635A1953D for ; Mon, 3 Dec 2012 18:18:06 +0000 (UTC) Received: by mail-ie0-f180.google.com with SMTP id c10so4459678ieb.11 for ; Mon, 03 Dec 2012 10:18:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:date:from :to:subject:message-id:mime-version:content-type:content-disposition :x-attached:user-agent:x-gm-message-state; bh=pPaeQd0MoSgxb3A6JADEIvbHW5sVCtuqJezjKV8Ui9c=; b=k42rpeO3o0/XRcaWQzGJCwiq89CPlJBGUhTBmjLbdk99owmoBxDKfVXo/sh7JxEG54 o51EnDEeVelJa0n1xFmBQKolBYu70WIItc2fR06hLyd8D90ToPDbZeXlWb/2Fazntt3b qCzPs5+ze1YoL2BKmoc0W1w7tOLufGJAphF5ErHoyLK1drgl0oGGLZvlOc1ujdbGDFx/ O3ONM9FMxE5L9qYWtvtByUdPJInP0Yq3ENOEeg0IZyFS5gmVoZyfANO9V/X4e4IkgY20 NB4NBJVeJ4hYnf97eTqMH43YBFwiYoSAbLbsxFdpUD8/a9ruxn17MFWL/Qo3RMecN21o Oh/w== Received: by 10.50.161.169 with SMTP id xt9mr6969231igb.62.1354558685674; Mon, 03 Dec 2012 10:18:05 -0800 (PST) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.50.67.148 with SMTP id n20csp195139igt; Mon, 3 Dec 2012 10:18:04 -0800 (PST) Received: by 10.180.109.132 with SMTP id hs4mr21927wib.1.1354558683309; Mon, 03 Dec 2012 10:18:03 -0800 (PST) Received: from cheddar.halon.org.uk (cheddar.halon.org.uk. [217.10.144.130]) by mx.google.com with ESMTPS id z50si8729628wej.24.2012.12.03.10.18.02 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 03 Dec 2012 10:18:03 -0800 (PST) Received-SPF: neutral (google.com: 217.10.144.130 is neither permitted nor denied by best guess record for domain of steve.mcintyre@linaro.org) client-ip=217.10.144.130; Authentication-Results: mx.google.com; spf=neutral (google.com: 217.10.144.130 is neither permitted nor denied by best guess record for domain of steve.mcintyre@linaro.org) smtp.mail=steve.mcintyre@linaro.org Received: from bsmtp by cheddar.halon.org.uk with local-bsmtp (Exim 4.72) (envelope-from ) id 1Tfaag-0001Px-B5 for patches@linaro.org; Mon, 03 Dec 2012 18:18:02 +0000 Received: from stemci01 by e102122-lin with local (Exim 4.76) (envelope-from ) id 1TfaZl-0008Lx-Po for patches@linaro.org; Mon, 03 Dec 2012 18:17:05 +0000 Date: Mon, 3 Dec 2012 18:17:05 +0000 From: Steve McIntyre To: patches@linaro.org Subject: [steve.mcintyre@linaro.org: Re: [PATCH] ARM: Tag ARM and AArch64 binaries in the ldconfig cache] Message-ID: <20121203181659.GJ12778@linaro.org> MIME-Version: 1.0 Content-Disposition: inline X-attached: none User-Agent: Mutt/1.5.21 (2010-09-15) X-Gm-Message-State: ALoCoQm/R7UgDOUGAKLHW3UmtmB0K4afb3fVYqGbPEj8hpqsZFKmT8Psf/gi044PvDygvxDUuxOK ----- Forwarded message from Steve McIntyre ----- Date: Mon, 3 Dec 2012 16:30:06 +0000 From: Steve McIntyre To: "Joseph S. Myers" Cc: libc-ports@sourceware.org, Carlos O'Donell , Marcus Shawcroft Subject: Re: [PATCH] ARM: Tag ARM and AArch64 binaries in the ldconfig cache User-Agent: Mutt/1.5.21 (2010-09-15) On Mon, Dec 03, 2012 at 03:58:09PM +0000, Joseph S. Myers wrote: >On Mon, 3 Dec 2012, Steve McIntyre wrote: > >> + if (!ret && EF_ARM_EABI_VERSION(elf32_header->e_flags) == EF_ARM_EABI_VER5) > >Missing space before open parenthesis. OK with that fixed. Cool. Updated: =============================== Tag ARM and AArch64 binaries in the ldconfig cache * sysdeps/unix/sysv/linux/arm/readelflib.c: New file. Add the correct tags for ARM and AArch64 libraries in the ldconfig cache for ARM. Signed-off-by: Steve McIntyre --- ports/sysdeps/unix/sysv/linux/arm/readelflib.c | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ports/sysdeps/unix/sysv/linux/arm/readelflib.c diff --git a/ports/sysdeps/unix/sysv/linux/arm/readelflib.c b/ports/sysdeps/unix/sysv/linux/arm/readelflib.c new file mode 100644 index 0000000..e4ba2b0 --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/arm/readelflib.c @@ -0,0 +1,73 @@ +/* Copyright (C) 1999-2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger , 1999 and + Jakub Jelinek , 1999. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + + +int process_elf32_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); +int process_elf64_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, + void *file_contents, size_t file_length); + +/* Returns 0 if everything is ok, != 0 in case of error. */ +int +process_elf_file (const char *file_name, const char *lib, int *flag, + unsigned int *osversion, char **soname, void *file_contents, + size_t file_length) +{ + ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; + int ret; + + if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) + { + Elf32_Ehdr *elf32_header = (Elf32_Ehdr *) elf_header; + + ret = process_elf32_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + + if (!ret && EF_ARM_EABI_VERSION (elf32_header->e_flags) == EF_ARM_EABI_VER5) + { + if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_HARD) + *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; + else if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_SOFT) + *flag = FLAG_ELF_LIBC6; + } + } + else + { + ret = process_elf64_file (file_name, lib, flag, osversion, soname, + file_contents, file_length); + /* AArch64 libraries are always libc.so.6+. */ + if (!ret) + *flag = FLAG_AARCH64_LIB64|FLAG_ELF_LIBC6; + } + return ret; +} + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf32_file +#define __ELF_NATIVE_CLASS 32 +#include "elf/readelflib.c" + +#undef __ELF_NATIVE_CLASS +#undef process_elf_file +#define process_elf_file process_elf64_file +#define __ELF_NATIVE_CLASS 64 +#include "elf/readelflib.c"