From 81d195ae16efa152da57c5e4065282012a937ff4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 10 Jul 1998 20:31:44 +0000 Subject: [PATCH] * ieee.c (ieee_slurp_external_symbols): Select an appropriate section for an absolute symbol in a fully linked file. Based on patch from Christian Holland . --- bfd/ChangeLog | 6 ++++++ bfd/ieee.c | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c6e0834320..2392a049a2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +Fri Jul 10 16:31:06 1998 Ian Lance Taylor + + * ieee.c (ieee_slurp_external_symbols): Select an appropriate + section for an absolute symbol in a fully linked file. Based on + patch from Christian Holland . + Wed Jul 8 11:29:56 1998 Manfred Hollstein * coff-m88k.c (m88k_special_reloc): Don't lose the information diff --git a/bfd/ieee.c b/bfd/ieee.c index c2a022b51c..beefe92b09 100644 --- a/bfd/ieee.c +++ b/bfd/ieee.c @@ -825,6 +825,28 @@ ieee_slurp_external_symbols (abfd) &extra, &symbol->symbol.section); + /* Fully linked IEEE-695 files tend to give every symbol + an absolute value. Try to convert that back into a + section relative value. FIXME: This won't always to + the right thing. */ + if (bfd_is_abs_section (symbol->symbol.section) + && (abfd->flags & HAS_RELOC) == 0) + { + bfd_vma val; + asection *s; + + val = symbol->symbol.value; + for (s = abfd->sections; s != NULL; s = s->next) + { + if (val >= s->vma && val < s->vma + s->_raw_size) + { + symbol->symbol.section = s; + symbol->symbol.value -= s->vma; + break; + } + } + } + symbol->symbol.flags = BSF_GLOBAL | BSF_EXPORT; }