VirtualBox

Changeset 104213 in vbox for trunk


Ignore:
Timestamp:
Apr 7, 2024 4:29:33 PM (10 months ago)
Author:
vboxsync
Message:

bldprogs/VBoxDef2LazyLoad: Get it working on linux.arm64/ELF, bugref:10391

Location:
trunk
Files:
2 edited

Legend:

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

    r100276 r104213  
    145145#if defined(__clang__)
    146146# define PAGE(a_Symbol) a_Symbol ## @PAGE
    147 #elif defined(__GNUC__)
    148 # define PAGE(a_Symbol) a_Symbol
     147#elif defined(__GNUC__) && defined(ASM_FORMAT_ELF)
     148# define PAGE(a_Symbol) :got: ## a_Symbol
    149149#else
    150150# error "Port me!"
     
    159159#if defined(__clang__)
    160160# define PAGEOFF(a_Symbol) a_Symbol ## @PAGEOFF
    161 #elif defined(__GNUC__)
    162 # define PAGEOFF(a_Symbol) :lo12: ## a_Symbol
     161#elif defined(__GNUC__) && defined(ASM_FORMAT_ELF)
     162# define PAGEOFF(a_Symbol) :got_lo12: ## a_Symbol
    163163#else
    164164# error "Port me!"
  • trunk/src/bldprogs/VBoxDef2LazyLoad.cpp

    r100275 r104213  
    12301230                    "___LazyLoad___%s:\n"
    12311231                    "    adrp    x9, PAGE(g_sz%s)\n"
     1232                    "#ifndef ASM_FORMAT_ELF\n"
    12321233                    "    add     x9, x9, PAGEOFF(g_sz%s)\n"
     1234                    "#else\n"
     1235                    "    ldr     x9, [x9, PAGEOFF(g_sz%s)]\n"
     1236                    "#endif\n"
    12331237                    "    adrp    x10, PAGE(NAME(%s%s))\n"
     1238                    "#ifndef ASM_FORMAT_ELF\n"
    12341239                    "    add     x10, x10, PAGEOFF(NAME(%s%s))\n"
     1240                    "#else\n"
     1241                    "    ldr     x10, [x10, PAGEOFF(NAME(%s%s))]\n"
     1242                    "#endif\n"
    12351243                    "    mov     x16, x30\n"
    12361244                    "    bl      LazyLoadResolver\n"
    12371245                    "    mov     x30, x16\n"
    12381246                    , pExp->pszExportedNm,
    1239                     pExp->pszExportedNm, pExp->pszExportedNm,
     1247                    pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm,
     1248                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    12401249                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    12411250                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
     
    12451254                    "    movk    w9, #%u\n"
    12461255                    "    adrp    x10, PAGE(NAME(%s%s))\n"
     1256                    "#ifndef ASM_FORMAT_ELF\n"
    12471257                    "    add     x10, x10, PAGEOFF(NAME(%s%s))\n"
     1258                    "#else\n"
     1259                    "    ldr     x10, [x10, PAGEOFF(NAME(%s%s))]\n"
     1260                    "#endif\n"
    12481261                    , pExp->pszExportedNm,
    12491262                    pExp->uOrdinal,
     1263                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    12501264                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm,
    12511265                    !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm);
     
    13441358            "    mov     x3, x0\n"
    13451359            "    adrp    x2, PAGE(g_szLibrary)\n"
     1360            "#ifndef ASM_FORMAT_ELF\n"
    13461361            "    add     x2, x2, PAGEOFF(g_szLibrary)\n"
     1362            "#else\n"
     1363            "    ldr     x2, [x2, PAGEOFF(g_szLibrary)]\n"
     1364            "#endif\n"
    13471365            "    mov     x1, x19\n"
    13481366            "    adrp    x0, PAGE(g_szFailLoadFmt)\n"
     1367            "#ifndef ASM_FORMAT_ELF\n"
    13491368            "    add     x0, x0, PAGEOFF(g_szFailLoadFmt)\n"
     1369            "#else\n"
     1370            "    ldr     x0, [x0, PAGEOFF(g_szFailLoadFmt)]\n"
     1371            "#endif\n"
    13501372            "    stp     x1, x2, [sp]\n"
    13511373            "    str     x3,     [sp, #16]\n"
     
    14151437                "    mov     x2, #0\n"
    14161438                "    adrp    x1, PAGE(g_hMod)\n"
     1439                "#ifndef ASM_FORMAT_ELF\n"
    14171440                "    add     x1, x1, PAGEOFF(g_hMod)\n"
     1441                "#else\n"
     1442                "    ldr     x1, [x1, PAGEOFF(g_hMod)]\n"
     1443                "#endif\n"
    14181444                "    adrp    x0, PAGE(g_szLibrary)\n"
     1445                "#ifndef ASM_FORMAT_ELF\n"
    14191446                "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
     1447                "#else\n"
     1448                "    ldr     x0, [x0, PAGEOFF(g_szLibrary)]\n"
     1449                "#endif\n"
    14201450                "    bl      NAME(SUPR3HardenedLdrLoadAppPriv)\n");
    14211451    else
     
    14231453                "    /* Call RTLdrLoadSystem(const char *pszFilename, bool fNoUnload, PRTLDRMOD phLdrMod); */\n"
    14241454                "    adrp    x2, PAGE(g_hMod)\n"
     1455                "#ifndef ASM_FORMAT_ELF\n"
    14251456                "    add     x2, x2, PAGEOFF(g_hMod)\n"
     1457                "#else\n"
     1458                "    ldr     x2, [x2, PAGEOFF(g_hMod)]\n"
     1459                "#endif\n"
    14261460                "    mov     x1, #1\n"
    14271461                "    adrp    x0, PAGE(g_szLibrary)\n"
     1462                "#ifndef ASM_FORMAT_ELF\n"
    14281463                "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
     1464                "#else\n"
     1465                "    ldr     x0, [x0, PAGEOFF(g_szLibrary)]\n"
     1466                "#endif\n"
    14291467                "    bl      NAME(RTLdrLoadSystem)\n");
    14301468
     
    14361474            "    mov     x2, x0\n"
    14371475            "    adrp    x1, PAGE(g_szLibrary)\n"
     1476            "#ifndef ASM_FORMAT_ELF\n"
    14381477            "    add     x1, x1, PAGEOFF(g_szLibrary)\n"
     1478            "#else\n"
     1479            "    ldr     x1, [x1, PAGEOFF(g_szLibrary)]\n"
     1480            "#endif\n"
    14391481            "    adrp    x0, PAGE(g_szFailResolveFmt)\n"
     1482            "#ifndef ASM_FORMAT_ELF\n"
    14401483            "    add     x0, x0, PAGEOFF(g_szFailResolveFmt)\n"
     1484            "#else\n"
     1485            "    ldr     x0, [x0, PAGEOFF(g_szFailResolveFmt)]\n"
     1486            "#endif\n"
    14411487            "    stp     x1, x2, [sp]\n"
    14421488            "    bl      NAME(RTAssertMsg2Weak)\n"
     
    15121558                    "    mov     x2, #0\n"
    15131559                    "    adrp    x1, PAGE(g_hMod)\n"
     1560                    "#ifndef ASM_FORMAT_ELF\n"
    15141561                    "    add     x1, x1, PAGEOFF(g_hMod)\n"
     1562                    "#else\n"
     1563                    "    ldr     x1, [x1, PAGEOFF(g_hMod)]\n"
     1564                    "#endif\n"
    15151565                    "    adrp    x0, PAGE(g_szLibrary)\n"
     1566                    "#ifndef ASM_FORMAT_ELF\n"
    15161567                    "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
     1568                    "#else\n"
     1569                    "    ldr     x0, [x0, PAGEOFF(g_szLibrary)]\n"
     1570                    "#endif\n"
    15171571                    "    bl      NAME(SUPR3HardenedLdrLoadAppPriv)\n");
    15181572        else
     
    15201574                    "    /* Call RTLdrLoadSystem(const char *pszFilename, bool fNoUnload, PRTLDRMOD phLdrMod); */\n"
    15211575                    "    adrp    x2, PAGE(g_hMod)\n"
     1576                    "#ifndef ASM_FORMAT_ELF\n"
    15221577                    "    add     x2, x2, PAGEOFF(g_hMod)\n"
     1578                    "#else\n"
     1579                    "    ldr     x2, [x2, PAGEOFF(g_hMod)]\n"
     1580                    "#endif\n"
    15231581                    "    mov     x1, #1\n"
    15241582                    "    adrp    x0, PAGE(g_szLibrary)\n"
     1583                    "#ifndef ASM_FORMAT_ELF\n"
    15251584                    "    add     x0, x0, PAGEOFF(g_szLibrary)\n"
     1585                    "#else\n"
     1586                    "    ldr     x0, [x0, PAGEOFF(g_szLibrary)]\n"
     1587                    "#endif\n"
    15261588                    "    bl      NAME(RTLdrLoadSystem)\n");
    15271589        fprintf(pOutput,
     
    15391601                "\n"
    15401602                "    adrp     x22, PAGE(g_szzNames)\n"
     1603                "#ifndef ASM_FORMAT_ELF\n"
    15411604                "    add      x22, x22, PAGEOFF(g_szzNames)\n"
     1605                "#else\n"
     1606                "    ldr      x22, [x22, PAGEOFF(g_szzNames)]\n"
     1607                "#endif\n"
    15421608                "    adrp     x23, PAGE(g_apfnImports)\n"
     1609                "#ifndef ASM_FORMAT_ELF\n"
    15431610                "    add      x23, x23, PAGEOFF(g_apfnImports)\n"
     1611                "#else\n"
     1612                "    ldr      x23, [x23, PAGEOFF(g_apfnImports)]\n"
     1613                "#endif\n"
    15441614                "Lexplicit_load_next_import:\n"
    15451615                "    ldr     x0, [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