This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]