CommandObjectSource.cpp revision ea0bb4d45c14447a2fe9be9f4bd8e79a84513537
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; 20412b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham case 'r': 20512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham reverse = true; 20612b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham break; 207767af88aa617288e584afcfed055f7755e408542Jim Ingham default: 2089c236733d43e6250c8a5671a438f4a2afeb9c0b2Greg Clayton error.SetErrorStringWithFormat("unrecognized short option '%c'", short_option); 209767af88aa617288e584afcfed055f7755e408542Jim Ingham break; 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 212767af88aa617288e584afcfed055f7755e408542Jim Ingham return error; 213767af88aa617288e584afcfed055f7755e408542Jim Ingham } 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 215767af88aa617288e584afcfed055f7755e408542Jim Ingham void 216143fcc3a15425659b381502ed4e1e50a3e726f36Greg Clayton OptionParsingStarting () 217767af88aa617288e584afcfed055f7755e408542Jim Ingham { 218767af88aa617288e584afcfed055f7755e408542Jim Ingham file_spec.Clear(); 219767af88aa617288e584afcfed055f7755e408542Jim Ingham file_name.clear(); 220338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham symbol_name.clear(); 221781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton address = LLDB_INVALID_ADDRESS; 222767af88aa617288e584afcfed055f7755e408542Jim Ingham start_line = 0; 223767af88aa617288e584afcfed055f7755e408542Jim Ingham num_lines = 10; 22452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton show_bp_locs = false; 22512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham reverse = false; 22652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton modules.clear(); 227767af88aa617288e584afcfed055f7755e408542Jim Ingham } 228767af88aa617288e584afcfed055f7755e408542Jim Ingham 229b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton const OptionDefinition* 230767af88aa617288e584afcfed055f7755e408542Jim Ingham GetDefinitions () 231767af88aa617288e584afcfed055f7755e408542Jim Ingham { 232767af88aa617288e584afcfed055f7755e408542Jim Ingham return g_option_table; 233767af88aa617288e584afcfed055f7755e408542Jim Ingham } 234b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton static OptionDefinition g_option_table[]; 235767af88aa617288e584afcfed055f7755e408542Jim Ingham 236767af88aa617288e584afcfed055f7755e408542Jim Ingham // Instance variables to hold the values for command options. 237767af88aa617288e584afcfed055f7755e408542Jim Ingham FileSpec file_spec; 238767af88aa617288e584afcfed055f7755e408542Jim Ingham std::string file_name; 239338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham std::string symbol_name; 240781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton lldb::addr_t address; 241767af88aa617288e584afcfed055f7755e408542Jim Ingham uint32_t start_line; 242767af88aa617288e584afcfed055f7755e408542Jim Ingham uint32_t num_lines; 24352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton STLStringArray modules; 24452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton bool show_bp_locs; 24512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham bool reverse; 246767af88aa617288e584afcfed055f7755e408542Jim Ingham }; 247767af88aa617288e584afcfed055f7755e408542Jim Ingham 248767af88aa617288e584afcfed055f7755e408542Jim Inghampublic: 249238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectSourceList(CommandInterpreter &interpreter) : 250da26bd203cbb104291b39891febf7481794f205fJim Ingham CommandObjectParsed (interpreter, 251da26bd203cbb104291b39891febf7481794f205fJim Ingham "source list", 252da26bd203cbb104291b39891febf7481794f205fJim Ingham "Display source code (as specified) based on the current executable's debug info.", 253ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton NULL, 254ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton eFlagRequiresTarget), 255f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton m_options (interpreter) 256767af88aa617288e584afcfed055f7755e408542Jim Ingham { 257767af88aa617288e584afcfed055f7755e408542Jim Ingham } 258767af88aa617288e584afcfed055f7755e408542Jim Ingham 259767af88aa617288e584afcfed055f7755e408542Jim Ingham ~CommandObjectSourceList () 260767af88aa617288e584afcfed055f7755e408542Jim Ingham { 261767af88aa617288e584afcfed055f7755e408542Jim Ingham } 262767af88aa617288e584afcfed055f7755e408542Jim Ingham 263767af88aa617288e584afcfed055f7755e408542Jim Ingham 264767af88aa617288e584afcfed055f7755e408542Jim Ingham Options * 265767af88aa617288e584afcfed055f7755e408542Jim Ingham GetOptions () 266767af88aa617288e584afcfed055f7755e408542Jim Ingham { 267767af88aa617288e584afcfed055f7755e408542Jim Ingham return &m_options; 268767af88aa617288e584afcfed055f7755e408542Jim Ingham } 269767af88aa617288e584afcfed055f7755e408542Jim Ingham 270da26bd203cbb104291b39891febf7481794f205fJim Ingham virtual const char * 271da26bd203cbb104291b39891febf7481794f205fJim Ingham GetRepeatCommand (Args ¤t_command_args, uint32_t index) 272da26bd203cbb104291b39891febf7481794f205fJim Ingham { 27312b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham // This is kind of gross, but the command hasn't been parsed yet so we can't look at the option 27412b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham // values for this invocation... I have to scan the arguments directly. 27512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham size_t num_args = current_command_args.GetArgumentCount(); 27612b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham bool is_reverse = false; 27712b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham for (size_t i = 0 ; i < num_args; i++) 27812b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham { 27912b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham const char *arg = current_command_args.GetArgumentAtIndex(i); 28012b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham if (arg && (strcmp(arg, "-r") == 0 || strcmp(arg, "--reverse") == 0)) 28112b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham { 28212b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham is_reverse = true; 28312b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham } 28412b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham } 28512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham if (is_reverse) 28612b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham { 28712b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham if (m_reverse_name.empty()) 28812b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham { 28912b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham m_reverse_name = m_cmd_name; 29012b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham m_reverse_name.append (" -r"); 29112b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham } 29212b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham return m_reverse_name.c_str(); 29312b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham } 29412b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham else 29512b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham return m_cmd_name.c_str(); 296da26bd203cbb104291b39891febf7481794f205fJim Ingham } 297767af88aa617288e584afcfed055f7755e408542Jim Ingham 298da26bd203cbb104291b39891febf7481794f205fJim Inghamprotected: 299767af88aa617288e584afcfed055f7755e408542Jim Ingham bool 300da26bd203cbb104291b39891febf7481794f205fJim Ingham DoExecute (Args& command, CommandReturnObject &result) 301767af88aa617288e584afcfed055f7755e408542Jim Ingham { 302da26bd203cbb104291b39891febf7481794f205fJim Ingham const int argc = command.GetArgumentCount(); 303767af88aa617288e584afcfed055f7755e408542Jim Ingham 304767af88aa617288e584afcfed055f7755e408542Jim Ingham if (argc != 0) 305767af88aa617288e584afcfed055f7755e408542Jim Ingham { 306767af88aa617288e584afcfed055f7755e408542Jim Ingham result.AppendErrorWithFormat("'%s' takes no arguments, only flags.\n", GetCommandName()); 307767af88aa617288e584afcfed055f7755e408542Jim Ingham result.SetStatus (eReturnStatusFailed); 30826e089bf5310f8378e7d86b9f38db32a38e76411Jim Ingham return false; 309767af88aa617288e584afcfed055f7755e408542Jim Ingham } 310767af88aa617288e584afcfed055f7755e408542Jim Ingham 311ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton Target *target = m_exe_ctx.GetTargetPtr(); 312fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 313781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SymbolContextList sc_list; 314338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (!m_options.symbol_name.empty()) 315338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 316338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // Displaying the source for a symbol: 317338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ConstString name(m_options.symbol_name.c_str()); 31828d5fcc3158aebf543e0f3d0a3608c1746f5ef15Greg Clayton bool include_symbols = false; 319302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan bool include_inlines = true; 320338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool append = true; 321338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t num_matches = 0; 322338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 32352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_options.modules.size() > 0) 324338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 325338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ModuleList matching_modules; 32652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton for (unsigned i = 0, e = m_options.modules.size(); i != e; i++) 327338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 328444fe998bf707bd076a70c3a779db8575533695eGreg Clayton FileSpec module_file_spec(m_options.modules[i].c_str(), false); 329444fe998bf707bd076a70c3a779db8575533695eGreg Clayton if (module_file_spec) 330338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 331444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (module_file_spec); 332338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham matching_modules.Clear(); 333444fe998bf707bd076a70c3a779db8575533695eGreg Clayton target->GetImages().FindModules (module_spec, matching_modules); 334302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan num_matches += matching_modules.FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list); 335338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 336338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 337338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 338338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 339338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 340302d78c71902398ce1f422bd09216dd53a6abb88Sean Callanan num_matches = target->GetImages().FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list); 341338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 342338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 343338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext sc; 344338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 345338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches == 0) 346338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 347338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find function named: \"%s\".\n", m_options.symbol_name.c_str()); 348338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 349338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 350338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 351338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 352338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (0, sc); 353338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec start_file; 354338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t start_line; 355338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t end_line; 356338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec end_file; 357338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc.function != NULL) 358338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 359338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc.function->GetStartLineSourceInfo (start_file, start_line); 360338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (start_line == 0) 361338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 362338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find line information for start of function: \"%s\".\n", m_options.symbol_name.c_str()); 363338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 364338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 365338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 366338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc.function->GetEndLineSourceInfo (end_file, end_line); 367338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 368338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 369338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 370338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find function info for: \"%s\".\n", m_options.symbol_name.c_str()); 371338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 372338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 373338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 374338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 375338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches > 1) 376338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 377338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // This could either be because there are multiple functions of this name, in which case 378338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // we'll have to specify this further... Or it could be because there are multiple inlined instances 379338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // of one function. So run through the matches and if they all have the same file & line then we can just 380338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // list one. 381338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 382338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool found_multiple = false; 383338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 384338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham for (size_t i = 1; i < num_matches; i++) 385338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 386338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext scratch_sc; 387338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (i, scratch_sc); 388338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_sc.function != NULL) 389338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 390338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec scratch_file; 391338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t scratch_line; 392338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham scratch_sc.function->GetStartLineSourceInfo (scratch_file, scratch_line); 393338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_file != start_file 394338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham || scratch_line != start_line) 395338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 396338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham found_multiple = true; 397338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 398338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 399338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 400338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 401338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (found_multiple) 402338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 403338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham StreamString s; 404338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham for (size_t i = 0; i < num_matches; i++) 405338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 406338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext scratch_sc; 407338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex (i, scratch_sc); 408338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (scratch_sc.function != NULL) 409338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 4107e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda s.Printf("\n%lu: ", i); 411338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham scratch_sc.function->Dump (&s, true); 412338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 413338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 414338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Multiple functions found matching: %s: \n%s\n", 415338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.symbol_name.c_str(), 416338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham s.GetData()); 417338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 418338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 419338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 420338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 421338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 422338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 423338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // This is a little hacky, but the first line table entry for a function points to the "{" that 424338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // starts the function block. It would be nice to actually get the function 425338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // declaration in there too. So back up a bit, but not further than what you're going to display. 426338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t lines_to_back_up = m_options.num_lines >= 10 ? 5 : m_options.num_lines/2; 427338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham uint32_t line_no; 428338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (start_line <= lines_to_back_up) 429338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham line_no = 1; 430338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 431338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham line_no = start_line - lines_to_back_up; 432338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 433338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // For fun, if the function is shorter than the number of lines we're supposed to display, 434338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham // only display the function... 435338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (end_line != 0) 436338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 437338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (m_options.num_lines > end_line - line_no) 438338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.num_lines = end_line - line_no; 439338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 440338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 44152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton char path_buf[PATH_MAX]; 44252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton start_file.GetPath(path_buf, sizeof(path_buf)); 4431cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 444fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 4451cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 4461cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton const bool show_inlines = true; 4471cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Reset (start_file, 0, show_inlines); 448ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton SearchFilter target_search_filter (m_exe_ctx.GetTargetSP()); 4491cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton target_search_filter.Search (m_breakpoint_locations); 4501cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 4511cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton else 4521cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Clear(); 4531cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 454338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendMessageWithFormat("File: %s.\n", path_buf); 455fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham target->GetSourceManager().DisplaySourceLinesWithLineNumbers (start_file, 456fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham line_no, 457fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 0, 458fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.num_lines, 459fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham "", 460fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham &result.GetOutputStream(), 461fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham GetBreakpointLocations ()); 462338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 463338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 464338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return true; 465338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 466338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 467781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else if (m_options.address != LLDB_INVALID_ADDRESS) 468781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 469781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SymbolContext sc; 470781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton Address so_addr; 471781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton StreamString error_strm; 472781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 473781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (target->GetSectionLoadList().IsEmpty()) 474781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 475781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // The target isn't loaded yet, we need to lookup the file address 476781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // in all modules 477781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const ModuleList &module_list = target->GetImages(); 478781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const uint32_t num_modules = module_list.GetSize(); 479781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton for (uint32_t i=0; i<num_modules; ++i) 480781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 481781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton ModuleSP module_sp (module_list.GetModuleAtIndex(i)); 482781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp && module_sp->ResolveFileAddress(m_options.address, so_addr)) 483781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 484781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.Clear(); 485781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp->ResolveSymbolContextForAddress (so_addr, eSymbolContextEverything, sc) & eSymbolContextLineEntry) 486781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.Append(sc); 487781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 488781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 489781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 490781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc_list.GetSize() == 0) 491781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 492781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("no modules have source information for file address 0x%" PRIx64 ".\n", 493781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_options.address); 494781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 495781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 496781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 497781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 498781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else 499781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 500781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // The target has some things loaded, resolve this address to a 501781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton // compile unit + file + line and display 502781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (target->GetSectionLoadList().ResolveLoadAddress (m_options.address, so_addr)) 503781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 504781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton ModuleSP module_sp (so_addr.GetModule()); 505781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp) 506781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 507781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.Clear(); 508781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (module_sp->ResolveSymbolContextForAddress (so_addr, eSymbolContextEverything, sc) & eSymbolContextLineEntry) 509781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 510781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.Append(sc); 511781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 512781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton else 513781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 514781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton so_addr.Dump(&error_strm, NULL, Address::DumpStyleModuleWithFileAddress); 515781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("address resolves to %s, but there is no line table information available for this address.\n", 516781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton error_strm.GetData()); 517781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 518781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 519781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 520781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 521781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 522781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 523781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc_list.GetSize() == 0) 524781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 525781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.AppendErrorWithFormat("no modules contain load address 0x%" PRIx64 ".\n", m_options.address); 526781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusFailed); 527781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton return false; 528781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 529781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 530781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton uint32_t num_matches = sc_list.GetSize(); 531781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton for (uint32_t i=0; i<num_matches; ++i) 532781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 533781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc_list.GetContextAtIndex(i, sc); 534781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (sc.comp_unit) 535781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 536781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton if (m_options.show_bp_locs) 537781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton { 538781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_breakpoint_locations.Clear(); 539781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton const bool show_inlines = true; 540781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_breakpoint_locations.Reset (*sc.comp_unit, 0, show_inlines); 541781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton SearchFilter target_search_filter (target->shared_from_this()); 542781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton target_search_filter.Search (m_breakpoint_locations); 543781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 544781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 545781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_fullpaths = true; 546781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_module = true; 547781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton bool show_inlined_frames = true; 548781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.DumpStopContext(&result.GetOutputStream(), 549ea0bb4d45c14447a2fe9be9f4bd8e79a84513537Greg Clayton m_exe_ctx.GetBestExecutionContextScope(), 550781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.line_entry.range.GetBaseAddress(), 551781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_fullpaths, 552781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_module, 553781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton show_inlined_frames); 554781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.GetOutputStream().EOL(); 555781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 556781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton size_t lines_to_back_up = m_options.num_lines >= 10 ? 5 : m_options.num_lines/2; 557781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton 558781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton target->GetSourceManager().DisplaySourceLinesWithLineNumbers (sc.comp_unit, 559781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton sc.line_entry.line, 560781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton lines_to_back_up, 561781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton m_options.num_lines - lines_to_back_up, 562781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton "->", 563781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton &result.GetOutputStream(), 564781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton GetBreakpointLocations ()); 565781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton result.SetStatus (eReturnStatusSuccessFinishResult); 566781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 567781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 568781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton } 569338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else if (m_options.file_name.empty()) 570767af88aa617288e584afcfed055f7755e408542Jim Ingham { 571767af88aa617288e584afcfed055f7755e408542Jim Ingham // Last valid source manager context, or the current frame if no 572767af88aa617288e584afcfed055f7755e408542Jim Ingham // valid last context in source manager. 573767af88aa617288e584afcfed055f7755e408542Jim Ingham // One little trick here, if you type the exact same list command twice in a row, it is 574767af88aa617288e584afcfed055f7755e408542Jim Ingham // more likely because you typed it once, then typed it again 575767af88aa617288e584afcfed055f7755e408542Jim Ingham if (m_options.start_line == 0) 576767af88aa617288e584afcfed055f7755e408542Jim Ingham { 577c7f18c8fc956ce421bcb4913a0c99a61fdb40247Jim Ingham if (target->GetSourceManager().DisplayMoreWithLineNumbers (&result.GetOutputStream(), 57812b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham GetBreakpointLocations (), 57912b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham m_options.reverse)) 58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 58124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner result.SetStatus (eReturnStatusSuccessFinishResult); 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 583767af88aa617288e584afcfed055f7755e408542Jim Ingham } 584767af88aa617288e584afcfed055f7755e408542Jim Ingham else 585767af88aa617288e584afcfed055f7755e408542Jim Ingham { 586fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 5871cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 588fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham SourceManager::FileSP last_file_sp (target->GetSourceManager().GetLastFile ()); 5891cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton if (last_file_sp) 5901cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton { 5911cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton const bool show_inlines = true; 5921cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Reset (last_file_sp->GetFileSpec(), 0, show_inlines); 59313d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton SearchFilter target_search_filter (target->shared_from_this()); 5941cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton target_search_filter.Search (m_breakpoint_locations); 5951cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 5961cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton } 5971cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton else 5981cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton m_breakpoint_locations.Clear(); 5991cee1e6478d77ef19e24086a54c88358c66a90cbGreg Clayton 600fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (target->GetSourceManager().DisplaySourceLinesWithLineNumbersUsingLastFile( 601767af88aa617288e584afcfed055f7755e408542Jim Ingham m_options.start_line, // Line to display 602767af88aa617288e584afcfed055f7755e408542Jim Ingham 0, // Lines before line to display 603767af88aa617288e584afcfed055f7755e408542Jim Ingham m_options.num_lines, // Lines after line to display 604767af88aa617288e584afcfed055f7755e408542Jim Ingham "", // Don't mark "line" 60552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton &result.GetOutputStream(), 60652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton GetBreakpointLocations ())) 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 608767af88aa617288e584afcfed055f7755e408542Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 610767af88aa617288e584afcfed055f7755e408542Jim Ingham 61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 615767af88aa617288e584afcfed055f7755e408542Jim Ingham const char *filename = m_options.file_name.c_str(); 616767af88aa617288e584afcfed055f7755e408542Jim Ingham 617767af88aa617288e584afcfed055f7755e408542Jim Ingham bool check_inlines = false; 618767af88aa617288e584afcfed055f7755e408542Jim Ingham SymbolContextList sc_list; 619338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham size_t num_matches = 0; 620338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 62152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_options.modules.size() > 0) 622338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 623338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham ModuleList matching_modules; 62452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton for (unsigned i = 0, e = m_options.modules.size(); i != e; i++) 625338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 626444fe998bf707bd076a70c3a779db8575533695eGreg Clayton FileSpec module_file_spec(m_options.modules[i].c_str(), false); 627444fe998bf707bd076a70c3a779db8575533695eGreg Clayton if (module_file_spec) 628338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 629444fe998bf707bd076a70c3a779db8575533695eGreg Clayton ModuleSpec module_spec (module_file_spec); 630338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham matching_modules.Clear(); 631444fe998bf707bd076a70c3a779db8575533695eGreg Clayton target->GetImages().FindModules (module_spec, matching_modules); 632338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham num_matches += matching_modules.ResolveSymbolContextForFilePath (filename, 63352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 0, 63452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton check_inlines, 63552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton eSymbolContextModule | eSymbolContextCompUnit, 63652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton sc_list); 637338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 638338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 639338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 640338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 641338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 642338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham num_matches = target->GetImages().ResolveSymbolContextForFilePath (filename, 643338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 0, 644338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham check_inlines, 645338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham eSymbolContextModule | eSymbolContextCompUnit, 646338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list); 647338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 648338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 649338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches == 0) 650338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 651338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Could not find source file \"%s\".\n", 652338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 653338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 654338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 655338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 656338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 657338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (num_matches > 1) 658767af88aa617288e584afcfed055f7755e408542Jim Ingham { 659767af88aa617288e584afcfed055f7755e408542Jim Ingham SymbolContext sc; 660338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham bool got_multiple = false; 661338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham FileSpec *test_cu_spec = NULL; 662338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 6630f6fa731e05ce45a4c3f7c4590216ce2e30f25dbChris Lattner for (unsigned i = 0; i < num_matches; i++) 664767af88aa617288e584afcfed055f7755e408542Jim Ingham { 665338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham sc_list.GetContextAtIndex(i, sc); 666767af88aa617288e584afcfed055f7755e408542Jim Ingham if (sc.comp_unit) 667767af88aa617288e584afcfed055f7755e408542Jim Ingham { 668338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (test_cu_spec) 669338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 670338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (test_cu_spec != static_cast<FileSpec *> (sc.comp_unit)) 671338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham got_multiple = true; 672338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham break; 673338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 674338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 675338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham test_cu_spec = sc.comp_unit; 676767af88aa617288e584afcfed055f7755e408542Jim Ingham } 677767af88aa617288e584afcfed055f7755e408542Jim Ingham } 678338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (got_multiple) 679338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 680338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("Multiple source files found matching: \"%s.\"\n", 681338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 682338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 683338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 684338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 685338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 686338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham 687338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham SymbolContext sc; 688338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc_list.GetContextAtIndex(0, sc)) 689338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 690338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham if (sc.comp_unit) 691338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 692fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham if (m_options.show_bp_locs) 69352c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton { 69452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton const bool show_inlines = true; 69552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton m_breakpoint_locations.Reset (*sc.comp_unit, 0, show_inlines); 69613d24fb1817faa7ccc4cfd799113ba1a2b8968ebGreg Clayton SearchFilter target_search_filter (target->shared_from_this()); 69752c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton target_search_filter.Search (m_breakpoint_locations); 69852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton } 69952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton else 70052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton m_breakpoint_locations.Clear(); 70152c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 702fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham target->GetSourceManager().DisplaySourceLinesWithLineNumbers (sc.comp_unit, 703fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.start_line, 704fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham 0, 705fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham m_options.num_lines, 706fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham "", 707fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham &result.GetOutputStream(), 708fdf24efe672bf3fa041cdbebd2d7f406b11882bdJim Ingham GetBreakpointLocations ()); 70952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton 710338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusSuccessFinishResult); 711338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 712338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham else 713338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham { 714338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.AppendErrorWithFormat("No comp unit found for: \"%s.\"\n", 715338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham m_options.file_name.c_str()); 716338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham result.SetStatus (eReturnStatusFailed); 717338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham return false; 718338f75345e1f87cf4ac334a5c95161ed2c7bc2f3Jim Ingham } 719767af88aa617288e584afcfed055f7755e408542Jim Ingham } 72024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 721767af88aa617288e584afcfed055f7755e408542Jim Ingham return result.Succeeded(); 72224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 723767af88aa617288e584afcfed055f7755e408542Jim Ingham 72452c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton const SymbolContextList * 72552c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton GetBreakpointLocations () 72652c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton { 72752c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton if (m_breakpoint_locations.GetFileLineMatches().GetSize() > 0) 72852c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton return &m_breakpoint_locations.GetFileLineMatches(); 72952c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton return NULL; 73052c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton } 731767af88aa617288e584afcfed055f7755e408542Jim Ingham CommandOptions m_options; 73252c8b6e3205e11e90adc83521c01915fc13626deGreg Clayton FileLineResolver m_breakpoint_locations; 73312b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham std::string m_reverse_name; 734767af88aa617288e584afcfed055f7755e408542Jim Ingham 735767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 736767af88aa617288e584afcfed055f7755e408542Jim Ingham 737b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonOptionDefinition 738767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectSourceList::CommandOptions::g_option_table[] = 739767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 740781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_ALL, false, "count", 'c', required_argument, NULL, 0, eArgTypeCount, "The number of source lines to display."}, 741781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 | 742781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton LLDB_OPT_SET_2 , false, "shlib", 's', required_argument, NULL, CommandCompletions::eModuleCompletion, eArgTypeShlibName, "Look up the source file in the given shared library."}, 74352c8b6e3205e11e90adc83521c01915fc13626deGreg 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."}, 744781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 , false, "file", 'f', required_argument, NULL, CommandCompletions::eSourceFileCompletion, eArgTypeFilename, "The file from which to display source."}, 745781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_1 , false, "line", 'l', required_argument, NULL, 0, eArgTypeLineNum, "The line number at which to start the display source."}, 746781241147dbdd18762ab676960ecbff18ab0a766Greg Clayton{ LLDB_OPT_SET_2 , false, "name", 'n', required_argument, NULL, CommandCompletions::eSymbolCompletion, eArgTypeSymbol, "The name of a function whose source to display."}, 747781241147dbdd18762ab676960ecbff18ab0a766Greg 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."}, 74812b5aa0a637c6070fa0290a90fdc9d5b0b9df950Jim Ingham{ LLDB_OPT_SET_4, false, "reverse", 'r', no_argument, NULL, 0, eArgTypeNone, "Reverse the listing to look backwards from the last displayed block of source."}, 7494d6675c8e1cab6360f59865229835ae137d6f68aCaroline Tice{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL } 750767af88aa617288e584afcfed055f7755e408542Jim Ingham}; 751767af88aa617288e584afcfed055f7755e408542Jim Ingham 752767af88aa617288e584afcfed055f7755e408542Jim Ingham#pragma mark CommandObjectMultiwordSource 753767af88aa617288e584afcfed055f7755e408542Jim Ingham 754767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 755767af88aa617288e584afcfed055f7755e408542Jim Ingham// CommandObjectMultiwordSource 756767af88aa617288e584afcfed055f7755e408542Jim Ingham//------------------------------------------------------------------------- 757767af88aa617288e584afcfed055f7755e408542Jim Ingham 758767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectMultiwordSource::CommandObjectMultiwordSource (CommandInterpreter &interpreter) : 759238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton CommandObjectMultiword (interpreter, 760238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton "source", 761c1ad82eb979ee856b86aec6e2acb7bddf75f7c4fCaroline Tice "A set of commands for accessing source file information", 762767af88aa617288e584afcfed055f7755e408542Jim Ingham "source <subcommand> [<subcommand-options>]") 763767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 764238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("info", CommandObjectSP (new CommandObjectSourceInfo (interpreter))); 765238c0a1e7b733cee539258faa656159c63f9e893Greg Clayton LoadSubCommand ("list", CommandObjectSP (new CommandObjectSourceList (interpreter))); 766767af88aa617288e584afcfed055f7755e408542Jim Ingham} 767767af88aa617288e584afcfed055f7755e408542Jim Ingham 768767af88aa617288e584afcfed055f7755e408542Jim InghamCommandObjectMultiwordSource::~CommandObjectMultiwordSource () 769767af88aa617288e584afcfed055f7755e408542Jim Ingham{ 77024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 771767af88aa617288e584afcfed055f7755e408542Jim Ingham 772