From 91d2a8453f501c4fc6cadde9cf00e6cced17a40c Mon Sep 17 00:00:00 2001 From: Will Schmidt Date: Sat, 17 Dec 2011 15:07:31 -0500 Subject: Simplify code for accessing powerpc GOT --- sysdeps/powerpc/powerpc32/a2/memcpy.S | 10 ++++------ sysdeps/powerpc/powerpc32/dl-start.S | 10 +++++----- sysdeps/powerpc/powerpc32/elf/start.S | 14 ++++++-------- sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S | 10 +++++----- sysdeps/powerpc/powerpc32/fpu/s_ceil.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_ceilf.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_floor.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_floorf.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_lround.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_rint.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_rintf.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_round.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_roundf.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_trunc.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/s_truncf.S | 9 ++++----- sysdeps/powerpc/powerpc32/fpu/setjmp-common.S | 9 ++++----- sysdeps/powerpc/powerpc32/memset.S | 10 +++++----- sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S | 9 ++++----- sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S | 8 +++----- sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S | 8 +++----- sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S | 8 +++----- sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S | 8 +++----- sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S | 9 ++++----- sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S | 9 ++++----- sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S | 9 ++++----- sysdeps/powerpc/powerpc32/sysdep.h | 10 +++++++++- .../unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S | 9 ++++----- sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S | 9 ++++----- .../sysv/linux/powerpc/powerpc32/getcontext-common.S | 9 ++++----- .../sysv/linux/powerpc/powerpc32/setcontext-common.S | 9 ++++----- .../sysv/linux/powerpc/powerpc32/swapcontext-common.S | 16 +++++++--------- 31 files changed, 133 insertions(+), 159 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/powerpc/powerpc32/a2/memcpy.S b/sysdeps/powerpc/powerpc32/a2/memcpy.S index 472f7a393b..f4c3c18414 100644 --- a/sysdeps/powerpc/powerpc32/a2/memcpy.S +++ b/sysdeps/powerpc/powerpc32/a2/memcpy.S @@ -1,5 +1,5 @@ /* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by Michael Brutman . This file is part of the GNU C Library. @@ -113,11 +113,9 @@ L(dst_aligned): mflr r0 /* Establishes GOT addressability so we can load __cache_line_size from static. This value was set from the aux vector during startup. */ - bcl 20,31,1f -1: - mflr r9 - addis r9,r9,__cache_line_size-1b@ha - lwz r9,__cache_line_size-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,__cache_line_size-got_label@ha + lwz r9,__cache_line_size-got_label@l(r9) mtlr r0 #else /* Load __cache_line_size from static. This value was set from the diff --git a/sysdeps/powerpc/powerpc32/dl-start.S b/sysdeps/powerpc/powerpc32/dl-start.S index ae41f47ede..c2fcc37465 100644 --- a/sysdeps/powerpc/powerpc32/dl-start.S +++ b/sysdeps/powerpc/powerpc32/dl-start.S @@ -1,5 +1,6 @@ /* Machine-dependent ELF startup code. PowerPC version. - Copyright (C) 1995-2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2002, 2004, 2005, 2006, 2011 + 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 @@ -47,10 +48,9 @@ _dl_start_user: passed by value!). */ /* Put our GOT pointer in r31, */ - bcl 20,31,1f -1: mflr r31 - addis r31,r31,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r31,r31,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r31,got_label) + addis r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@l /* the address of _start in r30, */ mr r30,r3 /* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */ diff --git a/sysdeps/powerpc/powerpc32/elf/start.S b/sysdeps/powerpc/powerpc32/elf/start.S index dc89a5e109..65e747fe9b 100644 --- a/sysdeps/powerpc/powerpc32/elf/start.S +++ b/sysdeps/powerpc/powerpc32/elf/start.S @@ -1,5 +1,5 @@ /* Startup code for programs linked with GNU libc. - Copyright (C) 1998,1999,2000,2001,2002,2003,2009 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2009, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -59,10 +59,8 @@ ENTRY(_start) /* Set up an initial stack frame, and clear the LR. */ clrrwi r1,r1,4 #ifdef PIC - bcl 20,31,L(branch) -L(branch): + SETUP_GOT_ACCESS(r13,got_label) li r0,0 - mflr r13 #else li r0,0 #endif @@ -73,10 +71,10 @@ L(branch): start_addresses in r8. Also load the GOT pointer so that new PLT calls work, like the one to __libc_start_main. */ #ifdef PIC - addis r30,r13,_GLOBAL_OFFSET_TABLE_-L(branch)@ha - addis r8,r13,L(start_addresses)-L(branch)@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-L(branch)@l - lwzu r13,L(start_addresses)-L(branch)@l(r8) + addis r30,r13,_GLOBAL_OFFSET_TABLE_-got_label@ha + addis r8,r13,L(start_addresses)-got_label@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l + lwzu r13, L(start_addresses)-got_label@l(r8) #else lis r8,L(start_addresses)@ha lwzu r13,L(start_addresses)@l(r8) diff --git a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S index e1ac064a59..b509ef3b31 100644 --- a/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S @@ -1,5 +1,6 @@ /* longjmp for PowerPC. - Copyright (C) 1995-99, 2000, 2003-2006, 2009 Free Software Foundation, Inc. + Copyright (C) 1995-99, 2000, 2003-2006, 2009, 2011 + 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 @@ -34,10 +35,9 @@ ENTRY (BP_SYM (__longjmp)) # ifdef PIC mflr r6 cfi_register (lr,r6) - bcl 20,31,1f -1: mflr r5 - addis r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r5,got_label) + addis r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@l # ifdef SHARED lwz r5,_rtld_global_ro@got(r5) mtlr r6 diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S b/sysdeps/powerpc/powerpc32/fpu/s_ceil.S index 80e72ca2bd..a231448d37 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceil.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_ceil.S @@ -1,5 +1,5 @@ /* ceil function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -31,10 +31,9 @@ ENTRY (__ceil) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S b/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S index ce6d71e4f8..bfd5c61e6d 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S @@ -1,5 +1,5 @@ /* float ceil function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -30,10 +30,9 @@ ENTRY (__ceilf) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floor.S b/sysdeps/powerpc/powerpc32/fpu/s_floor.S index 0dd0dbe6c0..73971acb46 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_floor.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_floor.S @@ -1,5 +1,5 @@ /* Floor function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -31,10 +31,9 @@ ENTRY (__floor) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S b/sysdeps/powerpc/powerpc32/fpu/s_floorf.S index 98a47458bc..562349e172 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_floorf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_floorf.S @@ -1,5 +1,5 @@ /* float Floor function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -30,10 +30,9 @@ ENTRY (__floorf) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_lround.S b/sysdeps/powerpc/powerpc32/fpu/s_lround.S index 3bf1ffaea1..b29ee9d288 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_lround.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_lround.S @@ -1,5 +1,5 @@ /* lround function. PowerPC32 version. - Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2007, 2008, 2011 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 @@ -45,10 +45,9 @@ ENTRY (__lround) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp10,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp10,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rint.S b/sysdeps/powerpc/powerpc32/fpu/s_rint.S index 93133718ad..17cd0bd90d 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_rint.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_rint.S @@ -1,5 +1,5 @@ /* Round to int floating-point values. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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,10 +33,9 @@ ENTRY (__rint) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S index 1e0fbb1f0d..d5115bc253 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_rintf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_rintf.S @@ -1,5 +1,5 @@ /* Round float to int floating-point values. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -29,10 +29,9 @@ ENTRY (__rintf) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_round.S b/sysdeps/powerpc/powerpc32/fpu/s_round.S index 48b346e651..dcb8dbedc2 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_round.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_round.S @@ -1,5 +1,5 @@ /* round function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -43,10 +43,9 @@ ENTRY (__round) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - addi r9,r9,.LC0-1b@l + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + addi r9,r9,.LC0-got_label@l mtlr r11 cfi_same_value (lr) lfs fp13,0(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S index 88125aad06..0da9251247 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_roundf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_roundf.S @@ -1,5 +1,5 @@ /* roundf function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -42,10 +42,9 @@ ENTRY (__roundf ) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - addi r9,r9,.LC0-1b@l + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + addi r9,r9,.LC0-got_label@l mtlr r11 cfi_same_value (lr) lfs fp13,0(r9) diff --git a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S b/sysdeps/powerpc/powerpc32/fpu/s_trunc.S index c3c021716a..b731cb7c82 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_trunc.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_trunc.S @@ -1,5 +1,5 @@ /* trunc function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -38,10 +38,9 @@ ENTRY (__trunc) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S b/sysdeps/powerpc/powerpc32/fpu/s_truncf.S index eddef070cd..e14ec1b5d2 100644 --- a/sysdeps/powerpc/powerpc32/fpu/s_truncf.S +++ b/sysdeps/powerpc/powerpc32/fpu/s_truncf.S @@ -1,5 +1,5 @@ /* truncf function. PowerPC32 version. - Copyright (C) 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2011 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 @@ -37,10 +37,9 @@ ENTRY (__truncf) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfs fp13,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfs fp13,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) #else diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S index 131e7a332e..90e20ba57a 100644 --- a/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S +++ b/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S @@ -1,5 +1,5 @@ /* setjmp for PowerPC. - Copyright (C) 1995-2000, 2003-2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2003-2005, 2006, 2011 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 @@ -85,10 +85,9 @@ ENTRY (BP_SYM (__sigsetjmp)) # ifdef PIC mflr r6 cfi_register(lr,r6) - bcl 20,31,1f -1: mflr r5 - addis r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r5,got_label) + addis r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@l mtlr r6 cfi_same_value (lr) # ifdef SHARED diff --git a/sysdeps/powerpc/powerpc32/memset.S b/sysdeps/powerpc/powerpc32/memset.S index b4ce218e24..9803e7efd8 100644 --- a/sysdeps/powerpc/powerpc32/memset.S +++ b/sysdeps/powerpc/powerpc32/memset.S @@ -1,5 +1,6 @@ /* Optimized memset implementation for PowerPC. - Copyright (C) 1997, 1999, 2000, 2003, 2007 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2000, 2003, 2007, 2011 + 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 @@ -256,10 +257,9 @@ L(checklinesize): beq L(medium) /* Establishes GOT addressability so we can load __cache_line_size from static. This value was set from the aux vector during startup. */ - bcl 20,31,1f -1: mflr rGOT - addis rGOT,rGOT,__cache_line_size-1b@ha - lwz rCLS,__cache_line_size-1b@l(rGOT) + SETUP_GOT_ACCESS(rGOT,got_label) + addis rGOT,rGOT,__cache_line_size-got_label@ha + lwz rCLS,__cache_line_size-got_label@l(rGOT) mtlr rTMP #else /* Load __cache_line_size from static. This value was set from the diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S index b03e041d8a..591fcfb3c2 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S +++ b/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S @@ -1,5 +1,5 @@ /* llround function. PowerPC32 on PowerPC64 version. - Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2007, 2008, 2011 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 @@ -53,10 +53,9 @@ ENTRY (__llround) #ifdef SHARED mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - addi r9,r9,.LC0-1b@l + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + addi r9,r9,.LC0-got_label@l mtlr r11 cfi_same_value (lr) lfd fp9,0(r9) diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S index c03dfa37f7..e04968e6fe 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S +++ b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S @@ -63,11 +63,9 @@ EALIGN (__sqrt, 5, 0) cfi_offset(lr,20-16) cfi_offset(r30,8-16) #ifdef SHARED - bcl 20,31,.LCF1 -.LCF1: - mflr r30 - addis r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@l + SETUP_GOT_ACCESS(r30,got_label) + addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l lwz r9,_LIB_VERSION@got(30) lwz r0,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S index 050323da59..356d3edacb 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S +++ b/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S @@ -63,11 +63,9 @@ EALIGN (__sqrtf, 5, 0) cfi_offset(lr,20-16) cfi_offset(r30,8-16) #ifdef SHARED - bcl 20,31,.LCF1 -.LCF1: - mflr r30 - addis r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@l + SETUP_GOT_ACCESS(r30,got_label) + addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l lwz r9,_LIB_VERSION@got(30) lwz r0,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S index 1c0f70dc54..f89b651e41 100644 --- a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S +++ b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S @@ -63,11 +63,9 @@ EALIGN (__sqrt, 5, 0) cfi_offset(lr,20-16) cfi_offset(r30,8-16) #ifdef SHARED - bcl 20,31,.LCF1 -.LCF1: - mflr r30 - addis r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@l + SETUP_GOT_ACCESS(r30,got_label) + addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l lwz r9,_LIB_VERSION@got(30) lwz r0,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S index e638cc102b..e9dde1676b 100644 --- a/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S +++ b/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S @@ -63,11 +63,9 @@ EALIGN (__sqrtf, 5, 0) cfi_offset(lr,20-16) cfi_offset(r30,8-16) #ifdef SHARED - bcl 20,31,.LCF1 -.LCF1: - mflr r30 - addis r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@ha - addi r30,r30,_GLOBAL_OFFSET_TABLE_-.LCF1@l + SETUP_GOT_ACCESS(r30,got_label) + addis r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l lwz r9,_LIB_VERSION@got(30) lwz r0,0(r9) #else diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S index 5b0d950c74..40e6679d11 100644 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S +++ b/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S @@ -1,5 +1,5 @@ /* finite(). PowerPC32/POWER7 version. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by Luis Machado . This file is part of the GNU C Library. @@ -35,10 +35,9 @@ ENTRY (__finite) mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfd fp0,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfd fp0,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S index 2979534911..a026583a1f 100644 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S +++ b/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S @@ -1,5 +1,5 @@ /* isinf(). PowerPC32/POWER7 version. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by Luis Machado . This file is part of the GNU C Library. @@ -35,10 +35,9 @@ ENTRY (__isinf) mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfd fp0,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfd fp0,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) diff --git a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S b/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S index 852539f24b..123260bbba 100644 --- a/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S +++ b/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S @@ -1,5 +1,5 @@ /* isnan(). PowerPC32/POWER7 version. - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by Luis Machado . This file is part of the GNU C Library. @@ -35,10 +35,9 @@ ENTRY (__isnan) mflr r11 cfi_register(lr,r11) - bcl 20,31,1f -1: mflr r9 - addis r9,r9,.LC0-1b@ha - lfd fp0,.LC0-1b@l(r9) + SETUP_GOT_ACCESS(r9,got_label) + addis r9,r9,.LC0-got_label@ha + lfd fp0,.LC0-got_label@l(r9) mtlr r11 cfi_same_value (lr) diff --git a/sysdeps/powerpc/powerpc32/sysdep.h b/sysdeps/powerpc/powerpc32/sysdep.h index 88cfe71e0b..c824c0a85d 100644 --- a/sysdeps/powerpc/powerpc32/sysdep.h +++ b/sysdeps/powerpc/powerpc32/sysdep.h @@ -1,5 +1,6 @@ /* Assembly macros for 32-bit PowerPC. - Copyright (C) 1999, 2001, 2002, 2003, 2006 Free Software Foundation, Inc. + Copyright (C) 1999, 2001, 2002, 2003, 2006, 2011 + 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 @@ -46,6 +47,13 @@ cfi_startproc; \ CALL_MCOUNT +/* helper macro for accessing the 32-bit powerpc GOT. */ + +#define SETUP_GOT_ACCESS(regname,GOT_LABEL) \ + bcl 20,31,GOT_LABEL ; \ +GOT_LABEL: ; \ + mflr (regname) + #define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_1 nop #define EALIGN_W_2 nop;nop diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S index cfd9864f63..2b97f01b47 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2009 Free Software Foundation, Inc. +/* Copyright (C) 2009, 2011 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 @@ -29,10 +29,9 @@ #ifdef PIC # define LOAD_ARG \ - bcl 20,31,1f; \ -1: mflr r3; \ - addis r3,r3,_GLOBAL_OFFSET_TABLE_-1b@ha; \ - addi r3,r3,_GLOBAL_OFFSET_TABLE_-1b@l; \ + SETUP_GOT_ACCESS(r3,got_label2); \ + addis r3,r3,_GLOBAL_OFFSET_TABLE_-got_label2@ha; \ + addi r3,r3,_GLOBAL_OFFSET_TABLE_-got_label2@l; \ lwz r3,.LC0@got(r3) #else # define LOAD_ARG \ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S index 4c8c6b433b..928ba217bc 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S @@ -1,5 +1,5 @@ /* brk system call for Linux/ppc. - Copyright (C) 1995-97, 1999, 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-97, 1999, 2000, 2006, 2011 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 @@ -36,10 +36,9 @@ ENTRY (BP_SYM (__brk)) DO_CALL(SYS_ify(brk)) lwz r6,8(r1) #ifdef PIC - bcl 20,31,1f -1: mflr r5 - addis r5,r5,__curbrk-1b@ha - stw r3,__curbrk-1b@l(r5) + SETUP_GOT_ACCESS(r5,got_label) + addis r5,r5,__curbrk-got_label@ha + stw r3,__curbrk-got_label@l(r5) #else lis r4,__curbrk@ha stw r3,__curbrk@l(r4) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S index 27285ed4a5..f55c0730f1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S @@ -1,5 +1,5 @@ /* Save current context, powerpc32 common. - Copyright (C) 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2011 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 @@ -145,10 +145,9 @@ ENTRY(__CONTEXT_FUNC_NAME) # ifdef __CONTEXT_ENABLE_VRS # ifdef PIC mflr r8 - bcl 20,31,1f -1: mflr r7 - addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r7,got_label) + addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S index f304090868..a2f419b0e1 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S @@ -1,5 +1,5 @@ /* Jump to a new context powerpc32 common. - Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2008, 2009, 2011 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 @@ -73,10 +73,9 @@ ENTRY(__CONTEXT_FUNC_NAME) #ifdef PIC mflr r8 - bcl 20,31,1f -1: mflr r7 - addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r7,got_label) + addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S index 62efee2dce..19dfcf8402 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S @@ -1,5 +1,5 @@ /* Save current context and jump to a new context. - Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2008, 2009, 2011 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 @@ -146,10 +146,9 @@ ENTRY(__CONTEXT_FUNC_NAME) # ifdef PIC mflr r8 - bcl 20,31,1f -1: mflr r7 - addis r7,r7,_GLOBAL_OFFSET_TABLE_-1b@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-1b@l + SETUP_GOT_ACCESS(r7,got_label) + addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l # ifdef SHARED lwz r7,_rtld_global_ro@got(r7) mtlr r8 @@ -299,10 +298,9 @@ ENTRY(__CONTEXT_FUNC_NAME) # ifdef PIC mflr r8 # ifdef HAVE_ASM_PPC_REL16 - bcl 20,31,5f -5: mflr r7 - addis r7,r7,_GLOBAL_OFFSET_TABLE_-5b@ha - addi r7,r7,_GLOBAL_OFFSET_TABLE_-5b@l + SETUP_GOT_ACCESS(r7,got_label) + addis r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@ha + addi r7,r7,_GLOBAL_OFFSET_TABLE_-got_label@l # else bl _GLOBAL_OFFSET_TABLE_@local-4 mflr r7 -- cgit 1.4.1