Собрался портировать newlib. Возникла небольшая неувязочка. В ЧАВО предлагают для обеспечения реентерабельности функций для каждого процесса завести переменную _impure_data (см. "include/reent.h"), содержащую окружение для данного процесса (errno процесса, какие дескрипторы используются для stdin, stdout, stderr и др.). В каждый конкретный момент времени глобально объявленный указатель _impure_ptr должен указывать на _impure_data текущего работающего процесса. Т.е. в момент переключения контекста нужно изменять и значение _impure_ptr. Пока возникла только мысль добавить в TCB каждого процесса дополнительное поле, содержащее указатель на _impure_data процесса и добавить несколько строчек в функцию переключения контекста (tn_switch_context_exit). Однако, как-то рука не поднимается лезть во внутренности ОС ради обеспечения работоспособности сторонней библиотеки. Тем более, что при переходе к новым версиям ОС придется проделывать те же изменения. Может быть есть другие, более элегантные способы? Как эта проблема решалась с другими ОС?
|