Infinite loop on ARM
MagaTailor opened this issue · 8 comments
Trying to run the multiply example from zcdziura/pumpkin on ARM Linux, never fnishes, not even getting to the first println. (the example takes just 12s on x86)
Letting it run for a while produces the following profile:
--------------------------------------------------------------------------------
Ir
--------------------------------------------------------------------------------
5,158,779,308 PROGRAM TOTALS
--------------------------------------------------------------------------------
Ir file:function
--------------------------------------------------------------------------------
1,097,181,200 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::limb::mul::h42f9717ba7a0c591 [/pumpkin/target/release/examples/multiply]
822,885,900 /src/libcore/num/mod.rs:ramp::ll::limb::mul::h42f9717ba7a0c591
680,088,987 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::mul::submul_1_generic::hbeb09a870749cc21
440,138,242 /ramp-0.2.4/src/ll/mul.rs:ramp::ll::mul::submul_1_generic::hbeb09a870749cc21 [/pumpkin/target/release/examples/multiply]
370,224,000 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::mul::addmul_1_generic::hfa83cc681e5292db
274,295,300 /src/libcore/ops.rs:ramp::ll::limb::mul::h42f9717ba7a0c591
263,206,125 /ramp-0.2.4/src/ll/mul.rs:ramp::ll::mul::addmul_1_generic::hfa83cc681e5292db [/pumpkin/target/release/examples/multiply]
250,919,928 /src/libcore/ptr.rs:ramp::ll::mul::submul_1_generic::hbeb09a870749cc21
170,022,246 /src/libcore/num/mod.rs:ramp::ll::mul::submul_1_generic::hbeb09a870749cc21
130,156,875 /src/libcore/ptr.rs:ramp::ll::mul::addmul_1_generic::hfa83cc681e5292db
92,556,000 /src/libcore/num/mod.rs:ramp::ll::mul::addmul_1_generic::hfa83cc681e5292db
61,571,727 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::addsub::add_n_generic::h8017fb3f696c3827
49,425,624 /ramp-0.2.4/src/ll/div.rs:ramp::ll::div::invert_pi::h37e4002131b72562 [/pumpkin/target/release/examples/multiply]
35,384,665 /ramp-0.2.4/src/ll/addsub.rs:ramp::ll::addsub::add_n_generic::h8017fb3f696c3827 [/pumpkin/target/release/examples/multiply]
32,008,950 /ramp-0.2.4/src/ll/mul.rs:ramp::ll::mul::mul_basecase::h24ea3d00965ade9a [/pumpkin/target/release/examples/multiply]
30,008,121 /build/eglibc-euxZvP/eglibc-2.19/malloc/malloc.c:_int_malloc [/lib/arm-linux-gnueabihf/libc-2.19.so]
24,692,260 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::div::divrem_3by2::h3ad1011bead13922
23,355,848 /src/libcore/num/mod.rs:ramp::ll::div::divrem_3by2::h3ad1011bead13922
19,817,019 /src/libcore/ptr.rs:ramp::ll::addsub::add_n_generic::h8017fb3f696c3827
19,476,292 /build/eglibc-euxZvP/eglibc-2.19/malloc/malloc.c:_int_free [/lib/arm-linux-gnueabihf/libc-2.19.so]
19,211,688 /build/eglibc-euxZvP/eglibc-2.19/string/../ports/sysdeps/arm/memset.S:memset [/lib/arm-linux-gnueabihf/libc-2.19.so]
18,511,200 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::mul::mul_1_generic::hb74fcfb822b9692a
17,819,126 /ramp-0.2.4/src/ll/div.rs:ramp::ll::div::divrem_3by2::h3ad1011bead13922 [/pumpkin/target/release/examples/multiply]
17,020,241 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::addsub::sub_n_generic::h8a9a928dc6dc2db7
15,130,058 /ramp-0.2.4/src/ll/addsub.rs:ramp::ll::addsub::sub_n_generic::h8a9a928dc6dc2db7 [/pumpkin/target/release/examples/multiply]
14,461,875 /ramp-0.2.4/src/ll/mul.rs:ramp::ll::mul::mul_1_generic::hb74fcfb822b9692a [/pumpkin/target/release/examples/multiply]
13,819,125 /ramp-0.2.4/src/ll/mod.rs:ramp::mem::TmpAllocator::allocate::h6d2af0ca83521b26
10,969,176 /src/libcore/num/mod.rs:ramp::ll::div::invert_pi::h37e4002131b72562
9,068,068 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::div::divrem_1::h00ea568e6ff59101
9,042,938 /build/eglibc-euxZvP/eglibc-2.19/malloc/malloc.c:malloc'2 [/lib/arm-linux-gnueabihf/libc-2.19.so]
8,677,125 /src/libcore/ptr.rs:ramp::ll::mul::mul_1_generic::hb74fcfb822b9692a
6,969,621 /src/libcore/ptr.rs:ramp::ll::addsub::sub_n_generic::h8a9a928dc6dc2db7
6,919,952 /ramp-0.2.4/src/ll/mod.rs:ramp::ll::div::invert_pi::h37e4002131b72562
6,916,488 /ramp-0.2.4/src/int.rs:ramp::int::Int::with_capacity::hbad52ef439589d1c'2 [/pumpkin/target/release/examples/multiply]
6,855,740 /ramp-0.2.4/src/ll/mul.rs:ramp::ll::div::invert_pi::h37e4002131b72562
5,944,943 ???:__udivsi3 [/lib/arm-linux-gnueabihf/libgcc_s.so.1]
5,811,630 /ramp-0.2.4/src/ll/div.rs:ramp::ll::div::divrem_1::h00ea568e6ff59101 [/pumpkin/target/release/examples/multiply]
4,841,424 /ramp-0.2.4/src/ll/limb.rs:ramp::ll::limb::mul::h42f9717ba7a0c591'2 [/pumpkin/target/release/examples/multiply]
4,723,641 /ramp-0.2.4/src/ll/mod.rs:ramp::int::Int::with_capacity::hbad52ef439589d1c'2
3,631,068 /src/libcore/num/mod.rs:ramp::ll::limb::mul::h42f9717ba7a0c591'2
3,123,600 /build/eglibc-euxZvP/eglibc-2.19/malloc/malloc.c:free [/lib/arm-linux-gnueabihf/libc-2.19.so]
3,085,200 /src/libcore/num/mod.rs:ramp::ll::mul::mul_1_generic::hb74fcfb822b9692a
2,742,296 /ramp-0.2.4/src/ll/limb_ptr.rs:ramp::ll::div::invert_pi::h37e4002131b72562
2,552,655 /src/libcore/num/mod.rs:_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$::reserve_exact::hb7fda2cd8a63e7ac
2,487,954 /src/libcore/num/mod.rs:ramp::ll::div::divrem_1::h00ea568e6ff59101
Probably a rustc bug, both 1.9 and 1.10 produce broken code. Any suggestions?
Not surprisingly some tests fail:
test div::assign_baseint ... FAILED
test count_ones ... ok
test div::assign_i32 ... FAILED
test div::assign_usize ... FAILED
test div::assign_limb ... FAILED
test div::baseint_int ... ok
test div::i32_int ... ok
test div::int_baseint ... FAILED
test div::int_i32 ... FAILED
test div::assign_intref ... FAILED
test div::int_limb ... FAILED
test div::int_usize ... FAILED
test div::int_int ... FAILED
test div::intref_int ... FAILED
test div::assign_int ... FAILED
test div::int_intref ... FAILED
test div::usize_int ... ok
test dsquare ... FAILED
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"8849803919073"`, right: `"8597451702272"`)', tests/quickcheck.rs:762
test format::debug ... FAILED
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"9029714407493269026017417734137839691007213564442062089896904729616809044024142790379484059617269584959837407582902363009113429674987305841500896332882143717103751709451516746827689130546499776908068799372322622534992258334284425859971"`, right: `"3490060671491993686214905888792446194871103440964562448490091323288508271396753595134714873778185535371292782690510811579720506174632528388926877180137531000296377700657826113854424337781216261876299677067551323714090195986427259387908"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"5713886196822985594106667841465769528176853953767844242824527910650530279415437531154089102105674883623051073154253182377862855489000142063496472236639819549329944103905099929312095761827444327784356635858"`, right: `"2753172420589426449564691924584874498873256307070177196185577168310139217156823622641882942253473415554542748706619381585092138275232145260247057630738890719526975532118328407785058629601288899817220603904"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"5871970368832091240885816628360906039656033280063516190180346613585375822439507569820436759955028105664801901417825338693225803397007659824133896887424000466256578694412673794"`, right: `"2171870087935699189718787761912670127725060173613950751922295045558204937459105416211047829349130593816884876374970539055793888526740600647961557330427742461096334202809352191"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"3934972798989292307331229006723822505854692627010346685509766049208278419000946355495357831723854845458295821730135456671610812430789644580210009"`, right: `"1713303403591394173863728166508504406757816963544563655840537955839295703252039954393104918962948139711322359057473768684154478105621737412493312"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"2688633295290066818105497824615555387719288059024241312783168019897650855849048171695532459463252669860170763452529"`, right: `"1351558073875347736651661409192795041963000307892155599736925167383214994891230805767277700895903965127891654541312"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1772936324527772151357447733725496001813962702045777118351861859374958772220766093176494833447291489619434931"`, right: `"1288946222186420189525281342690272371256828601734309768425870101340498919383269124762799931426910367133990912"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"378945777648903906789695716026380594533179877282076491959881732589000490694509622968631330970291135"`, right: `"1229234907328052701497346251192352648979977227911290901590223409023760718711156010401534968783293120512"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"2330353817500888298291790719247231558935961406937025231209265420380711281930210075307191381740230"`, right: `"1172289759948780728814455271904328011493661144171992208090041550658951491080432901765379875930112"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1449966612869523721353952613849716863241933252155559712169035137895401304975805790218969715"`, right: `"1117982635449200371565299293426826488011990684673301895227471876772834292488510991826419712"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1818420132404134103684359450194274417090216860519831155519331982033368490196463061720"`, right: `"1066191325616073962750720303942514884960165676759054084041091801426729481209288589312"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1319809570512615485910127877749274102287901999540778440094618525735834859172828"`, right: `"1016799283615182841063232711737170109710851361044935306588260461260537606438912"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1186990385049000993431805962821334327600196421581392849115004854769250102"`, right: `"969695361724074212134583198296709165297366486592231089199314557323968512"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1592100713752950986124072184402880617464374600080755553330926496033"`, right: `"924773561214517795691092680260380902573935019104224290084185178112"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1049961164700998186739596529046369044849782671450896059989941"`, right: `"881932793821828647318928413639431860517439860443329134067712"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"971753689315263468711456704001656404898493675547214804"`, right: `"841076654264286658591202176703864918248596058314637312"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"1379952715086360674366063258038855809629286828356"`, right: `"802113203300749453154756714538445394753070886912"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"858693220763714433808174470436897667102988"`, right: `"764954760838269665865666117227979082825728"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"795551270212833032574810782500809594"`, right: `"729517708624143281808534733989695628"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"781510631392534438342335907468"`, right: `"695722302078383714493307813634"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"702954579302276211512605"`, right: `"663492490843185152524287"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"651298696660445870"`, right: `"632755747645554687"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"621716927544"`, right: `"603442905087"`)', tests/quickcheck.rs:755
thread 'safe' panicked at 'assertion failed: `(left == right)` (left: `"39887945675"`, right: `"37715181567"`)', tests/quickcheck.rs:755
test format::display ... FAILED
test divmod ... FAILED
test div::intref_intref ... FAILED
test format::lowerhex ... ok
test from::i16 ... ok
test from::i32 ... ok
test from::i64 ... ok
test format::binary ... ok
test from::isize ... ok
test from::i8 ... ok
test format::upperhex ... ok
test from::u16 ... ok
test format::octal ... ok
test from::u32 ... ok
test from::usize ... ok
test from::u8 ... ok
error: Process didn't exit successfully: `/ramp/target/debug/quickcheck-a52d6e57e32cbbcf` (signal: 11, SIGSEGV: invalid memory reference)
Have you seen this issue - #55
Yeah, if memory serves a few months ago I ran the bench suite just fine (and probably the tests too)
It looks to me it hasn't been fixed as far as I can see, comparing some of the code from
Line 476 in a7228cb
Ok, must have been the benchmarks then.
The patches on that issue got the tests to pass for me on a 32 bit ARM device
(Raspberry Pi)
I saw that issue, from a quick perusal definitely thought the fix must have been merged.
I'll try to remember to apply those fixes, even better if somebody else can submit a PR with them.