Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 10 Apr 2001 23:12:08 +0000 (23:12 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 10 Apr 2001 23:12:08 +0000 (23:12 +0000)
2001-04-10  Andreas Schwab  <schwab@suse.de>

* math/libm-test.inc (csinh_test): Don't require the invalid
exception for csinh (x + iNaN), but make it optional.

2001-04-09  David Mosberger  <davidm@hpl.hp.com>

* sysdeps/ia64/elf/start.S (_start): Add unwind directives.

* sysdeps/generic/entry.h [!__ASSEMBLY__]: Declare _start.
* sysdeps/ia64/elf/entry.h: New file.
* sysdeps/unix/sysv/linux/mips/entry.h [!__ASSEMBLY__]: Declare
__start.
* elf/rtld.c: Don't declare ENTRY_POINT.  Use ENTRY_POINT instead
of &ENTRY_POINT.
* sysdeps/generic/dl-sysdep.c: Likewise.
* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
* sysdeps/ia64/elf/start.S: Save base address of register backing
store in __libc_ia64_register_backing_store_base.

ChangeLog
elf/rtld.c
math/libm-test.inc
sysdeps/generic/dl-sysdep.c
sysdeps/generic/entry.h
sysdeps/ia64/elf/entry.h [new file with mode: 0644]
sysdeps/ia64/elf/start.S
sysdeps/mach/hurd/dl-sysdep.c
sysdeps/unix/sysv/linux/mips/entry.h

index 2522b10..7a44e52 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2001-04-10  Andreas Schwab  <schwab@suse.de>
+
+       * math/libm-test.inc (csinh_test): Don't require the invalid
+       exception for csinh (x + iNaN), but make it optional.
+
+2001-04-09  David Mosberger  <davidm@hpl.hp.com>
+
+       * sysdeps/ia64/elf/start.S (_start): Add unwind directives.
+
+       * sysdeps/generic/entry.h [!__ASSEMBLY__]: Declare _start.
+       * sysdeps/ia64/elf/entry.h: New file.
+       * sysdeps/unix/sysv/linux/mips/entry.h [!__ASSEMBLY__]: Declare
+       __start.
+       * elf/rtld.c: Don't declare ENTRY_POINT.  Use ENTRY_POINT instead
+       of &ENTRY_POINT.
+       * sysdeps/generic/dl-sysdep.c: Likewise.
+       * sysdeps/mach/hurd/dl-sysdep.c: Likewise.
+       * sysdeps/ia64/elf/start.S: Save base address of register backing
+       store in __libc_ia64_register_backing_store_base.
+
 2001-04-10  Martin Schwidefsky  <schwidefsky@de.ibm.com>
 
        * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: Fix return
index 586291c..8b2ca29 100644 (file)
@@ -260,8 +260,6 @@ _dl_start_final (void *arg, struct link_map *bootstrap_map_p,
 /* Now life is peachy; we can do all normal operations.
    On to the real work.  */
 
-void ENTRY_POINT (void);
-
 /* Some helper functions.  */
 
 /* Arguments to relocate_doit.  */
@@ -389,7 +387,7 @@ dl_main (const ElfW(Phdr) *phdr,
   /* Set up a flag which tells we are just starting.  */
   _dl_starting_up = 1;
 
-  if (*user_entry == (ElfW(Addr)) &ENTRY_POINT)
+  if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
     {
       /* Ho ho.  We are not the program interpreter!  We are the program
         itself!  This means someone ran ld.so as a command.  Well, that
index 028b2ee..41918b4 100644 (file)
@@ -2087,8 +2087,8 @@ csinh_test (void)
   TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
   TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
 
-  TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION);
-  TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION);
+  TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
+  TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
 
   TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
   TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
index 3dc7625..d1acaee 100644 (file)
@@ -46,7 +46,6 @@ extern unsigned long int _dl_hwcap;
 extern size_t _dl_platformlen;
 extern fpu_control_t _dl_fpu_control;
 extern void _end;
-extern void ENTRY_POINT (void);
 
 /* Protect SUID program against misuse of file descriptors.  */
 extern void __libc_check_standard_fds (void);
@@ -101,7 +100,7 @@ _dl_sysdep_start (void **start_argptr,
   DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ,
                          _dl_auxv);
 
-  user_entry = (ElfW(Addr)) &ENTRY_POINT;
+  user_entry = (ElfW(Addr)) ENTRY_POINT;
   _dl_platform = NULL; /* Default to nothing known about the platform.  */
 
   for (av = _dl_auxv; av->a_type != AT_NULL; set_seen (av++))
index cc0e1d8..2f17ce8 100644 (file)
@@ -1 +1,5 @@
+#ifndef __ASSEMBLY__
+extern void _start (void);
+#endif
+
 #define ENTRY_POINT _start
diff --git a/sysdeps/ia64/elf/entry.h b/sysdeps/ia64/elf/entry.h
new file mode 100644 (file)
index 0000000..53ea9a2
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef __ASSEMBLY__
+extern void _start (void);
+#endif
+
+/* The function's entry point is stored in the first word of the
+   function descriptor (plabel) of _start().  */
+#define ENTRY_POINT (((long int *) _start)[0])
index 5ba6196..cc8b798 100644 (file)
@@ -17,6 +17,8 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#include <sysdep.h>
+
 #include <asm/unistd.h>
 #include <asm/fpu.h>
 
  *     out6:   stack_end
  */
 
-       .global _start
-       .proc   _start
+       .align 32
+       .global _start
 
+       .proc _start
 _start:
+       .prologue
        { .mlx
          alloc r2 = ar.pfs,0,0,7,0
          movl r3 = FPSR_DEFAULT
@@ -44,38 +48,46 @@ _start:
          movl gp = @gprel(0f)
          ;;
        }
-0:     { .mii
+0:     { .mmi
          ld8 out1 = [out2], 8  /* load argc and move out2 to become argv */
+         mov.m r10 = ar.bsp    /* fetch rbs base address */
          mov r9 = ip
          ;;
+       }
+       { .mii
+         mov ar.fpsr = r3
          sub gp = r9, gp       /* back-compute gp value */
+         adds out6 = 16, sp    /* highest non-environment stack address */
          ;;
        }
-       { .mfi
-         mov ar.fpsr = r3
+       {
+         addl r11 = @ltoff(__libc_ia64_register_backing_store_base), gp
          addl out0 = @ltoff(@fptr(main)), gp
-       }
-       { .mfi
-         addl out4 = @ltoff(@fptr(_fini)), gp
          addl out3 = @ltoff(@fptr(_init)), gp
          ;;
        }
        { .mmi
+         ld8 r3 = [r11]        /* pointer to __libc_ia64_register_backing_store_base */
          ld8 out0 = [out0]     /* pointer to `main' function descriptor */
+         addl out4 = @ltoff(@fptr(_fini)), gp
+         ;;
+       }
+       { .mmi
          ld8 out3 = [out3]     /* pointer to `init' function descriptor */
-         adds out6 = 16, sp    /* highest non-environment stack address */
+         ld8 out4 = [out4]     /* pointer to `fini' function descriptor */
+         .save rp, r4
+         mov r4 = r0           /* terminate unwind chain with a NULL return-pointer */
        }
+       .body
        { .mib
-         ld8 out4 = [out4]     /* pointer to `fini' function descriptor */
+         st8 [r3] = r10
          mov out5 = ret0       /* dynamic linker destructor */
          br.call.sptk.few rp = __libc_start_main
        }
        { .mib
-         mov rp = r0
-         br.ret.sptk.few rp    /* break miserably if we ever return */
-         ;;
+         break 0       /* break miserably if we ever return */
        }
-       .endp   _start
+       .endp _start
 
 /* Define a symbol for the first piece of initialized data.  */
        .data
@@ -84,3 +96,8 @@ __data_start:
        .long 0
        .weak data_start
        data_start = __data_start
+
+       .global __libc_ia64_register_backing_store_base
+       .align 8
+__libc_ia64_register_backing_store_base:
+       .space 8
index 25ae5bb..8bcce13 100644 (file)
@@ -47,7 +47,6 @@ extern void __mach_init (void);
 extern int _dl_argc;
 extern char **_dl_argv;
 extern char **_environ;
-extern void ENTRY_POINT (void);
 
 int __libc_enable_secure;
 int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
@@ -119,7 +118,7 @@ _dl_sysdep_start (void **start_argptr,
        {
          static struct hurd_startup_data nodata;
          _dl_hurd_data = &nodata;
-         nodata.user_entry = (vm_address_t) &ENTRY_POINT;
+         nodata.user_entry = (vm_address_t) ENTRY_POINT;
        }
       else
        _dl_hurd_data = (void *) p;
@@ -128,12 +127,12 @@ _dl_sysdep_start (void **start_argptr,
 
       if (_dl_hurd_data->flags & EXEC_STACK_ARGS &&
          _dl_hurd_data->user_entry == 0)
-       _dl_hurd_data->user_entry = (vm_address_t) &ENTRY_POINT;
+       _dl_hurd_data->user_entry = (vm_address_t) ENTRY_POINT;
 
 unfmh();                       /* XXX */
 
 #if 0                          /* XXX make this work for real someday... */
-      if (_dl_hurd_data->user_entry == (vm_address_t) &ENTRY_POINT)
+      if (_dl_hurd_data->user_entry == (vm_address_t) ENTRY_POINT)
        /* We were invoked as a command, not as the program interpreter.
           The generic ld.so code supports this: it will parse the args
           as "ld.so PROGRAM [ARGS...]".  For booting the Hurd, we
index 3db6d93..04d05d2 100644 (file)
@@ -1 +1,5 @@
+#ifndef __ASSEMBLY__
+extern void __start (void);
+#endif
+
 #define ENTRY_POINT __start