mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 10:22:41 +08:00
Update.
2003-04-05 Roland McGrath <roland@redhat.com> * sysdeps/unix/sysv/linux/i386/setcontext.S: Rewrite to avoid writing below the stack pointer even if switching to the same context we are running right now. * catgets/gencat.c (read_input_file): Make sure that \n is not alone on the line before testing for continuation. * math/test-tgmath.c (compile_test): Initialize c.
This commit is contained in:
parent
ee6bf14d9e
commit
a5392bed09
11
ChangeLog
11
ChangeLog
@ -1,6 +1,15 @@
|
||||
2003-04-05 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/i386/setcontext.S: Rewrite to avoid writing
|
||||
below the stack pointer even if switching to the same context we are
|
||||
running right now.
|
||||
|
||||
2003-04-05 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* math/test-tgmath.c (F): Initialize c.
|
||||
* catgets/gencat.c (read_input_file): Make sure that \n is not
|
||||
alone on the line before testing for continuation.
|
||||
|
||||
* math/test-tgmath.c (compile_test): Initialize c.
|
||||
|
||||
2003-04-05 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
|
@ -333,7 +333,7 @@ read_input_file (struct catalog *current, const char *fname)
|
||||
/* There might be more than one backslash at the end of
|
||||
the line. Only if there is an odd number of them is
|
||||
the line continued. */
|
||||
if (buf[act_len - 1] == '\\')
|
||||
if (act_len > 0 && buf[act_len - 1] == '\\')
|
||||
{
|
||||
int temp_act_len = act_len;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Install given context.
|
||||
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
|
||||
|
||||
@ -53,39 +53,26 @@ ENTRY(__setcontext)
|
||||
movl oFS(%eax), %ecx
|
||||
movw %cx, %fs
|
||||
|
||||
/* Fetch the address to return to. */
|
||||
movl oEIP(%eax), %ecx
|
||||
|
||||
/* Load the new stack pointer. */
|
||||
movl oESP(%eax), %ecx
|
||||
/* Make room for 8 registers and the return address. We will load
|
||||
the values from the stack. */
|
||||
subl $36, %ecx
|
||||
movl oESP(%eax), %esp
|
||||
|
||||
/* Move the values of all the 32-bit registers (except ESP) on
|
||||
the stack. This happens in the form the 'popa' instruction
|
||||
expects it. Before this block put the address of the code
|
||||
to execute. */
|
||||
movl oEDI(%eax), %ebx
|
||||
movl oESI(%eax), %edx
|
||||
movl oEBP(%eax), %esi
|
||||
movl oEBX(%eax), %edi
|
||||
movl %ebx, (%ecx)
|
||||
movl %edx, 4(%ecx)
|
||||
movl %esi, 8(%ecx)
|
||||
movl %edi, 16(%ecx)
|
||||
movl oEDX(%eax), %ebx
|
||||
movl oECX(%eax), %edx
|
||||
movl oEAX(%eax), %esi
|
||||
movl oEIP(%eax), %edi
|
||||
movl %ebx, 20(%ecx)
|
||||
movl %edx, 24(%ecx)
|
||||
movl %esi, 28(%ecx)
|
||||
movl %edi, 32(%ecx)
|
||||
/* Push the return address on the new stack so we can return there. */
|
||||
pushl %ecx
|
||||
|
||||
/* Set the new stack address. The stack points now to the block
|
||||
we put the register content in. */
|
||||
movl %ecx, %esp
|
||||
/* Restore the register content. */
|
||||
popa
|
||||
/* The following 'ret' will pop the addres of the code and jump
|
||||
/* Load the values of all the 32-bit registers (except ESP).
|
||||
Since we are loading from EAX, it must be last. */
|
||||
movl oEDI(%eax), %edi
|
||||
movl oESI(%eax), %esi
|
||||
movl oEBP(%eax), %ebp
|
||||
movl oEBX(%eax), %ebx
|
||||
movl oEDX(%eax), %edx
|
||||
movl oECX(%eax), %ecx
|
||||
movl oEAX(%eax), %eax
|
||||
|
||||
/* The following 'ret' will pop the address of the code and jump
|
||||
to it. */
|
||||
|
||||
L(pseudo_end):
|
||||
|
Loading…
Reference in New Issue
Block a user