mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: [RFC] final time64 switch-over patch series
Date: Fri, 9 Aug 2019 12:30:21 -0400	[thread overview]
Message-ID: <20190809163021.GJ9017@brightrain.aerifal.cx> (raw)
In-Reply-To: <20190804043109.GL9017@brightrain.aerifal.cx>

[-- Attachment #1: Type: text/plain, Size: 1432 bytes --]

On Sun, Aug 04, 2019 at 12:31:09AM -0400, Rich Felker wrote:
> On Fri, Aug 02, 2019 at 05:44:33PM -0400, Rich Felker wrote:
> > >From 3c6bde03ecf2aa7dac605f0a55a1be201f3d4c5f Mon Sep 17 00:00:00 2001
> > From: Rich Felker <dalias@aerifal.cx>
> > Date: Fri, 2 Aug 2019 15:41:27 -0400
> > Subject: [PATCH 5/5] [RFC] [POC] switch i386 to 64-bit time_t
> > 
> > this is a proof of concept for converting one 32-bit arch, i386, to
> > 64-bit time_t. known issues:
> > 
> > 1. the switchover of timespec padding is a hack, and needs to be done
> > right, but that involves making alltypes.h aware of endianness, which
> > probably should have been done a long time ago anyway and would get
> > rid of inappropriate inclusion of <endian.h> in some places.
> > 
> > 2. the rusage, utmpx, and timex structs are not correct with regard to
> > ABI or functionality. they need to be fixed before this is safe to
> > use.
> > 
> > 3. Makefile change should be its own thing.
> > 
> > there are likely a lot more problems.
> 
> Add a significant incomplete prerequisite I forgot about: dlsym. There
> needs to be a redirection for dlsym, and 32-bit archs need a second
> asm entry point for __dlsym_time64 which first checks the symbol name
> against the list of time64 redirections and rewrites the request if
> it's a match.

For reference, here's the first draft of the redirection. The worst
part of it is the large relro string table.

Rich

[-- Attachment #2: dlsym_redir_time64.c --]
[-- Type: text/plain, Size: 3034 bytes --]

#include <dlfcn.h>
#include <string.h>
#include <stdlib.h>
#include "dynlink.h"

const char *const mapping[][2] = {
{ "adjtime", "__adjtime64" },
{ "adjtimex", "__adjtimex_time64" },
{ "aio_suspend", "__aio_suspend_time64" },
{ "clock_adjtime", "__clock_adjtime64" },
{ "clock_getres", "__clock_getres_time64" },
{ "clock_gettime", "__clock_gettime64" },
{ "clock_nanosleep", "__clock_nanosleep_time64" },
{ "clock_settime", "__clock_settime64" },
{ "cnd_timedwait", "__cnd_timedwait_time64" },
{ "ctime", "__ctime64" },
{ "ctime_r", "__ctime64_r" },
{ "difftime", "__difftime64" },
{ "dlsym", "__dlsym_time64" },
{ "fstat", "__fstat_time64" },
{ "fstatat", "__fstatat_time64" },
{ "ftime", "__ftime64" },
{ "futimens", "__futimens_time64" },
{ "futimes", "__futimes_time64" },
{ "futimesat", "__futimesat_time64" },
{ "getitimer", "__getitimer_time64" },
{ "getrusage", "__getrusage_time64" },
{ "gettimeofday", "__gettimeofday_time64" },
{ "gmtime", "__gmtime64" },
{ "gmtime_r", "__gmtime64_r" },
{ "localtime", "__localtime64" },
{ "localtime_r", "__localtime64_r" },
{ "lstat", "__lstat_time64" },
{ "lutimes", "__lutimes_time64" },
{ "mktime", "__mktime64" },
{ "mq_timedreceive", "__mq_timedreceive_time64" },
{ "mq_timedsend", "__mq_timedsend_time64" },
{ "mtx_timedlock", "__mtx_timedlock_time64" },
{ "nanosleep", "__nanosleep_time64" },
{ "ppoll", "__ppoll_time64" },
{ "pselect", "__pselect_time64" },
{ "pthread_cond_timedwait", "__pthread_cond_timedwait_time64" },
{ "pthread_mutex_timedlock", "__pthread_mutex_timedlock_time64" },
{ "pthread_rwlock_timedrdlock", "__pthread_rwlock_timedrdlock_time64" },
{ "pthread_rwlock_timedwrlock", "__pthread_rwlock_timedwrlock_time64" },
{ "pthread_timedjoin_np", "__pthread_timedjoin_np_time64" },
{ "recvmmsg", "__recvmmsg_time64" },
{ "sched_rr_get_interval", "__sched_rr_get_interval_time64" },
{ "select", "__select_time64" },
{ "sem_timedwait", "__sem_timedwait_time64" },
{ "semtimedop", "__semtimedop_time64" },
{ "setitimer", "__setitimer_time64" },
{ "settimeofday", "__settimeofday_time64" },
{ "sigtimedwait", "__sigtimedwait_time64" },
{ "stat", "__stat_time64" },
{ "stime", "__stime64" },
{ "thrd_sleep", "__thrd_sleep_time64" },
{ "time", "__time64" },
{ "timegm", "__timegm_time64" },
{ "timer_gettime", "__timer_gettime64" },
{ "timer_settime", "__timer_settime64" },
{ "timerfd_gettime", "__timerfd_gettime64" },
{ "timerfd_settime", "__timerfd_settime64" },
{ "timespec_get", "__timespec_get_time64" },
{ "utime", "__utime64" },
{ "utimensat", "__utimensat_time64" },
{ "utimes", "__utimes_time64" },
{ "wait3", "__wait3_time64" },
{ "wait4", "__wait4_time64" },
};

static int cmp(const void *a, const void *b)
{
	return strcmp(*(const char *const *)a, *(const char *const *)b);
}

hidden void *__dlsym_redir_time64(void *restrict p, const char *restrict s, void *restrict ra)
{
	const char *const *map = bsearch(&(const char *const[]){s, 0}, mapping,
		sizeof mapping/sizeof mapping[0],
		sizeof mapping[0], cmp);
	return __dlsym(p, map ? map[1] : s, ra);
}

  reply	other threads:[~2019-08-09 16:30 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-02 21:44 Rich Felker
2019-08-04  4:31 ` Rich Felker
2019-08-09 16:30   ` Rich Felker [this message]
2019-08-09 17:00     ` Rich Felker
2019-08-04  4:33 ` Rich Felker
2019-08-04 18:11   ` Rich Felker
2019-08-09 14:48 ` Rich Felker
2019-08-14 23:55 ` Rich Felker
2019-08-15  0:13   ` Rich Felker
2019-08-15  0:30     ` Rich Felker

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=20190809163021.GJ9017@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).