diff options
author | John Gilmore <gnu@cygnus> | 1991-11-23 03:20:41 +0000 |
---|---|---|
committer | John Gilmore <gnu@cygnus> | 1991-11-23 03:20:41 +0000 |
commit | e6e265ce3a710b8e819d11578eed1e9113c8d5b8 (patch) | |
tree | c3443de63ab1ca4a482c353f2523789bf549b7b6 /bfd | |
parent | 28e353598cafe6e0d5390c5e0c136318c100253c (diff) | |
download | gdb-e6e265ce3a710b8e819d11578eed1e9113c8d5b8.zip gdb-e6e265ce3a710b8e819d11578eed1e9113c8d5b8.tar.gz gdb-e6e265ce3a710b8e819d11578eed1e9113c8d5b8.tar.bz2 |
Fix hp300bsd entry point problem.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 4 | ||||
-rw-r--r-- | bfd/aoutx.h | 19 |
2 files changed, 20 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 397597b..d83ddc3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,9 @@ Fri Nov 22 08:11:42 1991 John Gilmore (gnu at cygnus.com) + * aoutx.h (some_aout_object_p): Set the `executable' bit + if the entry point is contained in the text segment, even if the + text segment is at location 0. + * coff-mips.c, coffcode.h: Peter Schauer's patch to kludge in nonstandard MIPS sections (.rdata, .sdata, etc). diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 89e07cd..f9fe460 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -270,6 +270,7 @@ DEFUN(NAME(aout,some_aout_object_p),(abfd, execp, callback_to_real_object_p), bfd_target *(*callback_to_real_object_p) ()) { struct container *rawptr; + bfd_target *result; rawptr = (struct container *) bfd_zalloc (abfd, sizeof (struct container)); if (rawptr == NULL) { @@ -286,8 +287,7 @@ DEFUN(NAME(aout,some_aout_object_p),(abfd, execp, callback_to_real_object_p), abfd->flags = NO_FLAGS; if (execp->a_drsize || execp->a_trsize) abfd->flags |= HAS_RELOC; - if (execp->a_entry) - abfd->flags |= EXEC_P; + /* Setting of EXEC_P has been deferred to the bottom of this function */ if (execp->a_syms) abfd->flags |= HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS; @@ -399,7 +399,20 @@ DEFUN(NAME(aout,some_aout_object_p),(abfd, execp, callback_to_real_object_p), header, should cope with them in this callback as well. */ #endif /* DOCUMENTATION */ - return (*callback_to_real_object_p)(abfd); + result = (*callback_to_real_object_p)(abfd); + + /* Now that the segment addresses have been worked out, take a better + guess at whether the file is executable. If the entry point + is within the text segment, assume it is. (This makes files + executable even if their entry point address is 0, as long as + their text starts at zero.) + + At some point we should probably break down and stat the file and + declare it executable if (one of) its 'x' bits are on... */ + if ((execp->a_entry >= obj_textsec(abfd)->vma) && + (execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->size)) + abfd->flags |= EXEC_P; + return result; } /*doc* |