Ada_Ru форум

Обсуждение языка Ада

gnatmem

Оставить новое сообщение

Сообщения

Vadim Godunko
gnatmem
2005-03-20 08:36:48

Добрый день!

 

Подскажите, пожалуйста, как можно собрать gnatmem из состава GCC да что бы он ещё и работал?

 

 

--

Vadim Godunko

Подскажите, пожалуйста, как можно собрать gnatmem из состава GCC да что бы он ещё и работал?

 

А там разве нет Makefile.gnatmem? Больше ничего не требуется (ну если не считать конечно работоспособных libaddr2line, libbfd и libiberty).

 

 

Best regards,

Vasiliy Fofanov.

Vasiliy Fofanov wrote:

>Подскажите, пожалуйста, как можно собрать gnatmem из состава GCC да что >бы он ещё и работал?

 

 

А там разве нет Makefile.gnatmem? Больше ничего не требуется (ну если не считать конечно работоспособных libaddr2line, libbfd и libiberty).

Нет там такого. По задумке он должен собираться штатным Makefile-ом, но для Linux/x86 оно закрыто из-за отсутствия libaddr2line. Последняя является детищем AdaCore и на божий свет ниразу не появлялось.

 

Я за это время ссорудил обёртку, вызывающую add2line, вроде всё

работает, но достаточно сильно тормозит.

 

Если кому интересно, могу поделиться. Предложение к держателям сайта Ada-Ru: может разместим текст обёртки с инструкцией по сборке?

 

 

--

Vadim Godunko

On Sun, Mar 20, 2005 at 07:54:34PM +0300, Vadim Godunko wrote:

 

Vasiliy Fofanov wrote:

[skip]

Я за это время ссорудил обёртку, вызывающую add2line, вроде всё

работает, но достаточно сильно тормозит.

 

Если кому интересно, могу поделиться. Предложение к держателям сайта Ada-Ru: может разместим текст обёртки с инструкцией по сборке?

 

 

Давайте выложим, конечно.

 

А ты видел аналогичный труд "by Juergen Pfeifer" из

сборки ALT?

Его и Александр в своей сборке 3.15 использовал.

Вот я его из патча вынул:

http://www.ada-ru.org/files/convert_addresses.c

 

--

Maxim Reznik

Maxim Reznik wrote:

 

Давайте выложим, конечно.

 

А ты видел аналогичный труд "by Juergen Pfeifer" из

сборки ALT?

Его и Александр в своей сборке 3.15 использовал.

Вот я его из патча вынул:

http://www.ada-ru.org/files/convert_addresses.c

 

Нет, до этого не видел. Как я понял он требует gnat_addr2line. А где такое взять я не знаю.

 

 

Свой вариант приложил. Он конечно не столь изощерен, но работает.

 

Инструкция.

 

Для сборки gnatmem из состава GCC-3.4.x, GCC-4.x необходимо:

 

1/ Скопировать файлы

 

gnatmem.adb

gnatvsn.adb

gnatvsn.ads

memroot.ads

memroot.adb

gmem.c

 

из каталога <gcc_root>/gcc/ada

 

2/ Скопировать файлы

 

version.h

version.c

 

из каталога <gcc_root>/gcc

 

3/ Скопировать приложенный файл mya2l.c

 

4/ Выполнить кодманду:

 

gnatmake gnatmem.adb -largs gmem.c version.c mya2l.c

 

5/ Полученный в результате файл gnatmem скопировать в каталог

исполняемых файлов и использовать по назначению.

 

 

--

Vadim Godunko

Vadim Godunko wrote:

 

Vasiliy Fofanov wrote:

Подскажите, пожалуйста, как можно собрать gnatmem из состава GCC да что

бы он ещё и работал?

А там разве нет Makefile.gnatmem? Больше ничего не требуется (ну если не

считать конечно работоспособных libaddr2line, libbfd и libiberty).

 

Нет там такого. По задумке он должен собираться штатным Makefile-ом, но

для Linux/x86 оно закрыто из-за отсутствия libaddr2line. Последняя

является детищем AdaCore и на божий свет ниразу не появлялось.

 

Я за это время ссорудил обёртку, вызывающую add2line, вроде всё

работает, но достаточно сильно тормозит.

Надо собрать эту библиотеку самостоятельно из binutils.

после построения binutils сделать примерно следующее.

 

cd binutils-obj/binutils

ar r libaddr2line.a addr2line.o budemang.o bucomm.o version.o filemode.o

cp libaddr2line.a /usr/gnat-5.03a/lib/gcc/i386-unknown-freebsd5.3/3.4.4

cd ..

cd bfd

cp libbfd.a /usr/gnat-5.03a/lib/gcc/i386-unknown-freebsd5.3/3.4.4

Dmitriy Anisimkov wrote:

 

