Justin Holewinski
2012-May-31 21:39 UTC
[LLVMdev] [PATCH] Allow per-thread re-direction of outs()/errs()
The attached patch add the ability to programmatically re-direct outs()/errs() to an arbitrary raw_ostream instance, maintaining the raw_ostream instances in a stack structure so clients can push/pop streams at will. The stack is also maintained in thread-local storage, so different threads can re-direct individually. This allows for two use cases: 1. Compilers can attach custom streams to outs()/errs() to intercept output from LLVM without needing to play with STDOUT/STDERR. 2. Compilers can receive LLVM output from different threads individually, instead of having all diagnostics dumped to a single stream. Unit tests are included in the patch. ----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ----------------------------------------------------------------------------------- -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Add-the-ability-to-assign-custom-streams-to-outs-err.patch Type: application/octet-stream Size: 7465 bytes Desc: 0001-Add-the-ability-to-assign-custom-streams-to-outs-err.patch URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120531/311c07c0/attachment.obj>
Chris Lattner
2012-Jun-01 03:06 UTC
[LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
On May 31, 2012, at 2:39 PM, Justin Holewinski wrote:> The attached patch add the ability to programmatically re-direct outs()/errs() to an arbitrary raw_ostream instance, maintaining the raw_ostream instances in a stack structure so clients can push/pop streams at will. The stack is also maintained in thread-local storage, so different threads can re-direct individually. This allows for two use cases: > > 1. Compilers can attach custom streams to outs()/errs() to intercept output from LLVM without needing to play with STDOUT/STDERR. > 2. Compilers can receive LLVM output from different threads individually, instead of having all diagnostics dumped to a single stream.This isn't the right approach. Nothing in the library part of the compiler should be hard coding a stream to write to. What are you trying to accomplish? -Chris
Justin Holewinski
2012-Jun-01 05:21 UTC
[LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
On Thu, May 31, 2012 at 8:06 PM, Chris Lattner <clattner at apple.com> wrote:> > On May 31, 2012, at 2:39 PM, Justin Holewinski wrote: > > > The attached patch add the ability to programmatically re-direct > outs()/errs() to an arbitrary raw_ostream instance, maintaining the > raw_ostream instances in a stack structure so clients can push/pop streams > at will. The stack is also maintained in thread-local storage, so > different threads can re-direct individually. This allows for two use > cases: > > > > 1. Compilers can attach custom streams to outs()/errs() to intercept > output from LLVM without needing to play with STDOUT/STDERR. > > 2. Compilers can receive LLVM output from different threads > individually, instead of having all diagnostics dumped to a single stream. > > This isn't the right approach. Nothing in the library part of the > compiler should be hard coding a stream to write to. What are you trying > to accomplish? >There are a lot of places where warning/debug information is passed directly to errs(). For example, take the Linker class. You can tell it to omit errors/warnings, but it would be preferable to let it emit the errors/warnings to some compiler-controlled stream for message triaging. For compilers that are (a) multi-threaded, or (b) invoked as part of an embedded library, writing any information from the core libraries directly to stderr is bad. I want to be able to capture this output without messing with the process' stdout/stderr streams. This patch essentially prevents LLVM library code from having to hard-code streams for error/warning/diagnostic output. Library code can just use outs()/errs() as they do now, but the compiler process/thread now has the ability to re-direct this output as it sees fit. If no such functionality is needed, the default behavior is to write to stdout/stderr as it does now.> > -Chris > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >-- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120531/5206dc1b/attachment.html>
Reasonably Related Threads
- [LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
- [LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
- [LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
- [LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()
- [LLVMdev] [llvm-commits] [PATCH] Allow per-thread re-direction of outs()/errs()