Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11i v3

Установка базовых дистрибутивов, создание своих, распространение, установка автоматически и "вручную", файлы, необходимые для создания дистрибутивов.

Модераторы: kdv, Alexey Kovyazin

Ответить
rev
Сообщения: 4
Зарегистрирован: 19 мар 2012, 16:32

Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11i v3

Сообщение rev » 19 мар 2012, 17:24

При сборке Firebird-2.5.1.26351 для ОС HP-UX 11i v3(Itanium) была получена следующая ошибка:
...
gmake[3]: Leaving directory `/home/kpm/rev/SRC/Firebird-2.5.1.26351-0/gen'
rm -f empty.fdb

../gen/firebird/bin/create_db empty.fdb

Pid 8506 received a SIGSEGV for stack growth failure.
Possible causes: insufficient memory or swap space,
or stack size exceeded maxrsessiz
or stack size limit is set too small.

gmake[2]: *** [empty.fdb] Segmentation fault (core dumped)
gmake[2]: Leaving directory `/home/kpm/rev/SRC/Firebird-2.5.1.26351-0/gen'
...

В соответствии с документацией Firebird-2.5 поддерживает ОС HP-UX 11i v3 (Itanium) (doc/README.build.posix.html).
Кто-нибудь пробовал собирать Firebird для ОС HP-UX 11i v3 (Itanium)? Из-за чего могла возникнуть указанная выше проблема при запуске create_db?

Заранее спасибо,
Елена

Дополнительная информация:
Исходные тексты Firebird-2.5.1.26351-0.tar взяты с сайта http://www.firebirdsql.org/

Для сборки дополнительно на HP-UX 11i v3 были установлены различные GNU пакеты (gmake, autoconf ,m4.. )
Кроме того, были установлены:
- HP-UX Atomic APIs (AtomicLib B11.31.0803.01 Library for Atomic APIs);
- editline (2.9);
- icu 4.8.1.1.

Сборка осуществлялась следующим образом:
> export CC=cc
> export CXX=aCC
> export CFLAGS="+DD64"
> export CXXFLAGS="+DD64 -I/usr/local/include"
> export SED=/bin/sed
> export LDFLAGS=-L/usr/local/lib
> export SHLIB_PATH=/usr/local/lib
> export CPPFLAGS=-I/usr/local/include

> ./autogen.sh --with-system-editline=yes --with-system-icu --enable-debug
Замечание: пришлось подправить autogen.sh, т.к. неправильно определялось местонахождение automake (1.11)

> gmake

Немного поэкспериментировали с переменными ядра: maxrsessiz*, но не помогло. При изменение данного параметра только изменяется точка, в которой происходит развал:
Анализ core:
1) maxrsessiz_64bit=8388608

#0 Firebird::MemoryPool::getContextPool ()
at ../src/common/classes/alloc.cpp:299
299 {

2) maxrsessiz_64bit=33554432

#0 Firebird::StringBase<Firebird::PathNameComparator>::StringBase (this=0x81)
at ../src/common/../common/../common/classes/fb_string.h:609
609 inline StringBase<Comparator>() : AbstractString() {}

3) maxrsessiz_64bit=67198864

