[llvm-dev] Dealing with llvm::errs() and friends in dynamic libs on Windows (original) (raw)
Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 11 11:46:29 PDT 2018
- Previous message: [llvm-dev] Dealing with llvm::errs() and friends in dynamic libs on Windows
- Next message: [llvm-dev] How to avoid multiple registers definitions in customInserter.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 9/9/2018 9:30 AM, Janus Lynggaard Thorborg via llvm-dev wrote:
Hello,
outs() and errs() are routinely used around llvm and cannot really be disabled. It would seem that in certain types of Windows applications, stderr and stdout are not opened by default, which is an assumption of llvm.
LLVM libraries shouldn't write to outs() unless you explicitly request it; at best it points somewhere useless, at worst it'll corrupt output written to stdout. We consider it a bug if this happens. (Quickly grep'ing, it looks like there's a bug where lib/MC/MCParser/AsmParser.cpp will write to outs() when given a ".print" directive, but I'm guessing you're very unlikely to run into that.)
The default error reporting mechanism for errors compiling unsupported LLVM IR constructs writes to errs(), but you can override that by calling LLVMContext::setDiagnosticHandler(). Otherwise, we consider it a bug if LLVM libraries write to errs() without an explicit request. (There's a lot of code which writes to errs, but it's diagnostics which should not run by default.)
Please report a bug or send a patch if you're running into issues with some specific construct that causes LLVM to write to outs() or errs() incorrectly.
This leaves errs() and outs() with an error code, because writing calls will fail due to invalid fd handles. Thus, when an llvm lib is unloaded, it will terminate the entire process due to a non-zero EC in ~rawfdostream() that calls reportfatalerror().
This seems a bit unfriendly, particularly since the error gets delayed far past the point it would actually be useful, but it probably indicates something else is going wrong. Even on Unixy systems where stdout and stderr are usually open, they often don't point anywhere useful for GUI programs.
-Eli
-- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
- Previous message: [llvm-dev] Dealing with llvm::errs() and friends in dynamic libs on Windows
- Next message: [llvm-dev] How to avoid multiple registers definitions in customInserter.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]