Powerpc: correct duplicate label issue with multiple passes through context code

This commit is contained in:
Will Schmidt 2012-01-12 17:05:03 -05:00 committed by Ulrich Drepper
parent 0cc5ed3b01
commit 929d11c7cf
5 changed files with 25 additions and 11 deletions

View File

@ -1,3 +1,11 @@
2012-01-04 Will Schmidt <will_schmidt@vnet.ibm.com>
* powerpc/powerpc32/sysdep.h: Add GLUE and GENERATE_GOT_LABEL macros.
* unix/sysv/linux/powerpc/powerpc32/getcontext-common.S: Call
macro to ensure uniqueness of label name.
* unix/sysv/linux/powerpc/powerpc32/setcontext-common.S: Likewise.
* unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: Likewise.
2012-01-11 Ulrich Drepper <drepper@gmail.com> 2012-01-11 Ulrich Drepper <drepper@gmail.com>
* sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c: New file. * sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c: New file.

View File

@ -1,5 +1,5 @@
/* Assembly macros for 32-bit PowerPC. /* Assembly macros for 32-bit PowerPC.
Copyright (C) 1999, 2001, 2002, 2003, 2006, 2011 Copyright (C) 1999, 2001, 2002, 2003, 2006, 2011, 2012
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -93,7 +93,7 @@ GOT_LABEL: ; \
ASM_SIZE_DIRECTIVE(name) ASM_SIZE_DIRECTIVE(name)
#define DO_CALL(syscall) \ #define DO_CALL(syscall) \
li 0,syscall; \ li 0,syscall; \
sc sc
#undef JUMPTARGET #undef JUMPTARGET
@ -153,6 +153,10 @@ GOT_LABEL: ; \
#undef L #undef L
#define L(x) .L##x #define L(x) .L##x
#define XGLUE(a,b) a##b
#define GLUE(a,b) XGLUE (a,b)
#define GENERATE_GOT_LABEL(name) GLUE (.got_label, name)
/* Label in text section. */ /* Label in text section. */
#define C_TEXT(name) name #define C_TEXT(name) name

View File

@ -1,5 +1,5 @@
/* Save current context, powerpc32 common. /* Save current context, powerpc32 common.
Copyright (C) 2005, 2006, 2011 Free Software Foundation, Inc. Copyright (C) 2005, 2006, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -18,13 +18,13 @@
02110-1301 USA. */ 02110-1301 USA. */
/* This is the common implementation of getcontext for powerpc32. /* This is the common implementation of getcontext for powerpc32.
It not complete in itself should be included in to a framework that It not complete in itself should be included in to a framework that
defines: defines:
__CONTEXT_FUNC_NAME __CONTEXT_FUNC_NAME
and if appropriate: and if appropriate:
__CONTEXT_ENABLE_FPRS __CONTEXT_ENABLE_FPRS
__CONTEXT_ENABLE_VRS __CONTEXT_ENABLE_VRS
Any archecture that implements the Vector unit is assumed to also Any archecture that implements the Vector unit is assumed to also
implement the floating unit. */ implement the floating unit. */
/* Stack frame offsets. */ /* Stack frame offsets. */
@ -145,6 +145,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
# ifdef __CONTEXT_ENABLE_VRS # ifdef __CONTEXT_ENABLE_VRS
# ifdef PIC # ifdef PIC
mflr r8 mflr r8
# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME)
SETUP_GOT_ACCESS(r7,got_label) SETUP_GOT_ACCESS(r7,got_label)
addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha
addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l
@ -165,9 +166,9 @@ ENTRY(__CONTEXT_FUNC_NAME)
la r10,(_UC_VREGS)(r3) la r10,(_UC_VREGS)(r3)
la r9,(_UC_VREGS+16)(r3) la r9,(_UC_VREGS+16)(r3)
beq 2f /* L(no_vec) */ beq 2f /* L(no_vec) */
/* address of the combined VSCR/VSAVE quadword. */ /* address of the combined VSCR/VSAVE quadword. */
la r8,(_UC_VREGS+512)(r3) la r8,(_UC_VREGS+512)(r3)
/* Save the vector registers */ /* Save the vector registers */
@ -186,7 +187,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
addi r9,r9,32 addi r9,r9,32
stvx v0,0,r8 stvx v0,0,r8
stvx v4,0,r10 stvx v4,0,r10
stvx v5,0,r9 stvx v5,0,r9
addi r10,r10,32 addi r10,r10,32
@ -277,4 +278,3 @@ ENTRY(__CONTEXT_FUNC_NAME)
mtlr r0 mtlr r0
blr blr
END(__CONTEXT_FUNC_NAME) END(__CONTEXT_FUNC_NAME)

View File

@ -1,5 +1,5 @@
/* Jump to a new context powerpc32 common. /* Jump to a new context powerpc32 common.
Copyright (C) 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. Copyright (C) 2005, 2006, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -73,6 +73,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
#ifdef PIC #ifdef PIC
mflr r8 mflr r8
# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME)
SETUP_GOT_ACCESS(r7,got_label) SETUP_GOT_ACCESS(r7,got_label)
addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha
addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l

View File

@ -1,5 +1,5 @@
/* Save current context and jump to a new context. /* Save current context and jump to a new context.
Copyright (C) 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. Copyright (C) 2005,2006,2008,2009,2011,2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -146,6 +146,7 @@ ENTRY(__CONTEXT_FUNC_NAME)
# ifdef PIC # ifdef PIC
mflr r8 mflr r8
# define got_label GENERATE_GOT_LABEL (__CONTEXT_FUNC_NAME)
SETUP_GOT_ACCESS(r7,got_label) SETUP_GOT_ACCESS(r7,got_label)
addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha
addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l