124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Symbol.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 "lldb/Symbol/Symbol.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Section.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h"
1549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/ObjectFile.h"
1649ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/Symtab.h"
17100b99e751282711167a6921677cc902af70598cMichael Sartain#include "lldb/Symbol/Function.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h"
19eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton#include "lldb/Target/Target.h"
20a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain#include "lldb/Symbol/SymbolVendor.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::Symbol() :
27dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson    SymbolContextScope (),
28444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_uid (UINT32_MAX),
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data (0),
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data_resolved (false),
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_synthetic (false),
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_debug (false),
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_external (false),
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_sibling (false),
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_synthesized (false),
367940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    m_size_is_valid (false),
3701e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton    m_demangled_is_synthesized (false),
382eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_type (eSymbolTypeInvalid),
3977e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_mangled (),
4077e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_addr_range (),
4177e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_flags ()
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::Symbol
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
47444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    uint32_t symID,
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *name,
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool name_is_mangled,
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolType type,
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool external,
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_debug,
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_trampoline,
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_artificial,
553508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    const lldb::SectionSP &section_sp,
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    addr_t offset,
5736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    addr_t size,
58f58438fa7751274b6f4e4b1805940127dce13b00Greg Clayton    bool size_is_valid,
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t flags
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) :
61dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson    SymbolContextScope (),
62444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_uid (symID),
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data (0),
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data_resolved (false),
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_synthetic (is_artificial),
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_debug (is_debug),
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_external (external),
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_sibling (false),
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_synthesized (false),
707940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    m_size_is_valid (size_is_valid || size > 0),
7101e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton    m_demangled_is_synthesized (false),
722eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_type (type),
7377e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_mangled (ConstString(name), name_is_mangled),
7477e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_addr_range (section_sp, offset, size),
7577e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_flags (flags)
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::Symbol
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner(
81444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    uint32_t symID,
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *name,
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool name_is_mangled,
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolType type,
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool external,
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_debug,
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_trampoline,
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool is_artificial,
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const AddressRange &range,
90f58438fa7751274b6f4e4b1805940127dce13b00Greg Clayton    bool size_is_valid,
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t flags
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) :
93dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson    SymbolContextScope (),
94444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_uid (symID),
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data (0),
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data_resolved (false),
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_synthetic (is_artificial),
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_debug (is_debug),
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_external (external),
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_sibling (false),
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_synthesized (false),
1027940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    m_size_is_valid (size_is_valid || range.GetByteSize() > 0),
10301e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton    m_demangled_is_synthesized (false),
1042eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_type (type),
10577e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_mangled (ConstString(name), name_is_mangled),
10677e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_addr_range (range),
10777e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_flags (flags)
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::Symbol(const Symbol& rhs):
112dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson    SymbolContextScope (rhs),
113444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_uid (rhs.m_uid),
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data (rhs.m_type_data),
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_type_data_resolved (rhs.m_type_data_resolved),
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_synthetic (rhs.m_is_synthetic),
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_debug (rhs.m_is_debug),
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_is_external (rhs.m_is_external),
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_sibling (rhs.m_size_is_sibling),
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    m_size_is_synthesized (false),
1217940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    m_size_is_valid (rhs.m_size_is_valid),
12201e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton    m_demangled_is_synthesized (rhs.m_demangled_is_synthesized),
1232eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_type (rhs.m_type),
12477e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_mangled (rhs.m_mangled),
12577e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_addr_range (rhs.m_addr_range),
12677e67a51acb825d79d25be687c085833713d5205Greg Clayton    m_flags (rhs.m_flags)
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst Symbol&
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::operator= (const Symbol& rhs)
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (this != &rhs)
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
1354fb08150367853dae24bb92904356788e919a72fGreg Clayton        SymbolContextScope::operator= (rhs);
136444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton        m_uid = rhs.m_uid;
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_type_data = rhs.m_type_data;
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_type_data_resolved = rhs.m_type_data_resolved;
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_is_synthetic = rhs.m_is_synthetic;
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_is_debug = rhs.m_is_debug;
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_is_external = rhs.m_is_external;
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_size_is_sibling = rhs.m_size_is_sibling;
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_size_is_synthesized = rhs.m_size_is_sibling;
1447940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton        m_size_is_valid = rhs.m_size_is_valid;
14501e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton        m_demangled_is_synthesized = rhs.m_demangled_is_synthesized;
1462eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton        m_type = rhs.m_type;
14777e67a51acb825d79d25be687c085833713d5205Greg Clayton        m_mangled = rhs.m_mangled;
1482eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton        m_addr_range = rhs.m_addr_range;
14977e67a51acb825d79d25be687c085833713d5205Greg Clayton        m_flags = rhs.m_flags;
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return *this;
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
154444e35b5fdf15a25a427285650f06f1390e62c75Greg Claytonvoid
155444e35b5fdf15a25a427285650f06f1390e62c75Greg ClaytonSymbol::Clear()
156444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton{
157444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_uid = UINT32_MAX;
158444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_mangled.Clear();
159444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_type_data = 0;
160444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_type_data_resolved = false;
161444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_is_synthetic = false;
162444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_is_debug = false;
163444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_is_external = false;
164444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_size_is_sibling = false;
165444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_size_is_synthesized = false;
1667940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    m_size_is_valid = false;
16701e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton    m_demangled_is_synthesized = false;
1682eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_type = eSymbolTypeInvalid;
169444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton    m_flags = 0;
1702eb5122c6aa0f4e1eae0f19563741bb3cb68d32eGreg Clayton    m_addr_range.Clear();
171444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton}
172444e35b5fdf15a25a427285650f06f1390e62c75Greg Clayton
1730c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Claytonbool
1740c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg ClaytonSymbol::ValueIsAddress() const
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
1760c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    return m_addr_range.GetBaseAddress().GetSection().get() != NULL;
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::GetSiblingIndex() const
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_size_is_sibling ? m_addr_range.GetByteSize() : 0;
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::IsTrampoline () const
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return m_type == eSymbolTypeTrampoline;
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1914f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopecbool
1924f9103faba72fdfc4b4299d6d459bc820ee597b2Matt KopecSymbol::IsIndirect () const
1934f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec{
1944f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec    return m_type == eSymbolTypeResolver;
1954f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec}
1964f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
198eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg ClaytonSymbol::GetDescription (Stream *s, lldb::DescriptionLevel level, Target *target) const
19912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton{
2002ad894b66a6b5e689d98a7d4d2b7d037ca271b3bGreg Clayton    s->Printf("id = {0x%8.8x}", m_uid);
20115ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton
2023508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    if (m_addr_range.GetBaseAddress().GetSection())
20312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    {
204e136881e5e9730ecf86402419fa5291141980ca3Greg Clayton        if (ValueIsAddress())
20512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton        {
206e136881e5e9730ecf86402419fa5291141980ca3Greg Clayton            const lldb::addr_t byte_size = GetByteSize();
207e136881e5e9730ecf86402419fa5291141980ca3Greg Clayton            if (byte_size > 0)
208c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton            {
209c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton                s->PutCString (", range = ");
210eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton                m_addr_range.Dump(s, target, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
211c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton            }
212c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton            else
213c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton            {
214c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton                s->PutCString (", address = ");
215eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton                m_addr_range.GetBaseAddress().Dump(s, target, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
216c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton            }
21712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton        }
21812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton        else
2195f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea            s->Printf (", value = 0x%16.16" PRIx64, m_addr_range.GetBaseAddress().GetOffset());
22015ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    }
22115ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    else
22215ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    {
22315ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton        if (m_size_is_sibling)
2245f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea            s->Printf (", sibling = %5" PRIu64, m_addr_range.GetBaseAddress().GetOffset());
22515ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton        else
2265f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea            s->Printf (", value = 0x%16.16" PRIx64, m_addr_range.GetBaseAddress().GetOffset());
22712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    }
228b302dffacdadeef509d28133a4c66299418122f8Greg Clayton    if (m_mangled.GetDemangledName())
229b302dffacdadeef509d28133a4c66299418122f8Greg Clayton        s->Printf(", name=\"%s\"", m_mangled.GetDemangledName().AsCString());
230b302dffacdadeef509d28133a4c66299418122f8Greg Clayton    if (m_mangled.GetMangledName())
231b302dffacdadeef509d28133a4c66299418122f8Greg Clayton        s->Printf(", mangled=\"%s\"", m_mangled.GetMangledName().AsCString());
232b302dffacdadeef509d28133a4c66299418122f8Greg Clayton
23312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton}
23412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
23512bec71b323dc520f0e985a86e09c4712559e115Greg Claytonvoid
236eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg ClaytonSymbol::Dump(Stream *s, Target *target, uint32_t index) const
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  s->Indent();
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  s->Printf("Symbol[%5u] %6u %c%c %-12s ",
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    s->Printf("[%5u] %6u %c%c%c %-12s ",
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              index,
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              GetID(),
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              m_is_debug ? 'D' : ' ',
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              m_is_synthetic ? 'S' : ' ',
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              m_is_external ? 'X' : ' ',
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              GetTypeAsString());
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2490c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    // Make sure the size of the symbol is up to date before dumping
2500c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    GetByteSize();
2510c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton
2520c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    if (ValueIsAddress())
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (!m_addr_range.GetBaseAddress().Dump(s, NULL, Address::DumpStyleFileAddress))
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            s->Printf("%*s", 18, "");
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        s->PutChar(' ');
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
259eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton        if (!m_addr_range.GetBaseAddress().Dump(s, target, Address::DumpStyleLoadAddress))
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            s->Printf("%*s", 18, "");
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *format = m_size_is_sibling ?
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                            " Sibling -> [%5llu] 0x%8.8x %s\n":
2645f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea                            " 0x%16.16" PRIx64 " 0x%8.8x %s\n";
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        s->Printf(  format,
266e136881e5e9730ecf86402419fa5291141980ca3Greg Clayton                    GetByteSize(),
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    m_flags,
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    m_mangled.GetName().AsCString(""));
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *format = m_size_is_sibling ?
2735f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea                            "0x%16.16" PRIx64 "                    Sibling -> [%5llu] 0x%8.8x %s\n":
2745f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea                            "0x%16.16" PRIx64 "                    0x%16.16" PRIx64 " 0x%8.8x %s\n";
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        s->Printf(  format,
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    m_addr_range.GetBaseAddress().GetOffset(),
277e136881e5e9730ecf86402419fa5291141980ca3Greg Clayton                    GetByteSize(),
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    m_flags,
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    m_mangled.GetName().AsCString(""));
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::GetPrologueByteSize ()
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2864f9103faba72fdfc4b4299d6d459bc820ee597b2Matt Kopec    if (m_type == eSymbolTypeCode || m_type == eSymbolTypeResolver)
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (!m_type_data_resolved)
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            m_type_data_resolved = true;
291100b99e751282711167a6921677cc902af70598cMichael Sartain
292100b99e751282711167a6921677cc902af70598cMichael Sartain            const Address &base_address = m_addr_range.GetBaseAddress();
293100b99e751282711167a6921677cc902af70598cMichael Sartain            Function *function = base_address.CalculateSymbolContextFunction();
294100b99e751282711167a6921677cc902af70598cMichael Sartain            if (function)
295100b99e751282711167a6921677cc902af70598cMichael Sartain            {
296100b99e751282711167a6921677cc902af70598cMichael Sartain                // Functions have line entries which can also potentially have end of prologue information.
297100b99e751282711167a6921677cc902af70598cMichael Sartain                // So if this symbol points to a function, use the prologue information from there.
298100b99e751282711167a6921677cc902af70598cMichael Sartain                m_type_data = function->GetPrologueByteSize();
299100b99e751282711167a6921677cc902af70598cMichael Sartain            }
300100b99e751282711167a6921677cc902af70598cMichael Sartain            else
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            {
302100b99e751282711167a6921677cc902af70598cMichael Sartain                ModuleSP module_sp (base_address.GetModule());
303100b99e751282711167a6921677cc902af70598cMichael Sartain                SymbolContext sc;
304100b99e751282711167a6921677cc902af70598cMichael Sartain                if (module_sp)
305a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                {
306100b99e751282711167a6921677cc902af70598cMichael Sartain                    uint32_t resolved_flags = module_sp->ResolveSymbolContextForAddress (base_address,
307100b99e751282711167a6921677cc902af70598cMichael Sartain                                                                                         eSymbolContextLineEntry,
308100b99e751282711167a6921677cc902af70598cMichael Sartain                                                                                         sc);
309100b99e751282711167a6921677cc902af70598cMichael Sartain                    if (resolved_flags & eSymbolContextLineEntry)
310a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                    {
311100b99e751282711167a6921677cc902af70598cMichael Sartain                        // Default to the end of the first line entry.
312100b99e751282711167a6921677cc902af70598cMichael Sartain                        m_type_data = sc.line_entry.range.GetByteSize();
313100b99e751282711167a6921677cc902af70598cMichael Sartain
314100b99e751282711167a6921677cc902af70598cMichael Sartain                        // Set address for next line.
315100b99e751282711167a6921677cc902af70598cMichael Sartain                        Address addr (base_address);
316100b99e751282711167a6921677cc902af70598cMichael Sartain                        addr.Slide (m_type_data);
317a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain
318100b99e751282711167a6921677cc902af70598cMichael Sartain                        // Check the first few instructions and look for one that has a line number that is
319100b99e751282711167a6921677cc902af70598cMichael Sartain                        // different than the first entry. This is also done in Function::GetPrologueByteSize().
320100b99e751282711167a6921677cc902af70598cMichael Sartain                        uint16_t total_offset = m_type_data;
321100b99e751282711167a6921677cc902af70598cMichael Sartain                        for (int idx = 0; idx < 6; ++idx)
322a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                        {
323100b99e751282711167a6921677cc902af70598cMichael Sartain                            SymbolContext sc_temp;
324100b99e751282711167a6921677cc902af70598cMichael Sartain                            resolved_flags = module_sp->ResolveSymbolContextForAddress (addr, eSymbolContextLineEntry, sc_temp);
325100b99e751282711167a6921677cc902af70598cMichael Sartain                            // Make sure we got line number information...
326100b99e751282711167a6921677cc902af70598cMichael Sartain                            if (!(resolved_flags & eSymbolContextLineEntry))
327100b99e751282711167a6921677cc902af70598cMichael Sartain                                break;
328100b99e751282711167a6921677cc902af70598cMichael Sartain
329100b99e751282711167a6921677cc902af70598cMichael Sartain                            // If this line number is different than our first one, use it and we're done.
330100b99e751282711167a6921677cc902af70598cMichael Sartain                            if (sc_temp.line_entry.line != sc.line_entry.line)
331100b99e751282711167a6921677cc902af70598cMichael Sartain                            {
332100b99e751282711167a6921677cc902af70598cMichael Sartain                                m_type_data = total_offset;
333100b99e751282711167a6921677cc902af70598cMichael Sartain                                break;
334100b99e751282711167a6921677cc902af70598cMichael Sartain                            }
335100b99e751282711167a6921677cc902af70598cMichael Sartain
336100b99e751282711167a6921677cc902af70598cMichael Sartain                            // Slide addr up to the next line address.
337100b99e751282711167a6921677cc902af70598cMichael Sartain                            addr.Slide (sc_temp.line_entry.range.GetByteSize());
338100b99e751282711167a6921677cc902af70598cMichael Sartain                            total_offset += sc_temp.line_entry.range.GetByteSize();
339100b99e751282711167a6921677cc902af70598cMichael Sartain                            // If we've gone too far, bail out.
340100b99e751282711167a6921677cc902af70598cMichael Sartain                            if (total_offset >= m_addr_range.GetByteSize())
341100b99e751282711167a6921677cc902af70598cMichael Sartain                                break;
342a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                        }
343a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain
344100b99e751282711167a6921677cc902af70598cMichael Sartain                        // Sanity check - this may be a function in the middle of code that has debug information, but
345100b99e751282711167a6921677cc902af70598cMichael Sartain                        // not for this symbol.  So the line entries surrounding us won't lie inside our function.
346100b99e751282711167a6921677cc902af70598cMichael Sartain                        // In that case, the line entry will be bigger than we are, so we do that quick check and
347100b99e751282711167a6921677cc902af70598cMichael Sartain                        // if that is true, we just return 0.
348100b99e751282711167a6921677cc902af70598cMichael Sartain                        if (m_type_data >= m_addr_range.GetByteSize())
349100b99e751282711167a6921677cc902af70598cMichael Sartain                            m_type_data = 0;
350a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                    }
351100b99e751282711167a6921677cc902af70598cMichael Sartain                    else
352100b99e751282711167a6921677cc902af70598cMichael Sartain                    {
353100b99e751282711167a6921677cc902af70598cMichael Sartain                        // TODO: expose something in Process to figure out the
354100b99e751282711167a6921677cc902af70598cMichael Sartain                        // size of a function prologue.
355a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                        m_type_data = 0;
356100b99e751282711167a6921677cc902af70598cMichael Sartain                    }
357a807ceef5dad2b24e5bae5c5a193ff03aa7ec8d9Michael Sartain                }
35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            }
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_type_data;
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::Compare(const ConstString& name, SymbolType type) const
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
368e32a7bf78860bfbf1da863c3ceae4f5d7f89d71bJim Ingham    if (type == eSymbolTypeAny || m_type == type)
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_mangled.GetMangledName() == name || m_mangled.GetDemangledName() == name;
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define ENUM_TO_CSTRING(x)  case eSymbolType##x: return #x;
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char *
37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSymbol::GetTypeAsString() const
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    switch (m_type)
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Invalid);
38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Absolute);
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Code);
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Data);
38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Trampoline);
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Runtime);
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Exception);
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(SourceFile);
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(HeaderFile);
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(ObjectFile);
39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(CommonBlock);
39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Block);
39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Local);
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Param);
39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Variable);
39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(VariableType);
39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(LineEntry);
39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(LineHeader);
39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(ScopeBegin);
39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(ScopeEnd);
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Additional);
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Compiler);
40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Instrumentation);
40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ENUM_TO_CSTRING(Undefined);
4043f69eacbb218a37390822c89d3675bd740590382Greg Clayton    ENUM_TO_CSTRING(ObjCClass);
4053f69eacbb218a37390822c89d3675bd740590382Greg Clayton    ENUM_TO_CSTRING(ObjCMetaClass);
4063f69eacbb218a37390822c89d3675bd740590382Greg Clayton    ENUM_TO_CSTRING(ObjCIVar);
40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    default:
40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        break;
40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return "<unknown SymbolType>";
41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4134fb08150367853dae24bb92904356788e919a72fGreg Claytonvoid
4144fb08150367853dae24bb92904356788e919a72fGreg ClaytonSymbol::CalculateSymbolContext (SymbolContext *sc)
4154fb08150367853dae24bb92904356788e919a72fGreg Clayton{
4164fb08150367853dae24bb92904356788e919a72fGreg Clayton    // Symbols can reconstruct the symbol and the module in the symbol context
4174fb08150367853dae24bb92904356788e919a72fGreg Clayton    sc->symbol = this;
4180c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    if (ValueIsAddress())
4190c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton        sc->module_sp = GetAddress().GetModule();
42013d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton    else
42113d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton        sc->module_sp.reset();
4224fb08150367853dae24bb92904356788e919a72fGreg Clayton}
4234fb08150367853dae24bb92904356788e919a72fGreg Clayton
4243508c387c3f0c9ecc439d98048fd7694d41bab1bGreg ClaytonModuleSP
425c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSymbol::CalculateSymbolContextModule ()
426c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
4270c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    if (ValueIsAddress())
4280c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton        return GetAddress().GetModule();
4293508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    return ModuleSP();
430c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
431c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
432c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSymbol *
433c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg ClaytonSymbol::CalculateSymbolContextSymbol ()
434c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton{
435c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton    return this;
436c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton}
437c51ffbf896e398ada5f7e89b2fa5aec6f2224f09Greg Clayton
4384fb08150367853dae24bb92904356788e919a72fGreg Claytonvoid
4394fb08150367853dae24bb92904356788e919a72fGreg ClaytonSymbol::DumpSymbolContext (Stream *s)
4404fb08150367853dae24bb92904356788e919a72fGreg Clayton{
4414fb08150367853dae24bb92904356788e919a72fGreg Clayton    bool dumped_module = false;
4420c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    if (ValueIsAddress())
4430c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton    {
4440c31d3d3a4a1d00d53346d8a23b0519f47e55d1fGreg Clayton        ModuleSP module_sp (GetAddress().GetModule());
4453508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton        if (module_sp)
4464fb08150367853dae24bb92904356788e919a72fGreg Clayton        {
4474fb08150367853dae24bb92904356788e919a72fGreg Clayton            dumped_module = true;
4483508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton            module_sp->DumpSymbolContext(s);
4494fb08150367853dae24bb92904356788e919a72fGreg Clayton        }
4504fb08150367853dae24bb92904356788e919a72fGreg Clayton    }
4514fb08150367853dae24bb92904356788e919a72fGreg Clayton    if (dumped_module)
4524fb08150367853dae24bb92904356788e919a72fGreg Clayton        s->PutCString(", ");
4534fb08150367853dae24bb92904356788e919a72fGreg Clayton
4544fb08150367853dae24bb92904356788e919a72fGreg Clayton    s->Printf("Symbol{0x%8.8x}", GetID());
4554fb08150367853dae24bb92904356788e919a72fGreg Clayton}
4564fb08150367853dae24bb92904356788e919a72fGreg Clayton
4579f69f982142c1c6d4dbece98879eaf746e66728bGreg Claytonlldb::addr_t
4589f69f982142c1c6d4dbece98879eaf746e66728bGreg ClaytonSymbol::GetByteSize () const
4599f69f982142c1c6d4dbece98879eaf746e66728bGreg Clayton{
4607940069905bee0b2e5f0661bf37c9f906ddf8603Greg Clayton    return m_addr_range.GetByteSize();
4619f69f982142c1c6d4dbece98879eaf746e66728bGreg Clayton}
4629f69f982142c1c6d4dbece98879eaf746e66728bGreg Clayton
463