This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[vms/committed] Only consider GSD/PSC sections for symbols


Hi,

like many formats, vms symbols refer to section by an index, hence the need to have an array of section.
However, only real sections must be added to this array.  Previously, all sections were added which
was wrong for executable (as pseudo sections were created for isects) but was not bogus for object
files (because no extra sections were created before reading the GSD).

Tristan.

bfd/
2010-05-24  Tristan Gingold  <gingold@adacore.com>

	* vms-alpha.c (struct vms_private_data_struct): Add section_max
	field.
	(_bfd_vms_slurp_egsd): Put PSC into the sections array.
	(vms_new_section_hook): Do not put section in the sections
	array.

RCS file: /cvs/src/src/bfd/vms-alpha.c,v
retrieving revision 1.13
diff -c -r1.13 vms-alpha.c
*** bfd/vms-alpha.c	24 May 2010 10:24:36 -0000	1.13
--- bfd/vms-alpha.c	24 May 2010 10:25:16 -0000
***************
*** 271,278 ****
  
    struct hdr_struct hdr_data;		/* data from HDR/EMH record  */
    struct eom_struct eom_data;		/* data from EOM/EEOM record  */
!   unsigned int section_count;		/* # of sections in following array  */
!   asection **sections;			/* array of GSD/EGSD sections  */
  
    /* Array of raw symbols.  */
    struct vms_symbol_entry **syms;
--- 271,281 ----
  
    struct hdr_struct hdr_data;		/* data from HDR/EMH record  */
    struct eom_struct eom_data;		/* data from EOM/EEOM record  */
! 
!   /* Array of GSD sections to get the correspond BFD one.  */
!   unsigned int section_max; 		/* Size of the sections array.  */
!   unsigned int section_count;		/* Number of GSD sections.  */
!   asection **sections;
  
    /* Array of raw symbols.  */
    struct vms_symbol_entry **syms;
***************
*** 1143,1148 ****
--- 1146,1168 ----
  	    section->vma = (bfd_vma)base_addr;
  	    base_addr += section->size;
  	    section->filepos = (unsigned int)-1;
+ 
+             /* Append it to the section array.  */
+             if (PRIV (section_count) >= PRIV (section_max))
+               {
+                 if (PRIV (section_max) == 0)
+                   PRIV (section_max) = 16;
+                 else
+                   PRIV (section_max) *= 2;
+                 PRIV (sections) = bfd_realloc_or_free
+                   (PRIV (sections), PRIV (section_max) * sizeof (asection *));
+                 if (PRIV (sections) == NULL)
+                   return FALSE;
+               }
+ 
+             PRIV (sections)[PRIV (section_count)] = section;
+             PRIV (section_count)++;
+ 
  #if VMS_DEBUG
  	    vms_debug (4, "EGSD P-section %d (%s, flags %04x) ",
  		       section->index, name, old_flags);
***************
*** 8827,8854 ****
  {
    bfd_size_type amt;
  
!   /* Count hasn't been incremented yet.  */
!   unsigned int section_count = abfd->section_count + 1;
! 
!   vms_debug2 ((1, "vms_new_section_hook (%p, [%d]%s), count %d\n",
!                abfd, section->index, section->name, section_count));
  
    bfd_set_section_alignment (abfd, section, 0);
  
-   if (section_count > PRIV (section_count))
-     {
-       if (PRIV (sections) == NULL)
- 	return FALSE;
-       PRIV (section_count) = section_count;
-     }
- 
-   vms_debug2 ((6, "section_count: %d\n", PRIV (section_count)));
- 
-   PRIV (sections)[section->index] = section;
- 
    vms_debug2 ((7, "%d: %s\n", section->index, section->name));
  
    amt = sizeof (struct vms_section_data_struct);
--- 8847,8857 ----
  {
    bfd_size_type amt;
  
!   vms_debug2 ((1, "vms_new_section_hook (%p, [%d]%s)\n",
!                abfd, section->index, section->name));
  
    bfd_set_section_alignment (abfd, section, 0);
  
    vms_debug2 ((7, "%d: %s\n", section->index, section->name));
  
    amt = sizeof (struct vms_section_data_struct);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]