displays dynamic segment even if no .dynamic section

Tristan Gingold gingold@adacore.com
Thu Jul 12 10:30:00 GMT 2007


On Jul 12, 2007, at 1:34 AM, Jim Wilson wrote:

> On Mon, 2007-06-25 at 14:42 +0200, Tristan Gingold wrote:
> I lack info and access to an Itanium VMS system.  Also, there is no
> Itanium VMS support in FSF binutils.
Right.  We have a very preliminary port here but far from being  
complete (ld need much work).

>   Anyways, this means I can only go
> by the info you have given me.
>
> I'm puzzled about what exactly the failure case is here.  If there are
> no section headers, then the existing code will already do what you
> want.
Correct.

> If there are section headers, but no .dynamic section in the
> headers (or a zero size .dynamic section), then the existing code will
> give an error.
Correct.

>   This is true even with your patch, so your patch does
> not seem to fix the problem you have described.
Here I am puzzled about your reply!
If there is no .dynamic section, an error is printed but dynamic_addr  
and dynamic_size are set from segment and .dynamic is
eventually displayed.  Am I missing something else ? (I have tested  
this patch on the odd VMS executable).

For reference, here is an excerpt of the modified code:

	case PT_DYNAMIC:
	  if (dynamic_addr)
	    error (_("more than one dynamic segment\n"));

	  /* By default, we can only assume that the .dynamic
	     section is the first section in the DYNAMIC segment.  */
	  dynamic_addr = segment->p_offset;
	  dynamic_size = segment->p_filesz;

	  /* Try to locate the .dynamic section. If there is
	     a section header table, we can easily locate it.  */
	  if (section_headers != NULL)
	    {
	      Elf_Internal_Shdr *sec;

	      sec = find_section (".dynamic");
	      if (sec == NULL || sec->sh_size == 0)
		{
		  error (_("no .dynamic section in the dynamic segment\n"));
		  break;
		}

	      if (sec->sh_type == SHT_NOBITS)
		break;


> Looking at the code,
> the only case where the patch seems to do anything different is if  
> there
> are section headers, there is a .dynamic section in the headers,  
> but the
> dynamic section has SHT_NOBITS.  In this case, dynamic_addr is not set
> without your patch, and is set with your patch.  However, it isn't  
> clear
> to me why you want to do this.  Why use the section if it is  
> empty?  I'm
> also not sure how a section can have non-zero size and SHT_NOBITS set,
> but I'm not a linker expert.
In fact error() doesn't exit.

Tristan.





More information about the Binutils mailing list