예제 #1
0
	void *__wrap_memalign(size_t a, size_t size)
	{
		void *p;
		if ((SYS_GetArena1Lo() >= MAX_MEM1_ARENA_LO) || size >= MEM2_PRIORITY_SIZE)
		{
			if (a <= 32 && 32 % a == 0)
			{
				p = MEM2_alloc(size);
				if (p != 0) return p;
			}
			return __real_memalign(a, size);
		}
		p = __real_memalign(a, size);
		return p != 0 ? p : MEM2_alloc(size);
	}
예제 #2
0
void *__wrap_memalign(size_t a, size_t size)
{
	void *p;
	if(size >= MEM2_PRIORITY_SIZE)
	{
		if(a <= 32 && 32 % a == 0)
		{
			p = g_mem2gp.allocate(size);
			if (p != 0)
				return p;
		}
		return __real_memalign(a, size);
	}
	p = __real_memalign(a, size);
	if(p != 0 || a > 32 || 32 % a != 0)
		return p;

	return g_mem2gp.allocate(size);
}
예제 #3
0
void *__wrap_memalign(size_t a, size_t size)
{
	void *p;
	if ((SYS_GetArena1Lo() > MAX_MEM1_ARENA_LO) || (g_bigGoesToMem2 && size > MEM2_PRIORITY_SIZE))
	{
		if (a <= 32 && 32 % a == 0)
		{
			p = g_mem2gp.allocate(size);
			if (p != 0) {
				return p;
			}
		}
		return __real_memalign(a, size);
	}
	p = __real_memalign(a, size);
	if (p != 0 || a > 32 || 32 % a != 0) {
		return p;
	}

	return g_mem2gp.allocate(size);
}
예제 #4
0
void* __wrap_memalign( size_t align, size_t size )
{
	LockAlloc();

	void *ptr = __real_memalign( align, size );
	if( ptr == NULL && size > 0 && IsSingleLocked() && g_bMemoryAssert )
	{
		TempLog( "memalign failed: %ubytes(aligned %u)\r\n", size, align );
		MemoryError();
	}

	UnlockAlloc();
	return ptr;
}
예제 #5
0
void * __wrap_memalign(size_t align, size_t size)
{
    u32 lr=(u32)__builtin_return_address(0);

    lock(&lck);
    
    u32 pg=align>PRE_GUARD?align:PRE_GUARD;
    
    size+=pg;
    size+=POST_GUARD;
    
    u8 * p=__real_memalign(align,size);
    
    memset(p,FILL,size);
    
    *(u32*)&p[pg-4]=MAGIC;
    *(size_t*)&p[pg-8]=pg;
    *(size_t*)&p[pg-12]=size;
    *(u32*)&p[pg-16]=lr;
    
    unlock(&lck);
    
    return &p[pg];
}
예제 #6
0
void *MEM1_memalign(unsigned int a, unsigned int s)
{
	return __real_memalign(a, s);
}