VirtualBox

Changeset 100275 in vbox for trunk


Ignore:
Timestamp:
Jun 23, 2023 10:54:34 PM (18 months ago)
Author:
vboxsync
Message:

VBoxDef2LazyLoad,iprt/asmdefs-arm.h: Added a NAME() macro to asdefs-arm.h and got rid of the RTLDRFMT stuff added in r157968. bugref:10457

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asmdefs-arm.h

    r100257 r100275  
    128128
    129129/**
     130 * Mangles the name so it can be referenced using DECLASM() in the C/C++ world.
     131 *
     132 * @returns a_SymbolC with the necessary prefix/postfix.
     133 * @param   a_SymbolC   A C symbol name to mangle as needed.
     134 */
     135#if defined(RT_OS_DARWIN)
     136# define NAME(a_SymbolC)    _ ## a_SymbolC
     137#else
     138# define NAME(a_SymbolC)    a_SymbolC
     139#endif
     140
     141/**
    130142 * Returns the page address of the given symbol (used with the adrp instruction primarily).
    131143 *
     
    157169
    158170/** @} */
     171
    159172#endif /* !IPRT_INCLUDED_asmdefs_arm_h */
    160173
  • trunk/src/bldprogs/VBoxDef2LazyLoad.cpp

    r100273 r100275  
    7878#elif defined(RT_ARCH_ARM64)
    7979static RTLDRARCH    g_enmTarget = RTLDRARCH_ARM64;
    80 #else
    81 # error "Port me!"
    82 #endif
    83 #if      defined(RT_OS_DARWIN)
    84 static RTLDRFMT     g_enmLdrFmt = RTLDRFMT_MACHO;
    85 #elif    defined(RT_OS_WINDOWS)
    86 static RTLDRFMT     g_enmLdrFmt = RTLDRFMT_PE;
    87 #elif    defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) || defined(RT_OS_SOLARIS) \
    88       || defined(RT_OS_NETBSD) || defined(RT_OS_OPENBSD)
    89 static RTLDRFMT     g_enmLdrFmt = RTLDRFMT_ELF;
    90 #elif    defined(RT_OS_OS2)
    91 static RTLDRFMT     g_enmLdrFmt = RTLDRFMT_LX;
    9280#else
    9381# error "Port me!"
     
    11141102static RTEXITCODE generateOutputInnerArm64(FILE *pOutput)
    11151103{
    1116     const char *pszNmPfx = g_enmLdrFmt == RTLDRFMT_ELF ? "" : "_";
    1117 
    11181104    fprintf(pOutput, "/*\n");
    11191105    for (unsigned i = 0; i < g_cInputs; i++)
     
    11411127            fprintf(pOutput,
    11421128                    ".p2align 3\n"
    1143                     ".globl %s%s\n"
    1144                     "%s%s:\n"
    1145                     "    adrp    x9, PAGE(%sg_pfn%s)\n"
    1146                     "    ldr     x9, [x9, PAGEOFF(%sg_pfn%s)]\n"
     1129                    ".globl NAME(%s)\n"
     1130                    "NAME(%s):\n"
     1131                    "    adrp    x9, PAGE(NAME(g_pfn%s))\n"
     1132                    "    ldr     x9, [x9, PAGEOFF(NAME(g_pfn%s))]\n"
    11471133                    "    br      x9\n",
    1148                     pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName);
     1134                    pExp->szName, pExp->szName, pExp->szName, pExp->szName);
    11491135        else
    11501136            fprintf(pOutput,
    11511137                    ".p2align 3\n"
    1152                     ".globl %sLazyGetPtr_%s\n"
    1153                     "%sLazyGetPtr_%s:\n"
    1154                     "    adrp    x9, PAGE(%sg_LazyPtr_%s)\n"
    1155                     "    ldr     x9, [x9, PAGEOFF(%sg_LazyPtr_%s)]\n"
     1138                    ".globl NAME(LazyGetPtr_%s)\n"
     1139                    "NAME(LazyGetPtr_%s):\n"
     1140                    "    adrp    x9, PAGE(NAME(g_LazyPtr_%s))\n"
     1141                    "    ldr     x9, [x9, PAGEOFF(NAME(g_LazyPtr_%s))]\n"
    11561142                    "    cmp     x9, #0\n"
    11571143                    "    b.eq    ___LazyLoad___%s\n"
    11581144                    "    mov     x0, x9\n"
    11591145                    "    ret\n",
    1160                     pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pszNmPfx, pExp->szName, pExp->pszExportedNm);
     1146                    pExp->szName, pExp->szName, pExp->szName, pExp->szName, pExp->pszExportedNm);
    11611147    fprintf(pOutput,
    11621148            "ENDCODE\n"
     
    11791165                    ".globl __imp_%s\n"
    11801166                    "__imp_%s:\n"
    1181                     ".globl %sg_pfn%s\n"
    1182                     "%sg_pfn%s:\n"
     1167                    ".globl NAME(g_pfn%s)\n"
     1168                    "NAME(g_pfn%s):\n"
    11831169                    "    .quad ___LazyLoad___%s\n"
    11841170                    "\n",
    11851171                    pExp->szName, pExp->szName,
    1186                     pszNmPfx, pExp->szName, pszNmPfx, pExp->szName,
     1172                    pExp->szName, pExp->szName,
    11871173                    pExp->pszExportedNm);
    11881174        else
    11891175            fprintf(pOutput,
    1190                     ".globl %sg_LazyPtr_%s\n"
    1191                     "%sg_LazyPtr_%s:\n"
     1176                    ".globl NAME(g_LazyPtr_%s)\n"
     1177                    "NAME(g_LazyPtr_%s):\n"
    11921178                    "    .quad 0\n"
    11931179                    "\n",
    1194                     pszNmPfx, pExp->szName, pszNmPfx, pExp->szName);
     1180                    pExp->szName, pExp->szName);
    11951181    fprintf(pOutput,
    11961182            "    .quad 0 /* Terminator entry for traversal. */\n"
     
    12451231                    "    adrp    x9, PAGE(g_sz%s)\n"
    12461232                    "    add     x9, x9, PAGEOFF(g_sz%s)\n"
    1247                     "    adrp    x10, PAGE(%s%s%s)\n"
    1248                     "    add     x10, x10, PAGEOFF(%s%s%s)\n"
     1233                    "    adrp    x10, PAGE(NAME(%s%s))\n"
     1234                    "    add     x10, x10, PAGEOFF(NAME(%s%s))\n"
    12491235                    "    mov     x16, x30\n"
    12501236                    "    bl      LazyLoadResolver\n"
     
    12521238                    , pExp->pszExportedNm,
    12531239                    pExp->pszExportedNm, pExp->pszExportedNm,
    1254                     pszNmPfx, !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    1255                     pszNmPfx, !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
     1240                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
     1241                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
    12561242        else
    12571243            fprintf(pOutput,
    12581244                    "___LazyLoad___%s:\n"
    12591245                    "    movk    w9, #%u\n"
    1260                     "    adrp    x10, PAGE(%s%s%s)\n"
    1261                     "    add     x10, x10, PAGEOFF(%s%s%s)\n"
     1246                    "    adrp    x10, PAGE(NAME(%s%s))\n"
     1247                    "    add     x10, x10, PAGEOFF(NAME(%s%s))\n"
    12621248                    , pExp->pszExportedNm,
    12631249                    pExp->uOrdinal,
    1264                     pszNmPfx, !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    1265                     pszNmPfx, !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
     1250                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
     1251                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
    12661252        if (!pExp->fData)
    1267             fprintf(pOutput, "    b       %s%s\n", pszNmPfx, pExp->szName);
     1253            fprintf(pOutput, "    b       NAME(%s)\n", pExp->szName);
    12681254        else
    1269             fprintf(pOutput, "    b       %sLazyGetPtr_%s\n", pszNmPfx, pExp->szName);
     1255            fprintf(pOutput, "    b       NAME(LazyGetPtr_%s)\n", pExp->szName);
    12701256        fprintf(pOutput, "\n");
    12711257    }
     
    13501336            "    mov     x1, x19\n"
    13511337            "    mov     x2, x20\n"
    1352             "    bl      %sRTLdrGetSymbol\n"
     1338            "    bl      NAME(RTLdrGetSymbol)\n"
    13531339            "\n"
    13541340            "    cmp     w0, #0\n"
     
    13641350            "    stp     x1, x2, [sp]\n"
    13651351            "    str     x3,     [sp, #16]\n"
    1366             "    bl      %sRTAssertMsg2Weak\n"
     1352            "    bl      NAME(RTAssertMsg2Weak)\n"
    13671353            "Lbadsymloop:\n"
    13681354            "    brk     #0x1\n"
     
    14051391            "    .cfi_endproc\n"
    14061392            "\n"
    1407             "\n"
    1408             , pszNmPfx, pszNmPfx);
     1393            "\n");
    14091394
    14101395    fprintf(pOutput,
     
    14331418                "    adrp    x0, PAGE(g_szLibrary)\n"
    14341419                "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
    1435                 "    bl      %sSUPR3HardenedLdrLoadAppPriv\n"
    1436                 , pszNmPfx);
     1420                "    bl      NAME(SUPR3HardenedLdrLoadAppPriv)\n");
    14371421    else
    14381422        fprintf(pOutput,
     
    14431427                "    adrp    x0, PAGE(g_szLibrary)\n"
    14441428                "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
    1445                 "    bl      %sRTLdrLoadSystem\n"
    1446                 , pszNmPfx);
     1429                "    bl      NAME(RTLdrLoadSystem)\n");
    14471430
    14481431    fprintf(pOutput,
     
    14571440            "    add     x0, x0, PAGEOFF(g_szFailResolveFmt)\n"
    14581441            "    stp     x1, x2, [sp]\n"
    1459             "    bl      %sRTAssertMsg2Weak\n"
     1442            "    bl      NAME(RTAssertMsg2Weak)\n"
    14601443            "Lbadloadloop:\n"
    14611444            "    brk     #0x1\n"
     
    14721455            "ENDCODE\n"
    14731456            "\n"
    1474             "\n"
    1475             , pszNmPfx);
     1457            "\n");
    14761458
    14771459    /*
     
    14881470                "BEGINCODE\n"
    14891471                ".p2align 3\n"
    1490                 ".globl %sExplicitlyLoad%.*s\n"
    1491                 "%sExplicitlyLoad%.*s:\n"
     1472                ".globl NAME(ExplicitlyLoad%.*s)\n"
     1473                "NAME(ExplicitlyLoad%.*s):\n"
    14921474                "    .cfi_startproc\n"
    14931475                "    /* Create frame. */\n"
     
    15201502                ,
    15211503                cchLibBaseName, g_pszLibrary,
    1522                 pszNmPfx, cchLibBaseName, g_pszLibrary,
    1523                 pszNmPfx, cchLibBaseName, g_pszLibrary);
     1504                cchLibBaseName, g_pszLibrary,
     1505                cchLibBaseName, g_pszLibrary);
    15241506        fprintf(pOutput,
    15251507                "Lexplicit_load_module:\n");
     
    15331515                    "    adrp    x0, PAGE(g_szLibrary)\n"
    15341516                    "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
    1535                     "    bl      %sSUPR3HardenedLdrLoadAppPriv\n"
    1536                     , pszNmPfx);
     1517                    "    bl      NAME(SUPR3HardenedLdrLoadAppPriv)\n");
    15371518        else
    15381519            fprintf(pOutput,
     
    15431524                    "    adrp    x0, PAGE(g_szLibrary)\n"
    15441525                    "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
    1545                     "    bl      %sRTLdrLoadSystem\n"
    1546                     , pszNmPfx);
     1526                    "    bl      NAME(RTLdrLoadSystem)\n");
    15471527        fprintf(pOutput,
    15481528                "    cmp     x0, #0\n"
     
    15721552                "    mov     x1, x22\n"
    15731553                "    mov     x2, x23\n"
    1574                 "    bl      %sRTLdrGetSymbol\n"
     1554                "    bl      NAME(RTLdrGetSymbol)\n"
    15751555                "    cmp     x0, #0\n"
    15761556                "    b.ne    Lexplicit_load_symbol_error\n"
     
    15921572                "    mov     x1, x0\n"
    15931573                "    mov     x0, x21\n"
    1594                 "    bl      %sRTErrInfoSet\n"
     1574                "    bl      NAME(RTErrInfoSet)\n"
    15951575                "    b       Lexplicit_load_return"
    15961576                "    "
     
    16121592                "ENDCODE\n"
    16131593                "\n"
    1614                 "\n"
    1615                 , pszNmPfx, pszNmPfx);
     1594                "\n");
    16161595    }
    16171596
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