Bug 31914

Summary: [FR][e2k] сделать возможной сборку не-gcc (или сильно старым gcc)
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: perlAssignee: viy <viy>
Status: CLOSED WORKSFORME QA Contact:
Severity: enhancement    
Priority: P3 CC: at, crux, viy
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
lcc support none

Description Michael Shigorin 2016-03-22 22:33:28 MSK
Пронаблюдал проблему сборки lcc на "Эльбрусе":

gcc -fstack-protector -L/usr/local/lib -o miniperl \
    perlmini.o opmini.o miniperlmain.o  gv.o toke.o perly.o pad.o regcomp.o
    dump.o util.o mg.o reentr.o mro_core.o keywords.o hv.o av.o run.o pp_hot.o
    sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o
    deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o
    locale.o pp_pack.o pp_sort.o caretx.o   -lpthread -lnsl -ldl -lm -lcrypt
    -lutil -lc
opmini.o: In function `Perl_ck_rvconst':
/home/mike/RPM/BUILD/perl-5.22.1/opmini.c:198618: undefined reference to `_Static_assert'
opmini.o: In function `Perl_rpeep':
/home/mike/RPM/BUILD/perl-5.22.1/opmini.c:201699: undefined reference to `_Static_assert'
toke.o: In function `Perl_lex_start':
/home/mike/RPM/BUILD/perl-5.22.1/toke.c:679: undefined reference to `_Static_assert'
pp_hot.o: In function `Perl_pp_padrange':
/home/mike/RPM/BUILD/perl-5.22.1/pp_hot.c:358: undefined reference to `_Static_assert'
sv.o: In function `Perl_sv_upgrade':
/home/mike/RPM/BUILD/perl-5.22.1/sv.c:1230: undefined reference to `_Static_assert'
sv.o:/home/mike/RPM/BUILD/perl-5.22.1/sv.c:1230: more undefined references to `_Static_assert' follow
make: *** [lib/buildcustomize.pl] Error 1

Она же описана по этим ссылкам применительно к другим не-gcc, старым gcc и схожим случаям:

* https://forums.gentoo.org/viewtopic-p-7462508.html
* http://git.kernel.org/cgit/utils/kernel/kmod/kmod.git/patch/?id=dc8ed09f8f21d17ef9481001683d7edfdb308983
* http://permalink.gmane.org/gmane.comp.compilers.tinycc.devel/2715
* http://www.nntp.perl.org/group/perl.perl5.porters/2015/01/msg225172.html
* https://rt.perl.org/Public/Bug/Display.html?id=123682
** https://rt.perl.org/Public/Ticket/Attachment/1328635/709088/0001-static_assert-workaround-for-AIX-xlc.patch

Было бы здорово по возможности подправить, если что-то по этим ссылкам окажется достаточно очевидным.
Comment 1 Michael Shigorin 2016-03-22 22:49:08 MSK
PS: выставляется там __LCC__
Comment 2 viy 2016-03-22 23:06:34 MSK
напрашивается такой патч:

Миша, проверь, пожалуйста.

iff --git a/perl.h b/perl.h
index dcb184b..3e7cde2 100644
--- a/perl.h
+++ b/perl.h
@@ -3543,7 +3543,8 @@ typedef pthread_key_t     perl_key;
    STATIC_ASSERT_STMT expands to a statement and is suitable for use inside a
    function.
 */
-#if (defined(static_assert) || (defined(__cplusplus) && __cplusplus >= 201103L)) && (!defined(__IBMC__) || __IBMC__ >= 1210)
+#if (defined(static_assert) || (defined(__cplusplus) && __cplusplus >= 201103L)) && (!defined(__IBMC__) || __IBMC__ >= 1210) && (!defined(__LCC__)) 
+
 /* static_assert is a macro defined in <assert.h> in C11 or a compiler
    builtin in C++11.
 */
Comment 3 viy 2016-03-22 23:07:45 MSK
Created attachment 6676 [details]
lcc support
Comment 4 Michael Shigorin 2016-03-22 23:29:26 MSK
И впрямь; зарядил сборку.
Comment 5 Michael Shigorin 2016-03-22 23:53:52 MSK
Спасибо, так miniperl собирается, но падает уже дальше при запуске;
отправил грохот разработчикам МЦСТ.  Наверное, в пакет пока не стоит.
Comment 6 Michael Shigorin 2017-08-18 19:06:09 MSK
Исходная проблема не наблюдается на perl-5.24.2-alt1 и lcc-1.21.20;
для сегфолта miniperl коллегами из МЦСТ предложен обход, проблема в работе.