Changes between Initial Version and Version 1 of Ticket #61170, comment 12


Ignore:
Timestamp:
Sep 13, 2020, 8:48:40 PM (4 years ago)
Author:
kencu (Ken)
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #61170, comment 12

    initial v1  
    1 that error appears to be coming because of this bit <https://opensource.apple.com/source/ld64/ld64-59.2/src/MachOReaderRelocatable.hpp.auto.html>
     1that error appears to be coming because of this bit <https://opensource.apple.com/source/ld64/ld64-85.2.1/src/MachOReaderRelocatable.hpp.auto.html>
    22{{{
    33                        case GENERIC_RELOC_SECTDIFF:
     
    55                                {
    66                                        if ( !nextRelocIsPair ) {
    7                                                 printf("GENERIC_RELOC_SECTDIFF missing following pair\n");
     7                                                warning("GENERIC_RELOC_SECTDIFF missing following pair");
    88                                                break;
    99                                        }
    10                                         if ( sreloc->r_length() != 2 )
    11                                                 throw "bad length for GENERIC_RELOC_SECTDIFF";
    12                                         betterDstAddr = LittleEndian::get32(*fixUpPtr);
    13                                         makeReferenceWithToBase(x86::kPointerDiff, srcAddr, nextRelocValue, betterDstAddr+nextRelocValue, dstAddr);
    14                                 }
    15                                 break;
     10                                        x86::ReferenceKinds kind = x86::kPointerDiff;
     11                                        uint32_t contentAddr = 0;
     12                                        switch ( sreloc->r_length() ) {
     13                                                case 0:
     14                                                case 3:
     15                                                        throw "bad length for GENERIC_RELOC_SECTDIFF";
     16                                                case 1:
     17                                                        kind = x86::kPointerDiff16;
     18                                                        contentAddr = LittleEndian::get16(*((uint16_t*)fixUpPtr));
     19                                                        break;
     20                                                case 2:
     21                                                        kind = x86::kPointerDiff;
     22                                                        contentAddr = LittleEndian::get32(*fixUpPtr);
     23                                                        break;
     24                                        }
    1625}}}