libgloss/arm clock [PATCH]
Jeff Johnston
jjohnstn@redhat.com
Wed Nov 30 23:45:00 GMT 2005
Patch checked in with minor modification (I added a prototype for _clock
as was done for _isatty).
-- Jeff J.
Shaun Jackman wrote:
> This patch provides clock, sleep, and usleep for libgloss/arm. Please apply.
>
> Cheers,
> Shaun
>
> 2005-11-28 Shaun Jackman <sjackman@gmail.com>
>
> * arm/libcfunc.c (clock, sleep, usleep): New function.
> * arm/syscalls.c (_clock): New function.
> (_times): Call clock.
>
> Index: arm/libcfunc.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/libcfunc.c,v
> retrieving revision 1.5
> diff -u -r1.5 libcfunc.c
> --- arm/libcfunc.c 17 Nov 2005 18:56:41 -0000 1.5
> +++ arm/libcfunc.c 28 Nov 2005 20:18:25 -0000
> @@ -43,6 +43,12 @@
> return 0;
> }
>
> +clock_t __attribute__((weak))
> +clock (void)
> +{
> + return _clock();
> +}
> +
> int _isatty(int fildes);
> int __attribute__((weak))
> isatty(int fildes)
> @@ -56,3 +62,26 @@
> errno = ENOSYS;
> return -1;
> }
> +
> +#include <sys/types.h>
> +#include <time.h>
> +
> +unsigned __attribute__((weak))
> +sleep(unsigned seconds)
> +{
> + clock_t t0 = _clock();
> + clock_t dt = seconds * CLOCKS_PER_SEC;
> +
> + while (_clock() - t0 < dt);
> + return 0;
> +}
> +
> +int __attribute__((weak))
> +usleep(useconds_t useconds)
> +{
> + clock_t t0 = _clock();
> + clock_t dt = useconds / (1000000/CLOCKS_PER_SEC);
> +
> + while (_clock() - t0 < dt);
> + return 0;
> +}
> Index: arm/syscalls.c
> ===================================================================
> RCS file: /cvs/src/src/libgloss/arm/syscalls.c,v
> retrieving revision 1.7
> diff -u -r1.7 syscalls.c
> --- arm/syscalls.c 16 Aug 2005 18:05:35 -0000 1.7
> +++ arm/syscalls.c 28 Nov 2005 20:18:25 -0000
> @@ -596,8 +596,8 @@
> }
>
> /* Return a clock that ticks at 100Hz. */
> -clock_t
> -_times (struct tms * tp)
> +clock_t
> +_clock(void)
> {
> clock_t timeval;
>
> @@ -606,6 +606,14 @@
> #else
> asm ("swi %a1; mov %0, r0" : "=r" (timeval): "i" (SWI_Clock) : "r0");
> #endif
> + return timeval;
> +}
> +
> +/* Return a clock that ticks at 100Hz. */
> +clock_t
> +_times (struct tms * tp)
> +{
> + clock_t timeval = _clock();
>
> if (tp)
> {
More information about the Newlib
mailing list