Exemplo n.º 1
0
bool runTest(int * line, const char ** file) {
    bool tests_pass = true;

    do {
        uintptr_t init_sbrk_ptr = (uintptr_t)mbed_sbrk(0);
        uintptr_t ptr;
        ptr = (uintptr_t) mbed_sbrk(TEST_SMALL);
        if(!CHECK_EQ(ptr, (uintptr_t) init_sbrk_ptr, tests_pass, *file, *line)) {
            break;
        }

        ptr = (uintptr_t) mbed_sbrk(TEST_SMALL);
        if(!CHECK_EQ(ptr, init_sbrk_ptr + TEST_SMALL, tests_pass, *file, *line)) {
            break;
        }

        ptr = (uintptr_t) mbed_krbs(TEST_SMALL);
        if(!CHECK_EQ(ptr, (uintptr_t) &__mbed_krbs_start - TEST_SMALL, tests_pass, *file, *line)) {
            break;
        }
        if(!CHECK_EQ(mbed_sbrk_diff, (ptrdiff_t)&__heap_size - 3*TEST_SMALL - (init_sbrk_ptr - (uintptr_t)&__mbed_sbrk_start), tests_pass, *file, *line)) {
            break;
        }


        // Test small increments
        for (unsigned int i = 0; tests_pass && i < TEST_SMALL; i++) {
            ptr = (uintptr_t) mbed_krbs(i);
            if(!CHECK_EQ(0, ptr & (TEST_SMALL - 1), tests_pass, *file, *line)) {
                break;
            }
        }
        for (unsigned int i = 0; tests_pass && i < TEST_SMALL; i++) {
            ptr = (uintptr_t) mbed_sbrk(i);
            if(!CHECK_EQ(0, (uintptr_t) mbed_sbrk_ptr & (TEST_SMALL - 1), tests_pass, *file, *line)) {
                break;
            }
        }

        // Allocate a big block
        ptr = (uintptr_t) mbed_sbrk((ptrdiff_t)&__heap_size);
        if(!CHECK_EQ((intptr_t)ptr, -1, tests_pass, *file, *line)) {
            break;
        }

        ptr = (uintptr_t) mbed_krbs((ptrdiff_t)&__heap_size);
        if(!CHECK_EQ((intptr_t)ptr, -1, tests_pass, *file, *line)) {
            break;
        }

        break;

    } while (0);
    return tests_pass;
}
Exemplo n.º 2
0
void * mbed_ualloc(size_t bytes, UAllocTraits_t traits)
{
    void * ptr = NULL;
    void * caller = (void*) caller_addr();
    if (UALLOC_TEST_TRAITS(traits.flags, UALLOC_TRAITS_NEVER_FREE)) {
        ptr = mbed_krbs(bytes);
        // krbs uses the same semantics as sbrk, so translate a -1 to NULL.
        if (ptr == (void*)-1) {
            ptr = NULL;
        }
        if ((ptr != NULL) && UALLOC_TEST_TRAITS(traits.flags, UALLOC_TRAITS_ZERO_FILL)) {
            memset(ptr, 0, bytes);
        }
    } else if (UALLOC_TEST_TRAITS(traits.flags, UALLOC_TRAITS_ZERO_FILL)) {
        ptr = dlcalloc(1, bytes);
    } else if (!(traits.flags & ~UALLOC_TRAITS_BITMASK)) {
        ptr = dlmalloc(bytes);
    } else if (traits.flags & UALLOC_RESERVED_MASK) {
        ualloc_debug(UALLOC_DEBUG_ERROR, "ua c:%p reserved: %lx\n", caller,
            traits.flags & UALLOC_RESERVED_MASK);
    }

    if(ptr == NULL) {
        ualloc_debug(UALLOC_DEBUG_WARNING, "ua c:%p fail\n", caller);
    } else {
        ualloc_debug(UALLOC_DEBUG_LOG, "ua c:%p m:%p\n", caller, ptr);
    }
    return ptr;
}