Changeset ec419a0 in rtems-tools


Ignore:
Timestamp:
Apr 16, 2018, 1:55:01 AM (13 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
2586350
Parents:
82c8788
Message:

rtemstoolkit/rap: Ignore R_ARM_V4BX relocation records

Note, this removes the detalis needed to alter the instruction for
an ARMv4 instruction set. Currently this type of record is not handled
in the RAP format loader and the RTL loader ignores it.

Close #3396

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rtemstoolkit/rld-rap.cpp

    r82c8788 rec419a0  
    439439    };
    440440
     441    /*
     442     * Per machine specific special handling.
     443     */
     444    bool
     445    machine_symbol_check (const symbols::symbol& sym)
     446    {
     447      int symsec = sym.section_index ();
     448
     449      /*
     450       * Ignore section index 0
     451       */
     452      if (symsec == 0)
     453        return false;
     454
     455      /*
     456       * Ignore sparc common section
     457       */
     458      if ((elf::object_machine_type () == EM_SPARC) && (symsec == 65522))
     459        return false;
     460
     461      return true;
     462    }
     463
     464    bool
     465    machine_relocation_check (const files::relocation& reloc)
     466    {
     467      /*
     468       * Drop some ARM relocations.
     469       */
     470      if (elf::object_machine_type () == EM_ARM)
     471      {
     472        switch (reloc.type)
     473        {
     474          case 40:  /* R_ARM_V4BX */
     475            return false;
     476          default:
     477            break;
     478        }
     479      }
     480
     481      return true;
     482    }
     483
    441484    const char*
    442485    section_name (int sec)
     
    727770      {
    728771        const files::relocation& freloc = *fri;
     772        bool                     merge_reloc = machine_relocation_check (freloc);
    729773
    730774        if (rld::verbose () >= RLD_VERBOSE_FULL_DEBUG)
    731775          std::cout << " " << std::setw (2) << sec.relocs.size ()
    732                     << '/' << std::setw (2) << rc
    733                     << std::hex << ": reloc.info=0x" << freloc.info << std::dec
     776                    << '/' << std::setw (2) << rc << ':'
     777                    << " merge=" << merge_reloc
     778                    << std::hex
     779                    << " reloc.type=" << freloc.type
     780                    << " reloc.info=0x" << freloc.info
     781                    << std::dec
    734782                    << " reloc.offset=" << freloc.offset
    735783                    << " reloc.addend=" << freloc.addend
     
    738786                    << " reloc.symbinding=" << freloc.symbinding
    739787                    << std::endl;
    740 
    741         sec.relocs.push_back (relocation (freloc, offset));
     788        if (merge_reloc)
     789          sec.relocs.push_back (relocation (freloc, offset));
    742790      }
    743791
     
    10151063          if ((sym.binding () == STB_GLOBAL) || (sym.binding () == STB_WEAK))
    10161064          {
    1017             int         symsec = sym.section_index ();
    1018 
    1019             /* Ignore section index 0 */
    1020             if (symsec == 0)
    1021               continue;
    1022             /* Ignore sparc common section */
    1023             if ((elf::object_machine_type () == EM_SPARC) && (symsec == 65522))
     1065            int symsec = sym.section_index ();
     1066
     1067            /*
     1068             * Do not noting if the symbol is reject at the machine level.
     1069             */
     1070            if (!machine_symbol_check (sym))
    10241071              continue;
    10251072
     
    13551402            offset = sec.offset + reloc.offset;
    13561403
     1404            if (rld::verbose () >= RLD_VERBOSE_TRACE)
     1405              std::cout << "  " << std::setw (2) << sr
     1406                        << '/' << std::setw (2) << rc << ':'
     1407                        << std::hex
     1408                        << " reloc.info=0x" << reloc.info
     1409                        << std::dec
     1410                        << " reloc.offset=" << reloc.offset
     1411                        << " reloc.addend=" << reloc.addend
     1412                        << " reloc.symtype=" << reloc.symtype
     1413                        << " reloc.symsect=" << reloc.symsect
     1414                        << " (" << obj.obj.get_section (reloc.symsect).name << ')'
     1415                        << " reloc.symvalue=" << reloc.symvalue
     1416                        << " reloc.symbinding=" << reloc.symbinding
     1417                        << std::endl;
     1418
    13571419            if ((reloc.symtype == STT_SECTION) || (reloc.symbinding == STB_LOCAL))
    13581420            {
     
    13721434              if (rld::verbose () >= RLD_VERBOSE_TRACE)
    13731435                std::cout << "  " << std::setw (2) << sr
    1374                           << '/' << std::setw (2) << rc
    1375                           <<": rsym: sect=" << section_names[rap_symsect]
     1436                          << '/' << std::setw (2) << rc << ':'
     1437                          << " rsym: sect=" << section_names[rap_symsect]
    13761438                          << " rap_symsect=" << rap_symsect
    13771439                          << " sec.offset=" << obj.secs[rap_symsect].offset
    13781440                          << " sec.osecs=" << obj.secs[rap_symsect].osecs[reloc.symsect].offset
    1379                           << " (" << obj.obj.get_section (reloc.symsect).name << ')'
    1380                           << " reloc.symsect=" << reloc.symsect
    1381                           << " reloc.symvalue=" << reloc.symvalue
    1382                           << " reloc.addend=" << reloc.addend
    13831441                          << " addend=" << addend
    13841442                          << std::endl;
Note: See TracChangeset for help on using the changeset viewer.