This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
arm-wince-pe-ld
- From: "Rainer Keuchel" <keuchel at rainer-keuchel dot de>
- To: <binutils at sources dot redhat dot com>
- Date: Fri, 6 Jun 2003 18:54:39 +0200
- Subject: arm-wince-pe-ld
Could someone comment on the following workarounds?
I don't send diff so it's clearer what is done.
It seems to be curing only the symptoms, but works.
**********************************************************************
// pe-dll.c
case BITS_AND_SHIFT (26, 2):
reloc_data[total_relocs].type = 5;
total_relocs++;
break;
#ifdef KEUCHEL
case BITS_AND_SHIFT (24, 2):
{
if(relocs[i]->howto->type == 5 /*ARM_26D*/)
{
// ignore
#if 0
struct symbol_cache_entry *sym =
*relocs[i]->sym_ptr_ptr;
fprintf(stderr,
"Ignoring ARM_26D: sec %s secvma 0x%x "
"symvma: %x type %d vma %x name %s\n",
s->output_section->name,
sec_vma,
sym_vma,
relocs[i]->howto->type,
reloc_data[total_relocs].vma,
sym->name);
#endif
}
else
{
einfo (_("%XError: %d-bit reloc, type %d in exe/dll\n"),
relocs[i]->howto->bitsize);
}
}
break;
#endif
**********************************************************************
// ldmain.c
static bfd_boolean
multiple_definition (info, name, obfd, osec, oval, nbfd, nsec, nval)
struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
bfd *obfd;
asection *osec;
bfd_vma oval;
bfd *nbfd;
asection *nsec;
bfd_vma nval;
{
/* If either section has the output_section field set to
bfd_abs_section_ptr, it means that the section is being
discarded, and this is not really a multiple definition at all.
FIXME: It would be cleaner to somehow ignore symbols defined in
sections which are being discarded. */
if ((osec->output_section != NULL
&& ! bfd_is_abs_section (osec)
&& bfd_is_abs_section (osec->output_section))
|| (nsec->output_section != NULL
&& ! bfd_is_abs_section (nsec)
&& bfd_is_abs_section (nsec->output_section)))
return TRUE;
#ifdef KEUCHEL
// What if osec->output_section and nsec->output_section are both NULL?
// And oval or nval is NULL? When they are null, it cannot really
// be defined?
if(oval == NULL || nval == NULL)
return TRUE;
fprintf(stderr, "osec: %x %s nsec: %x %s oval %x nval %x\n",
osec->output_section,
(osec->output_section) ? osec->output_section->name : "nosec",
nsec->output_section,
(nsec->output_section) ? nsec->output_section->name : "nosec",
oval,
nval
);
#endif
einfo (_("%X%C: multiple definition of `%T'\n"),
nbfd, nsec, nval, name);
if (obfd != (bfd *) NULL)
einfo (_("%D: first defined here\n"), obfd, osec, oval);