This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>>>>> On Wed, 10 Dec 2003 15:05:03 -0800, Ulrich Drepper <drepper@redhat.com> said:
Ulrich> I've applied this patch now.
Yippee!
Ulrich> I made some changes, though. Obviously the initfini code.
Ulrich> Please look through all three files and send a patch with
Ulrich> the remaining changes.
Attached is a patch for the (slightly updated) left-overs.
Thanks,
--david
nptl/ChangeLog
2003-12-10 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/pt-initfini.c (_init_EPILOG_BEGINS):
Add unwind directives. Drop unused .regstk directive.
(_fini_EPILOG_BEGINS): Add unwind directives.
linuxthreads/ChangeLog
2003-12-10 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/pt-initfini.c: Update copyright
message. Add include of <stddef.h>.
(INIT_NEW_WAY): New macro.
(INIT_OLD_WAY): Likewise.
(_init): Add unwind directives. Invoke
__pthread_initialize_minimal() via INIT_NEW_WAY or INIT_OLD_WAY,
respectively.
(_init_EPILOG_BEGINS): Add unwind-directives. Drop unused .regstk
directive.
(_fini): Add unwind directives. Drop unnecessary .align 16
directive (bundles are always 16-byte aligned).
(_fini_EPILOG_BEGINS): Add unwind-directives.
Index: linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
--- linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
+++ linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
@@ -1,5 +1,5 @@
/* Special .init and .fini section support for ia64. LinuxThreads version.
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it
@@ -36,40 +36,62 @@
* crtn.s puts the corresponding function epilogues
in the .init and .fini sections. */
+#include <stddef.h>
+
+#ifdef HAVE_INITFINI_ARRAY
+
+# define INIT_NEW_WAY \
+ ".xdata8 \".init_array\", @fptr(__pthread_initialize_minimal)\n"
+# define INIT_OLD_WAY ""
+#else
+# define INIT_NEW_WAY ""
+# define INIT_OLD_WAY \
+ "\n\
+ st8 [r12] = gp, -16\n\
+ br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\
+ ;;\n\
+ adds r12 = 16, r12\n\
+ ;;\n\
+ ld8 gp = [r12]\n\
+ ;;\n"
+#endif
+
__asm__ ("\n\
\n\
#include \"defs.h\"\n\
\n\
/*@HEADER_ENDS*/\n\
\n\
-/*@_init_PROLOG_BEGINS*/\n\
- .section .init\n\
+/*@_init_PROLOG_BEGINS*/\n"
+ INIT_NEW_WAY
+ ".section .init\n\
.align 16\n\
.global _init#\n\
.proc _init#\n\
_init:\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
alloc r34 = ar.pfs, 0, 3, 0, 0\n\
+ .vframe r32\n\
mov r32 = r12\n\
+ .save rp, r33\n\
mov r33 = b0\n\
+ .body\n\
adds r12 = -16, r12\n\
- ;;\n\
-/* we could use r35 to save gp, but we use the stack since that's what\n\
- * all the other init routines will do --davidm 00/04/05 */\n\
- st8 [r12] = gp, -16\n\
- br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\
- ;;\n\
- adds r12 = 16, r12\n\
- ;;\n\
- ld8 gp = [r12]\n\
- ;;\n\
- .align 16\n\
- .endp _init#\n\
+ ;;\n"
+ INIT_OLD_WAY
+ ".endp _init#\n\
\n\
/*@_init_PROLOG_ENDS*/\n\
\n\
/*@_init_EPILOG_BEGINS*/\n\
.section .init\n\
- .regstk 0,2,0,0\n\
+ .proc _init#\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
+ .vframe r32\n\
+ .save rp, r33\n\
+ .body\n\
mov r12 = r32\n\
mov ar.pfs = r34\n\
mov b0 = r33\n\
@@ -83,18 +105,28 @@
.global _fini#\n\
.proc _fini#\n\
_fini:\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
alloc r34 = ar.pfs, 0, 3, 0, 0\n\
+ .vframe r32\n\
mov r32 = r12\n\
+ .save rp, r33\n\
mov r33 = b0\n\
+ .body\n\
adds r12 = -16, r12\n\
;;\n\
- .align 16\n\
.endp _fini#\n\
\n\
/*@_fini_PROLOG_ENDS*/\n\
\n\
/*@_fini_EPILOG_BEGINS*/\n\
.section .fini\n\
+ .proc _fini#\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
+ .vframe r32\n\
+ .save rp, r33\n\
+ .body\n\
mov r12 = r32\n\
mov ar.pfs = r34\n\
mov b0 = r33\n\
Index: nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
--- nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
+++ nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c
@@ -87,7 +87,12 @@
\n\
/*@_init_EPILOG_BEGINS*/\n\
.section .init\n\
- .regstk 0,2,0,0\n\
+ .proc _init#\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
+ .vframe r32\n\
+ .save rp, r33\n\
+ .body\n\
mov r12 = r32\n\
mov ar.pfs = r34\n\
mov b0 = r33\n\
@@ -117,6 +122,12 @@
\n\
/*@_fini_EPILOG_BEGINS*/\n\
.section .fini\n\
+ .proc _fini#\n\
+ .prologue\n\
+ .save ar.pfs, r34\n\
+ .vframe r32\n\
+ .save rp, r33\n\
+ .body\n\
mov r12 = r32\n\
mov ar.pfs = r34\n\
mov b0 = r33\n\
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |