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