• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- MsgHandling.cpp ----------------------------------------------------===//
2 //
3 //                     The MCLinker Project
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 #include "mcld/LD/DiagnosticEngine.h"
10 #include "mcld/LD/DiagnosticLineInfo.h"
11 #include "mcld/LD/DiagnosticPrinter.h"
12 #include "mcld/LD/MsgHandler.h"
13 #include "mcld/LD/TextDiagnosticPrinter.h"
14 #include "mcld/Support/MsgHandling.h"
15 #include "mcld/Support/raw_ostream.h"
16 
17 #include <llvm/Support/ManagedStatic.h>
18 #include <llvm/Support/raw_ostream.h>
19 #include <llvm/Support/Signals.h>
20 
21 #include <cstdlib>
22 
23 namespace mcld {
24 
25 //===----------------------------------------------------------------------===//
26 // static variables
27 //===----------------------------------------------------------------------===//
28 static llvm::ManagedStatic<DiagnosticEngine> g_pEngine;
29 
InitializeDiagnosticEngine(const LinkerConfig & pConfig,DiagnosticPrinter * pPrinter)30 void InitializeDiagnosticEngine(const LinkerConfig& pConfig,
31                                 DiagnosticPrinter* pPrinter) {
32   g_pEngine->reset(pConfig);
33   if (pPrinter != NULL)
34     g_pEngine->setPrinter(*pPrinter, false);
35   else {
36     DiagnosticPrinter* printer =
37         new TextDiagnosticPrinter(errs(), pConfig);
38     g_pEngine->setPrinter(*printer, true);
39   }
40 }
41 
getDiagnosticEngine()42 DiagnosticEngine& getDiagnosticEngine() {
43   return *g_pEngine;
44 }
45 
Diagnose()46 bool Diagnose() {
47   if (g_pEngine->getPrinter()->getNumErrors() > 0) {
48     // If we reached here, we are failing ungracefully. Run the interrupt
49     // handlers
50     // to make sure any special cleanups get done, in particular that we remove
51     // files registered with RemoveFileOnSignal.
52     llvm::sys::RunInterruptHandlers();
53     g_pEngine->getPrinter()->finish();
54     return false;
55   }
56   return true;
57 }
58 
FinalizeDiagnosticEngine()59 void FinalizeDiagnosticEngine() {
60   g_pEngine->getPrinter()->finish();
61 }
62 
63 }  // namespace mcld
64