124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- LogChannelDWARF.cpp ------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "LogChannelDWARF.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1284cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/PluginManager.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "SymbolFileDWARF.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// when the one and only logging channel is abled, then this will be non NULL.
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerstatic LogChannelDWARF* g_log_channel = NULL;
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::LogChannelDWARF () :
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    LogChannel ()
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::~LogChannelDWARF ()
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::Initialize()
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PluginManager::RegisterPlugin (GetPluginNameStatic(),
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   GetPluginDescriptionStatic(),
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   LogChannelDWARF::CreateInstance);
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::Terminate()
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PluginManager::UnregisterPlugin (LogChannelDWARF::CreateInstance);
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannel*
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::CreateInstance ()
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return new LogChannelDWARF ();
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
540e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Claytonlldb_private::ConstString
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetPluginNameStatic()
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
575e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton    return SymbolFileDWARF::GetPluginNameStatic();
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char *
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetPluginDescriptionStatic()
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return "DWARF log channel for debugging plug-in issues.";
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
660e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Claytonlldb_private::ConstString
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetPluginName()
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return GetPluginNameStatic();
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetPluginVersion()
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 1;
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
80926060e198137f8a64face70455324a8cd4362a5Caroline TiceLogChannelDWARF::Delete ()
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    g_log_channel = NULL;
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
85926060e198137f8a64face70455324a8cd4362a5Caroline Tice
86926060e198137f8a64face70455324a8cd4362a5Caroline Ticevoid
876c530f2201be4788dedf3d5970399220fbd50b11Jim InghamLogChannelDWARF::Disable (const char **categories, Stream *feedback_strm)
88926060e198137f8a64face70455324a8cd4362a5Caroline Tice{
89952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    if (m_log_ap.get() == NULL)
904370585560d02cebe03fe47792fb6b24d6a2b627Greg Clayton        return;
914370585560d02cebe03fe47792fb6b24d6a2b627Greg Clayton
92952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    uint32_t flag_bits = m_log_ap->GetMask().Get();
936c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham    for (size_t i = 0; categories[i] != NULL; ++i)
94926060e198137f8a64face70455324a8cd4362a5Caroline Tice    {
956c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham         const char *arg = categories[i];
96926060e198137f8a64face70455324a8cd4362a5Caroline Tice
9786b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        if      (::strcasecmp (arg, "all")        == 0) flag_bits &= ~DWARF_LOG_ALL;
9886b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "info")       == 0) flag_bits &= ~DWARF_LOG_DEBUG_INFO;
9986b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "line")       == 0) flag_bits &= ~DWARF_LOG_DEBUG_LINE;
10086b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "pubnames")   == 0) flag_bits &= ~DWARF_LOG_DEBUG_PUBNAMES;
10186b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "pubtypes")   == 0) flag_bits &= ~DWARF_LOG_DEBUG_PUBTYPES;
10286b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "aranges")    == 0) flag_bits &= ~DWARF_LOG_DEBUG_ARANGES;
10386b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "lookups")    == 0) flag_bits &= ~DWARF_LOG_LOOKUPS;
104fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan        else if (::strcasecmp (arg, "map")        == 0) flag_bits &= ~DWARF_LOG_DEBUG_MAP;
10586b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "default")    == 0) flag_bits &= ~DWARF_LOG_DEFAULT;
10686b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strncasecmp(arg, "comp", 4)    == 0) flag_bits &= ~DWARF_LOG_TYPE_COMPLETION;
107926060e198137f8a64face70455324a8cd4362a5Caroline Tice        else
108926060e198137f8a64face70455324a8cd4362a5Caroline Tice        {
109926060e198137f8a64face70455324a8cd4362a5Caroline Tice            feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
110926060e198137f8a64face70455324a8cd4362a5Caroline Tice            ListCategories (feedback_strm);
111926060e198137f8a64face70455324a8cd4362a5Caroline Tice        }
112926060e198137f8a64face70455324a8cd4362a5Caroline Tice   }
113926060e198137f8a64face70455324a8cd4362a5Caroline Tice
114926060e198137f8a64face70455324a8cd4362a5Caroline Tice    if (flag_bits == 0)
115926060e198137f8a64face70455324a8cd4362a5Caroline Tice        Delete ();
116926060e198137f8a64face70455324a8cd4362a5Caroline Tice    else
117952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        m_log_ap->GetMask().Reset (flag_bits);
118926060e198137f8a64face70455324a8cd4362a5Caroline Tice
119926060e198137f8a64face70455324a8cd4362a5Caroline Tice    return;
120926060e198137f8a64face70455324a8cd4362a5Caroline Tice}
121926060e198137f8a64face70455324a8cd4362a5Caroline Tice
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::Enable
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StreamSP &log_stream_sp,
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t log_options,
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Stream *feedback_strm,  // Feedback stream for argument errors etc
1286c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham    const char **categories  // The categories to enable within this logging stream, if empty, enable default set
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner)
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
131926060e198137f8a64face70455324a8cd4362a5Caroline Tice    Delete ();
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
133952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    if (m_log_ap)
134952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        m_log_ap->SetStream(log_stream_sp);
135952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    else
136952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        m_log_ap.reset(new Log (log_stream_sp));
137952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    g_log_channel = this;
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t flag_bits = 0;
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool got_unknown_category = false;
1416c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham    for (size_t i = 0; categories[i] != NULL; ++i)
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
1436c530f2201be4788dedf3d5970399220fbd50b11Jim Ingham        const char *arg = categories[i];
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14586b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        if      (::strcasecmp (arg, "all")        == 0) flag_bits |= DWARF_LOG_ALL;
14686b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "info")       == 0) flag_bits |= DWARF_LOG_DEBUG_INFO;
14786b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "line")       == 0) flag_bits |= DWARF_LOG_DEBUG_LINE;
14886b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "pubnames")   == 0) flag_bits |= DWARF_LOG_DEBUG_PUBNAMES;
14986b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "pubtypes")   == 0) flag_bits |= DWARF_LOG_DEBUG_PUBTYPES;
15086b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "aranges")    == 0) flag_bits |= DWARF_LOG_DEBUG_ARANGES;
15186b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "lookups")    == 0) flag_bits |= DWARF_LOG_LOOKUPS;
152fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan        else if (::strcasecmp (arg, "map")        == 0) flag_bits |= DWARF_LOG_DEBUG_MAP;
15386b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strcasecmp (arg, "default")    == 0) flag_bits |= DWARF_LOG_DEFAULT;
15486b391bd742589c2b243e7c4beb5fa522ee0c481Greg Clayton        else if (::strncasecmp(arg, "comp", 4)    == 0) flag_bits |= DWARF_LOG_TYPE_COMPLETION;
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        else
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            feedback_strm->Printf("error: unrecognized log category '%s'\n", arg);
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            if (got_unknown_category == false)
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                got_unknown_category = true;
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                ListCategories (feedback_strm);
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (flag_bits == 0)
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        flag_bits = DWARF_LOG_DEFAULT;
167952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    m_log_ap->GetMask().Reset(flag_bits);
168952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    m_log_ap->GetOptions().Reset(log_options);
169952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    return m_log_ap.get() != NULL;
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::ListCategories (Stream *strm)
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
175dad26a854b57808fb6a6c0ae82a17f06f595d9cdGreg Clayton    strm->Printf ("Logging categories for '%s':\n"
176dad26a854b57808fb6a6c0ae82a17f06f595d9cdGreg Clayton                  "  all - turn on all available logging categories\n"
177dad26a854b57808fb6a6c0ae82a17f06f595d9cdGreg Clayton                  "  info - log the parsing if .debug_info\n"
178dad26a854b57808fb6a6c0ae82a17f06f595d9cdGreg Clayton                  "  line - log the parsing if .debug_line\n"
179dad26a854b57808fb6a6c0ae82a17f06f595d9cdGreg Clayton                  "  pubnames - log the parsing if .debug_pubnames\n"
180c7bbd271fba425130f82dfa028d68c92282e4fdcGreg Clayton                  "  pubtypes - log the parsing if .debug_pubtypes\n"
181464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton                  "  lookups - log any lookups that happen by name, regex, or address\n"
182464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton                  "  completion - log struct/unions/class type completions\n"
183464a5063bc59755cb6ec063d0b2491097302d2abGreg Clayton                  "  map - log insertions of object files into DWARF debug maps\n",
1840e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton                  SymbolFileDWARF::GetPluginNameStatic().GetCString());
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
187952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog *
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetLog ()
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (g_log_channel)
191952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        return g_log_channel->m_log_ap.get();
192c7bbd271fba425130f82dfa028d68c92282e4fdcGreg Clayton
193952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    return NULL;
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
196952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog *
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::GetLogIfAll (uint32_t mask)
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
199952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    if (g_log_channel && g_log_channel->m_log_ap.get())
200f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    {
201952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        if (g_log_channel->m_log_ap->GetMask().AllSet(mask))
202952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            return g_log_channel->m_log_ap.get();
203f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    }
204952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    return NULL;
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
207952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg ClaytonLog *
208c80dca73893e5b24f4d16c092da75532715b405eGreg ClaytonLogChannelDWARF::GetLogIfAny (uint32_t mask)
209c80dca73893e5b24f4d16c092da75532715b405eGreg Clayton{
210952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    if (g_log_channel && g_log_channel->m_log_ap.get())
211c80dca73893e5b24f4d16c092da75532715b405eGreg Clayton    {
212952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        if (g_log_channel->m_log_ap->GetMask().AnySet(mask))
213952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            return g_log_channel->m_log_ap.get();
214c80dca73893e5b24f4d16c092da75532715b405eGreg Clayton    }
215952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    return NULL;
216c80dca73893e5b24f4d16c092da75532715b405eGreg Clayton}
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerLogChannelDWARF::LogIf (uint32_t mask, const char *format, ...)
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (g_log_channel)
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
223952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        Log *log = g_log_channel->m_log_ap.get();
224952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        if (log && log->GetMask().AnySet(mask))
225952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        {
226952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            va_list args;
227952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            va_start (args, format);
228952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            log->VAPrintf (format, args);
229952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton            va_end (args);
230952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton        }
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
233