Need some help with a patch for new command --warn-execstack for ld

Nick Clifton nickc@redhat.com
Wed May 26 14:01:00 GMT 2010


Hi Magnus,

> 1. To get the object file .o (Y in the patch).
> 2. To get the symbol or function that need the execstack (X in the patch).

> +      for (inputobj = info->input_bfds;
> +	   inputobj;
> +	   inputobj = inputobj->link_next)
> +	{
> +	  asection *s;
> +
> +	  if (inputobj->flags&  (DYNAMIC | EXEC_P | BFD_LINKER_CREATED))
> +	    continue;
> +	  s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
> +	  if (s)
> +		{
> +	      if (s->flags&  SEC_CODE)
> +	        einfo ("ld: Y: warning: function X requiring executable stack\n");
> +		}
> +	  else if (bed->default_execstack)
> +	    einfo ("ld: Y: warning: function X requiring executable stack but object Y miss the .note.GNU-stack\n");

You should be able to use "bfd_get_filename (inputobj)" to get the name 
of the object file concerned.  (Y in your code above).  You can also 
abbreviate this by using the %B operator in your invocation of einfo().

Getting hold of X however is not really possible.  There is no 
information in the object file so specify which function(s) needed an 
executable stack.  That information is only known at compile time and it 
is lost by the time that the object file is created.  My recommendation 
would be to just drop references to explicit function names from the 
warning messages.

Cheers
   Nick



More information about the Binutils mailing list