Cleanups of interface, including close_and_cleanup and write_contents
transfer vector changes. See ChangeLog.
This commit is contained in:
parent
78aa64b14c
commit
2b1d8a50a0
|
@ -165,13 +165,12 @@ bfd_target icoff_little_vec =
|
|||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, coff_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
|
||||
{bfd_false, coff_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
JUMP_TABLE(coff)
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
bfd_target icoff_big_vec =
|
||||
{
|
||||
"coff-Intel-big", /* name */
|
||||
|
@ -190,9 +189,11 @@ bfd_target icoff_big_vec =
|
|||
_do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
|
||||
_do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
|
||||
|
||||
{_bfd_dummy_target, coff_object_p, bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, coff_mkobject, _bfd_generic_mkarchive, bfd_false},
|
||||
|
||||
{_bfd_dummy_target, coff_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, coff_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, coff_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
JUMP_TABLE(coff)
|
||||
};
|
||||
|
||||
|
|
|
@ -112,10 +112,8 @@ bfd_target m88k_bcs_vec =
|
|||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
|
||||
bfd_false},
|
||||
{bfd_false, coff_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
|
||||
JUMP_TABLE(coff)
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
JUMP_TABLE(coff)
|
||||
};
|
||||
|
|
|
@ -264,15 +264,6 @@ ecoff_set_section_linenos (abfd, section, location, offset, count)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* ARGSUSED */
|
||||
boolean
|
||||
ecoff_close_and_cleanup (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static boolean
|
||||
ecoff_slurp_symbol_table(abfd)
|
||||
|
@ -373,59 +364,69 @@ return (alent *)NULL;
|
|||
#define ecoff_core_file_failing_command _bfd_dummy_core_file_failing_command
|
||||
#define ecoff_core_file_failing_signal _bfd_dummy_core_file_failing_signal
|
||||
#define ecoff_core_file_matches_executable_p _bfd_dummy_core_file_matches_executable_p
|
||||
|
||||
/* Archives not supported yet. FIXME. */
|
||||
#define ecoff_slurp_armap bfd_false
|
||||
#define ecoff_slurp_extended_name_table bfd_false
|
||||
#define ecoff_truncate_arname bfd_void
|
||||
#define ecoff_truncate_arname bfd_dont_truncate_arname
|
||||
#define ecoff_write_armap bfd_false
|
||||
#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file
|
||||
#define ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt
|
||||
|
||||
/* Unimplemented routines. FIXME. */
|
||||
#define ecoff_print_symbol bfd_void
|
||||
#define ecoff_set_arch_mach bfd_false
|
||||
#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file
|
||||
#define ecoff_find_nearest_line bfd_false
|
||||
#define ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt
|
||||
#define ecoff_sizeof_headers bfd_0
|
||||
|
||||
/* We use the generic BFD version of these. */
|
||||
#define ecoff_close_and_cleanup bfd_generic_close_and_cleanup
|
||||
|
||||
bfd_target ecoff_little_vec =
|
||||
{"ecoff-littlemips", /* name */
|
||||
bfd_target_coff_flavour_enum,
|
||||
false, /* data byte order is little */
|
||||
false, /* header byte order is little */
|
||||
bfd_target_coff_flavour_enum,
|
||||
false, /* data byte order is little */
|
||||
false, /* header byte order is little */
|
||||
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT),
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT),
|
||||
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
|
||||
'/', /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
_do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
|
||||
_do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* hdrs */
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect flags */
|
||||
'/', /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
_do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* data */
|
||||
_do_getllong, _do_putllong, _do_getlshort, _do_putlshort, /* hdrs */
|
||||
|
||||
{_bfd_dummy_target, ecoff_object_p, /* bfd_check_format */
|
||||
{_bfd_dummy_target, ecoff_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, ecoff_mkobject, bfd_false, /* bfd_set_format */
|
||||
{bfd_false, ecoff_mkobject, bfd_false, /* bfd_set_format */
|
||||
bfd_false},
|
||||
JUMP_TABLE (ecoff)
|
||||
{bfd_false, ecoff_write_object_contents, bfd_false, bfd_false},
|
||||
JUMP_TABLE (ecoff)
|
||||
};
|
||||
|
||||
bfd_target ecoff_big_vec =
|
||||
{"ecoff-bigmips", /* name */
|
||||
bfd_target_coff_flavour_enum,
|
||||
true, /* data byte order is big */
|
||||
true, /* header byte order is big */
|
||||
bfd_target_coff_flavour_enum,
|
||||
true, /* data byte order is big */
|
||||
true, /* header byte order is big */
|
||||
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT),
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT),
|
||||
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
|
||||
' ', /* ar_pad_char */
|
||||
16, /* ar_max_namelen */
|
||||
_do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* data */
|
||||
_do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect flags */
|
||||
' ', /* ar_pad_char */
|
||||
16, /* ar_max_namelen */
|
||||
_do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* data */
|
||||
_do_getblong, _do_putblong, _do_getbshort, _do_putbshort, /* hdrs */
|
||||
|
||||
{_bfd_dummy_target, ecoff_object_p, /* bfd_check_format */
|
||||
{_bfd_dummy_target, ecoff_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, ecoff_mkobject, bfd_false, /* bfd_set_format */
|
||||
{bfd_false, ecoff_mkobject, bfd_false, /* bfd_set_format */
|
||||
bfd_false},
|
||||
JUMP_TABLE(ecoff)
|
||||
{bfd_false, ecoff_write_object_contents, /* bfd_write_contents */
|
||||
bfd_false, bfd_false},
|
||||
JUMP_TABLE(ecoff)
|
||||
};
|
||||
|
|
42
bfd/ieee.c
42
bfd/ieee.c
|
@ -999,12 +999,14 @@ DEFUN(ieee_object_p,(abfd),
|
|||
|
||||
|
||||
void
|
||||
DEFUN(ieee_print_symbol,(ignore_abfd, file, symbol, how),
|
||||
DEFUN(ieee_print_symbol,(ignore_abfd, afile, symbol, how),
|
||||
bfd *ignore_abfd AND
|
||||
FILE *file AND
|
||||
PTR afile AND
|
||||
asymbol *symbol AND
|
||||
bfd_print_symbol_enum_type how)
|
||||
{
|
||||
FILE *file = (FILE *)afile;
|
||||
|
||||
switch (how) {
|
||||
case bfd_print_symbol_name_enum:
|
||||
fprintf(file,"%s", symbol->name);
|
||||
|
@ -1760,33 +1762,6 @@ DEFUN(ieee_make_empty_symbol,(abfd),
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
boolean
|
||||
ieee_close_and_cleanup (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
if (bfd_read_p (abfd) == false)
|
||||
switch (abfd->format) {
|
||||
case bfd_archive:
|
||||
if (!_bfd_write_archive_contents (abfd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case bfd_object:
|
||||
if (!ieee_write_object_contents (abfd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
bfd_error = invalid_operation;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bfd *
|
||||
ieee_openr_next_archived_file(arch, prev)
|
||||
bfd *arch;
|
||||
|
@ -1869,6 +1844,7 @@ DEFUN(ieee_sizeof_headers,(abfd, x),
|
|||
#define ieee_truncate_arname (void (*)())bfd_nullvoidptr
|
||||
#define ieee_write_armap (PROTO( boolean, (*),(bfd *, unsigned int, struct orl *, int, int))) bfd_nullvoidptr
|
||||
#define ieee_get_lineno (struct lineno_cache_entry *(*)())bfd_nullvoidptr
|
||||
#define ieee_close_and_cleanup bfd_generic_close_and_cleanup
|
||||
|
||||
|
||||
/*SUPPRESS 460 */
|
||||
|
@ -1900,5 +1876,11 @@ bfd_target ieee_vec =
|
|||
_bfd_generic_mkarchive,
|
||||
bfd_false
|
||||
},
|
||||
JUMP_TABLE(ieee)
|
||||
{
|
||||
bfd_false,
|
||||
ieee_write_object_contents,
|
||||
_bfd_write_archive_contents,
|
||||
bfd_false,
|
||||
},
|
||||
JUMP_TABLE(ieee)
|
||||
};
|
||||
|
|
52
bfd/oasys.c
52
bfd/oasys.c
|
@ -396,12 +396,14 @@ DEFUN(oasys_object_p,(abfd),
|
|||
|
||||
|
||||
static void
|
||||
DEFUN(oasys_print_symbol,(ignore_abfd, file, symbol, how),
|
||||
DEFUN(oasys_print_symbol,(ignore_abfd, afile, symbol, how),
|
||||
bfd *ignore_abfd AND
|
||||
FILE *file AND
|
||||
PTR afile AND
|
||||
asymbol *symbol AND
|
||||
bfd_print_symbol_enum_type how)
|
||||
{
|
||||
FILE *file = (FILE *)afile;
|
||||
|
||||
switch (how) {
|
||||
case bfd_print_symbol_name_enum:
|
||||
case bfd_print_symbol_type_enum:
|
||||
|
@ -650,9 +652,9 @@ static boolean
|
|||
DEFUN(oasys_get_section_contents,(abfd, section, location, offset, count),
|
||||
bfd *abfd AND
|
||||
sec_ptr section AND
|
||||
void *location AND
|
||||
PTR location AND
|
||||
file_ptr offset AND
|
||||
unsigned int count)
|
||||
int count)
|
||||
{
|
||||
oasys_per_section_type *p = (oasys_per_section_type *) section->used_by_bfd;
|
||||
oasys_slurp_section_data(abfd);
|
||||
|
@ -1042,7 +1044,7 @@ static boolean
|
|||
DEFUN(oasys_set_section_contents,(abfd, section, location, offset, count),
|
||||
bfd *abfd AND
|
||||
sec_ptr section AND
|
||||
unsigned char *location AND
|
||||
PTR location AND
|
||||
file_ptr offset AND
|
||||
int count)
|
||||
{
|
||||
|
@ -1085,34 +1087,6 @@ DEFUN(oasys_make_empty_symbol,(abfd),
|
|||
/* User should have checked the file flags; perhaps we should return
|
||||
BFD_NO_MORE_SYMBOLS if there are none? */
|
||||
|
||||
|
||||
|
||||
boolean
|
||||
oasys_close_and_cleanup (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
if (bfd_read_p (abfd) == false)
|
||||
switch (abfd->format) {
|
||||
case bfd_archive:
|
||||
if (!_bfd_write_archive_contents (abfd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case bfd_object:
|
||||
if (!oasys_write_object_contents (abfd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
bfd_error = invalid_operation;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bfd *
|
||||
oasys_openr_next_archived_file(arch, prev)
|
||||
bfd *arch;
|
||||
|
@ -1199,7 +1173,7 @@ return 0;
|
|||
#define oasys_truncate_arname (void (*)())bfd_nullvoidptr
|
||||
#define oasys_write_armap 0 /* (PROTO( boolean, (*),(bfd *, unsigned int, struct orl *, int, int))) bfd_nullvoidptr*/
|
||||
#define oasys_get_lineno (struct lineno_cache_entry *(*)())bfd_nullvoidptr
|
||||
|
||||
#define oasys_close_and_cleanup bfd_generic_close_and_cleanup
|
||||
|
||||
|
||||
|
||||
|
@ -1226,11 +1200,17 @@ bfd_target oasys_vec =
|
|||
oasys_archive_p,
|
||||
_bfd_dummy_target,
|
||||
},
|
||||
{
|
||||
{ /* bfd_set_format */
|
||||
bfd_false,
|
||||
oasys_mkobject,
|
||||
_bfd_generic_mkarchive,
|
||||
bfd_false
|
||||
},
|
||||
JUMP_TABLE(oasys)
|
||||
{ /* bfd_write_contents */
|
||||
bfd_false,
|
||||
oasys_write_object_contents,
|
||||
_bfd_write_archive_contents,
|
||||
bfd_false,
|
||||
},
|
||||
JUMP_TABLE(oasys)
|
||||
};
|
||||
|
|
10
bfd/opncls.c
10
bfd/opncls.c
|
@ -257,11 +257,16 @@ boolean
|
|||
bfd_close (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
if (!bfd_read_p(abfd))
|
||||
if (BFD_SEND_FMT (abfd, _bfd_write_contents, (abfd)) != true)
|
||||
return false;
|
||||
|
||||
if (BFD_SEND (abfd, _close_and_cleanup, (abfd)) != true) return false;
|
||||
|
||||
bfd_cache_close(abfd);
|
||||
/* If the file was open for writing and is now executable
|
||||
make it so */
|
||||
|
||||
/* If the file was open for writing and is now executable,
|
||||
make it so */
|
||||
if (abfd->direction == write_direction
|
||||
&& abfd->flags & EXEC_P) {
|
||||
struct stat buf;
|
||||
|
@ -269,6 +274,7 @@ bfd_close (abfd)
|
|||
chmod(abfd->filename,buf.st_mode | S_IXUSR | S_IXGRP | S_IXOTH);
|
||||
}
|
||||
(void) obstack_free (&abfd->memory, (PTR)0);
|
||||
/* FIXME, shouldn't we de-allocate the bfd as well? */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
50
bfd/srec.c
50
bfd/srec.c
|
@ -29,7 +29,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
only section we create. We arbitarily call this section ".text".
|
||||
|
||||
When bfd_get_section_contents is called the file is read again, and
|
||||
this time the data is placed into a malloced area.
|
||||
this time the data is placed into a bfd_alloc'd area.
|
||||
|
||||
Any number of sections may be created for output, we just output them
|
||||
in the order provided to bfd_set_section_contents.
|
||||
|
@ -42,7 +42,11 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
|
||||
/* $Id$
|
||||
* $Log$
|
||||
* Revision 1.7 1991/05/08 19:21:47 steve
|
||||
* Revision 1.8 1991/05/11 00:38:46 gnu
|
||||
* Cleanups of interface, including close_and_cleanup and write_contents
|
||||
* transfer vector changes. See ChangeLog.
|
||||
*
|
||||
* Revision 1.7 1991/05/08 19:21:47 steve
|
||||
* Various portability lints.
|
||||
* Fixed reloc bug in ieee and oasys.
|
||||
*
|
||||
|
@ -167,7 +171,7 @@ unsigned int length;
|
|||
}
|
||||
|
||||
/*
|
||||
called once per input srecord, copies data from input into malloced area
|
||||
called once per input srecord, copies data from input into bfd_alloc'd area
|
||||
*/
|
||||
|
||||
static void
|
||||
|
@ -291,7 +295,7 @@ file_ptr offset;
|
|||
unsigned int count;
|
||||
{
|
||||
if (section->used_by_bfd == (PTR)NULL) {
|
||||
section->used_by_bfd = (PTR)malloc(section->size);
|
||||
section->used_by_bfd = (PTR)bfd_alloc (abfd, section->size);
|
||||
pass_over(abfd, fillup, section);
|
||||
}
|
||||
(void) memcpy(location, (bfd_byte *)(section->used_by_bfd) + offset, count);
|
||||
|
@ -394,33 +398,11 @@ int bytes_to_do;
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
boolean
|
||||
srec_close_and_cleanup (abfd)
|
||||
bfd *abfd;
|
||||
srec_write_object_contents (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
asection *s;
|
||||
if (bfd_read_p (abfd) == false) {
|
||||
switch (abfd->format) {
|
||||
case bfd_archive:
|
||||
if (!_bfd_write_archive_contents (abfd)) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case bfd_object:
|
||||
bfd_write("S9030000FC\n", 1,11,abfd);
|
||||
break;
|
||||
default:
|
||||
bfd_error = invalid_operation;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (s = abfd->sections; s != (asection *)NULL;s = s->next) {
|
||||
if (s->used_by_bfd != (void *)NULL) {
|
||||
free(s->used_by_bfd);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
bfd_write("S9030000FC\n", 1,11,abfd);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -454,6 +436,8 @@ return 0;
|
|||
#define srec_write_armap (PROTO( boolean, (*),(bfd *, unsigned int, struct orl *, int, int))) bfd_nullvoidptr
|
||||
#define srec_get_lineno (struct lineno_cache_entry *(*)())bfd_nullvoidptr
|
||||
|
||||
#define srec_close_and_cleanup bfd_generic_close_and_cleanup
|
||||
|
||||
|
||||
bfd_target srec_vec =
|
||||
{
|
||||
|
@ -482,5 +466,11 @@ bfd_target srec_vec =
|
|||
_bfd_generic_mkarchive,
|
||||
bfd_false,
|
||||
},
|
||||
JUMP_TABLE(srec)
|
||||
{ /* bfd_write_contents */
|
||||
bfd_false,
|
||||
srec_write_object_contents,
|
||||
_bfd_write_archive_contents,
|
||||
bfd_false,
|
||||
},
|
||||
JUMP_TABLE(srec)
|
||||
};
|
||||
|
|
|
@ -28,8 +28,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
|
||||
extern bfd_target ecoff_little_vec;
|
||||
extern bfd_target ecoff_big_vec;
|
||||
extern bfd_target aout_little_vec;
|
||||
extern bfd_target aout_big_vec;
|
||||
extern bfd_target sunos_big_vec;
|
||||
extern bfd_target srec_vec;
|
||||
extern bfd_target b_out_vec_little_host;
|
||||
extern bfd_target b_out_vec_big_host;
|
||||
|
@ -54,8 +53,7 @@ extern bfd_target m68kcoff_vec;
|
|||
#define ICOFF_BIG_VEC icoff_big_vec
|
||||
#define B_OUT_VEC_LITTLE_HOST b_out_vec_little_host
|
||||
#define B_OUT_VEC_BIG_HOST b_out_vec_big_host
|
||||
#define AOUT_VEC_LITTLE_HOST aout_little_vec
|
||||
#define AOUT_VEC_BIG_HOST aout_big_vec
|
||||
#define SUNOS_VEC_BIG_HOST sunos_big_vec
|
||||
#define OASYS_VEC oasys_vec
|
||||
#define IEEE_VEC ieee_vec
|
||||
#define M88K_BCS_VEC m88k_bcs_vec
|
||||
|
@ -86,13 +84,9 @@ bfd_target *target_vector[] = {
|
|||
&OASYS_VEC,
|
||||
#endif /* OASYS_VEC */
|
||||
|
||||
#ifdef AOUT_VEC_LITTLE_HOST
|
||||
&AOUT_VEC_LITTLE_HOST,
|
||||
#endif /* AOUT_LITTLE_VEC */
|
||||
|
||||
#ifdef AOUT_VEC_BIG_HOST
|
||||
&AOUT_VEC_BIG_HOST,
|
||||
#endif /* AOUT_BIG_VEC */
|
||||
#ifdef SUNOS_VEC_BIG_HOST
|
||||
&SUNOS_VEC_BIG_HOST,
|
||||
#endif /* SUNOS_BIG_VEC */
|
||||
|
||||
#ifdef M88K_BCS_VEC
|
||||
&M88K_BCS_VEC,
|
||||
|
|
Loading…
Reference in New Issue