public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM]  archer-jankratochvil-fedora12: Fix crash with archer-tromey-python vs. FSF GDB HEAD.
@ 2009-08-09 22:30 jkratoch
  0 siblings, 0 replies; only message in thread
From: jkratoch @ 2009-08-09 22:30 UTC (permalink / raw)
  To: archer-commits

The branch, archer-jankratochvil-fedora12 has been updated
  discards  133b15771e8f18fb17b19cafaf7c4b03c6c8039b (commit)
       via  d9c6e0c7789438aeabf053556f39a838536400e4 (commit)
       via  3763b2b337feba449b35986bc2e209c393062e16 (commit)
       via  c9972c2280e1e3688968ec3348513861ae56790d (commit)
       via  f3117a1b9f992d2da568d93393677d61fb9118aa (commit)
      from  133b15771e8f18fb17b19cafaf7c4b03c6c8039b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit d9c6e0c7789438aeabf053556f39a838536400e4
Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
Date:   Sat Aug 1 14:52:19 2009 +0200

    Fix crash with archer-tromey-python vs. FSF GDB HEAD.
    
    Crashing at least on gdb.server/server-run.exp .
    
    +  /* FIXME: Workaround archer-tromey-python crash in
    +     add_inferior_object->get_current_arch on FSF GDB update:
    +     is_thread_state would assertion check here as
    +     remote_start_remote->add_inferior_silent->observer_notify_new_inferior is
    +     before remote_start_remote->add_thread_silent.  */
    
    	* frame.c (has_stack_frames): Safely return 0 if INFERIOR_PTID
    	currently has no associated thread.

commit 3763b2b337feba449b35986bc2e209c393062e16
Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
Date:   Sun Aug 9 23:43:28 2009 +0200

    [patch] python/varobj: Fix accessing !IS_VALID EXPs
    
    Hi,
    
    the proposed gdb_assert in varobj_ensure_python_env is IMO correct.
    
    But it breaks gdb.mi/mi-var-invalidate.exp .  Fixed in varobj_get_display_hint.
    
    I am not completely sure where/if other similiar fixups are required.
    
    The trick now is that the whole VAROBJ subtree gets invalid value/type/exp if
    var->root->is_valid gets set to 0.  Despite those pointers stay != NULL.
    I am still not completely sure it is stale-pointers-safe but it may be.
    
    On FSF GDB it even passes valgrind now but it broke on my
    archer-jankratochvil-vla branch which clears the pointers as a sanity check.
    
    It regression passes on {x86_64,x86_64-m32,i686}-fedora11-linux-gnu.
    (The test was a bit bogus due to some current regressions.)
    
    Thanks,
    Jan
    
    gdb/
    2009-08-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* varobj.c (varobj_ensure_python_env): Assert VAR IS_VALID.
    	(varobj_get_display_hint): Return NULL for non-IS_VALID VARs.

commit c9972c2280e1e3688968ec3348513861ae56790d
Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
Date:   Sun Aug 9 21:38:01 2009 +0200

    [patch 3/4] Stop using bfd_usrdata in libbfd
    
    Hi,
    
    this is the primary patch to stop using bfd_usrdata in libbfd.
    
    Thanks,
    Jan
    
    bfd/
    2009-08-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	Stop using bfd_usrdata in libbfd.
    	* coff-stgo32.c (bfd_coff_go32stub): Remove.
    	(stub_bytes, comment): Replace STUBSIZE by GO32_STUBSIZE.
    	(adjust_filehdr_in_post): Declare the abfd parameter as unused.
    	Replace STUBSIZE by GO32_STUBSIZE.  Save now the stub in
    	filehdr_dst->u.go32.stub.  New comment with the reason.
    	(adjust_filehdr_out_pre): Replace STUBSIZE by GO32_STUBSIZE.
    	Substitute the removed macro bfd_coff_go32stub.
    	(adjust_filehdr_out_post, adjust_scnhdr_in_post, adjust_scnhdr_out_pre)
    	(adjust_scnhdr_out_post, adjust_aux_in_post, adjust_aux_out_pre)
    	(adjust_aux_out_post): Replace STUBSIZE by GO32_STUBSIZE.
    	(create_go32_stub, go32_stubbed_coff_bfd_copy_private_bfd_data):
    	Replace STUBSIZE by GO32_STUBSIZE.  Substitute the removed macro
    	bfd_coff_go32stub.
    	* coffcode.h (coff_mkobject_hook): Initialize coff->go32stub.
    	* libcoff-in.h (coff_data_type): New field go32stub.
    	* libcoff.h: Regenerated.
    
    include/coff/
    2009-08-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	Stop using bfd_usrdata in libbfd.
    	* go32exe.h (struct external_filehdr_go32_exe <stub>, FILHSZ): Replace
    	STUBSIZE by GO32_STUBSIZE.
    	(STUBSIZE): Move the definition ...
    	* internal.h (GO32_STUBSIZE): ... here and rename it.
    	(struct internal_filehdr <go32stub>, F_GO32STUB): New.

