aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog33
-rw-r--r--elf/elf.h4
-rw-r--r--posix/getopt.h6
-rw-r--r--sysdeps/hppa/Versions1
-rw-r--r--sysdeps/hppa/dl-lookupcfg.h13
-rw-r--r--sysdeps/hppa/dl-machine.h4
-rw-r--r--sysdeps/hppa/dl-symaddr.c2
-rw-r--r--sysdeps/unix/sysv/linux/hppa/clone.S14
-rw-r--r--sysdeps/unix/sysv/linux/hppa/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/mmap64.c2
10 files changed, 66 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 791eebd..687b4c8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2001-04-21 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/mmap64.c: Correct check for invalid
+ offset.
+
+2001-04-21 Ulrich Drepper <drepper@redhat.com>
+
+ * posix/getopt.h: Treat __cplusplus like __STDC__.
+
+2001-04-20 John S. Marvin <jsm@fc.hp.com>
+
+ * sysdeps/unix/sysv/linux/hppa/clone.S: Fix clone system call
+ entry point stub.
+
+2001-04-20 Richard Hirst <rhirst@linuxcare.com>
+
+ * elf/elf.h: Corrected R_PARISC_DIR14R (should be 6, not 5),
+ and added R_PARISC_DPREL21L and R_PARISC_DPREL14R for modutils.
+
+ * sysdeps/unix/sysv/linux/hppa/syscalls.list: Removed ptrace
+ entry so the ptrace.c wrapper is used.
+
+2001-04-20 Alan Modra <amodra@one.net.au>
+
+ * sysdeps/hppa/dl-lookupcfg.h (_dl_function_address): Prototype.
+ (DL_FUNCTION_ADDRESS): Define.
+ (DL_DT_INIT_ADDRESS): Define.
+ (DL_DT_FINI_ADDRESS): Define.
+ * sysdeps/hppa/Versions: Add _dl_function_address.
+ * sysdeps/hppa/dl-machine.h (ELF_MACHINE_START_ADDRESS): Define.
+ * sysdeps/hppa/dl-symaddr.c (_dl_start_address): Rename to
+ _dl_function_address.
+
2001-04-21 Andreas Jaeger <aj@suse.de>
* rt/aio_misc.c (handle_fildes_io): Add noreturn attribute.
diff --git a/elf/elf.h b/elf/elf.h
index 2bed6f0..0644fd7 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -1537,12 +1537,14 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */
#define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */
#define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */
-#define R_PARISC_DIR14R 5 /* Right 14 bits of eff. address. */
+#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */
#define R_PARISC_PCREL32 9 /* 32-bit rel. address. */
#define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */
#define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */
#define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */
#define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */
+#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */
+#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */
#define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */
#define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */
#define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */
diff --git a/posix/getopt.h b/posix/getopt.h
index 12b7ad5..c2f0180 100644
--- a/posix/getopt.h
+++ b/posix/getopt.h
@@ -1,5 +1,5 @@
/* Declarations for getopt.
- Copyright (C) 1989,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc.
+ Copyright (C) 1989-1994, 1996-1999, 2001 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
@@ -93,7 +93,7 @@ extern int optopt;
struct option
{
-# if defined __STDC__ && __STDC__
+# if (defined __STDC__ && __STDC__) || defined __cplusplus
const char *name;
# else
char *name;
@@ -137,7 +137,7 @@ struct option
arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */
-#if defined __STDC__ && __STDC__
+#if (defined __STDC__ && __STDC__) || defined __cplusplus
# ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
diff --git a/sysdeps/hppa/Versions b/sysdeps/hppa/Versions
index 0c447d9..c5f35d4 100644
--- a/sysdeps/hppa/Versions
+++ b/sysdeps/hppa/Versions
@@ -2,5 +2,6 @@ ld {
GLIBC_2.2 {
# hppa specific functions in the dynamic linker, but used by libc.so.
_dl_symbol_address; _dl_unmap; _dl_lookup_address;
+ _dl_function_address;
}
}
diff --git a/sysdeps/hppa/dl-lookupcfg.h b/sysdeps/hppa/dl-lookupcfg.h
index 4f5f899..118c4d0 100644
--- a/sysdeps/hppa/dl-lookupcfg.h
+++ b/sysdeps/hppa/dl-lookupcfg.h
@@ -34,3 +34,16 @@ Elf32_Addr _dl_lookup_address (const void *address);
void _dl_unmap (struct link_map *map);
#define DL_UNMAP(map) _dl_unmap (map)
+
+extern Elf32_Addr _dl_function_address (const struct link_map *map,
+ Elf32_Addr start);
+
+#define DL_FUNCTION_ADDRESS(map, addr) _dl_function_address (map, addr)
+
+/* The test for "addr & 2" below is to accomodate old binaries which
+ violated the ELF ABI by pointing DT_INIT and DT_FINI at a function
+ pointer. */
+#define DL_DT_INIT_ADDRESS(map, addr) \
+ ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
+#define DL_DT_FINI_ADDRESS(map, addr) \
+ ((Elf32_Addr)(addr) & 2 ? (addr) : DL_FUNCTION_ADDRESS (map, addr))
diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h
index f8a8e7b..a3437b5 100644
--- a/sysdeps/hppa/dl-machine.h
+++ b/sysdeps/hppa/dl-machine.h
@@ -448,6 +448,10 @@ __dl_fini_plabel:
/* We only use RELA. */
#define ELF_MACHINE_NO_REL 1
+/* Return the address of the entry point. */
+#define ELF_MACHINE_START_ADDRESS(map, start) \
+ DL_FUNCTION_ADDRESS (map, start)
+
#endif /* !dl_machine_h */
/* These are only actually used where RESOLVE_MAP is defined, anyway. */
diff --git a/sysdeps/hppa/dl-symaddr.c b/sysdeps/hppa/dl-symaddr.c
index 038404a..49c1216 100644
--- a/sysdeps/hppa/dl-symaddr.c
+++ b/sysdeps/hppa/dl-symaddr.c
@@ -33,7 +33,7 @@ _dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref)
}
ElfW(Addr)
-_dl_start_address (const struct link_map *map, ElfW(Addr) start)
+_dl_function_address (const struct link_map *map, ElfW(Addr) start)
{
return __hppa_make_fptr (map, start, &__fptr_root, NULL);
}
diff --git a/sysdeps/unix/sysv/linux/hppa/clone.S b/sysdeps/unix/sysv/linux/hppa/clone.S
index 510e0ff..b902ff7 100644
--- a/sysdeps/unix/sysv/linux/hppa/clone.S
+++ b/sysdeps/unix/sysv/linux/hppa/clone.S
@@ -33,18 +33,18 @@ ENTRY(__clone)
/* FIXME: I have no idea how profiling works on hppa. */
/* Sanity check arguments. */
- comib,<> 0,%arg0,.Lerror /* no NULL function pointers */
- ldi EINVAL,%ret0
- comib,<> 0,%arg1,.Lerror /* no NULL stack pointers */
+ comib,= 0,%arg0,.Lerror /* no NULL function pointers */
+ ldi -EINVAL,%ret0
+ comib,= 0,%arg1,.Lerror /* no NULL stack pointers */
nop
/* Save the fn ptr and arg on the new stack. */
- stwm %arg3,64(%arg1)
+ stwm %arg0,64(%arg1)
stw %arg3,-60(%arg1)
/* Do the system call */
copy %arg2,%arg0
- ble 0x100(%sr7,%r0)
+ ble 0x100(%sr2,%r0)
ldi __NR_clone,%r20
ldi -4096,%r1
@@ -60,12 +60,12 @@ ENTRY(__clone)
/* Something bad happened -- no child created */
.Lerror:
b __syscall_error
- nop
+ sub %r0,%ret0,%arg0
thread_start:
/* Load up the arguments. */
ldw -60(%sp),%arg0
- ldwm -64(%sp),%r22
+ ldw -64(%sp),%r22
/* Call the user's function */
bl $$dyncall,%r31
diff --git a/sysdeps/unix/sysv/linux/hppa/syscalls.list b/sysdeps/unix/sysv/linux/hppa/syscalls.list
index f0d6431..6d7cd6a 100644
--- a/sysdeps/unix/sysv/linux/hppa/syscalls.list
+++ b/sysdeps/unix/sysv/linux/hppa/syscalls.list
@@ -32,8 +32,6 @@ shutdown - shutdown i:ii __shutdown shutdown
socket - socket i:iii __socket socket
socketpair - socketpair i:iiif __socketpair socketpair
-ptrace - ptrace 4 __ptrace ptrace
-
getresuid - getresuid i:ppp getresuid
getresgid - getresgid i:ppp getresgid
diff --git a/sysdeps/unix/sysv/linux/powerpc/mmap64.c b/sysdeps/unix/sysv/linux/powerpc/mmap64.c
index 4b3e60d..25b11a9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/mmap64.c
+++ b/sysdeps/unix/sysv/linux/powerpc/mmap64.c
@@ -42,7 +42,7 @@ static int have_no_mmap2;
void *
__mmap64 (void *addr, size_t len, int prot, int flags, int fd, off64_t offset)
{
- if (! (offset & ((1 << PAGE_SHIFT)-1)))
+ if (offset & ((1 << PAGE_SHIFT)-1))
{
__set_errno (EINVAL);
return MAP_FAILED;