ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] erlang: asking for a hint, possibly with --as-needed
@ 2007-02-10 19:47 Mikhail Yakshin
  2007-02-10 19:50 ` Michael Shigorin
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Mikhail Yakshin @ 2007-02-10 19:47 UTC (permalink / raw)
  To: ALT Devel discussion list

Приветствую!

Я тут взялся глобально перелопачивать Erlang, в двух словах, результаты
следующие:

1. R11B2, который есть в Федоре - устарел, на смену ему официально
пришел R11B3, в котором разработчики Эрланга наконец-то проснулись и
поняли, что какой год на дворе и какая glibc. Федоровские патчи при этом
не нужны, они вроде бы все вошли в апстрим и применены там в менее
хакообразном виде. Собрать Федоровскую RPMку и R11B2 у нас малореально.

2. Эрланг - это довольно объемный пакет, собирается где-то по 30-40
минут на сборку. Сборочное окружение субъективно мною характеризуется
как "невменяемое": масса хаков вокруг autoconf на тему поддержки
совместимости с win32, вывернутая наизнанку схема генерации Makefile <->
Makefile.in, и, самое главное, ошибка при сборке где-нибудь посередине
не приводит к остановке сборки, а компиляция продолжается, в итоге
получается нечто, что собирается и ставится, но в нем не все работает.

Возникла даже мысль может быть собирать его не просто make, а чем-то вроде:

make >tempfile
grep -qe '^make:.* Error ' tempfile && false

чтобы он хотя бы падал и не давал неработающей сборки

3. Проблемы в #10657 побеждены посредством -fno-stack-protector, как в
Ubuntu.

4. Сама сборка пестрит большим количеством warning'ов об undefined
symbol в verify-elf (потому что там масса .so-шек, подгружаются
виртуальной машиной на лету, как плагины) и одним TEXTREL'ом в районе
сборки с openssl - оно у нас там уже давно стоит на relaxed.

5. Есть проблема со сборкой erl_interface - это некий компонент erlang
(интерфейс к C), без которого он работать теоретически может, но
ejabberd без него не соберется.

Я подозреваю, что проблема в --as-needed и порядке линковки. На других
системах (Fedora, BSD, Debian), люди говорят, что все собирается. Кусок
лога:

gcc -pipe -Wall -O2 -march=i586 -mtune=i686 -fno-stack-protector -Wall
-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
-Wnested-externs -Winline -fno-strict-aliasing -I. -I../include
-Iconnect -Iencode -Idecode -Imisc -Iepmd -Iregistry -Ii686-pc-linux-gnu
  -Ilegacy -o
/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/bin/i686-pc-linux-gnu/erl_call
prog/erl_call.c prog/erl_start.c \
	
-L/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu
-lei -lrt -lresolv -lnsl
/tmp/.private/greycat/ccawXslX.o: In function `main':
erl_call.c:(.text+0x1994): undefined reference to `__erl_errno'
/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
In function `ei_do_receive_msg':
ei_connect.c:(.text+0x2d6): undefined reference to `__erl_errno'
ei_connect.c:(.text+0x319): undefined reference to `__erl_errno'
ei_connect.c:(.text+0x331): undefined reference to `__erl_errno'
/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
In function `ei_rpc_from':
ei_connect.c:(.text+0x512): undefined reference to `__erl_errno'
/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):ei_connect.c:(.text+0x532):
more undefined references to `__erl_errno' follow
collect2: ld returned 1 exit status
make[4]: ***
[/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/bin/i686-pc-linux-gnu/erl_call]
Error 1

Подскажите, что тут можно проверить и куда смотреть?

-- 
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat@altlinux.org]


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:47 [devel] erlang: asking for a hint, possibly with --as-needed Mikhail Yakshin
@ 2007-02-10 19:50 ` Michael Shigorin
  2007-02-10 19:59   ` Mikhail Yakshin
  2007-02-10 20:21 ` Sergey Vlasov
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Michael Shigorin @ 2007-02-10 19:50 UTC (permalink / raw)
  To: ALT Devel discussion list

On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
> Возникла даже мысль может быть собирать его не просто make, а чем-то вроде:
> make >tempfile

2>tempfile?

> grep -qe '^make:.* Error ' tempfile && false

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:50 ` Michael Shigorin
@ 2007-02-10 19:59   ` Mikhail Yakshin
  2007-02-10 20:18     ` Sergey Vlasov
  0 siblings, 1 reply; 9+ messages in thread