Надо собрать эту библиотеку самостоятельно из binutils.

после построения binutils сделать примерно следующее.

 

Нет нужной функции в binutils 2.15.90.0.3 :(

Фирмовый патч для этого нужен.

 

 

--

Vadim Godunko

On Mon, Mar 21, 2005 at 12:15:17AM +0300, Vadim Godunko wrote:

Maxim Reznik wrote:

 

А ты видел аналогичный труд "by Juergen Pfeifer" из

сборки ALT?

Нет, до этого не видел. Как я понял он требует gnat_addr2line. А где такое взять я не знаю.

gnat_addr2line - это простенький шел скрипт, который кидается

в /bin/, вызывает addr2line с нужными ключами. Сделан, я так понял, чтобы избежать зависимости convert_addresses от конкретной

версии addr2line. Он в патче есть, в srpm.

А идея таже, что и у тебя.

 

 

 

Свой вариант приложил. Он конечно не столь изощерен, но работает.

 

Я вот что хотел спросит. Там общая структура типа

 

static int initialized = 0;

if (initialized) {

...

} else {

program_name = strdup (gnat_argv [0]);

initialized = 1;

*len = 0;

}

 

Это так и нужно, чтоб на первый вызов функция возвращала

пустой результат, а работала только на последующие?

 

Может переставить это дело местами?

 

if (!initialized) {

program_name = strdup (gnat_argv [0]);

initialized = 1;

}

...

 

--

Maxim Reznik

Нет там такого.

 

Странно. Вообще-то в нашем репозитории Makefile.in и Makefile.gnatmem разделены, весь код для сборки gnatmem перенесен в последний. Если этот момент не синхронизирован - думаю это ошибка. Проверю.

 

По задумке он должен собираться штатным Makefile-ом, но

для Linux/x86 оно закрыто из-за отсутствия libaddr2line. Последняя является детищем AdaCore и на божий свет ниразу не появлялось.

 

Ну надо же, кто бы мог подумать что с этим будет затык... См. ниже.

Я за это время ссорудил обёртку, вызывающую add2line, вроде всё

работает, но достаточно сильно тормозит.

 

Вадим, ну ты ж должен понимать что это полнейший закат солнца вручную. Твоя обертка должна непосредственно вызывать основную процедуру addr2line после некоторой подкрутки окружения, а не запускать прогу отдельно. Коли соответствующий патч к addr2line.c нашими не выложен, я сам лично его выкладывать не рискну, но он предельно примитивен, поверь. Мне кажется ты легко его функциональность восстановишь по тому как он вызывается. А я пока уточню почему патч не выложен.

 

ВФ

А я пока уточню почему патч не выложен.

 

Не выложен он именно из-за того что передача и поддержка патча к

addr2line.c - это страшная морока с которой не хотят связываться. Покамест могу посоветовать попробовать воспользоваться valgrind. Летом ситуация должна улучшиться.

 

ВФ

Maxim Reznik wrote:

On Mon, Mar 21, 2005 at 12:15:17AM +0300, Vadim Godunko wrote:

 

Я вот что хотел спросит. Там общая структура типа

 

static int initialized = 0;

if (initialized) {

...

} else {

program_name = strdup (gnat_argv [0]);

initialized = 1;

*len = 0;

}

 

Это так и нужно, чтоб на первый вызов функция возвращала

пустой результат, а работала только на последующие?

 

Да, так и задумано.

 

Может переставить это дело местами?

 

if (!initialized) {

program_name = strdup (gnat_argv [0]);

initialized = 1;

}

...

 

Запросто! *len = 0 только надо не забыть. :)

 

 

--

Vadim Godunko

Vasiliy Fofanov wrote:

 

Вадим, ну ты ж должен понимать что это полнейший закат солнца вручную.

Ну конечно! У меня просто была единожды возникшая потребность

воспользоваться gnatmem-ом, возникшая проблема была решена путём

наименьшего сопротивления. И забыта до следующего "восхода".

 

Твоя

обертка должна непосредственно вызывать основную процедуру addr2line после некоторой подкрутки окружения, а не запускать прогу отдельно. Коли соответствующий патч к addr2line.c нашими не выложен, я сам лично его выкладывать не рискну, но он предельно примитивен, поверь. Мне кажется ты легко его функциональность восстановишь по тому как он вызывается.

На самом деле я пытался это сделать. Даже более того, имея аналогичный патч от GNAT-3.15p. Но что-то оно никак работать не хотело.

 

В принципе предлагаю "проголосовать" за доработку патча по текущей версии binutils. Кто за?

 

 

--

Vadim Godunko

Вадим,

 

если надо только "проголосовать", то я "за", а если нужно будет помогать, то не уверен, что сейчас смогу...

 

 

Удачи,

/Александр.

 

On Mar 21, 2005, at 16:36, Vadim Godunko wrote:

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти