Цитата(alx2 @ Oct 26 2011, 13:02)

Я тогда вообще не понимаю, что у Вас происходит... Если линкер загружает mlock.o из библиотеки, значит в вашем проекте присутствует неопределенный символ, имеющийся в mlock.o. Но тогда после удаления mlock.o из библиотеки линкер должен вываливаться с ошибкой "undefined reference to"... Если же символы, содержащиеся в mlock.o проекту не нужны (а так и должно быть, ибо в проекте есть собственные __malloc_lock и __malloc_unlock), какого черта линкер пытался его загружать?...
Может покажете всю команду, которой линкуется ваш проект?
Все линкуется как обычно.
На mlock ссылается сам malloc.
но в исходниках newlib __malloc_lock вызывает __lock_acquire, который определен по умолчанию как
Код
#define __lock_acquire(lock) (_CAST_VOID 0)
#define __lock_acquire_recursive(lock) (_CAST_VOID 0)
то есть символ __malloc_lock в библиотеке есть, но он ничего не делает, только мешает определить свой __malloc_lock.
Поэтому и пришлось выкинуть mlock.o из libc.a, чтоб спокойно определить свои __malloc_lock, который бы защитил кучу в много поточной среде.
После 2ух дней тестов все работает. Уже пишу, поскольку не нашел никакой информации на форуме по использованию
malloc из newlib (и *printf по зависимостям также) из многопоточной среды, надеюсь кому-то поможет.
кстати исправил определение своих символов на :
Код
void __malloc_lock(struct _reent *r)
{
vTaskSuspendAll();
}
void __malloc_unlock(struct _reent *r)
{
xTaskResumeAll();
}
чтоб не терять прерывания во время работы с памятью
Все работает