diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/alpha/dl-machine.h | 4 | ||||
-rw-r--r-- | sysdeps/generic/brk.c | 5 | ||||
-rw-r--r-- | sysdeps/generic/dl-brk.c | 5 | ||||
-rw-r--r-- | sysdeps/generic/dl-sbrk.c | 5 | ||||
-rw-r--r-- | sysdeps/ia64/dl-machine.h | 22 | ||||
-rw-r--r-- | sysdeps/unix/arm/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/bsd/hp/m68k/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/bsd/osf/alpha/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/bsd/sun/m68k/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/bsd/vax/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/i386/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/mips/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sparc/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/dl-brk.c | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/dl-sbrk.c | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/dl-brk.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S | 1 |
19 files changed, 49 insertions, 14 deletions
diff --git a/sysdeps/alpha/dl-machine.h b/sysdeps/alpha/dl-machine.h index 490f1f1754..f6d33739a0 100644 --- a/sysdeps/alpha/dl-machine.h +++ b/sysdeps/alpha/dl-machine.h @@ -577,6 +577,10 @@ elf_machine_rela (struct link_map *map, } } +/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs + can be skipped. */ +#define ELF_MACHINE_REL_RELATIVE 1 + static inline void elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, Elf64_Addr *const reloc_addr) diff --git a/sysdeps/generic/brk.c b/sysdeps/generic/brk.c index 8b8b734e33..b951819f21 100644 --- a/sysdeps/generic/brk.c +++ b/sysdeps/generic/brk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1995, 1996, 1997, 2002 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 @@ -19,6 +19,9 @@ #include <errno.h> #include <unistd.h> +/* sbrk.c expects this. */ +void *__curbrk; + /* Set the end of the process's data space to ADDR. Return 0 if successful, -1 if not. */ int diff --git a/sysdeps/generic/dl-brk.c b/sysdeps/generic/dl-brk.c index 4a0cf2da11..c37cdfec33 100644 --- a/sysdeps/generic/dl-brk.c +++ b/sysdeps/generic/dl-brk.c @@ -1,2 +1,5 @@ -/* Just use the normal code. */ +/* We can use the normal code but we also know the __curbrk is not exported + from ld.so. */ +extern void *__curbrk attribute_hidden; + #include <brk.c> diff --git a/sysdeps/generic/dl-sbrk.c b/sysdeps/generic/dl-sbrk.c index 3874975890..4713a92694 100644 --- a/sysdeps/generic/dl-sbrk.c +++ b/sysdeps/generic/dl-sbrk.c @@ -1,2 +1,5 @@ -/* Just use the normal code. */ +/* We can use the normal code but we also know the __curbrk is not exported + from ld.so. */ +extern void *__curbrk attribute_hidden; + #include <sbrk.c> diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h index a115b902fc..e0910891b1 100644 --- a/sysdeps/ia64/dl-machine.h +++ b/sysdeps/ia64/dl-machine.h @@ -61,7 +61,7 @@ __ia64_init_bootstrap_fdesc_table (struct link_map *map) Elf64_Addr *boot_table; /* careful: this will be called before got has been relocated... */ - asm ("addl %0 = @gprel (__ia64_boot_fptr_table), gp" : "=r"(boot_table)); + asm (";; addl %0 = @gprel (__ia64_boot_fptr_table), gp" : "=r"(boot_table)); map->l_mach.fptr_table_len = IA64_BOOT_FPTR_TABLE_LEN; map->l_mach.fptr_table = boot_table; @@ -179,13 +179,18 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) " .proc " #tramp_name "#\n" \ #tramp_name ":\n" \ " { .mmi\n" \ +" .prologue\n" \ +" .save ar.pfs, r40\n" \ " alloc loc0 = ar.pfs, 8, 6, 3, 0\n" \ " adds r2 = -144, r12\n" \ " adds r3 = -128, r12\n" \ " }\n" \ " { .mii\n" \ +" .fframe 160\n" \ " adds r12 = -160, r12\n" \ +" .save rp, r41\n" \ " mov loc1 = b0\n" \ +" .body\n" \ " mov out2 = b0 /* needed by fixup_profile */\n" \ " ;;\n" \ " }\n" \ @@ -249,6 +254,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) " { .mmi\n" \ " ldf.fill f14 = [r2], 32\n" \ " ldf.fill f15 = [r3], 32\n" \ +" .restore sp /* pop the unwind frame state */\n" \ " adds r12 = 160, r12\n" \ " ;;\n" \ " }\n" \ @@ -265,6 +271,8 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) " /* An alloc is needed for the break system call to work.\n" \ " We don't care about the old value of the pfs register. */\n" \ " { .mmb\n" \ +" .prologue\n" \ +" .body\n" \ " alloc r2 = ar.pfs, 0, 0, 8, 0\n" \ " br.sptk.many b6\n" \ " ;;\n" \ @@ -292,7 +300,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) " .proc _start#\n" \ "_start:\n" \ "0: { .mii\n" \ +" .prologue\n" \ +" .save ar.pfs, r32\n" \ +" .save rp, r0\n" \ " alloc loc0 = ar.pfs, 0, 3, 4, 0\n" \ +" .body\n" \ " mov r2 = ip\n" \ " addl r3 = @gprel(0b), r0\n" \ " ;;\n" \ @@ -319,6 +331,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) " .global _dl_start_user#\n" \ " .proc _dl_start_user#\n" \ "_dl_start_user:\n" \ +" .prologue\n" \ +" .save ar.pfs, r32\n" \ +" .save rp, r0\n" \ +" .body\n" \ " { .mii\n" \ " /* Save the pointer to the user entry point fptr in loc2. */\n" \ " mov loc2 = ret0\n" \ @@ -577,6 +593,10 @@ elf_machine_rela (struct link_map *map, assert (! "unexpected dynamic reloc format"); } +/* Let do-rel.h know that on IA-64 if l_addr is 0, all RELATIVE relocs + can be skipped. */ +#define ELF_MACHINE_REL_RELATIVE 1 + static inline void elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, Elf64_Addr *const reloc_addr) diff --git a/sysdeps/unix/arm/dl-brk.S b/sysdeps/unix/arm/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/arm/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/bsd/hp/m68k/dl-brk.S b/sysdeps/unix/bsd/hp/m68k/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/bsd/hp/m68k/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/bsd/osf/alpha/dl-brk.S b/sysdeps/unix/bsd/osf/alpha/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/bsd/osf/alpha/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/bsd/sun/m68k/dl-brk.S b/sysdeps/unix/bsd/sun/m68k/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/bsd/sun/m68k/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/bsd/vax/dl-brk.S b/sysdeps/unix/bsd/vax/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/bsd/vax/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/i386/dl-brk.S b/sysdeps/unix/i386/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/i386/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/mips/dl-brk.S b/sysdeps/unix/mips/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/mips/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/sparc/dl-brk.S b/sysdeps/unix/sparc/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/sparc/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/sysv/linux/alpha/dl-brk.S b/sysdeps/unix/sysv/linux/alpha/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/sysv/linux/i386/dl-brk.c b/sysdeps/unix/sysv/linux/i386/dl-brk.c deleted file mode 100644 index c37cdfec33..0000000000 --- a/sysdeps/unix/sysv/linux/i386/dl-brk.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can use the normal code but we also know the __curbrk is not exported - from ld.so. */ -extern void *__curbrk attribute_hidden; - -#include <brk.c> diff --git a/sysdeps/unix/sysv/linux/i386/dl-sbrk.c b/sysdeps/unix/sysv/linux/i386/dl-sbrk.c deleted file mode 100644 index 4713a92694..0000000000 --- a/sysdeps/unix/sysv/linux/i386/dl-sbrk.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can use the normal code but we also know the __curbrk is not exported - from ld.so. */ -extern void *__curbrk attribute_hidden; - -#include <sbrk.c> diff --git a/sysdeps/unix/sysv/linux/ia64/dl-brk.S b/sysdeps/unix/sysv/linux/ia64/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S b/sysdeps/unix/sysv/linux/powerpc/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/powerpc/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S new file mode 100644 index 0000000000..eeb96544e3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S @@ -0,0 +1 @@ +#include <brk.S> |