diff mbox

[AVR] Was/Fix: error linking lto1 for target avr

Message ID 4ED91B5F.7030904@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Dec. 2, 2011, 6:39 p.m. UTC
Denis Chertykov wrote:
> 2011/11/29 Georg-Johann Lay <avr@gjlay.de>:
>> Ian Lance Taylor wrote:
>>> Georg-Johann Lay <avr@gjlay.de> writes:
>>>
>>>> So if a frontend can define address spaces and it is a generic feature, the
>>>> question is how to get the name of an address space in a generic, language
>>>> independent way.
>>> We could decide that all frontends that use address spaces must define a
>>> printable name for each address space.  That would mean changing the
>>> middle-end address space interface to give a name to each address space.
>>> The current middle-end address space interface does not require that
>>> address spaces have a name.  I was not involved in the addition of
>>> address spaces to gcc, and I don't know why they followed the path they
>>> did.
>>>
>>> Ian
>> Presumably they chose that approach to keep it simple or it is even a
>> performance issue to move the name around.
>>
>> I attached a patch but I fail to find the right configure options for
>> gcc/binutils as the testsuite complains
>>
>> ./avr/bin/ld: bad -plugin option
>>
>> Configured gcc with --enable-lto and binutils 2.21 with --enable-plugin.
>>
>> Maybe the patch can be pre-approved so that the others can proceed with their work?
> 
> Better to complete this work.
> 
> Denis.

http://gcc.gnu.org/ml/gcc-patches/2011-11/msg02574.html

I now switched back to --disable-lto as I could not resolve the problems that
appear to be a collect2 issue, see

http://gcc.gnu.org/ml/gcc-help/2011-12/msg00016.html

What I can do is:

* build the compiler with the patch and with LTO enabled and without
  getting a linker error for c_addr_space_name.

* I cannot get usable results from testsuite because of collect2 breakage

* Testsuite passes fine with the patch and --disable-lto the only
  regression that I get is
    gcc.c-torture/execute/vector-subscript-1.c
  which is because of bogus testcase that assumes sizeof(int) = 4
  and passes with the fix



or


-  __builtin_memcpy(a, &val3, 16);
+  __builtin_memcpy(a, &val3, 4*sizeof(int));



Ok for trunk?

Johann

	* config/avr/avr.h (ADDR_SPACE_PGM, ADDR_SPACE_PGM1,
	ADDR_SPACE_PGM2, ADDR_SPACE_PGM3, ADDR_SPACE_PGM4,
	ADDR_SPACE_PGM5, ADDR_SPACE_PGMX): Write as enum.
	(avr_addrspace_t): New typedef.
	(avr_addrspace): New declaration.
	* config/avr/avr-c.c (avr_toupper): New static function.
	(avr_register_target_pragmas, avr_cpu_cpp_builtins): Use
	avr_addrspace to get address space information.
	* config/avr/avr.c (avr_addrspace): New variable.
	(avr_out_lpm, avr_pgm_check_var_decl, avr_insert_attributes,
	avr_asm_named_section, avr_section_type_flags,
	avr_asm_select_section, avr_addr_space_address_mode,
	avr_addr_space_convert, avr_emit_movmemhi): Use it.
	(avr_addr_space_pointer_mode): Forward to avr_addr_space_address_mode.
	(avr_pgm_segment): Remove.

Comments

Georg-Johann Lay Dec. 4, 2011, 3:41 p.m. UTC | #1
Georg-Johann Lay schrieb:
> Denis Chertykov wrote:
> 
>> Georg-Johann Lay:
>>
>>>I attached a patch but I fail to find the right configure options for
>>>gcc/binutils as the testsuite complains
>>>
>>>./avr/bin/ld: bad -plugin option
>>>
>>>Maybe the patch can be pre-approved so that the others can proceed with their work?
>>
>>Better to complete this work.
>>
>>Denis.

http://gcc.gnu.org/ml/gcc-patches/2011-11/msg02574.html

As this is a blocker and I am blocked myself by a collect2 issue:

Eric, Denis, could one of you test the patch and apply it if it is okay?
It is PR51409.

Applying is to issue for me, but running the tests with LTO enabled 
breaks anything that involves -flto because collect2 calls wrong linker, 
see link to gcc-help@ below.

As it appears I will have to debug/fix collect2 by myself which will 
take quite some time because I am not familiar with LTO/collect2.

Johann

