This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch,AVR] Was/Fix: error linking lto1 for target avr
- From: Georg-Johann Lay <avr at gjlay dot de>
- To: Denis Chertykov <chertykov at gmail dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Ian Lance Taylor <iant at google dot com>, Steven Bosscher <stevenb dot gcc at gmail dot com>, sean at depagnier dot com, GCC Mailing List <gcc at gcc dot gnu dot org>
- Date: Fri, 02 Dec 2011 19:39:27 +0100
- Subject: Re: [Patch,AVR] Was/Fix: error linking lto1 for target avr
- References: <CABu31nONrKUqC2ofy7x72aQ=u9Nof2berU92_XD6ack+azGWFQ@mail.gmail.com> <4ED216F7.3070901@gjlay.de> <mcrr50t5u9u.fsf@dhcp-172-18-216-180.mtv.corp.google.com> <4ED27DF2.2080907@gjlay.de> <mcrmxbg6dvp.fsf@dhcp-172-18-216-180.mtv.corp.google.com> <4ED383C3.5040402@gjlay.de> <mcraa7g3zo5.fsf@dhcp-172-18-216-180.mtv.corp.google.com> <4ED51080.9090306@gjlay.de> <CADOs=zaNr5=OmVWV5njhrT8NGHxnL1M7U=ng4z1i2O5LbyMURg@mail.gmail.com>
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.