,Wed Oct 28 16:11:57 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* ieee.c (get_symbol): can now cope when two symbols of a different class, but the same index number occur consecutively. (get_section_entry): nicer name for sections being forward referenced. (ieee_archive_p): don't free the filename string, since it was never malloced.
This commit is contained in:
parent
17f9c81775
commit
aff6e0b45a
@ -1,3 +1,11 @@
|
||||
,Wed Oct 28 16:11:57 1992 Steve Chamberlain (sac@thepub.cygnus.com)
|
||||
|
||||
* ieee.c (get_symbol): can now cope when two symbols of a
|
||||
different class, but the same index number occur consecutively.
|
||||
(get_section_entry): nicer name for sections being forward
|
||||
referenced. (ieee_archive_p): don't free the filename string,
|
||||
since it was never malloced.
|
||||
|
||||
Wed Oct 28 13:42:09 1992 John Gilmore (gnu@cygnus.com)
|
||||
|
||||
* coffcode.h (coff_write_object_contents): Zero timestamp field.
|
||||
|
79
bfd/ieee.c
79
bfd/ieee.c
@ -1,6 +1,5 @@
|
||||
|
||||
/* bfd back-end for ieee-695 objects.
|
||||
Copyright (C) 1990-1992 Free Software Foundation, Inc.
|
||||
/* BFD back-end for ieee-695 objects.
|
||||
Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
|
||||
Written by Steve Chamberlain of Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -19,7 +18,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#define KEEPMINUSPCININST 1
|
||||
#define KEEPMINUSPCININST 0
|
||||
|
||||
/* IEEE 695 format is a stream of records, which we parse using a simple one-
|
||||
token (which is one byte in this lexicon) lookahead recursive decent
|
||||
@ -529,26 +528,28 @@ DEFUN(parse_expression,(ieee, value, symbol, pcrel, extra, section),
|
||||
#define ieee_pos(abfd) IEEE_DATA(abfd)->h.input_p -IEEE_DATA(abfd)->h.first_byte
|
||||
|
||||
static unsigned int last_index;
|
||||
|
||||
static char last_type; /* is the index for an X or a D */
|
||||
static ieee_symbol_type *
|
||||
DEFUN(get_symbol,(abfd,
|
||||
ieee,
|
||||
last_symbol,
|
||||
symbol_count,
|
||||
pptr,
|
||||
max_index
|
||||
pptr,
|
||||
max_index,
|
||||
this_type
|
||||
),
|
||||
bfd *abfd AND
|
||||
ieee_data_type *ieee AND
|
||||
ieee_symbol_type *last_symbol AND
|
||||
unsigned int *symbol_count AND
|
||||
ieee_symbol_type *** pptr AND
|
||||
unsigned int *max_index
|
||||
unsigned int *max_index AND
|
||||
char this_type
|
||||
)
|
||||
{
|
||||
/* Need a new symbol */
|
||||
unsigned int new_index = must_parse_int(&(ieee->h));
|
||||
if (new_index != last_index) {
|
||||
if (new_index != last_index || this_type != last_type) {
|
||||
ieee_symbol_type * new_symbol = (ieee_symbol_type *)bfd_alloc(ieee->h.abfd,
|
||||
sizeof(ieee_symbol_type));
|
||||
|
||||
@ -560,6 +561,7 @@ max_index
|
||||
if (new_index > *max_index) {
|
||||
*max_index = new_index;
|
||||
}
|
||||
last_type = this_type;
|
||||
return new_symbol;
|
||||
}
|
||||
return last_symbol;
|
||||
@ -586,9 +588,11 @@ DEFUN(ieee_slurp_external_symbols,(abfd),
|
||||
switch (this_byte(&(ieee->h))) {
|
||||
case ieee_nn_record:
|
||||
next_byte(&(ieee->h));
|
||||
|
||||
symbol = get_symbol(abfd, ieee, symbol, &symbol_count,
|
||||
&prev_symbols_ptr,
|
||||
&ieee->external_symbol_max_index);
|
||||
&ieee->external_symbol_max_index,'D');
|
||||
|
||||
|
||||
symbol->symbol.the_bfd = abfd;
|
||||
symbol->symbol.name = read_id(&(ieee->h));
|
||||
@ -602,7 +606,7 @@ DEFUN(ieee_slurp_external_symbols,(abfd),
|
||||
|
||||
symbol = get_symbol(abfd, ieee, symbol, &symbol_count,
|
||||
&prev_symbols_ptr,
|
||||
&ieee->external_symbol_max_index);
|
||||
&ieee->external_symbol_max_index,'D');
|
||||
|
||||
|
||||
BFD_ASSERT (symbol->index >= ieee->external_symbol_min_index);
|
||||
@ -683,7 +687,7 @@ DEFUN(ieee_slurp_external_symbols,(abfd),
|
||||
|
||||
symbol = get_symbol(abfd, ieee, symbol, &symbol_count,
|
||||
&prev_reference_ptr,
|
||||
&ieee->external_reference_max_index);
|
||||
&ieee->external_reference_max_index,'X');
|
||||
|
||||
|
||||
symbol->symbol.the_bfd = abfd;
|
||||
@ -810,7 +814,9 @@ DEFUN(ieee_get_symtab,(abfd, location),
|
||||
|
||||
|
||||
}
|
||||
location[abfd->symcount] = (asymbol *)NULL;
|
||||
if (abfd->symcount) {
|
||||
location[abfd->symcount] = (asymbol *)NULL;
|
||||
}
|
||||
return abfd->symcount;
|
||||
}
|
||||
static asection *
|
||||
@ -820,7 +826,10 @@ DEFUN(get_section_entry,(abfd, ieee,index),
|
||||
unsigned int index)
|
||||
{
|
||||
if (ieee->section_table[index] == (asection *)NULL) {
|
||||
asection *section = bfd_make_section(abfd, " tempname");
|
||||
char *tmp = bfd_alloc(abfd,11);
|
||||
asection *section;
|
||||
sprintf(tmp," fsec%4d", index);
|
||||
section = bfd_make_section(abfd, tmp);
|
||||
ieee->section_table[index] = section;
|
||||
section->flags = SEC_NO_FLAGS;
|
||||
section->target_index = index;
|
||||
@ -908,7 +917,12 @@ DEFUN(ieee_slurp_sections,(abfd),
|
||||
break;
|
||||
}
|
||||
}
|
||||
section->name = read_id(&(ieee->h));
|
||||
memcpy(section->name, read_id(&(ieee->h)),8);
|
||||
/* Truncate sections to 8 chars */
|
||||
if (strlen(section->name) > 8)
|
||||
{
|
||||
section->name[8] = 0;
|
||||
}
|
||||
{ bfd_vma parent, brother, context;
|
||||
parse_int(&(ieee->h), &parent);
|
||||
parse_int(&(ieee->h), &brother);
|
||||
@ -1021,7 +1035,7 @@ uint8e_type buffer[512];
|
||||
return (bfd_target *)NULL;
|
||||
}
|
||||
/* Throw away the filename */
|
||||
free( read_id(&(ieee->h)));
|
||||
read_id(&(ieee->h));
|
||||
/* This must be an IEEE archive, so we'll buy some space to do
|
||||
things */
|
||||
|
||||
@ -1086,6 +1100,7 @@ uint8e_type buffer[512];
|
||||
}
|
||||
}
|
||||
|
||||
/* abfd->has_armap = ;*/
|
||||
return abfd->xvec;
|
||||
|
||||
}
|
||||
@ -1291,7 +1306,7 @@ asection *section;
|
||||
r->next = (ieee_reloc_type *)NULL;
|
||||
next_byte(&(ieee->h));
|
||||
/* abort();*/
|
||||
|
||||
r->relent.sym_ptr_ptr = 0;
|
||||
parse_expression(ieee,
|
||||
&r->relent.addend,
|
||||
&r->symbol,
|
||||
@ -1600,7 +1615,8 @@ DEFUN(ieee_canonicalize_reloc,(abfd, section, relptr, symbols),
|
||||
symbols + src->symbol.index + ieee->external_reference_base_offset;
|
||||
break;
|
||||
case 0:
|
||||
src->relent.sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr;
|
||||
src->relent.sym_ptr_ptr =
|
||||
src->relent.sym_ptr_ptr[0]->section->symbol_ptr_ptr;
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -1824,7 +1840,7 @@ DEFUN(do_with_relocs,(abfd, s),
|
||||
BFD_FAIL();
|
||||
}
|
||||
ieee_write_byte(abfd, ieee_function_either_open_b_enum);
|
||||
abort();
|
||||
/* abort();*/
|
||||
|
||||
if (r->sym_ptr_ptr != (asymbol **)NULL) {
|
||||
ieee_write_expression(abfd, r->addend + ov,
|
||||
@ -1862,18 +1878,20 @@ DEFUN(do_as_repeat, (abfd, s),
|
||||
bfd *abfd AND
|
||||
asection *s)
|
||||
{
|
||||
ieee_write_byte(abfd, ieee_set_current_section_enum);
|
||||
ieee_write_byte(abfd, s->index + IEEE_SECTION_NUMBER_BASE);
|
||||
ieee_write_byte(abfd, ieee_set_current_pc_enum >> 8);
|
||||
ieee_write_byte(abfd, ieee_set_current_pc_enum & 0xff);
|
||||
ieee_write_byte(abfd, s->index + IEEE_SECTION_NUMBER_BASE);
|
||||
ieee_write_int(abfd, s->vma );
|
||||
if (s->_raw_size) {
|
||||
ieee_write_byte(abfd, ieee_set_current_section_enum);
|
||||
ieee_write_byte(abfd, s->index + IEEE_SECTION_NUMBER_BASE);
|
||||
ieee_write_byte(abfd, ieee_set_current_pc_enum >> 8);
|
||||
ieee_write_byte(abfd, ieee_set_current_pc_enum & 0xff);
|
||||
ieee_write_byte(abfd, s->index + IEEE_SECTION_NUMBER_BASE);
|
||||
ieee_write_int(abfd, s->vma );
|
||||
|
||||
ieee_write_byte(abfd,ieee_repeat_data_enum);
|
||||
ieee_write_int(abfd, s->_raw_size);
|
||||
ieee_write_byte(abfd, ieee_load_constant_bytes_enum);
|
||||
ieee_write_byte(abfd, 1);
|
||||
ieee_write_byte(abfd, 0);
|
||||
ieee_write_byte(abfd,ieee_repeat_data_enum);
|
||||
ieee_write_int(abfd, s->_raw_size);
|
||||
ieee_write_byte(abfd, ieee_load_constant_bytes_enum);
|
||||
ieee_write_byte(abfd, 1);
|
||||
ieee_write_byte(abfd, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2987,3 +3005,4 @@ _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs
|
||||
},
|
||||
JUMP_TABLE(ieee)
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user