Does this address the warning in the RTEMS main_date.c command that popped up with the newlib guard changes?
I am guessing not. Have you looked at that warning when using a toolset with a recent newlib? On Apr 7, 2016 5:58 AM, "Sebastian Huber" < sebastian.hu...@embedded-brains.de> wrote: > Move the kernel dependent parts of <sys/time.h> to new system-specific > header file <machine/_time.h>. Provide an empty default implementation. > Add a specialized implementation for RTEMS. > > Signed-off-by: Sebastian Huber <sebastian.hu...@embedded-brains.de> > --- > newlib/libc/include/machine/_time.h | 3 + > newlib/libc/include/sys/time.h | 151 +------------------ > newlib/libc/sys/rtems/include/machine/_time.h | 199 > ++++++++++++++++++++++++++ > 3 files changed, 204 insertions(+), 149 deletions(-) > create mode 100644 newlib/libc/include/machine/_time.h > create mode 100644 newlib/libc/sys/rtems/include/machine/_time.h > > diff --git a/newlib/libc/include/machine/_time.h > b/newlib/libc/include/machine/_time.h > new file mode 100644 > index 0000000..476760c > --- /dev/null > +++ b/newlib/libc/include/machine/_time.h > @@ -0,0 +1,3 @@ > +#ifndef _SYS_TIME_H_ > +#error "must be included via <sys/time.h>" > +#endif /* !_SYS_TIME_H_ */ > diff --git a/newlib/libc/include/sys/time.h > b/newlib/libc/include/sys/time.h > index 326d1a6..84c2ad2 100644 > --- a/newlib/libc/include/sys/time.h > +++ b/newlib/libc/include/sys/time.h > @@ -251,47 +251,6 @@ tvtosbt(struct timeval _tv) > } > #endif /* __BSD_VISIBLE */ > > -#ifdef _KERNEL > - > -/* Operations on timespecs */ > -#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = > 0) > -#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec) > -#define timespeccmp(tvp, uvp, cmp) > \ > - (((tvp)->tv_sec == (uvp)->tv_sec) ? \ > - ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ > - ((tvp)->tv_sec cmp (uvp)->tv_sec)) > -#define timespecadd(vvp, uvp) > \ > - do { \ > - (vvp)->tv_sec += (uvp)->tv_sec; \ > - (vvp)->tv_nsec += (uvp)->tv_nsec; \ > - if ((vvp)->tv_nsec >= 1000000000) { \ > - (vvp)->tv_sec++; \ > - (vvp)->tv_nsec -= 1000000000; \ > - } \ > - } while (0) > -#define timespecsub(vvp, uvp) > \ > - do { \ > - (vvp)->tv_sec -= (uvp)->tv_sec; \ > - (vvp)->tv_nsec -= (uvp)->tv_nsec; \ > - if ((vvp)->tv_nsec < 0) { \ > - (vvp)->tv_sec--; \ > - (vvp)->tv_nsec += 1000000000; \ > - } \ > - } while (0) > - > -/* Operations on timevals. */ > - > -#define timevalclear(tvp) ((tvp)->tv_sec = > (tvp)->tv_usec = 0) > -#define timevalisset(tvp) ((tvp)->tv_sec || > (tvp)->tv_usec) > -#define timevalcmp(tvp, uvp, cmp) > \ > - (((tvp)->tv_sec == (uvp)->tv_sec) ? \ > - ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ > - ((tvp)->tv_sec cmp (uvp)->tv_sec)) > - > -/* timevaladd and timevalsub are not inlined */ > - > -#endif /* _KERNEL */ > - > /* > * Names of the interval timers, and structure > * defining a timer setting. > @@ -305,116 +264,9 @@ struct itimerval { > struct timeval it_value; /* current value */ > }; > > -#ifdef _KERNEL > - > -/* > - * Kernel to clock driver interface. > - */ > -void inittodr(time_t base); > -void resettodr(void); > - > -extern volatile time_t time_second; > -extern volatile time_t time_uptime; > -extern struct bintime boottimebin; > -extern struct timeval boottime; > -extern struct bintime tc_tick_bt; > -extern sbintime_t tc_tick_sbt; > -extern struct bintime tick_bt; > -extern sbintime_t tick_sbt; > -extern int tc_precexp; > -extern int tc_timepercentage; > -extern struct bintime bt_timethreshold; > -extern struct bintime bt_tickthreshold; > -extern sbintime_t sbt_timethreshold; > -extern sbintime_t sbt_tickthreshold; > - > -/* > - * Functions for looking at our clock: [get]{bin,nano,micro}[up]time() > - * > - * Functions without the "get" prefix returns the best timestamp > - * we can produce in the given format. > - * > - * "bin" == struct bintime == seconds + 64 bit fraction of seconds. > - * "nano" == struct timespec == seconds + nanoseconds. > - * "micro" == struct timeval == seconds + microseconds. > - * > - * Functions containing "up" returns time relative to boot and > - * should be used for calculating time intervals. > - * > - * Functions without "up" returns UTC time. > - * > - * Functions with the "get" prefix returns a less precise result > - * much faster than the functions without "get" prefix and should > - * be used where a precision of 1/hz seconds is acceptable or where > - * performance is priority. (NB: "precision", _not_ "resolution" !) > - */ > - > -void binuptime(struct bintime *bt); > -void nanouptime(struct timespec *tsp); > -void microuptime(struct timeval *tvp); > - > -static __inline sbintime_t > -sbinuptime(void) > -{ > - struct bintime _bt; > - > - binuptime(&_bt); > - return (bttosbt(_bt)); > -} > - > -void bintime(struct bintime *bt); > -void nanotime(struct timespec *tsp); > -void microtime(struct timeval *tvp); > - > -void getbinuptime(struct bintime *bt); > -void getnanouptime(struct timespec *tsp); > -void getmicrouptime(struct timeval *tvp); > - > -static __inline sbintime_t > -getsbinuptime(void) > -{ > - struct bintime _bt; > - > - getbinuptime(&_bt); > - return (bttosbt(_bt)); > -} > - > -void getbintime(struct bintime *bt); > -void getnanotime(struct timespec *tsp); > -void getmicrotime(struct timeval *tvp); > - > -/* Other functions */ > -int itimerdecr(struct itimerval *itp, int usec); > -int itimerfix(struct timeval *tv); > -int ppsratecheck(struct timeval *, int *, int); > -int ratecheck(struct timeval *, const struct timeval *); > -void timevaladd(struct timeval *t1, const struct timeval *t2); > -void timevalsub(struct timeval *t1, const struct timeval *t2); > -int tvtohz(struct timeval *tv); > - > -#define TC_DEFAULTPERC 5 > - > -#define BT2FREQ(bt) > \ > - (((uint64_t)0x8000000000000000 + ((bt)->frac >> 2)) / \ > - ((bt)->frac >> 1)) > - > -#define SBT2FREQ(sbt) ((SBT_1S + ((sbt) >> 1)) / (sbt)) > - > -#define FREQ2BT(freq, bt) > \ > -{ \ > - (bt)->sec = 0; \ > - (bt)->frac = ((uint64_t)0x8000000000000000 / (freq)) << 1; \ > -} > - > -#define TIMESEL(sbt, sbt2) > \ > - (((sbt2) >= sbt_timethreshold) ? \ > - ((*(sbt) = getsbinuptime()), 1) : ((*(sbt) = sbinuptime()), 0)) > - > -#else /* !_KERNEL */ > +#ifndef _KERNEL > #include <time.h> > > -#include <sys/cdefs.h> > - > __BEGIN_DECLS > int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp)); > > @@ -444,5 +296,6 @@ int _EXFUN(_gettimeofday, (struct timeval *__p, void > *__tz)); > __END_DECLS > > #endif /* !_KERNEL */ > +#include <machine/_time.h> > > #endif /* !_SYS_TIME_H_ */ > diff --git a/newlib/libc/sys/rtems/include/machine/_time.h > b/newlib/libc/sys/rtems/include/machine/_time.h > new file mode 100644 > index 0000000..44a220d > --- /dev/null > +++ b/newlib/libc/sys/rtems/include/machine/_time.h > @@ -0,0 +1,199 @@ > +/*- > + * Copyright (c) 1982, 1986, 1993 > + * The Regents of the University of California. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 4. Neither the name of the University nor the names of its contributors > + * may be used to endorse or promote products derived from this > software > + * without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE > LIABLE > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > CONSEQUENTIAL > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, > STRICT > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY > WAY > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. > + * > + * @(#)time.h 8.5 (Berkeley) 5/4/95 > + * $FreeBSD$ > + */ > + > +#ifndef _SYS_TIME_H_ > +#error "must be included via <sys/time.h>" > +#else /* _SYS_TIME_H_ */ > + > +__BEGIN_DECLS > +extern volatile time_t _Timecounter_Time_second; > +extern volatile time_t _Timecounter_Time_uptime; > +extern struct bintime _Timecounter_Boottimebin; > + > +void _Timecounter_Binuptime(struct bintime *); > +void _Timecounter_Nanouptime(struct timespec *); > +void _Timecounter_Microuptime(struct timeval *); > +void _Timecounter_Bintime(struct bintime *); > +void _Timecounter_Nanotime(struct timespec *); > +void _Timecounter_Microtime(struct timeval *); > +void _Timecounter_Getbinuptime(struct bintime *); > +void _Timecounter_Getnanouptime(struct timespec *); > +void _Timecounter_Getmicrouptime(struct timeval *); > +void _Timecounter_Getbintime(struct bintime *); > +void _Timecounter_Getnanotime(struct timespec *); > +void _Timecounter_Getmicrotime(struct timeval *); > +__END_DECLS > + > +#ifdef _KERNEL > + > +/* Operations on timespecs */ > +#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = > 0) > +#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec) > +#define timespeccmp(tvp, uvp, cmp) > \ > + (((tvp)->tv_sec == (uvp)->tv_sec) ? \ > + ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ > + ((tvp)->tv_sec cmp (uvp)->tv_sec)) > +#define timespecadd(vvp, uvp) > \ > + do { \ > + (vvp)->tv_sec += (uvp)->tv_sec; \ > + (vvp)->tv_nsec += (uvp)->tv_nsec; \ > + if ((vvp)->tv_nsec >= 1000000000) { \ > + (vvp)->tv_sec++; \ > + (vvp)->tv_nsec -= 1000000000; \ > + } \ > + } while (0) > +#define timespecsub(vvp, uvp) > \ > + do { \ > + (vvp)->tv_sec -= (uvp)->tv_sec; \ > + (vvp)->tv_nsec -= (uvp)->tv_nsec; \ > + if ((vvp)->tv_nsec < 0) { \ > + (vvp)->tv_sec--; \ > + (vvp)->tv_nsec += 1000000000; \ > + } \ > + } while (0) > + > +/* Operations on timevals. */ > + > +#define timevalclear(tvp) ((tvp)->tv_sec = > (tvp)->tv_usec = 0) > +#define timevalisset(tvp) ((tvp)->tv_sec || > (tvp)->tv_usec) > +#define timevalcmp(tvp, uvp, cmp) > \ > + (((tvp)->tv_sec == (uvp)->tv_sec) ? \ > + ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ > + ((tvp)->tv_sec cmp (uvp)->tv_sec)) > + > +/* timevaladd and timevalsub are not inlined */ > + > +/* > + * Kernel to clock driver interface. > + */ > +void inittodr(time_t base); > +void resettodr(void); > + > +#define time_second _Timecounter_Time_second > +#define time_uptime _Timecounter_Time_uptime > +#define boottimebin _Timecounter_Boottimebin > +extern struct timeval boottime; > +extern struct bintime tc_tick_bt; > +extern sbintime_t tc_tick_sbt; > +extern struct bintime tick_bt; > +extern sbintime_t tick_sbt; > +extern int tc_precexp; > +extern int tc_timepercentage; > +extern struct bintime bt_timethreshold; > +extern struct bintime bt_tickthreshold; > +extern sbintime_t sbt_timethreshold; > +extern sbintime_t sbt_tickthreshold; > + > +/* > + * Functions for looking at our clock: [get]{bin,nano,micro}[up]time() > + * > + * Functions without the "get" prefix returns the best timestamp > + * we can produce in the given format. > + * > + * "bin" == struct bintime == seconds + 64 bit fraction of seconds. > + * "nano" == struct timespec == seconds + nanoseconds. > + * "micro" == struct timeval == seconds + microseconds. > + * > + * Functions containing "up" returns time relative to boot and > + * should be used for calculating time intervals. > + * > + * Functions without "up" returns UTC time. > + * > + * Functions with the "get" prefix returns a less precise result > + * much faster than the functions without "get" prefix and should > + * be used where a precision of 1/hz seconds is acceptable or where > + * performance is priority. (NB: "precision", _not_ "resolution" !) > + */ > + > +#define binuptime(_bt) _Timecounter_Binuptime(_bt) > +#define nanouptime(_tsp) _Timecounter_Nanouptime(_tsp) > +#define microuptime(_tvp) _Timecounter_Microuptime(_tvp) > + > +static __inline sbintime_t > +sbinuptime(void) > +{ > + struct bintime _bt; > + > + binuptime(&_bt); > + return (bttosbt(_bt)); > +} > + > +#define bintime(_bt) _Timecounter_Bintime(_bt) > +#define nanotime(_tsp) _Timecounter_Nanotime(_tsp) > +#define microtime(_tvp) _Timecounter_Microtime(_tvp) > + > +#define getbinuptime(_bt) _Timecounter_Getbinuptime(_bt) > +#define getnanouptime(_tsp) _Timecounter_Getnanouptime(_tsp) > +#define getmicrouptime(_tvp) _Timecounter_Getmicrouptime(_tvp) > + > +static __inline sbintime_t > +getsbinuptime(void) > +{ > + struct bintime _bt; > + > + getbinuptime(&_bt); > + return (bttosbt(_bt)); > +} > + > +#define getbintime(_bt) _Timecounter_Getbintime(_bt) > +#define getnanotime(_tsp) _Timecounter_Getnanotime(_tsp) > +#define getmicrotime(_tvp) _Timecounter_Getmicrotime(_tvp) > + > +/* Other functions */ > +int itimerdecr(struct itimerval *itp, int usec); > +int itimerfix(struct timeval *tv); > +int ppsratecheck(struct timeval *, int *, int); > +int ratecheck(struct timeval *, const struct timeval *); > +void timevaladd(struct timeval *t1, const struct timeval *t2); > +void timevalsub(struct timeval *t1, const struct timeval *t2); > +int tvtohz(struct timeval *tv); > + > +#define TC_DEFAULTPERC 5 > + > +#define BT2FREQ(bt) > \ > + (((uint64_t)0x8000000000000000 + ((bt)->frac >> 2)) / \ > + ((bt)->frac >> 1)) > + > +#define SBT2FREQ(sbt) ((SBT_1S + ((sbt) >> 1)) / (sbt)) > + > +#define FREQ2BT(freq, bt) > \ > +{ \ > + (bt)->sec = 0; \ > + (bt)->frac = ((uint64_t)0x8000000000000000 / (freq)) << 1; \ > +} > + > +#define TIMESEL(sbt, sbt2) > \ > + (((sbt2) >= sbt_timethreshold) ? \ > + ((*(sbt) = getsbinuptime()), 1) : ((*(sbt) = sbinuptime()), 0)) > + > +#endif /* _KERNEL */ > +#endif /* _SYS_TIME_H_ */ > -- > 1.8.4.5 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel