177356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen//===-- main.c --------------------------------------------------*- C++ -*-===// 277356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// 377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// The LLVM Compiler Infrastructure 477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// 577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// This file is distributed under the University of Illinois Open Source 677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// License. See LICENSE.TXT for details. 777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// 877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen//===----------------------------------------------------------------------===// 977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen#include <stdio.h> 1077356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 1177356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// This simple program is to test the lldb Python API SBTarget. 1277356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// 1377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// When stopped on breakppint 1, and then 2, we can get the line entries using 1477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// SBFrame API SBFrame.GetLineEntry(). We'll get the start addresses for the 1577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// two line entries; with the start address (of SBAddress type), we can then 1677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// resolve the symbol context using the SBTarget API 1777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// SBTarget.ResolveSymbolContextForAddress(). 1877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// 1977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen// The two symbol context should point to the same symbol, i.e., 'a' function. 2077356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 2151123cf1ca0434f0cc6a2cdeca36a92884b7c320Johnny Chenchar my_global_var_of_char_type = 'X'; // Test SBTarget.FindGlobalVariables(...). 2251123cf1ca0434f0cc6a2cdeca36a92884b7c320Johnny Chen 2377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint a(int); 2477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint b(int); 2577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint c(int); 2677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 2777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint a(int val) 2877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen{ 2977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen if (val <= 1) // Find the line number for breakpoint 1 here. 3077356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen val = b(val); 3177356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen else if (val >= 3) 3277356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen val = c(val); 3377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 3477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen return val; // Find the line number for breakpoint 2 here. 3577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen} 3677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 3777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint b(int val) 3877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen{ 3977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen return c(val); 4077356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen} 4177356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 4277356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint c(int val) 4377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen{ 4477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen return val + 3; 4577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen} 4677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 4777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chenint main (int argc, char const *argv[]) 4877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen{ 4977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen int A1 = a(1); // a(1) -> b(1) -> c(1) 5077356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen printf("a(1) returns %d\n", A1); 5177356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 5277356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen int B2 = b(2); // b(2) -> c(2) 5377356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen printf("b(2) returns %d\n", B2); 5477356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 5577356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen int A3 = a(3); // a(3) -> c(3) 5677356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen printf("a(3) returns %d\n", A3); 5777356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen 5877356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen return 0; 5977356a0e9bec77c6ed7eb23151bcd8de27fef902Johnny Chen} 60