Summary: | маленькие функции бессистемно пропадают из DWARF | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Big Benis <big.benis> |
Component: | gcc5 | Assignee: | Gleb F-Malinovskiy <glebfm> |
Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P3 | CC: | evg, glebfm, mike |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
URL: | https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63572 |
Description
Big Benis
2016-09-01 07:15:35 MSK
В gcc-4.9 это еще работало. $ rm -fv libmp3lame/set_get.lo removed ‘libmp3lame/set_get.lo’ $ make -C libmp3lame CFLAGS='-g -O2' CC='gcc-5' ... $ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg <2297> 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='-g -O2' CC='gcc-4.9' ... $ readelf -w libmp3lame/.libs/set_get.o |grep et_ogg <227f> DW_AT_name : (indirect string, offset: 0xbaa): lame_set_ogg <22be> 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 Очень даже системно. Это результат оптимизации -fipa-icf. Мужчина! В библиотеке 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. Сегодня эта штука заработала лучше, чем вчера. Можно в принципе довольно полную информацию обо всех типах извлечь. Как говорил Ельцин, берите бинарной совместимости сколько хотите. Мужчины. Я скачал 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 То получается что там всё нормально. Мужчины, вы поймите. Вы - болезнь на теле общества. Вы ничего хорошего создать не можете, вы только портите людям жизнь, и получаете за это деньги, между прочим. Я вам багу зарепортил, мне через неделю говорят: "gcc5 is already the newest version". Вам было не судьба разобраться и счерри-пикнуть что там надо было счерри-пикнуть. Я призываю всех мыслящих людей к диссенту против альт линукса. Этот засратый дистрибутив портит нам жизнь. В gcc6 это безобразие исправлено, в gcc5 исправлять смысла нет. |