From: Mikhail Yakshin @ 2007-02-10 19:59 UTC (permalink / raw)
  To: ALT Devel discussion list

Michael Shigorin wrote:
> On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
>> Возникла даже мысль может быть собирать его не просто make, а чем-то вроде:
>> make >tempfile
> 
> 2>tempfile?

Ну, на самом деле я сам делаю даже make >tempfile 2>&1...

-- 
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat@altlinux.org]


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:59   ` Mikhail Yakshin
@ 2007-02-10 20:18     ` Sergey Vlasov
  0 siblings, 0 replies; 9+ messages in thread
From: Sergey Vlasov @ 2007-02-10 20:18 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 392 bytes --]

On Sat, Feb 10, 2007 at 10:59:41PM +0300, Mikhail Yakshin wrote:
> Michael Shigorin wrote:
> > On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
> >> Возникла даже мысль может быть собирать его не просто make, а чем-то вроде:
> >> make >tempfile
> > 
> > 2>tempfile?
> 
> Ну, на самом деле я сам делаю даже make >tempfile 2>&1...

Тогда уж make 2>&1 | tee tempfile.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:47 [devel] erlang: asking for a hint, possibly with --as-needed Mikhail Yakshin
  2007-02-10 19:50 ` Michael Shigorin
@ 2007-02-10 20:21 ` Sergey Vlasov
  2007-02-10 20:23 ` Dmitry V. Levin
  2007-02-11  2:17 ` Alexey Borovskoy
  3 siblings, 0 replies; 9+ messages in thread
From: Sergey Vlasov @ 2007-02-10 20:21 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 1799 bytes --]

On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
> gcc -pipe -Wall -O2 -march=i586 -mtune=i686 -fno-stack-protector -Wall
> -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
> -Wnested-externs -Winline -fno-strict-aliasing -I. -I../include
> -Iconnect -Iencode -Idecode -Imisc -Iepmd -Iregistry -Ii686-pc-linux-gnu
>   -Ilegacy -o
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/bin/i686-pc-linux-gnu/erl_call
> prog/erl_call.c prog/erl_start.c \
> 	
> -L/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu
> -lei -lrt -lresolv -lnsl
> /tmp/.private/greycat/ccawXslX.o: In function `main':
> erl_call.c:(.text+0x1994): undefined reference to `__erl_errno'
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
> In function `ei_do_receive_msg':
> ei_connect.c:(.text+0x2d6): undefined reference to `__erl_errno'
> ei_connect.c:(.text+0x319): undefined reference to `__erl_errno'
> ei_connect.c:(.text+0x331): undefined reference to `__erl_errno'
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
> In function `ei_rpc_from':
> ei_connect.c:(.text+0x512): undefined reference to `__erl_errno'
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):ei_connect.c:(.text+0x532):
> more undefined references to `__erl_errno' follow
> collect2: ld returned 1 exit status

А в какой библиотеке определяется __erl_errno?

Тут дело, похоже, даже не в --as-needed, а в отсутствии нужной
библиотеки в командной строке - перед erl_call.c никаких библиотек,
которые могли бы потеряться из-за --as-needed, нет.  Возможно, где-то
опять сдурел какой-то configure.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:47 [devel] erlang: asking for a hint, possibly with --as-needed Mikhail Yakshin
  2007-02-10 19:50 ` Michael Shigorin
  2007-02-10 20:21 ` Sergey Vlasov
@ 2007-02-10 20:23 ` Dmitry V. Levin
  2007-02-11 20:24   ` Mikhail Yakshin
  2007-02-11  2:17 ` Alexey Borovskoy
  3 siblings, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2007-02-10 20:23 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 3248 bytes --]

On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
> Я тут взялся глобально перелопачивать Erlang

Значит, всеобщее счастье не за горами. :)

> 2. Эрланг - это довольно объемный пакет, собирается где-то по 30-40
> минут на сборку.

На каких мощностях?  Тот пакет, который сейчас в Сизифе, собирается раза в
2 быстрее.

> Сборочное окружение субъективно мною характеризуется
> как "невменяемое": масса хаков вокруг autoconf на тему поддержки
> совместимости с win32, вывернутая наизнанку схема генерации
> Makefile <-> Makefile.in,

Это как?  Из Makefile формируются Makefile.in?

