CommandObjectSource.cpp revision 781241147dbdd18762ab676960ecbff18ab0a766
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandObjectSource.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 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "CommandObjectSource.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1884cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h" 1963094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Core/Debugger.h" 2052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton#include "lldb/Core/FileLineResolver.h" 21781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton#include "lldb/Core/Module.h" 2249ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Core/ModuleSpec.h" 2352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton#include "lldb/Core/SourceManager.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandInterpreter.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Interpreter/CommandReturnObject.h" 265f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 2749ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/CompileUnit.h" 2849ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include "lldb/Symbol/Function.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/TargetList.h" 31767af88aa617288e584afcfed055f7755e408542Jim Ingham#include "lldb/Interpreter/CommandCompletions.h" 32767af88aa617288e584afcfed055f7755e408542Jim Ingham#include "lldb/Interpreter/Options.h" 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 3852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton// CommandObjectSourceInfo 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//------------------------------------------------------------------------- 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 41da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectSourceInfo : public CommandObjectParsed 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44767af88aa617288e584afcfed055f7755e408542Jim Ingham class CommandOptions : public Options 45767af88aa617288e584afcfed055f7755e408542Jim Ingham { 46767af88aa617288e584afcfed055f7755e408542Jim Ingham public: 47f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandOptions (CommandInterpreter &interpreter) : 48f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options(interpreter) 49767af88aa617288e584afcfed055f7755e408542Jim Ingham { 50767af88aa617288e584afcfed055f7755e408542Jim Ingham } 51767af88aa617288e584afcfed055f7755e408542Jim Ingham 52767af88aa617288e584afcfed055f7755e408542Jim Ingham ~CommandOptions () 53767af88aa617288e584afcfed055f7755e408542Jim Ingham { 54767af88aa617288e584afcfed055f7755e408542Jim Ingham } 55767af88aa617288e584afcfed055f7755e408542Jim Ingham 56767af88aa617288e584afcfed055f7755e408542Jim Ingham Error 57143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) 58767af88aa617288e584afcfed055f7755e408542Jim Ingham { 59767af88aa617288e584afcfed055f7755e408542Jim Ingham Error error; 606475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton const int short_option = g_option_table[option_idx].short_option; 61767af88aa617288e584afcfed055f7755e408542Jim Ingham switch (short_option) 62767af88aa617288e584afcfed055f7755e408542Jim Ingham { 63767af88aa617288e584afcfed055f7755e408542Jim Ingham case 'l': 64767af88aa617288e584afcfed055f7755e408542Jim Ingham start_line = Args::StringToUInt32 (option_arg, 0); 65767af88aa617288e584afcfed055f7755e408542Jim Ingham if (start_line == 0) 669c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("invalid line number: '%s'", option_arg); 67767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 68767af88aa617288e584afcfed055f7755e408542Jim Ingham 69767af88aa617288e584afcfed055f7755e408542Jim Ingham case 'f': 70767af88aa617288e584afcfed055f7755e408542Jim Ingham file_name = option_arg; 71767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 72767af88aa617288e584afcfed055f7755e408542Jim Ingham 73767af88aa617288e584afcfed055f7755e408542Jim Ingham default: 749c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option); 75767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 76767af88aa617288e584afcfed055f7755e408542Jim Ingham } 77767af88aa617288e584afcfed055f7755e408542Jim Ingham 78767af88aa617288e584afcfed055f7755e408542Jim Ingham return error; 79767af88aa617288e584afcfed055f7755e408542Jim Ingham } 80767af88aa617288e584afcfed055f7755e408542Jim Ingham 81767af88aa617288e584afcfed055f7755e408542Jim Ingham void 82143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 83767af88aa617288e584afcfed055f7755e408542Jim Ingham { 84767af88aa617288e584afcfed055f7755e408542Jim Ingham file_spec.Clear(); 85767af88aa617288e584afcfed055f7755e408542Jim Ingham file_name.clear(); 86767af88aa617288e584afcfed055f7755e408542Jim Ingham start_line = 0; 87767af88aa617288e584afcfed055f7755e408542Jim Ingham } 88767af88aa617288e584afcfed055f7755e408542Jim Ingham 89b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const OptionDefinition* 90767af88aa617288e584afcfed055f7755e408542Jim Ingham GetDefinitions () 91767af88aa617288e584afcfed055f7755e408542Jim Ingham { 92767af88aa617288e584afcfed055f7755e408542Jim Ingham return g_option_table; 93767af88aa617288e584afcfed055f7755e408542Jim Ingham } 94b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton static OptionDefinition g_option_table[]; 95767af88aa617288e584afcfed055f7755e408542Jim Ingham 96767af88aa617288e584afcfed055f7755e408542Jim Ingham // Instance variables to hold the values for command options. 97767af88aa617288e584afcfed055f7755e408542Jim Ingham FileSpec file_spec; 98767af88aa617288e584afcfed055f7755e408542Jim Ingham std::string file_name; 99767af88aa617288e584afcfed055f7755e408542Jim Ingham uint32_t start_line; 100767af88aa617288e584afcfed055f7755e408542Jim Ingham 101767af88aa617288e584afcfed055f7755e408542Jim Ingham }; 102767af88aa617288e584afcfed055f7755e408542Jim Ingham 103767af88aa617288e584afcfed055f7755e408542Jim Inghampublic: 104238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectSourceInfo(CommandInterpreter &interpreter) : 105da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 106da26bd203cbb104291b39891febf7481794f205fJim Ingham "source info", 107da26bd203cbb104291b39891febf7481794f205fJim Ingham "Display information about the source lines from the current executable's debug info.", 108da26bd203cbb104291b39891febf7481794f205fJim Ingham "source info [<cmd-options>]"), 109f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 110767af88aa617288e584afcfed055f7755e408542Jim Ingham { 111767af88aa617288e584afcfed055f7755e408542Jim Ingham } 112767af88aa617288e584afcfed055f7755e408542Jim Ingham 113767af88aa617288e584afcfed055f7755e408542Jim Ingham ~CommandObjectSourceInfo () 114767af88aa617288e584afcfed055f7755e408542Jim Ingham { 115767af88aa617288e584afcfed055f7755e408542Jim Ingham } 116767af88aa617288e584afcfed055f7755e408542Jim Ingham 117767af88aa617288e584afcfed055f7755e408542Jim Ingham 118767af88aa617288e584afcfed055f7755e408542Jim Ingham Options * 119767af88aa617288e584afcfed055f7755e408542Jim Ingham GetOptions () 120767af88aa617288e584afcfed055f7755e408542Jim Ingham { 121767af88aa617288e584afcfed055f7755e408542Jim Ingham return &m_options; 122767af88aa617288e584afcfed055f7755e408542Jim Ingham } 123767af88aa617288e584afcfed055f7755e408542Jim Ingham 124da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 125767af88aa617288e584afcfed055f7755e408542Jim Ingham bool 126da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& command, CommandReturnObject &result) 127767af88aa617288e584afcfed055f7755e408542Jim Ingham { 128767af88aa617288e584afcfed055f7755e408542Jim Ingham result.AppendError ("Not yet implemented"); 129767af88aa617288e584afcfed055f7755e408542Jim Ingham result.SetStatus (eReturnStatusFailed); 130767af88aa617288e584afcfed055f7755e408542Jim Ingham return false; 131767af88aa617288e584afcfed055f7755e408542Jim Ingham } 132da26bd203cbb104291b39891febf7481794f205fJim Ingham 133767af88aa617288e584afcfed055f7755e408542Jim Ingham CommandOptions m_options; 134767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 135767af88aa617288e584afcfed055f7755e408542Jim Ingham 136b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonOptionDefinition 137767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectSourceInfo::CommandOptions::g_option_table[] = 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 1394d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "line", 'l', required_argument, NULL, 0, eArgTypeLineNum, "The line number at which to start the display source."}, 1404d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ LLDB_OPT_SET_1, false, "file", 'f', required_argument, NULL, CommandCompletions::eSourceFileCompletion, eArgTypeFilename, "The file from which to display source."}, 1414d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 142767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 143767af88aa617288e584afcfed055f7755e408542Jim Ingham 144767af88aa617288e584afcfed055f7755e408542Jim Ingham#pragma mark CommandObjectSourceList 145767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 146767af88aa617288e584afcfed055f7755e408542Jim Ingham// CommandObjectSourceList 147767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 149da26bd203cbb104291b39891febf7481794f205fJim Inghamclass CommandObjectSourceList : public CommandObjectParsed 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 151767af88aa617288e584afcfed055f7755e408542Jim Ingham 152767af88aa617288e584afcfed055f7755e408542Jim Ingham class CommandOptions : public Options 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 154767af88aa617288e584afcfed055f7755e408542Jim Ingham public: 155f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton CommandOptions (CommandInterpreter &interpreter) : 156f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton Options(interpreter) 157767af88aa617288e584afcfed055f7755e408542Jim Ingham { 158767af88aa617288e584afcfed055f7755e408542Jim Ingham } 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 160767af88aa617288e584afcfed055f7755e408542Jim Ingham ~CommandOptions () 161767af88aa617288e584afcfed055f7755e408542Jim Ingham { 162767af88aa617288e584afcfed055f7755e408542Jim Ingham } 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 164767af88aa617288e584afcfed055f7755e408542Jim Ingham Error 165143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton SetOptionValue (uint32_t option_idx, const char *option_arg) 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 167767af88aa617288e584afcfed055f7755e408542Jim Ingham Error error; 1686475c42148a8ea1ca86e5db465db7eca742d897dGreg Clayton const int short_option = g_option_table[option_idx].short_option; 169767af88aa617288e584afcfed055f7755e408542Jim Ingham switch (short_option) 170767af88aa617288e584afcfed055f7755e408542Jim Ingham { 171767af88aa617288e584afcfed055f7755e408542Jim Ingham case 'l': 172767af88aa617288e584afcfed055f7755e408542Jim Ingham start_line = Args::StringToUInt32 (option_arg, 0); 173767af88aa617288e584afcfed055f7755e408542Jim Ingham if (start_line == 0) 1749c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("invalid line number: '%s'", option_arg); 175767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 177338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham case 'c': 178767af88aa617288e584afcfed055f7755e408542Jim Ingham num_lines = Args::StringToUInt32 (option_arg, 0); 179767af88aa617288e584afcfed055f7755e408542Jim Ingham if (num_lines == 0) 1809c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("invalid line count: '%s'", option_arg); 181767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton case 'f': 184767af88aa617288e584afcfed055f7755e408542Jim Ingham file_name = option_arg; 185767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 186338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 187338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham case 'n': 188338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham symbol_name = option_arg; 189338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 190767af88aa617288e584afcfed055f7755e408542Jim Ingham 191781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton case 'a': 192781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 193781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton ExecutionContext exe_ctx (m_interpreter.GetExecutionContext()); 194781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton address = Args::StringToAddress(&exe_ctx, option_arg, LLDB_INVALID_ADDRESS, &error); 195781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 196781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton break; 197338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham case 's': 19852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton modules.push_back (std::string (option_arg)); 19952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton break; 20052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 20152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton case 'b': 20252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton show_bp_locs = true; 203338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 204767af88aa617288e584afcfed055f7755e408542Jim Ingham default: 2059c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option); 206767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 209767af88aa617288e584afcfed055f7755e408542Jim Ingham return error; 210767af88aa617288e584afcfed055f7755e408542Jim Ingham } 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 212767af88aa617288e584afcfed055f7755e408542Jim Ingham void 213143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 214767af88aa617288e584afcfed055f7755e408542Jim Ingham { 215767af88aa617288e584afcfed055f7755e408542Jim Ingham file_spec.Clear(); 216767af88aa617288e584afcfed055f7755e408542Jim Ingham file_name.clear(); 217338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham symbol_name.clear(); 218781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton address = LLDB_INVALID_ADDRESS; 219767af88aa617288e584afcfed055f7755e408542Jim Ingham start_line = 0; 220767af88aa617288e584afcfed055f7755e408542Jim Ingham num_lines = 10; 22152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton show_bp_locs = false; 22252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton modules.clear(); 223767af88aa617288e584afcfed055f7755e408542Jim Ingham } 224767af88aa617288e584afcfed055f7755e408542Jim Ingham 225b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const OptionDefinition* 226767af88aa617288e584afcfed055f7755e408542Jim Ingham GetDefinitions () 227767af88aa617288e584afcfed055f7755e408542Jim Ingham { 228767af88aa617288e584afcfed055f7755e408542Jim Ingham return g_option_table; 229767af88aa617288e584afcfed055f7755e408542Jim Ingham } 230b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton static OptionDefinition g_option_table[]; 231767af88aa617288e584afcfed055f7755e408542Jim Ingham 232767af88aa617288e584afcfed055f7755e408542Jim Ingham // Instance variables to hold the values for command options. 233767af88aa617288e584afcfed055f7755e408542Jim Ingham FileSpec file_spec; 234767af88aa617288e584afcfed055f7755e408542Jim Ingham std::string file_name; 235338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham std::string symbol_name; 236781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton lldb::addr_t address; 237767af88aa617288e584afcfed055f7755e408542Jim Ingham uint32_t start_line; 238767af88aa617288e584afcfed055f7755e408542Jim Ingham uint32_t num_lines; 23952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton STLStringArray modules; 24052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton bool show_bp_locs; 241767af88aa617288e584afcfed055f7755e408542Jim Ingham }; 242767af88aa617288e584afcfed055f7755e408542Jim Ingham 243767af88aa617288e584afcfed055f7755e408542Jim Inghampublic: 244238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectSourceList(CommandInterpreter &interpreter) : 245da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 246da26bd203cbb104291b39891febf7481794f205fJim Ingham "source list", 247da26bd203cbb104291b39891febf7481794f205fJim Ingham "Display source code (as specified) based on the current executable's debug info.", 248da26bd203cbb104291b39891febf7481794f205fJim Ingham NULL), 249f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 250767af88aa617288e584afcfed055f7755e408542Jim Ingham { 25143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentEntry arg; 25243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice CommandArgumentData file_arg; 25343b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 25443b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Define the first (and only) variant of this arg. 25543b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice file_arg.arg_type = eArgTypeFilename; 25643b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice file_arg.arg_repetition = eArgRepeatOptional; 25743b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 25843b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // There is only one variant this argument could be; put it into the argument entry. 25943b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice arg.push_back (file_arg); 26043b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice 26143b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice // Push the data for the first argument into the m_arguments vector. 26243b014aa33e20e61790e16ed69a2c57aae2fbc6eCaroline Tice m_arguments.push_back (arg); 263767af88aa617288e584afcfed055f7755e408542Jim Ingham } 264767af88aa617288e584afcfed055f7755e408542Jim Ingham 265767af88aa617288e584afcfed055f7755e408542Jim Ingham ~CommandObjectSourceList () 266767af88aa617288e584afcfed055f7755e408542Jim Ingham { 267767af88aa617288e584afcfed055f7755e408542Jim Ingham } 268767af88aa617288e584afcfed055f7755e408542Jim Ingham 269767af88aa617288e584afcfed055f7755e408542Jim Ingham 270767af88aa617288e584afcfed055f7755e408542Jim Ingham Options * 271767af88aa617288e584afcfed055f7755e408542Jim Ingham GetOptions () 272767af88aa617288e584afcfed055f7755e408542Jim Ingham { 273767af88aa617288e584afcfed055f7755e408542Jim Ingham return &m_options; 274767af88aa617288e584afcfed055f7755e408542Jim Ingham } 275767af88aa617288e584afcfed055f7755e408542Jim Ingham 276da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual const char * 277da26bd203cbb104291b39891febf7481794f205fJim Ingham GetRepeatCommand (Args ¤t_command_args, uint32_t index) 278da26bd203cbb104291b39891febf7481794f205fJim Ingham { 279da26bd203cbb104291b39891febf7481794f205fJim Ingham return m_cmd_name.c_str(); 280da26bd203cbb104291b39891febf7481794f205fJim Ingham } 281767af88aa617288e584afcfed055f7755e408542Jim Ingham 282da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 283767af88aa617288e584afcfed055f7755e408542Jim Ingham bool 284da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& command, CommandReturnObject &result) 285767af88aa617288e584afcfed055f7755e408542Jim Ingham { 286da26bd203cbb104291b39891febf7481794f205fJim Ingham const int argc = command.GetArgumentCount(); 287767af88aa617288e584afcfed055f7755e408542Jim Ingham 288767af88aa617288e584afcfed055f7755e408542Jim Ingham if (argc != 0) 289767af88aa617288e584afcfed055f7755e408542Jim Ingham { 290767af88aa617288e584afcfed055f7755e408542Jim Ingham result.AppendErrorWithFormat("'%s' takes no arguments, only flags.\n", GetCommandName()); 291767af88aa617288e584afcfed055f7755e408542Jim Ingham result.SetStatus (eReturnStatusFailed); 29226e089bf5310f8378e7d86b9f38db32a38e76411Jim Ingham return false; 293767af88aa617288e584afcfed055f7755e408542Jim Ingham } 294767af88aa617288e584afcfed055f7755e408542Jim Ingham 295b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton ExecutionContext exe_ctx(m_interpreter.GetExecutionContext()); 296567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Target *target = exe_ctx.GetTargetPtr(); 297fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 298567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (target == NULL) 299fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham target = m_interpreter.GetDebugger().GetSelectedTarget().get(); 300fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 301fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (target == NULL) 302fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham { 303fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham result.AppendError ("invalid target, create a debug target using the 'target create' command"); 304fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham result.SetStatus (eReturnStatusFailed); 305fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham return false; 306fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham } 307fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 308781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SymbolContextList sc_list; 309338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (!m_options.symbol_name.empty()) 310338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 311338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // Displaying the source for a symbol: 312338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ConstString name(m_options.symbol_name.c_str()); 31328d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool include_symbols = false; 314302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan bool include_inlines = true; 315338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool append = true; 316338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t num_matches = 0; 317338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 31852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_options.modules.size() > 0) 319338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 320338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ModuleList matching_modules; 32152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton for (unsigned i = 0, e = m_options.modules.size(); i != e; i++) 322338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 323444fe998bf707bd076a70c3a779db8575533695eGreg Clayton FileSpec module_file_spec(m_options.modules[i].c_str(), false); 324444fe998bf707bd076a70c3a779db8575533695eGreg Clayton if (module_file_spec) 325338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 326444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (module_file_spec); 327338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham matching_modules.Clear(); 328444fe998bf707bd076a70c3a779db8575533695eGreg Clayton target->GetImages().FindModules (module_spec, matching_modules); 329302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan num_matches += matching_modules.FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list); 330338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 331338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 332338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 333338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 334338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 335302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan num_matches = target->GetImages().FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list); 336338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 337338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 338338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext sc; 339338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 340338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches == 0) 341338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 342338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find function named: \"%s\".\n", m_options.symbol_name.c_str()); 343338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 344338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 345338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 346338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 347338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (0, sc); 348338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec start_file; 349338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t start_line; 350338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t end_line; 351338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec end_file; 352338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc.function != NULL) 353338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 354338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc.function->GetStartLineSourceInfo (start_file, start_line); 355338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (start_line == 0) 356338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 357338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find line information for start of function: \"%s\".\n", m_options.symbol_name.c_str()); 358338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 359338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 360338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 361338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc.function->GetEndLineSourceInfo (end_file, end_line); 362338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 363338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 364338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 365338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find function info for: \"%s\".\n", m_options.symbol_name.c_str()); 366338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 367338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 368338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 369338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 370338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches > 1) 371338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 372338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // This could either be because there are multiple functions of this name, in which case 373338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // we'll have to specify this further... Or it could be because there are multiple inlined instances 374338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // of one function. So run through the matches and if they all have the same file & line then we can just 375338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // list one. 376338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 377338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool found_multiple = false; 378338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 379338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham for (size_t i = 1; i < num_matches; i++) 380338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 381338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext scratch_sc; 382338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (i, scratch_sc); 383338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_sc.function != NULL) 384338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 385338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec scratch_file; 386338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t scratch_line; 387338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham scratch_sc.function->GetStartLineSourceInfo (scratch_file, scratch_line); 388338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_file != start_file 389338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham || scratch_line != start_line) 390338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 391338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham found_multiple = true; 392338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 393338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 394338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 395338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 396338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (found_multiple) 397338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 398338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham StreamString s; 399338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham for (size_t i = 0; i < num_matches; i++) 400338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 401338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext scratch_sc; 402338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (i, scratch_sc); 403338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_sc.function != NULL) 404338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 4057e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda s.Printf("\n%lu: ", i); 406338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham scratch_sc.function->Dump (&s, true); 407338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 408338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 409338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Multiple functions found matching: %s: \n%s\n", 410338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.symbol_name.c_str(), 411338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham s.GetData()); 412338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 413338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 414338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 415338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 416338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 417338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 418338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // This is a little hacky, but the first line table entry for a function points to the "{" that 419338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // starts the function block. It would be nice to actually get the function 420338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // declaration in there too. So back up a bit, but not further than what you're going to display. 421338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t lines_to_back_up = m_options.num_lines >= 10 ? 5 : m_options.num_lines/2; 422338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t line_no; 423338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (start_line <= lines_to_back_up) 424338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham line_no = 1; 425338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 426338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham line_no = start_line - lines_to_back_up; 427338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 428338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // For fun, if the function is shorter than the number of lines we're supposed to display, 429338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // only display the function... 430338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (end_line != 0) 431338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 432338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (m_options.num_lines > end_line - line_no) 433338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.num_lines = end_line - line_no; 434338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 435338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 43652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton char path_buf[PATH_MAX]; 43752c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton start_file.GetPath(path_buf, sizeof(path_buf)); 4381cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 439fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 4401cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 4411cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton const bool show_inlines = true; 4421cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Reset (start_file, 0, show_inlines); 443567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton SearchFilter target_search_filter (exe_ctx.GetTargetSP()); 4441cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton target_search_filter.Search (m_breakpoint_locations); 4451cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 4461cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton else 4471cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Clear(); 4481cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 449338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendMessageWithFormat("File: %s.\n", path_buf); 450fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham target->GetSourceManager().DisplaySourceLinesWithLineNumbers (start_file, 451fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham line_no, 452fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 0, 453fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.num_lines, 454fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham "", 455fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham &result.GetOutputStream(), 456fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham GetBreakpointLocations ()); 457338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 458338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 459338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return true; 460338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 461338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 462781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else if (m_options.address != LLDB_INVALID_ADDRESS) 463781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 464781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SymbolContext sc; 465781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton Address so_addr; 466781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton StreamString error_strm; 467781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 468781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (target->GetSectionLoadList().IsEmpty()) 469781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 470781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // The target isn't loaded yet, we need to lookup the file address 471781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // in all modules 472781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const ModuleList &module_list = target->GetImages(); 473781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const uint32_t num_modules = module_list.GetSize(); 474781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton for (uint32_t i=0; i<num_modules; ++i) 475781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 476781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton ModuleSP module_sp (module_list.GetModuleAtIndex(i)); 477781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp && module_sp->ResolveFileAddress(m_options.address, so_addr)) 478781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 479781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.Clear(); 480781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp->ResolveSymbolContextForAddress (so_addr, eSymbolContextEverything, sc) & eSymbolContextLineEntry) 481781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.Append(sc); 482781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 483781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 484781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 485781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc_list.GetSize() == 0) 486781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 487781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("no modules have source information for file address 0x%" PRIx64 ".\n", 488781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_options.address); 489781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 490781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 491781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 492781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 493781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else 494781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 495781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // The target has some things loaded, resolve this address to a 496781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // compile unit + file + line and display 497781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (target->GetSectionLoadList().ResolveLoadAddress (m_options.address, so_addr)) 498781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 499781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton ModuleSP module_sp (so_addr.GetModule()); 500781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp) 501781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 502781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.Clear(); 503781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp->ResolveSymbolContextForAddress (so_addr, eSymbolContextEverything, sc) & eSymbolContextLineEntry) 504781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 505781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.Append(sc); 506781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 507781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else 508781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 509781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton so_addr.Dump(&error_strm, NULL, Address::DumpStyleModuleWithFileAddress); 510781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("address resolves to %s, but there is no line table information available for this address.\n", 511781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton error_strm.GetData()); 512781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 513781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 514781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 515781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 516781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 517781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 518781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc_list.GetSize() == 0) 519781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 520781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("no modules contain load address 0x%" PRIx64 ".\n", m_options.address); 521781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 522781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 523781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 524781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 525781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton uint32_t num_matches = sc_list.GetSize(); 526781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton for (uint32_t i=0; i<num_matches; ++i) 527781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 528781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.GetContextAtIndex(i, sc); 529781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc.comp_unit) 530781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 531781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (m_options.show_bp_locs) 532781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 533781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_breakpoint_locations.Clear(); 534781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const bool show_inlines = true; 535781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_breakpoint_locations.Reset (*sc.comp_unit, 0, show_inlines); 536781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SearchFilter target_search_filter (target->shared_from_this()); 537781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton target_search_filter.Search (m_breakpoint_locations); 538781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 539781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 540781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_fullpaths = true; 541781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_module = true; 542781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_inlined_frames = true; 543781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.DumpStopContext(&result.GetOutputStream(), 544781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton exe_ctx.GetBestExecutionContextScope(), 545781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.line_entry.range.GetBaseAddress(), 546781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_fullpaths, 547781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_module, 548781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_inlined_frames); 549781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.GetOutputStream().EOL(); 550781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 551781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton size_t lines_to_back_up = m_options.num_lines >= 10 ? 5 : m_options.num_lines/2; 552781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 553781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton target->GetSourceManager().DisplaySourceLinesWithLineNumbers (sc.comp_unit, 554781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.line_entry.line, 555781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton lines_to_back_up, 556781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_options.num_lines - lines_to_back_up, 557781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton "->", 558781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton &result.GetOutputStream(), 559781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton GetBreakpointLocations ()); 560781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 561781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 562781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 563781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 564338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else if (m_options.file_name.empty()) 565767af88aa617288e584afcfed055f7755e408542Jim Ingham { 566767af88aa617288e584afcfed055f7755e408542Jim Ingham // Last valid source manager context, or the current frame if no 567767af88aa617288e584afcfed055f7755e408542Jim Ingham // valid last context in source manager. 568767af88aa617288e584afcfed055f7755e408542Jim Ingham // One little trick here, if you type the exact same list command twice in a row, it is 569767af88aa617288e584afcfed055f7755e408542Jim Ingham // more likely because you typed it once, then typed it again 570767af88aa617288e584afcfed055f7755e408542Jim Ingham if (m_options.start_line == 0) 571767af88aa617288e584afcfed055f7755e408542Jim Ingham { 572c7f18c8fc956ce421bcb4913a0c99a61fdb40247Jim Ingham if (target->GetSourceManager().DisplayMoreWithLineNumbers (&result.GetOutputStream(), 57352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton GetBreakpointLocations ())) 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusSuccessFinishResult); 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 577767af88aa617288e584afcfed055f7755e408542Jim Ingham } 578767af88aa617288e584afcfed055f7755e408542Jim Ingham else 579767af88aa617288e584afcfed055f7755e408542Jim Ingham { 580fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 5811cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 582fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham SourceManager::FileSP last_file_sp (target->GetSourceManager().GetLastFile ()); 5831cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton if (last_file_sp) 5841cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 5851cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton const bool show_inlines = true; 5861cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Reset (last_file_sp->GetFileSpec(), 0, show_inlines); 58713d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton SearchFilter target_search_filter (target->shared_from_this()); 5881cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton target_search_filter.Search (m_breakpoint_locations); 5891cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 5901cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 5911cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton else 5921cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Clear(); 5931cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 594fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (target->GetSourceManager().DisplaySourceLinesWithLineNumbersUsingLastFile( 595767af88aa617288e584afcfed055f7755e408542Jim Ingham m_options.start_line, // Line to display 596767af88aa617288e584afcfed055f7755e408542Jim Ingham 0, // Lines before line to display 597767af88aa617288e584afcfed055f7755e408542Jim Ingham m_options.num_lines, // Lines after line to display 598767af88aa617288e584afcfed055f7755e408542Jim Ingham "", // Don't mark "line" 59952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton &result.GetOutputStream(), 60052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton GetBreakpointLocations ())) 60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 602767af88aa617288e584afcfed055f7755e408542Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 604767af88aa617288e584afcfed055f7755e408542Jim Ingham 60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 609767af88aa617288e584afcfed055f7755e408542Jim Ingham const char *filename = m_options.file_name.c_str(); 610767af88aa617288e584afcfed055f7755e408542Jim Ingham 611767af88aa617288e584afcfed055f7755e408542Jim Ingham bool check_inlines = false; 612767af88aa617288e584afcfed055f7755e408542Jim Ingham SymbolContextList sc_list; 613338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t num_matches = 0; 614338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 61552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_options.modules.size() > 0) 616338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 617338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ModuleList matching_modules; 61852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton for (unsigned i = 0, e = m_options.modules.size(); i != e; i++) 619338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 620444fe998bf707bd076a70c3a779db8575533695eGreg Clayton FileSpec module_file_spec(m_options.modules[i].c_str(), false); 621444fe998bf707bd076a70c3a779db8575533695eGreg Clayton if (module_file_spec) 622338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 623444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (module_file_spec); 624338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham matching_modules.Clear(); 625444fe998bf707bd076a70c3a779db8575533695eGreg Clayton target->GetImages().FindModules (module_spec, matching_modules); 626338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham num_matches += matching_modules.ResolveSymbolContextForFilePath (filename, 62752c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 0, 62852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton check_inlines, 62952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton eSymbolContextModule | eSymbolContextCompUnit, 63052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton sc_list); 631338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 632338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 633338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 634338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 635338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 636338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham num_matches = target->GetImages().ResolveSymbolContextForFilePath (filename, 637338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 0, 638338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham check_inlines, 639338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham eSymbolContextModule | eSymbolContextCompUnit, 640338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list); 641338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 642338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 643338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches == 0) 644338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 645338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find source file \"%s\".\n", 646338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 647338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 648338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 649338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 650338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 651338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches > 1) 652767af88aa617288e584afcfed055f7755e408542Jim Ingham { 653767af88aa617288e584afcfed055f7755e408542Jim Ingham SymbolContext sc; 654338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool got_multiple = false; 655338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec *test_cu_spec = NULL; 656338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 6570f6fa731e05ce45a4c3f7c4590216ce2e30f25dbChris Lattner for (unsigned i = 0; i < num_matches; i++) 658767af88aa617288e584afcfed055f7755e408542Jim Ingham { 659338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex(i, sc); 660767af88aa617288e584afcfed055f7755e408542Jim Ingham if (sc.comp_unit) 661767af88aa617288e584afcfed055f7755e408542Jim Ingham { 662338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (test_cu_spec) 663338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 664338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (test_cu_spec != static_cast<FileSpec *> (sc.comp_unit)) 665338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham got_multiple = true; 666338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 667338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 668338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 669338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham test_cu_spec = sc.comp_unit; 670767af88aa617288e584afcfed055f7755e408542Jim Ingham } 671767af88aa617288e584afcfed055f7755e408542Jim Ingham } 672338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (got_multiple) 673338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 674338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Multiple source files found matching: \"%s.\"\n", 675338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 676338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 677338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 678338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 679338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 680338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 681338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext sc; 682338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc_list.GetContextAtIndex(0, sc)) 683338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 684338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc.comp_unit) 685338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 686fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 68752c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton { 68852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton const bool show_inlines = true; 68952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton m_breakpoint_locations.Reset (*sc.comp_unit, 0, show_inlines); 69013d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton SearchFilter target_search_filter (target->shared_from_this()); 69152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton target_search_filter.Search (m_breakpoint_locations); 69252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton } 69352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton else 69452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton m_breakpoint_locations.Clear(); 69552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 696fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham target->GetSourceManager().DisplaySourceLinesWithLineNumbers (sc.comp_unit, 697fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.start_line, 698fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 0, 699fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.num_lines, 700fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham "", 701fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham &result.GetOutputStream(), 702fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham GetBreakpointLocations ()); 70352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 704338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 705338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 706338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 707338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 708338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("No comp unit found for: \"%s.\"\n", 709338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 710338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 711338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 712338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 713767af88aa617288e584afcfed055f7755e408542Jim Ingham } 71424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 715767af88aa617288e584afcfed055f7755e408542Jim Ingham return result.Succeeded(); 71624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 717767af88aa617288e584afcfed055f7755e408542Jim Ingham 71852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton const SymbolContextList * 71952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton GetBreakpointLocations () 72052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton { 72152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_breakpoint_locations.GetFileLineMatches().GetSize() > 0) 72252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton return &m_breakpoint_locations.GetFileLineMatches(); 72352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton return NULL; 72452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton } 725767af88aa617288e584afcfed055f7755e408542Jim Ingham CommandOptions m_options; 72652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton FileLineResolver m_breakpoint_locations; 727767af88aa617288e584afcfed055f7755e408542Jim Ingham 728767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 729767af88aa617288e584afcfed055f7755e408542Jim Ingham 730b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonOptionDefinition 731767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectSourceList::CommandOptions::g_option_table[] = 732767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 733781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_ALL, false, "count", 'c', required_argument, NULL, 0, eArgTypeCount, "The number of source lines to display."}, 734781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 | 735781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton LLDB_OPT_SET_2 , false, "shlib", 's', required_argument, NULL, CommandCompletions::eModuleCompletion, eArgTypeShlibName, "Look up the source file in the given shared library."}, 73652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton{ LLDB_OPT_SET_ALL, false, "show-breakpoints", 'b', no_argument, NULL, 0, eArgTypeNone, "Show the line table locations from the debug information that indicate valid places to set source level breakpoints."}, 737781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 , false, "file", 'f', required_argument, NULL, CommandCompletions::eSourceFileCompletion, eArgTypeFilename, "The file from which to display source."}, 738781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 , false, "line", 'l', required_argument, NULL, 0, eArgTypeLineNum, "The line number at which to start the display source."}, 739781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_2 , false, "name", 'n', required_argument, NULL, CommandCompletions::eSymbolCompletion, eArgTypeSymbol, "The name of a function whose source to display."}, 740781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_3 , false, "address",'a', required_argument, NULL, 0, eArgTypeAddress, "Lookup the address and display the source information for the corresponding file and line."}, 7414d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 742767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 743767af88aa617288e584afcfed055f7755e408542Jim Ingham 744767af88aa617288e584afcfed055f7755e408542Jim Ingham#pragma mark CommandObjectMultiwordSource 745767af88aa617288e584afcfed055f7755e408542Jim Ingham 746767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 747767af88aa617288e584afcfed055f7755e408542Jim Ingham// CommandObjectMultiwordSource 748767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 749767af88aa617288e584afcfed055f7755e408542Jim Ingham 750767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectMultiwordSource::CommandObjectMultiwordSource (CommandInterpreter &interpreter) : 751238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectMultiword (interpreter, 752238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton "source", 753c1ad82eb979ee856b86aec6e2acb7bddf75f7c4fCaroline Tice "A set of commands for accessing source file information", 754767af88aa617288e584afcfed055f7755e408542Jim Ingham "source <subcommand> [<subcommand-options>]") 755767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 756238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("info", CommandObjectSP (new CommandObjectSourceInfo (interpreter))); 757238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("list", CommandObjectSP (new CommandObjectSourceList (interpreter))); 758767af88aa617288e584afcfed055f7755e408542Jim Ingham} 759767af88aa617288e584afcfed055f7755e408542Jim Ingham 760767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectMultiwordSource::~CommandObjectMultiwordSource () 761767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 76224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 763767af88aa617288e584afcfed055f7755e408542Jim Ingham 764