1 //===-- StackID.cpp ---------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "lldb/Target/StackID.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 #include "lldb/Core/Stream.h"
17 #include "lldb/Symbol/Block.h"
18 #include "lldb/Symbol/Symbol.h"
19 #include "lldb/Symbol/SymbolContext.h"
20 
21 using namespace lldb_private;
22 
23 
24 void
25 StackID::Dump (Stream *s)
26 {
27     s->Printf("StackID (start_pc = 0x%16.16llx, cfa = 0x%16.16llx, symbol_scope = %p", (uint64_t)m_start_pc, (uint64_t)m_cfa, m_symbol_scope);
28     if (m_symbol_scope)
29     {
30         SymbolContext sc;
31 
32         m_symbol_scope->CalculateSymbolContext (&sc);
33         if (sc.block)
34             s->Printf(" (Block {0x%8.8x})", sc.block->GetID());
35         else if (sc.symbol)
36             s->Printf(" (Symbol{0x%8.8x})", sc.symbol->GetID());
37     }
38     s->PutCString(") ");
39 }
40 
41 bool
42 lldb_private::operator== (const StackID& lhs, const StackID& rhs)
43 {
44     return lhs.GetCallFrameAddress()    == rhs.GetCallFrameAddress()    &&
45            lhs.GetSymbolContextScope()  == rhs.GetSymbolContextScope()  &&
46            lhs.GetStartAddress()        == rhs.GetStartAddress();
47 }
48 
49 bool
50 lldb_private::operator!= (const StackID& lhs, const StackID& rhs)
51 {
52     return lhs.GetCallFrameAddress()    != rhs.GetCallFrameAddress()    ||
53            lhs.GetSymbolContextScope()  != rhs.GetSymbolContextScope()  ||
54            lhs.GetStartAddress()        != rhs.GetStartAddress();
55 }
56 
57 bool
58 lldb_private::operator< (const StackID& lhs, const StackID& rhs)
59 {
60     return lhs.GetCallFrameAddress()    < rhs.GetCallFrameAddress();
61 }
62