From: Mike Sullivan Date: Mon, 9 Jul 2018 16:17:10 +0000 Subject: [PATCH] Avoid flow link error on ppc64 by eliminating bignum_align inlining The libtoa_stubs.a library created when building ocaml-dtoa on ppc64le contains the bignum_align.part.4 section created by the compiler optimizing the bignum_align(). This causes the linking against the library on ppc64le to report errors like we see when building the flow package. For example: /usr/lib/gcc/powerpc64le-alpine-linux-musl/6.4.0/../../../../powerpc64le-alpine-linux-musl/bin/ld: /usr/lib/ocaml/lwt/liblwt_unix_stubs.a(unix_lseek_job.o): In function `result_lseek': /home/buildozer/aports/testing/ocaml-lwt/src/lwt-3.2.1/_build/default/src/unix/unix_lseek_job.c:113:(.text+0xb8): call to `result_lseek.part.0' lacks nop, can't restore toc; (-mcmodel=small toc adjust stub) /usr/lib/gcc/powerpc64le-alpine-linux-musl/6.4.0/../../../../powerpc64le-alpine-linux-musl/bin/ld: /usr/lib/ocaml/lwt/liblwt_unix_stubs.a(unix_lseek_job.o): In function `result_lseek_64': /home/buildozer/aports/testing/ocaml-lwt/src/lwt-3.2.1/_build/default/src/unix/unix_lseek_job.c:134:(.text+0x134): call to `result_lseek_64.part.1' lacks nop, can't restore toc; (-mcmodel=small toc adjust stub) --- a/src/bignum.c 2018-07-09 14:12:25.025413017 +0000 +++ b/src/bignum.c 2018-07-09 14:13:23.210604404 +0000 @@ -86,7 +86,7 @@ } -void bignum_align(bignum* num, bignum other) { +__attribute__((noinline)) void bignum_align(bignum* num, bignum other) { if (num->exponent > other.exponent) { // If "X" represents a "hidden" digit (by the exponent) then we are in the // following case (a == this, b == other):