From 35be65cb1ceeb1f509ee4696871ddb86a8d16d8f Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 29 Oct 2020 23:09:57 -0700 Subject: [PATCH] [MC] Fix an assert in MCAssembler::writeSectionData to be aware of errors If MCContext has an error, MCAssembler::layout may stop early and some MCFragment's may not finalize. In the Linux kernel, arch/x86/lib/memcpy_64.S could trigger the assert before "x86_64: Change .weak to SYM_FUNC_START_WEAK for arch/x86/lib/mem*_64.S" --- llvm/lib/MC/MCAssembler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp index 1b2eb24..1422014 100644 --- a/llvm/lib/MC/MCAssembler.cpp +++ b/llvm/lib/MC/MCAssembler.cpp @@ -768,7 +768,8 @@ void MCAssembler::writeSectionData(raw_ostream &OS, const MCSection *Sec, for (const MCFragment &F : *Sec) writeFragment(OS, *this, Layout, F); - assert(OS.tell() - Start == Layout.getSectionAddressSize(Sec)); + assert(getContext().hadError() || + OS.tell() - Start == Layout.getSectionAddressSize(Sec)); } std::tuple -- 2.7.4