Patchwork [rs6000] Preserve link stack for 476 cpus

login
register
mail settings
Submitter Peter Bergner
Date Nov. 2, 2011, 6:34 p.m.
Message ID <1320258868.2996.313.camel@otta>
Download mbox | patch
Permalink /patch/123309/
State New
Headers show

Comments

Peter Bergner - Nov. 2, 2011, 6:34 p.m.
On Wed, 2011-11-02 at 18:17 +0000, Iain Sandoe wrote:
> also in macho_branch_islands () :
> 
> 	  if (TARGET_LINK_STACK)
> 	    {
> 	      char name[32];
> 	      get_ppc64_thunk_name (name);
> 	      strcat (tmp_buf, ":\n\tmflr r0\n\tbl ");
> 	      strcat (tmp_buf, name);
> 	      strcat (tmp_buf, "\n");
> 	      strcat (tmp_buf, label);
> 	      strcat (tmp_buf, "_pic:\n\tmflr r11\n");
> 	    }
> 	  else
> 
> which breaks bootstrap for darwin - I'm not sure why you have an entry  
> here (this is mach-o-specific code)
>   - I doubt there will ever be a mach-o implementation with a PPC476 -
> but, in any case the call to get_ppc64_thunk_name needs wrapping  
> somehow.

How is it failing for you?  And what are your configure options so
I can try and recreate the error?

If it's similar to what Alan saw but for get_ppc64_thunk_name, namely:

rs6000.c:27968:1: error: 'void rs6000_code_end()' defined but not used
[-Werror=unused-function]
cc1plus: all warnings being treated as errors

Does the following fix it for you?


Peter
IainS - Nov. 2, 2011, 6:52 p.m.
On 2 Nov 2011, at 18:34, Peter Bergner wrote:

> On Wed, 2011-11-02 at 18:17 +0000, Iain Sandoe wrote:
>> also in macho_branch_islands () :
>>
>> 	  if (TARGET_LINK_STACK)
>> 	    {
>> 	      char name[32];
>> 	      get_ppc64_thunk_name (name);
>> 	      strcat (tmp_buf, ":\n\tmflr r0\n\tbl ");
>> 	      strcat (tmp_buf, name);
>> 	      strcat (tmp_buf, "\n");
>> 	      strcat (tmp_buf, label);
>> 	      strcat (tmp_buf, "_pic:\n\tmflr r11\n");
>> 	    }
>> 	  else
>>
>> which breaks bootstrap for darwin - I'm not sure why you have an  
>> entry
>> here (this is mach-o-specific code)
>>  - I doubt there will ever be a mach-o implementation with a PPC476 -
>> but, in any case the call to get_ppc64_thunk_name needs wrapping
>> somehow.
>
> How is it failing for you?  And what are your configure options so
> I can try and recreate the error?

/GCC/gcc-live-trunk/gcc/config/rs6000/rs6000.c: In function ‘void  
macho_branch_islands()’:
/GCC/gcc-live-trunk/gcc/config/rs6000/rs6000.c:25074:34: error:  
‘get_ppc64_thunk_name’ was not declared in this scope
make[3]: *** [rs6000.o] Error 1
make[3]: *** Waiting for unfinished jobs....


/GCC/gcc-live-trunk/configure --prefix=/GCC/gcc-4-7-tempi -- 
target=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 -- 
build=powerpc-apple-darwin9 --enable-version-specific-runtime-libs -- 
enable-checking=yes --with-libiconv-prefix=/usr --with-system-zlib -- 
with-gmp=/GCC/multiprec-math/ppc --with-mpfr=/GCC/multiprec-math/ppc   
--with-mpc=/GCC/multiprec-math/ppc --enable-languages=c,c+ 
+,fortran,ada,objc,obj-c++,lto

etc..

===

Hmm .. I wonder if this is just a temporary glitch because of the move  
of files to libgcc.

I'll investigate a bit further later...

> If it's similar to what Alan saw but for get_ppc64_thunk_name, namely:
>
> rs6000.c:27968:1: error: 'void rs6000_code_end()' defined but not used
> [-Werror=unused-function]
> cc1plus: all warnings being treated as errors
>
> Does the following fix it for you?
>
> Index: config/rs6000/rs6000-protos.h
> ===================================================================
> --- config/rs6000/rs6000-protos.h	(revision 180786)
> +++ config/rs6000/rs6000-protos.h	(working copy)
> @@ -173,7 +173,7 @@ extern void rs6000_emit_eh_reg_restore (
> extern const char * output_isel (rtx *);
> extern void rs6000_call_indirect_aix (rtx, rtx, rtx);
> extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
> -extern void get_ppc476_thunk_name (char name[32]);
> +extern void get_ppc476_thunk_name (char name[32]) ATTRIBUTE_UNUSED;
>
> /* Declare functions in rs6000-c.c */

We do include this in tm_p.h

$ more ../gcc-4-7-trunk-build/gcc/tm_p.h
#ifndef GCC_TM_P_H
#define GCC_TM_P_H
#ifdef IN_GCC
# include "config/rs6000/rs6000-protos.h"
# include "config/darwin-protos.h"
# include "tm-preds.h"
#endif
#endif /* GCC_TM_P_H */

.. but not in tm.h

Iain

Patch

Index: config/rs6000/rs6000-protos.h
===================================================================
--- config/rs6000/rs6000-protos.h	(revision 180786)
+++ config/rs6000/rs6000-protos.h	(working copy)
@@ -173,7 +173,7 @@  extern void rs6000_emit_eh_reg_restore (
 extern const char * output_isel (rtx *);
 extern void rs6000_call_indirect_aix (rtx, rtx, rtx);
 extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
-extern void get_ppc476_thunk_name (char name[32]);
+extern void get_ppc476_thunk_name (char name[32]) ATTRIBUTE_UNUSED;
 
 /* Declare functions in rs6000-c.c */