Hello community,

here is the log from the commit of package glibc for openSUSE:Factory checked 
in at 2012-07-03 20:25:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glibc (Old)
 and      /work/SRC/openSUSE:Factory/.glibc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "glibc", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/glibc/glibc.changes      2012-06-29 
10:39:42.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.glibc.new/glibc.changes 2012-07-03 
20:25:52.000000000 +0200
@@ -1,0 +2,5 @@
+Mon Jul  2 16:23:15 UTC 2012 - [email protected]
+
+- Backport *context patch for ARM from 2.16, so we have a working libpth
+
+-------------------------------------------------------------------

New:
----
  glibc-2.16-arm-context.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.FP8q82/_old  2012-07-03 20:25:54.000000000 +0200
+++ /var/tmp/diff_new_pack.FP8q82/_new  2012-07-03 20:25:54.000000000 +0200
@@ -288,6 +288,8 @@
 Patch1018:      glibc-2.16-mcheck.patch
 # PATCH-FIX-UPSTREAM Correct first_weekday for tr_TR (glibc bug#13223) - 
[email protected]
 Patch1019:      tr_TR.patch
+# PATCH-FIX-UPSTREAM implement *context on ARM - [email protected]
+Patch1020:      glibc-2.16-arm-context.patch
 
 ### 
 # Patches awaiting upstream approval
@@ -561,6 +563,7 @@
 %patch1017 -p1
 %patch1018 -p1
 %patch1019 -p1
+%patch1020 -p1
 
 %patch2001 -p1
 %patch2004 -p1



++++++ glibc-2.16-arm-context.patch ++++++
>From 402a76b62dded0ee93cfec0471aaeccb989196d2 Mon Sep 17 00:00:00 2001
From: Michael Hope <[email protected]>
Date: Mon, 5 Mar 2012 17:58:13 -0500
Subject: [PATCH] ARM: Implement *context routines.

        * sysdeps/unix/sysv/linux/arm/eabi/getcontext.S: New file.
        * sysdeps/unix/sysv/linux/arm/eabi/makecontext.c: New file.
        * sysdeps/unix/sysv/linux/arm/eabi/setcontext.S: New file.
        * sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S: New file.
        * sysdeps/unix/sysv/linux/arm/ucontext_i.sym: New file.
        * sysdeps/unix/sysv/linux/arm/Makefile (gen-as-const-headers): Add
        ucontext_i.sym.
---
 ChangeLog.arm                                  |   10 ++
 sysdeps/unix/sysv/linux/arm/Makefile           |    4 +
 sysdeps/unix/sysv/linux/arm/eabi/getcontext.S  |  113 ++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/arm/eabi/makecontext.c |   73 +++++++++++++++
 sysdeps/unix/sysv/linux/arm/eabi/setcontext.S  |  101 +++++++++++++++++++++
 sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S |   63 +++++++++++++
 sysdeps/unix/sysv/linux/arm/ucontext_i.sym     |   30 ++++++
 7 files changed, 394 insertions(+), 0 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/arm/eabi/getcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arm/eabi/makecontext.c
 create mode 100644 sysdeps/unix/sysv/linux/arm/eabi/setcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/arm/ucontext_i.sym

diff --git a/sysdeps/unix/sysv/linux/arm/Makefile 
b/sysdeps/unix/sysv/linux/arm/Makefile
index d91b968..a981736 100644
--- a/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/Makefile
@@ -20,3 +20,7 @@ endif
 ifeq ($(subdir),resource)
 sysdep_routines += oldgetrlimit64
 endif
