about summary refs log tree commit diff
path: root/sysdeps/alpha
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-05-24 02:30:09 +0000
committerUlrich Drepper <drepper@redhat.com>1997-05-24 02:30:09 +0000
commit0501d6036744d44cad6d5a6eda8090ddfbe604c4 (patch)
treeac5de4474ab5209dd348b7442dac99d4547851af /sysdeps/alpha
parentbfbc57545a197afff72572c3a6f0563023d553a5 (diff)
downloadglibc-0501d6036744d44cad6d5a6eda8090ddfbe604c4.tar.gz
glibc-0501d6036744d44cad6d5a6eda8090ddfbe604c4.tar.xz
glibc-0501d6036744d44cad6d5a6eda8090ddfbe604c4.zip
Update.
1997-05-24 03:51  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/Makefile (routines): Add strtol_l, strtoul_l, strtoll_l,
	strtoull_l, strtof_l, strtod_l, and strtold_l.
	* stdlib/stdlib.h: Add prototypes for new functions.
	* stdlib/strtod.c: Change for compiling as strtoX_l.
	* stdlib/strtol.c: Likewise.
	* stdlib/strtof.c: Likewise.
	* stdlib/strtold.c: Likewise.
	* stdlib/strtod_l.c: New file.
	* stdlib/strtof_l.c: New file.
	* stdlib/strtold_l.c: New file.
	* stdlib/strtol_l.c: New file.
	* stdlib/strtoul_l.c: New file.
	* stdlib/strtoll_l.c: New file.
	* stdlib/strtoull_l.c: New file.
	* string/Makefile (routines): Add strcasecmp_l and strncase_l.
	* string/string.h: Add prototypes for new functions.
	* sysdeps/generic/strcasecmp.c: Change for compiling as strcasecmp_l.
	* sysdeps/generic/strncase.c: Change for compiling as strncasecmp_l.
	* sysdeps/generic/strcasecmp_l.c: New file.
	* sysdeps/generic/strncase_l.c: New file.
	* wcsmbs/Makefile (routines): Add wcstol_l, wcstoul_l, wcstoll_l,
	wcstoull_l, wcstod_l, wcstold_l, wcstof_l, wcscasecmp_l, and
	wcsncase_l.
	* wcsmbs/wchar.h: Add prototypes for new functions.
	* wcsmbs/wcscasecmp.c: Change for compiling as wcscasecmp_l.
	* wcsmbs/wcsncase.c: Change for compiling as wcsncasecmp_l.
	* wcsmbs/wcscasecmp_l.c: New file.
	* wcsmbs/wcsncase_l.c: New file.
	* wcsmbs/wcstof.c: Change for compiling as wcstof_l.c
	* wcsmbs/wcstold.c: Change for compiling as wcstold_l.c
	* wcsmcs/wcstod_l.c: New file.
	* wcsmcs/wcstof_l.c: New file.
	* wcsmcs/wcstold_l.c: New file.
	* wcsmcs/wcstol_l.c: New file.
	* wcsmcs/wcstoul_l.c: New file.
	* wcsmcs/wcstoll_l.c: New file.
	* wcsmcs/wcstoull_l.c: New file.

	* Makeconfig (binfmt-subdir): New variable.  Set to `elf' if
	$(elf) is defined.  More to come later when other binary formats
	are supported.
	* Makefile (subdirs): Remove elf.  Add $(binfmt-subdir).
	Suggested by Philip Blundell.

	* stdlib/Makefile (headers): Add fmtmsg.h.
	(routines): Add fmtmsg.
	* stdlib/fmtmsg.c: New file.
	* stdlib/fmtmsg.h: New file.
	* manual/stdio.texi: Add description of fmtmsg and addseverity.
	* manual/examples/fmtmsgexpl.c: Example program for fmtmsg
	documentation.

1997-05-23 15:26  Philip Blundell  <pjb27@cam.ac.uk>

	* resolv/res_query.c (res_querydomain): Avoid potential buffer
	overrun.  Reported by Dan A. Dickey <ddickey@transition.com>.

1997-05-22 18:36  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* elf/dl-support.c (_dl_sysdep_open_zero_fill,
	_dl_sysdep_read_whole_file): Moved functions to ...
	* elf/dl-misc.c: This new file.
	* sysdeps/generic/dl-sysdepio.c: Delete file and move functions...
	* elf/dl-misc.c: ... here.
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill,
	_dl_sysdep_read_whole_file): Delete functions; they now come from
	elf/dl-misc.c (dl-support.c had contained identical versions).
	* sysdeps/mach/hurd/dl-sysdepio.c: Delete file; move functions...
	* sysdeps/mach/hurd/dl-sysdep.c: ... here, but mark them weak so
	that the regular ones in dl-misc work once we've initialized.
	* elf/Makefile (dl-routines): Remove dl-sysdepio.c.  Add dl-misc.c.

1997-05-22 21:55  Philip Blundell  <pjb27@cam.ac.uk>

	* inet/Makefile (headers): Add netinet/inbits.h.
	* inet/netinet/in.h: New file.
	* sysdeps/generic/netinet/inbits.h: Likewise.
	* sysdeps/unix/sysv/linux/netinet/inbits.h: Likewise.
	* sysdeps/generic/netinet/ip6.h: Move to...
	* inet/netinet/ip6.h: ... here.
	* sysdeps/generic/netinet/icmp6.h: Move to...
	* inet/netinet/icmp6.h: ... here.
	* sysdeps/unix/sysv/linux/netinet/in.h: Remove.
	* sysdeps/generic/netinet/in.h: Remove.

1997-05-22 05:40  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): If we are
	not looking at the new thread-safe .plt, don't be lazy about relocs.
	(_dl_runtime_resolve): Fix up arithmetic for new .plt layout.
	(elf_alpha_fix_plt): Insert wmb as appropriate to ensure safety.
	* elf/dynamic-link.h (ELF_DYNAMIC_RELOCATE): Let
	elf_machine_runtime_setup() decide if we can actually be lazy.
	* elf/rtld.c (_dl_start): So don't call it.
	* elf/dl-reloc.c (_dl_relocate_object): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Return lazy.
	* sysdeps/m68k/dl-machine.h (elf_machine_runtime_setup): Likewise.
	* sysdeps/mips/dl-machine.h (elf_machine_runtime_setup): Likewise.
	* sysdeps/powerpc/dl-machine.h (elf_machine_runtime_setup): Likewise.
	* sysdeps/sparc/dl-machine.h (elf_machine_runtime_setup): Likewise.
	* sysdeps/stub/dl-machine.h (elf_machine_runtime_setup): Update
	skeleton definition.

1997-05-22 18:45  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu/__math.h (logb): Remove second value placed on
	stack by fxtract.

1997-05-22 13:07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* sunrpc/rpcsvc/rusers.x: Provide and correct prototypes,
	add cast to (xdrproc_t) where necessary to prevent warnings.

1997-05-22 12:18  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Remove I/O functions.

	* sunrpc/rpcinfo.c (get_inet_address): Use INADDR_NONE and INADDR_ANY
	* sysdeps/libm-ieee754/s_cexp.c: Fix typo: string_alias ->
	* nss/XXX-lookup.c: Add missing explanation.
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r--sysdeps/alpha/dl-machine.h34
1 files changed, 25 insertions, 9 deletions
diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h
index 7a51df5f00..49d6830a65 100644
--- a/sysdeps/alpha/dl-machine.h
+++ b/sysdeps/alpha/dl-machine.h
@@ -86,7 +86,7 @@ elf_machine_load_address (void)
 /* Set up the loaded object described by L so its unrelocated PLT
    entries will jump to the on-demand fixup code in dl-runtime.c.  */
 
-static inline void
+static inline int
 elf_machine_runtime_setup (struct link_map *l, int lazy)
 {
   Elf64_Addr plt;
@@ -104,7 +104,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
 
       /* Identify this shared object */
       *(Elf64_Addr *)(plt + 24) = (Elf64_Addr) l;
+
+      /* If the first instruction of the plt entry is not
+	 "br $28, plt0", we cannot do lazy relocation.  */
+      lazy = (*(unsigned *)(plt + 32) == 0xc39ffff7);
     }
+
+  return lazy;
 }
 
 /* This code is used in dl-runtime.c to call the `fixup' function
