From: Lukasz Majewski <lukma@denx.de>
To: Joseph Myers <joseph@codesourcery.com>
Cc: Florian Weimer <fweimer@redhat.com>,
Palmer Dabbelt <palmerdabbelt@google.com>,
GNU C Library <libc-alpha@sourceware.org>,
Arnd Bergmann <arnd@arndb.de>, Andreas Schwab <schwab@suse.de>,
Vineet Gupta <Vineet.Gupta1@synopsys.com>,
Helmut Grohne <helmutg@debian.org>, Zong Li <zongbox@gmail.com>,
debian-arm@lists.debian.org,
Alistair Francis <alistair.francis@wdc.com>,
Adhemerval Zanella <adhemerval.zanella@linaro.org>,
"Maciej W. Rozycki" <macro@wdc.com>,
Alistair Francis <alistair23@gmail.com>,
arcml <linux-snps-arc@lists.infradead.org>
Subject: Re: switching ARC to 64-bit time_t (Re: [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64)
Date: Tue, 25 Feb 2020 12:39:45 +0100 [thread overview]
Message-ID: <20200225123945.10ec1c25@jawa> (raw)
In-Reply-To: <alpine.DEB.2.21.2002242353570.23654@digraph.polyomino.org.uk>
[-- Attachment #1.1: Type: text/plain, Size: 5068 bytes --]
Hi Joseph,
Thanks for the detailed explanation.
> On Mon, 24 Feb 2020, Lukasz Majewski wrote:
>
> > I'm probably not aware of something - but as done in the following
> > patch:
> >
> > https://github.com/lmajewski/y2038_glibc/commit/c96eeb73175961c4ac80fdd3b6adc132805387c9
> >
> > I do need to remove librt_hidden_proto / librt_hidden_def to have
> > proper symbols visible when I do want to use redirections.
>
> You'll need to explain the actual problem you see, because
> lib<name>_hidden_proto / lib<name>_hidden_def are correct for any
> symbol that satisfies both of the following properties: (a) it is
> exported from shared lib<name> (whether at a public symbol version or
> version GLIBC_PRIVATE) and (b) it is also used within the library
> that defines it. They are useless but harmless for other symbols.
>
Lets consider for example __mq_timedsend_time64.
With lib<name>_hidden_def/proto kept (NOT removed as in [1]):
GDB:
__GI___mq_timedsend_time64 [*]
(No build errors, linking with test setup works as expected).
(gdb) bt
#0 __libc_do_syscall ()
at../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
#1 0x76fc2696 in __GI___mq_timedsend_time64 (..)
at../sysdeps/unix/sysv/linux/mq_timedsend.c:33
#2 0x76fc271a in __GI___mq_timedsend (..)
at../sysdeps/unix/sysv/linux/mq_timedsend.c:69
#3 0x76fc2668 in mq_send () at ../sysdeps/unix/sysv/linux/mq_send.c:30
The problem is that __mq_timedsend (32 bit version) is called first -
this means that the redirection for _TIME_BITS==64 (which would call
__mq_timedsend_time64) is not working.
With lib<name>_hidden_def/proto removed (as it is now at [1])
#0 __mq_timedsend_time64 (..) at../sysdeps/unix/sysv/linux/mq_timedsend.c33
#1 0x00402bb0 in test_mq_timedsend_onqueue (q=3)
at test_mq_timedsend.c:25
#2 0x00402f28 in test_mq_timedsend () at test_mq_timedsend.c:130
The redirection for _TIME_BITS==64 works as expected.
The structure of time conversion patches (details in [2]):
@ include/time.h
#if __TIMESIZE == 64
# define __mq_timedsend_time64 __mq_timedsend
#else
# include <bits/types/struct___timespec64.h>
extern int __mq_timedsend_time64 (...);
librt_hidden_proto (__mq_timedsend_time64)
#endif
@sysdeps/unix/sysv/linux/mq_timedsend.c
int __mq_timedsend_time64 (...)
{
}
#if __TIMESIZE != 64
librt_hidden_def (__mq_timedsend_time64)
int __mq_timedsend (..)
{
}
#endif
hidden_def (__mq_timedsend)
weak_alias (__mq_timedsend, mq_timedsend) [**]
hidden_weak (mq_timedsend)
It looks to me like the [**] weak_alias () here is the problem as it
does the aliasing for name, which shall be redirected to
__mq_timedsend_time64.
However, when I remove the line [**] - I do see the error:
| In file included from <command-line>:
| ./../include/libc-symbols.h:552:33: error: '__EI_mq_timedsend'
aliased to undefined symbol '__GI_mq_timedsend'
> lib<name>_hidden_proto / lib<name>_hidden_def always need to be used
> together, and always need to have <name> matching the name of the
> shared library with the symbol. In C code, lib<name>_hidden_proto
> causes the function, for both definition and calls, to be redirected
> to an internal, hidden-visibility alias, while lib<name>_hidden_def
> then adds back the exported name as a non-hidden alias to cause it to
> be exported from the shared library in question.
I was not aware of the lib<name>_hidden_def () role to re-export the
symbols again. Thanks for pointing this out.
>
> It's true that the redirection from lib<name>_hidden_proto doesn't
> work when there is another redirection for the same symbol in effect,
Please correct me if I'm wrong, but from the above code snippet it
looks like we do have (when _TIME_SIZE==64 is defined):
librt_hidden_proto (__mq_timedsend_time64)
librt_hidden_def (__mq_timedsend_time64)
hidden_def (__mq_timedsend)
weak_alias (__mq_timedsend, mq_timedsend)
And in exported headers:
# ifdef __USE_TIME_BITS64
# if defined(__REDIRECT)
extern int __REDIRECT (mq_timedsend, (..),
__mq_timedsend_time64);
# else
# define mq_timedsend __mq_timedsend_time64
# endif
# endif
Unfortunately, the final redirection for mq_timedsend symbol is to
__mq_timedsend, not __mq_timedsend_time64.
> but that should not be a concern here (there should be no reason to
> have an asm redirection from __mq_timedreceive_time64 to another
> name, for example).
>
Question:
[*] - If I may ask - the __GI_ prefix is for glibc internal symbol? And
in the same vein __EI_ is for external one?
Links:
[1] -
https://github.com/lmajewski/y2038_glibc/commit/06fe0342696d7c6fe6115f825052fb07bb609216
[2] - https://patchwork.ozlabs.org/patch/1237939/
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
[-- Attachment #2: Type: text/plain, Size: 170 bytes --]
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
next prev parent reply other threads:[~2020-02-25 11:40 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1578824547.git.alistair.francis@wdc.com>
[not found] ` <4e95f95966d8d7c6a8339160dc62d81c1f6a1bfb.1578824547.git.alistair.francis@wdc.com>
2020-02-12 0:14 ` [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Vineet Gupta
2020-02-12 0:14 ` Alistair Francis
2020-02-12 1:30 ` Joseph Myers
2020-02-14 22:39 ` Alistair Francis
2020-02-18 23:05 ` switching ARC to 64-bit time_t (Re: [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64) Vineet Gupta
2020-02-18 23:13 ` Joseph Myers
2020-02-19 23:09 ` Lukasz Majewski
2020-02-19 23:11 ` Lukasz Majewski
2020-02-20 8:31 ` Arnd Bergmann
2020-02-20 9:37 ` Lukasz Majewski
2020-02-20 12:37 ` Arnd Bergmann
2020-02-20 13:14 ` Lukasz Majewski
2020-02-20 14:44 ` Arnd Bergmann
2020-02-20 15:42 ` Lukasz Majewski
2020-02-20 16:08 ` Arnd Bergmann
2020-02-20 16:31 ` Lukasz Majewski
2020-02-24 2:48 ` Viresh Kumar
2020-02-21 19:56 ` Alistair Francis
2020-02-22 8:42 ` Arnd Bergmann
2020-02-24 9:00 ` Lukasz Majewski
2020-02-24 9:46 ` Andreas Schwab
2020-02-24 10:14 ` Lukasz Majewski
2020-02-24 10:23 ` Andreas Schwab
2020-02-24 10:36 ` Lukasz Majewski
2020-02-24 10:42 ` Andreas Schwab
2020-02-24 11:13 ` Lukasz Majewski
2020-02-24 12:41 ` Lukasz Majewski
2020-02-25 0:03 ` Joseph Myers
2020-02-25 11:39 ` Lukasz Majewski [this message]
2020-02-25 14:36 ` Joseph Myers
2020-02-26 13:18 ` Lukasz Majewski
2020-02-26 14:48 ` Joseph Myers
2020-02-26 16:28 ` Lukasz Majewski
2020-02-25 9:03 ` Arnd Bergmann
2020-02-20 16:27 ` Helmut Grohne
2020-03-26 0:25 ` ARC rebootstrap prereq (was Re: switching ARC to 64-bit time_t ) Vineet Gupta
2020-03-26 5:54 ` Helmut Grohne
2020-03-26 11:51 ` Alexey Brodkin
2020-03-26 12:24 ` Helmut Grohne
2020-03-26 12:53 ` Alexey Brodkin
2020-03-26 14:28 ` Helmut Grohne
2020-03-26 19:04 ` Lennart Sorensen
2020-08-26 14:39 ` Vineet Gupta
2020-08-26 15:43 ` Helmut Grohne
2020-08-26 21:16 ` Aurelien Jarno
2021-02-24 20:17 ` Vineet Gupta
2021-02-26 9:47 ` Helmut Grohne
2021-02-26 15:58 ` Vineet Gupta
2021-08-21 17:36 ` Aurelien Jarno
2020-02-12 1:42 ` [RFC v6 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Vineet Gupta
2020-02-12 12:58 ` Arnd Bergmann
2020-02-19 0:56 ` Vineet Gupta
2020-02-19 1:03 ` Alistair Francis
2020-02-19 1:31 ` Vineet Gupta
2020-02-19 8:30 ` Andreas Schwab
2020-02-19 18:42 ` Vineet Gupta
2020-02-19 23:18 ` Lukasz Majewski
2020-02-20 0:26 ` Vineet Gupta
2020-02-20 0:46 ` Joseph Myers
2020-02-20 8:24 ` Arnd Bergmann
2020-02-20 10:28 ` Lukasz Majewski
2020-02-20 14:14 ` Joseph Myers
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=20200225123945.10ec1c25@jawa \
--to=lukma@denx.de \
--cc=Vineet.Gupta1@synopsys.com \
--cc=adhemerval.zanella@linaro.org \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=arnd@arndb.de \
--cc=debian-arm@lists.debian.org \
--cc=fweimer@redhat.com \
--cc=helmutg@debian.org \
--cc=joseph@codesourcery.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=macro@wdc.com \
--cc=palmerdabbelt@google.com \
--cc=schwab@suse.de \
--cc=zongbox@gmail.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