Bug 40611 - gcc: liblto_plugin.so packaged in the wrong place
Summary: gcc: liblto_plugin.so packaged in the wrong place
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc (show other bugs)
Version: unstable
Hardware: x86 Linux
: P5 normal
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: lto
  Show dependency tree
 
Reported: 2021-07-30 07:17 MSK by Vitaly Chikunov
Modified: 2021-08-02 18:44 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Chikunov 2021-07-30 07:17:49 MSK
man gcc:
  -print-file-name=library
      Print the full absolute name of the library file library that
      would be used when linking---and don't do anything else.

alt$ gcc -print-file-name=liblto_plugin.so
liblto_plugin.so

Other distros:

opensuse# gcc -print-file-name=liblto_plugin.so
/usr/lib64/gcc/x86_64-suse-linux/11/liblto_plugin.so

clearlinux# gcc -print-file-name=liblto_plugin.so
/usr/lib64/gcc/x86_64-generic-linux/11/liblto_plugin.so

fedora# gcc -print-file-name=liblto_plugin.so
liblto_plugin.so
Comment 1 Gleb F-Malinovskiy 2021-07-30 20:09:27 MSK
(In reply to Vitaly Chikunov from comment #0)
> man gcc:
>   -print-file-name=library
>       Print the full absolute name of the library file library that
>       would be used when linking---and don't do anything else.

$ gcc -print-search-dirs
install: /usr/lib64/gcc/x86_64-alt-linux/10/
programs: =/usr/libexec/gcc/x86_64-alt-linux/10/:/usr/libexec/gcc/x86_64-alt-linux/10/:/usr/libexec/gcc/x86_64-alt-linux/:/usr/lib64/gcc/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/bin/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/bin/
libraries: =/usr/lib64/gcc/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/../lib64/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../lib64/:/lib/x86_64-alt-linux/10/:/lib/../lib64/:/usr/lib/x86_64-alt-linux/10/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../:/lib/:/usr/lib/

В gcc есть две опции на эту тему:
* -print-file-name (она ищет в путях libraries:)
* -print-prog-name (она ищет в путях programs:)

> alt$ gcc -print-file-name=liblto_plugin.so
> liblto_plugin.so
> 
> Other distros:
> 
> opensuse# gcc -print-file-name=liblto_plugin.so
> /usr/lib64/gcc/x86_64-suse-linux/11/liblto_plugin.so
> 
> clearlinux# gcc -print-file-name=liblto_plugin.so
> /usr/lib64/gcc/x86_64-generic-linux/11/liblto_plugin.so

В некоторых дистрибутивах libraries и programs кладутся в одно и то же место.

> fedora# gcc -print-file-name=liblto_plugin.so
> liblto_plugin.so

А в некотороых -- в разные, в таких дистрибутивах работает только
$ gcc -print-prog-name=liblto_plugin.so
/usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so
Comment 2 Vitaly Chikunov 2021-07-30 20:23:22 MSK
Значит так и должно быть? Меня смутило "full absolute name".
Comment 3 Dmitry V. Levin 2021-07-30 20:52:45 MSK
(In reply to Vitaly Chikunov from comment #2)
> Значит так и должно быть? Меня смутило "full absolute name".

Это если найдёт, то full absolute name.
Comment 4 Vitaly Chikunov 2021-07-30 20:54:10 MSK
(Ответ для Dmitry V. Levin на комментарий #3)
> (In reply to Vitaly Chikunov from comment #2)
> > Значит так и должно быть? Меня смутило "full absolute name".
> 
> Это если найдёт, то full absolute name.

Теперь понял. Спасибо!
Comment 5 Dmitry V. Levin 2021-07-30 20:54:46 MSK
(In reply to Gleb F-Malinovskiy from comment #1)
> В некоторых дистрибутивах libraries и programs кладутся в одно и то же место.
> 
> > fedora# gcc -print-file-name=liblto_plugin.so
> > liblto_plugin.so
> 
> А в некотороых -- в разные, в таких дистрибутивах работает только
> $ gcc -print-prog-name=liblto_plugin.so
> /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so

Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries?
Это же plugin, а не executable.
Comment 6 Vitaly Chikunov 2021-07-30 22:30:12 MSK
(Ответ для Dmitry V. Levin на комментарий #5)
> Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries?
> Это же plugin, а не executable.


Видимо, надо переложить в /usr/lib64/gcc/x86_64-alt-linux/10/
Comment 7 Dmitry V. Levin 2021-07-30 22:32:33 MSK
(In reply to Vitaly Chikunov from comment #6)
> (Ответ для Dmitry V. Levin на комментарий #5)
> > Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries?
> > Это же plugin, а не executable.
> 
> Видимо, надо переложить в /usr/lib64/gcc/x86_64-alt-linux/10/

Зависит от того, для каких процессов предназначен этот плагин.
Comment 8 Vitaly Chikunov 2021-07-30 22:37:48 MSK
> Зависит от того, для каких процессов предназначен этот плагин.

Для libbfd, и всех кто с ней слинкован. В binutils это:

/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/gprof
/usr/bin/ld.bfd
/usr/bin/ld.default
/usr/bin/nm
/usr/bin/objcopy
/usr/bin/objdump
/usr/bin/ranlib
/usr/bin/size
/usr/bin/strings
/usr/bin/strip

ps.
$ strings /usr/lib64/libbfd-2.35.1.20210104.so|grep bfd-pl
/usr/bin/../lib/bfd-plugins
/usr/lib64/bfd-plugins
Comment 9 Vitaly Chikunov 2021-07-30 22:45:54 MSK
$ findsym-remote bfd_plugin_set_plugin:
sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/ar bfd_plugin_set_plugin:U
sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/nm bfd_plugin_set_plugin:U
sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/ranlib bfd_plugin_set_plugin:U
sisyphus x86_64 kcov-38-alt3.x86_64.rpm usr/bin/kcov bfd_plugin_set_plugin@@Base:T
sisyphus x86_64 perf-5.13-alt1.x86_64.rpm usr/bin/trace bfd_plugin_set_plugin@@Base:T
sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/lib64/libbfd-2.35.2.20210110.so bfd_plugin_set_plugin@@Base:T
Comment 10 Vitaly Chikunov 2021-07-30 22:51:21 MSK
То есть юзают только ar, nm, ranlib, а kcov и perf слинкованы статически.

Или "для каких процессов" вопрос был о чём-то другом?
Comment 11 Dmitry V. Levin 2021-07-30 22:53:47 MSK
(In reply to Vitaly Chikunov from comment #10)
> То есть юзают только ar, nm, ranlib, а kcov и perf слинкованы статически.

Т.е. может использовать практически кто угодно.
Тогда получается, что плагин не на месте.
Comment 12 Vitaly Chikunov 2021-07-30 22:57:15 MSK
Переоткрыл и переименовал ошибку.
Comment 13 Vitaly Chikunov 2021-07-30 23:05:16 MSK
  $ rpm -ql gcc10 | grep /usr/libexec/gcc
  /usr/libexec/gcc/x86_64-alt-linux/10
  /usr/libexec/gcc/x86_64-alt-linux/10/collect2
  /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so
  /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so.0
  /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so.0.0.0
  /usr/libexec/gcc/x86_64-alt-linux/10/lto-wrapper
  /usr/libexec/gcc/x86_64-alt-linux/10/lto1
  /usr/libexec/gcc/x86_64-alt-linux/10/plugin
  /usr/libexec/gcc/x86_64-alt-linux/10/plugin/gengtype

У opensuse и clr /usr/libexec/gcc/ нет и все оттуда лежит в /usr/lib64/gcc/*/11/
Comment 14 Vitaly Chikunov 2021-07-31 23:33:18 MSK
(Ответ для Dmitry V. Levin на комментарий #11)
> Тогда получается, что плагин не на месте.

Сделал пример задания где он переложен https://git.altlinux.org/tasks/281519/

  builder@x86_64:~$ gcc -print-file-name=liblto_plugin.so
  /usr/lib64/gcc/x86_64-alt-linux/10/liblto_plugin.so
Comment 15 Gleb F-Malinovskiy 2021-08-02 11:05:47 MSK
(In reply to Dmitry V. Levin from comment #5)
> (In reply to Gleb F-Malinovskiy from comment #1)
> > В некоторых дистрибутивах libraries и programs кладутся в одно и то же место.
> > 
> > > fedora# gcc -print-file-name=liblto_plugin.so
> > > liblto_plugin.so
> > 
> > А в некотороых -- в разные, в таких дистрибутивах работает только
> > $ gcc -print-prog-name=liblto_plugin.so
> > /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so
> 
> Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries?
> Это же plugin, а не executable.
Это как раз очевидно, они в programs кладут helper-ы, а в libraries кладут то, с чем имеет смысл линковаться.

Но решение меня вполне устраивает, хоть идея смешивать это всё и не вызывает у меня восторга.
Comment 16 Repository Robot 2021-08-02 18:44:19 MSK
gcc10-10.3.1-alt3 -> sisyphus:

 Sat Jul 31 2021 Vitaly Chikunov <vt@altlinux> 10.3.1-alt3
 - Move contents of libexecdir to libdir (ALT#40611).