Jivin Mike Frysinger lays it down ... > From: Jie Zhang <jie.zh...@analog.com> > > When the relocs are larger than 16bits, incorrect values are written when > the .H/.L loading are reversed. Normally this wouldn't happen because the > gcc compiler always outputs in the same order (first hi, then lo). > > Signed-off-by: Jie Zhang <jie.zh...@analog.com> > Signed-off-by: Mike Frysinger <vap...@gentoo.org>
Applied, Thanks, Davidm > --- > elf2flt.c | 27 ++++++--------------------- > 1 files changed, 6 insertions(+), 21 deletions(-) > > diff --git a/elf2flt.c b/elf2flt.c > index 49ceb30..8bcce1f 100644 > --- a/elf2flt.c > +++ b/elf2flt.c > @@ -740,6 +740,7 @@ dump_symbols(symbols, number_of_symbols); > #elif defined TARGET_bfin > case R_rimm16: > case R_luimm16: > + case R_huimm16: > sym_vma = bfd_section_vma(abs_bfd, > sym_section); > sym_addr += sym_vma + q->addend; > > @@ -749,28 +750,9 @@ dump_symbols(symbols, number_of_symbols); > fprintf (stderr, "Relocation overflow > for rN = %s\n",sym_name); > bad_relocs++; > } > + if ((0xFFFF0000 & sym_addr) != > persistent_data) { > flat_relocs = (uint32_t *) > (realloc (flat_relocs, > (flat_reloc_count + 1) * sizeof (uint32_t))); > - if (bfin_set_reloc (flat_relocs + > flat_reloc_count, > - sym_section->name, > sym_name, > - (*(q->sym_ptr_ptr)), > - 0, section_vma + > q->address)) > - bad_relocs++; > - if (a->flags & SEC_CODE) > - text_has_relocs = 1; > - flat_reloc_count++; > - break; > - > - case R_huimm16: > - sym_vma = bfd_section_vma(abs_bfd, > sym_section); > - sym_addr += sym_vma + q->addend; > - > - if (weak_und_symbol (sym_section->name, > (*(q->sym_ptr_ptr)))) > - continue; > - > - flat_relocs = (uint32_t *) > - (realloc (flat_relocs, > (flat_reloc_count + 2) * sizeof (uint32_t))); > - if ((0xFFFF0000 & sym_addr) != > persistent_data) { > if (verbose) > printf ("New persistent > data for %08lx\n", sym_addr); > persistent_data = 0xFFFF0000 & > sym_addr; > @@ -778,10 +760,13 @@ dump_symbols(symbols, number_of_symbols); > = (sym_addr >> 16) | (3 << > 26); > } > > + flat_relocs = (uint32_t *) > + (realloc (flat_relocs, > (flat_reloc_count + 1) * sizeof (uint32_t))); > if (bfin_set_reloc (flat_relocs + > flat_reloc_count, > sym_section->name, > sym_name, > (*(q->sym_ptr_ptr)), > - 1, section_vma + > q->address)) > + q->howto->type == > R_huimm16 ? 1 : 0, > + section_vma + > q->address)) > bad_relocs++; > if (a->flags & SEC_CODE) > text_has_relocs = 1; > -- > 1.6.3.1 > > _______________________________________________ > uClinux-dev mailing list > uClinux-dev@uclinux.org > http://mailman.uclinux.org/mailman/listinfo/uclinux-dev > This message was resent by uclinux-dev@uclinux.org > To unsubscribe see: > http://mailman.uclinux.org/mailman/options/uclinux-dev > -- David McCullough, david_mccullo...@securecomputing.com, Ph:+61 734352815 McAfee - SnapGear http://www.snapgear.com http://www.uCdot.org _______________________________________________ uClinux-dev mailing list uClinux-dev@uclinux.org http://mailman.uclinux.org/mailman/listinfo/uclinux-dev This message was resent by uclinux-dev@uclinux.org To unsubscribe see: http://mailman.uclinux.org/mailman/options/uclinux-dev