Message ID | 20211222153151.162136-1-lamm@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | [RFC] Remove special flags of libc.5.so and libc.4.so | expand |
Ping. Quoting Lucas A. M. Magalhaes via Libc-alpha (2021-12-22 12:31:51) > 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 @@ > <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 }, > -- > 2.31.1 >
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). > --- > 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 },
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 @@ > <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 }, > -- > 2.31.1 >
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 },
On 02/03/2022 16:37, Raoni Fassina Firmino wrote: > 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. > > I think the rationale of the patch is ok, it just need the the SYSDEP_KNOWN_LIBRARY_NAMES and SYSDEP_KNOWN_INTERPRETER_NAMES cleanup for aarch64, i386, and mips64.
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 },