From patchwork Mon Dec 3 18:18: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: 13346 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 55E4423E1A for ; Mon, 3 Dec 2012 18:19:06 +0000 (UTC) Received: from mail-ia0-f180.google.com (mail-ia0-f180.google.com [209.85.210.180]) by fiordland.canonical.com (Postfix) with ESMTP id E196DA1953D for ; Mon, 3 Dec 2012 18:19:05 +0000 (UTC) Received: by mail-ia0-f180.google.com with SMTP id t4so2274296iag.11 for ; Mon, 03 Dec 2012 10:19: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=H2Wyw9r0Kms3JOw3GJYf+COfs0khT88tMH9YSPsX4SY=; b=SA5ETg5tJlEQNdjCHPTOOs/DFPtECV8d8OvIN10RZMqqt+YOgJYBlNH1gx8kbzqjw/ PLpqPhOJR9b5/uCCzyniia9g0iKReZwPxk57Uagi3cGLxWvBcoveBFB+mrivpqv44+M/ rCFJ8s/3d6ejP26aZA5CeXIF84F5pOyuJd6S5Iu5bYvAMbveUxBs1vi4xbBfzZYbDoF+ wRUJX5VyV8T0UpD1duoPTv1Den7CjUaIHAfE1ipQeSrl8ielbhCXr9eYvcSCELMC1nYS y9rq0QFHeI65t/Z2CIepkTS1twNsmPSvI7bOscrmHIbuwinJEGDReCPP2n4BzvCIkXFB v1dg== Received: by 10.50.36.164 with SMTP id r4mr5860572igj.57.1354558745310; Mon, 03 Dec 2012 10:19: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 n20csp195282igt; Mon, 3 Dec 2012 10:19:04 -0800 (PST) Received: by 10.216.145.201 with SMTP id p51mr3967975wej.0.1354558742787; Mon, 03 Dec 2012 10:19:02 -0800 (PST) Received: from cheddar.halon.org.uk (cheddar.halon.org.uk. [217.10.144.130]) by mx.google.com with ESMTPS id l4si9271575wiy.15.2012.12.03.10.19.02 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 03 Dec 2012 10:19:02 -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 1Tfabe-0001QQ-2e for patches@linaro.org; Mon, 03 Dec 2012 18:19:02 +0000 Received: from stemci01 by e102122-lin with local (Exim 4.76) (envelope-from ) id 1Tfaaj-0008Q3-NB for patches@linaro.org; Mon, 03 Dec 2012 18:18:05 +0000 Date: Mon, 3 Dec 2012 18:18:05 +0000 From: Steve McIntyre To: patches@linaro.org Subject: [steve.mcintyre@linaro.org: [PATCH] AArch64: Tag ARM and AArch64 binaries in the ldconfig cache] Message-ID: <20121203181805.GM12778@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: ALoCoQlU0b47L1T2yR3biCjdtE6woy5336Fm4FQ6qfiQ6rFFf3hg/zfRAowUPMLJQxrcCZpRh7sW ----- Forwarded message from Steve McIntyre ----- Date: Mon, 3 Dec 2012 15:25:29 +0000 From: Steve McIntyre To: libc-ports@sourceware.org Cc: Carlos O'Donell , "Joseph S. Myers" , Marcus Shawcroft Subject: [PATCH] AArch64: Tag ARM and AArch64 binaries in the ldconfig cache User-Agent: Mutt/1.5.21 (2010-09-15) Hey guys, Splitting up code as requested. Here's patch #1 for AArch64. ======================================= Tag ARM and AArch64 binaries in the ldconfig cache * sysdeps/unix/sysv/linux/aarch64/readelflib.c: New file. Add the correct tags for ARM and AArch64 libraries in the ldconfig cache for AArch64. Signed-off-by: Steve McIntyre --- ports/sysdeps/unix/sysv/linux/aarch64/readelflib.c | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ports/sysdeps/unix/sysv/linux/aarch64/readelflib.c diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/readelflib.c b/ports/sysdeps/unix/sysv/linux/aarch64/readelflib.c new file mode 100644 index 0000000..e4ba2b0 --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/aarch64/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"