VirtualBox

Changeset 108654 in vbox for trunk/src/VBox/Runtime/testcase


Ignore:
Timestamp:
Mar 20, 2025 2:58:45 PM (6 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168067
Message:

Runtime/testcase/tstRTInlineAsm.cpp: Make it work for hosts where we don't know the host page size when building, bugref:10391

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp

    r106061 r108654  
    6969#include <iprt/test.h>
    7070#include <iprt/time.h>
     71#include <iprt/system.h>
    7172
    7273
     
    24992500    RTTestSub(hTest, "ASMMemFirstMismatchingU8");
    25002501
    2501     uint8_t *pbPage1 = (uint8_t *)RTTestGuardedAllocHead(hTest, PAGE_SIZE);
    2502     uint8_t *pbPage2 = (uint8_t *)RTTestGuardedAllocTail(hTest, PAGE_SIZE);
     2502    size_t const cbPageSize = RTSystemGetPageSize();
     2503    uint8_t *pbPage1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cbPageSize);
     2504    uint8_t *pbPage2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cbPageSize);
    25032505    RTTESTI_CHECK_RETV(pbPage1 && pbPage2);
    25042506
    2505     memset(pbPage1, 0, PAGE_SIZE);
    2506     memset(pbPage2, 0, PAGE_SIZE);
    2507     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0) == NULL);
    2508     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0) == NULL);
    2509     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 1) == pbPage1);
    2510     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 1) == pbPage2);
    2511     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0x87) == pbPage1);
    2512     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0x87) == pbPage2);
    2513     RTTESTI_CHECK(ASMMemIsZero(pbPage1, PAGE_SIZE));
    2514     RTTESTI_CHECK(ASMMemIsZero(pbPage2, PAGE_SIZE));
    2515     RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));
    2516     RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));
    2517     RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0x34));
    2518     RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0x88));
     2507    memset(pbPage1, 0, cbPageSize);
     2508    memset(pbPage2, 0, cbPageSize);
     2509    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0) == NULL);
     2510    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0) == NULL);
     2511    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 1) == pbPage1);
     2512    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 1) == pbPage2);
     2513    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0x87) == pbPage1);
     2514    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0x87) == pbPage2);
     2515    RTTESTI_CHECK(ASMMemIsZero(pbPage1, cbPageSize));
     2516    RTTESTI_CHECK(ASMMemIsZero(pbPage2, cbPageSize));
     2517    RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, cbPageSize, 0));
     2518    RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, cbPageSize, 0));
     2519    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, cbPageSize, 0x34));
     2520    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, cbPageSize, 0x88));
    25192521    unsigned cbSub = 32;
    25202522    while (cbSub-- > 0)
    25212523    {
    2522         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0) == NULL);
    2523         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0) == NULL);
     2524        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0) == NULL);
     2525        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0) == NULL);
    25242526        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0) == NULL);
    25252527        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0) == NULL);
    25262528
    2527         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0x34) == &pbPage1[PAGE_SIZE - cbSub] || !cbSub);
    2528         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0x99) == &pbPage2[PAGE_SIZE - cbSub] || !cbSub);
     2529        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0x34) == &pbPage1[cbPageSize - cbSub] || !cbSub);
     2530        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0x99) == &pbPage2[cbPageSize - cbSub] || !cbSub);
    25292531        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0x42) == pbPage1 || !cbSub);
    25302532        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0x88) == pbPage2 || !cbSub);
    25312533    }
    25322534
    2533     memset(pbPage1, 0xff, PAGE_SIZE);
    2534     memset(pbPage2, 0xff, PAGE_SIZE);
    2535     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xff) == NULL);
    2536     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xff) == NULL);
    2537     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, PAGE_SIZE, 0xfe) == pbPage1);
    2538     RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, PAGE_SIZE, 0xfe) == pbPage2);
    2539     RTTESTI_CHECK(!ASMMemIsZero(pbPage1, PAGE_SIZE));
    2540     RTTESTI_CHECK(!ASMMemIsZero(pbPage2, PAGE_SIZE));
    2541     RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0xff));
    2542     RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0xff));
    2543     RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, PAGE_SIZE, 0));
    2544     RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, PAGE_SIZE, 0));
     2535    memset(pbPage1, 0xff, cbPageSize);
     2536    memset(pbPage2, 0xff, cbPageSize);
     2537    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0xff) == NULL);
     2538    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0xff) == NULL);
     2539    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbPageSize, 0xfe) == pbPage1);
     2540    RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbPageSize, 0xfe) == pbPage2);
     2541    RTTESTI_CHECK(!ASMMemIsZero(pbPage1, cbPageSize));
     2542    RTTESTI_CHECK(!ASMMemIsZero(pbPage2, cbPageSize));
     2543    RTTESTI_CHECK(ASMMemIsAllU8(pbPage1, cbPageSize, 0xff));
     2544    RTTESTI_CHECK(ASMMemIsAllU8(pbPage2, cbPageSize, 0xff));
     2545    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage1, cbPageSize, 0));
     2546    RTTESTI_CHECK(!ASMMemIsAllU8(pbPage2, cbPageSize, 0));
    25452547    cbSub = 32;
    25462548    while (cbSub-- > 0)
    25472549    {
    2548         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0xff) == NULL);
    2549         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0xff) == NULL);
     2550        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0xff) == NULL);
     2551        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0xff) == NULL);
    25502552        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xff) == NULL);
    25512553        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xff) == NULL);
    25522554
    2553         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage1[PAGE_SIZE - cbSub] || !cbSub);
    2554         RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[PAGE_SIZE - cbSub], cbSub, 0xfe) == &pbPage2[PAGE_SIZE - cbSub] || !cbSub);
     2555        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage1[cbPageSize - cbSub], cbSub, 0xfe) == &pbPage1[cbPageSize - cbSub] || !cbSub);
     2556        RTTESTI_CHECK(ASMMemFirstMismatchingU8(&pbPage2[cbPageSize - cbSub], cbSub, 0xfe) == &pbPage2[cbPageSize - cbSub] || !cbSub);
    25552557        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage1, cbSub, 0xfe) == pbPage1 || !cbSub);
    25562558        RTTESTI_CHECK(ASMMemFirstMismatchingU8(pbPage2, cbSub, 0xfe) == pbPage2 || !cbSub);
     
    25652567    size_t const   cbBuf    = 128;
    25662568    uint8_t       *pbBuf1   = pbPage1;
    2567     uint8_t       *pbBuf2   = &pbPage2[PAGE_SIZE - cbBuf]; /* Put it up against the tail guard */
    2568     memset(pbPage1, (uint8_t)~bFiller1, PAGE_SIZE);
    2569     memset(pbPage2, (uint8_t)~bFiller2, PAGE_SIZE);
     2569    uint8_t       *pbBuf2   = &pbPage2[cbPageSize - cbBuf]; /* Put it up against the tail guard */
     2570    memset(pbPage1, (uint8_t)~bFiller1, cbPageSize);
     2571    memset(pbPage2, (uint8_t)~bFiller2, cbPageSize);
    25702572    memset(pbBuf1, bFiller1, cbBuf);
    25712573    memset(pbBuf2, bFiller2, cbBuf);
     
    25832585                size_t const offEnd = offStart + cb;
    25842586                uint8_t bSaved1, bSaved2;
    2585                 if (offEnd < PAGE_SIZE)
     2587                if (offEnd < cbPageSize)
    25862588                {
    25872589                    bSaved1 = pbBuf1[offEnd];
     
    26012603                RTTESTI_CHECK(offNonZero - offStart < cb ? pbRet == &pbBuf2[offNonZero] : pbRet == NULL);
    26022604
    2603                 if (offEnd < PAGE_SIZE)
     2605                if (offEnd < cbPageSize)
    26042606                {
    26052607                    pbBuf1[offEnd] = bSaved1;
     
    26492651    {
    26502652        uint64_t    u64Magic1;
    2651         uint8_t     abPage[PAGE_SIZE - 32];
     2653        uint8_t     abPage[_4K - 32];
    26522654        uint64_t    u64Magic2;
    26532655    } Buf1, Buf2, Buf3;
     
    27132715    {
    27142716        uint64_t    u64Magic1;
    2715         uint32_t    au32Page[PAGE_SIZE / 4];
     2717        uint32_t    au32Page[_4K / 4];
    27162718        uint64_t    u64Magic2;
    27172719    } Buf1;
     
    27192721    {
    27202722        uint64_t    u64Magic1;
    2721         uint32_t    au32Page[(PAGE_SIZE / 4) - 3];
     2723        uint32_t    au32Page[(_4K / 4) - 3];
    27222724        uint64_t    u64Magic2;
    27232725    } Buf2;
     
    27252727    {
    27262728        uint64_t    u64Magic1;
    2727         uint32_t    au32Page[(PAGE_SIZE / 4) - 1];
     2729        uint32_t    au32Page[(_4K / 4) - 1];
    27282730        uint64_t    u64Magic2;
    27292731    } Buf3;
     
    27692771    RTTESTI_CHECK(ASMProbeReadByte(&b) == 42);
    27702772
     2773    size_t const cbPageSize = RTSystemGetPageSize();
    27712774    for (uint32_t cPages = 1; cPages < 16; cPages++)
    27722775    {
    2773         uint8_t *pbBuf1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cPages * PAGE_SIZE);
    2774         uint8_t *pbBuf2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cPages * PAGE_SIZE);
     2776        uint8_t *pbBuf1 = (uint8_t *)RTTestGuardedAllocHead(hTest, cPages * cbPageSize);
     2777        uint8_t *pbBuf2 = (uint8_t *)RTTestGuardedAllocTail(hTest, cPages * cbPageSize);
    27752778        RTTESTI_CHECK_RETV(pbBuf1 && pbBuf2);
    27762779
    2777         memset(pbBuf1, 0xf6, cPages * PAGE_SIZE);
    2778         memset(pbBuf2, 0x42, cPages * PAGE_SIZE);
    2779 
    2780         RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[cPages * PAGE_SIZE - 1]) == 0xf6);
    2781         RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[cPages * PAGE_SIZE - 1]) == 0x42);
     2780        memset(pbBuf1, 0xf6, cPages * cbPageSize);
     2781        memset(pbBuf2, 0x42, cPages * cbPageSize);
     2782
     2783        RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[cPages * cbPageSize - 1]) == 0xf6);
     2784        RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[cPages * cbPageSize - 1]) == 0x42);
    27822785        RTTESTI_CHECK(ASMProbeReadByte(&pbBuf1[0]) == 0xf6);
    27832786        RTTESTI_CHECK(ASMProbeReadByte(&pbBuf2[0]) == 0x42);
Note: See TracChangeset for help on using the changeset viewer.

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