2015-09-17 00:47:48 +03:00
/*
* Copyright ( c ) 1991 , 1992 Paul Kranenburg < pk @ cs . few . eur . nl >
* Copyright ( c ) 1993 Branko Lankester < branko @ hacktic . nl >
* Copyright ( c ) 1993 , 1994 , 1995 , 1996 Rick Sladkey < jrs @ world . std . com >
* Copyright ( c ) 2006 - 2015 Dmitry V . Levin < ldv @ altlinux . org >
2018-12-25 02:46:43 +03:00
* Copyright ( c ) 2015 - 2018 The strace developers .
2015-09-17 00:47:48 +03:00
* All rights reserved .
*
2018-12-10 03:00:00 +03:00
* SPDX - License - Identifier : LGPL - 2.1 - or - later
2015-09-17 00:47:48 +03:00
*/
# include "defs.h"
2015-09-17 00:58:36 +03:00
# include DEF_MPERS_TYPE(struct_timex)
2015-09-17 00:47:48 +03:00
2015-09-17 00:58:36 +03:00
# include <sys/timex.h>
typedef struct timex struct_timex ;
2015-09-17 00:47:48 +03:00
2015-09-17 00:58:36 +03:00
# include MPERS_DEFS
2015-09-17 00:47:48 +03:00
mpers: skip xlat struct definitions in mpers mode
Avoid duplicate definitions of xlat structures in files
compiled in mpers mode.
Each xlat file defines the corresponding xlat struct with
either global or local visibility using the following rules:
- if xlat struct declaration is available in defs.h,
a global definition is provided in regular mode,
and nothing is provided in mpers mode;
- otherwise, if xlat file is included by a mpers source file,
a global definition is provided in regular mode
(unless no mpers mode is supported on this architecture,
in that case, a local definition is provided instead),
and a declaration is provided in mpers mode;
- otherwise, a local definition is provided in regular mode,
and an error message is printed in mpers mode.
Fallback definitions of constants provided by xlat files
remain available in all modes.
* bootstrap: Invoke generate_mpers_am.sh before xlat/gen.sh.
* defs.h (adjtimex_modes, adjtimex_status, sigev_value): Remove.
* generate_mpers_am.sh: Generate mpers_xlat.h.
* Makefile.am (EXTRA_DIST): Add mpers_xlat.h.
* print_sigevent.c: Include "xlat/sigev_value.h" unconditionally.
* print_timex.c: Include "xlat/adjtimex_modes.h" and
"xlat/adjtimex_status.h" unconditionally.
* xlat/gen.sh (cond_xlat): Move printing of fallback definitions ...
(cond_def): ... here.
(gen_header): Check also mpers_xlat.h for global declarations
of xlat structures.
Process input file twice, first time print directives
only, second time print everything.
Wrap struct xlat into #ifdef IN_MPERS ... #else ... #endif.
* xlat/getrandom_flags.in: Cleanup.
2015-11-20 04:43:12 +03:00
# include "xlat/adjtimex_modes.h"
# include "xlat/adjtimex_status.h"
2015-09-17 00:47:48 +03:00
2016-12-22 23:42:50 +03:00
MPERS_PRINTER_DECL ( int , print_timex ,
2016-12-26 13:26:03 +03:00
struct tcb * const tcp , const kernel_ulong_t addr )
2015-09-17 00:47:48 +03:00
{
2015-09-17 00:58:36 +03:00
struct_timex tx ;
2015-09-17 00:47:48 +03:00
if ( umove_or_printaddr ( tcp , addr , & tx ) )
return - 1 ;
tprints ( " {modes= " ) ;
printflags ( adjtimex_modes , tx . modes , " ADJ_??? " ) ;
tprintf ( " , offset=%jd, freq=%jd, maxerror=%ju, esterror=%ju, status= " ,
( intmax_t ) tx . offset , ( intmax_t ) tx . freq ,
( uintmax_t ) tx . maxerror , ( uintmax_t ) tx . esterror ) ;
printflags ( adjtimex_status , tx . status , " STA_??? " ) ;
2016-11-28 07:07:37 +03:00
tprintf ( " , constant=%jd, precision=%ju, tolerance=%jd, time= " ,
2015-09-17 00:47:48 +03:00
( intmax_t ) tx . constant , ( uintmax_t ) tx . precision ,
( intmax_t ) tx . tolerance ) ;
2016-11-28 07:07:37 +03:00
MPERS_FUNC_NAME ( print_struct_timeval ) ( & tx . time ) ;
2015-09-17 00:47:48 +03:00
tprintf ( " , tick=%jd, ppsfreq=%jd, jitter=%jd " ,
( intmax_t ) tx . tick , ( intmax_t ) tx . ppsfreq , ( intmax_t ) tx . jitter ) ;
tprintf ( " , shift=%d, stabil=%jd, jitcnt=%jd " ,
tx . shift , ( intmax_t ) tx . stabil , ( intmax_t ) tx . jitcnt ) ;
tprintf ( " , calcnt=%jd, errcnt=%jd, stbcnt=%jd " ,
( intmax_t ) tx . calcnt , ( intmax_t ) tx . errcnt , ( intmax_t ) tx . stbcnt ) ;
2015-09-17 02:15:55 +03:00
# ifdef HAVE_STRUCT_TIMEX_TAI
tprintf ( " , tai=%d " , tx . tai ) ;
# endif
2015-09-17 00:47:48 +03:00
tprints ( " } " ) ;
return 0 ;
}