@@ -145,9 +151,11 @@ _dl_runtime_resolve:
 	.prologue 1
 	/* Set up the arguments for _dl_runtime_resolve. */
 	/* $16 = link_map out of plt0 */
+	/* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
+	subq	$28, $27, $17
 	ldq	$16, 8($27)
-	/* $17 = offset of reloc entry */
-	mov	$28, $17
+	subq	$17, 20, $17
+	addq	$17, $17, $17
 	/* Do the fixup */
 	bsr	$26, fixup..ng
 	/* Move the destination address into position.  */
@@ -290,14 +298,18 @@ elf_alpha_fix_plt(struct link_map *l,
       lo = (short)hi;
       hi = (hi - lo) >> 16;
 
-      /* Emit "ldah $27,H($27)" */
-      plte[0] = 0x277b0000 | (hi & 0xffff);
-
       /* Emit "lda $27,L($27)" */
       plte[1] = 0x237b0000 | (lo & 0xffff);
 
       /* Emit "br $31,function" */
       plte[2] = 0xc3e00000 | (edisp & 0x1fffff);
+
+      /* Think about thread-safety -- the previous instructions must be
+	 committed to memory before the first is overwritten.  */
+      __asm__ __volatile__("wmb" : : : "memory");
+
+      /* Emit "ldah $27,H($27)" */
+      plte[0] = 0x277b0000 | (hi & 0xffff);
     }
   else
     {
@@ -310,14 +322,18 @@ elf_alpha_fix_plt(struct link_map *l,
       lo = (short)hi;
       hi = (hi - lo) >> 16;
 
-      /* Emit "ldah $27,H($27)" */
-      plte[0] = 0x277b0000 | (hi & 0xffff);
-
       /* Emit "ldq $27,L($27)" */
       plte[1] = 0xa77b0000 | (lo & 0xffff);
 
       /* Emit "jmp $31,($27)" */
       plte[2] = 0x6bfb0000;
+
+      /* Think about thread-safety -- the previous instructions must be
+	 committed to memory before the first is overwritten.  */
+      __asm__ __volatile__("wmb" : : : "memory");
+
+      /* Emit "ldah $27,H($27)" */
+      plte[0] = 0x277b0000 | (hi & 0xffff);
     }
 
   /* At this point, if we've been doing runtime resolution, Icache is dirty.