patches/glibc/ports-2.12.1/150-queue-header-updates.patch
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
permissions -rw-r--r--
arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2437
     1
grab some updates from FreeBSD
yann@2437
     2
yann@2437
     3
http://bugs.gentoo.org/201979
yann@2437
     4
yann@2437
     5
diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
yann@2437
     6
yann@2437
     7
diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
yann@2437
     8
--- glibc-2.12.1.orig/misc/sys/queue.h	2008-03-05 06:50:30.000000000 +0100
yann@2437
     9
+++ glibc-2.12.1/misc/sys/queue.h	2009-11-13 00:49:51.000000000 +0100
yann@2437
    10
@@ -136,6 +136,11 @@
yann@2437
    11
 		(var);							\
yann@2437
    12
 		(var) = ((var)->field.le_next))
yann@2437
    13
 
yann@2437
    14
+#define	LIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    15
+	for ((var) = LIST_FIRST((head));				\
yann@2437
    16
+	    (var) && ((tvar) = LIST_NEXT((var), field), 1);		\
yann@2437
    17
+	    (var) = (tvar))
yann@2437
    18
+
yann@2437
    19
 /*
yann@2437
    20
  * List access methods.
yann@2437
    21
  */
yann@2437
    22
@@ -197,6 +202,16 @@
yann@2437
    23
 #define	SLIST_FOREACH(var, head, field)					\
yann@2437
    24
 	for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
yann@2437
    25
 
yann@2437
    26
+#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    27
+	for ((var) = SLIST_FIRST((head));				\
yann@2437
    28
+	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
yann@2437
    29
+	    (var) = (tvar))
yann@2437
    30
+
yann@2437
    31
+#define	SLIST_FOREACH_PREVPTR(var, varp, head, field)			\
yann@2437
    32
+	for ((varp) = &SLIST_FIRST((head));				\
yann@2437
    33
+	    ((var) = *(varp)) != NULL;					\
yann@2437
    34
+	    (varp) = &SLIST_NEXT((var), field))
yann@2437
    35
+
yann@2437
    36
 /*
yann@2437
    37
  * Singly-linked List access methods.
yann@2437
    38
  */
yann@2437
    39
@@ -242,6 +257,12 @@
yann@2437
    40
 	(head)->stqh_last = &(elm)->field.stqe_next;			\
yann@2437
    41
 } while (/*CONSTCOND*/0)
yann@2437
    42
 
yann@2437
    43
+#define	STAILQ_LAST(head, type, field)					\
yann@2437
    44
+	(STAILQ_EMPTY((head)) ?						\
yann@2437
    45
+		NULL :							\
yann@2437
    46
+	        ((struct type *)(void *)				\
yann@2437
    47
+		((char *)((head)->stqh_last) - __offsetof(struct type, field))))
yann@2437
    48
+
yann@2437
    49
 #define	STAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\
yann@2437
    50
 	if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
yann@2437
    51
 		(head)->stqh_last = &(elm)->field.stqe_next;		\
yann@2437
    52
@@ -271,6 +292,11 @@
yann@2437
    53
 		(var);							\
yann@2437
    54
 		(var) = ((var)->field.stqe_next))
yann@2437
    55
 
yann@2437
    56
+#define STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    57
+	for ((var) = STAILQ_FIRST((head));				\
yann@2437
    58
+		(var) && ((tvar) = STAILQ_NEXT((var), field), 1);	\
yann@2437
    59
+		(var) = (tvar))
yann@2437
    60
+
yann@2437
    61
 #define	STAILQ_CONCAT(head1, head2) do {				\
yann@2437
    62
 	if (!STAILQ_EMPTY((head2))) {					\
yann@2437
    63
 		*(head1)->stqh_last = (head2)->stqh_first;		\
yann@2437
    64
@@ -437,11 +463,21 @@
yann@2437
    65
 		(var);							\
yann@2437
    66
 		(var) = ((var)->field.tqe_next))
yann@2437
    67
 
yann@2437
    68
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    69
+	for ((var) = TAILQ_FIRST((head));				\
yann@2437
    70
+		(var) && ((tvar) = TAILQ_NEXT((var), field), 1);	\
yann@2437
    71
+		(var) = (tvar))
yann@2437
    72
+
yann@2437
    73
 #define	TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
yann@2437
    74
 	for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));	\
yann@2437
    75
 		(var);							\
yann@2437
    76
 		(var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
yann@2437
    77
 
yann@2437
    78
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
yann@2437
    79
+	for ((var) = TAILQ_LAST((head), headname);			\
yann@2437
    80
+		(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
yann@2437
    81
+		(var) = (tvar))
yann@2437
    82
+
yann@2437
    83
 #define	TAILQ_CONCAT(head1, head2, field) do {				\
yann@2437
    84
 	if (!TAILQ_EMPTY(head2)) {					\
yann@2437
    85
 		*(head1)->tqh_last = (head2)->tqh_first;		\