VirtualBox

Changeset 67 in kStuff for trunk


Ignore:
Timestamp:
Apr 28, 2015 10:31:51 PM (10 years ago)
Author:
bird
Message:

kLdrModMachO.c: Fixed how we apply X86_64_RELOC_SIGNED_1, X86_64_RELOC_SIGNED_2 and X86_64_RELOC_SIGNED_4.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrModMachO.c

    r66 r67  
    10211021                break;
    10221022
     1023            case LC_FUNCTION_STARTS:    /** @todo dylib++ */
     1024                /* Ignore for now. */
     1025                break;
    10231026            case LC_ID_DYLIB:           /** @todo dylib */
    10241027            case LC_LOAD_DYLIB:         /** @todo dylib */
     
    10331036            case LC_DYLD_INFO_ONLY:     /** @todo dylib */
    10341037            case LC_LOAD_UPWARD_DYLIB:  /** @todo dylib */
    1035             case LC_FUNCTION_STARTS:    /** @todo dylib++ */
    10361038            case LC_DYLD_ENVIRONMENT:   /** @todo dylib */
    10371039            case LC_MAIN: /** @todo parse this and find and entry point or smth. */
     
    30783080                            SymAddr -= 4;
    30793081                            break;
    3080                         case X86_64_RELOC_SIGNED_1: SymAddr -= 1; break;
    3081                         case X86_64_RELOC_SIGNED_2: SymAddr -= 2; break;
    30823082                        case X86_64_RELOC_SIGNED:
    3083                         case X86_64_RELOC_SIGNED_4: SymAddr -= 4; break;
     3083                            SymAddr -= 4;
     3084                            break;
     3085                        case X86_64_RELOC_SIGNED_1:
     3086                            SymAddr -= 4 + 1;
     3087                            if (Fixup.r.r_extern)
     3088                                SymAddr += 1;
     3089                            break;
     3090                        case X86_64_RELOC_SIGNED_2:
     3091                            SymAddr -= 4 + 2;
     3092                            if (Fixup.r.r_extern)
     3093                                SymAddr += 2;
     3094                            break;
     3095                        case X86_64_RELOC_SIGNED_4:
     3096                            SymAddr -= 4 + 4;
     3097                            if (Fixup.r.r_extern)
     3098                                SymAddr += 4;
     3099                            break;
    30843100                        default:
    30853101                            KLDRMODMACHO_CHECK_RETURN(0, KLDR_ERR_BAD_FIXUP);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette