Revision 61a8c4ec tests/test-i386.c

b/tests/test-i386.c
1625 1625
        printf("smc_code2(%d) = %d\n", i, smc_code2(i));
1626 1626
    }
1627 1627
}
1628
    
1628

  
1629
int enter_stack[4096];
1630

  
1631
#define TEST_ENTER(size, stack_type, level)\
1632
{\
1633
    int esp_save, esp_val, ebp_val, ebp_save, i;\
1634
    stack_type *ptr, *stack_end, *stack_ptr;\
1635
    memset(enter_stack, 0, sizeof(enter_stack));\
1636
    stack_end = stack_ptr = (stack_type *)(enter_stack + 4096);\
1637
    ebp_val = (long)stack_ptr;\
1638
    for(i=1;i<=32;i++)\
1639
       *--stack_ptr = i;\
1640
    esp_val = (long)stack_ptr;\
1641
    asm("movl %%esp, %[esp_save]\n"\
1642
        "movl %%ebp, %[ebp_save]\n"\
1643
        "movl %[esp_val], %%esp\n"\
1644
        "movl %[ebp_val], %%ebp\n"\
1645
        "enter" size " $12, $" #level "\n"\
1646
        "movl %%esp, %[esp_val]\n"\
1647
        "movl %%ebp, %[ebp_val]\n"\
1648
        "movl %[esp_save], %%esp\n"\
1649
        "movl %[ebp_save], %%ebp\n"\
1650
        : [esp_save] "=r" (esp_save),\
1651
        [ebp_save] "=r" (ebp_save),\
1652
        [esp_val] "=r" (esp_val),\
1653
        [ebp_val] "=r" (ebp_val)\
1654
        :  "[esp_val]" (esp_val),\
1655
        "[ebp_val]" (ebp_val));\
1656
    printf("level=%d:\n", level);\
1657
    printf("esp_val=0x%08lx\n", esp_val - (long)stack_end);\
1658
    printf("ebp_val=0x%08lx\n", ebp_val - (long)stack_end);\
1659
    for(ptr = (stack_type *)esp_val; ptr < stack_end; ptr++)\
1660
        printf("%08x\n", ptr[0]);\
1661
}
1662

  
1663
static void test_enter(void)
1664
{
1665
    TEST_ENTER("l", uint32_t, 0);
1666
    TEST_ENTER("l", uint32_t, 1);
1667
    TEST_ENTER("l", uint32_t, 2);
1668
    TEST_ENTER("l", uint32_t, 31);
1669

  
1670
    TEST_ENTER("w", uint16_t, 0);
1671
    TEST_ENTER("w", uint16_t, 1);
1672
    TEST_ENTER("w", uint16_t, 2);
1673
    TEST_ENTER("w", uint16_t, 31);
1674
}
1675

  
1676

  
1629 1677
static void *call_end __init_call = NULL;
1630 1678

  
1631 1679
int main(int argc, char **argv)
......
1653 1701
    test_exceptions();
1654 1702
    test_self_modifying_code();
1655 1703
    test_single_step();
1704
    test_enter();
1656 1705
    return 0;
1657 1706
}

Also available in: Unified diff