From 2cfd05621b47ac1b59e751533289e255b85e2ae5 Mon Sep 17 00:00:00 2001 From: Steve Chamberlain Date: Mon, 4 May 1992 23:42:03 +0000 Subject: * 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. --- bfd/coff-a29k.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'bfd/coff-a29k.c') 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); -- cgit v1.1