From 49547c68f9c2f0e524e64dc6ff8f43147907cae4 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 20 Apr 2001 06:06:55 +0000 Subject: [PATCH] Update. 2001-04-19 Alan Modra * Makerules (libc_pic.os): Add $(LDFLAGS-c_pic.os). * sysdeps/hppa/Makefile (LDFLAGS-c_pic.os): Define. (CFLAGS-.os): Remove. * sysdeps/unix/sysv/linux/hppa/sysdep.h (CALL_MCOUNT): Update comment. * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (NGREG, NFPREG, gregset): Correct for new kernel definitions. 2001-04-19 Alan Modra * sysdeps/hppa/elf/initfini.c: Change dlt reg save to r3 and generate unwind info by hand. 2001-04-19 Ulrich Drepper * sysdeps/unix/sysv/linux/powerpc/mmap64.c (__mmap64): Optimize a bit. * configure.in: Correct regular expression for msgfmt. Patch by Bruno Haible . --- ChangeLog | 23 +++++++++++++++ Makerules | 2 +- sysdeps/hppa/Makefile | 8 ++++-- sysdeps/hppa/elf/initfini.c | 44 +++++++++++++++++++---------- sysdeps/unix/sysv/linux/hppa/sys/ucontext.h | 11 ++++---- sysdeps/unix/sysv/linux/hppa/sysdep.h | 9 ++---- 6 files changed, 66 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index cfb3263..4331f8c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2001-04-19 Alan Modra + + * Makerules (libc_pic.os): Add $(LDFLAGS-c_pic.os). + * sysdeps/hppa/Makefile (LDFLAGS-c_pic.os): Define. + (CFLAGS-.os): Remove. + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (CALL_MCOUNT): Update comment. + + * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (NGREG, NFPREG, + gregset): Correct for new kernel definitions. + +2001-04-19 Alan Modra + + * sysdeps/hppa/elf/initfini.c: Change dlt reg save to r3 and + generate unwind info by hand. + +2001-04-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/powerpc/mmap64.c (__mmap64): Optimize a bit. + + * configure.in: Correct regular expression for msgfmt. + Patch by Bruno Haible . + 2001-04-19 Andreas Jaeger * po/el.po: Add comment explaining what's broken. diff --git a/Makerules b/Makerules index 77951f3..485b5c0 100644 --- a/Makerules +++ b/Makerules @@ -500,7 +500,7 @@ LDFLAGS-c.so += -u __register_frame # between libc.so and ld.so, which can make it impossible to upgrade. $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a $(LINK.o) -nostdlib -nostartfiles -r -o $@ \ - -Wl,-d -Wl,--whole-archive $^ + $(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^ # Use our own special initializer and finalizer files for libc.so. $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \ $(common-objpfx)libc_pic.os \ diff --git a/sysdeps/hppa/Makefile b/sysdeps/hppa/Makefile index f6ad843..e6fb771 100644 --- a/sysdeps/hppa/Makefile +++ b/sysdeps/hppa/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by David Huggins-Daines (dhd@debian.org) @@ -17,8 +17,10 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -# We need this for all shared objects since the build process uses ld -r -CFLAGS-.os += -ffunction-sections +# We used to need this since the build process uses ld -r. Now we use +# ld -r --unique=.text* which does more or less the same thing, but better. +# CFLAGS-.os += -ffunction-sections +LDFLAGS-c_pic.os += -Wl,--unique=.text* ifeq ($(subdir),elf) dl-routines += dl-symaddr dl-fptr diff --git a/sysdeps/hppa/elf/initfini.c b/sysdeps/hppa/elf/initfini.c index c058ed0..d2e07ea 100644 --- a/sysdeps/hppa/elf/initfini.c +++ b/sysdeps/hppa/elf/initfini.c @@ -59,8 +59,6 @@ __asm__ (" .align 4 .globl _init .type _init,@function - .proc - .callinfo _init: stw %rp,-20(%sp) stwm %r4,64(%sp) @@ -68,25 +66,38 @@ _init: bl __gmon_start__,%rp copy %r19,%r4 /* delay slot */ copy %r4,%r19 - .align 4 - .procend /*@_init_PROLOG_ENDS*/ /*@_init_EPILOG_BEGINS*/ - .section .init - copy %r4,%r19 - ldw -84(%sp),%rp - bv %r0(%rp) - ldwm -64(%sp),%r4 .text .align 4 .weak __gmon_start__ .type __gmon_start__,@function +__gmon_start__: .proc .callinfo -__gmon_start__: + .entry bv,n %r0(%r2) + .exit .procend + +/* Here is the tail end of _init. We put __gmon_start before this so + that the assembler creates the .PARISC.unwind section for us, ie. + with the right attributes. */ + .section .init + ldw -84(%sp),%rp + copy %r4,%r19 + bv %r0(%rp) +_end_init: + ldwm -64(%sp),%r4 + +/* Our very own unwind info, because the assembler can't handle + functions split into two or more pieces. */ + .section .PARISC.unwind + .extern _init + .word _init, _end_init + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 + /*@_init_EPILOG_ENDS*/ /*@_fini_PROLOG_BEGINS*/ @@ -94,23 +105,26 @@ __gmon_start__: .align 4 .globl _fini .type _fini,@function - .proc - .callinfo _fini: stw %rp,-20(%sp) stwm %r4,64(%sp) stw %r19,-32(%sp) copy %r19,%r4 - .align 4 - .procend /*@_fini_PROLOG_ENDS*/ /*@_fini_EPILOG_BEGINS*/ .section .fini - copy %r4,%r19 ldw -84(%sp),%rp + copy %r4,%r19 bv %r0(%rp) +_end_fini: ldwm -64(%sp),%r4 + + .section .PARISC.unwind + .extern _fini + .word _fini, _end_fini + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 + /*@_fini_EPILOG_ENDS*/ /*@TRAILER_BEGINS*/ diff --git a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h index c819ab1..44108f0 100644 --- a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000, 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 @@ -33,15 +33,16 @@ typedef unsigned long int greg_t; /* Number of general registers. */ -#define NGREG 42 -#define NFPREG 33 +#define NGREG 80 +#define NFPREG 32 /* Container for all general registers. */ typedef struct gregset { greg_t g_regs[32]; - greg_t sr_regs[5]; - greg_t g_pad[5]; + greg_t sr_regs[8]; + greg_t cr_regs[24]; + greg_t g_pad[16]; } gregset_t; /* Container for all FPU registers. */ diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h index 1430642..20ec736 100644 --- a/sysdeps/unix/sysv/linux/hppa/sysdep.h +++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h @@ -89,13 +89,8 @@ 1: .size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name) /* If compiled for profiling, call `mcount' at the start of each function. */ -#ifdef PROF -/* The mcount code relies on a normal frame pointer being on the stack - to locate our caller, so push one just for its benefit. */ -#define CALL_MCOUNT /* XXX */ -#else +/* No, don't bother. gcc will put the call in for us. */ #define CALL_MCOUNT /* Do nothing. */ -#endif /* syscall wrappers consist of #include @@ -231,7 +226,7 @@ register unsigned long __r21 __asm__("r21") = (unsigned long)r21; \ LOAD_ARGS_5(r26,r25,r24,r23,r22) -#define ASM_ARGS_0 +#define ASM_ARGS_0 #define ASM_ARGS_1 , "r" (__r26) #define ASM_ARGS_2 , "r" (__r26), "r" (__r25) #define ASM_ARGS_3 , "r" (__r26), "r" (__r25), "r" (__r24) -- 2.7.4