diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 11 | ||||
-rw-r--r-- | bfd/bfd-in.h | 9 | ||||
-rw-r--r-- | bfd/coff-a29k.c | 17 | ||||
-rw-r--r-- | bfd/seclet.c | 6 |
4 files changed, 32 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a6566df..55c53b6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +Mon May 4 11:49:15 1992 Steve Chamberlain (sac@thepub.cygnus.com) + + * bfd-in.h: bump version to 1.96 + Major change; changed calling convention for + bfd_get_relocated_section_contents so that caller allocates + memory for section data. + * coffcode.h (bfd_coff_get_relocated_section_contents), reloc.c, + seclet.c, targets.c, bfd.c: reflect new convention. + * coffcode.h (styp_to_sec_flags): if styp_flags is not a special + case, then use reasonable default values for SEC_* flags. + Fri May 1 12:58:34 1992 Steve Chamberlain (sac@thepub.cygnus.com) * coffcode.h (coff_write_object_contents): use RELSZ to work out diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 1d299ad..f14de50 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -52,7 +52,7 @@ here. */ # endif #endif -#define BFD_VERSION "0.18" +#define BFD_VERSION "1.96" /* forward declaration */ typedef struct _bfd bfd; @@ -226,7 +226,7 @@ typedef struct bfd_error_vector { } bfd_error_vector_type; -PROTO (char *, bfd_errmsg, ()); +PROTO (char *, bfd_errmsg, (bfd_ec error_tag)); PROTO (void, bfd_perror, (CONST char *message)); @@ -235,7 +235,7 @@ typedef enum bfd_print_symbol bfd_print_symbol_name, bfd_print_symbol_more, bfd_print_symbol_all, - bfd_print_symbol_nm, /* Pretty format suitable for nm program. */ + bfd_print_symbol_nm /* Pretty format suitable for nm program. */ } bfd_print_symbol_type; @@ -281,7 +281,8 @@ CAT(NAME,_sizeof_headers),\ CAT(NAME,_bfd_debug_info_start),\ CAT(NAME,_bfd_debug_info_end),\ CAT(NAME,_bfd_debug_info_accumulate),\ -CAT(NAME,_bfd_get_relocated_section_contents) +CAT(NAME,_bfd_get_relocated_section_contents),\ +CAT(NAME,_bfd_relax_section) #define COFF_SWAP_TABLE \ coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in, \ diff --git a/bfd/coff-a29k.c b/bfd/coff-a29k.c index 5ec48aa..8f7674d 100644 --- a/bfd/coff-a29k.c +++ b/bfd/coff-a29k.c @@ -61,12 +61,13 @@ asymbol *symbol; /* this function is in charge of performing all the 29k relocations */ static bfd_reloc_status_type -DEFUN(a29k_reloc,(abfd, reloc_entry, symbol_in, data, input_section), +DEFUN(a29k_reloc,(abfd, reloc_entry, symbol_in, data, input_section, output_bfd), bfd *abfd AND arelent *reloc_entry AND asymbol *symbol_in AND PTR data AND - asection *input_section) + asection *input_section AND + bfd *output_bfd) { /* the consth relocation comes in two parts, we have to remember the state between calls, in these variables */ @@ -79,12 +80,18 @@ DEFUN(a29k_reloc,(abfd, reloc_entry, symbol_in, data, input_section), unsigned short r_type; long signed_value; - unsigned long addr = reloc_entry->address + input_section->vma; + unsigned long addr = reloc_entry->address ; /*+ input_section->vma*/ bfd_byte *hit_data =addr + (bfd_byte *)(data); r_type = reloc_entry->howto->type; - /* FIXME: Do we need to check for partial linking here */ + if (output_bfd) { + /* Partial linking - do nothing */ + reloc_entry->address += input_section->output_offset; + return bfd_reloc_ok; + + } + if (symbol_in && (symbol_in->section == &bfd_und_section)) { /* Keep the state machine happy in case we're called again */ @@ -191,7 +198,7 @@ DEFUN(a29k_reloc,(abfd, reloc_entry, symbol_in, data, input_section), return(bfd_reloc_overflow); } - bfd_put_16(abfd, insn, hit_data); + bfd_put_16(abfd, insn, hit_data); break; case R_WORD: insn = bfd_get_32(abfd, hit_data); diff --git a/bfd/seclet.c b/bfd/seclet.c index e030488..871b26f 100644 --- a/bfd/seclet.c +++ b/bfd/seclet.c @@ -57,10 +57,11 @@ DEFUN(rel,(abfd, seclet, output_section), bfd_seclet_type *seclet AND asection *output_section) { - bfd_byte *data; + if (output_section->flags & SEC_HAS_CONTENTS ) { - data = bfd_get_relocated_section_contents(abfd, seclet); + bfd_byte *data = alloca(seclet->size); + data = bfd_get_relocated_section_contents(abfd, seclet, data); if(bfd_set_section_contents(abfd, output_section, data, @@ -69,6 +70,7 @@ DEFUN(rel,(abfd, seclet, output_section), { abort(); } + } } |