From dcb97646477b0a5a6e62245c6711d667e84658b7 Mon Sep 17 00:00:00 2001 From: corvus Date: Mon, 31 Jan 2011 17:39:23 +0000 Subject: [PATCH] added include file for auto-linking to sim_posix git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2639 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/PiOS.posix/inc/pios_initcall.h | 65 +++++++++++++++++++++++++++ flight/PiOS.posix/pios.h | 5 ++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 flight/PiOS.posix/inc/pios_initcall.h diff --git a/flight/PiOS.posix/inc/pios_initcall.h b/flight/PiOS.posix/inc/pios_initcall.h new file mode 100644 index 000000000..7edad6283 --- /dev/null +++ b/flight/PiOS.posix/inc/pios_initcall.h @@ -0,0 +1,65 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Initcall infrastructure + * @{ + * @addtogroup PIOS_INITCALL Generic Initcall Macros + * @brief Initcall Macros + * @{ + * + * @file pios_initcall.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2011. + * @brief Initcall header + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PIOS_INITCALL_H +#define PIOS_INITCALL_H + +/* + * This implementation is heavily based on the Linux Kernel initcall + * infrastructure: + * http://lxr.linux.no/#linux/include/linux/init.h + * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=include/linux/init.h + */ + +/* + * Used for initialization calls.. + */ +typedef int32_t (*initcall_t)(void); + +/* initcalls are now grouped by functionality into separate + * subsections. Ordering inside the subsections is determined + * by link order. + * + * The `id' arg to __define_initcall() is needed so that multiple initcalls + * can point at the same handler without causing duplicate-symbol build errors. + */ + +#define __define_initcall(level,fn,id) \ + static initcall_t __initcall_##fn##id __attribute__((__used__)) \ + __attribute__((__section__(".initcall" level ".init"))) = fn + +#define uavobj_initcall(fn) __define_initcall("uavobj",fn,1) + +#endif /* PIOS_INITCALL_H */ + +/** + * @} + * @} + */ diff --git a/flight/PiOS.posix/pios.h b/flight/PiOS.posix/pios.h index b014b938b..679296891 100644 --- a/flight/PiOS.posix/pios.h +++ b/flight/PiOS.posix/pios.h @@ -48,6 +48,9 @@ #include #include +/* Generic initcall infrastructure */ +#include "pios_initcall.h" + /* PIOS Board Specific Device Configuration */ #include "pios_board_posix.h" @@ -59,7 +62,7 @@ #include #include #include -#include +#include #define NELEMENTS(x) (sizeof(x) / sizeof(*(x)))