*/
#define __rte_weak __attribute__((__weak__))
+/**
+ * Force symbol to be generated even if it appears to be unused.
+ */
+#define __rte_used __attribute__((used))
+
/*********** Macros to eliminate unused variable warnings ********/
/**
#define RTE_FINI(func) \
RTE_FINI_PRIO(func, LAST)
+/**
+ * Hint never returning function
+ */
+#define __rte_noreturn __attribute__((noreturn))
+
/**
* Force a function to be inlined
*/
*/
#define __rte_noinline __attribute__((noinline))
+/**
+ * Hint function in the hot path
+ */
+#define __rte_hot __attribute__((hot))
+
+/**
+ * Hint function in the cold path
+ */
+#define __rte_cold __attribute__((cold))
+
/*********** Macros for pointer arithmetic ********/
/**
#ifndef container_of
#define container_of(ptr, type, member) __extension__ ({ \
const typeof(((type *)0)->member) *_ptr = (ptr); \
- __attribute__((unused)) type *_target_ptr = \
+ __rte_unused type *_target_ptr = \
(type *)(ptr); \
(type *)(((uintptr_t)_ptr) - offsetof(type, member)); \
})
* printf format characters which will be expanded using any further parameters
* to the function.
*/
-void
+__rte_noreturn void
rte_exit(int exit_code, const char *format, ...)
- __attribute__((noreturn))
__rte_format_printf(2, 3);
#ifdef __cplusplus