From c57685107c297b07a00f5a19fe0d475f7865881d Mon Sep 17 00:00:00 2001 From: Olivier Hainque Date: Fri, 25 May 2012 08:20:03 +0000 Subject: [PATCH] tramp.S (trampoline_setup): Use a longcall sequence in the non pic case on VxWorks. libgcc/ * config/rs6000/vxworks/tramp.S (trampoline_setup): Use a longcall sequence in the non pic case on VxWorks. From-SVN: r187871 --- libgcc/ChangeLog | 5 +++++ libgcc/config/rs6000/tramp.S | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 8f343a3c82e..db4c801580e 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-25 Olivier Hainque + + * config/rs6000/vxworks/tramp.S (trampoline_setup): Use a longcall + sequence in the non pic case on VxWorks. + 2012-05-24 Olivier Hainque * Makefile.in: Move dependency on install-unwind_h from diff --git a/libgcc/config/rs6000/tramp.S b/libgcc/config/rs6000/tramp.S index 133b98840f1..d274d096205 100644 --- a/libgcc/config/rs6000/tramp.S +++ b/libgcc/config/rs6000/tramp.S @@ -95,6 +95,16 @@ FUNC_START(__trampoline_setup) blr .Labort: +/* Use a longcall sequence in the non PIC case on VxWorks, to prevent + possible relocation errors if this is module-loaded very far away from + the 'abort' entry point. */ +#if defined (__VXWORKS__) && ! (defined __PIC__ || defined __pic__) + lis r11,JUMP_TARGET(abort)@ha + addic r11,r11,JUMP_TARGET(abort)@l + mtlr r11 + blrl +#else + #if (defined __PIC__ || defined __pic__) && defined HAVE_AS_REL16 bcl 20,31,1f 1: mflr r30 @@ -105,3 +115,5 @@ FUNC_START(__trampoline_setup) FUNC_END(__trampoline_setup) #endif + +#endif