Example #1
0
INT debug_mem_fatal_error(INT bugId, VOID *ptr)
{
    ChipInfo *info;
    MemBugInfo bugInfo;
    ULONG size, start;
    ULONG addr = (ULONG)ptr;

    if((CORRUPTED_CHIP != bugId) &&
        (CORRUPTED_MEM != bugId) &&
        (SELF_OVERWRITE != bugId))
        return bugId;

    bugInfo.bugID = bugId;

    info = &(bugInfo.suspect);
    get_chip_info(addr, info);

    if(SELF_OVERWRITE == bugId)
    {
        addr += info->chipSize;
        get_chip_info(addr, &(bugInfo.victim));
        goto USR_ERR_HANDLER;
    }

    get_chip_info(addr, &(bugInfo.victim));

    do{
        size = info->chipSize;
        start = info->pageAddr;
        for(addr -= size; start <= addr; addr -= size)
        {
            if(!mem_corrupted(info->heapId, (VOID*)addr))
            {
                info->ptr = (VOID*)addr;
                break;
            }
        }
        if(start <= addr) break;

        get_chip_info(start - PAGE_SIZE, info);
        addr = info->pageAddr;
        addr += (info->chipSize * info->pageChips);
    }while(addr);

USR_ERR_HANDLER:
    find_maps((ULONG)ptr, &(bugInfo.mapStart), &(bugInfo.mapEnd));

    return record_mem_fatal_error(&bugInfo);
}
Example #2
0
File: map.c Project: caomw/grass
void init_map(void)
{
    SYMBOL *sym;
    int i;

    for (i = 0; mf[i].name; i++) {
	sym = putsym(mf[i].name);
	sym->type = sym->itype = st_mfunc;
	sym->v.p = mf[i].func;
	sym->proto = mf[i].proto;
	sym->rettype = st_map;
    }

    find_maps();
}