Submitted By: Joe Ciccone <jciccone@linuxfromscratch.org>
Date: 2006-11-30
Initial Package Version: 2.5
	Rediffed against 2.6 by Joe Ciccone
Upstream Status: In CVS
Origin: http://lists.parisc-linux.org/pipermail/parisc-linux/2006-July/029549.html
Description: Adds the TLS reloc numbers to elf.h
             Works around a bug in the data initialization.
             Adds a missing macro.

diff -Naur glibc-2.6.orig/elf/elf.h glibc-2.6/elf/elf.h
--- glibc-2.6.orig/elf/elf.h	2007-07-04 21:13:57.000000000 -0400
+++ glibc-2.6/elf/elf.h	2007-07-04 21:14:25.000000000 -0400
@@ -1710,6 +1710,8 @@
 #define R_PARISC_LTOFF_FPTR14R	62	/* LT-rel. fct ptr, right 14 bits. */
 #define R_PARISC_FPTR64		64	/* 64 bits function address.  */
 #define R_PARISC_PLABEL32	65	/* 32 bits function address.  */
+#define R_PARISC_PLABEL21L	66	/* Left 21 bits of fdesc address */
+#define R_PARISC_PLABEL14R	70	/* Right 14 bits of fdesc address */
 #define R_PARISC_PCREL64	72	/* 64 bits PC-rel. address.  */
 #define R_PARISC_PCREL22F	74	/* 22 bits PC-rel. address.  */
 #define R_PARISC_PCREL14WR	75	/* PC-rel. address, right 14 bits.  */
@@ -1770,6 +1772,29 @@
 #define R_PARISC_LTOFF_TP16F	229	/* 16 bits LT-TP-rel. address.  */
 #define R_PARISC_LTOFF_TP16WF	230	/* 16 bits LT-TP-rel. address.  */
 #define R_PARISC_LTOFF_TP16DF	231	/* 16 bits LT-TP-rel. address.  */
+
+#define R_PARISC_GNU_VTENTRY    232
+#define R_PARISC_GNU_VTINHERIT  233
+#define R_PARISC_TLS_GD21L      234	/* GD 21-bit left */
+#define R_PARISC_TLS_GD14R      235	/* GD 14-bit right */
+#define R_PARISC_TLS_GDCALL     236	/* GD call to __t_g_a */
+#define R_PARISC_TLS_LDM21L     237	/* LD module 21-bit left */
+#define R_PARISC_TLS_LDM14R     238	/* LD module 14-bit right */
+#define R_PARISC_TLS_LDMCALL    239	/* LD module call to __t_g_a */
+#define R_PARISC_TLS_LDO21L     240	/* LD offset 21-bit left */
+#define R_PARISC_TLS_LDO14R     241	/* LD offset 14-bit right */
+#define R_PARISC_TLS_DTPMOD32   242	/* DTP module 32-bit */
+#define R_PARISC_TLS_DTPMOD64   243	/* DTP module 64-bit */
+#define R_PARISC_TLS_DTPOFF32   244	/* DTP offset 32-bit */
+#define R_PARISC_TLS_DTPOFF64   245	/* DTP offset 32-bit */
+
+#define R_PARISC_TLS_LE21L      R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R      R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L      R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R      R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32    R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64    R_PARISC_TPREL64
+
 #define R_PARISC_HIRESERVE	255
 
 /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
diff -Naur glibc-2.6.orig/elf/rtld.c glibc-2.6/elf/rtld.c
--- glibc-2.6.orig/elf/rtld.c	2007-07-04 21:13:57.000000000 -0400
+++ glibc-2.6/elf/rtld.c	2007-07-04 21:14:25.000000000 -0400
@@ -379,14 +379,14 @@
      know it is available.  We do not have to clear the memory if we
      do not have to use the temporary bootstrap_map.  Global variables
      are initialized to zero by default.  */
-#ifndef DONT_USE_BOOTSTRAP_MAP
+#if !defined DONT_USE_BOOTSTRAP_MAP
 # ifdef HAVE_BUILTIN_MEMSET
   __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
 # else
-  for (size_t cnt = 0;
-       cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
-       ++cnt)
-    bootstrap_map.l_info[cnt] = 0;
+  /* Clear the whole bootstrap_map structure */
+  for (char *cnt = (char *)&(bootstrap_map);
+       cnt < ((char *)&(bootstrap_map) + sizeof (bootstrap_map));
+       *cnt++ = '\0');
 # endif
 # if USE___THREAD
   bootstrap_map.l_tls_modid = 0;
diff -Naur glibc-2.6.orig/sysdeps/unix/sysv/linux/getcwd.c glibc-2.6/sysdeps/unix/sysv/linux/getcwd.c
--- glibc-2.6.orig/sysdeps/unix/sysv/linux/getcwd.c	2007-07-04 21:13:56.000000000 -0400
+++ glibc-2.6/sysdeps/unix/sysv/linux/getcwd.c	2007-07-04 21:14:25.000000000 -0400
@@ -31,6 +31,9 @@
 
 #include <kernel-features.h>
 
+#ifndef MAX
+# define MAX(a, b) ((a) < (b) ? (b) : (a))
+#endif
 
 /* If we compile the file for use in ld.so we don't need the feature
    that getcwd() allocates the buffers itself.  */