commit f3117a1b9f992d2da568d93393677d61fb9118aa
Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
Date:   Sun Aug 9 21:35:19 2009 +0200

    [patch 2/4] Fix go32 stub preservation by objcopy
    
    Hi,
    
    as coff-stgo32.c uses bfd_usrdata to preserve the exe stub (the first 2048
    bytes starting with MZ) when I changed it I wanted to test no regressions.
    
    Unfortunately I found the exec stub preservation already does not work.
    	( configure --target=i386-unknown-go32 )
    	: >1.s; ./gas/as-new -o 1.o 1.s; ./ld/ld-new -o 1 1.o
    	hexedit 1	# modify its exe stub
    	./binutils/objcopy 1 2
    	hexedit 2	# check its exe stub is modified
    
    This patch fixes the stub preservation while still using deprecated
    bfd_usrdata.  The memory leak in adjust_filehdr_in_post is only temporary to
    avoid freed memory referencing.  The leak gets removed by the bfd_usrdata
    usage removing patch.
    
    go32_stubbed_coff_bfd_copy_private_bfd_d could not work as it expected
    adjust_filehdr_out_pre was already called before.  During my tests it happened
    in this order:
        output_target=0x8ab6f8 "coff-go32-exe") at objcopy.c:2230
    (gdb) c
    Continuing.
    
    Breakpoint 2, adjust_filehdr_out_pre (abfd=0xc78ce0, in=0x7fffffffcdb0, out=0xc7a4b0) at coff-stgo32.c:156
    156       struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
    (gdb) bt
        output_target=0x8ab6f8 "coff-go32-exe") at objcopy.c:2233
    (gdb)
    
    Thanks,
    Jan
    
    bfd/
    2009-08-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	Fix go32 stub preservation by objcopy.
    	* coff-stgo32.c (adjust_filehdr_in_post): Use bfd_malloc.
    	(go32_stubbed_coff_bfd_copy_private_bfd_data): Optionally allocate OBFD
    	go32stub.
    
    ld/testsuite/
    2009-08-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	Test go32 stub preservation by objcopy.
    	* ld-i386/i386.exp (go32 stub, go32 stub patch the source)
    	(go32 stub objcopy, go32 stub comparison after objcopy): New.

-----------------------------------------------------------------------

Summary of changes:
 bfd/coff-stgo32.c       |   95 ++++++++++++++++++++++-------------------------
 bfd/coffcode.h          |    5 ++
 bfd/libcoff-in.h        |    3 +
 bfd/libcoff.h           |    3 +
 gdb/frame.c             |    8 ++++
 gdb/varobj.c            |    9 ++++-
 include/coff/go32exe.h  |    6 +--
 include/coff/internal.h |   13 ++++++-
 8 files changed, 85 insertions(+), 57 deletions(-)

First 500 lines of diff:
diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c
index 9ff2dad..8bf7667 100644
--- a/bfd/coff-stgo32.c
+++ b/bfd/coff-stgo32.c
@@ -102,9 +102,6 @@ static bfd_boolean
 
 #include "coff-i386.c"
 
-/* I hold in the usrdata the stub.  */
-#define bfd_coff_go32stub bfd_usrdata
-
 /* This macro is used, because I cannot assume the endianess of the
    host system.  */
 #define _H(index) (H_GET_16 (abfd, (header+index*2)))
@@ -112,7 +109,7 @@ static bfd_boolean
 /* These bytes are a 2048-byte DOS executable, which loads the COFF
    image into memory and then runs it. It is called 'stub'.  */
 
-static const unsigned char stub_bytes[STUBSIZE] =
+static const unsigned char stub_bytes[GO32_STUBSIZE] =
 {
 #include "go32stub.h"
 };
@@ -120,7 +117,7 @@ static const unsigned char stub_bytes[STUBSIZE] =
 /*
    I have not commented each swap function below, because the
    technique is in any function the same. For the ...in function,
-   all the pointers are adjusted by adding STUBSIZE and for the
+   all the pointers are adjusted by adding GO32_STUBSIZE and for the
    ...out function, it is subtracted first and after calling the
    standard swap function it is reset to the old value.  */
 
