Hello all,
It seams that the USB code was taken from the previous version of FILO but never have been tested.
Some symptoms are 1) malloc_diag: alloc: 4208 bytes (8 blocks), free: 61320 bytes (1 blocks) malloc_check: sizes mismatch: 0xa1 vs 0x0 at 00132670 2) dma_to_td: can not find td
Trying to debug it, I discovered the following piece of code:
void *allot2(size_t size, unsigned int alignment) { void *addr; unsigned long addrval; addr=malloc(2*size);
addrval=(unsigned long)addr; addrval+=alignment+1; // 0x12345600 + 0xff + 1 addrval&=~alignment; // 0x12345700 *(void * *)(addrval-sizeof(unsigned long))=addr; return (void *)addrval; }
void forget2(void *mem) { unsigned long addr=(unsigned long)mem; addr-=sizeof(unsigned long); free((void *)(*(unsigned long *)addr)); }
I have 2 questions: if size = 8 and alignment=256, it writes outside malloc allocation, isn't it? What was the meaning of the code?
Thanks