VirtualBox

Changeset 93484 in vbox for trunk/src/bldprogs


Ignore:
Timestamp:
Jan 29, 2022 12:18:12 AM (3 years ago)
Author:
vboxsync
Message:

VBoxDef2LazyLoad.cpp: More arm64 tweaks. bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bldprogs/VBoxDef2LazyLoad.cpp

    r93115 r93484  
    10271027            "; Thunks.\n"
    10281028            ";\n"
    1029             ".section __TEXT,__text,regular,pure_instructions\n"
    1030             ".p2align 2\n");
     1029            ".section __TEXT,__text,regular,pure_instructions\n");
    10311030    for (PMYEXPORT pExp = g_pExpHead; pExp; pExp = pExp->pNext)
    10321031        fprintf(pOutput,
     1032                ".p2align 3\n"
    10331033                ".globl %s%s\n"
    10341034                "%s%s:\n"
    1035                 "    ldr     x9, =g_pfn%s\n"
    1036                 "    blr     x9\n",
    1037                 pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pExp->szName);
     1035                "    adrp    x9, %sg_pfn%s@PAGE\n"
     1036                "    ldr     x9, [x9, %sg_pfn%s@PAGEOFF]\n"
     1037                "    br      x9\n",
     1038                pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName);
    10381039    fprintf(pOutput,
    10391040            "\n"
     
    10481049            ";\n"
    10491050            ".section __DATA,__data\n"
    1050             ".p2align 2\n"
     1051            ".p2align 3\n"
    10511052            "g_apfnImports:\n");
    10521053    for (PMYEXPORT pExp = g_pExpHead; pExp; pExp = pExp->pNext)
     
    11031104            ";\n"
    11041105            ".section __TEXT,__text,regular,pure_instructions\n"
    1105             ".p2align 2\n");
     1106            ".p2align 3\n");
    11061107    for (PMYEXPORT pExp = g_pExpHead; pExp; pExp = pExp->pNext)
    11071108    {
     
    11091110            fprintf(pOutput,
    11101111                    "___LazyLoad___%s:\n"
    1111                     "    ldr     x9, =g_sz%s\n"
    1112                     "    ldr     x10, =g_pfn%s\n"
     1112                    "    adrp    x9, g_sz%s@PAGE\n"
     1113                    "    add     x9, x9, g_sz%s@PAGEOFF\n"
     1114                    "    adrp    x10, %sg_pfn%s@PAGE\n"
     1115                    "    add     x10, x10, %sg_pfn%s@PAGEOFF\n"
    11131116                    "    bl      LazyLoadResolver\n"
    1114                     , pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm);
     1117                    , pExp->pszExportedNm,
     1118                    pExp->pszExportedNm, pExp->pszExportedNm,
     1119                    pszNmPfx, pExp->pszExportedNm, pszNmPfx, pExp->pszExportedNm);
    11151120        else
    11161121            fprintf(pOutput,
    11171122                    "___LazyLoad___%s:\n"
    11181123                    "    movk    w9, #%u\n"
    1119                     "    ldr     x10, =g_pfn%s\n"
    1120                     "    bl      LazyLoadResolver\n"
    1121                     , pExp->pszExportedNm, pExp->uOrdinal, pExp->pszExportedNm);
     1124                    "    adrp    x10, %sg_pfn%s@PAGE\n"
     1125                    "    add     x10, x10, %sg_pfn%s@PAGEOFF\n"
     1126                    , pExp->pszExportedNm,
     1127                    pExp->uOrdinal,
     1128                    pszNmPfx, pExp->pszExportedNm, pszNmPfx, pExp->pszExportedNm);
    11221129        fprintf(pOutput, "    b       %s%s\n", pszNmPfx, pExp->szName);
    11231130        fprintf(pOutput, "\n");
     
    11501157            ";\n"
    11511158            ".section __TEXT,__text,regular,pure_instructions\n"
    1152             ".p2align 2\n"
     1159            ".p2align 3\n"
    11531160            "LazyLoadResolver:\n"
    11541161            "    .cfi_startproc\n"
     
    11931200            "\n"
    11941201            "    ; Get the module handle and call RTLdrGetSymbol(RTLDRMOD hLdrMod, const char *pszSymbol, void **ppvValue)\n"
    1195             "    ldr     x0, =g_hMod\n"
    1196             "    ldr     x0, [x0]\n"
     1202            "    adrp    x0, g_hMod@PAGE\n"
     1203            "    ldr     x0, [x0, g_hMod@PAGEOFF]\n"
    11971204            "    cmp     x0, #0\n"
    11981205            "    b.eq    LazyLoading\n"
     
    12061213            "Lbadsym: ; Call sRTAssertMsg2Weak. Variadic (...) arguments are passed on the stack it seems.\n"
    12071214            "    mov     x3, x0\n"
    1208             "    ldr     x2, =g_szLibrary\n"
     1215            "    adrp    x2, g_szLibrary@PAGE\n"
     1216            "    add     x2, x2, g_szLibrary@PAGEOFF\n"
    12091217            "    mov     x1, x19\n"
    1210             "    ldr     x0, =g_szFailLoadFmt\n"
     1218            "    adrp    x0, g_szFailLoadFmt@PAGE\n"
     1219            "    add     x0, x0, g_szFailLoadFmt@PAGEOFF\n"
    12111220            "    stp     x1, x2, [sp]\n"
    12121221            "    str     x3,     [sp, #16]\n"
     
    12761285                "    mov     x3, #0\n"
    12771286                "    mov     x2, #0\n"
    1278                 "    ldr     x1, =g_hMod\n"
    1279                 "    ldr     x0, =g_szLibrary\n"
     1287                "    adrp    x1, g_hMod@PAGE\n"
     1288                "    add     x1, x1, g_hMod@PAGEOFF\n"
     1289                "    adrp    x0, g_szLibrary@PAGE\n"
     1290                "    add     x0, x0, g_szLibrary@PAGEOFF\n"
    12801291                "    bl      %sSUPR3HardenedLdrLoadAppPriv\n"
    12811292                , pszNmPfx);
     
    12831294        fprintf(pOutput,
    12841295                "    ; Call RTLdrLoadSystem(const char *pszFilename, bool fNoUnload, PRTLDRMOD phLdrMod);\n"
    1285                 "    ldr     x2, =g_hMod\n"
     1296                "    adrp    x2, g_hMod@PAGE\n"
     1297                "    add     x2, x2, g_hMod@PAGEOFF\n"
    12861298                "    mov     x1, #1\n"
    1287                 "    ldr     x0, =g_szLibrary\n"
     1299                "    adrp    x0, g_szLibrary@PAGE\n"
     1300                "    add     x0, x0, g_szLibrary@PAGEOFF\n"
    12881301                "    bl      %sRTLdrLoadSystem\n"
    12891302                , pszNmPfx);
     
    12951308            "Lbadload: ; Call sRTAssertMsg2Weak. Variadic (...) arguments are passed on the stack it seems.\n"
    12961309            "    mov     x2, x0\n"
    1297             "    ldr     x1, =g_szLibrary\n"
    1298             "    ldr     x0, =g_szFailResolveFmt\n"
     1310            "    adrp    x1, g_szLibrary@PAGE\n"
     1311            "    add     x1, x1, g_szLibrary@PAGEOFF\n"
     1312            "    adrp    x0, g_szFailResolveFmt@PAGE\n"
     1313            "    add     x0, x0, g_szFailResolveFmt@PAGEOFF\n"
    12991314            "    stp     x1, x2, [sp]\n"
    13001315            "    bl      %sRTAssertMsg2Weak\n"
     
    13031318            "    b       Lbadloadloop\n"
    13041319            "Lload_return:\n"
    1305             "    ldr     x0, =g_hMod\n"
    1306             "    ldr     x0, [x0]\n"
     1320            "    adrp    x0, g_hMod@PAGE\n"
     1321            "    ldr     x0, [x0, g_hMod@PAGEOFF]\n"
    13071322            "    ldp     x29, x30, [sp, #48]\n"
    13081323            "    .cfi_restore x29\n"
     
    13331348                ";\n"
    13341349                ".section __TEXT,__text,regular,pure_instructions\n"
    1335                 ".p2align 2\n"
    1336                 ".globl ExplicitlyLoad%.*s\n"
    1337                 "ExplicitlyLoad%.*s:\n"
     1350                ".p2align 3\n"
     1351                ".globl %sExplicitlyLoad%.*s\n"
     1352                "%sExplicitlyLoad%.*s:\n"
    13381353                "    .cfi_startproc\n"
    13391354                "    ; Create frame.\n"
     
    13591374                "    ; Is the module already loaded?\n"
    13601375                "    ;\n"
    1361                 "    ldr     x0, =g_hMod\n"
    1362                 "    ldr     x0, [x0]\n"
     1376                "    adrp    x0, g_hMod@PAGE\n"
     1377                "    ldr     x0, [x0, g_hMod@PAGEOFF]\n"
    13631378                "    cmp     x0, #0\n"
    13641379                "    b.ne    Lexplicit_loaded_module\n"
     
    13661381                ,
    13671382                cchLibBaseName, g_pszLibrary,
    1368                 cchLibBaseName, g_pszLibrary,
    1369                 cchLibBaseName, g_pszLibrary);
     1383                pszNmPfx, cchLibBaseName, g_pszLibrary,
     1384                pszNmPfx, cchLibBaseName, g_pszLibrary);
    13701385        fprintf(pOutput,
    13711386                "Lexplicit_load_module:\n"
     
    13731388                "    mov     x3, #0\n"
    13741389                "    mov     x2, #0\n"
    1375                 "    ldr     x1, =g_hMod\n"
    1376                 "    ldr     x0, =g_szLibrary\n"
     1390                "    adrp    x1, g_hMod@PAGE\n"
     1391                "    add     x1, x1, g_hMod@PAGEOFF\n"
     1392                "    adrp    x0, g_szLibrary@PAGE\n"
     1393                "    add     x0, x0, g_szLibrary@PAGEOFF\n"
    13771394                "    bl      %sSUPR3HardenedLdrLoadAppPriv\n"
    13781395                "    cmp     x0, #0\n"
     
    13891406                "    b.eq    Lexplicit_load_return\n"
    13901407                "\n"
    1391                 "    ldr     x22, =g_szzNames\n"
    1392                 "    ldr     x23, =g_apfnImports\n"
     1408                "    adrp     x22, g_szzNames@PAGE\n"
     1409                "    add      x22, x22, g_szzNames@PAGEOFF\n"
     1410                "    adrp     x23, g_apfnImports@PAGE\n"
     1411                "    add      x23, x23, g_apfnImports@PAGEOFF\n"
    13931412                "Lexplicit_load_next_import:\n"
    13941413                "    ldr     x0, [x23]\n"
     
    13971416                "\n"
    13981417                "    ; Get the module handle and call RTLdrGetSymbol(RTLDRMOD hLdrMod, const char *pszSymbol, void **ppvValue)\n"
    1399                 "    ldr     x0, =g_hMod\n"
    1400                 "    ldr     x0, [x0]\n"
     1418                "    adrp    x0, g_hMod@PAGE\n"
     1419                "    ldr     x0, [x0, g_hMod@PAGEOFF]\n"
    14011420                "    mov     x1, x22\n"
    14021421                "    mov     x2, x23\n"
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