Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Nov 2018 13:03:42 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, ports-list freebsd <freebsd-ports@freebsd.org>, multimedia@FreeBSD.org
Subject:   head -r340287 based  powerpc64: multimedia/ffmpeg -r484273 gets a system-clang assert failure
Message-ID:  <A27C8775-139E-4DDF-8EDF-2DCFB3B03AD1@yahoo.com>

next in thread | raw e-mail | index | archive | help
During a (native) poudriere-devel run I got the following failure.
[Unfortunately clang and poudriere are mismatched for where the
preprocessed source(s) and run script(s) are placed as far as
what is in the poudriere tar archive produced. But I did have
kern.corefile set so that the core file was captured.]

This happens to be on powerpc64 where I experiment with using
fairly modern cc/c++ and the like. devel/powerpc64-xtoolchain-gcc
was used for buildworld buildkernel and clang was built as cc.
But the system binutils is from base/binutils . So not an official
gcc 4.2.1 toolchain context, more of a futures-testing context.

The error report from clang (after 332 other ports had built):

cc: error: unable to execute command: Abort trap (core dumped)
cc: error: clang frontend command failed due to signal (use -v to see =
invocation)
FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on =
LLVM 6.0.1)
Target: powerpc64-unknown-freebsd13.0
Thread model: posix
InstalledDir: /usr/bin
cc: note: diagnostic msg: PLEASE submit a bug report to =
https://bugs.freebsd.org/submit/ and include the crash backtrace, =
preprocessed source, and associated run script.
cc: note: diagnostic msg:=20
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
cc: note: diagnostic msg: /tmp/vf_convolution-9639c0.c
cc: note: diagnostic msg: /tmp/vf_convolution-9639c0.sh
cc: note: diagnostic msg:=20

********************
gmake[1]: *** [ffbuild/common.mak:60: libavfilter/vf_convolution.o] =
Error 254
gmake[1]: *** Waiting for unfinished jobs....
gmake[1]: Leaving directory =
'/wrkdirs/usr/ports/multimedia/ffmpeg/work/ffmpeg-4.1'
=3D=3D=3D> Compilation failed unexpectedly.
Try to set MAKE_JOBS_UNSAFE=3Dyes and rebuild before reporting the =
failure to
the maintainer.
*** Error code 1

