Адаптирую данный стресс-тест системных вызовов scrashme под нестандартную архитектру. Для более эффективного тестирования в данном тесте системным вызовам подаются аргументы, внешне выглядищие валидными(за это отвечают файлы sanitise*). В частности для системного вызова mremap производиться некое выравнивание нового значения(изначально случайного) размера виртуальной памяти при помощи некой архитектурозависимой константы TASK_SIZE.
#ifdef __x86_64__
#define TASK_SIZE (0x800000000000UL - 4096)
#endif
#ifdef __i386__
#define PAGE_OFFSET 0xC0000000
#define TASK_SIZE (PAGE_OFFSET)
/*
* Alternative possibilities for PAGE_OFFSET:
* default 0xB0000000 if VMSPLIT_3G_OPT
* default 0x78000000 if VMSPLIT_2G
* default 0x40000000 if VMSPLIT_1G
*/
#endif
#ifdef __powerpc__
#define PAGE_OFFSET 0xC0000000
#define TASK_SIZE (PAGE_OFFSET)
#endif
#ifdef __ia64__
#define PAGE_OFFSET 0xe000000000000000
#define TASK_SIZE 0xa000000000000000
#endif
#ifdef __sparc__
#ifdef __arch64__
#define TASK_SIZE ~0UL
#else
#define TASK_SIZE 0xF0000000UL
#endif
#endif
....
....
void sanitise_mremap(
unsigned long *addr,
__unused unsigned long *old_len,
unsigned long *new_len,
unsigned long *flags,
unsigned long *new_addr,
__unused unsigned long *a6)
{
unsigned long mask = ~(page_size-1);
int i;
*flags = rand() & (MREMAP_FIXED | MREMAP_MAYMOVE);
*addr &= mask;
if (!*new_len)
*new_len = rand();
i=0;
if (*flags & MREMAP_FIXED) {
*flags &= ~MREMAP_MAYMOVE;
*new_len &= TASK_SIZE-*new_len;
....