@@ -132,26 +129,20 @@ static const unsigned char stub_bytes[STUBSIZE] =
 
 static void
 adjust_filehdr_in_post  (abfd, src, dst)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR src;
      PTR dst;
 {
   FILHDR *filehdr_src = (FILHDR *) src;
   struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst;
 
-  ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
-
-  /* Save now the stub to be used later.  FIXME: Memory leak as the caller
-     coff_object_p does bfd_release afterwards.  */
-  bfd_coff_go32stub (abfd) = (PTR) bfd_malloc ((bfd_size_type) STUBSIZE);
+  ADJUST_VAL (filehdr_dst->f_symptr, GO32_STUBSIZE);
 
-  /* Since this function returns no status, I do not set here
-     any bfd_error_...
-     That means, before the use of bfd_coff_go32stub (), this value
-     should be checked if it is != NULL.  */
-  if (bfd_coff_go32stub (abfd) == NULL)
-    return;
-  memcpy (bfd_coff_go32stub (abfd), filehdr_src->stub, STUBSIZE);
+  /* Save now the stub to be used later.  Put the stub data to FILEHDR_DST
+     first as coff_data (abfd) still does not exist.  It may not even be ever
+     created as we are just checking the file format of ABFD.  */
+  memcpy (filehdr_dst->go32stub, filehdr_src->stub, GO32_STUBSIZE);
+  filehdr_dst->f_flags |= F_GO32STUB;
 }
 
 static void
@@ -167,13 +158,13 @@ adjust_filehdr_out_pre  (abfd, in, out)
   create_go32_stub (abfd);
 
   /* Copy the stub to the file header.  */
-  if (bfd_coff_go32stub (abfd) != NULL)
-    memcpy (filehdr_out->stub, bfd_coff_go32stub (abfd), STUBSIZE);
+  if (coff_data (abfd)->go32stub != NULL)
+    memcpy (filehdr_out->stub, coff_data (abfd)->go32stub, GO32_STUBSIZE);
   else
     /* Use the default.  */
-    memcpy (filehdr_out->stub, stub_bytes, STUBSIZE);
+    memcpy (filehdr_out->stub, stub_bytes, GO32_STUBSIZE);
 
-  ADJUST_VAL (filehdr_in->f_symptr, -STUBSIZE);
+  ADJUST_VAL (filehdr_in->f_symptr, -GO32_STUBSIZE);
 }
 
 static void
@@ -184,7 +175,7 @@ adjust_filehdr_out_post  (abfd, in, out)
 {
   struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
   /* Undo the above change.  */
-  ADJUST_VAL (filehdr_in->f_symptr, STUBSIZE);
+  ADJUST_VAL (filehdr_in->f_symptr, GO32_STUBSIZE);
 }
 
 static void
@@ -195,9 +186,9 @@ adjust_scnhdr_in_post  (abfd, ext, in)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
-  ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
 }
 
 static void
@@ -208,9 +199,9 @@ adjust_scnhdr_out_pre  (abfd, in, out)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
-  ADJUST_VAL (scnhdr_int->s_scnptr, -STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, -STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, -STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_scnptr, -GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_relptr, -GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_lnnoptr, -GO32_STUBSIZE);
 }
 
 static void
@@ -221,9 +212,9 @@ adjust_scnhdr_out_post (abfd, in, out)
 {
   struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
 
-  ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE);
-  ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
+  ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
 }
 
 static void
@@ -240,7 +231,7 @@ adjust_aux_in_post  (abfd, ext1, type, class, indx, numaux, in1)
 
   if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
     {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE);
+      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
     }
 }
 
@@ -258,7 +249,7 @@ adjust_aux_out_pre  (abfd, inp, type, class, indx, numaux, extp)
 
   if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
     {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -STUBSIZE);
+      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -GO32_STUBSIZE);
     }
 }
 
@@ -276,7 +267,7 @@ adjust_aux_out_post (abfd, inp, type, class, indx, numaux, extp)
 
   if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
     {
-      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE);
+      ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
     }
 }
 
