14e98e3e1Schristos /* Module support. 2*88241920Schristos Copyright (C) 1996-2024 Free Software Foundation, Inc. 34e98e3e1Schristos Contributed by Cygnus Support. 44e98e3e1Schristos 54e98e3e1Schristos This file is part of GDB, the GNU debugger. 64e98e3e1Schristos 74e98e3e1Schristos This program is free software; you can redistribute it and/or modify 84e98e3e1Schristos it under the terms of the GNU General Public License as published by 94e98e3e1Schristos the Free Software Foundation; either version 3 of the License, or 104e98e3e1Schristos (at your option) any later version. 114e98e3e1Schristos 124e98e3e1Schristos This program is distributed in the hope that it will be useful, 134e98e3e1Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 144e98e3e1Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 154e98e3e1Schristos GNU General Public License for more details. 164e98e3e1Schristos 174e98e3e1Schristos You should have received a copy of the GNU General Public License 184e98e3e1Schristos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 194e98e3e1Schristos 204e98e3e1Schristos /* This file is intended to be included by sim-base.h. */ 214e98e3e1Schristos 224e98e3e1Schristos #ifndef SIM_MODULES_H 234e98e3e1Schristos #define SIM_MODULES_H 244e98e3e1Schristos 254e98e3e1Schristos /* Modules are addons to the simulator that perform a specific function 264e98e3e1Schristos (e.g. tracing, profiling, memory subsystem, etc.). Some modules are 274e98e3e1Schristos builtin, and others are added at configure time. The intent is to 284e98e3e1Schristos provide a uniform framework for all of the pieces that make up the 294e98e3e1Schristos simulator. 304e98e3e1Schristos 314e98e3e1Schristos TODO: Add facilities for saving/restoring state to/from a file. */ 324e98e3e1Schristos 334b169a6bSchristos #include "sim/sim.h" 344e98e3e1Schristos 354e98e3e1Schristos /* Various function types. */ 364e98e3e1Schristos 374e98e3e1Schristos typedef SIM_RC (MODULE_INSTALL_FN) (SIM_DESC); 384e98e3e1Schristos typedef SIM_RC (MODULE_INIT_FN) (SIM_DESC); 394e98e3e1Schristos typedef SIM_RC (MODULE_RESUME_FN) (SIM_DESC); 404e98e3e1Schristos typedef SIM_RC (MODULE_SUSPEND_FN) (SIM_DESC); 414e98e3e1Schristos typedef void (MODULE_UNINSTALL_FN) (SIM_DESC); 42*88241920Schristos typedef void (MODULE_INFO_FN) (SIM_DESC, bool); 434e98e3e1Schristos 444e98e3e1Schristos 454e98e3e1Schristos /* Lists of installed handlers. */ 464e98e3e1Schristos 474e98e3e1Schristos typedef struct module_init_list { 484e98e3e1Schristos struct module_init_list *next; 494e98e3e1Schristos MODULE_INIT_FN *fn; 504e98e3e1Schristos } MODULE_INIT_LIST; 514e98e3e1Schristos 524e98e3e1Schristos typedef struct module_resume_list { 534e98e3e1Schristos struct module_resume_list *next; 544e98e3e1Schristos MODULE_RESUME_FN *fn; 554e98e3e1Schristos } MODULE_RESUME_LIST; 564e98e3e1Schristos 574e98e3e1Schristos typedef struct module_suspend_list { 584e98e3e1Schristos struct module_suspend_list *next; 594e98e3e1Schristos MODULE_SUSPEND_FN *fn; 604e98e3e1Schristos } MODULE_SUSPEND_LIST; 614e98e3e1Schristos 624e98e3e1Schristos typedef struct module_uninstall_list { 634e98e3e1Schristos struct module_uninstall_list *next; 644e98e3e1Schristos MODULE_UNINSTALL_FN *fn; 654e98e3e1Schristos } MODULE_UNINSTALL_LIST; 664e98e3e1Schristos 674e98e3e1Schristos typedef struct module_info_list { 684e98e3e1Schristos struct module_info_list *next; 694e98e3e1Schristos MODULE_INFO_FN *fn; 704e98e3e1Schristos } MODULE_INFO_LIST; 714e98e3e1Schristos 724e98e3e1Schristos 734e98e3e1Schristos /* Functions to register module with various handler lists */ 744e98e3e1Schristos 754e98e3e1Schristos SIM_RC sim_module_install (SIM_DESC); 764b169a6bSchristos SIM_RC sim_module_install_list (SIM_DESC, MODULE_INSTALL_FN * const[], size_t); 774e98e3e1Schristos void sim_module_uninstall (SIM_DESC); 784e98e3e1Schristos void sim_module_add_init_fn (SIM_DESC sd, MODULE_INIT_FN fn); 794e98e3e1Schristos void sim_module_add_resume_fn (SIM_DESC sd, MODULE_RESUME_FN fn); 804e98e3e1Schristos void sim_module_add_suspend_fn (SIM_DESC sd, MODULE_SUSPEND_FN fn); 814e98e3e1Schristos void sim_module_add_uninstall_fn (SIM_DESC sd, MODULE_UNINSTALL_FN fn); 824e98e3e1Schristos void sim_module_add_info_fn (SIM_DESC sd, MODULE_INFO_FN fn); 834e98e3e1Schristos 844e98e3e1Schristos 854e98e3e1Schristos /* Initialize installed modules before argument processing. 864e98e3e1Schristos Called by sim_open. */ 874e98e3e1Schristos SIM_RC sim_pre_argv_init (SIM_DESC sd, const char *myname); 884e98e3e1Schristos 894e98e3e1Schristos /* Initialize installed modules after argument processing. 904e98e3e1Schristos Called by sim_open. */ 914e98e3e1Schristos SIM_RC sim_post_argv_init (SIM_DESC sd); 924e98e3e1Schristos 934e98e3e1Schristos /* Re-initialize the module. Called by sim_create_inferior. */ 944e98e3e1Schristos SIM_RC sim_module_init (SIM_DESC sd); 954e98e3e1Schristos 964e98e3e1Schristos /* Suspend/resume modules. Called by sim_run or sim_resume */ 974e98e3e1Schristos SIM_RC sim_module_suspend (SIM_DESC sd); 984e98e3e1Schristos SIM_RC sim_module_resume (SIM_DESC sd); 994e98e3e1Schristos 1004e98e3e1Schristos /* Report general information on module */ 101*88241920Schristos void sim_module_info (SIM_DESC sd, bool verbose); 1024e98e3e1Schristos 1034e98e3e1Schristos 1044e98e3e1Schristos /* Module private data */ 1054e98e3e1Schristos 1064e98e3e1Schristos struct module_list { 1074e98e3e1Schristos 1084e98e3e1Schristos /* List of installed module `init' handlers */ 1094e98e3e1Schristos MODULE_INIT_LIST *init_list; 1104e98e3e1Schristos 1114e98e3e1Schristos /* List of installed module `uninstall' handlers. */ 1124e98e3e1Schristos MODULE_UNINSTALL_LIST *uninstall_list; 1134e98e3e1Schristos 1144e98e3e1Schristos /* List of installed module `resume' handlers. */ 1154e98e3e1Schristos MODULE_RESUME_LIST *resume_list; 1164e98e3e1Schristos 1174e98e3e1Schristos /* List of installed module `suspend' handlers. */ 1184e98e3e1Schristos MODULE_SUSPEND_LIST *suspend_list; 1194e98e3e1Schristos 1204e98e3e1Schristos /* List of installed module `info' handlers. */ 1214e98e3e1Schristos MODULE_INFO_LIST *info_list; 1224e98e3e1Schristos 1234e98e3e1Schristos }; 1244e98e3e1Schristos 1254e98e3e1Schristos 1264e98e3e1Schristos #endif /* SIM_MODULES_H */ 127