видимо какой-то кривой или кастрированный загрузчик динамических объектов
в принципе, если загрузчик адекватный, то никаких дополнительных манипуляций с -Wl,-rpath,/usr/lib/accel-ppp делать не нужно
можно попробовать LD_LIBRARY_PATH=/usr/lib/accel-ppp/
если и это не поможет, то скопировать libtriton.so в /lib или /usr/lib или сделать ссылку
Сборка без атомарных операций
Re: Сборка без атомарных операций
Да он и с манипуляциями не работал. Видимо, действительно, такой загрузчик, потому что помогла символьная ссылка в /usr/lib, хотя, повторюсь, в accel-pppd при сборке runtime path был установлен корректно на "/usr/lib/accel-ppp".
Re: Сборка без атомарных операций
Возникла проблема в работе accel-ppp на устройствах. Предположительно из-за того, что на них используется порядок данных Big Endian.
Сама суть проблемы: через пару секунд после запуска accel-pppd завершается по out of memory. Логи пустые. Опытным путем обнаружили, что причина в accel-pppd/extra/ippool.c:А именно в условиях цикла. Чуть выше: То есть, ip-адреса преобразуются в прямой порядок и используются как границы цикла. В случае с Little Endian (x86, например) все отрабатывает должным образом, но при Big Endian порядке байт (include/netinet/in.h):Таким образом, ip-адреса не преобразовываются и остаются в обратном порядке (наш дебаг с выводом startip и endip): Цикл бежит много миллионов раз и вызывает out of memory.
Не могу сказать, вызывает ли Big Endian проблемы где-то еще или только здесь, но в любом случае, на устройствах с таким порядком байт программа неработоспособна. Стоит ли ожидать патча или самим пробовать решить проблему?
Сама суть проблемы: через пару секунд после запуска accel-pppd завершается по out of memory. Логи пустые. Опытным путем обнаружили, что причина в accel-pppd/extra/ippool.c:
Code: Select all
167: for (i = startip; i <= endip; i++) {
168: ip = malloc(sizeof(*ip));
169: ip->addr = htonl(i);
170: list_add_tail(&ip->entry, list);
171: cnt++;
172: }
Code: Select all
149: *begin = ntohl((f4 << 24) | (f3 << 16) | (f2 << 8) | f1);
150: *end = ntohl((m << 24) | (f3 << 16) | (f2 << 8) | f1);
Code: Select all
# if __BYTE_ORDER == __BIG_ENDIAN
/* The host byte order is the same as network byte order,
so these functions are all just identity. */
# define ntohl(x) (x)
# define ntohs(x) (x)
# define htonl(x) (x)
# define htons(x) (x)
Code: Select all
add_range: startip=1677830336, endip=2013374656
Не могу сказать, вызывает ли Big Endian проблемы где-то еще или только здесь, но в любом случае, на устройствах с таким порядком байт программа неработоспособна. Стоит ли ожидать патча или самим пробовать решить проблему?
Re: Сборка без атомарных операций
скопировать libtriton.so в /usr/lib или сделать ссылку
Re: Сборка без атомарных операций
Так libtriton подгружается, проблема именно в алгоритме. Загружаются все модули, кроме ippool, при загрузке которого возникает креш по вышеуказанным причинам.
Re: Сборка без атомарных операций
попробуй приложенный патч
- Attachments
-
- ippool.patch.gz
- (493 Bytes) Downloaded 116 times