Core was generated by `/usr/bin/cc -cc1 -triple =
powerpc64-unknown-freebsd13.0 -emit-obj -disable-free -'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00000000131c69e8 in .__sys_thr_kill () at thr_kill.S:3
3	RSYSCALL(thr_kill)

(gdb) bt
#0  0x00000000131c69e8 in .__sys_thr_kill () at thr_kill.S:3
#1  0x00000000131c5fbc in __raise (s=3D<optimized out>) at =
/usr/src/lib/libc/gen/raise.c:52
#2  0x0000000013187bf0 in abort () at =
/usr/src/lib/libc/stdlib/abort.c:79
#3  0x00000000131b47d8 in __assert (func=3D<optimized out>, =
file=3D<optimized out>, line=3D<optimized out>, failedexpr=3D<optimized =
out>) at /usr/src/lib/libc/gen/assert.c:51
#4  0x0000000011e2d2c8 in llvm::EVT::getSimpleVT () at =
/usr/src/contrib/llvm/include/llvm/CodeGen/ValueTypes.h:254
#5  llvm::TargetLoweringBase::getSimpleValueType () at =
/usr/src/contrib/llvm/include/llvm/CodeGen/TargetLowering.h:1047
#6  mightUseCTR () at =
/usr/src/contrib/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp:407
#7  0x0000000011e2fca8 in convertToCTRLoop () at =
/usr/src/contrib/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp:527
#8  0x0000000011e31eec in runOnFunction () at =
/usr/src/contrib/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp:210
#9  0x000000001256c6dc in llvm::FPPassManager::runOnFunction () at =
/usr/src/contrib/llvm/lib/IR/LegacyPassManager.cpp:1520
#10 0x000000001256c878 in llvm::FPPassManager::runOnModule () at =
/usr/src/contrib/llvm/lib/IR/LegacyPassManager.cpp:1541
#11 0x000000001256d760 in runOnModule () at =
/usr/src/contrib/llvm/lib/IR/LegacyPassManager.cpp:1597
#12 llvm::legacy::PassManagerImpl::run () at =
/usr/src/contrib/llvm/lib/IR/LegacyPassManager.cpp:1700
#13 0x0000000010d4fb9c in EmitAssembly () at =
/usr/src/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:815
#14 0x0000000010d51758 in clang::EmitBackendOutput () at =
/usr/src/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:1181
#15 0x00000000103add10 in clang::BackendConsumer::HandleTranslationUnit =
() at =
/usr/src/contrib/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:294
#16 0x0000000010912e64 in clang::ParseAST () at =
/usr/src/contrib/llvm/tools/clang/lib/Parse/ParseAST.cpp:159
#17 0x00000000108fcfb8 in clang::ASTFrontendAction::ExecuteAction () at =
/usr/src/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:999
#18 0x00000000103accec in clang::CodeGenAction::ExecuteAction () at =
/usr/src/contrib/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:1031
#19 0x0000000010901ba0 in clang::FrontendAction::Execute () at =
/usr/src/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:897
#20 0x00000000112625c0 in clang::CompilerInstance::ExecuteAction () at =
/usr/src/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:991
#21 0x000000001039516c in clang::ExecuteCompilerInvocation () at =
/usr/src/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocati=
on.cpp:252
#22 0x00000000103894f8 in cc1_main () at =
/usr/src/contrib/llvm/tools/clang/tools/driver/cc1_main.cpp:221
#23 0x00000000103418b4 in ExecuteCC1Tool () at =
/usr/src/contrib/llvm/tools/clang/tools/driver/driver.cpp:310
#24 main () at =
/usr/src/contrib/llvm/tools/clang/tools/driver/driver.cpp:389

The assert looks to be the one listed in:

    /// Return the SimpleValueType held in the specified simple EVT.
    MVT getSimpleVT() const {
      assert(isSimple() && "Expected a SimpleValueType!");
      return V;
    }

This is in:

  /// Extended Value Type. Capable of holding value types which are not =
native
  /// for any processor (such as the i12345 type), as well as the types =
an MVT
  /// can represent.
  struct EVT {
. . .

in:

/usr/src/contrib/llvm/include/llvm/CodeGen/ValueTypes.h

Used from:

/usr/src/contrib/llvm/include/llvm/CodeGen/TargetLowering.h 's
class TargetLoweringBase 's:

  /// Return the MVT corresponding to this LLVM type. See getValueType.
  MVT getSimpleValueType(const DataLayout &DL, Type *Ty,
                         bool AllowUnknown =3D false) const {
    return getValueType(DL, Ty, AllowUnknown).getSimpleVT();
  }

in turn used from:

/usr/src/contrib/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp 's
bool PPCCTRLoops::mightUseCTR(BasicBlock *BB)  's:

        unsigned Opcode =3D 0;
        if (F->getIntrinsicID() !=3D Intrinsic::not_intrinsic) {
          switch (F->getIntrinsicID()) {
          default: continue;
          // If we have a call to ppc_is_decremented_ctr_nonzero, or =
ppc_mtctr
          // we're definitely using CTR.
          case Intrinsic::ppc_is_decremented_ctr_nonzero:
          case Intrinsic::ppc_mtctr:
            return true;

// VisualStudio defines setjmp as _setjmp
#if defined(_MSC_VER) && defined(setjmp) && \
                       !defined(setjmp_undefined_for_msvc)
#  pragma push_macro("setjmp")
#  undef setjmp
#  define setjmp_undefined_for_msvc
#endif

          case Intrinsic::setjmp:

#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
 // let's return it to _setjmp state
#  pragma pop_macro("setjmp")
#  undef setjmp_undefined_for_msvc
#endif

          case Intrinsic::longjmp:

          // Exclude eh_sjlj_setjmp; we don't need to exclude =
eh_sjlj_longjmp
          // because, although it does clobber the counter register, the
          // control can't then return to inside the loop unless there =
is also
          // an eh_sjlj_setjmp.
          case Intrinsic::eh_sjlj_setjmp:
         =20
          case Intrinsic::memcpy:
          case Intrinsic::memmove:
          case Intrinsic::memset:
          case Intrinsic::powi:
          case Intrinsic::log:
          case Intrinsic::log2:
          case Intrinsic::log10:
          case Intrinsic::exp:
          case Intrinsic::exp2:
          case Intrinsic::pow:
          case Intrinsic::sin:
          case Intrinsic::cos:
            return true;
          case Intrinsic::copysign:
            if (CI->getArgOperand(0)->getType()->getScalarType()->
                isPPC_FP128Ty())
              return true;
            else
              continue; // ISD::FCOPYSIGN is never a library call.
          case Intrinsic::sqrt:               Opcode =3D ISD::FSQRT;     =
 break;
          case Intrinsic::floor:              Opcode =3D ISD::FFLOOR;    =
 break;
          case Intrinsic::ceil:               Opcode =3D ISD::FCEIL;     =
 break;
          case Intrinsic::trunc:              Opcode =3D ISD::FTRUNC;    =
 break;
          case Intrinsic::rint:               Opcode =3D ISD::FRINT;     =
 break;
          case Intrinsic::nearbyint:          Opcode =3D =
ISD::FNEARBYINT; break;
          case Intrinsic::round:              Opcode =3D ISD::FROUND;    =
 break;
          case Intrinsic::minnum:             Opcode =3D ISD::FMINNUM;   =
 break;
          case Intrinsic::maxnum:             Opcode =3D ISD::FMAXNUM;   =
 break;
          case Intrinsic::umul_with_overflow: Opcode =3D ISD::UMULO;     =
 break;
          case Intrinsic::smul_with_overflow: Opcode =3D ISD::SMULO;     =
 break;
          }
        }



          // Conversion happens only for FP calls.
          if (!CI->getArgOperand(0)->getType()->isFloatingPointTy())
            return true;
     =20
          switch (Func) {
          default: return true;
          case LibFunc_copysign:
          case LibFunc_copysignf:
            continue; // ISD::FCOPYSIGN is never a library call.
          case LibFunc_copysignl:
            return true;
          case LibFunc_fabs:
          case LibFunc_fabsf:
          case LibFunc_fabsl:
            continue; // ISD::FABS is never a library call.
          case LibFunc_sqrt:
          case LibFunc_sqrtf:
          case LibFunc_sqrtl:
            Opcode =3D ISD::FSQRT; break;
          case LibFunc_floor:
          case LibFunc_floorf:
          case LibFunc_floorl:
            Opcode =3D ISD::FFLOOR; break;
          case LibFunc_nearbyint:
          case LibFunc_nearbyintf:
          case LibFunc_nearbyintl:
            Opcode =3D ISD::FNEARBYINT; break;
          case LibFunc_ceil:
          case LibFunc_ceilf:
          case LibFunc_ceill:
            Opcode =3D ISD::FCEIL; break;
          case LibFunc_rint:
          case LibFunc_rintf:
          case LibFunc_rintl:
            Opcode =3D ISD::FRINT; break;
          case LibFunc_round:
          case LibFunc_roundf:
          case LibFunc_roundl:
            Opcode =3D ISD::FROUND; break;
          case LibFunc_trunc:
          case LibFunc_truncf:
          case LibFunc_truncl:
            Opcode =3D ISD::FTRUNC; break;
          case LibFunc_fmin:
          case LibFunc_fminf:
          case LibFunc_fminl:
            Opcode =3D ISD::FMINNUM; break;
          case LibFunc_fmax:
          case LibFunc_fmaxf:
          case LibFunc_fmaxl:
            Opcode =3D ISD::FMAXNUM; break;
          }
        }

        if (Opcode) {
          MVT VTy =3D TLI->getSimpleValueType(
              *DL, CI->getArgOperand(0)->getType(), true);
          if (VTy =3D=3D MVT::Other)
            return true;

          if (TLI->isOperationLegalOrCustom(Opcode, VTy))
            continue;
          else if (VTy.isVector() &&
                   TLI->isOperationLegalOrCustom(Opcode, =
VTy.getScalarType()))
            continue;

          return true;
        }
. . .

The compile line from the log was:

cc -I. -I./ -DLIBICONV_PLUG -isystem /usr/local/include -D_ISOC99_SOURCE =
-D_FILE_OFFSET_BITS=3D64 -D_LARGEFILE_SOURCE -DPIC -DZLIB_CONST =
-DHAVE_AV_CONFIG_H -DBUILDING_avfilter -O2 -pipe  -DLIBICONV_PLUG -g =
-isystem /usr/local/include -fno-strict-aliasing    -std=3Dc11 =
-fomit-frame-pointer -fPIC -maltivec -mabi=3Daltivec -pthread  =
-I/usr/local/include -I/usr/local/include/p11-kit-1 -I/usr/local/include =
-I/usr/local/include/freetype2 -I/usr/local/include/freetype2 =
-I/usr/local/include/opus -I/usr/local/include/opus -I/usr/local/include =
-I/usr/local/include -I/usr/local/include -I/usr/local/include =
-I/usr/local/include -I/usr/local/include -I/usr/local/include =
-I/usr/local/include -I/usr/local/include -I/usr/local/include -pthread =
-I/usr/local/include -pthread -I/usr/local/include -pthread =
-I/usr/local/include -pthread -I/usr/local/include -I/usr/local/include =
-Wdeclaration-after-statement -Wall -Wdisabled-optimization =
-Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef =
-Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes =
-Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length =
-Wno-pointer-sign -Wno-unused-const-variable -O3 -fno-math-errno =
-fno-signed-zeros -mstack-alignment=3D16 -Qunused-arguments =
-Werror=3Dimplicit-function-declaration -Werror=3Dmissing-prototypes =
-Werror=3Dreturn-type  -MMD -MF libavfilter/vf_convolution.d -MT =
libavfilter/vf_convolution.o -c -o libavfilter/vf_convolution.o =
libavfilter/vf_convolution.c

As for context vintages:

# svnlite info /usr/ports/multimedia/ffmpeg
Path: /usr/ports/multimedia/ffmpeg
Working Copy Root Path: /usr/ports
URL: svn://svn0.us-west.freebsd.org/ports/head/multimedia/ffmpeg
Relative URL: ^/head/multimedia/ffmpeg
Repository Root: svn://svn0.us-west.freebsd.org/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 484783
Node Kind: directory
Schedule: normal
Last Changed Author: jbeich
Last Changed Rev: 484273
Last Changed Date: 2018-11-05 17:50:26 -0800 (Mon, 05 Nov 2018)

# uname -apKU
FreeBSD FBSDG5L 13.0-CURRENT FreeBSD 13.0-CURRENT #1 r340287M: Fri Nov  =
9 19:30:13 PST 2018     =
markmi@FBSDFSSD:/usr/obj/powerpc64vtsc_xtoolchain-gcc/powerpc.powerpc64/us=
r/src/powerpc.powerpc64/sys/GENERIC64vtsc-NODBG  powerpc powerpc64 =
1300003 1300003


Right now it looks like the poudriere run still has 3+ hours to
go for the rest of the ports to build.

=3D=3D=3D
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A27C8775-139E-4DDF-8EDF-2DCFB3B03AD1>