[Patch,AVR] Was/Fix: error linking lto1 for target avr
Georg-Johann Lay
avr@gjlay.de
Fri Dec 2 18:40:00 GMT 2011
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
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 ();
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.
More information about the Gcc-patches
mailing list