Pushing glibc 2.4 per OE bug ticket #741. Thanks to Bernhard Rosenkraenzer
authorJoseph Cole <jnc@unknown.openembedded.org>
Tue, 14 Mar 2006 07:29:08 +0000 (07:29 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Tue, 14 Mar 2006 07:29:08 +0000 (07:29 +0000)
for the patch. Not including CVS modifications, reference bug report if
they are needed, or add them yourself.
This is not tested, setting preference to "-1".

18 files changed:
packages/glibc/glibc-2.4/.mtn2git_empty [new file with mode: 0644]
packages/glibc/glibc-2.4/arm-longlong.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/arm-memcpy.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/dl-cache-libcmp.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/dyn-ldconfig-20041128.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/dyn-ldconfig.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/etc/.mtn2git_empty [new file with mode: 0644]
packages/glibc/glibc-2.4/etc/ld.so.conf [new file with mode: 0644]
packages/glibc/glibc-2.4/generic-bits_select.h [new file with mode: 0644]
packages/glibc/glibc-2.4/generic-bits_time.h [new file with mode: 0644]
packages/glibc/glibc-2.4/generic-bits_types.h [new file with mode: 0644]
packages/glibc/glibc-2.4/generic-bits_typesizes.h [new file with mode: 0644]
packages/glibc/glibc-2.4/glibc-2.4-compile.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/ldsocache-varrun.patch [new file with mode: 0644]
packages/glibc/glibc-2.4/nptl-crosscompile.patch [new file with mode: 0644]
packages/glibc/glibc-initial_2.4.bb [new file with mode: 0644]
packages/glibc/glibc-intermediate_2.4.bb [new file with mode: 0644]
packages/glibc/glibc_2.4.bb [new file with mode: 0644]

diff --git a/packages/glibc/glibc-2.4/.mtn2git_empty b/packages/glibc/glibc-2.4/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/glibc/glibc-2.4/arm-longlong.patch b/packages/glibc/glibc-2.4/arm-longlong.patch
new file mode 100644 (file)
index 0000000..320a555
--- /dev/null
@@ -0,0 +1,58 @@
+--- glibc-2.4/stdlib/longlong.h.ark    2006-03-11 22:49:27.000000000 +0100
++++ glibc-2.4/stdlib/longlong.h        2006-03-11 22:55:12.000000000 +0100
+@@ -206,6 +206,14 @@
+            "rI" ((USItype) (bh)),                                     \
+            "r" ((USItype) (al)),                                      \
+            "rI" ((USItype) (bl)) __CLOBBER_CC)
++/* v3m and all higher arches have long multiply support.  */
++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
++#define umul_ppmm(xh, xl, a, b) \
++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#define UMUL_TIME 5
++#define smul_ppmm(xh, xl, a, b) \
++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#else                                                    
+ #define umul_ppmm(xh, xl, a, b) \
+ {register USItype __t0, __t1, __t2;                                   \
+   __asm__ ("%@ Inlined umul_ppmm\n"                                   \
+@@ -227,7 +235,13 @@
+          : "r" ((USItype) (a)),                                       \
+            "r" ((USItype) (b)) __CLOBBER_CC );}
+ #define UMUL_TIME 20
++#endif
+ #define UDIV_TIME 100
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
++#define COUNT_LEADING_ZEROS_0 32
++#endif
++                                                         
+ #endif /* __arm__ */
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark       2006-03-11 22:56:43.000000000 +0100
++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c   2006-03-11 22:58:19.000000000 +0100
+@@ -0,0 +1,24 @@
++/* __clz_tab -- support for longlong.h
++   Copyright (C) 2004 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++/* Nothing required.  */
++#else
++#include <sysdeps/generic/mp_clz_tab.c>
++#endif
diff --git a/packages/glibc/glibc-2.4/arm-memcpy.patch b/packages/glibc/glibc-2.4/arm-memcpy.patch
new file mode 100644 (file)
index 0000000..bc2b3da
--- /dev/null
@@ -0,0 +1,758 @@
+--- /dev/null  2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memmove.S      2004-03-20 18:37:23.000000000 +0000
+@@ -0,0 +1,251 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *    Author:         Nicolas Pitre
++ *    Created:        Dec 23, 2003
++ *    Copyright:      (C) MontaVista Software, Inc.
++ *
++ *   This file is free software; you can redistribute it and/or
++ *   modify it under the terms of the GNU Lesser General Public
++ *   License as published by the Free Software Foundation; either
++ *   version 2.1 of the License, or (at your option) any later version.
++ *
++ *   This file 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
++ *   Lesser General Public License for more details.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)  code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memmove (char *dst, const char *src) */
++ENTRY(memmove)
++              subs    ip, r0, r1
++              cmphi   r2, ip
++              bls     memcpy(PLT)
++
++              stmfd   sp!, {r0, r4, lr}
++              add     r1, r1, r2
++              add     r0, r0, r2
++              subs    r2, r2, #4
++              blt     25f
++              ands    ip, r0, #3
++      PLD(    pld     [r1, #-4]               )
++              bne     26f
++              ands    ip, r1, #3
++              bne     27f
++
++19:           subs    r2, r2, #4
++              blt     24f
++              subs    r2, r2, #8
++              blt     23f
++              subs    r2, r2, #16
++              blt     22f
++
++      PLD(    pld     [r1, #-32]              )
++      PLD(    subs    r2, r2, #96             )
++              stmfd   sp!, {r5 - r8}
++      PLD(    blt     21f                     )
++
++      PLD(    @ cache alignment               )
++      PLD(    ands    ip, r1, #31             )
++      PLD(    pld     [r1, #-64]              )
++      PLD(    beq     20f                     )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [r1, #-96]              )
++      PLD(    blt     20f                     )
++      PLD(    cmp     ip, #16                 )
++      PLD(    sub     r2, r2, ip              )
++      PLD(    ldmgedb r1!, {r3 - r6}          )
++      PLD(    stmgedb r0!, {r3 - r6}          )
++      PLD(    beq     20f                     )
++      PLD(    and     ip, ip, #15             )
++      PLD(    cmp     ip, #8                  )
++      PLD(    ldr     r3, [r1, #-4]!          )
++      PLD(    ldrge   r4, [r1, #-4]!          )
++      PLD(    ldrgt   r5, [r1, #-4]!          )
++      PLD(    str     r3, [r0, #-4]!          )
++      PLD(    strge   r4, [r0, #-4]!          )
++      PLD(    strgt   r5, [r0, #-4]!          )
++
++20:   PLD(    pld     [r1, #-96]              )
++      PLD(    pld     [r1, #-128]             )
++21:           ldmdb   r1!, {r3, r4, ip, lr}
++              subs    r2, r2, #32
++              stmdb   r0!, {r3, r4, ip, lr}
++              ldmdb   r1!, {r3, r4, ip, lr}
++              stmgedb r0!, {r3, r4, ip, lr}
++              ldmgedb r1!, {r3, r4, ip, lr}
++              stmgedb r0!, {r3, r4, ip, lr}
++              ldmgedb r1!, {r3, r4, ip, lr}
++              subges  r2, r2, #32
++              stmdb   r0!, {r3, r4, ip, lr}
++              bge     20b
++      PLD(    cmn     r2, #96                 )
++      PLD(    bge     21b                     )
++      PLD(    add     r2, r2, #96             )
++              tst     r2, #31
++              ldmfd   sp!, {r5 - r8}
++              ldmeqfd sp!, {r0, r4, pc}
++
++              tst     r2, #16
++22:           ldmnedb r1!, {r3, r4, ip, lr}
++              stmnedb r0!, {r3, r4, ip, lr}
++
++              tst     r2, #8
++23:           ldmnedb r1!, {r3, r4}
++              stmnedb r0!, {r3, r4}
++
++              tst     r2, #4
++24:           ldrne   r3, [r1, #-4]!
++              strne   r3, [r0, #-4]!
++
++25:           ands    r2, r2, #3
++              ldmeqfd sp!, {r0, r4, pc}
++
++              cmp     r2, #2
++              ldrb    r3, [r1, #-1]
++              ldrgeb  r4, [r1, #-2]
++              ldrgtb  ip, [r1, #-3]
++              strb    r3, [r0, #-1]
++              strgeb  r4, [r0, #-2]
++              strgtb  ip, [r0, #-3]
++              ldmfd   sp!, {r0, r4, pc}
++
++26:           cmp     ip, #2
++              ldrb    r3, [r1, #-1]!
++              ldrgeb  r4, [r1, #-1]!
++              ldrgtb  lr, [r1, #-1]!
++              strb    r3, [r0, #-1]!
++              strgeb  r4, [r0, #-1]!
++              strgtb  lr, [r0, #-1]!
++              subs    r2, r2, ip
++              blt     25b
++              ands    ip, r1, #3
++              beq     19b
++
++27:           bic     r1, r1, #3
++              cmp     ip, #2
++              ldr     r3, [r1]
++              beq     35f
++              blt     36f
++
++
++              .macro  backward_copy_shift push pull
++
++              cmp     r2, #12
++      PLD(    pld     [r1, #-4]               )
++              blt     33f
++              subs    r2, r2, #28
++              stmfd   sp!, {r5 - r9}
++              blt     31f
++
++      PLD(    subs    r2, r2, #96             )
++      PLD(    pld     [r1, #-32]              )
++      PLD(    blt     30f                     )
++      PLD(    pld     [r1, #-64]              )
++
++      PLD(    @ cache alignment               )
++      PLD(    ands    ip, r1, #31             )
++      PLD(    pld     [r1, #-96]              )
++      PLD(    beq     29f                     )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [r1, #-128]             )
++      PLD(    blt     29f                     )
++      PLD(    sub     r2, r2, ip              )
++28:   PLD(    mov     r4, r3, push #\push     )
++      PLD(    ldr     r3, [r1, #-4]!          )
++      PLD(    subs    ip, ip, #4              )
++      PLD(    orr     r4, r4, r3, pull #\pull )
++      PLD(    str     r4, [r0, #-4]!          )
++      PLD(    bgt     28b                     )
++
++29:   PLD(    pld     [r1, #-128]             )
++30:           mov     lr, r3, push #\push
++              ldmdb   r1!, {r3 - r9, ip}
++              subs    r2, r2, #32
++              orr     lr, lr, ip, pull #\pull
++              mov     ip, ip, push #\push
++              orr     ip, ip, r9, pull #\pull
++              mov     r9, r9, push #\push
++              orr     r9, r9, r8, pull #\pull
++              mov     r8, r8, push #\push
++              orr     r8, r8, r7, pull #\pull
++              mov     r7, r7, push #\push
++              orr     r7, r7, r6, pull #\pull
++              mov     r6, r6, push #\push
++              orr     r6, r6, r5, pull #\pull
++              mov     r5, r5, push #\push
++              orr     r5, r5, r4, pull #\pull
++              mov     r4, r4, push #\push
++              orr     r4, r4, r3, pull #\pull
++              stmdb   r0!, {r4 - r9, ip, lr}
++              bge     29b
++      PLD(    cmn     r2, #96                 )
++      PLD(    bge     30b                     )
++      PLD(    add     r2, r2, #96             )
++              cmn     r2, #16
++              blt     32f
++31:           mov     r7, r3, push #\push
++              ldmdb   r1!, {r3 - r6}
++              sub     r2, r2, #16
++              orr     r7, r7, r6, pull #\pull
++              mov     r6, r6, push #\push
++              orr     r6, r6, r5, pull #\pull
++              mov     r5, r5, push #\push
++              orr     r5, r5, r4, pull #\pull
++              mov     r4, r4, push #\push
++              orr     r4, r4, r3, pull #\pull
++              stmdb   r0!, {r4 - r7}
++32:           adds    r2, r2, #28
++              ldmfd   sp!, {r5 - r9}
++              blt     34f
++33:           mov     r4, r3, push #\push
++              ldr     r3, [r1, #-4]!
++              subs    r2, r2, #4
++              orr     r4, r4, r3, pull #\pull
++              str     r4, [r0, #-4]!
++              bge     33b
++34:
++              .endm
++
++
++              backward_copy_shift     push=8  pull=24
++              add     r1, r1, #3
++              b       25b
++
++35:           backward_copy_shift     push=16 pull=16
++              add     r1, r1, #2
++              b       25b
++
++36:           backward_copy_shift     push=24 pull=8
++              add     r1, r1, #1
++              b       25b
++
++              .size   memmove, . - memmove
++END(memmove)
++libc_hidden_builtin_def (memmove)
+--- /dev/null  2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/bcopy.S        2004-03-20 18:37:48.000000000 +0000
+@@ -0,0 +1,255 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *    Author:         Nicolas Pitre
++ *    Created:        Dec 23, 2003
++ *    Copyright:      (C) MontaVista Software, Inc.
++ *
++ *   This file is free software; you can redistribute it and/or
++ *   modify it under the terms of the GNU Lesser General Public
++ *   License as published by the Free Software Foundation; either
++ *   version 2.1 of the License, or (at your option) any later version.
++ *
++ *   This file 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
++ *   Lesser General Public License for more details.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)  code
++#else
++#define PLD(code...)
++#endif
++
++dst           .req    r1
++src           .req    r0
++
++/* void *bcopy (const char *src, char *dst, size_t size) */
++ENTRY(bcopy)
++              subs    ip, dst, src
++              cmphi   r2, ip
++              movls   r3, r0
++              movls   r0, r1
++              movls   r1, r3
++              bls     memcpy(PLT)
++
++              stmfd   sp!, {r4, lr}
++              add     src, src, r2
++              add     dst, dst, r2
++              subs    r2, r2, #4
++              blt     25f
++              ands    ip, dst, #3
++      PLD(    pld     [src, #-4]              )
++              bne     26f
++              ands    ip, src, #3
++              bne     27f
++
++19:           subs    r2, r2, #4
++              blt     24f
++              subs    r2, r2, #8
++              blt     23f
++              subs    r2, r2, #16
++              blt     22f
++
++      PLD(    pld     [src, #-32]             )
++      PLD(    subs    r2, r2, #96             )
++              stmfd   sp!, {r5 - r8}
++      PLD(    blt     21f                     )
++
++      PLD(    @ cache alignment               )
++      PLD(    ands    ip, src, #31            )
++      PLD(    pld     [src, #-64]             )
++      PLD(    beq     20f                     )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [src, #-96]             )
++      PLD(    blt     20f                     )
++      PLD(    cmp     ip, #16                 )
++      PLD(    sub     r2, r2, ip              )
++      PLD(    ldmgedb src!, {r3 - r6}         )
++      PLD(    stmgedb dst!, {r3 - r6}         )
++      PLD(    beq     20f                     )
++      PLD(    and     ip, ip, #15             )
++      PLD(    cmp     ip, #8                  )
++      PLD(    ldr     r3, [src, #-4]!         )
++      PLD(    ldrge   r4, [src, #-4]!         )
++      PLD(    ldrgt   r5, [src, #-4]!         )
++      PLD(    str     r3, [dst, #-4]!         )
++      PLD(    strge   r4, [dst, #-4]!         )
++      PLD(    strgt   r5, [dst, #-4]!         )
++
++20:   PLD(    pld     [src, #-96]             )
++      PLD(    pld     [src, #-128]            )
++21:           ldmdb   src!, {r3, r4, ip, lr}
++              subs    r2, r2, #32
++              stmdb   dst!, {r3, r4, ip, lr}
++              ldmdb   src!, {r3, r4, ip, lr}
++              stmgedb dst!, {r3, r4, ip, lr}
++              ldmgedb src!, {r3, r4, ip, lr}
++              stmgedb dst!, {r3, r4, ip, lr}
++              ldmgedb src!, {r3, r4, ip, lr}
++              subges  r2, r2, #32
++              stmdb   dst!, {r3, r4, ip, lr}
++              bge     20b
++      PLD(    cmn     r2, #96                 )
++      PLD(    bge     21b                     )
++      PLD(    add     r2, r2, #96             )
++              tst     r2, #31
++              ldmfd   sp!, {r5 - r8}
++              ldmeqfd sp!, {r4, pc}
++
++              tst     r2, #16
++22:           ldmnedb src!, {r3, r4, ip, lr}
++              stmnedb dst!, {r3, r4, ip, lr}
++
++              tst     r2, #8
++23:           ldmnedb src!, {r3, r4}
++              stmnedb dst!, {r3, r4}
++
++              tst     r2, #4
++24:           ldrne   r3, [src, #-4]!
++              strne   r3, [dst, #-4]!
++
++25:           ands    r2, r2, #3
++              ldmeqfd sp!, {dst, r4, pc}
++
++              cmp     r2, #2
++              ldrb    r3, [src, #-1]
++              ldrgeb  r4, [src, #-2]
++              ldrgtb  ip, [src, #-3]
++              strb    r3, [dst, #-1]
++              strgeb  r4, [dst, #-2]
++              strgtb  ip, [dst, #-3]
++              ldmfd   sp!, {dst, r4, pc}
++
++26:           cmp     ip, #2
++              ldrb    r3, [src, #-1]!
++              ldrgeb  r4, [src, #-1]!
++              ldrgtb  lr, [src, #-1]!
++              strb    r3, [dst, #-1]!
++              strgeb  r4, [dst, #-1]!
++              strgtb  lr, [dst, #-1]!
++              subs    r2, r2, ip
++              blt     25b
++              ands    ip, src, #3
++              beq     19b
++
++27:           bic     src, src, #3
++              cmp     ip, #2
++              ldr     r3, [src]
++              beq     35f
++              blt     36f
++
++
++              .macro  backward_copy_shift push pull
++
++              cmp     r2, #12
++      PLD(    pld     [src, #-4]              )
++              blt     33f
++              subs    r2, r2, #28
++              stmfd   sp!, {r5 - r9}
++              blt     31f
++
++      PLD(    subs    r2, r2, #96             )
++      PLD(    pld     [src, #-32]             )
++      PLD(    blt     30f                     )
++      PLD(    pld     [src, #-64]             )
++
++      PLD(    @ cache alignment               )
++      PLD(    ands    ip, src, #31            )
++      PLD(    pld     [src, #-96]             )
++      PLD(    beq     29f                     )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [src, #-128]            )
++      PLD(    blt     29f                     )
++      PLD(    sub     r2, r2, ip              )
++28:   PLD(    mov     r4, r3, push #\push     )
++      PLD(    ldr     r3, [src, #-4]!         )
++      PLD(    subs    ip, ip, #4              )
++      PLD(    orr     r4, r4, r3, pull #\pull )
++      PLD(    str     r4, [dst, #-4]!         )
++      PLD(    bgt     28b                     )
++
++29:   PLD(    pld     [src, #-128]            )
++30:           mov     lr, r3, push #\push
++              ldmdb   src!, {r3 - r9, ip}
++              subs    r2, r2, #32
++              orr     lr, lr, ip, pull #\pull
++              mov     ip, ip, push #\push
++              orr     ip, ip, r9, pull #\pull
++              mov     r9, r9, push #\push
++              orr     r9, r9, r8, pull #\pull
++              mov     r8, r8, push #\push
++              orr     r8, r8, r7, pull #\pull
++              mov     r7, r7, push #\push
++              orr     r7, r7, r6, pull #\pull
++              mov     r6, r6, push #\push
++              orr     r6, r6, r5, pull #\pull
++              mov     r5, r5, push #\push
++              orr     r5, r5, r4, pull #\pull
++              mov     r4, r4, push #\push
++              orr     r4, r4, r3, pull #\pull
++              stmdb   dst!, {r4 - r9, ip, lr}
++              bge     29b
++      PLD(    cmn     r2, #96                 )
++      PLD(    bge     30b                     )
++      PLD(    add     r2, r2, #96             )
++              cmn     r2, #16
++              blt     32f
++31:           mov     r7, r3, push #\push
++              ldmdb   src!, {r3 - r6}
++              sub     r2, r2, #16
++              orr     r7, r7, r6, pull #\pull
++              mov     r6, r6, push #\push
++              orr     r6, r6, r5, pull #\pull
++              mov     r5, r5, push #\push
++              orr     r5, r5, r4, pull #\pull
++              mov     r4, r4, push #\push
++              orr     r4, r4, r3, pull #\pull
++              stmdb   dst!, {r4 - r7}
++32:           adds    r2, r2, #28
++              ldmfd   sp!, {r5 - r9}
++              blt     34f
++33:           mov     r4, r3, push #\push
++              ldr     r3, [src, #-4]!
++              subs    r2, r2, #4
++              orr     r4, r4, r3, pull #\pull
++              str     r4, [dst, #-4]!
++              bge     33b
++34:
++              .endm
++
++
++              backward_copy_shift     push=8  pull=24
++              add     src, src, #3
++              b       25b
++
++35:           backward_copy_shift     push=16 pull=16
++              add     src, src, #2
++              b       25b
++
++36:           backward_copy_shift     push=24 pull=8
++              add     src, src, #1
++              b       25b
++
++              .size   bcopy, . - bcopy
++END(bcopy)
+
+--- /dev/null  2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memcpy.S       2004-05-02 14:33:22.000000000 +0100
+@@ -0,0 +1,242 @@
++/*
++ *   Optimized memcpy implementation for ARM processors
++ *
++ *    Author:         Nicolas Pitre
++ *    Created:        Dec 23, 2003
++ *    Copyright:      (C) MontaVista Software, Inc.
++ *
++ *   This file is free software; you can redistribute it and/or
++ *   modify it under the terms of the GNU Lesser General Public
++ *   License as published by the Free Software Foundation; either
++ *   version 2.1 of the License, or (at your option) any later version.
++ *
++ *   This file 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
++ *   Lesser General Public License for more details.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)  code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memcpy (char *dst, const char *src) */
++
++ENTRY(memcpy)
++              subs    r2, r2, #4
++              stmfd   sp!, {r0, r4, lr}
++              blt     7f
++              ands    ip, r0, #3
++      PLD(    pld     [r1, #0]                )
++              bne     8f
++              ands    ip, r1, #3
++              bne     9f
++
++1:            subs    r2, r2, #4
++              blt     6f
++              subs    r2, r2, #8
++              blt     5f
++              subs    r2, r2, #16
++              blt     4f
++
++      PLD(    subs    r2, r2, #65             )
++              stmfd   sp!, {r5 - r8}
++      PLD(    blt     3f                      )
++      PLD(    pld     [r1, #32]               )
++
++      PLD(    @ cache alignment               )
++      PLD(    ands    ip, r1, #31             )
++      PLD(    pld     [r1, #64]               )
++      PLD(    beq     2f                      )
++      PLD(    rsb     ip, ip, #32             )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [r1, #96]               )
++      PLD(    blt     2f                      )
++      PLD(    cmp     ip, #16                 )
++      PLD(    sub     r2, r2, ip              )
++      PLD(    ldmgeia r1!, {r3 - r6}          )
++      PLD(    stmgeia r0!, {r3 - r6}          )
++      PLD(    beq     2f                      )
++      PLD(    and     ip, ip, #15             )
++      PLD(    cmp     ip, #8                  )
++      PLD(    ldr     r3, [r1], #4            )
++      PLD(    ldrge   r4, [r1], #4            )
++      PLD(    ldrgt   r5, [r1], #4            )
++      PLD(    str     r3, [r0], #4            )
++      PLD(    strge   r4, [r0], #4            )
++      PLD(    strgt   r5, [r0], #4            )
++
++2:    PLD(    pld     [r1, #96]               )
++3:            ldmia   r1!, {r3 - r8, ip, lr}
++              subs    r2, r2, #32
++              stmia   r0!, {r3 - r8, ip, lr}
++              bge     2b
++      PLD(    cmn     r2, #65                 )
++      PLD(    bge     3b                      )
++      PLD(    add     r2, r2, #65             )
++              tst     r2, #31
++              ldmfd   sp!, {r5 - r8}
++              ldmeqfd sp!, {r0, r4, pc}
++
++              tst     r2, #16
++4:            ldmneia r1!, {r3, r4, ip, lr}
++              stmneia r0!, {r3, r4, ip, lr}
++
++              tst     r2, #8
++5:            ldmneia r1!, {r3, r4}
++              stmneia r0!, {r3, r4}
++
++              tst     r2, #4
++6:            ldrne   r3, [r1], #4
++              strne   r3, [r0], #4
++
++7:            ands    r2, r2, #3
++              ldmeqfd sp!, {r0, r4, pc}
++
++              cmp     r2, #2
++              ldrb    r3, [r1], #1
++              ldrgeb  r4, [r1], #1
++              ldrgtb  ip, [r1]
++              strb    r3, [r0], #1
++              strgeb  r4, [r0], #1
++              strgtb  ip, [r0]
++              ldmfd   sp!, {r0, r4, pc}
++
++8:            rsb     ip, ip, #4
++              cmp     ip, #2
++              ldrb    r3, [r1], #1
++              ldrgeb  r4, [r1], #1
++              ldrgtb  lr, [r1], #1
++              strb    r3, [r0], #1
++              strgeb  r4, [r0], #1
++              strgtb  lr, [r0], #1
++              subs    r2, r2, ip
++              blt     7b
++              ands    ip, r1, #3
++              beq     1b
++
++9:            bic     r1, r1, #3
++              cmp     ip, #2
++              ldr     lr, [r1], #4
++              beq     17f
++              bgt     18f
++
++
++              .macro  forward_copy_shift pull push
++
++              cmp     r2, #12
++      PLD(    pld     [r1, #0]                )
++              blt     15f
++              subs    r2, r2, #28
++              stmfd   sp!, {r5 - r9}
++              blt     13f
++
++      PLD(    subs    r2, r2, #97             )
++      PLD(    blt     12f                     )
++      PLD(    pld     [r1, #32]               )
++
++      PLD(    @ cache alignment               )
++      PLD(    rsb     ip, r1, #36             )
++      PLD(    pld     [r1, #64]               )
++      PLD(    ands    ip, ip, #31             )
++      PLD(    pld     [r1, #96]               )
++      PLD(    beq     11f                     )
++      PLD(    cmp     r2, ip                  )
++      PLD(    pld     [r1, #128]              )
++      PLD(    blt     11f                     )
++      PLD(    sub     r2, r2, ip              )
++10:   PLD(    mov     r3, lr, pull #\pull     )
++      PLD(    ldr     lr, [r1], #4            )
++      PLD(    subs    ip, ip, #4              )
++      PLD(    orr     r3, r3, lr, push #\push )
++      PLD(    str     r3, [r0], #4            )
++      PLD(    bgt     10b                     )
++
++11:   PLD(    pld     [r1, #128]              )
++12:           mov     r3, lr, pull #\pull
++              ldmia   r1!, {r4 - r9, ip, lr}
++              subs    r2, r2, #32
++              orr     r3, r3, r4, push #\push
++              mov     r4, r4, pull #\pull
++              orr     r4, r4, r5, push #\push
++              mov     r5, r5, pull #\pull
++              orr     r5, r5, r6, push #\push
++              mov     r6, r6, pull #\pull
++              orr     r6, r6, r7, push #\push
++              mov     r7, r7, pull #\pull
++              orr     r7, r7, r8, push #\push
++              mov     r8, r8, pull #\pull
++              orr     r8, r8, r9, push #\push
++              mov     r9, r9, pull #\pull
++              orr     r9, r9, ip, push #\push
++              mov     ip, ip, pull #\pull
++              orr     ip, ip, lr, push #\push
++              stmia   r0!, {r3 - r9, ip}
++              bge     11b
++      PLD(    cmn     r2, #97                 )
++      PLD(    bge     12b                     )
++      PLD(    add     r2, r2, #97             )
++              cmn     r2, #16
++              blt     14f
++13:           mov     r3, lr, pull #\pull
++              ldmia   r1!, {r4 - r6, lr}
++              sub     r2, r2, #16
++              orr     r3, r3, r4, push #\push
++              mov     r4, r4, pull #\pull
++              orr     r4, r4, r5, push #\push
++              mov     r5, r5, pull #\pull
++              orr     r5, r5, r6, push #\push
++              mov     r6, r6, pull #\pull
++              orr     r6, r6, lr, push #\push
++              stmia   r0!, {r3 - r6}
++14:           adds    r2, r2, #28
++              ldmfd   sp!, {r5 - r9}
++              blt     16f
++15:           mov     r3, lr, pull #\pull
++              ldr     lr, [r1], #4
++              subs    r2, r2, #4
++              orr     r3, r3, lr, push #\push
++              str     r3, [r0], #4
++              bge     15b
++16:
++              .endm
++
++
++              forward_copy_shift      pull=8  push=24
++              sub     r1, r1, #3
++              b       7b
++
++17:           forward_copy_shift      pull=16 push=16
++              sub     r1, r1, #2
++              b       7b
++
++18:           forward_copy_shift      pull=24 push=8
++              sub     r1, r1, #1
++              b       7b
++
++              .size   memcpy, . - memcpy
++END(memcpy)
++libc_hidden_builtin_def (memcpy)
++
diff --git a/packages/glibc/glibc-2.4/dl-cache-libcmp.patch b/packages/glibc/glibc-2.4/dl-cache-libcmp.patch
new file mode 100644 (file)
index 0000000..2fedfa6
--- /dev/null
@@ -0,0 +1,10 @@
+--- glibc-2.4/elf/Versions.ark 2006-03-11 23:30:09.000000000 +0100
++++ glibc-2.4/elf/Versions     2006-03-11 23:31:44.000000000 +0100
+@@ -63,5 +63,7 @@
+     _dl_debug_state;
+     # Pointer protection.
+     __pointer_chk_guard;
++    # for ldconfig
++    _dl_cache_libcmp;
+   }
+ }
diff --git a/packages/glibc/glibc-2.4/dyn-ldconfig-20041128.patch b/packages/glibc/glibc-2.4/dyn-ldconfig-20041128.patch
new file mode 100644 (file)
index 0000000..451b6d4
--- /dev/null
@@ -0,0 +1,22 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- libc/elf/Makefile~dyn-ldconfig-20041128
++++ libc/elf/Makefile
+@@ -118,12 +118,13 @@
+ ifeq (yes,$(use-ldconfig))
+ ifeq (yes,$(build-shared))
+-others-static += ldconfig
++#others-static        += ldconfig
+ others                += ldconfig
+ install-rootsbin += ldconfig
+ ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
+ extra-objs    += $(ldconfig-modules:=.o)
++CPPFLAGS-readlib.c = -DNOT_IN_libc=1
+ # To find xmalloc.c and xstrdup.c
+ vpath %.c ../locale/programs
diff --git a/packages/glibc/glibc-2.4/dyn-ldconfig.patch b/packages/glibc/glibc-2.4/dyn-ldconfig.patch
new file mode 100644 (file)
index 0000000..1041965
--- /dev/null
@@ -0,0 +1,62 @@
+--- elf/Makefile       13 Mar 2003 21:50:57 -0000      1.258
++++ elf/Makefile       27 Mar 2003 20:36:07 -0000
+@@ -109,12 +109,13 @@
+ ifeq (yes,$(use-ldconfig))
+ ifeq (yes,$(build-shared))
+-others-static += ldconfig
++#others-static        += ldconfig
+ others                += ldconfig
+ install-rootsbin += ldconfig
+ ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
+ extra-objs    += $(ldconfig-modules:=.o)
++CPPFLAGS-readlib.c = -DNOT_IN_libc=1
+ # To find xmalloc.c and xstrdup.c
+ vpath %.c ../locale/programs
+--- elf/ldconfig.c     13 Jan 2003 08:53:14 -0000      1.31
++++ elf/ldconfig.c     27 Mar 2003 20:36:09 -0000
+@@ -149,6 +149,9 @@
+ static int
+ is_hwcap_platform (const char *name)
+ {
++#if 1
++  return 0;
++#else
+   int hwcap_idx = _dl_string_hwcap (name);
+   if (hwcap_idx != -1 && ((1 << hwcap_idx) & hwcap_mask))
+@@ -164,6 +167,7 @@
+ #endif
+   return 0;
++#endif
+ }
+ /* Get hwcap (including platform) encoding of path.  */
+@@ -175,6 +179,7 @@
+   uint64_t hwcap = 0;
+   uint64_t h;
++#if 0
+   size_t len;
+   len = strlen (str);
+@@ -210,6 +215,7 @@
+       *ptr = '\0';
+     }
++#endif
+   free (str);
+   return hwcap;
+ }
+--- elf/Versions.old   2004-06-26 13:18:35.000000000 +0100
++++ elf/Versions       2004-06-26 14:41:09.000000000 +0100
+@@ -54,5 +54,6 @@
+     _dl_get_tls_static_info; _dl_allocate_tls_init;
+     _dl_tls_setup; _dl_rtld_di_serinfo;
+     _dl_make_stack_executable;
++    _dl_cache_libcmp;
+   }
+ }
diff --git a/packages/glibc/glibc-2.4/etc/.mtn2git_empty b/packages/glibc/glibc-2.4/etc/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/glibc/glibc-2.4/etc/ld.so.conf b/packages/glibc/glibc-2.4/etc/ld.so.conf
new file mode 100644 (file)
index 0000000..3f9b41a
--- /dev/null
@@ -0,0 +1,3 @@
+/usr/local/lib
+/opt/QtPalmtop/lib
+
diff --git a/packages/glibc/glibc-2.4/generic-bits_select.h b/packages/glibc/glibc-2.4/generic-bits_select.h
new file mode 100644 (file)
index 0000000..47e7ded
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _SYS_SELECT_H
+# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+#endif
+
+
+/* We don't use `memset' because this would require a prototype and
+   the array isn't too big.  */
+#define __FD_ZERO(s) \
+  do {                                                                       \
+    unsigned int __i;                                                        \
+    fd_set *__arr = (s);                                                     \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)         \
+      __FDS_BITS (__arr)[__i] = 0;                                           \
+  } while (0)
+#define __FD_SET(d, s)     (__FDS_BITS (s)[__FDELT(d)] |= __FDMASK(d))
+#define __FD_CLR(d, s)     (__FDS_BITS (s)[__FDELT(d)] &= ~__FDMASK(d))
+#define __FD_ISSET(d, s)   ((__FDS_BITS (s)[__FDELT(d)] & __FDMASK(d)) != 0)
diff --git a/packages/glibc/glibc-2.4/generic-bits_time.h b/packages/glibc/glibc-2.4/generic-bits_time.h
new file mode 100644 (file)
index 0000000..b3184d1
--- /dev/null
@@ -0,0 +1,75 @@
+/* System-dependent timing definitions.  Generic version.
+   Copyright (C) 1996,1997,1999-2002,2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/*
+ * Never include this file directly; use <time.h> instead.
+ */
+
+#ifndef __need_timeval
+# ifndef _BITS_TIME_H
+#  define _BITS_TIME_H 1
+
+/* ISO/IEC 9899:1990 7.12.1: <time.h>
+   The macro `CLOCKS_PER_SEC' is the number per second of the value
+   returned by the `clock' function. */
+/* CAE XSH, Issue 4, Version 2: <time.h>
+   The value of CLOCKS_PER_SEC is required to be 1 million on all
+   XSI-conformant systems. */
+#  define CLOCKS_PER_SEC  1000000l
+
+#  if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
+   presents the real value for clock ticks per second for the system.  */
+#   include <bits/types.h>
+extern long int __sysconf (int);
+#   define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
+#  endif
+
+#  ifdef __USE_POSIX199309
+/* Identifier for system-wide realtime clock.  */
+#   define CLOCK_REALTIME              0
+/* Monotonic system-wide clock.  */
+#   define CLOCK_MONOTONIC             1
+/* High-resolution timer from the CPU.  */
+#   define CLOCK_PROCESS_CPUTIME_ID    2
+/* Thread-specific CPU-time clock.  */
+#   define CLOCK_THREAD_CPUTIME_ID     3
+
+/* Flag to indicate time is absolute.  */
+#   define TIMER_ABSTIME               1
+#  endif
+
+# endif        /* bits/time.h */
+#endif
+
+#ifdef __need_timeval
+# undef __need_timeval
+# ifndef _STRUCT_TIMEVAL
+#  define _STRUCT_TIMEVAL      1
+#  include <bits/types.h>
+
+/* A time value that is accurate to the nearest
+   microsecond but also has a range of years.  */
+struct timeval
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __suseconds_t tv_usec;     /* Microseconds.  */
+  };
+# endif        /* struct timeval */
+#endif /* need timeval */
diff --git a/packages/glibc/glibc-2.4/generic-bits_types.h b/packages/glibc/glibc-2.4/generic-bits_types.h
new file mode 100644 (file)
index 0000000..65c8a9f
--- /dev/null
@@ -0,0 +1,200 @@
+/* bits/types.h -- definitions of __*_t types underlying *_t types.
+   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+
+#ifndef        _BITS_TYPES_H
+#define        _BITS_TYPES_H   1
+
+#include <features.h>
+#include <bits/wordsize.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Convenience types.  */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+/* Fixed-size types, underlying types depend on word size and compiler.  */
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+#if __WORDSIZE == 64
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+#endif
+
+/* quad_t is also 64 bits.  */
+#if __WORDSIZE == 64
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+#else
+typedef struct
+{
+  long __val[2];
+} __quad_t;
+typedef struct
+{
+  __u_long __val[2];
+} __u_quad_t;
+#endif
+
+
+/* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
+   macros for each of the OS types we define below.  The definitions
+   of those macros must use the following macros for underlying types.
+   We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
+   variants of each of the following integer types on this machine.
+
+       16              -- "natural" 16-bit type (always short)
+       32              -- "natural" 32-bit type (always int)
+       64              -- "natural" 64-bit type (long or long long)
+       LONG32          -- 32-bit type, traditionally long
+       QUAD            -- 64-bit type, always long long
+       WORD            -- natural type of __WORDSIZE bits (int or long)
+       LONGWORD        -- type of __WORDSIZE bits, traditionally long
+
+   We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
+   conventional uses of `long' or `long long' type modifiers match the
+   types we define, even when a less-adorned type would be the same size.
+   This matters for (somewhat) portably writing printf/scanf formats for
+   these types, where using the appropriate l or ll format modifiers can
+   make the typedefs and the formats match up across all GNU platforms.  If
+   we used `long' when it's 64 bits where `long long' is expected, then the
+   compiler would warn about the formats not matching the argument types,
+   and the programmer changing them to shut up the compiler would break the
+   program's portability.
+
+   Here we assume what is presently the case in all the GCC configurations
+   we support: long long is always 64 bits, long is always word/address size,
+   and int is always 32 bits.  */
+
+#define        __S16_TYPE              short int
+#define __U16_TYPE             unsigned short int
+#define        __S32_TYPE              int
+#define __U32_TYPE             unsigned int
+#define __SLONGWORD_TYPE       long int
+#define __ULONGWORD_TYPE       unsigned long int
+#if __WORDSIZE == 32
+# define __SQUAD_TYPE          __quad_t
+# define __UQUAD_TYPE          __u_quad_t
+# define __SWORD_TYPE          int
+# define __UWORD_TYPE          unsigned int
+# define __SLONG32_TYPE                long int
+# define __ULONG32_TYPE                unsigned long int
+# define __S64_TYPE            __quad_t
+# define __U64_TYPE            __u_quad_t
+/* We want __extension__ before typedef's that use nonstandard base types
+   such as `long long' in C89 mode.  */
+# define __STD_TYPE            __extension__ typedef
+#elif __WORDSIZE == 64
+# define __SQUAD_TYPE          long int
+# define __UQUAD_TYPE          unsigned long int
+# define __SWORD_TYPE          long int
+# define __UWORD_TYPE          unsigned long int
+# define __SLONG32_TYPE                int
+# define __ULONG32_TYPE                unsigned int
+# define __S64_TYPE            long int
+# define __U64_TYPE            unsigned long int
+/* No need to mark the typedef with __extension__.   */
+# define __STD_TYPE            typedef
+#else
+# error
+#endif
+#include <bits/typesizes.h>    /* Defines __*_T_TYPE macros.  */
+
+
+__STD_TYPE __DEV_T_TYPE __dev_t;       /* Type of device numbers.  */
+__STD_TYPE __UID_T_TYPE __uid_t;       /* Type of user identifications.  */
+__STD_TYPE __GID_T_TYPE __gid_t;       /* Type of group identifications.  */
+__STD_TYPE __INO_T_TYPE __ino_t;       /* Type of file serial numbers.  */
+__STD_TYPE __INO64_T_TYPE __ino64_t;   /* Type of file serial numbers (LFS).*/
+__STD_TYPE __MODE_T_TYPE __mode_t;     /* Type of file attribute bitmasks.  */
+__STD_TYPE __NLINK_T_TYPE __nlink_t;   /* Type of file link counts.  */
+__STD_TYPE __OFF_T_TYPE __off_t;       /* Type of file sizes and offsets.  */
+__STD_TYPE __OFF64_T_TYPE __off64_t;   /* Type of file sizes and offsets (LFS).  */
+__STD_TYPE __PID_T_TYPE __pid_t;       /* Type of process identifications.  */
+__STD_TYPE __FSID_T_TYPE __fsid_t;     /* Type of file system IDs.  */
+__STD_TYPE __CLOCK_T_TYPE __clock_t;   /* Type of CPU usage counts.  */
+__STD_TYPE __RLIM_T_TYPE __rlim_t;     /* Type for resource measurement.  */
+__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS).  */
+__STD_TYPE __ID_T_TYPE __id_t;         /* General type for IDs.  */
+__STD_TYPE __TIME_T_TYPE __time_t;     /* Seconds since the Epoch.  */
+__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds.  */
+__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds.  */
+
+__STD_TYPE __DADDR_T_TYPE __daddr_t;   /* The type of a disk address.  */
+__STD_TYPE __SWBLK_T_TYPE __swblk_t;   /* Type of a swap block maybe?  */
+__STD_TYPE __KEY_T_TYPE __key_t;       /* Type of an IPC key.  */
+
+/* Clock ID used in clock and timer functions.  */
+__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+
+/* Timer ID returned by `timer_create'.  */
+__STD_TYPE __TIMER_T_TYPE __timer_t;
+
+/* Type to represent block size.  */
+__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number of disk blocks.  */
+__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
+
+/* Type to count file system nodes.  */
+__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
+
+__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */
+
+/* These few don't really vary by system, they always correspond
+   to one of the other defined types.  */
+typedef __off64_t __loff_t;    /* Type of file sizes and offsets (LFS).  */
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+
+/* Duplicates info from stdint.h but this is used in unistd.h.  */
+__STD_TYPE __SWORD_TYPE __intptr_t;
+
+/* Duplicate info from sys/socket.h.  */
+__STD_TYPE __U32_TYPE __socklen_t;
+
+
+#undef __STD_TYPE
+
+#endif /* bits/types.h */
diff --git a/packages/glibc/glibc-2.4/generic-bits_typesizes.h b/packages/glibc/glibc-2.4/generic-bits_typesizes.h
new file mode 100644 (file)
index 0000000..e9226c4
--- /dev/null
@@ -0,0 +1,66 @@
+/* bits/typesizes.h -- underlying types for *_t.  Generic version.
+   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _BITS_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef        _BITS_TYPESIZES_H
+#define        _BITS_TYPESIZES_H       1
+
+/* See <bits/types.h> for the meaning of these macros.  This file exists so
+   that <bits/types.h> need not vary across different GNU platforms.  */
+
+#define __DEV_T_TYPE           __UQUAD_TYPE
+#define __UID_T_TYPE           __U32_TYPE
+#define __GID_T_TYPE           __U32_TYPE
+#define __INO_T_TYPE           __ULONGWORD_TYPE
+#define __INO64_T_TYPE         __UQUAD_TYPE
+#define __MODE_T_TYPE          __U32_TYPE
+#define __NLINK_T_TYPE         __UWORD_TYPE
+#define __OFF_T_TYPE           __SLONGWORD_TYPE
+#define __OFF64_T_TYPE         __SQUAD_TYPE
+#define __PID_T_TYPE           __S32_TYPE
+#define __RLIM_T_TYPE          __ULONGWORD_TYPE
+#define __RLIM64_T_TYPE                __UQUAD_TYPE
+#define        __BLKCNT_T_TYPE         __SLONGWORD_TYPE
+#define        __BLKCNT64_T_TYPE       __SQUAD_TYPE
+#define        __FSBLKCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSBLKCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSFILCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSFILCNT64_T_TYPE     __UQUAD_TYPE
+#define        __ID_T_TYPE             __U32_TYPE
+#define __CLOCK_T_TYPE         __SLONGWORD_TYPE
+#define __TIME_T_TYPE          __SLONGWORD_TYPE
+#define __USECONDS_T_TYPE      __U32_TYPE
+#define __SUSECONDS_T_TYPE     __SLONGWORD_TYPE
+#define __DADDR_T_TYPE         __S32_TYPE
+#define __SWBLK_T_TYPE         __SLONGWORD_TYPE
+#define __KEY_T_TYPE           __S32_TYPE
+#define __CLOCKID_T_TYPE       __S32_TYPE
+#define __TIMER_T_TYPE         void *
+#define __BLKSIZE_T_TYPE       __SLONGWORD_TYPE
+#define __FSID_T_TYPE          struct { int __val[2]; }
+#define __SSIZE_T_TYPE         __SWORD_TYPE
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define        __FD_SETSIZE            1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/packages/glibc/glibc-2.4/glibc-2.4-compile.patch b/packages/glibc/glibc-2.4/glibc-2.4-compile.patch
new file mode 100644 (file)
index 0000000..ea9f55a
--- /dev/null
@@ -0,0 +1,29 @@
+--- glibc-2.4/csu/libc-start.c.ark     2006-03-13 03:07:15.000000000 +0100
++++ glibc-2.4/csu/libc-start.c 2006-03-13 03:08:51.000000000 +0100
+@@ -59,6 +59,11 @@
+ # define LIBC_START_MAIN BP_SYM (__libc_start_main)
+ #endif
++#ifdef SHARED
++#include <pthread-functions.h>
++extern struct pthread_functions __libc_pthread_functions;
++#endif
++
+ #ifdef MAIN_AUXVEC_ARG
+ /* main gets passed a pointer to the auxiliary.  */
+ # define MAIN_AUXVEC_DECL     , void *
+--- glibc-2.4/nscd/Makefile.ark        2006-03-13 14:05:47.000000000 +0100
++++ glibc-2.4/nscd/Makefile    2006-03-13 14:06:12.000000000 +0100
+@@ -67,8 +67,10 @@
+ # contains only the basic kernel interface headers, not something like
+ # libselinux.  So the simplest thing is to presume that the standard
+ # system headers will be ok for this file.
+-$(objpfx)nscd_stat.o: sysincludes = # nothing
+-$(objpfx)selinux.o: sysincludes = # nothing
++# Except, of course, this breaks crosscompiling with kernel headers in
++# a nonstandard location...
++#$(objpfx)nscd_stat.o: sysincludes = # nothing
++#$(objpfx)selinux.o: sysincludes = # nothing
+ distribute := nscd.h nscd-client.h dbg_log.h \
+             $(addsuffix .c, $(filter-out xmalloc,$(all-nscd-modules))) \
diff --git a/packages/glibc/glibc-2.4/ldsocache-varrun.patch b/packages/glibc/glibc-2.4/ldsocache-varrun.patch
new file mode 100644 (file)
index 0000000..9994d4f
--- /dev/null
@@ -0,0 +1,18 @@
+This patch moves ld.so.cache from /etc to /var/run. This is for devices
+where /etc is JFFS2 or CRAMFS but /var is a ramdisk.
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libc/sysdeps/generic/dl-cache.h~ldsocache-varrun
++++ libc/sysdeps/generic/dl-cache.h
+@@ -29,7 +29,7 @@
+ #endif
+ #ifndef LD_SO_CACHE
+-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
++# define LD_SO_CACHE "/var/run/ld.so.cache"
+ #endif
+ #ifndef add_system_dir
diff --git a/packages/glibc/glibc-2.4/nptl-crosscompile.patch b/packages/glibc/glibc-2.4/nptl-crosscompile.patch
new file mode 100644 (file)
index 0000000..18a46ad
--- /dev/null
@@ -0,0 +1,26 @@
+--- glibc-2.4/nptl/sysdeps/pthread/configure.in.ark    2006-03-12 00:41:40.000000000 +0100
++++ glibc-2.4/nptl/sysdeps/pthread/configure.in        2006-03-12 00:44:08.000000000 +0100
+@@ -45,5 +45,6 @@
+     AC_MSG_ERROR([the compiler must support C cleanup handling])
+   fi
+ else
+-  AC_MSG_ERROR(forced unwind support is required)
++  AC_MSG_WARN([forced unwind support is required, can't be verified while crosscompiling])
++  AC_DEFINE(HAVE_FORCED_UNWIND)
+ fi
+--- glibc-2.4/nptl/sysdeps/pthread/configure.ark       2006-03-12 00:42:47.000000000 +0100
++++ glibc-2.4/nptl/sysdeps/pthread/configure   2006-03-12 00:44:08.000000000 +0100
+@@ -153,7 +153,10 @@
+    { (exit 1); exit 1; }; }
+   fi
+ else
+-  { { echo "$as_me:$LINENO: error: forced unwind support is required" >&5
+-echo "$as_me: error: forced unwind support is required" >&2;}
+-   { (exit 1); exit 1; }; }
++  { echo "$as_me:$LINENO: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&5
++echo "$as_me: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&2;}
++  cat >>confdefs.h <<\_ACEOF
++#define HAVE_FORCED_UNWIND 1
++_ACEOF
++
+ fi
diff --git a/packages/glibc/glibc-initial_2.4.bb b/packages/glibc/glibc-initial_2.4.bb
new file mode 100644 (file)
index 0000000..422e8b7
--- /dev/null
@@ -0,0 +1,46 @@
+SECTION = "libs"
+include glibc_${PV}.bb
+
+DEPENDS = "linux-libc-headers"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-cvs', '${FILE_DIRNAME}/glibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+
+PACKAGES = ""
+
+do_configure () {
+       sed -ie 's,{ (exit 1); exit 1; }; },{ (exit 0); }; },g' ${S}/configure
+       chmod +x ${S}/configure
+       CC="${BUILD_CC}" CPP="${BUILD_CPP}" LD="${BUILD_LD}" ${S}/configure --host=${TARGET_SYS} --build=${BUILD_SYS} \
+               --without-cvs --disable-sanity-checks \
+               --with-headers=${CROSS_DIR}/${TARGET_SYS}/include \
+               --enable-hacker-mode
+       if grep -q GLIBC_2.3 ${S}/ChangeLog; then
+               # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c, which fails without a real cross-compiler.
+               # Fortunately, we don't need errlist-compat.c, since we just need .h files, 
+               # so work around this by creating a fake errlist-compat.c and satisfying its dependencies.
+               # Another workaround might be to tell configure to not use any cross options to $(CC).
+               # The real fix would be to get install-headers to not generate errlist-compat.c.
+               make sysdeps/gnu/errlist.c
+               mkdir -p stdio-common
+               touch stdio-common/errlist-compat.c
+       fi
+}
+
+do_compile () {
+       :
+}
+
+do_stage () {
+       oe_runmake cross-compiling=yes install_root=${CROSS_DIR}/${TARGET_SYS} prefix="" install-headers
+
+       # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
+       # so do them by hand.  We can tolerate an empty stubs.h for the moment.
+       # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
+       mkdir -p ${CROSS_DIR}/${TARGET_SYS}/include/gnu
+       touch ${CROSS_DIR}/${TARGET_SYS}/include/gnu/stubs.h
+       cp ${S}/include/features.h ${CROSS_DIR}/${TARGET_SYS}/include/features.h
+}
+
+do_install () {
+       :
+}
diff --git a/packages/glibc/glibc-intermediate_2.4.bb b/packages/glibc/glibc-intermediate_2.4.bb
new file mode 100644 (file)
index 0000000..ce3d20b
--- /dev/null
@@ -0,0 +1,14 @@
+SECTION = "libs"
+include glibc_${PV}.bb
+
+DEFAULT_PREFERENCE = "-1"
+
+do_install () {
+       :
+}
+
+PACKAGES = ""
+PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
+DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial"
+GLIBC_ADDONS = "nptl,ports"
+GLIBC_EXTRA_OECONF = ""
diff --git a/packages/glibc/glibc_2.4.bb b/packages/glibc/glibc_2.4.bb
new file mode 100644 (file)
index 0000000..0b87067
--- /dev/null
@@ -0,0 +1,204 @@
+DESCRIPTION = "GNU C Library"
+HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
+LICENSE = "LGPL"
+SECTION = "libs"
+PRIORITY = "required"
+MAINTAINER = "Phil Blundell <pb@handhelds.org>"
+DEFAULT_PREFERENCE = "-1"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
+
+GLIBC_ADDONS ?= "ports,nptl,libidn"
+GLIBC_EXTRA_OECONF ?= ""
+
+GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN"
+
+#
+# For now, we will skip building of a gcc package if it is a uclibc one
+# and our build is not a uclibc one, and we skip a glibc one if our build
+# is a uclibc build.
+#
+# See the note in gcc/gcc_3.4.0.oe
+#
+
+python __anonymous () {
+    import bb, re
+    uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
+    if uc_os:
+        raise bb.parse.SkipPackage("incompatible with target %s" %
+                                   bb.data.getVar('TARGET_OS', d, 1))
+}
+
+# nptl needs unwind support in gcc, which can't be built without glibc.
+PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
+PROVIDES += "virtual/libintl virtual/libiconv"
+DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
+RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
+INHIBIT_DEFAULT_DEPS = "1"
+
+#         file://noinfo.patch;patch=1
+#         file://ldconfig.patch;patch=1;pnum=0
+#         file://arm-machine-gmon.patch;patch=1;pnum=0 \
+#         \
+#         file://arm-ioperm.patch;patch=1;pnum=0 \
+#         file://ldd.patch;patch=1;pnum=0 \
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.4.tar.bz2 \
+          ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-2.4.tar.bz2 \
+          ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.4.tar.bz2 \
+          http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2 \
+           file://arm-memcpy.patch;patch=1 \
+           file://arm-longlong.patch;patch=1 \
+           file://fhs-linux-paths.patch;patch=1 \
+           file://dl-cache-libcmp.patch;patch=1 \
+           file://ldsocache-varrun.patch;patch=1 \
+           file://nptl-crosscompile.patch;patch=1 \
+          file://glibc-2.4-compile.patch;patch=1 \
+          file://generic-bits_select.h \
+          file://generic-bits_types.h \
+          file://generic-bits_typesizes.h \
+          file://generic-bits_time.h \
+           file://etc/ld.so.conf \
+           file://generate-supported.mk"
+
+S = "${WORKDIR}/glibc-2.4"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
+inherit autotools
+
+EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
+               --without-cvs --disable-profile --disable-debug --without-gd \
+               --enable-clocale=gnu \
+               --enable-add-ons=${GLIBC_ADDONS} \
+               --with-headers=${WORKDIR}/linux-libc-headers-2.6.12.0/include \
+               --without-selinux \
+               ${GLIBC_EXTRA_OECONF}"
+
+EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
+
+def get_glibc_fpu_setting(bb, d):
+       if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]:
+               return "--without-fp"
+       return ""
+
+do_munge() {
+       # Integrate ports and libidn into tree
+       mv ${WORKDIR}/glibc-ports-${PV} ${S}/ports
+       mv ${WORKDIR}/glibc-libidn-${PV} ${S}/libidn
+
+       # Ports isn't really working... Fix it
+       # Some of this is rather dirty, but it seems to be the only
+       # quick way to get this cruft to compile
+       rm -rf ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
+       ln -s nptl ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
+       cp ${S}/sysdeps/unix/sysv/linux/i386/bits/wchar.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+       cp ${S}/sysdeps/wordsize-32/bits/wordsize.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+       cp ${WORKDIR}/generic-bits_select.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/select.h
+       cp ${WORKDIR}/generic-bits_types.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/types.h
+       cp ${WORKDIR}/generic-bits_typesizes.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/typesizes.h
+       cp ${WORKDIR}/generic-bits_time.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/time.h
+       # Copy in generic stuff for not yet implemented headers
+       for i in ${S}/bits/*.h; do
+               F=`basename $i`
+               [ "$F" = "local_lim.h" ] && continue
+               [ "$F" = "errno.h" ] && continue
+               test -e ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/$F || test -e ${S}/ports/sysdeps/arm/bits/$F || test -e ${S}/sysdeps/unix/sysv/linux/bits/$F || test -e ${S}/sysdeps/ieee754/bits/$F || cp $i ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+       done
+       # This is harmful; we need to get the one from nptl/sysdeps/pthreads
+       rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/libc-lock.h
+       # Obsoleted by sysdeps/arm/{fpu,eabi}/bits/fenv.h
+       rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/fenv.h
+       # Obsoleted by sysdeps/gnu/bits/utmp.h
+       rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/utmp.h
+
+       # Create kernel headers symlink
+       ln -s asm-${TARGET_ARCH} ${WORKDIR}/linux-libc-headers-2.6.12.0/include/asm
+
+       # http://www.handhelds.org/hypermail/oe/51/5135.html
+       # Some files were moved around between directories on
+       # 2005-12-21, which means that any attempt to check out
+       # from CVS using a datestamp older than that will be doomed.
+       #
+       # This is a workaround for that problem.
+       rm -rf ${S}/bits
+}
+
+addtask munge before do_patch after do_unpack
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
+# version check and doesn't really help with anything
+       if [ -z "`which rpcgen`" ]; then
+               echo "rpcgen not found.  Install glibc-devel."
+               exit 1
+       fi
+       (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+       CPPFLAGS="" oe_runconf
+}
+
+rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
+         yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
+         rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
+
+do_compile () {
+       # -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
+       unset LDFLAGS
+       base_do_compile
+       (
+               cd ${S}/sunrpc/rpcsvc
+               for r in ${rpcsvc}; do
+                       h=`echo $r|sed -e's,\.x$,.h,'`
+                       rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
+               done
+       )
+}
+
+do_stage() {
+       rm -f ${STAGING_LIBDIR}/libc.so.6
+       oe_runmake 'install_root=${STAGING_DIR}/${HOST_SYS}' \
+                  'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+                  '${STAGING_LIBDIR}/libc.so.6' \
+                  install-headers install-lib
+
+       install -d ${STAGING_INCDIR}/gnu \
+                  ${STAGING_INCDIR}/bits \
+                  ${STAGING_INCDIR}/rpcsvc
+       install -m 0644 ${S}/include/gnu/stubs.h ${STAGING_INCDIR}/gnu/
+       install -m 0644 ${B}/bits/stdio_lim.h ${STAGING_INCDIR}/bits/
+       install -m 0644 misc/syscall-list.h ${STAGING_INCDIR}/bits/syscall.h
+       for r in ${rpcsvc}; do
+               h=`echo $r|sed -e's,\.x$,.h,'`
+               install -m 0644 ${S}/sunrpc/rpcsvc/$h ${STAGING_INCDIR}/rpcsvc/
+       done
+       for i in libc.a libc_pic.a libc_nonshared.a; do
+               install -m 0644 ${B}/$i ${STAGING_LIBDIR}/ || die "failed to install $i"
+       done
+       echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${STAGING_LIBDIR}/libpthread.so
+       echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${STAGING_LIBDIR}/libc.so
+
+       rm -f ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6
+       oe_runmake 'install_root=${CROSS_DIR}/${TARGET_SYS}' \
+                  'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+                  '${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6' \
+                  install-headers install-lib
+
+       install -d ${CROSS_DIR}/${TARGET_SYS}/include/gnu \
+                  ${CROSS_DIR}/${TARGET_SYS}/include/bits \
+                  ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc
+       install -m 0644 ${S}/include/gnu/stubs.h ${CROSS_DIR}/${TARGET_SYS}/include/gnu/
+       install -m 0644 ${B}/bits/stdio_lim.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/
+       install -m 0644 misc/syscall-list.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/syscall.h
+       for r in ${rpcsvc}; do
+               h=`echo $r|sed -e's,\.x$,.h,'`
+               install -m 0644 ${S}/sunrpc/rpcsvc/$h ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc/
+       done
+
+       for i in libc.a libc_pic.a libc_nonshared.a; do
+               install -m 0644 ${B}/$i ${CROSS_DIR}/${TARGET_SYS}/lib/ || die "failed to install $i"
+       done
+       echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libpthread.so
+       echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so
+}
+
+include glibc-package.bbclass