> и, самое главное, ошибка при сборке где-нибудь посередине
> не приводит к остановке сборки, а компиляция продолжается, в итоге
> получается нечто, что собирается и ставится, но в нем не все работает.
> 
> Возникла даже мысль может быть собирать его не просто make, а чем-то вроде:
> 
> make >tempfile
> grep -qe '^make:.* Error ' tempfile && false
> 
> чтобы он хотя бы падал и не давал неработающей сборки

В запущенных случаях это вполне естественная мысль.

> 3. Проблемы в #10657 побеждены посредством -fno-stack-protector, как в
> Ubuntu.

На первом этапе это логичное решение, но потом придётся найти что-то
получше.

> 4. Сама сборка пестрит большим количеством warning'ов об undefined
> symbol в verify-elf (потому что там масса .so-шек, подгружаются
> виртуальной машиной на лету, как плагины) и одним TEXTREL'ом в районе
> сборки с openssl - оно у нас там уже давно стоит на relaxed.

Во что превращается этот TEXTREL на x86-64?

> 5. Есть проблема со сборкой erl_interface - это некий компонент erlang
> (интерфейс к C), без которого он работать теоретически может, но
> ejabberd без него не соберется.
> 
> Я подозреваю, что проблема в --as-needed и порядке линковки. На других
> системах (Fedora, BSD, Debian), люди говорят, что все собирается. Кусок
> лога:
> 
> gcc -pipe -Wall -O2 -march=i586 -mtune=i686 -fno-stack-protector -Wall
> -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
> -Wnested-externs -Winline -fno-strict-aliasing -I. -I../include
> -Iconnect -Iencode -Idecode -Imisc -Iepmd -Iregistry -Ii686-pc-linux-gnu
>   -Ilegacy -o
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/bin/i686-pc-linux-gnu/erl_call
> prog/erl_call.c prog/erl_start.c \
> 	
> -L/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu
> -lei -lrt -lresolv -lnsl
> /tmp/.private/greycat/ccawXslX.o: In function `main':
> erl_call.c:(.text+0x1994): undefined reference to `__erl_errno'
> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
> In function `ei_do_receive_msg':
> ei_connect.c:(.text+0x2d6): undefined reference to `__erl_errno'
> ei_connect.c:(.text+0x319): undefined reference to `__erl_errno'
> ei_connect.c:(.text+0x331): undefined reference to `__erl_errno'

Так и есть, libei.a не слинковано с тем, что содержит определение
символа __erl_errno.

> Подскажите, что тут можно проверить и куда смотреть?

Посмотреть в лог сборки libei.a -- скорее всего там неправильный порядок
линкуемых библиотек или даже просто нет нужной линкуемой библиотеки.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 19:47 [devel] erlang: asking for a hint, possibly with --as-needed Mikhail Yakshin
                   ` (2 preceding siblings ...)
  2007-02-10 20:23 ` Dmitry V. Levin
@ 2007-02-11  2:17 ` Alexey Borovskoy
  3 siblings, 0 replies; 9+ messages in thread
From: Alexey Borovskoy @ 2007-02-11  2:17 UTC (permalink / raw)
  To: ALT Devel discussion list

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mikhail Yakshin пишет:
> Приветствую!
> 
> Я тут взялся глобально перелопачивать Erlang, в двух словах, результаты
> следующие:
> 
> 1. R11B2, который есть в Федоре - устарел, на смену ему официально
> пришел R11B3, в котором разработчики Эрланга наконец-то проснулись и
> поняли, что какой год на дворе и какая glibc. Федоровские патчи при этом
> не нужны, они вроде бы все вошли в апстрим и применены там в менее
> хакообразном виде. Собрать Федоровскую RPMку и R11B2 у нас малореально.
> 
> 2. Эрланг - это довольно объемный пакет, собирается где-то по 30-40
> минут на сборку. Сборочное окружение субъективно мною характеризуется
> как "невменяемое": масса хаков вокруг autoconf на тему поддержки
> совместимости с win32, вывернутая наизнанку схема генерации Makefile <->
> Makefile.in, и, самое главное, ошибка при сборке где-нибудь посередине
> не приводит к остановке сборки, а компиляция продолжается, в итоге
> получается нечто, что собирается и ставится, но в нем не все работает.

У меня в git.alt есть такое:

R10B-10
R10B.10-alt0.M24.1
R10B.10-alt0.M30.1
R11B-0
R11B-1

Причем R11 я победить не смог. Там неправильно собирается erl_interface.

- --
Алексей.
GPG key fingerprint
DBB3 1832 13C6 5C96 4A58 4AFF 78F7 159F 66AD 8D7E
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFFzny9ePcVn2atjX4RAqfjAJ95zz6Dd7XmK3Ks40a5M8jFeHJqkACdEOAn
AxsVJpUeHGv+kefrWJ/2DxQ=
=JNxc
-----END PGP SIGNATURE-----


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-10 20:23 ` Dmitry V. Levin
@ 2007-02-11 20:24   ` Mikhail Yakshin
  2007-02-11 21:33     ` Dmitry V. Levin
  0 siblings, 1 reply; 9+ messages in thread