> I now switched back to --disable-lto as I could not resolve the problems that
> appear to be a collect2 issue, see
> 
> http://gcc.gnu.org/ml/gcc-help/2011-12/msg00016.html
> 
> What I can do is:
> 
> * build the compiler with the patch and with LTO enabled and without
>   getting a linker error for c_addr_space_name.
> 
> * I cannot get usable results from testsuite because of collect2 breakage
> 
> * Testsuite passes fine with the patch and --disable-lto [...]
> 
> Ok for trunk?
> 
> Johann
> 
> 	* config/avr/avr.h (ADDR_SPACE_PGM, ADDR_SPACE_PGM1,
> 	ADDR_SPACE_PGM2, ADDR_SPACE_PGM3, ADDR_SPACE_PGM4,
> 	ADDR_SPACE_PGM5, ADDR_SPACE_PGMX): Write as enum.
> 	(avr_addrspace_t): New typedef.
> 	(avr_addrspace): New declaration.
> 	* config/avr/avr-c.c (avr_toupper): New static function.
> 	(avr_register_target_pragmas, avr_cpu_cpp_builtins): Use
> 	avr_addrspace to get address space information.
> 	* config/avr/avr.c (avr_addrspace): New variable.
> 	(avr_out_lpm, avr_pgm_check_var_decl, avr_insert_attributes,
> 	avr_asm_named_section, avr_section_type_flags,
> 	avr_asm_select_section, avr_addr_space_address_mode,
> 	avr_addr_space_convert, avr_emit_movmemhi): Use it.
> 	(avr_addr_space_pointer_mode): Forward to avr_addr_space_address_mode.
> 	(avr_pgm_segment): Remove.
Georg-Johann Lay Dec. 4, 2011, 3:59 p.m. UTC | #2
Georg-Johann Lay wrote:
> 
> http://gcc.gnu.org/ml/gcc-patches/2011-11/msg02574.html
> 
> As this is a blocker and I am blocked myself by a collect2 issue:
> 
> Eric, Denis, could one of you test the patch and apply it if it is okay?
> It is PR51409.

In addition, please add PR49868 to the ChangeLog. Thanks.

Johann

> Applying is to issue for me, but running the tests with LTO enabled 
> breaks anything that involves -flto because collect2 calls wrong linker, 
> see link to gcc-help@ below.
> 
> As it appears I will have to debug/fix collect2 by myself which will 
> take quite some time because I am not familiar with LTO/collect2.
> 
>> I now switched back to --disable-lto as I could not resolve the 
>> problems that
>> appear to be a collect2 issue, see
>>
>> http://gcc.gnu.org/ml/gcc-help/2011-12/msg00016.html
>>
>> What I can do is:
>>
>> * build the compiler with the patch and with LTO enabled and without
>>   getting a linker error for c_addr_space_name.
>>
>> * I cannot get usable results from testsuite because of collect2 breakage
>>
>> * Testsuite passes fine with the patch and --disable-lto [...]
>>
>> Ok for trunk?
>>
>> Johann
>>
>>     * config/avr/avr.h (ADDR_SPACE_PGM, ADDR_SPACE_PGM1,
>>     ADDR_SPACE_PGM2, ADDR_SPACE_PGM3, ADDR_SPACE_PGM4,
>>     ADDR_SPACE_PGM5, ADDR_SPACE_PGMX): Write as enum.
>>     (avr_addrspace_t): New typedef.
>>     (avr_addrspace): New declaration.
>>     * config/avr/avr-c.c (avr_toupper): New static function.
>>     (avr_register_target_pragmas, avr_cpu_cpp_builtins): Use
>>     avr_addrspace to get address space information.
>>     * config/avr/avr.c (avr_addrspace): New variable.
>>     (avr_out_lpm, avr_pgm_check_var_decl, avr_insert_attributes,
>>     avr_asm_named_section, avr_section_type_flags,
>>     avr_asm_select_section, avr_addr_space_address_mode,
>>     avr_addr_space_convert, avr_emit_movmemhi): Use it.
>>     (avr_addr_space_pointer_mode): Forward to 
>> avr_addr_space_address_mode.
>>     (avr_pgm_segment): Remove.
Denis Chertykov Dec. 4, 2011, 4:07 p.m. UTC | #3
2011/12/4 Georg-Johann Lay <avr@gjlay.de>:
> Georg-Johann Lay wrote:
>>
>>
>> http://gcc.gnu.org/ml/gcc-patches/2011-11/msg02574.html
>>
>> As this is a blocker and I am blocked myself by a collect2 issue:
>>
>> Eric, Denis, could one of you test the patch and apply it if it is okay?
>> It is PR51409.


I'm sorry, I can't because right now I'm debugging PR50925.
I spend all my free time to debug this bug.

Denis.
diff mbox

Patch

Index: gcc/testsuite/gcc.c-torture/execute/vector-subscript-1.c
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/vector-subscript-1.c  (revision 181932)
+++ gcc/testsuite/gcc.c-torture/execute/vector-subscript-1.c  (working copy)
@@ -49,7 +49,7 @@  int main( int argc, char* argv[] )
   if (*f(&val3, 3 ) != 4)
     __builtin_abort ();

-  __builtin_memcpy(a, &val3, 16);
+  __builtin_memcpy(a, &val3, sizeof(a));
   for(i = 0; i < 4; i++)
     if (a[i] != i+1)
       __builtin_abort ();