Bug 48475 - отключить debuginfo для ocaml bytecode executable
Summary: отключить debuginfo для ocaml bytecode executable
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 46782
  Show dependency tree
 
Reported: 2023-11-16 19:59 MSK by Anton Farygin
Modified: 2024-03-30 16:33 MSK (History)
8 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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