@@ -297,7 +288,7 @@ create_go32_stub (abfd)
      bfd *abfd;
 {
   /* Do it only once.  */
-  if (bfd_coff_go32stub (abfd) == NULL)
+  if (coff_data (abfd)->go32stub == NULL)
     {
       char *stub;
       struct stat st;
@@ -363,32 +354,32 @@ create_go32_stub (abfd)
 	  goto stub_end;
 	}
       /* Now we found a correct stub (hopefully).  */
-      bfd_coff_go32stub (abfd)
+      coff_data (abfd)->go32stub
 	= (PTR) bfd_alloc (abfd, (bfd_size_type) coff_start);
-      if (bfd_coff_go32stub (abfd) == NULL)
+      if (coff_data (abfd)->go32stub == NULL)
 	{
 	  close (f);
 	  return;
 	}
       lseek (f, 0L, SEEK_SET);
-      if ((unsigned long) read (f, bfd_coff_go32stub (abfd), coff_start)
+      if ((unsigned long) read (f, coff_data (abfd)->go32stub, coff_start)
 	  != coff_start)
 	{
-	  bfd_release (abfd, bfd_coff_go32stub (abfd));
-	  bfd_coff_go32stub (abfd) = NULL;
+	  bfd_release (abfd, coff_data (abfd)->go32stub);
+	  coff_data (abfd)->go32stub = NULL;
 	}
       close (f);
     }
 stub_end:
   /* There was something wrong above, so use now the standard builtin
      stub.  */
-  if (bfd_coff_go32stub (abfd) == NULL)
+  if (coff_data (abfd)->go32stub == NULL)
     {
-      bfd_coff_go32stub (abfd)
-	= (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE);
-      if (bfd_coff_go32stub (abfd) == NULL)
+      coff_data (abfd)->go32stub
+	= (PTR) bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE);
+      if (coff_data (abfd)->go32stub == NULL)
 	return;
-      memcpy (bfd_coff_go32stub (abfd), stub_bytes, STUBSIZE);
+      memcpy (coff_data (abfd)->go32stub, stub_bytes, GO32_STUBSIZE);
     }
 }
 
@@ -405,17 +396,19 @@ go32_stubbed_coff_bfd_copy_private_bfd_data  (ibfd, obfd)
     return TRUE;
 
   /* Check if we have a source stub.  */
-  if (bfd_coff_go32stub (ibfd) == NULL)
+  if (coff_data (ibfd)->go32stub == NULL)
     return TRUE;
 
   /* As adjust_filehdr_out_pre may get called only after this function,
      optionally allocate the output stub.  */
-  if (bfd_coff_go32stub (obfd) == NULL)
-    bfd_coff_go32stub (obfd) = (PTR) bfd_alloc (obfd, (bfd_size_type) STUBSIZE);
+  if (coff_data (obfd)->go32stub == NULL)
+    coff_data (obfd)->go32stub = (PTR) bfd_alloc (obfd,
+						(bfd_size_type) GO32_STUBSIZE);
 
   /* Now copy the stub.  */
-  if (bfd_coff_go32stub (obfd) != NULL)
-    memcpy (bfd_coff_go32stub (obfd), bfd_coff_go32stub (ibfd), STUBSIZE);
+  if (coff_data (obfd)->go32stub != NULL)
+    memcpy (coff_data (obfd)->go32stub, coff_data (ibfd)->go32stub,
+	    GO32_STUBSIZE);
 
   return TRUE;
 }
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 4b748b4..1cc860a 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -1992,6 +1992,11 @@ coff_mkobject_hook (bfd * abfd,
     abfd->flags |= HAS_DEBUG;
 #endif
 
+  if ((internal_f->f_flags & F_GO32STUB) != 0)
+    coff->go32stub = (char *) bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE);
+  if (coff->go32stub != NULL)
+    memcpy (coff->go32stub, internal_f->go32stub, GO32_STUBSIZE);
+
   return coff;
 }
 #endif
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index 16b6c7b..f3108ee 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -106,6 +106,9 @@ typedef struct coff_tdata
      used by ARM code.  */
   flagword flags;
 
+  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
+     is kept in internal_filehdr.go32stub beforehand.  */
+  char *go32stub;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index a4ab405..4bb43f3 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -110,6 +110,9 @@ typedef struct coff_tdata
      used by ARM code.  */
   flagword flags;
 
+  /* coff-stgo32 EXE stub header after BFD tdata has been allocated.  Its data
+     is kept in internal_filehdr.go32stub beforehand.  */
+  char *go32stub;
 } coff_data_type;
 
 /* Tdata for pe image files.  */
diff --git a/gdb/frame.c b/gdb/frame.c
index afa6e2a..1eb7f9d 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1109,6 +1109,14 @@ has_stack_frames (void)
   if (ptid_equal (inferior_ptid, null_ptid))
     return 0;
 