From: Mikhail Yakshin @ 2007-02-11 20:24 UTC (permalink / raw)
  To: ALT Devel discussion list

Dmitry V. Levin wrote:
> On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
>> Я тут взялся глобально перелопачивать Erlang
> 
> Значит, всеобщее счастье не за горами. :)

Я, пожалуй, не так сильно оптимистичен...

>> 2. Эрланг - это довольно объемный пакет, собирается где-то по 30-40
>> минут на сборку.
> 
> На каких мощностях?  Тот пакет, который сейчас в Сизифе, собирается раза в
> 2 быстрее.

Видимо, на сборочных серверах и полностью в tmpfs. Какой смысл сравнивать?

>> Сборочное окружение субъективно мною характеризуется
>> как "невменяемое": масса хаков вокруг autoconf на тему поддержки
>> совместимости с win32, вывернутая наизнанку схема генерации
>> Makefile <-> Makefile.in,
> 
> Это как?  Из Makefile формируются Makefile.in?

Все Makefile, как правило, не генерящиеся. В них записано по 3 строчки
вроде:

include $(ERL_TOP)/make/target.mk
include $(ERL_TOP)/make/$(TARGET)/otp.mk
include $(ERL_TOP)/make/otp_subdir.mk

Через несколько уровней вызовов этих мейкфайлов из $(ERL_TOP)/make/,
которые там что-то у себя внутри детектят, дефайнят и в зависимости от
этого принимают какие-то решения, в итоге каким-то образом управление
передается в Makefile.in, лежащий в той же директории, тоже не генерящийся.

Масла в огонь подливает то, что по сути там не 1 проект, а под сотню
разных проектов, вложенных друг в друга. В некоторых местах иерархии
есть свой корень, свой собственный configure и там целое отдельное
приложение, библиотека или статический object

>> 3. Проблемы в #10657 побеждены посредством -fno-stack-protector, как в
>> Ubuntu.
> 
> На первом этапе это логичное решение, но потом придётся найти что-то
> получше.

Чем дальше я копаюсь с erlang - тем больше убеждаюсь в том, что это
такое нечто, которое проще как-то собрать, забыть и не трогать, пока не
сломается что-то критичное. По хорошему - там надо бы начинать с полной
перестройки всей системы сборки, его раскладывания файлов (которое
абсолютно не соответствует идеологии FHS) и т.п.

На Erlang, насколько я понял, есть целых 2 приложения для простых
смертных в этом мире: ejabberd (xmpp-сервер) и yaws (http-сервер).
Остальное - огромная куча какого-то проприетарного и очень специфичного
софта для телефонии имени самого Ericson'а и т.п.

>> 4. Сама сборка пестрит большим количеством warning'ов об undefined
>> symbol в verify-elf (потому что там масса .so-шек, подгружаются
>> виртуальной машиной на лету, как плагины) и одним TEXTREL'ом в районе
>> сборки с openssl - оно у нас там уже давно стоит на relaxed.
> 
> Во что превращается этот TEXTREL на x86-64?

Пока еще не добрался.

