Module: xenomai-3 Branch: master Commit: 1d46b59eda88933b2af4d255b549bf7d2e6f5f1a URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=1d46b59eda88933b2af4d255b549bf7d2e6f5f1a
Author: Philippe Gerum <r...@xenomai.org> Date: Thu Jan 26 15:04:37 2017 +0100 lib/boilerplate: bootstrap: fix Blackfin build The bootstrap module object is built in two forms: - in static object form, to be glued to the main executable, which should include a wrapper interposing on the main() routine for auto-init purpose. Such wrapper is activated when symbol wrapping is enabled at link time (--wrap). - in dynamic object form, to be included in a shared library target which enables the auto-init feature. This form should not include any wrapper to a main() routine - which does not exist - but only a constructor routine performing the inits. The FDPIC format is used for building static and dynamic objects on the Blackfin architecture, for which GCC defines __PIC__ in both cases. This prevents from testing __PIC__ as a way to differentiate between the static and dynamic versions of the bootstrap module on Blackfin. To fix this, set and check for a dedicated macro (__INTERCEPT_MAIN__) to figure out whether the main() interception code should be present in the relocatable object. --- lib/boilerplate/init/Makefile.am | 1 + lib/boilerplate/init/bootstrap.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/boilerplate/init/Makefile.am b/lib/boilerplate/init/Makefile.am index f41f419..702c900 100644 --- a/lib/boilerplate/init/Makefile.am +++ b/lib/boilerplate/init/Makefile.am @@ -3,6 +3,7 @@ noinst_LIBRARIES = libbootstrap.a libbootstrap_a_SOURCES = bootstrap.c libbootstrap_a_CPPFLAGS = \ + -D__INTERCEPT_MAIN__ \ @XENO_USER_CFLAGS@ \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib diff --git a/lib/boilerplate/init/bootstrap.c b/lib/boilerplate/init/bootstrap.c index b0d4a12..118f861 100644 --- a/lib/boilerplate/init/bootstrap.c +++ b/lib/boilerplate/init/bootstrap.c @@ -28,7 +28,24 @@ static char *const *early_argv; const int xenomai_auto_bootstrap = 1; -#ifndef __PIC__ +/* + * The bootstrap module object is built in two forms: + * + * - in static object form, to be glued to the main executable, which + * should include a wrapper interposing on the main() routine for + * auto-init purpose. Such wrapper is activated when symbol wrapping + * is enabled at link time (--wrap). + * + * - in dynamic object form, to be included in a shared library target + * which enables the auto-init feature. This form should not include + * any wrapper to a main() routine - which does not exist - but only + * a constructor routine performing the inits. + * + * The dedicated macro __INTERCEPT_MAIN__ tells us whether the main() + * interception code should be present in the relocatable object. + */ + +#ifdef __INTERCEPT_MAIN__ int __real_main(int argc, char *const argv[]); @@ -45,7 +62,7 @@ int xenomai_main(int argc, char *const argv[]) return __real_main(argc, argv); } -#endif /* !__PIC__ */ +#endif /* !__INTERCEPT_MAIN__ */ __bootstrap_ctor static void xenomai_bootstrap(void) { _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org https://xenomai.org/mailman/listinfo/xenomai-git