+  /* FIXME: Workaround archer-tromey-python crash in
+     add_inferior_object->get_current_arch on FSF GDB update:
+     is_thread_state would assertion check here as
+     remote_start_remote->add_inferior_silent->observer_notify_new_inferior is
+     before remote_start_remote->add_thread_silent.  */
+  if (find_thread_ptid (inferior_ptid) == NULL)
+    return 0;
+
   /* Don't try to read from a dead thread.  */
   if (is_exited (inferior_ptid))
     return 0;
diff --git a/gdb/varobj.c b/gdb/varobj.c
index b648099..34333fb 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -485,6 +485,8 @@ is_root_p (struct varobj *var)
 struct cleanup *
 varobj_ensure_python_env (struct varobj *var)
 {
+  gdb_assert (var->root->is_valid);
+
   return ensure_python_env (var->root->exp->gdbarch,
 			    var->root->exp->language_defn);
 }
@@ -820,7 +822,12 @@ varobj_get_display_hint (struct varobj *var)
   char *result = NULL;
 
 #if HAVE_PYTHON
-  struct cleanup *back_to = varobj_ensure_python_env (var);
+  struct cleanup *back_to;
+  
+  if (!var->root->is_valid)
+    return NULL;
+
+  back_to = varobj_ensure_python_env (var);
 
   if (var->pretty_printer)
     result = gdbpy_get_display_hint (var->pretty_printer);
diff --git a/include/coff/go32exe.h b/include/coff/go32exe.h
index c85da0c..2248ff2 100644
--- a/include/coff/go32exe.h
+++ b/include/coff/go32exe.h
@@ -16,11 +16,9 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
-#define STUBSIZE 2048
-
 struct external_filehdr_go32_exe
   {
-    char stub[STUBSIZE];/* the stub to load the image	*/
+    char stub[GO32_STUBSIZE]; /* the stub to load the image */
 			/* the standard COFF header     */
     char f_magic[2];	/* magic number			*/
     char f_nscns[2];	/* number of sections		*/
@@ -34,4 +32,4 @@ struct external_filehdr_go32_exe
 #undef FILHDR
 #define	FILHDR	struct external_filehdr_go32_exe
 #undef FILHSZ
-#define	FILHSZ	STUBSIZE+20
+#define	FILHSZ	GO32_STUBSIZE+20
diff --git a/include/coff/internal.h b/include/coff/internal.h
index c5d6cd1..36d03eb 100644
--- a/include/coff/internal.h
+++ b/include/coff/internal.h
@@ -58,10 +58,19 @@ struct internal_extra_pe_filehdr
   bfd_vma  nt_signature;   	/* required NT signature, 0x4550 */ 
 };
 
+#define GO32_STUBSIZE 2048
+
 struct internal_filehdr
 {
   struct internal_extra_pe_filehdr pe;
 
+  /* coff-stgo32 EXE stub header before BFD tdata has been allocated.
+     Its data is kept in INTERNAL_FILEHDR.GO32STUB afterwards.
+     
+     F_GO32STUB is set iff go32stub contains a valid data.  Artifical headers
+     created in BFD have no pre-set go32stub.  */
+  char go32stub[GO32_STUBSIZE];
+
   /* Standard coff internal info.  */
   unsigned short f_magic;	/* magic number			*/
   unsigned short f_nscns;	/* number of sections		*/
@@ -84,7 +93,8 @@ struct internal_filehdr
  	F_AR32W		file is 32-bit big-endian
  	F_DYNLOAD	rs/6000 aix: dynamically loadable w/imports & exports
  	F_SHROBJ	rs/6000 aix: file is a shared object
-        F_DLL           PE format DLL.  */
+	F_DLL           PE format DLL
+	F_GO32STUB      Field go32stub contains valid data.  */
 
 #define	F_RELFLG	(0x0001)
 #define	F_EXEC		(0x0002)
@@ -96,6 +106,7 @@ struct internal_filehdr
 #define	F_DYNLOAD	(0x1000)
 #define	F_SHROBJ	(0x2000)
 #define F_DLL           (0x2000)
+#define F_GO32STUB      (0x4000)
 
 /* Extra structure which is used in the optional header.  */
 typedef struct _IMAGE_DATA_DIRECTORY 


hooks/post-receive
--
Repository for Project Archer.


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-08-09 22:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-09 22:30 [SCM] archer-jankratochvil-fedora12: Fix crash with archer-tromey-python vs. FSF GDB HEAD jkratoch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).