>> 5. Есть проблема со сборкой erl_interface - это некий компонент erlang
>> (интерфейс к C), без которого он работать теоретически может, но
>> ejabberd без него не соберется.
>>
>> Я подозреваю, что проблема в --as-needed и порядке линковки. На других
>> системах (Fedora, BSD, Debian), люди говорят, что все собирается. Кусок
>> лога:
>>
>> gcc -pipe -Wall -O2 -march=i586 -mtune=i686 -fno-stack-protector -Wall
>> -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
>> -Wnested-externs -Winline -fno-strict-aliasing -I. -I../include
>> -Iconnect -Iencode -Idecode -Imisc -Iepmd -Iregistry -Ii686-pc-linux-gnu
>>   -Ilegacy -o
>> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/bin/i686-pc-linux-gnu/erl_call
>> prog/erl_call.c prog/erl_start.c \
>> 	
>> -L/home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu
>> -lei -lrt -lresolv -lnsl
>> /tmp/.private/greycat/ccawXslX.o: In function `main':
>> erl_call.c:(.text+0x1994): undefined reference to `__erl_errno'
>> /home/greycat/RPM/BUILD/otp_src_R11B-3/lib/erl_interface/obj/i686-pc-linux-gnu/libei.a(ei_connect.o):
>> In function `ei_do_receive_msg':
>> ei_connect.c:(.text+0x2d6): undefined reference to `__erl_errno'
>> ei_connect.c:(.text+0x319): undefined reference to `__erl_errno'
>> ei_connect.c:(.text+0x331): undefined reference to `__erl_errno'
> 
> Так и есть, libei.a не слинковано с тем, что содержит определение
> символа __erl_errno.
> 
>> Подскажите, что тут можно проверить и куда смотреть?
> 
> Посмотреть в лог сборки libei.a -- скорее всего там неправильный порядок
> линкуемых библиотек или даже просто нет нужной линкуемой библиотеки.

Понятно, спасибо. libei.a собирается вполне обычным способом из
следующих objects в таком порядке:

> ei_connect.o
ei_resolve.o eirecv.o send.o send_exit.o send_reg.o decode_atom.o
decode_big.o decode_bignum.o decode_binary.o decode_boolean.o
decode_char.o decode_double.o decode_fun.o decode_intlist.o
decode_list_header.o decode_long.o decode_pid.o decode_port.o
decode_ref.o decode_skip.o decode_string.o decode_trace.o
decode_tuple_header.o decode_ulong.o decode_version.o decode_longlong.o
decode_ulonglong.o encode_atom.o encode_bignum.o encode_binary.o
encode_boolean.o encode_char.o encode_double.o encode_fun.o
encode_list_header.o encode_long.o encode_pid.o encode_port.o
encode_ref.o encode_string.o encode_trace.o encode_tuple_header.o
encode_ulong.o encode_version.o encode_longlong.o encode_ulonglong.o
epmd_port.o epmd_publish.o epmd_unpublish.o ei_decode_term.o ei_format.o
ei_locking.o ei_malloc.o ei_portio.o ei_printterm.o
> ei_pthreads.o
ei_trace.o ei_x_encode.o eimd5.o get_type.o show_msg.o ei_compat.o
hash_dohash.o hash_foreach.o hash_freetab.o hash_insert.o hash_isprime.o
hash_lookup.o hash_newtab.o hash_remove.o hash_resize.o hash_rlookup.o
reg_close.o reg_delete.o reg_dirty.o reg_dump.o reg_free.o reg_get.o
reg_getf.o reg_geti.o reg_getp.o reg_gets.o reg_make.o reg_open.o
reg_purge.o reg_resize.o reg_restore.o reg_set.o reg_setf.o reg_seti.o
reg_setp.o reg_sets.o reg_stat.o reg_tabstat.o

Значком ">" я отметил интересующие нас сейчас objects. Определяться
__erl_errno должна по идее в ei_pthreads.o, а используется в
ei_connect.o. Только здесь какая-то ерунда получается: если посмотреть в
ei.h, то там эта переменная определена как:

#if defined(_REENTRANT) || defined(VXWORKS) || defined(__WIN32__)
/* 'erl_errno' as a function return value */
volatile int* __erl_errno_place(void) __attribute__ ((__const__));
#define erl_errno (*__erl_errno_place ())
#else /* !_REENTRANT && !VXWORKS && !__WIN32__ */
extern volatile int __erl_errno;
#define erl_errno __erl_errno
#endif /* !_REENTRANT && !VXWORKS && !__WIN32__ */

Насколько я понял - _REENTRANT - это какой-то флаг-характеристика
системы. Не знаю, должен он быть установлен он у нас или нет и за что
отвечает (гугл однозначного ответа на этот вопрос не дает), но, в данном
случае, насколько я проверил - не установлен. В итоге у нас есть простое
определение переменной и просто алиас на нее:

extern volatile int __erl_errno;
#define erl_errno __erl_errno

В ei_pthreads.c же, где по идее и должно быть реальное объявление (без
extern) этой переменной, есть 2 варианта ее определения:

1. volatile __declspec(thread) int __erl_errno = 0;
2. static volatile int __erl_errno;

