|
|
1.1 root 1: /*
2: * Copyright (C) 2008 Stefan Hajnoczi <[email protected]>.
3: *
4: * This program is free software; you can redistribute it and/or
5: * modify it under the terms of the GNU General Public License as
6: * published by the Free Software Foundation; either version 2 of the
7: * License, or any later version.
8: *
9: * This program is distributed in the hope that it will be useful, but
10: * WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: * General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with this program; if not, write to the Free Software
16: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17: */
18:
19: FILE_LICENCE ( GPL2_OR_LATER );
20:
21: #include <stdio.h>
22: #include <errno.h>
23: #include <assert.h>
24: #include <getopt.h>
25: #include <ipxe/command.h>
26: #include <ipxe/parseopt.h>
27: #include <ipxe/gdbstub.h>
28:
29: /** @file
30: *
31: * GDB stub command
32: *
33: */
34:
35: /**
36: * Parse GDB transport name
37: *
38: * @v text Text
39: * @ret trans GDB transport
40: * @ret rc Return status code
41: */
42: static int parse_gdb_transport ( const char *text,
43: struct gdb_transport **trans ) {
44:
45: /* Sanity check */
46: assert ( text != NULL );
47:
48: /* Find transport */
49: *trans = find_gdb_transport ( text );
50: if ( ! *trans ) {
51: printf ( "\"%s\": no such transport (is it compiled in?)\n",
52: text );
53: return -ENOTSUP;
54: }
55:
56: return 0;
57: }
58:
59: /** "gdbstub" options */
60: struct gdbstub_options {};
61:
62: /** "gdbstub" option list */
63: static struct option_descriptor gdbstub_opts[] = {};
64:
65: /** "gdbstub" command descriptor */
66: static struct command_descriptor gdbstub_cmd =
67: COMMAND_DESC ( struct gdbstub_options, gdbstub_opts, 1, MAX_ARGUMENTS,
68: "<transport> [<options>...]" );
69:
70: /**
71: * The "gdbstub" command
72: *
73: * @v argc Argument count
74: * @v argv Argument list
75: * @ret rc Return status code
76: */
77: static int gdbstub_exec ( int argc, char **argv ) {
78: struct gdbstub_options opts;
79: struct gdb_transport *trans;
80: int rc;
81:
82: /* Parse options */
83: if ( ( rc = parse_options ( argc, argv, &gdbstub_cmd, &opts ) ) != 0 )
84: return rc;
85:
86: /* Parse transport name */
87: if ( ( rc = parse_gdb_transport ( argv[optind++], &trans ) ) != 0 )
88: return rc;
89:
90: /* Initialise transport */
91: if ( trans->init ) {
92: if ( ( rc = trans->init ( argc - optind,
93: &argv[optind] ) ) != 0 ) {
94: return rc;
95: }
96: }
97:
98: /* Enter GDB stub */
99: gdbstub_start ( trans );
100:
101: return 0;
102: }
103:
104: /** GDB stub commands */
105: struct command gdbstub_commands[] __command = {
106: {
107: .name = "gdbstub",
108: .exec = gdbstub_exec,
109: },
110: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.