|
Packit |
b1f7ae |
/*
|
|
Packit |
b1f7ae |
* Copyright (c) 2016-2017, Intel Corporation
|
|
Packit |
b1f7ae |
*
|
|
Packit |
b1f7ae |
* Redistribution and use in source and binary forms, with or without
|
|
Packit |
b1f7ae |
* modification, are permitted provided that the following conditions are met:
|
|
Packit |
b1f7ae |
*
|
|
Packit |
b1f7ae |
* * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
b1f7ae |
* this list of conditions and the following disclaimer.
|
|
Packit |
b1f7ae |
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
Packit |
b1f7ae |
* this list of conditions and the following disclaimer in the documentation
|
|
Packit |
b1f7ae |
* and/or other materials provided with the distribution.
|
|
Packit |
b1f7ae |
* * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
b1f7ae |
* may be used to endorse or promote products derived from this software
|
|
Packit |
b1f7ae |
* without specific prior written permission.
|
|
Packit |
b1f7ae |
*
|
|
Packit |
b1f7ae |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
b1f7ae |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
b1f7ae |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
b1f7ae |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
Packit |
b1f7ae |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
Packit |
b1f7ae |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
Packit |
b1f7ae |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
Packit |
b1f7ae |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
Packit |
b1f7ae |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
Packit |
b1f7ae |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit |
b1f7ae |
* POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
b1f7ae |
*/
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#include "pt_image_section_cache.h"
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#include "ptunit_threads.h"
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#include "intel-pt.h"
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#include <stdlib.h>
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
struct pt_section {
|
|
Packit |
b1f7ae |
/* The filename. We only support string literals for testing. */
|
|
Packit |
b1f7ae |
const char *filename;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The file offset and size. */
|
|
Packit |
b1f7ae |
uint64_t offset;
|
|
Packit |
b1f7ae |
uint64_t size;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The file content. */
|
|
Packit |
b1f7ae |
uint8_t content[0x10];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The use count. */
|
|
Packit |
b1f7ae |
int ucount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The map count. */
|
|
Packit |
b1f7ae |
int mcount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
/* A lock protecting this section. */
|
|
Packit |
b1f7ae |
mtx_t lock;
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
};
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
struct pt_section *pt_mk_section(const char *filename, uint64_t offset,
|
|
Packit |
b1f7ae |
uint64_t size)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = malloc(sizeof(*section));
|
|
Packit |
b1f7ae |
if (section) {
|
|
Packit |
b1f7ae |
uint8_t idx;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section->filename = filename;
|
|
Packit |
b1f7ae |
section->offset = offset;
|
|
Packit |
b1f7ae |
section->size = size;
|
|
Packit |
b1f7ae |
section->ucount = 1;
|
|
Packit |
b1f7ae |
section->mcount = 0;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (idx = 0; idx < sizeof(section->content); ++idx)
|
|
Packit |
b1f7ae |
section->content[idx] = idx;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = mtx_init(§ion->lock, mtx_plain);
|
|
Packit |
b1f7ae |
if (errcode != thrd_success) {
|
|
Packit |
b1f7ae |
free(section);
|
|
Packit |
b1f7ae |
section = NULL;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return section;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static int pt_section_lock(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = mtx_lock(§ion->lock);
|
|
Packit |
b1f7ae |
if (errcode != thrd_success)
|
|
Packit |
b1f7ae |
return -pte_bad_lock;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static int pt_section_unlock(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = mtx_unlock(§ion->lock);
|
|
Packit |
b1f7ae |
if (errcode != thrd_success)
|
|
Packit |
b1f7ae |
return -pte_bad_lock;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
int pt_section_get(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode, ucount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_lock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ucount = ++section->ucount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_unlock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!ucount)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
int pt_section_put(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode, ucount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_lock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ucount = --section->ucount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_unlock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!ucount) {
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
mtx_destroy(§ion->lock);
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
free(section);
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
int pt_section_map(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode, mcount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_lock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
mcount = ++section->mcount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_unlock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (mcount <= 0)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
int pt_section_unmap(struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode, mcount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_lock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
mcount = --section->mcount;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_unlock(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (mcount < 0)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
const char *pt_section_filename(const struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return NULL;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return section->filename;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
uint64_t pt_section_offset(const struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return 0ull;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return section->offset;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
uint64_t pt_section_size(const struct pt_section *section)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
if (!section)
|
|
Packit |
b1f7ae |
return 0ull;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return section->size;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
int pt_section_read(const struct pt_section *section, uint8_t *buffer,
|
|
Packit |
b1f7ae |
uint16_t size, uint64_t offset)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
uint64_t begin, end, max;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (!section || !buffer)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
begin = offset;
|
|
Packit |
b1f7ae |
end = begin + size;
|
|
Packit |
b1f7ae |
max = sizeof(section->content);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (max <= begin)
|
|
Packit |
b1f7ae |
return -pte_nomap;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (max < end)
|
|
Packit |
b1f7ae |
end = max;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (end <= begin)
|
|
Packit |
b1f7ae |
return -pte_invalid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
memcpy(buffer, §ion->content[begin], (size_t) (end - begin));
|
|
Packit |
b1f7ae |
return (int) (end - begin);
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
enum {
|
|
Packit |
b1f7ae |
/* The number of test sections. */
|
|
Packit |
b1f7ae |
num_sections = 8,
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
num_threads = 8,
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
num_iterations = 0x1000
|
|
Packit |
b1f7ae |
};
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
struct iscache_fixture {
|
|
Packit |
b1f7ae |
/* Threading support. */
|
|
Packit |
b1f7ae |
struct ptunit_thrd_fixture thrd;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The image section cache under test. */
|
|
Packit |
b1f7ae |
struct pt_image_section_cache iscache;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* A bunch of test sections. */
|
|
Packit |
b1f7ae |
struct pt_section *section[num_sections];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The test fixture initialization and finalization functions. */
|
|
Packit |
b1f7ae |
struct ptunit_result (*init)(struct iscache_fixture *);
|
|
Packit |
b1f7ae |
struct ptunit_result (*fini)(struct iscache_fixture *);
|
|
Packit |
b1f7ae |
};
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result dfix_init(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int idx;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_test(ptunit_thrd_init, &cfix->thrd);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
memset(cfix->section, 0, sizeof(cfix->section));
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (idx = 0; idx < num_sections; ++idx) {
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = pt_mk_section("some-filename",
|
|
Packit |
b1f7ae |
idx % 3 == 0 ? 0x1000 : 0x2000,
|
|
Packit |
b1f7ae |
idx % 2 == 0 ? 0x1000 : 0x2000);
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix->section[idx] = section;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result cfix_init(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_test(dfix_init, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_init(&cfix->iscache, NULL);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result cfix_fini(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int idx, errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_test(ptunit_thrd_fini, &cfix->thrd);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (idx = 0; idx < cfix->thrd.nthreads; ++idx)
|
|
Packit |
b1f7ae |
ptu_int_eq(cfix->thrd.result[idx], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
pt_iscache_fini(&cfix->iscache);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (idx = 0; idx < num_sections; ++idx) {
|
|
Packit |
b1f7ae |
ptu_int_eq(cfix->section[idx]->ucount, 1);
|
|
Packit |
b1f7ae |
ptu_int_eq(cfix->section[idx]->mcount, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_put(cfix->section[idx]);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result init_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_init(NULL, NULL);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result fini_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
pt_iscache_fini(NULL);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result name_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
const char *name;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
name = pt_iscache_name(NULL);
|
|
Packit |
b1f7ae |
ptu_null(name);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_image_section_cache iscache;
|
|
Packit |
b1f7ae |
struct pt_section section;
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_add(NULL, §ion, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_add(&iscache, NULL, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_find(NULL, "filename", 0ull, 0ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result lookup_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_image_section_cache iscache;
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t laddr;
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(NULL, §ion, &laddr, 0);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&iscache, NULL, &laddr, 0);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&iscache, §ion, NULL, 0);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result clear_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_clear(NULL);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result free_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
pt_iscache_free(NULL);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_file_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_image_section_cache iscache;
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_add_file(NULL, "filename", 0ull, 0ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_invalid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_add_file(&iscache, NULL, 0ull, 0ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_invalid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result read_null(void)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_image_section_cache iscache;
|
|
Packit |
b1f7ae |
uint8_t buffer;
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_read(NULL, &buffer, sizeof(buffer), 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_invalid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_read(&iscache, NULL, sizeof(buffer), 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_invalid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_read(&iscache, &buffer, 0ull, 1, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_invalid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result init_fini(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
(void) cfix;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The actual init and fini calls are in cfix_init() and cfix_fini(). */
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result name(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
const char *name;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
pt_iscache_init(&cfix->iscache, "iscache-name");
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
name = pt_iscache_name(&cfix->iscache);
|
|
Packit |
b1f7ae |
ptu_str_eq(name, "iscache-name");
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result name_none(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
const char *name;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
pt_iscache_init(&cfix->iscache, NULL);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
name = pt_iscache_name(&cfix->iscache);
|
|
Packit |
b1f7ae |
ptu_null(name);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The cache gets a reference on success. */
|
|
Packit |
b1f7ae |
ptu_int_eq(cfix->section[0]->ucount, 2);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The added section must be implicitly put in pt_iscache_fini. */
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_no_name(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section section;
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
memset(§ion, 0, sizeof(section));
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_add(&cfix->iscache, §ion, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_file(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename,
|
|
Packit |
b1f7ae |
section->offset, section->size, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, isid);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_empty(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename,
|
|
Packit |
b1f7ae |
section->offset, section->size, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_bad_filename(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, "bad-filename",
|
|
Packit |
b1f7ae |
section->offset, section->size, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_null_filename(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_find(&cfix->iscache, NULL, 0ull, 0ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_internal);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_bad_offset(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename, 0ull,
|
|
Packit |
b1f7ae |
section->size, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_bad_size(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename,
|
|
Packit |
b1f7ae |
section->offset, 0ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result find_bad_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename,
|
|
Packit |
b1f7ae |
section->offset, section->size, 1ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result lookup(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t laddr;
|
|
Packit |
b1f7ae |
int errcode, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion, &laddr, isid);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
ptu_ptr_eq(section, cfix->section[0]);
|
|
Packit |
b1f7ae |
ptu_uint_eq(laddr, 0ull);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_put(section);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result lookup_bad_isid(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t laddr;
|
|
Packit |
b1f7ae |
int errcode, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion, &laddr, 0);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_bad_image);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion, &laddr, -isid);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_bad_image);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion, &laddr, isid + 1);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_bad_image);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result clear_empty(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_clear(&cfix->iscache);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result clear_find(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
int errcode, found, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
section = cfix->section[0];
|
|
Packit |
b1f7ae |
ptu_ptr(section);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, section, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_clear(&cfix->iscache);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
found = pt_iscache_find(&cfix->iscache, section->filename,
|
|
Packit |
b1f7ae |
section->offset, section->size, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(found, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result clear_lookup(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t laddr;
|
|
Packit |
b1f7ae |
int errcode, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_clear(&cfix->iscache);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion, &laddr, isid);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, -pte_bad_image);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_twice(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The second add should be ignored. */
|
|
Packit |
b1f7ae |
ptu_int_eq(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_same(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix->section[1]->offset = cfix->section[0]->offset;
|
|
Packit |
b1f7ae |
cfix->section[1]->size = cfix->section[0]->size;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add(&cfix->iscache, cfix->section[1], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The second add should be ignored. */
|
|
Packit |
b1f7ae |
ptu_int_eq(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result
|
|
Packit |
b1f7ae |
add_twice_different_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add(&cfix->iscache, cfix->section[0], 1ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must get different identifiers. */
|
|
Packit |
b1f7ae |
ptu_int_ne(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must take two references - one for each entry. */
|
|
Packit |
b1f7ae |
ptu_int_eq(cfix->section[0]->ucount, 3);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result
|
|
Packit |
b1f7ae |
add_same_different_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix->section[1]->offset = cfix->section[0]->offset;
|
|
Packit |
b1f7ae |
cfix->section[1]->size = cfix->section[0]->size;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add(&cfix->iscache, cfix->section[1], 1ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must get different identifiers. */
|
|
Packit |
b1f7ae |
ptu_int_ne(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result
|
|
Packit |
b1f7ae |
add_different_same_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add(&cfix->iscache, cfix->section[0], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add(&cfix->iscache, cfix->section[1], 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must get different identifiers. */
|
|
Packit |
b1f7ae |
ptu_int_ne(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result add_file_same(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* The second add should be ignored. */
|
|
Packit |
b1f7ae |
ptu_int_eq(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result
|
|
Packit |
b1f7ae |
add_file_same_different_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 1ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must get different identifiers. */
|
|
Packit |
b1f7ae |
ptu_int_ne(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result
|
|
Packit |
b1f7ae |
add_file_different_same_laddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int isid[2];
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[0] = pt_iscache_add_file(&cfix->iscache, "name", 0ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[0], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid[1] = pt_iscache_add_file(&cfix->iscache, "name", 1ull, 1ull, 0ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid[1], 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We must get different identifiers. */
|
|
Packit |
b1f7ae |
ptu_int_ne(isid[1], isid[0]);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result read(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
uint8_t buffer[] = { 0xcc, 0xcc, 0xcc };
|
|
Packit |
b1f7ae |
int status, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0xa000ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
status = pt_iscache_read(&cfix->iscache, buffer, 2ull, isid, 0xa008ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(status, 2);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[0], 0x8);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[1], 0x9);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[2], 0xcc);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result read_truncate(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
uint8_t buffer[] = { 0xcc, 0xcc };
|
|
Packit |
b1f7ae |
int status, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0xa000ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
status = pt_iscache_read(&cfix->iscache, buffer, sizeof(buffer), isid,
|
|
Packit |
b1f7ae |
0xa00full);
|
|
Packit |
b1f7ae |
ptu_int_eq(status, 1);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[0], 0xf);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[1], 0xcc);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result read_bad_vaddr(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
uint8_t buffer[] = { 0xcc };
|
|
Packit |
b1f7ae |
int status, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0xa000ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
status = pt_iscache_read(&cfix->iscache, buffer, 1ull, isid, 0xb000ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(status, -pte_nomap);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[0], 0xcc);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result read_bad_isid(struct iscache_fixture *cfix)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
uint8_t buffer[] = { 0xcc };
|
|
Packit |
b1f7ae |
int status, isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache, cfix->section[0], 0xa000ull);
|
|
Packit |
b1f7ae |
ptu_int_gt(isid, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
status = pt_iscache_read(&cfix->iscache, buffer, 1ull, isid + 1,
|
|
Packit |
b1f7ae |
0xa000ull);
|
|
Packit |
b1f7ae |
ptu_int_eq(status, -pte_bad_image);
|
|
Packit |
b1f7ae |
ptu_uint_eq(buffer[0], 0xcc);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static int worker_add(void *arg)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct iscache_fixture *cfix;
|
|
Packit |
b1f7ae |
int it;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix = arg;
|
|
Packit |
b1f7ae |
if (!cfix)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (it = 0; it < num_iterations; ++it) {
|
|
Packit |
b1f7ae |
uint64_t laddr;
|
|
Packit |
b1f7ae |
int sec;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
laddr = 0x1000ull * (it % 23);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (sec = 0; sec < num_sections; ++sec) {
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t addr;
|
|
Packit |
b1f7ae |
int isid, errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add(&cfix->iscache,
|
|
Packit |
b1f7ae |
cfix->section[sec], laddr);
|
|
Packit |
b1f7ae |
if (isid < 0)
|
|
Packit |
b1f7ae |
return isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion,
|
|
Packit |
b1f7ae |
&addr, isid);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (laddr != addr)
|
|
Packit |
b1f7ae |
return -pte_noip;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
/* We may not get the image we added but the image we
|
|
Packit |
b1f7ae |
* get must have similar attributes.
|
|
Packit |
b1f7ae |
*
|
|
Packit |
b1f7ae |
* We're using the same filename string literal for all
|
|
Packit |
b1f7ae |
* sections, though.
|
|
Packit |
b1f7ae |
*/
|
|
Packit |
b1f7ae |
if (section->offset != cfix->section[sec]->offset)
|
|
Packit |
b1f7ae |
return -pte_bad_image;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (section->size != cfix->section[sec]->size)
|
|
Packit |
b1f7ae |
return -pte_bad_image;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_put(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static int worker_add_file(void *arg)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct iscache_fixture *cfix;
|
|
Packit |
b1f7ae |
int it;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix = arg;
|
|
Packit |
b1f7ae |
if (!cfix)
|
|
Packit |
b1f7ae |
return -pte_internal;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (it = 0; it < num_iterations; ++it) {
|
|
Packit |
b1f7ae |
uint64_t offset, size, laddr;
|
|
Packit |
b1f7ae |
int sec;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
offset = num_iterations % 7 == 0 ? 0x1000 : 0x2000;
|
|
Packit |
b1f7ae |
size = num_iterations % 5 == 0 ? 0x1000 : 0x2000;
|
|
Packit |
b1f7ae |
laddr = num_iterations % 3 == 0 ? 0x1000 : 0x2000;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (sec = 0; sec < num_sections; ++sec) {
|
|
Packit |
b1f7ae |
struct pt_section *section;
|
|
Packit |
b1f7ae |
uint64_t addr;
|
|
Packit |
b1f7ae |
int isid, errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
isid = pt_iscache_add_file(&cfix->iscache, "name",
|
|
Packit |
b1f7ae |
offset, size, laddr);
|
|
Packit |
b1f7ae |
if (isid < 0)
|
|
Packit |
b1f7ae |
return isid;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_iscache_lookup(&cfix->iscache, §ion,
|
|
Packit |
b1f7ae |
&addr, isid);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (laddr != addr)
|
|
Packit |
b1f7ae |
return -pte_noip;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (section->offset != offset)
|
|
Packit |
b1f7ae |
return -pte_bad_image;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
if (section->size != size)
|
|
Packit |
b1f7ae |
return -pte_bad_image;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = pt_section_put(section);
|
|
Packit |
b1f7ae |
if (errcode < 0)
|
|
Packit |
b1f7ae |
return errcode;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return 0;
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
static struct ptunit_result stress(struct iscache_fixture *cfix,
|
|
Packit |
b1f7ae |
int (*worker)(void *))
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int errcode;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
#if defined(FEATURE_THREADS)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
int thrd;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
for (thrd = 0; thrd < num_threads; ++thrd)
|
|
Packit |
b1f7ae |
ptu_test(ptunit_thrd_create, &cfix->thrd, worker, cfix);
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
#endif /* defined(FEATURE_THREADS) */
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
errcode = worker(cfix);
|
|
Packit |
b1f7ae |
ptu_int_eq(errcode, 0);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
return ptu_passed();
|
|
Packit |
b1f7ae |
}
|
|
Packit |
b1f7ae |
int main(int argc, char **argv)
|
|
Packit |
b1f7ae |
{
|
|
Packit |
b1f7ae |
struct iscache_fixture cfix, dfix;
|
|
Packit |
b1f7ae |
struct ptunit_suite suite;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
cfix.init = cfix_init;
|
|
Packit |
b1f7ae |
cfix.fini = cfix_fini;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
dfix.init = dfix_init;
|
|
Packit |
b1f7ae |
dfix.fini = cfix_fini;
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
suite = ptunit_mk_suite(argc, argv);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run(suite, init_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, fini_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, name_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, add_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, find_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, lookup_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, clear_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, free_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, add_file_null);
|
|
Packit |
b1f7ae |
ptu_run(suite, read_null);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, name, dfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, name_none, dfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, init_fini, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_no_name, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_file, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_empty, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_bad_filename, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_null_filename, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_bad_offset, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_bad_size, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, find_bad_laddr, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, lookup, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, lookup_bad_isid, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, clear_empty, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, clear_find, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, clear_lookup, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_twice, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_same, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_twice_different_laddr, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_same_different_laddr, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_different_same_laddr, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_file_same, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_file_same_different_laddr, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, add_file_different_same_laddr, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_f(suite, read, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, read_truncate, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, read_bad_vaddr, cfix);
|
|
Packit |
b1f7ae |
ptu_run_f(suite, read_bad_isid, cfix);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptu_run_fp(suite, stress, cfix, worker_add);
|
|
Packit |
b1f7ae |
ptu_run_fp(suite, stress, cfix, worker_add_file);
|
|
Packit |
b1f7ae |
|
|
Packit |
b1f7ae |
ptunit_report(&suite);
|
|
Packit |
b1f7ae |
return suite.nr_fails;
|
|
Packit |
b1f7ae |
}
|