Building newlib with clock_gettime()

Brian Inglis Brian.Inglis@SystematicSW.ab.ca
Mon Jan 13 04:51:01 GMT 2025


Depending how your specific RISC-V CPU and support chips implement which 
architectural timing features with the specific timing facilities your RISC-V 
board supports determine what definitions you have to change or provide for your 
drivers and syscalls.

See the Platform and Supervisor Binary interface specifications information on 
timing and timers under:

	https://wiki.freebsd.org/riscv

and you could consider initially targeting the Spike simulator or QEMU emulator 
platforms.

For some timer implemenatation considerations see:

https://www.freertos.org/FreeRTOS_Support_Forum_Archive/August_2019/freertos_CLINT_vs_mtime_in_FreeRTOS_RISC-V_port_2e8d6a0c4fj.html

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retrancher  but when there is no more to cut
                                 -- Antoine de Saint-Exupéry


On 2025-01-08 17:01, Joel Sherrill wrote:
> RTEMS has a robust set of clock services and its own clock_gettime 
> implementation. We do use some FreeBSD kernel level time code which reduces 
> contention for time in SMP systems and integrates well with NTP and PTP. Both of 
> which we have solid support for.
> 
> https://gitlab.rtems.org/rtems/rtos/rtems/-/blob/main/cpukit/posix/src/ 
> clockgettime.c?ref_type=heads <https://gitlab.rtems.org/rtems/rtos/rtems/-/blob/ 
> main/cpukit/posix/src/clockgettime.c?ref_type=heads>
> 
> I checked and the symbol clock_gettime isn't in the built libc.a .
> 
> Not that any of this impacts your explanation. clock_gettime is just one of the 
> methods that may need to be implemented in a target specific way. RTEMS adds a 
> lot ofPOSIX not in newlib and has its own Malloc family implementation, for example.
> 
> --joel
> 
> On Wed, Jan 8, 2025 at 3:43 PM Jeff Johnston <jjohnstn@redhat.com 
> <mailto:jjohnstn@redhat.com>> wrote:
> 
>     Hello,
> 
>     Newlib does not provide an implementation for clock_gettime().  In glibc,
>     for example, the source code uses syscalls to implement this which are not
>     part of the standard newlib syscall set.  Some platforms may define
>     clock_gettime() stubs that simply fail (RTEMS for example).  If you just
>     need to satisfy a link requirement, you can easily create such a stub that
>     fails, otherwise, you will have to implement the function yourself or try to
>     port an implementation from another library (e.g. FreeBSD).
> 
>     -- Jeff J.
> 
>     On Mon, Jan 6, 2025 at 5:32 PM Caden <przcaden@gmail.com
>     <mailto:przcaden@gmail.com>> wrote:
> 
>         Hi!
> 
>         I'm trying to build a RISC-V GNU compiler with /clock_gettime()/
>         provided by newlib. It seems that building the toolchain by default
>         does /not/ enable this function -- looking at the libstdc++ library
>         config settings shows that any symbols regarding /clock_gettime()/ are
>         disabled/./
>         /
>         /
>         I'm wondering if there's anything specific that can be done to have this
>         function provided by newlib.
>         Here's the command that newlib was built with:
> 
>         $ /nobackup/build/riscv-gnu-toolchain/newlib/configure --target=riscv64-
>         unknown-elf --prefix=/nobackup/build/riscv64-unknown-elf --enable-
>         newlib-io-long-double --enable-newlib-io-long-long --enable-newlib-io-
>         c99-formats --enable-newlib-reigster-fini CFLAGS_FOR_TARGET=-O2 -
>         D_POSIX_MODE -ffunction-sections -fdata-sections    -mcmodel=medlow
>         CXXFLAGS_FOR_TARGET=-O2 -D_POSIX_MODE -ffunction-sections -fdata-
>         sections    -mcmodel=medlow


More information about the Newlib mailing list