diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-12-29 10:20:46 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-01-17 10:57:09 -0300 |
commit | 9fe6f6363886aae6b2b210cae3ed1f5921299083 (patch) | |
tree | d601541a207382c53aa7dfd6ccc256805ec34294 /elf | |
parent | cedd498dbc090e39a9b3224f4c53ea98da049f40 (diff) | |
download | glibc-9fe6f6363886aae6b2b210cae3ed1f5921299083.zip glibc-9fe6f6363886aae6b2b210cae3ed1f5921299083.tar.gz glibc-9fe6f6363886aae6b2b210cae3ed1f5921299083.tar.bz2 |
elf: Fix 64 time_t support for installed statically binaries
The usage of internal static symbol for statically linked binaries
does not work correctly for objects built with -D_TIME_BITS=64,
since the internal definition does not provide the expected aliases.
This patch makes it to use the default stat functions instead (which
uses the default 64 time_t alias and types).
Checked on i686-linux-gnu.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'elf')
-rw-r--r-- | elf/cache.c | 16 | ||||
-rw-r--r-- | elf/chroot_canon.c | 4 | ||||
-rw-r--r-- | elf/ldconfig.c | 42 | ||||
-rw-r--r-- | elf/readlib.c | 6 | ||||
-rw-r--r-- | elf/sln.c | 4 |
5 files changed, 36 insertions, 36 deletions
diff --git a/elf/cache.c b/elf/cache.c index 15a5b74..dbf4c83 100644 --- a/elf/cache.c +++ b/elf/cache.c @@ -318,8 +318,8 @@ print_cache (const char *cache_name) if (fd < 0) error (EXIT_FAILURE, errno, _("Can't open cache file %s\n"), cache_name); - struct stat64 st; - if (__fstat64 (fd, &st) < 0 + struct stat st; + if (fstat (fd, &st) < 0 /* No need to map the file if it is empty. */ || st.st_size == 0) { @@ -932,7 +932,7 @@ init_aux_cache (void) } int -search_aux_cache (struct stat64 *stat_buf, int *flags, +search_aux_cache (struct stat *stat_buf, int *flags, unsigned int *osversion, unsigned int *isa_level, char **soname) { @@ -994,7 +994,7 @@ insert_to_aux_cache (struct aux_cache_entry_id *id, int flags, } void -add_to_aux_cache (struct stat64 *stat_buf, int flags, +add_to_aux_cache (struct stat *stat_buf, int flags, unsigned int osversion, unsigned int isa_level, const char *soname) { @@ -1017,8 +1017,8 @@ load_aux_cache (const char *aux_cache_name) return; } - struct stat64 st; - if (__fstat64 (fd, &st) < 0 || st.st_size < sizeof (struct aux_cache_file)) + struct stat st; + if (fstat (fd, &st) < 0 || st.st_size < sizeof (struct aux_cache_file)) { close (fd); init_aux_cache (); @@ -1134,8 +1134,8 @@ save_aux_cache (const char *aux_cache_name) char *dir = strdupa (aux_cache_name); dir = dirname (dir); - struct stat64 st; - if (stat64 (dir, &st) < 0) + struct stat st; + if (stat (dir, &st) < 0) { if (mkdir (dir, 0700) < 0) goto out_fail; diff --git a/elf/chroot_canon.c b/elf/chroot_canon.c index c7f12ca..e5d7518 100644 --- a/elf/chroot_canon.c +++ b/elf/chroot_canon.c @@ -67,7 +67,7 @@ chroot_canon (const char *chroot, const char *name) for (start = end = name; *start; start = end) { - struct stat64 st; + struct stat st; /* Skip sequence of multiple path-separators. */ while (*start == '/') @@ -114,7 +114,7 @@ chroot_canon (const char *chroot, const char *name) dest = mempcpy (dest, start, end - start); *dest = '\0'; - if (lstat64 (rpath, &st) < 0) + if (lstat (rpath, &st) < 0) { if (*end == '\0') goto done; diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 057c3dd..d14633f 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -337,7 +337,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ inode data from *ST. */ static struct dir_entry * new_sub_entry (const struct dir_entry *entry, const char *path, - const struct stat64 *st) + const struct stat *st) { struct dir_entry *new_entry = xmalloc (sizeof (struct dir_entry)); new_entry->from_file = entry->from_file; @@ -427,8 +427,8 @@ add_glibc_hwcaps_subdirectories (struct dir_entry *entry, const char *path) continue; /* See if this entry eventually resolves to a directory. */ - struct stat64 st; - if (fstatat64 (dirfd (dir), e->d_name, &st, 0) < 0) + struct stat st; + if (fstatat (dirfd (dir), e->d_name, &st, 0) < 0) /* Ignore unreadable entries. */ continue; @@ -512,8 +512,8 @@ add_dir_1 (const char *line, const char *from_file, int from_line) if (opt_chroot != NULL) path = chroot_canon (opt_chroot, path); - struct stat64 stat_buf; - if (path == NULL || stat64 (path, &stat_buf)) + struct stat stat_buf; + if (path == NULL || stat (path, &stat_buf)) { if (opt_verbose) error (0, errno, _("Can't stat %s"), entry->path); @@ -541,15 +541,15 @@ add_dir (const char *line) } static int -chroot_stat (const char *real_path, const char *path, struct stat64 *st) +chroot_stat (const char *real_path, const char *path, struct stat *st) { int ret; char *canon_path; if (!opt_chroot) - return stat64 (real_path, st); + return stat (real_path, st); - ret = lstat64 (real_path, st); + ret = lstat (real_path, st); if (ret || !S_ISLNK (st->st_mode)) return ret; @@ -557,7 +557,7 @@ chroot_stat (const char *real_path, const char *path, struct stat64 *st) if (canon_path == NULL) return -1; - ret = stat64 (canon_path, st); + ret = stat (canon_path, st); free (canon_path); return ret; } @@ -569,7 +569,7 @@ create_links (const char *real_path, const char *path, const char *libname, { char *full_libname, *full_soname; char *real_full_libname, *real_full_soname; - struct stat64 stat_lib, stat_so, lstat_so; + struct stat stat_lib, stat_so, lstat_so; int do_link = 1; int do_remove = 1; /* XXX: The logics in this function should be simplified. */ @@ -604,7 +604,7 @@ create_links (const char *real_path, const char *path, const char *libname, && stat_lib.st_ino == stat_so.st_ino) /* Link is already correct. */ do_link = 0; - else if (lstat64 (full_soname, &lstat_so) == 0 + else if (lstat (full_soname, &lstat_so) == 0 && !S_ISLNK (lstat_so.st_mode)) { error (0, 0, _("%s is not a symbolic link\n"), full_soname); @@ -612,7 +612,7 @@ create_links (const char *real_path, const char *path, const char *libname, do_remove = 0; } } - else if (lstat64 (real_full_soname, &lstat_so) != 0 + else if (lstat (real_full_soname, &lstat_so) != 0 || !S_ISLNK (lstat_so.st_mode)) /* Unless it is a stale symlink, there is no need to remove. */ do_remove = 0; @@ -656,7 +656,7 @@ manual_link (char *library) char *real_library; char *libname; char *soname; - struct stat64 stat_buf; + struct stat stat_buf; int flag; unsigned int osversion; unsigned int isa_level; @@ -710,7 +710,7 @@ manual_link (char *library) } /* Do some sanity checks first. */ - if (lstat64 (real_library, &stat_buf)) + if (lstat (real_library, &stat_buf)) { error (0, errno, _("Cannot lstat %s"), library); goto out; @@ -885,18 +885,18 @@ search_dir (const struct dir_entry *entry) sprintf (real_file_name, "%s/%s", dir_name, direntry->d_name); } - struct stat64 lstat_buf; + struct stat lstat_buf; /* We optimize and try to do the lstat call only if needed. */ if (direntry->d_type != DT_UNKNOWN) lstat_buf.st_mode = DTTOIF (direntry->d_type); else - if (__glibc_unlikely (lstat64 (real_file_name, &lstat_buf))) + if (__glibc_unlikely (lstat (real_file_name, &lstat_buf))) { error (0, errno, _("Cannot lstat %s"), file_name); continue; } - struct stat64 stat_buf; + struct stat stat_buf; bool is_dir; int is_link = S_ISLNK (lstat_buf.st_mode); if (is_link) @@ -914,7 +914,7 @@ search_dir (const struct dir_entry *entry) continue; } } - if (__glibc_unlikely (stat64 (target_name, &stat_buf))) + if (__glibc_unlikely (stat (target_name, &stat_buf))) { if (opt_verbose) error (0, errno, _("Cannot stat %s"), file_name); @@ -950,7 +950,7 @@ search_dir (const struct dir_entry *entry) { if (!is_link && direntry->d_type != DT_UNKNOWN - && __builtin_expect (lstat64 (real_file_name, &lstat_buf), 0)) + && __builtin_expect (lstat (real_file_name, &lstat_buf), 0)) { error (0, errno, _("Cannot lstat %s"), file_name); continue; @@ -979,10 +979,10 @@ search_dir (const struct dir_entry *entry) else real_name = real_file_name; - /* Call lstat64 if not done yet. */ + /* Call lstat if not done yet. */ if (!is_link && direntry->d_type != DT_UNKNOWN - && __builtin_expect (lstat64 (real_file_name, &lstat_buf), 0)) + && __builtin_expect (lstat (real_file_name, &lstat_buf), 0)) { error (0, errno, _("Cannot lstat %s"), file_name); continue; diff --git a/elf/readlib.c b/elf/readlib.c index 05c1577..3651dcd 100644 --- a/elf/readlib.c +++ b/elf/readlib.c @@ -74,10 +74,10 @@ int process_file (const char *real_file_name, const char *file_name, const char *lib, int *flag, unsigned int *osversion, unsigned int *isa_level, char **soname, int is_link, - struct stat64 *stat_buf) + struct stat *stat_buf) { FILE *file; - struct stat64 statbuf; + struct stat statbuf; void *file_contents; int ret; ElfW(Ehdr) *elf_header; @@ -97,7 +97,7 @@ process_file (const char *real_file_name, const char *file_name, return 1; } - if (fstat64 (fileno (file), &statbuf) < 0) + if (fstat (fileno (file), &statbuf) < 0) { error (0, 0, _("Cannot fstat file %s.\n"), file_name); fclose (file); @@ -153,11 +153,11 @@ makesymlinks (const char *file) static int makesymlink (const char *src, const char *dest) { - struct stat64 stats; + struct stat stats; const char *error; /* Destination must not be a directory. */ - if (lstat64 (dest, &stats) == 0) + if (lstat (dest, &stats) == 0) { if (S_ISDIR (stats.st_mode)) { |