From patchwork Wed Dec 22 15:31:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Lucas A. M. Magalhaes" X-Patchwork-Id: 49194 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 758D8385840B for ; Wed, 22 Dec 2021 15:32:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 758D8385840B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1640187140; bh=r8aF0cMJVEHZ39Sk4dD8OPtnJIaQJwnpI+J30OBxyqE=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=RXXvn3iTPrhTuwpN33y/JWiDUe2uhX8alexgemMZkC3Qei/+ODULqBb8yprzMr9Dk Fz4Cma7C82EGHdKkBgMhLIhyqxIjW1aXjrxbFyJ+/qMiyNkWIT0tEYyi78N0DveItc zRnTJeni0fVepNDppOym3bQJk4b9OXTlwiDfJpDs= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id E602D3858C2C for ; Wed, 22 Dec 2021 15:31:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E602D3858C2C Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BMEAJwm014253 for ; Wed, 22 Dec 2021 15:31:57 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3d3w36380v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Dec 2021 15:31:56 +0000 Received: from m0098404.ppops.net (m0098404.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1BMEI5lG030396 for ; Wed, 22 Dec 2021 15:31:56 GMT Received: from ppma05wdc.us.ibm.com (1b.90.2fa9.ip4.static.sl-reverse.com [169.47.144.27]) by mx0a-001b2d01.pphosted.com with ESMTP id 3d3w36380f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Dec 2021 15:31:56 +0000 Received: from pps.filterd (ppma05wdc.us.ibm.com [127.0.0.1]) by ppma05wdc.us.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1BMFSoOP010427; Wed, 22 Dec 2021 15:31:55 GMT Received: from b01cxnp22035.gho.pok.ibm.com (b01cxnp22035.gho.pok.ibm.com [9.57.198.25]) by ppma05wdc.us.ibm.com with ESMTP id 3d179brk5d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Dec 2021 15:31:54 +0000 Received: from b01ledav004.gho.pok.ibm.com (b01ledav004.gho.pok.ibm.com [9.57.199.109]) by b01cxnp22035.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1BMFVrgc18678094 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Dec 2021 15:31:53 GMT Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EC46F11207A; Wed, 22 Dec 2021 15:31:52 +0000 (GMT) Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7F07C112074; Wed, 22 Dec 2021 15:31:52 +0000 (GMT) Received: from localhost (unknown [9.160.105.124]) by b01ledav004.gho.pok.ibm.com (Postfix) with ESMTP; Wed, 22 Dec 2021 15:31:52 +0000 (GMT) To: libc-alpha@sourceware.org Subject: [RFC] Remove special flags of libc.5.so and libc.4.so Date: Wed, 22 Dec 2021 12:31:51 -0300 Message-Id: <20211222153151.162136-1-lamm@linux.ibm.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <87r1c9rmlz.fsf@oldenburg.str.redhat.com> References: <87r1c9rmlz.fsf@oldenburg.str.redhat.com> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: dI5Z3cB4SoXqT8j9VSvK8C6S8cqjst_P X-Proofpoint-ORIG-GUID: WPd9Xqc3lQmI60_VMYQCx6IN_x-Eyo0O X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2021-12-22_05,2021-12-22_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 spamscore=0 mlxscore=0 phishscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 suspectscore=0 clxscore=1015 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112220088 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: "Lucas A. M. Magalhaes via Libc-alpha" From: "Lucas A. M. Magalhaes" Reply-To: "Lucas A. M. Magalhaes" Cc: fweimer@redhat.com, tuliom@ibm.com Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" I've tested it in a AT build and was able to build and link programs as expected. For other archs I try with build-many-glibcs.py, all succeeded. Any other suggestions on how to test this? Florian am I missing something? Should we add a restriction to cache just new libc6.so compatible libraries? -- 8< -- The older libcs version are obsolete for over twenty years now. This commit removes special flags of libc.5.so and libc.4.so.. It assume that all libraries cached are libc.6.so compatible and wrote FLAG_ELF_LIBC6. Tested on x86_64, powerpc, powerpc64 and powerpc64le. Tested with build-many-glibcs.py for the other affected architectures. --- elf/cache.c | 6 +-- elf/ldconfig.c | 33 +--------------- elf/readelflib.c | 46 +++------------------- elf/readlib.c | 25 +----------- sysdeps/unix/sysv/linux/arc/ldconfig.h | 8 ---- sysdeps/unix/sysv/linux/arm/ldconfig.h | 7 ---- sysdeps/unix/sysv/linux/csky/ldconfig.h | 6 --- sysdeps/unix/sysv/linux/ia64/ldconfig.h | 6 --- sysdeps/unix/sysv/linux/powerpc/ldconfig.h | 8 ---- sysdeps/unix/sysv/linux/riscv/ldconfig.h | 17 -------- sysdeps/unix/sysv/linux/s390/ldconfig.h | 7 ---- sysdeps/unix/sysv/linux/x86_64/ldconfig.h | 8 ---- 12 files changed, 11 insertions(+), 166 deletions(-) diff --git a/elf/cache.c b/elf/cache.c index 1c0dc5ee87..387dd11a05 100644 --- a/elf/cache.c +++ b/elf/cache.c @@ -158,6 +158,7 @@ struct cache_entry /* List of all cache entries. */ static struct cache_entry *entries; +/* libc4, ELF and libc5 are unsupported */ static const char *flag_descr[] = { "libc4", "ELF", "libc5", "libc6"}; @@ -169,14 +170,11 @@ print_entry (const char *lib, int flag, unsigned int osversion, printf ("\t%s (", lib); switch (flag & FLAG_TYPE_MASK) { - case FLAG_LIBC4: - case FLAG_ELF: - case FLAG_ELF_LIBC5: case FLAG_ELF_LIBC6: fputs (flag_descr[flag & FLAG_TYPE_MASK], stdout); break; default: - fputs (_("unknown"), stdout); + fputs (_("Unknown or unsupported flag"), stdout); break; } switch (flag & FLAG_REQUIRED_MASK) diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 101d56ac8e..d64b134781 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -65,19 +65,6 @@ #define PACKAGE _libc_intl_domainname -static const struct -{ - const char *name; - int flag; -} lib_types[] = -{ - {"libc4", FLAG_LIBC4}, - {"libc5", FLAG_ELF_LIBC5}, - {"libc6", FLAG_ELF_LIBC6}, - {"glibc2", FLAG_ELF_LIBC6} -}; - - /* List of directories to handle. */ struct dir_entry { @@ -471,25 +458,7 @@ add_dir_1 (const char *line, const char *from_file, int from_line) /* Search for an '=' sign. */ entry->path = xstrdup (line); - char *equal_sign = strchr (entry->path, '='); - if (equal_sign) - { - *equal_sign = '\0'; - ++equal_sign; - entry->flag = FLAG_ANY; - for (i = 0; i < sizeof (lib_types) / sizeof (lib_types[0]); ++i) - if (strcmp (equal_sign, lib_types[i].name) == 0) - { - entry->flag = lib_types[i].flag; - break; - } - if (entry->flag == FLAG_ANY) - error (0, 0, _("%s is not a known library type"), equal_sign); - } - else - { - entry->flag = FLAG_ANY; - } + entry->flag = FLAG_ELF_LIBC6; /* Canonify path: for now only remove leading and trailing whitespace and the trailing slashes. */ diff --git a/elf/readelflib.c b/elf/readelflib.c index 10b10b6080..801c5587ab 100644 --- a/elf/readelflib.c +++ b/elf/readelflib.c @@ -44,7 +44,6 @@ process_elf_file (const char *file_name, const char *lib, int *flag, char **soname, void *file_contents, size_t file_length) { int i; - unsigned int j; unsigned int dynamic_addr; size_t dynamic_size; char *program_interpreter; @@ -82,9 +81,8 @@ process_elf_file (const char *file_name, const char *lib, int *flag, elf_pheader = (ElfW(Phdr) *) (elf_header->e_phoff + file_contents); check_ptr (elf_pheader); - /* The library is an elf library, now search for soname and - libc5/libc6. */ - *flag = FLAG_ELF; + /* The library is an elf library */ + *flag = FLAG_ELF_LIBC6; /* The default ISA level is 0. */ *isa_level = 0; @@ -111,16 +109,6 @@ process_elf_file (const char *file_name, const char *lib, int *flag, program_interpreter = (char *) (file_contents + segment->p_offset); check_ptr (program_interpreter); - /* Check if this is enough to classify the binary. */ - for (j = 0; j < sizeof (interpreters) / sizeof (interpreters [0]); - ++j) - if (strcmp (program_interpreter, interpreters[j].soname) == 0) - { - *flag = interpreters[j].flag; - break; - } - break; - case PT_NOTE: if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) { @@ -291,38 +279,16 @@ done: if (dynamic_strings == NULL) return 1; - /* Now read the DT_NEEDED and DT_SONAME entries. */ + /* Now read the DT_SONAME entries. */ for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; ++dyn_entry) { - if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME) + if (dyn_entry->d_tag == DT_SONAME) { char *name = dynamic_strings + dyn_entry->d_un.d_val; check_ptr (name); - - if (dyn_entry->d_tag == DT_NEEDED) - { - - if (*flag == FLAG_ELF) - { - /* Check if this is enough to classify the binary. */ - for (j = 0; - j < sizeof (known_libs) / sizeof (known_libs [0]); - ++j) - if (strcmp (name, known_libs [j].soname) == 0) - { - *flag = known_libs [j].flag; - break; - } - } - } - - else if (dyn_entry->d_tag == DT_SONAME) - *soname = xstrdup (name); - - /* Do we have everything we need? */ - if (*soname && *flag != FLAG_ELF) - return 0; + *soname = xstrdup (name); + return 0; } } diff --git a/elf/readlib.c b/elf/readlib.c index 64b20d7804..9164c1cda7 100644 --- a/elf/readlib.c +++ b/elf/readlib.c @@ -43,24 +43,6 @@ struct known_names int flag; }; -static struct known_names interpreters[] = -{ - { "/lib/" LD_SO, FLAG_ELF_LIBC6 }, -#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES - SYSDEP_KNOWN_INTERPRETER_NAMES -#endif -}; - -static struct known_names known_libs[] = -{ - { LIBC_SO, FLAG_ELF_LIBC6 }, - { LIBM_SO, FLAG_ELF_LIBC6 }, -#ifdef SYSDEP_KNOWN_LIBRARY_NAMES - SYSDEP_KNOWN_LIBRARY_NAMES -#endif -}; - - /* Check if string corresponds to a GDB Python file. */ static bool is_gdb_python_file (const char *name) @@ -84,7 +66,8 @@ process_file (const char *real_file_name, const char *file_name, struct exec *aout_header; ret = 0; - *flag = FLAG_ANY; + /* Just set FLAG_ELF_LIBC6 as old formats are not supported anymore. */ + *flag = FLAG_ELF_LIBC6; *soname = NULL; file = fopen (real_file_name, "rb"); @@ -151,7 +134,6 @@ process_file (const char *real_file_name, const char *file_name, *dot = '\0'; } *soname = copy; - *flag = FLAG_LIBC4; goto done; } @@ -192,9 +174,6 @@ implicit_soname (const char *lib, int flag) { char *soname = xstrdup (lib); - if ((flag & FLAG_TYPE_MASK) != FLAG_LIBC4) - return soname; - /* Aout files don't have a soname, just return the name including the major number. */ char *major = strstr (soname, ".so."); diff --git a/sysdeps/unix/sysv/linux/arc/ldconfig.h b/sysdeps/unix/sysv/linux/arc/ldconfig.h index 8c776fca9e..02ed826283 100644 --- a/sysdeps/unix/sysv/linux/arc/ldconfig.h +++ b/sysdeps/unix/sysv/linux/arc/ldconfig.h @@ -17,11 +17,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux-arc.so.2", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-arceb.so.2", FLAG_ELF_LIBC6 }, - -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/arm/ldconfig.h b/sysdeps/unix/sysv/linux/arm/ldconfig.h index d839470cfe..b3fa8ceebe 100644 --- a/sysdeps/unix/sysv/linux/arm/ldconfig.h +++ b/sysdeps/unix/sysv/linux/arm/ldconfig.h @@ -16,10 +16,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ - { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/csky/ldconfig.h b/sysdeps/unix/sysv/linux/csky/ldconfig.h index eeda37e4a8..6861f71327 100644 --- a/sysdeps/unix/sysv/linux/csky/ldconfig.h +++ b/sysdeps/unix/sysv/linux/csky/ldconfig.h @@ -26,9 +26,3 @@ #else # define LD_SO_ABI "cskyv2" #endif - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { LD_SO_PREFIX LD_SO_ABI LD_SO_SUFFIX, FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/ia64/ldconfig.h b/sysdeps/unix/sysv/linux/ia64/ldconfig.h index 53685659ed..b3fa8ceebe 100644 --- a/sysdeps/unix/sysv/linux/ia64/ldconfig.h +++ b/sysdeps/unix/sysv/linux/ia64/ldconfig.h @@ -16,9 +16,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/powerpc/ldconfig.h b/sysdeps/unix/sysv/linux/powerpc/ldconfig.h index 09d75b3dec..d0935d541b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/ldconfig.h +++ b/sysdeps/unix/sysv/linux/powerpc/ldconfig.h @@ -17,11 +17,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld64.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld64.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/riscv/ldconfig.h b/sysdeps/unix/sysv/linux/riscv/ldconfig.h index e6e7d271ad..24aae5155a 100644 --- a/sysdeps/unix/sysv/linux/riscv/ldconfig.h +++ b/sysdeps/unix/sysv/linux/riscv/ldconfig.h @@ -17,20 +17,3 @@ . */ #include - -#define LD_SO_PREFIX "/lib/ld-linux-" -#define LD_SO_SUFFIX ".so.1" - -#if __riscv_xlen == 64 -# define LD_SO_ABI "riscv64-lp64" -#else -# define LD_SO_ABI "riscv32-ilp32" -#endif - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { LD_SO_PREFIX LD_SO_ABI "d" LD_SO_SUFFIX, FLAG_ELF_LIBC6 }, \ - { LD_SO_PREFIX LD_SO_ABI LD_SO_SUFFIX, FLAG_ELF_LIBC6 }, - -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/s390/ldconfig.h b/sysdeps/unix/sysv/linux/s390/ldconfig.h index 83086ce843..b3fa8ceebe 100644 --- a/sysdeps/unix/sysv/linux/s390/ldconfig.h +++ b/sysdeps/unix/sysv/linux/s390/ldconfig.h @@ -16,10 +16,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld.so.1", FLAG_ELF_LIBC6 }, \ - { "/lib/ld64.so.1", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h b/sysdeps/unix/sysv/linux/x86_64/ldconfig.h index 1089668f09..b3fa8ceebe 100644 --- a/sysdeps/unix/sysv/linux/x86_64/ldconfig.h +++ b/sysdeps/unix/sysv/linux/x86_64/ldconfig.h @@ -16,11 +16,3 @@ . */ #include - -#define SYSDEP_KNOWN_INTERPRETER_NAMES \ - { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, \ - { "/libx32/ld-linux-x32.so.2", FLAG_ELF_LIBC6 }, \ - { "/lib64/ld-linux-x86-64.so.2", FLAG_ELF_LIBC6 }, -#define SYSDEP_KNOWN_LIBRARY_NAMES \ - { "libc.so.6", FLAG_ELF_LIBC6 }, \ - { "libm.so.6", FLAG_ELF_LIBC6 },