+
+ifeq ($(subdir),stdlib)
+gen-as-const-headers += ucontext_i.sym
+endif
diff --git a/sysdeps/unix/sysv/linux/arm/eabi/getcontext.S 
b/sysdeps/unix/sysv/linux/arm/eabi/getcontext.S
new file mode 100644
index 0000000..435eb12
--- /dev/null
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/eabi/getcontext.S
@@ -0,0 +1,113 @@
+/* Copyright (C) 2012 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <rtld-global-offsets.h>
+
+#include "ucontext_i.h"
+
+       .syntax unified
+       .text
+
+/* int getcontext (ucontext_t *ucp) */
+
+ENTRY(__getcontext)
+       /* No need to save r0-r3, d0-d7, or d16-d31.  */
+       add     r1, r0, #MCONTEXT_ARM_R4
+       stmia   r1, {r4-r11}
+
+       /* Save R13 separately as Thumb can't STM it.  */
+       str     r13, [r0, #MCONTEXT_ARM_SP]
+       str     r14, [r0, #MCONTEXT_ARM_LR]
+       /* Return to LR */
+       str     r14, [r0, #MCONTEXT_ARM_PC]
+       /* Return zero */
+       mov     r2, #0
+       str     r2, [r0, #MCONTEXT_ARM_R0]
+
+       /* Save ucontext_t * across the next call.  */
+       mov     r4, r0
+       
+       /* __sigprocmask(SIG_BLOCK, NULL, &(ucontext->uc_sigmask)) */
+       mov     r0, #SIG_BLOCK
+       mov     r1, #0
+       add     r2, r4, #UCONTEXT_SIGMASK
+       bl      PLTJMP(__sigprocmask)
+       
+       /* Store FP regs.  Much of the FP code is copied from 
arm/eabi/setjmp.S.  */
+
+#ifdef PIC
+        ldr     r2, 1f
+        ldr     r1, Lrtld_global_ro
+0:      add     r2, pc, r2
+        ldr     r2, [r2, r1]
+        ldr     r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
+#else
+        ldr     r2, Lhwcap
+        ldr     r2, [r2, #0]
+#endif
+
+       add     r0, r4, #UCONTEXT_REGSPACE
+
+        tst     r2, #HWCAP_ARM_VFP
+        beq     Lno_vfp
+
+        /* Store the VFP registers.
+           Don't use VFP instructions directly because this code
+           is used in non-VFP multilibs.  */
+        /* Following instruction is vstmia r0!, {d8-d15}.  */
+        stc     p11, cr8, [r0], #64
+        /* Store the floating-point status register.  */
+        /* Following instruction is vmrs r1, fpscr.  */
+        mrc     p10, 7, r1, cr1, cr0, 0
+        str     r1, [r0], #4
+Lno_vfp:
+
+        tst     r2, #HWCAP_ARM_IWMMXT
+        beq     Lno_iwmmxt
+
+        /* Save the call-preserved iWMMXt registers.  */
+        /* Following instructions are wstrd wr10, [r0], #8 (etc.)  */
+        stcl    p1, cr10, [r0], #8
+        stcl    p1, cr11, [r0], #8
+        stcl    p1, cr12, [r0], #8
+        stcl    p1, cr13, [r0], #8
+        stcl    p1, cr14, [r0], #8
+        stcl    p1, cr15, [r0], #8
+Lno_iwmmxt:
+
+       /* Restore the clobbered R4 and LR.  */
+       ldr     r14, [r4, #MCONTEXT_ARM_LR]
+       ldr     r4, [r4, #MCONTEXT_ARM_R4]
+
+       mov     r0, #0
+
+       DO_RET(r14)
+
+END(__getcontext)
+
+#ifdef PIC
+1:      .long   _GLOBAL_OFFSET_TABLE_ - 0b - 8
+Lrtld_global_ro:
+        .long   C_SYMBOL_NAME(_rtld_global_ro)(GOT)
+#else
+Lhwcap:
+        .long   C_SYMBOL_NAME(_dl_hwcap)
+#endif
+
+
+weak_alias(__getcontext, getcontext)
diff --git a/sysdeps/unix/sysv/linux/arm/eabi/makecontext.c 
b/sysdeps/unix/sysv/linux/arm/eabi/makecontext.c
new file mode 100644
index 0000000..d6ae6f0
--- /dev/null
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/eabi/makecontext.c
@@ -0,0 +1,73 @@
+/* Copyright (C) 2012 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdarg.h>
+#include <ucontext.h>
+
+/* Number of arguments that go in registers.  */
+#define NREG_ARGS  4
+
+/* Take a context previously prepared via getcontext() and set to
+   call func() with the given int only args.  */
+void
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+  extern void __startcontext (void);
+  unsigned long *funcstack;
+  va_list vl;
+  unsigned long *regptr;
+  unsigned int reg;
+  int misaligned;
+
+  /* Start at the top of stack.  */
+  funcstack = (unsigned long *) (ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
+
+  /* Ensure the stack stays eight byte aligned.  */
+  misaligned = ((unsigned long) funcstack & 4) != 0;
+
+  if ((argc > NREG_ARGS) && (argc & 1) != 0)
+    misaligned = !misaligned;
+
+  if (misaligned)
+    funcstack -= 1;
+
+  va_start (vl, argc);
+
+  /* Reserve space for the on-stack arguments.  */
+  if (argc > NREG_ARGS)
+    funcstack -= (argc - NREG_ARGS);
+
+  ucp->uc_mcontext.arm_sp = (unsigned long) funcstack;
+  ucp->uc_mcontext.arm_pc = (unsigned long) func;
+
+  /* Exit to startcontext() with the next context in R4 */
+  ucp->uc_mcontext.arm_r4 = (unsigned long) ucp->uc_link;
+  ucp->uc_mcontext.arm_lr = (unsigned long) __startcontext;
+
+  /* The first four arguments go into registers.  */
+  regptr = &(ucp->uc_mcontext.arm_r0);
+
+  for (reg = 0; (reg < argc) && (reg < NREG_ARGS); reg++)
+    *regptr++ = va_arg (vl, unsigned long);
+
+  /* And the remainder on the stack.  */
+  for (; reg < argc; reg++)
+    *funcstack++ = va_arg (vl, unsigned long);
+
+  va_end (vl);
+}
+weak_alias (__makecontext, makecontext)
diff --git a/sysdeps/unix/sysv/linux/arm/eabi/setcontext.S 
b/sysdeps/unix/sysv/linux/arm/eabi/setcontext.S
new file mode 100644
index 0000000..78003f5
--- /dev/null
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/eabi/setcontext.S
@@ -0,0 +1,101 @@
+/* Copyright (C) 2012 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <rtld-global-offsets.h>
+
+#include "ucontext_i.h"
+
+       .syntax unified
+       .text
+
+/* int setcontext (const ucontext_t *ucp) */
+
+ENTRY(__setcontext)
+       mov     r4, r0
+       add     r0, r0, #UCONTEXT_REGSPACE
+
+        /* Restore the VFP registers.  Copied from arm/eabi/__longjmp.S.  */
+#ifdef PIC
+        ldr     r2, 1f
+        ldr     r1, Lrtld_global_ro
+0:      add     r2, pc, r2
+        ldr     r2, [r2, r1]
+        ldr     r2, [r2, #RTLD_GLOBAL_RO_DL_HWCAP_OFFSET]
+#else
+        ldr     r2, Lhwcap
+        ldr     r2, [r2, #0]
+#endif
+
+        tst     r2, #HWCAP_ARM_VFP
+        beq     Lno_vfp_sc
+
+        /* Following instruction is vldmia r0!, {d8-d15}.  */
+        ldc     p11, cr8, [r0], #64
+        /* Restore the floating-point status register.  */
+        ldr     r1, [r0], #4
+        /* Following instruction is fmxr fpscr, r1.  */
+        mcr     p10, 7, r1, cr1, cr0, 0
+Lno_vfp_sc:
+        tst     r2, #HWCAP_ARM_IWMMXT
+        beq     Lno_iwmmxt_sc
+
+        /* Restore the call-preserved iWMMXt registers.  */
+        /* Following instructions are wldrd wr10, [r0], #8 (etc.)  */
+        ldcl    p1, cr10, [r0], #8
+        ldcl    p1, cr11, [r0], #8
+        ldcl    p1, cr12, [r0], #8
+        ldcl    p1, cr13, [r0], #8
+        ldcl    p1, cr14, [r0], #8
+        ldcl    p1, cr15, [r0], #8
+Lno_iwmmxt_sc:
+
+       /* Now bring back the signal status.  */
+       mov     r0, #SIG_SETMASK
+       add     r1, r4, #UCONTEXT_SIGMASK
+       mov     r2, #0
+       bl      PLTJMP(__sigprocmask)
+
+        /* Loading r0-r3 makes makecontext easier.  */
+        add     r14, r4, #MCONTEXT_ARM_R0
+        ldmia   r14, {r0-r12}
+        ldr     r13, [r14, #(MCONTEXT_ARM_SP - MCONTEXT_ARM_R0)]
+        add     r14, r14, #(MCONTEXT_ARM_LR - MCONTEXT_ARM_R0)
+        ldmia   r14, {r14, pc}
+
+END(setcontext)
+weak_alias(__setcontext, setcontext)
+
+       /* Called when a makecontext() context returns.  Start the
+          context in R4 or fall through to exit().  */
+ENTRY(__startcontext)
+        movs    r0, r4
+        bne     PLTJMP(__setcontext)
+
+        @ New context was 0 - exit
+        b       PLTJMP(_exit)
+END(__startcontext)
+
+#ifdef PIC
+1:      .long   _GLOBAL_OFFSET_TABLE_ - 0b - 8
+Lrtld_global_ro:
+        .long   C_SYMBOL_NAME(_rtld_global_ro)(GOT)
+#else
+Lhwcap:
+        .long   C_SYMBOL_NAME(_dl_hwcap)
+#endif
+
diff --git a/sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S 
b/sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S
new file mode 100644
index 0000000..09492d0
--- /dev/null
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/eabi/swapcontext.S
@@ -0,0 +1,63 @@
+/* Copyright (C) 2012 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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+       .syntax unified
+       .text
+
+/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */
+
+ENTRY(swapcontext)
+
+       /* Have getcontext() do most of the work then fix up
+          LR afterwards.  Save R3 to keep the stack aligned.  */
+       push    {r0,r1,r3,r14}
+       cfi_adjust_cfa_offset (16)
+       cfi_rel_offset (r0,0)
+       cfi_rel_offset (r1,4)
+       cfi_rel_offset (r3,8)
+       cfi_rel_offset (r14,12)
+
+       bl      __getcontext
+       mov     r4, r0
+
+       pop     {r0,r1,r3,r14}
+       cfi_adjust_cfa_offset (-16)
+       cfi_restore (r0)
+       cfi_restore (r1)
+       cfi_restore (r3)
+       cfi_restore (r14)
+
+       /* Exit if getcontext() failed.  */
+       cmp     r4, #0
+       itt     ne
+       movne   r0, r4
+       RETINSTR(ne, r14)
+       
+       /* Fix up LR and the PC.  */
+       str     r13,[r0, #MCONTEXT_ARM_SP]
+       str     r14,[r0, #MCONTEXT_ARM_LR]
+       str     r14,[r0, #MCONTEXT_ARM_PC]
+
+       /* And swap using swapcontext().  */
+       mov     r0, r1
+       b       __setcontext
+
+END(swapcontext)
diff --git a/sysdeps/unix/sysv/linux/arm/ucontext_i.sym 
b/sysdeps/unix/sysv/linux/arm/ucontext_i.sym
new file mode 100644
index 0000000..306292f
--- /dev/null
+++ b/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/ucontext_i.sym
@@ -0,0 +1,30 @@
+#include <inttypes.h>
+#include <signal.h>
+#include <stddef.h>
+#include <sys/ucontext.h>
+
+SIG_BLOCK
+SIG_SETMASK
+
+-- Offsets of the fields in the ucontext_t structure.
+#define ucontext(member)       offsetof (ucontext_t, member)
+#define mcontext(member)       ucontext (uc_mcontext.member)
+
+UCONTEXT_FLAGS                 ucontext (uc_flags)
+UCONTEXT_LINK                  ucontext (uc_link)
+UCONTEXT_STACK                 ucontext (uc_stack)
+UCONTEXT_MCONTEXT              ucontext (uc_mcontext)
+UCONTEXT_SIGMASK               ucontext (uc_sigmask)
+
+UCONTEXT_REGSPACE              ucontext (uc_regspace)
+
+MCONTEXT_TRAP_NO               mcontext (trap_no)
+MCONTEXT_ERROR_CODE            mcontext (error_code)
+MCONTEXT_OLDMASK               mcontext (oldmask)
+MCONTEXT_ARM_R0                        mcontext (arm_r0)
+MCONTEXT_ARM_R4                        mcontext (arm_r4)
+MCONTEXT_ARM_SP                        mcontext (arm_sp)
+MCONTEXT_ARM_LR                        mcontext (arm_lr)
+MCONTEXT_ARM_PC                        mcontext (arm_pc)
+MCONTEXT_ARM_CPSR              mcontext (arm_cpsr)
+MCONTEXT_FAULT_ADDRESS         mcontext (fault_address)
-- 
1.7.3.4

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to