From: Changqing Li <changqing...@windriver.com> To support Y2038 issue, for 32bit system, -D_TIME_BITS=64 is passed to gcc, struct timespec time->tv_sec is 64bit, but size_t is 32bits, so dpdk will compile failed with error: ../git/lib/ethdev/ethdev_trace.h: In function 'rte_eth_trace_timesync_write_time': ../git/lib/eal/include/rte_common.h:498:55: error: size of unnamed array is negative 498 | #define RTE_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
Add a new tracepoint function for type time_t to fix this issue Signed-off-by: Changqing Li <changqing...@windriver.com> --- lib/eal/include/rte_trace_point.h | 4 ++++ lib/ethdev/ethdev_trace.h | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h index 8a317d31d2..6aac4d0191 100644 --- a/lib/eal/include/rte_trace_point.h +++ b/lib/eal/include/rte_trace_point.h @@ -150,6 +150,8 @@ _tp _args \ #define rte_trace_point_emit_ptr(val) /** Tracepoint function payload for string datatype */ #define rte_trace_point_emit_string(val) +/** Tracepoint function payload for time_t datatype */ + #define rte_trace_point_emit_time_t(val) /** * Tracepoint function to capture a blob. * @@ -438,6 +440,7 @@ do { \ #define rte_trace_point_emit_float(in) __rte_trace_point_emit(RTE_STR(in), &in, float) #define rte_trace_point_emit_double(in) __rte_trace_point_emit(RTE_STR(in), &in, double) #define rte_trace_point_emit_ptr(in) __rte_trace_point_emit(RTE_STR(in), &in, uintptr_t) +#define rte_trace_point_emit_time_t(in) __rte_trace_point_emit(RTE_STR(in), &in, time_t) #define rte_trace_point_emit_u64_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, uint64_t) #define rte_trace_point_emit_i64_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int64_t) @@ -452,6 +455,7 @@ do { \ #define rte_trace_point_emit_size_t_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, size_t) #define rte_trace_point_emit_float_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, float) #define rte_trace_point_emit_double_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, double) +#define rte_trace_point_emit_time_t_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, time_t) #endif /* __DOXYGEN__ */ diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index c65b78590a..482befc209 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -1121,7 +1121,7 @@ RTE_TRACE_POINT( RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_time_t(time->tv_sec); rte_trace_point_emit_long(time->tv_nsec); rte_trace_point_emit_int(ret); ) @@ -2151,7 +2151,7 @@ RTE_TRACE_POINT_FP( RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, uint32_t flags, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_time_t(timestamp->tv_sec); rte_trace_point_emit_long(timestamp->tv_nsec); rte_trace_point_emit_u32(flags); rte_trace_point_emit_int(ret); @@ -2163,7 +2163,7 @@ RTE_TRACE_POINT_FP( RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *timestamp, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(timestamp->tv_sec); + rte_trace_point_emit_time_t(timestamp->tv_sec); rte_trace_point_emit_long(timestamp->tv_nsec); rte_trace_point_emit_int(ret); ) @@ -2174,7 +2174,7 @@ RTE_TRACE_POINT_FP( RTE_TRACE_POINT_ARGS(uint16_t port_id, const struct timespec *time, int ret), rte_trace_point_emit_u16(port_id); - rte_trace_point_emit_size_t(time->tv_sec); + rte_trace_point_emit_time_t(time->tv_sec); rte_trace_point_emit_long(time->tv_nsec); rte_trace_point_emit_int(ret); ) -- 2.34.1