summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
Diffstat (limited to 'package')
-rw-r--r--package/xenomai/0002-boilerplate-build-obstack-support-conditionally.patch283
-rw-r--r--package/xenomai/xenomai.mk3
2 files changed, 286 insertions, 0 deletions
diff --git a/package/xenomai/0002-boilerplate-build-obstack-support-conditionally.patch b/package/xenomai/0002-boilerplate-build-obstack-support-conditionally.patch
new file mode 100644
index 0000000000..1c61aa1785
--- /dev/null
+++ b/package/xenomai/0002-boilerplate-build-obstack-support-conditionally.patch
@@ -0,0 +1,283 @@
+From 4c593544d2ff39ba6631cc3fa0b91493973674d4 Mon Sep 17 00:00:00 2001
+From: Philippe Gerum <rpm@xenomai.org>
+Date: Fri, 14 Apr 2017 18:28:36 +0200
+Subject: [PATCH] boilerplate: build obstack support conditionally
+
+If the underlying *libc does not support obstacks, build a private
+implementation, otherwise fully rely on the native support.
+
+This fixes a long-standing issue building replacement code for the
+native obstack support, which ended up breaking builds over uClibc
+1.0.21 and later. See https://patchwork.ozlabs.org/patch/745792/.
+
+[Backport from upstream.]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ configure.ac | 4 ++
+ include/boilerplate/obstack.h | 12 +++--
+ lib/boilerplate/Makefile.am | 5 +-
+ lib/boilerplate/obstack.c | 111 +++++++-----------------------------------
+ 4 files changed, 34 insertions(+), 98 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8222e1d..fbfb60f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -495,6 +495,10 @@ fi
+
+ test x$CONFIG_XENO_VALGRIND_API = xy && AC_DEFINE(CONFIG_XENO_VALGRIND_API,1,[config])
+
++dnl Check for obstack support in *libc
++AC_CHECK_HEADERS(obstack.h,libc_has_obstack=y)
++AM_CONDITIONAL(XENO_PRIVATE_OBSTACK,[test x$libc_has_obstack = x])
++
+ dnl Check for presence of some headers
+ AC_CHECK_HEADERS(mqueue.h)
+
+diff --git a/include/boilerplate/obstack.h b/include/boilerplate/obstack.h
+index 206fe55..95eb792 100644
+--- a/include/boilerplate/obstack.h
++++ b/include/boilerplate/obstack.h
+@@ -103,8 +103,12 @@ Summary:
+
+ /* Don't do the contents of this file more than once. */
+
+-#ifndef _OBSTACK_H
+-#define _OBSTACK_H 1
++#ifndef _BOILERPLATE_OBSTACK_H
++#define _BOILERPLATE_OBSTACK_H 1
++
++#ifdef HAVE_OBSTACK_H
++#include_next <obstack.h>
++#else
+
+ #ifdef __cplusplus
+ extern "C" {
+@@ -506,4 +510,6 @@ __extension__ \
+ } /* C++ */
+ #endif
+
+-#endif /* obstack.h */
++#endif /* !HAVE_OBSTACK_H */
++
++#endif /* _BOILERPLATE_OBSTACK_H */
+diff --git a/lib/boilerplate/Makefile.am b/lib/boilerplate/Makefile.am
+index 9b8612d..d7e6324 100644
+--- a/lib/boilerplate/Makefile.am
++++ b/lib/boilerplate/Makefile.am
+@@ -6,10 +6,13 @@ libboilerplate_la_LIBADD = libversion.la libiniparser.la
+ libboilerplate_la_SOURCES = \
+ ancillaries.c \
+ hash.c \
+- obstack.c \
+ setup.c \
+ time.c
+
++if XENO_PRIVATE_OBSTACK
++libboilerplate_la_SOURCES += obstack.c
++endif
++
+ if XENO_DEBUG
+ libboilerplate_la_SOURCES += debug.c
+ endif
+diff --git a/lib/boilerplate/obstack.c b/lib/boilerplate/obstack.c
+index 4c645b2..fab62ce 100644
+--- a/lib/boilerplate/obstack.c
++++ b/lib/boilerplate/obstack.c
+@@ -22,39 +22,11 @@
+ #include <xeno_config.h>
+ #include <boilerplate/obstack.h>
+
+-/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
+- incremented whenever callers compiled using an old obstack.h can no
+- longer properly call the functions in this obstack.c. */
+-#define OBSTACK_INTERFACE_VERSION 1
+-
+-/* Comment out all this code if we are using the GNU C Library, and are not
+- actually compiling the library itself, and the installed library
+- supports the same library interface we do. This code is part of the GNU
+- C Library, but also included in many other GNU distributions. Compiling
+- and linking in this code is a waste when using the GNU C library
+- (especially if it is a shared library). Rather than having every GNU
+- program understand `configure --with-gnu-libc' and omit the object
+- files, it is simpler to just do this in the source for each such file. */
+-
+-#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
+-#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
+-# include <gnu-versions.h>
+-# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+-# define ELIDE_CODE
+-# endif
+-#endif
++/* Use this obstack implementation unconditionally. */
+
++#include <stdio.h>
+ #include <stddef.h>
+-
+-#ifndef ELIDE_CODE
+-
+-
+-# if HAVE_INTTYPES_H
+-# include <inttypes.h>
+-# endif
+-# if HAVE_STDINT_H || defined _LIBC
+-# include <stdint.h>
+-# endif
++#include <stdint.h>
+
+ /* Determine default alignment. */
+ union fooround
+@@ -97,22 +69,7 @@ void (*obstack_alloc_failed_handler) (void) = print_and_abort;
+
+ /* Exit value used when `print_and_abort' is used. */
+ # include <stdlib.h>
+-# ifdef _LIBC
+ int obstack_exit_failure = EXIT_FAILURE;
+-# else
+-# include "exitfail.h"
+-# define obstack_exit_failure exit_failure
+-# endif
+-
+-# ifdef _LIBC
+-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+-/* A looong time ago (before 1994, anyway; we're not sure) this global variable
+- was used by non-GNU-C macros to avoid multiple evaluation. The GNU C
+- library still exports it because somebody might use it. */
+-struct obstack *_obstack_compat;
+-compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0);
+-# endif
+-# endif
+
+ /* Define a macro that either calls functions with the traditional malloc/free
+ calling interface, or calls functions with the mmalloc/mfree interface
+@@ -148,7 +105,7 @@ _obstack_begin (struct obstack *h,
+ void *(*chunkfun) (long),
+ void (*freefun) (void *))
+ {
+- register struct _obstack_chunk *chunk; /* points to new chunk */
++ struct _obstack_chunk *chunk; /* points to new chunk */
+
+ if (alignment == 0)
+ alignment = DEFAULT_ALIGNMENT;
+@@ -195,7 +152,7 @@ _obstack_begin_1 (struct obstack *h, int size, int alignment,
+ void (*freefun) (void *, void *),
+ void *arg)
+ {
+- register struct _obstack_chunk *chunk; /* points to new chunk */
++ struct _obstack_chunk *chunk; /* points to new chunk */
+
+ if (alignment == 0)
+ alignment = DEFAULT_ALIGNMENT;
+@@ -246,11 +203,11 @@ _obstack_begin_1 (struct obstack *h, int size, int alignment,
+ void
+ _obstack_newchunk (struct obstack *h, int length)
+ {
+- register struct _obstack_chunk *old_chunk = h->chunk;
+- register struct _obstack_chunk *new_chunk;
+- register long new_size;
+- register long obj_size = h->next_free - h->object_base;
+- register long i;
++ struct _obstack_chunk *old_chunk = h->chunk;
++ struct _obstack_chunk *new_chunk;
++ long new_size;
++ long obj_size = h->next_free - h->object_base;
++ long i;
+ long already;
+ char *object_base;
+
+@@ -308,9 +265,6 @@ _obstack_newchunk (struct obstack *h, int length)
+ /* The new chunk certainly contains no empty object yet. */
+ h->maybe_empty_object = 0;
+ }
+-# ifdef _LIBC
+-libc_hidden_def (_obstack_newchunk)
+-# endif
+
+ /* Return nonzero if object OBJ has been allocated from obstack H.
+ This is here for debugging.
+@@ -323,8 +277,8 @@ int _obstack_allocated_p (struct obstack *h, void *obj);
+ int
+ _obstack_allocated_p (struct obstack *h, void *obj)
+ {
+- register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
+- register struct _obstack_chunk *plp; /* point to previous chunk if any */
++ struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
++ struct _obstack_chunk *plp; /* point to previous chunk if any */
+
+ lp = (h)->chunk;
+ /* We use >= rather than > since the object cannot be exactly at
+@@ -346,8 +300,8 @@ _obstack_allocated_p (struct obstack *h, void *obj)
+ void
+ obstack_free (struct obstack *h, void *obj)
+ {
+- register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
+- register struct _obstack_chunk *plp; /* point to previous chunk if any */
++ struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
++ struct _obstack_chunk *plp; /* point to previous chunk if any */
+
+ lp = h->chunk;
+ /* We use >= because there cannot be an object at the beginning of a chunk.
+@@ -373,17 +327,12 @@ obstack_free (struct obstack *h, void *obj)
+ abort ();
+ }
+
+-# ifdef _LIBC
+-/* Older versions of libc used a function _obstack_free intended to be
+- called by non-GCC compilers. */
+-strong_alias (obstack_free, _obstack_free)
+-# endif
+
+ int
+ _obstack_memory_used (struct obstack *h)
+ {
+- register struct _obstack_chunk* lp;
+- register int nbytes = 0;
++ struct _obstack_chunk* lp;
++ int nbytes = 0;
+
+ for (lp = h->chunk; lp != 0; lp = lp->prev)
+ {
+@@ -393,26 +342,6 @@ _obstack_memory_used (struct obstack *h)
+ }
+
+ /* Define the error handler. */
+-# ifdef _LIBC
+-# include <libintl.h>
+-# else
+-# include "gettext.h"
+-# endif
+-# ifndef _
+-# define _(msgid) gettext (msgid)
+-# endif
+-
+-# ifdef _LIBC
+-# include <libio/iolibio.h>
+-# endif
+-
+-# ifndef __attribute__
+-/* This feature is available in gcc versions 2.5 and later. */
+-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+-# define __attribute__(Spec) /* empty */
+-# endif
+-# endif
+-
+ static void
+ __attribute__ ((noreturn))
+ print_and_abort (void)
+@@ -422,12 +351,6 @@ print_and_abort (void)
+ happen because the "memory exhausted" message appears in other places
+ like this and the translation should be reused instead of creating
+ a very similar string which requires a separate translation. */
+-# ifdef _LIBC
+- (void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
+-# else
+- fprintf (stderr, "%s\n", _("memory exhausted"));
+-# endif
++ fprintf (stderr, "memory exhausted\n");
+ exit (obstack_exit_failure);
+ }
+-
+-#endif /* !ELIDE_CODE */
+--
+2.9.3
+
diff --git a/package/xenomai/xenomai.mk b/package/xenomai/xenomai.mk
index 8a512acfd2..b7be842a6a 100644
--- a/package/xenomai/xenomai.mk
+++ b/package/xenomai/xenomai.mk
@@ -17,6 +17,9 @@ XENOMAI_LICENSE = GPL-2.0+ with exception (headers), LGPL-2.1+ (libraries), GPL-
# GFDL is not included but refers to gnu.org
XENOMAI_LICENSE_FILES = debian/copyright include/COPYING lib/trank/COPYING kernel/cobalt/COPYING
+# 0002-boilerplate-build-obstack-support-conditionally.patch
+XENOMAI_AUTORECONF = YES
+
XENOMAI_INSTALL_STAGING = YES
XENOMAI_INSTALL_TARGET_OPTS = DESTDIR=$(TARGET_DIR) install-user
XENOMAI_INSTALL_STAGING_OPTS = DESTDIR=$(STAGING_DIR) install-user
OpenPOWER on IntegriCloud