Вариант 1 засунут под ifdef __WIN32__, вариант 2 - под ifdef VXWORKS. У
нас, очевидно, ни один из них. В итоге что получается, когда есть
extern, но нет реально объявленной переменной?

К коду ei_connect.c претензий нет - там все достаточно чисто -
используется именно erl_errno, запрос к __erl_errno получается именно
из-за дефайна.

Видимо, на всех тех машинах, где Erlang собирается под Linux/BSD, стоит
этот _REENTRANT => нет такого понятия, как __erl_errno вообще? Есть
какие-то мысли, как это правильно исправить? Все упирается, видимо, в
то, что такое дефайн _REENTRANT, почему у нас его нет и что сломается от
того, если я его определю?

Плюс, после того, как разберемся с этим вопросом, ei_pthreads.o и
ei_connect.o в порядке линковки надо поменять местами, я правильно понимаю?

-- 
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat@altlinux.org]


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] erlang: asking for a hint, possibly with --as-needed
  2007-02-11 20:24   ` Mikhail Yakshin
@ 2007-02-11 21:33     ` Dmitry V. Levin
  0 siblings, 0 replies; 9+ messages in thread
From: Dmitry V. Levin @ 2007-02-11 21:33 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 2353 bytes --]

On Sun, Feb 11, 2007 at 11:24:09PM +0300, Mikhail Yakshin wrote:
> Dmitry V. Levin wrote:
> > On Sat, Feb 10, 2007 at 10:47:51PM +0300, Mikhail Yakshin wrote:
> >> Я тут взялся глобально перелопачивать Erlang
> > 
> > Значит, всеобщее счастье не за горами. :)
> 
> Я, пожалуй, не так сильно оптимистичен...

Я среагировал на "глобально перелопачивать".

> >> 2. Эрланг - это довольно объемный пакет, собирается где-то по 30-40
> >> минут на сборку.
> > 
> > На каких мощностях?  Тот пакет, который сейчас в Сизифе, собирается раза в
> > 2 быстрее.
> 
> Видимо, на сборочных серверах и полностью в tmpfs. Какой смысл сравнивать?

Это я прозрачно намекаю на пользу, которую ты мог бы извлечь из сборочных
серверов.

> Насколько я понял - _REENTRANT - это какой-то флаг-характеристика
> системы. Не знаю, должен он быть установлен он у нас или нет и за что
> отвечает (гугл однозначного ответа на этот вопрос не дает), но, в данном
> случае, насколько я проверил - не установлен.

$ info libc 'Feature Test Macros'
Macro: _REENTRANT
Macro: _THREAD_SAFE
If you define one of these macros, reentrant versions of several
functions get declared.  Some of the functions are specified in
POSIX.1c but many others are only available on a few other systems
or are unique to GNU libc.  The problem is the delay in the
standardization of the thread safe C library interface.

Unlike on some other systems, no special version of the C library
must be used for linking.  There is only one version but while
compiling this it must have been specified to compile as thread
safe.

> Видимо, на всех тех машинах, где Erlang собирается под Linux/BSD, стоит
> этот _REENTRANT => нет такого понятия, как __erl_errno вообще? Есть
> какие-то мысли, как это правильно исправить? Все упирается, видимо, в
> то, что такое дефайн _REENTRANT, почему у нас его нет и что сломается от
> того, если я его определю?

Надо смотреть в документацию по системе сборки или (если таковой нет) в
исходный код.  Возможно, от включения _REENTRANT ничего не сломается.

> Плюс, после того, как разберемся с этим вопросом, ei_pthreads.o и
> ei_connect.o в порядке линковки надо поменять местами, я правильно понимаю?

Нет, --as-needed на сборку статических библиотек не влияет,
так что порядок линковки *.o-файлов тут не важен.


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2007-02-11 21:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-10 19:47 [devel] erlang: asking for a hint, possibly with --as-needed Mikhail Yakshin
2007-02-10 19:50 ` Michael Shigorin
2007-02-10 19:59   ` Mikhail Yakshin
2007-02-10 20:18     ` Sergey Vlasov
2007-02-10 20:21 ` Sergey Vlasov
2007-02-10 20:23 ` Dmitry V. Levin
2007-02-11 20:24   ` Mikhail Yakshin
2007-02-11 21:33     ` Dmitry V. Levin
2007-02-11  2:17 ` Alexey Borovskoy

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git