[PATCH] SEGV whilst placing sections

Alan Modra amodra@bigpond.net.au
Tue Jun 20 15:44:00 GMT 2006
On Tue, Jun 20, 2006 at 03:08:52PM +0100, Mark Shinwell wrote:
> In this case, the "after" parameter to lang_insert_orphan () corresponds
> to the .rodata section, the last in the linked list of "asection"s.
> The upshot is that place->section points at the "next" entry of the final
> section in the list, .rodata.  This "next" pointer is NULL, so "as" ends up
> NULL, and we fault when "as->prev" is computed.

> +      if (!as)
> +        {
> +          /* Put the section at the end of the list.  */

Isn't the section already at the end of the list in this case?

> +	  /* Unlink the section.  */
> +	  bfd_section_list_remove (output_bfd, snew);
> +
> +	  /* Now tack it back on in the right place.  */
> +	  bfd_section_list_append (output_bfd, snew);
> +        }
> +      else if (as != snew && as->prev != snew)

So really all you need to do is change the condition to

      if (as != snew && as != NULL && as->prev != snew)

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre



More information about the Binutils mailing list