[LLVMdev] Segmented Stacks: Pre-midterm work

Rafael Ávila de Espíndola rafael.espindola at gmail.com
Tue Aug 16 14:23:03 PDT 2011


> thanks for working on this!  As far as I know, split stacks are the only thing
> special to GCC Go, otherwise the generic GCC infrastructure was enough.  If that
> is true then you shouldn't need to do more than what you described above, except
> for poking at things until they work of course!  The usual source of trouble is
> when front-ends trying to write things directly to the assembler file, bypassing
> the generic machinery (and thereby bypassing dragonegg).  In order to support
> LTO front-ends shouldn't do this anymore, but some (eg: java) still do.  I had
> a look at the GO front-end and I see this suspicious code:
> 
> /* This is called by the Go frontend proper to add data to the
>     .go_export section.  */
> 
> void
> go_write_export_data (const char *bytes, unsigned int size)
> {
>    static section* sec;
> 
>    if (sec == NULL)
>      {
>        gcc_assert (targetm_common.have_named_sections);
>        sec = get_section (".go_export", SECTION_DEBUG, NULL);
>      }
> 
>    switch_to_section (sec);
>    assemble_string (bytes, size);
> }

:-(

Fixing things like this was fairly painful in the past. It is sad to see new cases showing up.

> So you might want to check if copying .go_export sections from the GCC compiled
> assembler file into the dragonegg compile assembler files suddenly causes Go
> programs to start working.
> 
> Ciao, Duncan.

Cheers,
Rafael



More information about the llvm-dev mailing list