From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 1B7173858437 for ; Wed, 23 Feb 2022 22:18:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1B7173858437 Received: from pps.filterd (m0187473.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 21NLd9RK018314 for ; Wed, 23 Feb 2022 22:18:01 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3edpjutqpp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 23 Feb 2022 22:18:00 +0000 Received: from m0187473.ppops.net (m0187473.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 21NMC7DV038504 for ; Wed, 23 Feb 2022 22:18:00 GMT Received: from ppma03dal.us.ibm.com (b.bd.3ea9.ip4.static.sl-reverse.com [169.62.189.11]) by mx0a-001b2d01.pphosted.com with ESMTP id 3edpjutqpd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 23 Feb 2022 22:18:00 +0000 Received: from pps.filterd (ppma03dal.us.ibm.com [127.0.0.1]) by ppma03dal.us.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 21NME8xk030786; Wed, 23 Feb 2022 22:17:59 GMT Received: from b01cxnp23034.gho.pok.ibm.com (b01cxnp23034.gho.pok.ibm.com [9.57.198.29]) by ppma03dal.us.ibm.com with ESMTP id 3ear6c21m7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 23 Feb 2022 22:17:59 +0000 Received: from b01ledav006.gho.pok.ibm.com (b01ledav006.gho.pok.ibm.com [9.57.199.111]) by b01cxnp23034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 21NMHvYi55640458 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 23 Feb 2022 22:17:57 GMT Received: from b01ledav006.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C22A0AC05B; Wed, 23 Feb 2022 22:17:57 +0000 (GMT) Received: from b01ledav006.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 66BCAAC059; Wed, 23 Feb 2022 22:17:56 +0000 (GMT) Received: from workbox (unknown [9.160.111.131]) by b01ledav006.gho.pok.ibm.com (Postfix) with ESMTPS; Wed, 23 Feb 2022 22:17:56 +0000 (GMT) Date: Wed, 23 Feb 2022 19:17:42 -0300 From: Raoni Fassina Firmino To: "Lucas A. M. Magalhaes" Cc: libc-alpha@sourceware.org, fweimer@redhat.com, tuliom@ibm.com Subject: Re: [RFC] Remove special flags of libc.5.so and libc.4.so Message-ID: <20220223221742.kmjpdoi3zia564xd@workbox> Mail-Followup-To: "Lucas A. M. Magalhaes" , libc-alpha@sourceware.org, fweimer@redhat.com, tuliom@ibm.com References: <87r1c9rmlz.fsf@oldenburg.str.redhat.com> <20211222153151.162136-1-lamm@linux.ibm.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20211222153151.162136-1-lamm@linux.ibm.com> X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: VOX7Nq9FsMeLbPU9L1b09RP37_dr5SqW X-Proofpoint-GUID: gBhSHUs576Cj64lc81ucxHeqsnl4L3LW 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.816,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-02-23_09,2022-02-23_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 suspectscore=0 adultscore=0 clxscore=1015 mlxscore=0 malwarescore=0 bulkscore=0 spamscore=0 phishscore=0 mlxlogscore=999 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2201110000 definitions=main-2202230124 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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-List-Received-Date: Wed, 23 Feb 2022 22:18:05 -0000 While testing Lucas previous patch I decided to test this one too, so I tested this on top of master without regression in the following configurations: powerpc-linux-gnu powerpc64-linux-gnu (with -m64 and with -m32) powerpc64le-linux-gnu ppc64le-redhat-linux x86_64-linux-gnu (with -m64 and with -m32 with all the other flags to build 32bits) o/ Raoni On Wed, Dec 22, 2021 at 12:31:51PM -0300, AL glibc-alpha wrote: > 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 }, > -- > 2.31.1 >