#0 0x40000000005729e0:0 in gds__log (
text=0xc000000000000917 <Address 0xc000000000000917 out of bounds>)
at ../src/jrd/gds.cpp:1163
1163 {

>/usr/sbin/kctune| grep ssiz
maxrsessiz 8388608 Default
maxrsessiz_64bit 67198864 67198864
maxssiz 8388608 Default Immed
maxssiz_64bit 268435456 Default Immed
pa_maxssiz_32bit 83648512 Default Immed
pa_maxssiz_64bit 536870912 Default Immed

>/usr/sbin/swapinfo -tam
Mb Mb Mb PCT START/ Mb
TYPE AVAIL USED FREE USED LIMIT RESERVE PRI NAME
dev 8000 0 8000 0% 0 - 1 /dev/vg00/lvol2
reserve - 466 -466
memory 3789 1553 2236 41%
total 11789 2019 9770 17% - 0 -

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение hvlad » 20 мар 2012, 23:11

Такие вопросы лучше задавать в firebird-devel.
Здесь итаниумов никто в глаза не видел, уж не говоря о HP-UX'е :)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение hvlad » 21 мар 2012, 12:06

rev писал(а):В соответствии с документацией Firebird-2.5 поддерживает ОС HP-UX 11i v3 (Itanium) (doc/README.build.posix.html).
Кто-нибудь пробовал собирать Firebird для ОС HP-UX 11i v3 (Itanium)?
Да, конечно.
Конкретно этот вариант собирался не нами, а в компании SAS. Мы давно с ними сотрудничаем и нет оснований им не доверять.

Попробуйте собрать с --enable-debug и показать дамп стека после падения.
Можно здесь, но лучше всё-таки в fb-devel

rev
Сообщения: 4
Зарегистрирован: 19 мар 2012, 16:32

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение rev » 22 мар 2012, 10:32

hvlad, спасибо за помощь.

У меня тоже нет сомнений, что Firebird-2.5 собирается для ОС HP-UX 11i v3 (Itanium) в определенной конфигурации. Я думаю, что основной проблемой у меня является то, что при сборке используется немного другая конфигурация: более новые пакеты, для которых еще Firebird-2.5 не тестировалось, или просто неправильно настроена ОС HP-UX 11i v3 с точки зрения ресурсов.

Я собирала Firebird-2.5 с опцией --enable-debug и в предыдущем своем сообщении указала в каких точках происходит развал. В любом случае я еще посмотрю, что можно сделать, и обращусь в fb-devel (спасибо за совет).

С уважением,
Елена.

rev
Сообщения: 4
Зарегистрирован: 19 мар 2012, 16:32

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение rev » 22 мар 2012, 17:02

При отладке было выявлено, что программа create_db зацикливается.

Ниже приведен дамп стека на промежуточном шаге выполнения программы. При дальнейшем выполнении программы вызовы повторяются с #0 по #7 пока не наступает переполнение стека. ОК, буду дальше разбираться, почему так происходит.

#0 gds__log (text=0x400000000029e220 "Assertion (%s) failure: %s %ld\n") at src/jrd/gds.cpp:1185
#1 0x40000000004f80e0:2 in inline Firebird::TlsValue<Firebird::MemoryPool*>::get() (this=0x60000000000d6ba8) at src/include/../common/classes/fb_tls.h:129
#2 0x40000000004f8080:0 in Firebird::MemoryPool::getContextPool () at src/common/classes/alloc.cpp:300
#3 0x4000000000505f40:0 in Firebird::AutoStorage::getAutoMemoryPool () at src/common/classes/alloc.cpp:2031
#4 0x4000000000534390:2 in inline Firebird::AutoStorage::AutoStorage() () at src/include/../common/classes/alloc.h:588
#5 0x4000000000534380:1 in inline Firebird::AbstractString::AbstractString() () at src/common/../common/../common/classes/fb_string.h:159
#6 0x4000000000534370:1 in Firebird::StringBase<Firebird::PathNameComparator>::StringBase (this=0x9fffffffffffc7e0) at src/common/../common/../common/classes/fb_string.h:609
#7 0x4000000000539520:0 in fb_utils::getPrefix (No.Identifier_5=0x9fffffffffffcd10, prefType=fb_utils::FB_DIR_LOG, name=0x40000000002b5af0 "firebird.log") at src/common/utils.cpp:926
#8 0x4000000000572ab0:0 in gds__log (text=0x400000000029e220 "Assertion (%s) failure: %s %ld\n") at src/jrd/gds.cpp:1185
#9 0x40000000004f80e0:2 in inline Firebird::TlsValue<Firebird::MemoryPool*>::get() (this=0x60000000000d6ba8) at src/include/../common/classes/fb_tls.h:129
#10 0x40000000004f8080:0 in Firebird::MemoryPool::getContextPool () at src/common/classes/alloc.cpp:300
#11 0x4000000000505f40:0 in Firebird::AutoStorage::getAutoMemoryPool () at src/common/classes/alloc.cpp:2031
#12 0x4000000000534390:2 in inline Firebird::AutoStorage::AutoStorage() () at src/include/../common/classes/alloc.h:588
#13 0x4000000000534380:1 in inline Firebird::AbstractString::AbstractString() () at src/common/../common/../common/classes/fb_string.h:159
#14 0x4000000000534370:1 in Firebird::StringBase<Firebird::PathNameComparator>::StringBase (this=0x9fffffffffffd1a0) at src/common/../common/../common/classes/fb_string.h:609
#15 0x4000000000539520:0 in fb_utils::getPrefix (No.Identifier_5=0x9fffffffffffd6d0, prefType=fb_utils::FB_DIR_LOG, name=0x40000000002b5af0 "firebird.log") at src/common/utils.cpp:926
#16 0x4000000000572ab0:0 in gds__log (text=0x400000000029e220 "Assertion (%s) failure: %s %ld\n") at src/jrd/gds.cpp:1185
#17 0x40000000004f80e0:2 in inline Firebird::TlsValue<Firebird::MemoryPool*>::get() (this=0x60000000000d6ba8) at src/include/../common/classes/fb_tls.h:129
#18 0x40000000004f8080:0 in Firebird::MemoryPool::getContextPool () at src/common/classes/alloc.cpp:300
#19 0x4000000000505f40:0 in Firebird::AutoStorage::getAutoMemoryPool () at src/common/classes/alloc.cpp:2031
#20 0x400000000114f050:2 in inline Firebird::AutoStorage::AutoStorage() () at src/include/../common/classes/alloc.h:588
#21 0x400000000114f050:0 in inline Firebird::InlineStorage<unsigned short,(unsigned long)256>::InlineStorage() () at src/jrd/../jrd/../common/classes/array.h:42
#22 0x400000000114f050:0 in inline Firebird::Array<unsigned short,Firebird::InlineStorage<unsigned short,(unsigned long)256> >::Array() () at src/jrd/../jrd/../common/classes/array.h:83
#23 0x400000000114f040:0 in inline Firebird::HalfStaticArray<unsigned short,(unsigned long)256>::HalfStaticArray() (this=0x9fffffffffffdb60) at src/jrd/../jrd/../common/classes/array.h:466
#24 0x400000000114f030:2 in inline Firebird::Aligner<unsigned short>::Aligner(unsigned char const*,unsigned int) (this=0x9fffffffffffdb60, len=2, buf=0x400000000047a732 "") at src/jrd/../common/classes/Aligner.h:95
#25 0x400000000114f020:0 in Firebird::IntlUtil::cvtUtf16ToUtf8 (obj=0x60000000001092c0, nSrc=2, ppSrc=0x400000000047a732 "", nDest=4, pDest=0x60000000001091d8 "юн«нюн«нюн«нюн«н", err_code=0x9fffffffffffdd90, err_position=0x9fffffffffffdd94) at src/jrd/IntlUtil.cpp:385
#26 0x40000000008336a0:0 in Jrd::CsConvert::convert (this=0x9fffffffffffe100, srcLen=2, src=0x400000000047a732 "", dstLen=4, dst=0x60000000001091d8 "юн«нюн«нюн«нюн«н", badInputPos=0x0, ignoreTrailingSpaces=false) at src/jrd/../jrd/../jrd/CsConvert.h:199
#27 0x4000000001022f10:2 in inline Jrd::CsConvert::convert(unsigned int,unsigned short const*,unsigned int,unsigned char*,unsigned int*,bool) () at src/jrd/../jrd/../jrd/CsConvert.h:89
#28 0x4000000001022dc0:1 in inline Jrd::CharSet::CharSet(unsigned short,charset*) () at src/jrd/../jrd/../jrd/CharSet.h:58
#29 0x4000000001022d70:0 in inline MultiByteCharSet::MultiByteCharSet(unsigned short,charset*) (this=0x60000000001091c0, _id=4, _cs=0x6000000000109208) at src/jrd/CharSet.cpp:118
#30 0x4000000001022cb0:0 in Jrd::CharSet::createInstance (pool=@0x60000000000fb8d0, id=4, cs=0x6000000000109208) at src/jrd/CharSet.cpp:246
#31 0x4000000001159120:0 in Firebird::IntlUtil::Utf8CharSet::Utf8CharSet (this=0x6000000000109208, pool=@0x60000000000fb8d0) at src/jrd/IntlUtil.cpp:82
#32 0x40000000011597b0:2 in inline Firebird::GlobalPtr<Firebird::IntlUtil::Utf8CharSet>::GlobalPtr() () at src/jrd/../jrd/../common/classes/init.h:127
#33 0x40000000011596b0:2 in __sinit_IntlUtil_cpp_+0x112 () at src/jrd/IntlUtil.cpp:77
#34 0x9fffffffebf7b660:0 in EM_mark_BOS+0x50 () from /usr/lib/hpux64/dld.so

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение hvlad » 23 мар 2012, 01:04

Проблема в том, что не был вызван конструктор TlsValue и идёт обращение к неинициализированному объекту.

Почему он не инициализирован - я не вижу.

TlsValue - это наш класс-эмулятор Threal Local Storage для тех платформ, где нет нативной поддержки TLS, см. src/common/classes/fb_tls.h
Стоит выяснить - поддерживает ли ваш gcc ключевое слово __thread (по идее должен поддерживать) и, если да, то почему это не было определено на этапе конфигурирования (autoconfig).

Возможно, завтра появится больше идей...

rev
Сообщения: 4
Зарегистрирован: 19 мар 2012, 16:32

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение rev » 23 мар 2012, 16:17

Я собираю firebird c использованием компилятора HP (aCC), как это было рекомендовано в README. Правда я использую aCC
версии 6.26, а не версии 6.23, кот. указана в README.

aCC поддерживает ключевое слово __thread и это правильно определяется на этапе конфигурирования, но я нашла в файле
src/jrd/common.h следующий код:

#if defined (__HP_aCC)
// aCC error, __thread can be used only with C-like structs
#undef HAVE___THREAD
#endif

Теперь буду разбираться, что с этим делать.

Мне пока не удалось понять, почему не инициализируется класс TlsValue.

Закомментировала указанный выше код в src/jrd/common.h и попробовала собрать firebird. Сборка и проверка create_bd прошла успешно, а также удалось с небольшими правками полностью собрать firebird. Теперь буду более тщательно проверять, что работает, а что нет.

hvlad, большое спасибо за помощь.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение hvlad » 23 мар 2012, 17:13

Уже интереснее. Я попросил Александра Пешкова разобраться в ситуации, и вот что обнаружилось:

а) с использованием TlsValue в глобальных переменных таки есть баг.
Возможно он был активирован уже после релиза 2.5.0 и потому не обнаружен SAS'ом при сборке 2.5.0
Вы можете написать в fb-devel или Алексу персонально, чтобы он дал вам патч на попробовать

б) насчёт __thread и компилятора aCC : внимательно изучайте документацию, если поддержка __thread
уже нормально работает, то ваш патч в common.h правильный и стоит его оставить. Иначе - нужно
работать с нашим workaround'ом в виде TlsValue (после применения патча от Алекса)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Не удалось собрать Firebird-2.5.1.26351 для ОС HP-UX 11

Сообщение hvlad » 23 мар 2012, 18:29

rev писал(а):Я собираю firebird c использованием компилятора HP (aCC), как это было рекомендовано в README. Правда я использую aCC
версии 6.26, а не версии 6.23, кот. указана в README.

aCC поддерживает ключевое слово __thread и это правильно определяется на этапе конфигурирования, но я нашла в файле
src/jrd/common.h следующий код:

#if defined (__HP_aCC)
// aCC error, __thread can be used only with C-like structs
#undef HAVE___THREAD
#endif
Кстати, этот код внесли как раз по мотивам сборки и тестирования в SAS.
Правда, это было в 2009 году, так что компилятор могли уже и поправить...

Ответить