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)

Joseph Myers
2020-02-25T14:37:05Z

On Tue, 25 Feb 2020, Lukasz Majewski wrote:

> 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).

What is the actual testcase, and the exact command line used to compile
it?

_TIME_BITS=64 redirection is only relevant for programs built with glibc,
using the installed headers - not for building glibc itself.

lib<name>_hidden_proto is only relevant for building glibc, with its
internal headers - not for programs built with glibc.

If you're talking about a glibc testcase, such tests should be in tests
not tests-internal, so _ISOMAC is defined when they are built, so the
glibc internal headers just wrap the public ones without defining anything
else. In particular, the asm redirections from public headers should be
in effect when tests are compiled, but not the lib<name>_hidden_proto
redirections (but even for internal tests, lib<name>_hidden_proto
shouldn't do anything because the build process knows they are tests not
part of libc).

You should look at the preprocessed source from building the test with
-save-temps and find out why the asm redirection from the public header
isn't being effective (or if it is effective in the .o file for the test,
look at what happens afterwards in glibc). Since lib<name>_hidden_proto
should not be called in the parts of headers included when building a
test, its presence or absence should have no effect on the preprocessed
source of the test.

> hidden_def (__mq_timedsend)
> weak_alias (__mq_timedsend, mq_timedsend) [**]
> hidden_weak (mq_timedsend)

If you have lib<name>_hidden_weak note you also need a corresponding
lib<name>_hidden_proto, for the name of the weak alias. But you probably
don't need to have lib<name>_hidden* for the weak alias at all, just make
sure internal calls use the internal name.

--
Joseph S. Myers
joseph@codesourcery.com