[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#40479: marked as done (libc6: NMU patch for ARM)



Your message dated 8 Jul 1999 18:54:01 -0000
with message-id <19990708185401.21097.qmail@master.debian.org>
and subject line Bug#40479: fixed in glibc 2.1.1-13
has caused the attached bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I'm
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Ian Jackson
(administrator, Debian bugs database)

Received: (at submit) by bugs.debian.org; 30 Jun 1999 06:59:29 +0000
Received: (qmail 10712 invoked from network); 30 Jun 1999 06:59:28 -0000
Received: from tia.jimpick.com (204.209.212.111)
  by master.debian.org with SMTP; 30 Jun 1999 06:59:28 -0000
Received: from (fleming.jimpick.com) [204.209.212.121] 
	by tia.jimpick.com with esmtp (Exim 2.05 #1)
	id 10zEL2-0005ef-00 (Debian); Tue, 29 Jun 1999 23:59:23 -0700
Received: from jim by fleming.jimpick.com with local (Exim 3.02 #1 (Debian))
	id 10zEKo-0002B1-00; Tue, 29 Jun 1999 23:59:06 -0700
From: Jim Pick <jim@jimpick.com>
Subject: libc6: NMU patch for ARM
To: submit@bugs.debian.org
X-Mailer: bug 3.2.2
Message-Id: <E10zEKo-0002B1-00@fleming.jimpick.com>
Date: Tue, 29 Jun 1999 23:59:06 -0700

Package: libc6
Version: 2.1.1-12.1
Severity: normal

Apologies if I sent this twice - I think my first try didn't go through.

Attached is an NMU patch to get glibc to work on ARM.

Cheers,

 - Jim


diff -urN old-deb/glibc-2.1.1/debian/changelog glibc-2.1.1/debian/changelog
--- old-deb/glibc-2.1.1/debian/changelog	Tue Jun 29 10:42:01 1999
+++ glibc-2.1.1/debian/changelog	Thu Jun 17 21:12:15 1999
@@ -1,3 +1,10 @@
+glibc (2.1.1-12.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Include patch for ARM to fix dynamic linker.
+
+ -- Jim Pick <jim@jimpick.com>  Thu, 17 Jun 1999 21:11:59 -0700
+
 glibc (2.1.1-12) unstable; urgency=low
 
   * debian/rules: Use /var/lib/misc here too.
diff -urN old-deb/glibc-2.1.1/debian/patches/arm-dynamiclinker.dpatch glibc-2.1.1/debian/patches/arm-dynamiclinker.dpatch
--- old-deb/glibc-2.1.1/debian/patches/arm-dynamiclinker.dpatch	Wed Dec 31 16:00:00 1969
+++ glibc-2.1.1/debian/patches/arm-dynamiclinker.dpatch	Thu Jun 17 21:11:07 1999
@@ -0,0 +1,74 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: Patch from philb to fix dynamic linker
+
+if [ $# -ne 2 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch -d "$2" -f -p0 < $0;;
+    -unpatch) patch -d "$2" -f -R -p0 < $0;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
+
+
+From: Philip Blundell <philb@gnu.org>
+Subject: patch for dynamic linker
+To: drepper@cygnus.com, scottb@netwinder.org
+Cc: jim@jimpick.com, stewart@nexus.carleton.ca
+Date: Sun, 06 Jun 1999 00:50:33 +0100
+
+Hi,
+
+This patch corrects a long-standing problem that caused ld.so to segfault when 
+glibc was compiled with -O2 or higher on the ARM.  The old code relied on 
+addressing the GOT from inside the asm, but because the compiler couldn't 
+see this it was tending to reschedule instructions so that the PIC register 
+wasn't loaded until later in the function.
+
+Uli, could you check this in please?  It should probably go into the glibc 2.1 
+branch as well as the mainline.
+
+Thanks
+
+p.
+
+1999-06-05  Philip Blundell  <philb@gnu.org>
+
+	* sysdeps/arm/dl-machine.h (elf_machine_load_address): Fix
+	problems with GOT addressing.
+
+--- sysdeps/arm/dl-machine.h~	Sun May  9 11:39:24 1999
++++ sysdeps/arm/dl-machine.h	Sat Jun  5 19:33:09 1999
+@@ -52,22 +52,14 @@
+ 
+ 
+ /* Return the run-time load address of the shared object.  */
+-// patb
+ static inline Elf32_Addr __attribute__ ((unused))
+ elf_machine_load_address (void)
+ {
+-  Elf32_Addr addr;
+-  asm (" ldr ip,.L1
+-  	ldr r3,.L3
+-	add r3, r3, sl
+-  	ldr ip,[sl, ip]
+-  	sub ip, r3, ip
+-  	b .L2
+-  	.L1: .word _dl_start(GOT)
+-	.L3: .word _dl_start(GOTOFF)
+-  	.L2: mov %0, ip"
+-       : "=r" (addr) : : "ip", "r3");
+-  return addr;
++  extern void __dl_start asm ("_dl_start");
++  Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
++  Elf32_Addr pcrel_addr;
++  asm ("adr %0, _dl_start" : "=r" (pcrel_addr));
++  return pcrel_addr - got_addr;
+ }
+ 
diff -urN old-deb/glibc-2.1.1/debian/patches/arm-osabi.dpatch glibc-2.1.1/debian/patches/arm-osabi.dpatch
--- old-deb/glibc-2.1.1/debian/patches/arm-osabi.dpatch	Wed Dec 31 16:00:00 1969
+++ glibc-2.1.1/debian/patches/arm-osabi.dpatch	Sun Jun 20 11:03:12 1999
@@ -0,0 +1,40 @@
+#! /bin/sh -e
+
+# All lines beginning with `# DPATCH:' are a description of the patch.
+# DP: A small patch to remove OSABI check on ELF executables so that
+# DP: ldd doesn't trip on new value in ELF header for ARM.
+
+if [ $# -ne 2 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch -d "$2" -f -p0 < $0;;
+    -unpatch) patch -d "$2" -f -R -p0 < $0;;
+    *)
+	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+	exit 1
+esac
+exit 0
+
+
+--- elf/dl-load.c.backup	Sun Jun 20 10:57:41 1999
++++ elf/dl-load.c	Sun Jun 20 10:59:31 1999
+@@ -746,11 +746,12 @@
+ 	LOSE (0, "ELF file version ident not " STRING(EV_CURRENT));
+       /* XXX We should be able so set system specific versions which are
+ 	 allowed here.  */
+-      if (header->e_ident[EI_OSABI] != ELFOSABI_SYSV)
+-	LOSE (0, "ELF file OS ABI not " STRING(ELFOSABI_SYSV));
++      /* if (header->e_ident[EI_OSABI] != ELFOSABI_SYSV)
++	 LOSE (0, "ELF file OS ABI not " STRING(ELFOSABI_SYSV)); */
+       if (header->e_ident[EI_ABIVERSION] != 0)
+ 	LOSE (0, "ELF file ABI version not 0");
+-      LOSE (0, "internal error");
++      if (header->e_ident[EI_OSABI] == ELFOSABI_SYSV)
++	LOSE (0, "internal error");
+     }
+ 
+   if (header->e_version != EV_CURRENT)
+
+ 
diff -urN old-deb/glibc-2.1.1/debian/patches/arm-sysctl.dpatch glibc-2.1.1/debian/patches/arm-sysctl.dpatch
--- old-deb/glibc-2.1.1/debian/patches/arm-sysctl.dpatch	Tue Jun 29 10:42:03 1999
+++ glibc-2.1.1/debian/patches/arm-sysctl.dpatch	Wed Dec 31 16:00:00 1969
@@ -1,54 +0,0 @@
-#! /bin/sh -e
-
-# All lines beginning with `# DPATCH:' are a description of the patch.
-# DP: ARM 2.0 kernels don't have sysctl - this is a stub implementation
-
-if [ $# -ne 2 ]; then
-    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-    exit 1
-fi
-case "$1" in
-    -patch) patch -d "$2" -f -p1 < $0;;
-    -unpatch) patch -d "$2" -f -R -p1 < $0;;
-    *)
-	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
-	exit 1
-esac
-exit 0
-
-diff -urN glibc-pre2.1-2.0.100/sysdeps/unix/sysv/linux/arm/sysctl.c glibc-pre2.1-2.0.100.jim/sysdeps/unix/sysv/linux/arm/sysctl.c
---- glibc-pre2.1-2.0.100/sysdeps/unix/sysv/linux/arm/sysctl.c	Wed Dec 31 16:00:00 1969
-+++ glibc-pre2.1-2.0.100.jim/sysdeps/unix/sysv/linux/arm/sysctl.c	Sun Nov 22 19:27:46 1998
-@@ -0,0 +1,32 @@
-+/* sysctl - Read or write system information.  Linux version.
-+   Copyright (C) 1996, 1997 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 Library General Public License as
-+   published by the Free Software Foundation; either version 2 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
-+   Library General Public License for more details.
-+
-+   You should have received a copy of the GNU Library General Public
-+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
-+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+   Boston, MA 02111-1307, USA.  */
-+
-+#include <sys/sysctl.h>
-+
-+/* sysctl is not yet implemented in ArmLinux */
-+extern int __syscall_error(int);
-+#include <asm/errno.h>
-+
-+int
-+sysctl (int *name, int nlen, void *oldval, size_t *oldlenp,
-+       void *newval, size_t newlen)
-+{
-+
-+  return __syscall_error(ENOSYS);
-+}
diff -urN old-deb/glibc-2.1.1/debian/rules glibc-2.1.1/debian/rules
--- old-deb/glibc-2.1.1/debian/rules	Tue Jun 29 10:42:01 1999
+++ glibc-2.1.1/debian/rules	Sun Jun 20 11:03:42 1999
@@ -786,7 +786,7 @@
 ifeq ($(kernel),linux)
   debian_patches += fhs
   ifeq ($(ARCH),arm)
-    debian_patches += arm-string arm-sysctl
+    debian_patches += arm-string arm-dynamiclinker arm-osabi
   else
   ifeq ($(ARCH),sparc)
     debian_patches += sparc32-chown

-- System Information
Debian Release: potato
Kernel Version: Linux fleming 2.2.4 #1 Tue Mar 23 19:41:42 PST 1999 i586 unknown

Versions of the packages libc6 depends on:
ii  ldso            1.9.11-2       The Linux dynamic linker, library and utilit


Reply to: