<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>32461</bug_id>
          
          <creation_ts>2016-09-01 07:15:35 +0300</creation_ts>
          <short_desc>маленькие функции бессистемно пропадают из DWARF</short_desc>
          <delta_ts>2018-07-13 02:40:00 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gcc5</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63572</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Big Benis">big.benis</reporter>
          <assigned_to name="Gleb F-Malinovskiy">glebfm</assigned_to>
          <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>mike</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>158380</commentid>
    <comment_count>0</comment_count>
    <who name="Big Benis">big.benis</who>
    <bug_when>2016-09-01 07:15:35 +0300</bug_when>
    <thetext>Если попытаться пересобрать имеющийся пакет lame в текущей среде, то получаем:

$ nm libmp3lame/.libs/set_get.o |grep et_ogg
0000000000000370 T lame_get_ogg
0000000000000360 T lame_set_ogg
$ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg
    &lt;2297&gt;   DW_AT_name        : (indirect string, offset: 0xe4c): lame_set_ogg
  0x00000e50 5f736574 5f6f6767 00707265 666c6167 _set_ogg.preflag

Возникает вопрос, куда делся DIE для функции lame_get_ogg. Для set есть, а для get нету.  Если однако компилировать с -O1, то DIE появляется.

$ rm -fv libmp3lame/set_get.lo 
removed ‘libmp3lame/set_get.lo’
$ make -C libmp3lame CFLAGS=&apos;-g -O1&apos;
...
$ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg
    &lt;2297&gt;   DW_AT_name        : (indirect string, offset: 0xc14): lame_set_ogg
    &lt;22d6&gt;   DW_AT_name        : (indirect string, offset: 0x120): lame_get_ogg
  0x00000120 6c616d65 5f676574 5f6f6767 006c616d lame_get_ogg.lam
  0x00000c10 74657200 6c616d65 5f736574 5f6f6767 ter.lame_set_ogg

В других библиотеках тоже такие случаи замечены. Получается что доступ к сигнатурам функций то ли есть то ли нихрена нету. Потому что всё это очень сильно глючит. А больше всех, на мой взгляд, глючит именно в gcc.

$ cat test.c
int var;
int foo(int arg) { return 0; }
int bar(int arg) { return 0; }
int baz(int arg) { return 0; }
int qux(int arg) { return 0; }
$ gcc -O1 -g -S test.c
$ fgrep -w $&apos;&quot;foo\n&quot;bar\n&quot;baz\n&quot;qux&apos; test.s
        .string &quot;foo&quot;
        .string &quot;bar&quot;
        .string &quot;baz&quot;
        .string &quot;qux&quot;
$ gcc -O2 -g -S test.c                    
$ fgrep -w $&apos;&quot;foo\n&quot;bar\n&quot;baz\n&quot;qux&apos; test.s
        .string &quot;qux&quot;

Кагбе если даже строки нету то совсем кисло.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158381</commentid>
    <comment_count>1</comment_count>
    <who name="Big Benis">big.benis</who>
    <bug_when>2016-09-01 07:26:59 +0300</bug_when>
    <thetext>В gcc-4.9 это еще работало.

$ rm -fv libmp3lame/set_get.lo
removed ‘libmp3lame/set_get.lo’      
$ make -C libmp3lame CFLAGS=&apos;-g -O2&apos; CC=&apos;gcc-5&apos;
...
$ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg
    &lt;2297&gt;   DW_AT_name        : (indirect string, offset: 0xbcd): lame_set_ogg
  0x00000bd0 655f7365 745f6f67 67007072 65666c61 e_set_ogg.prefla

$ rm -fv libmp3lame/set_get.lo
removed ‘libmp3lame/set_get.lo’      
$ make -C libmp3lame CFLAGS=&apos;-g -O2&apos; CC=&apos;gcc-4.9&apos;
...
$ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg
    &lt;227f&gt;   DW_AT_name        : (indirect string, offset: 0xbaa): lame_set_ogg
    &lt;22be&gt;   DW_AT_name        : (indirect string, offset: 0x120): lame_get_ogg
  0x00000120 6c616d65 5f676574 5f6f6767 006c616d lame_get_ogg.lam
  0x00000bb0 65745f6f 67670070 7265666c 61670066 et_ogg.preflag.f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158393</commentid>
    <comment_count>2</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2016-09-01 17:20:50 +0300</bug_when>
    <thetext>Очень даже системно. Это результат оптимизации -fipa-icf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158411</commentid>
    <comment_count>3</comment_count>
    <who name="Big Benis">big.benis</who>
    <bug_when>2016-09-02 14:08:41 +0300</bug_when>
    <thetext>Мужчина! В библиотеке libperl-5.22.so ваш компилятор съел сразу 9 маленьких функций.

$ ./provided-symbols /usr/lib64/libperl-5.22.so
...
func    Perl_sortsv_flags       (p, p, i, p, i)
func    Perl_sortsv     (p, p, i, p)
func    Perl_pp_sort    (p)
func    Perl_set_caret_X        (p)
func    XS_DynaLoader_dl_undef_symbols  (p, p)
func    XS_DynaLoader_dl_install_xsub   (p, p)
func    XS_DynaLoader_dl_error  (p, p)
func    XS_DynaLoader_CLONE     (p, p)
func    XS_DynaLoader_dl_find_symbol    (p, p)
func    XS_DynaLoader_dl_unload_file    (p, p)
func    XS_DynaLoader_dl_load_file      (p, p)
func    boot_DynaLoader (p, p)
cannot find DIE for Perl_uvchr_to_utf8_flags 157780
cannot find DIE for Perl_utf8_to_uvchr_buf 158650
cannot find DIE for Perl_uvchr_to_utf8 15e4e0
cannot find DIE for XS_utf8_native_to_unicode 160a40
cannot find DIE for PerlIOBase_popped 163070
cannot find DIE for Perl_sv_nolocking 16ca20
cannot find DIE for NATIVE_TO_NEED 16d060
cannot find DIE for Perl_is_uni_alnum 16d1b0
cannot find DIE for Perl_valid_utf8_to_uvuni 16e550

Ваш недоделанный пальцем компилятор поедает маленькие функции, как медведь чижиков.  Кстати, provided-symbols.c можно посмотреть в github.com/svpv/rpmss.  Сегодня эта штука заработала лучше, чем вчера.  Можно в принципе довольно полную информацию обо всех типах извлечь.  Как говорил Ельцин, берите бинарной совместимости сколько хотите.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158473</commentid>
    <comment_count>4</comment_count>
    <who name="Big Benis">big.benis</who>
    <bug_when>2016-09-07 09:36:40 +0300</bug_when>
    <thetext>Мужчины. Я скачал gcc6:

$ wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-6.2.0/gcc-6.2.0.tar.bz2

Сконфигурировал его буквально так:

$ ../gcc-6.2.0/configure --prefix=$HOME/gcc-6 --enable-languages=c,c++ --disable-multilib --with-system-zlib

Он установился в ~/gcc-6, и что бы вы думали? Всё заработало! Больше не глючит! В частности, если пересобрать lame

$ make -C libmp3lame CC=$HOME/gcc-6/bin/gcc

То получается что там всё нормально.

Мужчины, вы поймите. Вы - болезнь на теле общества. Вы ничего хорошего создать не можете, вы только портите людям жизнь, и получаете за это деньги, между прочим. Я вам багу зарепортил, мне через неделю говорят: &quot;gcc5 is already the newest version&quot;. Вам было не судьба разобраться и счерри-пикнуть что там надо было счерри-пикнуть.

Я призываю всех мыслящих людей к диссенту против альт линукса. Этот засратый дистрибутив портит нам жизнь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172605</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2018-07-13 02:40:00 +0300</bug_when>
    <thetext>В gcc6 это безобразие исправлено, в gcc5 исправлять смысла нет.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>