- Timestamp:
- Mar 20, 2025 5:25:30 PM (8 weeks ago)
- svn:sync-xref-src-repo-rev:
- 168082
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/bldprogs/VBoxDef2LazyLoad.cpp ¶
r108510 r108669 1132 1132 ".globl NAME(%s)\n" 1133 1133 "NAME(%s):\n" 1134 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1135 " adrp x9, PAGE_GOT(NAME(g_pfn%s))\n" 1136 " ldr x9, [x9, PAGEOFF_GOT(NAME(g_pfn%s))]\n" 1137 "#else\n" 1134 1138 " adrp x9, PAGE(NAME(g_pfn%s))\n" 1135 1139 " ldr x9, [x9, PAGEOFF(NAME(g_pfn%s))]\n" 1140 "#endif\n" 1136 1141 " br x9\n", 1137 pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm); 1142 pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm, 1143 pExp->pszExportedNm, pExp->pszExportedNm); 1138 1144 else 1139 1145 fprintf(pOutput, … … 1141 1147 ".globl NAME(LazyGetPtr_%s)\n" 1142 1148 "NAME(LazyGetPtr_%s):\n" 1149 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1150 " adrp x9, PAGE_GOT(NAME(g_LazyPtr_%s))\n" 1151 " ldr x9, [x9, PAGEOFF_GOT(NAME(g_LazyPtr_%s))]\n" 1152 "#else\n" 1143 1153 " adrp x9, PAGE(NAME(g_LazyPtr_%s))\n" 1144 1154 " ldr x9, [x9, PAGEOFF(NAME(g_LazyPtr_%s))]\n" 1155 "#endif\n" 1145 1156 " cmp x9, #0\n" 1146 1157 " b.eq ___LazyLoad___%s\n" 1147 1158 " mov x0, x9\n" 1148 1159 " ret\n", 1149 pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm, pExp->pszExportedNm); 1160 pExp->pszExportedNm, pExp->pszExportedNm, 1161 pExp->pszExportedNm, pExp->pszExportedNm, 1162 pExp->pszExportedNm, pExp->pszExportedNm, 1163 pExp->pszExportedNm); 1150 1164 fprintf(pOutput, 1151 1165 "ENDCODE\n" … … 1227 1241 "BEGINCODE\n" 1228 1242 ".p2align 3\n"); 1243 1229 1244 for (PMYEXPORT pExp = g_pExpHead; pExp; pExp = pExp->pNext) 1230 1245 { 1246 const char *pszPrefix = !pExp->fData ? "g_pfn" : "g_LazyPtr_"; 1247 1231 1248 if (!pExp->fNoName) 1232 1249 fprintf(pOutput, 1233 1250 "___LazyLoad___%s:\n" 1251 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1252 " adrp x9, PAGE_GOT(g_sz%s)\n" 1253 " ldr x9, [x9, PAGEOFF_GOT(g_sz%s)]\n" 1254 " adrp x10, PAGE_GOT(NAME(%s%s))\n" 1255 " ldr x10, [x10, PAGEOFF_GOT(NAME(%s%s))]\n" 1256 "#else\n" 1234 1257 " adrp x9, PAGE(g_sz%s)\n" 1235 1258 " add x9, x9, PAGEOFF(g_sz%s)\n" 1236 1259 " adrp x10, PAGE(NAME(%s%s))\n" 1237 1260 " add x10, x10, PAGEOFF(NAME(%s%s))\n" 1261 "#endif\n" 1238 1262 " mov x16, x30\n" 1239 1263 " bl LazyLoadResolver\n" 1240 1264 " mov x30, x16\n" 1241 1265 , pExp->pszExportedNm, 1266 /* #if defined(ASM_FORMAT_ELF) && defined(PIC) */ 1242 1267 pExp->pszExportedNm, pExp->pszExportedNm, 1243 !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm, 1244 !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm); 1268 pszPrefix, pExp->pszExportedNm, 1269 pszPrefix, pExp->pszExportedNm, 1270 /* #else */ 1271 pExp->pszExportedNm, pExp->pszExportedNm, 1272 pszPrefix, pExp->pszExportedNm, 1273 pszPrefix, pExp->pszExportedNm); 1245 1274 else 1246 1275 fprintf(pOutput, 1247 1276 "___LazyLoad___%s:\n" 1248 1277 " movk w9, #%u\n" 1278 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1279 " adrp x10, PAGE_GOT(NAME(%s%s))\n" 1280 " ldr x10, [x10, PAGEOFF_GOT(NAME(%s%s))]\n" 1281 "#else\n" 1249 1282 " adrp x10, PAGE(NAME(%s%s))\n" 1250 1283 " add x10, x10, PAGEOFF(NAME(%s%s))\n" 1284 "#endif\n" 1251 1285 , pExp->pszExportedNm, 1252 1286 pExp->uOrdinal, 1253 !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm, 1254 !pExp->fData ? "g_pfn" : "g_LazyPtr_", pExp->pszExportedNm); 1287 /* #if defined(ASM_FORMAT_ELF) && defined(PIC) */ 1288 pszPrefix, pExp->pszExportedNm, 1289 pszPrefix, pExp->pszExportedNm, 1290 /* #else */ 1291 pszPrefix, pExp->pszExportedNm, 1292 pszPrefix, pExp->pszExportedNm); 1255 1293 if (!pExp->fData) 1256 1294 fprintf(pOutput, " b NAME(%s)\n", pExp->pszExportedNm); … … 1331 1369 "\n" 1332 1370 " /* Get the module handle and call RTLdrGetSymbol(RTLDRMOD hLdrMod, const char *pszSymbol, void **ppvValue) */\n" 1371 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1372 " adrp x0, PAGE_GOT(g_hMod)\n" 1373 " ldr x0, [x0, PAGEOFF_GOT(g_hMod)]\n" 1374 "#else\n" 1333 1375 " adrp x0, PAGE(g_hMod)\n" 1334 1376 " ldr x0, [x0, PAGEOFF(g_hMod)]\n" 1377 "#endif\n" 1335 1378 " cmp x0, #0\n" 1336 1379 " b.ne Lloaded\n" … … 1346 1389 "Lbadsym: /* Call sRTAssertMsg2Weak. Variadic (...) arguments are passed on the stack it seems. */\n" 1347 1390 " mov x3, x0\n" 1391 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1392 " adrp x2, PAGE_GOT(g_szLibrary)\n" 1393 " ldr x2, [x2, PAGEOFF_GOT(g_szLibrary)]\n" 1394 "#else\n" 1348 1395 " adrp x2, PAGE(g_szLibrary)\n" 1349 1396 " add x2, x2, PAGEOFF(g_szLibrary)\n" 1397 "#endif\n" 1350 1398 " mov x1, x19\n" 1399 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1400 " adrp x0, PAGE_GOT(g_szFailLoadFmt)\n" 1401 " ldr x0, [x0, PAGEOFF_GOT(g_szFailLoadFmt)]\n" 1402 "#else\n" 1351 1403 " adrp x0, PAGE(g_szFailLoadFmt)\n" 1352 1404 " add x0, x0, PAGEOFF(g_szFailLoadFmt)\n" 1405 "#endif\n" 1353 1406 " stp x1, x2, [sp]\n" 1354 1407 " str x3, [sp, #16]\n" … … 1417 1470 " mov x3, #0\n" 1418 1471 " mov x2, #0\n" 1472 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1473 " adrp x1, PAGE_GOT(g_hMod)\n" 1474 " ldr x1, [x1, PAGEOFF_GOT(g_hMod)]\n" 1475 " adrp x0, PAGE_GOT(g_szLibrary)\n" 1476 " ldr x0, [x0, PAGEOFF_GOT(g_szLibrary)]\n" 1477 "#else\n" 1419 1478 " adrp x1, PAGE(g_hMod)\n" 1420 1479 " add x1, x1, PAGEOFF(g_hMod)\n" 1421 1480 " adrp x0, PAGE(g_szLibrary)\n" 1422 1481 " add x0, x0, PAGEOFF(g_szLibrary)\n" 1482 "#endif\n" 1423 1483 " bl NAME(SUPR3HardenedLdrLoadAppPriv)\n"); 1424 1484 else 1425 1485 fprintf(pOutput, 1426 1486 " /* Call RTLdrLoadSystem(const char *pszFilename, bool fNoUnload, PRTLDRMOD phLdrMod); */\n" 1487 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1488 " adrp x2, PAGE_GOT(g_hMod)\n" 1489 " ldr x2, [x2, PAGEOFF_GOT(g_hMod)]\n" 1490 "#else\n" 1427 1491 " adrp x2, PAGE(g_hMod)\n" 1428 1492 " add x2, x2, PAGEOFF(g_hMod)\n" 1493 "#endif\n" 1429 1494 " mov x1, #1\n" 1495 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1496 " adrp x0, PAGE_GOT(g_szLibrary)\n" 1497 " ldr x0, [x0, PAGEOFF_GOT(g_szLibrary)]\n" 1498 "#else\n" 1430 1499 " adrp x0, PAGE(g_szLibrary)\n" 1431 1500 " add x0, x0, PAGEOFF(g_szLibrary)\n" 1501 "#endif\n" 1432 1502 " bl NAME(RTLdrLoadSystem)\n"); 1433 1503 … … 1438 1508 "Lbadload: /* Call sRTAssertMsg2Weak. Variadic (...) arguments are passed on the stack it seems. */\n" 1439 1509 " mov x2, x0\n" 1510 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1511 " adrp x1, PAGE_GOT(g_szLibrary)\n" 1512 " ldr x1, [x1, PAGEOFF_GOT(g_szLibrary)]\n" 1513 " adrp x0, PAGE_GOT(g_szFailResolveFmt)\n" 1514 " ldr x0, [x0, PAGEOFF_GOT(g_szFailResolveFmt)]\n" 1515 "#else\n" 1440 1516 " adrp x1, PAGE(g_szLibrary)\n" 1441 1517 " add x1, x1, PAGEOFF(g_szLibrary)\n" 1442 1518 " adrp x0, PAGE(g_szFailResolveFmt)\n" 1443 1519 " add x0, x0, PAGEOFF(g_szFailResolveFmt)\n" 1520 "#endif\n" 1444 1521 " stp x1, x2, [sp]\n" 1445 1522 " bl NAME(RTAssertMsg2Weak)\n" … … 1498 1575 " * Is the module already loaded?\n" 1499 1576 " */\n" 1577 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1578 " adrp x0, PAGE_GOT(g_hMod)\n" 1579 " ldr x0, [x0, PAGEOFF_GOT(g_hMod)]\n" 1580 "#else\n" 1500 1581 " adrp x0, PAGE(g_hMod)\n" 1501 1582 " ldr x0, [x0, PAGEOFF(g_hMod)]\n" 1583 "#endif\n" 1502 1584 " cmp x0, #0\n" 1503 1585 " b.ne Lexplicit_loaded_module\n" … … 1514 1596 " mov x3, x21\n" 1515 1597 " mov x2, #0\n" 1598 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1599 " adrp x1, PAGE_GOT(g_hMod)\n" 1600 " ldr x1, [x1, PAGEOFF_GOT(g_hMod)]\n" 1601 " adrp x0, PAGE_GOT(g_szLibrary)\n" 1602 " ldr x0, [x0, PAGEOFF_GOT(g_szLibrary)]\n" 1603 "#else\n" 1516 1604 " adrp x1, PAGE(g_hMod)\n" 1517 1605 " add x1, x1, PAGEOFF(g_hMod)\n" 1518 1606 " adrp x0, PAGE(g_szLibrary)\n" 1519 1607 " add x0, x0, PAGEOFF(g_szLibrary)\n" 1608 "#endif\n" 1520 1609 " bl NAME(SUPR3HardenedLdrLoadAppPriv)\n"); 1521 1610 else 1522 1611 fprintf(pOutput, 1523 1612 " /* Call RTLdrLoadSystem(const char *pszFilename, bool fNoUnload, PRTLDRMOD phLdrMod); */\n" 1613 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1614 " adrp x2, PAGE_GOT(g_hMod)\n" 1615 " ldr x2, [x2, PAGEOFF_GOT(g_hMod)]\n" 1616 "#else\n" 1524 1617 " adrp x2, PAGE(g_hMod)\n" 1525 1618 " add x2, x2, PAGEOFF(g_hMod)\n" 1619 "#endif\n" 1526 1620 " mov x1, #1\n" 1621 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1622 " adrp x0, PAGE_GOT(g_szLibrary)\n" 1623 " ldr x0, [x0, PAGEOFF_GOT(g_szLibrary)]\n" 1624 "#else\n" 1527 1625 " adrp x0, PAGE(g_szLibrary)\n" 1528 1626 " add x0, x0, PAGEOFF(g_szLibrary)\n" 1627 "#endif\n" 1529 1628 " bl NAME(RTLdrLoadSystem)\n"); 1530 1629 fprintf(pOutput, … … 1541 1640 " b.eq Lexplicit_load_return\n" 1542 1641 "\n" 1642 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1643 " adrp x22, PAGE_GOT(g_szzNames)\n" 1644 " ldr x22, [x22, PAGEOFF_GOT(g_szzNames)]\n" 1645 " adrp x23, PAGE_GOT(g_apfnImports)\n" 1646 " ldr x23, [x23, PAGEOFF_GOT(g_apfnImports)]\n" 1647 "#else\n" 1543 1648 " adrp x22, PAGE(g_szzNames)\n" 1544 1649 " add x22, x22, PAGEOFF(g_szzNames)\n" 1545 1650 " adrp x23, PAGE(g_apfnImports)\n" 1546 1651 " add x23, x23, PAGEOFF(g_apfnImports)\n" 1652 "#endif\n" 1547 1653 "Lexplicit_load_next_import:\n" 1548 1654 " ldr x0, [x23]\n" … … 1551 1657 "\n" 1552 1658 " /* Get the module handle and call RTLdrGetSymbol(RTLDRMOD hLdrMod, const char *pszSymbol, void **ppvValue) */\n" 1659 "#if defined(ASM_FORMAT_ELF) && defined(PIC)\n" 1660 " adrp x0, PAGE_GOT(g_hMod)\n" 1661 " ldr x0, [x0, PAGEOFF_GOT(g_hMod)]\n" 1662 "#else\n" 1553 1663 " adrp x0, PAGE(g_hMod)\n" 1554 1664 " ldr x0, [x0, PAGEOFF(g_hMod)]\n" 1665 "#endif\n" 1555 1666 " mov x1, x22\n" 1556 1667 " mov x2, x23\n"
Note:
See TracChangeset
for help on using the changeset viewer.