llvm 12 regression bug with llvm-ar

Hey all,

As a little bit of background, HardenedBSD compiles (nearly) the whole
operating system (static/shared libraries and applications) with LTO.
HardenedBSD is a derivative of FreeBSD that follows FreeBSD very
closely (we merge in changes from FreeBSD every six hours).

Over the weekend, FreeBSD merged in llvm 12 (upgrading from llvm 11).
We've found at least one regression with llvm-ar. Below is the log of
the llvm error output. I'm sure you all will need more context, so
please let me know how I can help in that regard.

==== BEGIN LOG ====
===> lib/libzstd (obj,all,install)
building static zstd library
ar rcv libprivatezstd.a entropy_common.o error_private.o fse_decompress.o pool.o threading.o xxhash.o zstd_common.o fse_compress.o huf_compress.o zstd_compress.o zstd_compress_literals.o zstd_compress_sequences.o zstd_compress_superblock.o zstdmt_compress.o huf_decompress.o zstd_ddict.o zstd_decompress.o zstd_decompress_block.o zbuff_common.o zbuff_compress.o zbuff_decompress.o cover.o divsufsort.o zdict.o zstd_fast.o zstd_lazy.o zstd_ldm.o zstd_opt.o zstd_double_fast.o debug.o hist.o fastcover.o
Assertion failed: ((Record[i] == 5 || Record[i] == 6) && "Invalid attribute group entry"), function parseAttributeGroupBlock, file /usr/src/contrib/llvm-project/llvm/lib/Bitcode/Reader/BitcodeReader.cpp, line 1645.
PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace.
Stack dump:
0. Program arguments: ar rcv libprivatezstd.a entropy_common.o error_private.o fse_decompress.o pool.o threading.o xxhash.o zstd_common.o fse_compress.o huf_compress.o zstd_compress.o zstd_compress_literals.o zstd_compress_sequences.o zstd_compress_superblock.o zstdmt_compress.o huf_decompress.o zstd_ddict.o zstd_decompress.o zstd_decompress_block.o zbuff_common.o zbuff_compress.o zbuff_decompress.o cover.o divsufsort.o zdict.o zstd_fast.o zstd_lazy.o zstd_ldm.o zstd_opt.o zstd_double_fast.o debug.o hist.o fastcover.o
#0 0x0000010ea28e6f86 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:564:13
#1 0x0000010ea28e4de1 llvm::sys::RunSignalHandlers() /usr/src/contrib/llvm-project/llvm/lib/Support/Signals.cpp:69:18
#2 0x0000010ea28e7815 SignalHandler /usr/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:3
#3 0x000003a50c98161e handle_signal /usr/src/lib/libthr/thread/thr_sig.c:0:3
==== END LOG ====

Thanks,

I've uploaded the object files here:
https://hardenedbsd.org/~shawn/2021-06-14_libzstd.tar.xz

Thanks,

Hey all,

As a little bit of background, HardenedBSD compiles (nearly) the whole
operating system (static/shared libraries and applications) with LTO.
HardenedBSD is a derivative of FreeBSD that follows FreeBSD very
closely (we merge in changes from FreeBSD every six hours).

Over the weekend, FreeBSD merged in llvm 12 (upgrading from llvm 11).
We've found at least one regression with llvm-ar. Below is the log of
the llvm error output. I'm sure you all will need more context, so
please let me know how I can help in that regard.

Can you file a bug for this and put release-12.0.1 in the blocks field.

We are getting close to the release, so there may not be enough time to
fix this, but I would like to track this bug anyway.

-Tom

Thanks for the response! I've filed a bug report here:
https://bugs.llvm.org/show_bug.cgi?id=50706

I'm going to try to figure out which specific object file is causing
llvm-ar to crash. I'll report back when I know more.

Thanks,

Hi Shawn,

Just to make sure, these object files are actually LLVM bitcode, right?
(Since you're trying to do LTO here.)

-Dimitry

They are. I just figured out that we're not including llvm-ar in the
bootstrap tools stage, so we're using the system llvm-ar. We'll need
to bootstrap llvm-ar in order to be able to support the changes to
LLVM IR that are in llvm 12, but not in 11.

So it's looking like the bug I filed might be solved by including
llvm-ar in the bootstrap-tools stage. I'll update you as I know more.

Thanks,

It seems that even if this is a bug in HardenedBSD's build, it would
be nice if LLVM tools can provide a better (actionable) error message
rather than tripping over an assertion.