aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2021-12-29 10:20:46 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2022-01-17 10:57:09 -0300
commit9fe6f6363886aae6b2b210cae3ed1f5921299083 (patch)
treed601541a207382c53aa7dfd6ccc256805ec34294 /elf
parentcedd498dbc090e39a9b3224f4c53ea98da049f40 (diff)
downloadglibc-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.c16
-rw-r--r--elf/chroot_canon.c4
-rw-r--r--elf/ldconfig.c42
-rw-r--r--elf/readlib.c6
-rw-r--r--elf/sln.c4
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);
diff --git a/elf/sln.c b/elf/sln.c
index 00f8f7c..5347338 100644
--- a/elf/sln.c
+++ b/elf/sln.c
@@ -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))
{