public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Raoni Fassina Firmino <raoni@linux.ibm.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: "Lucas A. M. Magalhaes" <lamm@linux.ibm.com>,
	libc-alpha@sourceware.org, fweimer@redhat.com, tuliom@ibm.com
Subject: Re: [RFC] Remove special flags of libc.5.so and libc.4.so
Date: Wed, 2 Mar 2022 16:37:14 -0300	[thread overview]
Message-ID: <20220302193714.5zvd635xjpbzjfc2@workbox> (raw)
In-Reply-To: <a7886ef5-29e6-4a34-fb4c-74d8877b105b@linaro.org>

On Tue, Jan 11, 2022 at 04:22:43PM -0300, AL glibc-alpha wrote:
> 
> 
> On 22/12/2021 12:31, Lucas A. M. Magalhaes via Libc-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.
> 
> I think it makes sense to stop support libc.4 and libc.5 and assume
> FLAG_ELF_LIBC6 by ldconfig.
> 
> I also think it should be safe to just get rid of the arch-specific
> SYSDEP_KNOWN_INTERPRETER_NAMES, at least in theory it should not be
> used by the cache (so there is not need to actually classify it).

Lucas's RFC already removed it for a bunch of architectures, only
leaving i386, aarch64 and mips64, and If my grep did not failed me It
seems like the only uses of YSDEP_KNOWN_LIBRARY_NAMES and
SYSDEP_KNOWN_INTERPRETER_NAMES were in known_libs and interpreters
respectively, both removed in the RFC, so it seems that definitions can
be safely removed (in the context of the RFC).

Not sure if there is a need for more opinions or consensus about this
RFC's idea and approach to move forward with a proper patch for review.


o/
Raoni

> 
> > ---
> >  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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 @@
> >     <https://www.gnu.org/licenses/>.  */
> >  
> >  #include <sysdeps/generic/ldconfig.h>
> > -
> > -#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 },

  reply	other threads:[~2022-03-02 19:37 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-22 21:12 [PATCH] powerpc: Use the correct flag for 32-bit known libraries Lucas A. M. Magalhaes
2021-10-25 18:22 ` Florian Weimer
2021-12-22 15:31   ` [RFC] Remove special flags of libc.5.so and libc.4.so Lucas A. M. Magalhaes
2022-01-10 19:21     ` Lucas A. M. Magalhaes
2022-01-11 19:22     ` Adhemerval Zanella
2022-03-02 19:37       ` Raoni Fassina Firmino [this message]
2022-03-04 18:38         ` Adhemerval Zanella
2022-02-23 22:17     ` Raoni Fassina Firmino
2021-11-04 18:10 ` [PATCH] powerpc: Use FLAG_ELF_LIBC6 for 32-bit known libraries Lucas A. M. Magalhaes
2021-12-03 12:40   ` Lucas A. M. Magalhaes
2021-12-03 14:17   ` Florian Weimer
2021-12-03 14:51   ` Adhemerval Zanella
2022-03-02 19:30     ` Raoni Fassina Firmino
2022-03-04 18:49       ` Adhemerval Zanella
2022-02-23 22:09   ` Raoni Fassina Firmino

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=20220302193714.5zvd635xjpbzjfc2@workbox \
    --to=raoni@linux.ibm.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=fweimer@redhat.com \
    --cc=lamm@linux.ibm.com \
    --cc=libc-alpha@sourceware.org \
    --cc=tuliom@ibm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).