Bug 48475

Summary: отключить debuginfo для ocaml bytecode executable
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: rpm-buildAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: arseny, glebfm, imz, iv, ldv, mike, placeholder, rider, vt
Version: unstable   
Hardware: x86_64   
OS: Linux   
Bug Depends on:    
Bug Blocks: 46782    

Description Anton Farygin 2023-11-16 19:59:18 MSK
При сборке bytecode-only версии ocaml нарвался на то, что собранные в /usr/bin программы просят дать им ocaml код для исполнения вместо выполнения своих функций.

Оказываетя, что ocaml при сборке bytecode бинарей использует секцию debuginfo для размещения bytecode.
Предлагаю отключить debuginfo для всех бинарей, у которых в конце есть сигнатура "Caml1999X0[0-9][0-9]"
$ tail -c 12 /usr/src/tmp/ocaml-findlib-buildroot/usr/bin/ocamlfind
Caml1999X031


В принципе помогает 
%set_debuginfo_skiplist %_bindir/*

Но т.к. это придётся делать в каждом потенциально неизвестном пакете, то лучше для всех подобных файлов добавить исключение на уровне rpm-build
Comment 1 Vitaly Chikunov 2023-11-16 22:29:29 MSK
* Есть ли инфа или спецификация на такое необычное использование .debug_* секций?
* Есть ли примеры бинарей?
* Что сделали в Федоре?
Comment 2 Vitaly Chikunov 2023-11-16 22:33:36 MSK
Кстати, разве не вариант сделать %set_debuginfo_skiplist %_bindir/*
 в rpm-build-ocaml?
Comment 3 Anton Farygin 2023-11-16 22:52:28 MSK
сейчас я дособираю сборочное задание с ocaml - пойму сколько бинарей это затрагивает. Есть вероятность, что совсем немного - эта схема линковки старая и в современных проектах от неё ушли.
Comment 4 Anton Farygin 2023-11-16 23:03:14 MSK
подробнее про этот режим сборки можно почитать тут:
https://v2.ocaml.org/releases/4.14/htmlman/comp.html
-custom
Comment 5 Vitaly Chikunov 2023-11-17 00:03:26 MSK
Спасибо.

> Unix:  Never use the strip command on executables produced by ocamlc
> -custom, this would remove the bytecode part of the executable.

Пока предположу, что с байткодом там не секция .debug_info а какая-то другая. И надо использовать %brp_strip_none %_bindir/*, а может даже %brp_strip_debug хватит.
Comment 6 Anton Farygin 2023-11-17 08:34:05 MSK
%brp_strip_none %_bindir/* не помогает, я первым делом попробовал.
Comment 7 Anton Farygin 2023-11-17 08:37:07 MSK
воспроизводится при сборке пакета ocaml-findlib из задания 333652 для архитектуры i586
после установки надо запустить ocamlfind из %buildroot

Но сейчас он собран в режиме -no-custom - надо убрать это из configure
Comment 8 Ivan A. Melnikov 2024-02-28 08:59:21 MSK
(In reply to Anton Farygin from comment #4)
> подробнее про этот режим сборки можно почитать тут:
> https://v2.ocaml.org/releases/4.14/htmlman/comp.html
> -custom

-custom выглядит как достаточно жуткая вещь.

Возможно, нам стоит вслед за dune[1][2] переходить на -output-complete-exe[3].

[1] https://github.com/ocaml/dune/issues/2505
[2] https://github.com/ocaml/dune/pull/2692
[3] https://github.com/ocaml/ocaml/pull/8872 "The idea is to deprecate -custom in a follow-up PR."


Это сработало для unison (https://git.altlinux.org/tasks/341561/, проверял на loongarch64, в хешере на i586 прошёл начало туторила) и coccinelle (в Сизифе, тоже проверял).
Comment 9 Anton Farygin 2024-02-28 09:06:45 MSK
Да, согласен.

custom почти не осталось в репозитории.
Comment 10 Vitaly Chikunov 2024-03-30 16:33:15 MSK
> Это сработало для unison (...) и coccinelle (в Сизифе, тоже проверял).

@iv, Про coccinelle, а почему только для этих архитектур а не для всех?

  %ifnarch %ocaml_native_arch
  # see https://bugzilla.altlinux.org/48475
  find . -name Makefile | xargs sed -r  -i 's/-custom\s/-output-complete-exe /g'
  %endif
Comment 11 Ivan A. Melnikov 2024-05-27 10:59:38 MSK
(In reply to Vitaly Chikunov from comment #10)
> > Это сработало для unison (...) и coccinelle (в Сизифе, тоже проверял).
> 
> @iv, Про coccinelle, а почему только для этих архитектур а не для всех?

Скорее всего, я следовал заведённой ещё в %e2k традиции не трогать то, что работает.
Comment 12 Anton Farygin 2024-09-21 18:28:57 MSK
А у нас кроме i586 остались ещё не нативные архитектуры ?
Comment 13 Ivan A. Melnikov 2024-09-21 20:12:33 MSK
(In reply to Anton Farygin from comment #12)
> А у нас кроме i586 остались ещё не нативные архитектуры ?

Как минимум loongarch64 и %e2k.
Comment 14 Anton Farygin 2024-09-21 21:47:36 MSK
для loongarch есть вот такой PR:
https://github.com/ocaml/ocaml/pull/11974