1    /* 
     2     *  Copyright (c) 2008-2020 Texas Instruments Incorporated
     3     *  All rights reserved. This program and the accompanying materials
     4     *  are made available under the terms of the Eclipse Public License v1.0
     5     *  which accompanies this distribution, and is available at
     6     *  http://www.eclipse.org/legal/epl-v10.html
     7     *
     8     *  Contributors:
     9     *      Texas Instruments - initial implementation
    10     *
    11     * */
    12    
    13    /*!
    14     *  ======== Program ========
    15     *  Root object for the ROV model
    16     *
    17     *  This module is the main access point for all ROV operations.
    18     *  The Program APIs are used to retrieve the views for the
    19     *  requested modules.
    20     */
    21    metaonly module Program {
    22    
    23        /*!
    24         *  ======== FetchDesc ========
    25         *  Description of data to fetch
    26         *
    27         *  A FetchDesc object is required as the first argument of the
    28         *  `{@link #fetchStruct}` and `{@link #fetchArray}` methods.
    29         *  The FetchDesc tells ROV the type of the data to be
    30         *  fetched so it knows how much data to read and how to decode it.
    31         *
    32         *  Every reference-type field in a state structure has a FetchDesc
    33         *  generated for it, with the name `<field name>$fetchDesc`.
    34         *
    35         *  For example, the instance structure
    36         *  @p(code)
    37         *      struct Instance_State {
    38         *          Char stack[];
    39         *      ];
    40         *  @p
    41         *  will have defined `obj.stack$fetchDesc`, which can be used to fetch
    42         *  the array:
    43         *  @p(code)
    44         *      var data = Program.fetchArray(obj.stack$fetchDesc, obj.stack, len);
    45         *  @p
    46         *
    47         *  @field(type)     the fully qualified name of a specified type; i.e.,
    48         *                   a type declared in some .xdc file.  For example,
    49         *                   "xdc.runtime.Types.Timestamp64".
    50         *  @field(isScalar) if fetching an array, are the elements of the array
    51         *                   really just one of the "scalar structs" defined by
    52         *                   xdc.rov.support.ScalarStructs.
    53         *
    54         *  @see #fetchStruct
    55         *  @see #fetchArray
    56         */
    57        metaonly struct FetchDesc {
    58            String type;
    59            Bool   isScalar;
    60        }
    61    
    62        /*!
    63         *  ======== InstDataView ========
    64         *  Instance view data returned from a scan
    65         *
    66         *  @see #scanInstanceDataView
    67         */
    68        metaonly struct InstDataView {
    69            String label;
    70            Any    elements[];
    71        }
    72    
    73        /*!
    74         *  ======== InstDataViewArr ========
    75         *  Array of all instance view data objects
    76         *
    77         *  @see #scanInstanceDataView
    78         */
    79        typedef InstDataView InstDataViewArr[];
    80    
    81        /*!
    82         *  ======== ModDataView ========
    83         *  Module view data returned from a scan
    84         *
    85         *  @see #scanModuleDataView
    86         */
    87        metaonly struct ModDataView {
    88            Any elements[];
    89        }
    90    
    91        /*!
    92         *  ======== TreeNode ========
    93         *  Node for a generic "tree table" view
    94         *
    95         *  @see #scanTreeTableView
    96         *  @see ViewInfo#TREE_TABLE
    97         */
    98        metaonly struct TreeNode {
    99            String   label;
   100            TreeNode children[];
   101            Any      properties[];
   102        }
   103    
   104        /*!
   105         *  ======== TreeNodeArr ========
   106         *  Array of tree table nodes
   107         *
   108         *  @see #scanTreeTableView
   109         *  @see ViewInfo#TREE_TABLE
   110         */
   111        typedef TreeNode TreeNodeArr[];
   112    
   113        /*!
   114         *  ========= RawView ========
   115         *  Raw module view
   116         *
   117         *  This is the structure returned by the `{@link scanRawView}` method.
   118         *  It contains the module's state, the instance states, and the module
   119         *  configuration fields and values.
   120         */
   121        metaonly struct RawView {
   122            Any modState;
   123            Any instStates[];
   124            Any modCfg;
   125        }
   126    
   127        /* -------- Scan Functions -------- */
   128    
   129        /*!
   130         *  ======== scanInstanceView ========
   131         *  Retrieve the instance-type views for a module
   132         *
   133         *  Returns an array of Instance_View structures, each structure
   134         *  representing an instance of the module.
   135         *
   136         *  @param(modName)  Full module name to return the views for.
   137         *  @param(tabName)  Name of the tab to retrieve the views for.
   138         *
   139         *  @a(Returns)  Array of Instance_View structures, one for each instance.
   140         *
   141         *  @a(Throws)  Throws an exception in the event that a memory read of
   142         *              the specified instance view fails, the specified `tabName`
   143         *              isn't recognized, the specified `modName` doesn't support
   144         *              instances, or the module `modName` is not configured into
   145         *              the current program.
   146         */
   147        Any scanInstanceView(String modName, String tabName);
   148    
   149        /*!
   150         *  ======== scanModuleView ========
   151         *  Retrieve module-type view for a module.
   152         *
   153         *  @param(modName)  Full module name to return the view for.
   154         *  @param(tabName)  Name of the tab to retreive the view for.
   155         *
   156         *  @(Returns)  Module_View structure.
   157         *
   158         *  @a(Throws)  Throws an exception in the event that a memory read of
   159         *              the specified module view fails, the specified `tabName`
   160         *              isn't recognized, or the module `modName` is not
   161         *              configured into the current program.
   162         */
   163        Any scanModuleView(String modName, String tabName);
   164    
   165        /*!
   166         *  ======== scanInstanceDataView ========
   167         *  Retrieve a module's specified INSTANCE_DATA type view
   168         *
   169         *  @param(modName)  Full module name to return the views for.
   170         *  @param(tabName)  Name of the tab to retrieve the views for.
   171         *
   172         *  @a(Throws)  Throws an exception in the event that a memory read of
   173         *              the module's Raw view or any instance fails, the specified
   174         *              `tabName` isn't recognized, the specified `modName`
   175         *              doesn't support instances, or the module `modName` is not
   176         *              configured into the current program.
   177         */
   178        InstDataViewArr scanInstanceDataView(String modName, String tabName);
   179    
   180        /*!
   181         *  ======== scanModuleDataView ========
   182         *  Retrieve a module's specified MODULE_DATA type view
   183         *
   184         *  @param(modName)  Full module name to return the views for.
   185         *  @param(tabName)  Name of the tab to retrieve the views for.
   186         *
   187         *  @a(Throws)  Throws an exception in the event that a memory read of
   188         *              the specified module view fails, the specified `tabName`
   189         *              isn't recognized, or the module `modName` is not
   190         *              configured into the current program.
   191         */
   192        ModDataView scanModuleDataView(String modName, String tabName);
   193    
   194        /*!
   195         *  ======== scanRawView ========
   196         *  Retrieve the raw view for a module.
   197         *
   198         *  @param(modName)  Full module name to return the raw view for.
   199         *
   200         *  @(Returns) A RawView structure which contains the raw data.
   201         *
   202         *  @a(Throws)  Throws an exception in the event that a memory read of
   203         *              the specified instance view fails, the specified `tabName`
   204         *              isn't recognized, the specified `modName` doesn't support
   205         *              instances, or the module `modName` is not configured into
   206         *              the current program.
   207         *
   208         *  @a(Throws)  Throws an exception in the event that a memory read of
   209         *              the module's Raw view fails, or the module `modName` is
   210         *              not configured into the current program.
   211         */
   212        RawView scanRawView(String modName);
   213    
   214        /*!
   215         *  ======== scanTreeTableView ========
   216         */
   217        TreeNodeArr scanTreeTableView(String modName, String tabName);
   218    
   219        /*!
   220         *  ======== scanTreeView ========
   221         */
   222        Any scanTreeView(String modName, String tabName);
   223    
   224        /*!
   225         *  ======== scanHandle ========
   226         *  Scan single instance of a module
   227         *
   228         *  Used from a view$init function to scan a single instance of a
   229         *  different module given that instance's address.
   230         *
   231         *  @param(modName)  Full module name to return the raw view for.
   232         *  @param(instAddr) Address of instance to scan.
   233         *  @param(tabName)  Name of the tab to retrieve the view for.
   234         *
   235         *  @a(Returns) An Instance_View object for the requested view.
   236         *
   237         *  @a(Throws)  Throws an exception in the event that a memory read of
   238         *              the specified instance view fails, the specified `tabName`
   239         *              isn't recognized, the specified `modName` doesn't support
   240         *              instances, or the module `modName` is not configured into
   241         *              the current program.
   242         */
   243        Any scanHandleView(String modName, Ptr instAddr, String tabName);
   244    
   245        /*!
   246         *  ======== scanObjectView ========
   247         *  Scan view for an embedded object
   248         *
   249         *  Called from a view$init function to retrieve the specified view for
   250         *  an embedded object.
   251         *
   252         *  Since XDC has no way of knowing what embedded objects are present in
   253         *  a system, embedded objects do not appear in the list of a module's
   254         *  instances until they have been scanned in this way.
   255         *
   256         *  Calling Program.scanObjectView will not read any additional data from
   257         *  the target, since the state structure was already read as part of
   258         *  reading its parent structure.
   259         *
   260         *  @param(modName) Full module name to return the view for.
   261         *  @param(obj)     Actual object to retrieve the view for.
   262         *  @param(tabName) Name of the tab to retrieve the view for.
   263         *
   264         *  @a(Returns) An Instance_View object for the requested view.
   265         *
   266         *  @a(Throws)  Throws an exception in the event that the specified
   267         *              `tabName` isn't recognized, the specified `modName`
   268         *              doesn't support instances, or the module `modName` is not
   269         *              configured into the current program.
   270         */
   271        Any scanObjectView(String modName, Any obj, String tabName);
   272    
   273    
   274        /* -------- Fetch Functions -------- */
   275    
   276        /*!
   277         *  ======== fetchStruct ========
   278         *  Retrieve the specified structure from the target
   279         *
   280         *  @param(desc) Fetch descriptor for the structure, indicating the type
   281         *               of the structure.
   282         *  @param(addr) Address of the structure to fetch.
   283         *  @param(addrCheck)  Optional, defaults to true. Indicates whether the
   284         *                     memory image should validate the read by comparing
   285         *                     the address to section information.
   286         *
   287         *  @a(Returns)  Returns the requested structure as a JavaScript object.
   288         *
   289         *  @a(Throws)  Throws an exception in the event that `addr` is not in
   290         *              the program's memory map or some error occurs that
   291         *              prevents memory from being read.
   292         */
   293        Any fetchStruct(FetchDesc desc, Ptr addr, Bool addrCheck = true);
   294    
   295        /*!
   296         *  ======== fetchArray ========
   297         *  Retrieve the specified array from the target
   298         *
   299         *  @param(desc) Fetch descriptor for the array, indicating the type of
   300         *               data in the array.
   301         *  @param(addr) Address of the array to fetch.
   302         *  @param(len)  The number of arrray elements to fetch.
   303         *  @param(addrCheck)  Optional, defaults to true. Indicates whether the
   304         *                     memory image should validate the read by comparing
   305         *                     the address to section information.
   306         *
   307         *  @a(Returns)  Returns a JavaScript array with the data in it.
   308         *
   309         *  @a(Throws)   Throws an exception in the event that `addr` is not in
   310         *               the program's memory map, some error occurs that
   311         *               prevents memory from being read, or if `len` = 0.
   312         */
   313        Any fetchArray(FetchDesc desc, Ptr addr, Int len, Bool addrCheck = true);
   314    
   315        /*!
   316         *  ======== fetchString ========
   317         *  Retrieve a string from the target
   318         *
   319         *  @param(addr) Address of the string.
   320         *  @param(addrCheck)  Optional, defaults to true. Indicates whether the
   321         *                     memory image should validate the read by comparing
   322         *                     the address to section information.
   323         *
   324         *  @a(Returns)  Requested string.
   325         *
   326         *  @a(Throws)   Throws an exception in the event that `addr` is not in
   327         *               the program's memory map or some error occurs that
   328         *               prevents memory from being read.
   329         */
   330        String fetchString(Ptr addr, Bool addrCheck = true);
   331    
   332        /*!
   333         *  ======== fetchStaticString ========
   334         *  Retrieves a static string from the executable.
   335         *
   336         *  This API makes use of an object file reader to improve the string
   337         *  reading performance--it reads the string from the file rather than
   338         *  performing a target memory read. For this reason, it should only be
   339         *  used on static strings and not dynamic ones.
   340         *
   341         *  @param(addr)  Address of the string
   342         *
   343         *  @a(Returns)  Requested string or `null` if it can't be found.
   344         */
   345        String fetchStaticString(Ptr addr);
   346    
   347        /*!
   348         *  ======== fetchFromAddr ========
   349         *  Returns a JavaScript object that mirrors the C object at the supplied
   350         *  address
   351         *
   352         *  The type of the object is also supplied by the user. There is no
   353         *  checking whether the object at that address is of the supplied type.
   354         *  By default, only one instance of the specified type will be fetched
   355         *  from the address.
   356         *
   357         *  @param(addr)     Address of the C object
   358         *  @param(typeName) Name of the C type read from the address
   359         *  @param(count)    Number of C objects read from the address
   360         *
   361         *  @a(Returns)      JavaScript representation of the object at the address
   362         */
   363        Any fetchFromAddr(Ptr addr, String typename, Int count = 1);
   364    
   365        /*!
   366         *  ======== fetchVariable ========
   367         *  Returns a JavaScript object or a scalar that mirrors the content of the
   368         *  variable.
   369         *
   370         *  This function replicates primitive or aggregate objects from memory,
   371         *  and returns them as JavaScript objects. If the variable is an array or
   372         *  a structure, its corresponding JavaScript elements can be accessed as
   373         *  JavaScript arrays or structures.
   374         *  Pointers are not followed, but they are represented as hexadecimal
   375         *  values.
   376         *
   377         *  If the variable is not found in the object file, an exception is raised.
   378         *
   379         *  @param(varName) name of the variable
   380         *
   381         *  @a(Returns)     content of the variable
   382         */
   383        Any fetchVariable(String varName);
   384    
   385        /*!
   386         *  ======== fetchVariableByPtr ========
   387         *  Returns a JavaScript representation of a C object or a scalar pointed to
   388         *  by the supplied pointer variable.
   389         *
   390         *  This API first checks if there is such a variable, and if it is of a
   391         *  pointer type. If any of these checks fails, 'null' is returned.
   392         *  Otherwise, the pointer variable is dereferenced, and the memory content
   393         *  is interpreted as a pointed-to type.
   394         */
   395        Any fetchVariableByPtr(String varName);
   396    
   397        /*!
   398         *  @_nodoc
   399         *  ======== createObject ========
   400         *  Internal method to create a JavaScript object representing a C object
   401         *
   402         *  This method should never be directly called by code outside
   403         *  the xdc.rov package; future changes to an executables debug format
   404         *  will result is compatibility breaks.
   405         *
   406         *  @param(addr)    address of the object in memory
   407         *  @param(type)    type specification for the object from memory
   408         *  @param(ret)     already created object to which a new object is added
   409         *  @param(name)    name for the new object within `ret`
   410         */
   411        Void createObject(Ptr addr, Any typespec, Any ret, String name);
   412    
   413        /*!
   414         *  @_nodoc
   415         *  ======== readMemory ========
   416         *  Internal method to read a primitive value from memory
   417         *
   418         *  This method should never be directly called by code outside
   419         *  the xdc.rov package; future changes to an executables debug format
   420         *  will result is compatibility breaks.
   421         *
   422         *  @param(addr)    memory address
   423         *  @param(size)    size in MAUs
   424         *  @param(enc)     one of the following Dwarf encodings (DW_AT_encoding)
   425         *                    0x01 DW_ATE_address
   426         *                    0x02 DW_ATE_boolean
   427         *                    0x05 DW_ATE_signed
   428         *                    0x06 DW_ATE_signed_char
   429         *                    0x07 DW_ATE_unsigned
   430         *                    0x08 DW_ATE_unsigned_char
   431         *
   432         *                  The following encodings are not supported
   433         *                    0x03 DW_ATE_complex_float
   434         *                    0x04 DW_ATE_float
   435         *                    0x09 DW_ATE_imaginary_float
   436         *                    0x0a DW_ATE_packed_decimal
   437         *                    0x0b DW_ATE_numeric_string
   438         *                    0x0c DW_ATE_edited
   439         *                    0x0d DW_ATE_signed_fixed
   440         *                    0x0e DW_ATE_unsigned_fixed
   441         *                    0x0f DW_ATE_decimal_float
   442         *                    0x10 DW_ATE_UTF
   443         *                    0x11 DW_ATE_UCS
   444         *                    0x12 DW_ATE_ASCII
   445         * @a(Returns) a scalor value (via `{@link StructureDecoder StructureDecoder._decodeScalar}`)
   446         */
   447        Any readMemory(Ptr addr, UInt size, Int enc);
   448    
   449        /*!
   450         *  ======== getModuleConfig ========
   451         *  Get a module's configuration state
   452         *
   453         *  Returns an object with all of the module configuration values used
   454         *  in configuring the application.
   455         *
   456         *  This object includes the common$ config params.
   457         *
   458         *  @param(modName) Full module name to get the configs for.
   459         *
   460         *  @a(Returns)     Object containing all of the module configs and
   461         *                  their values.
   462         */
   463        Any getModuleConfig(String modName);
   464    
   465        /*!
   466         *  ======== getPrivateData ========
   467         *  Retrieves module's private ROV data.
   468         *
   469         *  This API returns an object which can be used to store private data
   470         *  across different ROV API calls. The object is reset at every
   471         *  breakpoint.
   472         *
   473         *  This object is also passed as the context to all view init functions,
   474         *  so it can also be accessed using 'this'. However, the context changes
   475         *  when you call other APIs in your module; that is when you will need
   476         *  this API. It can also be used to support metaonly APIs which are called
   477         *  by other modules.
   478         */
   479        Any getPrivateData(String modName);
   480    
   481        /*!
   482         *  ======== lookupDataSymbol ========
   483         *  Lookup symbolic names for an address
   484         *
   485         *  Uses the ISymbolTable to look up the symbols at the given address.
   486         *
   487         *  This API is separate from lookupFuncName to address paging concerns.
   488         *  Use lookupFuncName to get function names (or any symbols in PROGRAM
   489         *  memory) and use lookupDataSymbol to get data symbols (for symbols in
   490         *  DATA memory).
   491         *
   492         *  @param(addr) Address of symbols
   493         *
   494         *  @a(Returns)  Array of symbols at the requested address.
   495         */
   496        Any lookupDataSymbol(Int addr);
   497    
   498        /*!
   499         *  ======== lookupFuncName ========
   500         *  Lookup function names for an address.
   501         *
   502         *  Uses the ISymbolTable to look up the symbols at the given address.
   503         *
   504         *  This API is separate from lookupDataSymbol to address paging concerns.
   505         *  Use lookupFuncName to get function names (or any symbols in PROGRAM
   506         *  memory) and use lookupDataSymbol to get data symbols (for symbols in
   507         *  DATA memory).
   508         *
   509         *  @param(addr) Address of symbols
   510         *
   511         *  @a(Returns)  Array of symbols at the requested address.
   512         */
   513        Any lookupFuncName(Int addr);
   514    
   515        /*!
   516         *  ======== lookupType ========
   517         *  Creates a type specification from the Dwarf data. Returns null if the
   518         *  type doesn't exist.
   519         *
   520         *  @param(type)    type name
   521         */
   522        Any lookupType(String type);
   523    
   524        /*!
   525         *  ======== lookupTypeByVariable ========
   526         *  Creates a type specification from the Dwarf data for a variable.
   527         *
   528         *  @param(varName)  variable name
   529         */
   530        Any lookupTypeByVariable(String varName);
   531    
   532        /*!
   533         *  ======== lookupSymbolValue ========
   534         *  Returns the value for the given symbol.
   535         *
   536         *  Returns -1 if the symbol does not exist.
   537         *
   538         *  @param(symName) Name of symbol
   539         *
   540         *  @a(Returns) Address or value of symbol, or -1 if symbol does not exist
   541         */
   542        Int lookupSymbolValue(String symName);
   543    
   544        /*!
   545         *  ======== getSymbolValue ========
   546         *  Returns the value for the given symbol.
   547         *
   548         *  Returns -1 if the symbol does not exist.
   549         *
   550         *  @param(symName) Name of symbol
   551         *
   552         *  @a(Returns) Address or value of symbol, or -1 if symbol does not exist
   553         */
   554        Int getSymbolValue(String symName);
   555    
   556        /*!
   557         *  ======== displayError ========
   558         *
   559         */
   560        Void displayError(Any view, String fieldName, String errorMsg);
   561    
   562        /*!
   563         *  ======== ptrToHex ========
   564         *  Convert pointer representation to hex string
   565         *
   566         *  Convenience function for converting the 'at' symbol representation
   567         *  of a pointer to the form 0x80005846.
   568         */
   569        String ptrToHex(Any ptr);
   570    
   571        /*!
   572         *  ======== getShortName ========
   573         *  Convert canonical instance names to a short name
   574         *
   575         *  Parses the full canonical instance name for the shorter name given
   576         *  by the user. If there is no shorter name, then it returns an empty
   577         *  string "".
   578         *
   579         *  @param(name)  Full canonical instance name.
   580         *
   581         *  @a(Returns)  The short name, if the user specified one. Empty string
   582         *               otherwise.
   583         */
   584        String getShortName(String name);
   585    
   586        /*!
   587         *  ======== debugPrint ========
   588         *  Conditional print API
   589         *
   590         *  Output message if only debug printing is enabled. Output is sent to
   591         *  stdout as well as an ROV view.
   592         *
   593         *  To enable output, either set the environment variable `XDC_ROV_TRACE`
   594         *  or the Java property `xdc.rov.traceEnable` to `"true"`.
   595         */
   596        Void debugPrint(String msg);
   597    
   598        /*!
   599         *  ======== print ========
   600         *  Unconditional print API
   601         *
   602         *  Output is sent to stdout as well as an ROV view.
   603         */
   604        Void print(String msg);
   605    
   606        /*!
   607         *  ======== timestamp ========
   608         *  API for printing timestamp messages for performance analysis.
   609         */
   610        Void timestamp(String msg);
   611    
   612        /*!
   613         *  ======== setTimestampFunc ========
   614         *  Sets API to be used for printing timestamp.
   615         */
   616        Void setTimestampFunc(Any func);
   617    
   618        /*!
   619         *  ======== newViewStruct ========
   620         *  Creates a new instance of the view structure for the specified view.
   621         *
   622         *  This API is called for views where the view structure is not already
   623         *  passed in as an argument to the view init function.
   624         *
   625         *  It is necessary to instantiate a view structure in this way so that ROV
   626         *  is given an opportunity to initialize the status-reporting mechanisms
   627         *  of the view structure (to support, e.g., Program.displayError).
   628         */
   629        Any newViewStruct(String modName, String tabName);
   630    
   631        /*!
   632         *  ======== StatusEntry ========
   633         *  Single entry in the ROV status table.
   634         *
   635         *  ROV maintains a table of all errors, warnings, etc. encountered while
   636         *  processing views. This table is cleared on each call to clear cache
   637         *  (e.g., at each breakpoint).
   638         */
   639        metaonly struct StatusEntry {
   640            String mod;
   641            String tab;
   642            String inst;
   643            String field;
   644            String message;
   645        }
   646    
   647        /*!
   648         *  ======== getStatusTable ========
   649         *  Returns the current table of all encountered status messages.
   650         *
   651         *  This table is reset with every call to 'resetMods'. (e.g., at every
   652         *  breakpoint).
   653         */
   654        Any getStatusTable();
   655    
   656        /* -------- Used By ROV -------- */
   657    
   658        /*!
   659         *  @_nodoc
   660         *  ======== moduleNames ========
   661         *  Array of all the module names in the application.
   662         */
   663        readonly config String moduleNames[length];
   664    
   665        /*!
   666         *  @_nodoc
   667         *  ======== getModuleDesc ========
   668         *  Used to retrieve the module descriptor object for the requested module.
   669         */
   670        ROVModuleDesc *getModuleDesc(String modName);
   671    
   672        /*!
   673         *  @_nodoc
   674         *  ======== getViewType ========
   675         *  This is a helper method which returns whether a given tabName is a
   676         *  module-level view, instance-level view, or raw view.
   677         */
   678        String getViewType(String modName, String tabName);
   679    
   680        /*!
   681         *  @_nodoc
   682         *  ======== Tab ========
   683         *  The type is an enum, but we can't use an enum from another module,
   684         *  so just use the String value of the type.
   685         */
   686        metaonly struct Tab {
   687            String name;
   688            String type;
   689        }
   690    
   691        /*!
   692         *  @_nodoc
   693         *  ======== Tabs ========
   694         */
   695        typedef Tab Tabs[];
   696    
   697        /*!
   698         *  @_nodoc
   699         *  ======== getSupportedTabs ========
   700         *  Returns a string array of the tab names supported by the module.
   701         */
   702        Tabs getSupportedTabs(String modName);
   703    
   704        /*!
   705         *  @_nodoc
   706         *  ======== addCMod ========
   707         */
   708        Void addCMod(Any mod);
   709    
   710        /*!
   711         *  @_nodoc
   712         *  ======== getAbortFlag ========
   713         *  In CCS, indicates whether the abort flag has been set.
   714         */
   715        Bool getAbortFlag();
   716    
   717        /*!
   718         *  @_nodoc
   719         *  ======== resetMods ========
   720         *  Used to clear the cache of all scanned data and views. Should be called
   721         *  whenever the target data has changed.
   722         */
   723        Void resetMods();
   724    
   725        /*!
   726         *  @_nodoc
   727         *  ======== setThrowViewErrors ========
   728         *  Used to enable/disable exceptions when views detect errors
   729         */
   730        Void setThrowViewErrors(Bool flag);
   731    
   732        /*!
   733         *  @_nodoc
   734         *  ======== moduleIdToName ========
   735         *  Used by xdc.runtime.Log.decode
   736         */
   737        String moduleIdToName(Int mid);
   738    
   739        /*!
   740         *  ======== exToString ========
   741         *  Helper function for formatting exceptions into strings with filename
   742         *  and line number.
   743         */
   744        String exToString(Any e);
   745    
   746        /*!
   747         *  @_nodoc
   748         *  ========= ROVModuleDesc ========
   749         *  Structure containing all ROV-related data about an individual module.
   750         *
   751         *  An instance of this structure is created for each module in the system.
   752         *  As various Program.scan APIs are called, this structure is gradually
   753         *  filled in with data.
   754         *
   755         *  The structure's fields:
   756         *    name         The module's name
   757         *    addr         Address of the state object. Redundant with state.$addr,
   758         *                 but available so that address is present even if fetch
   759         *                 of state fails.
   760         *    loadFailed   Indicates that the 'useModule' call on this module threw
   761         *                 an exception.
   762         *    loadFailedMsg The exception message from the 'useModule' call
   763         *    cfg          Object containing all of the mod's configuration values
   764         *    state        Raw module state object
   765         *    instances    Array of ROVInstanceDesc objects representing the mod's
   766         *                 instances.
   767         *    objects      Array of ROVInstanceDesc objects representing instances
   768         *                 of the module which are embedded in other objects.
   769         *    viewMap      Contains the module-level views. The key to the map is
   770         *                 the string tab name for the view, and the value is the
   771         *                 an instance of Module_View.
   772         *    errorMap     For each view, contains any error that was encountered
   773         *                 in processing the view outside of what was reported by
   774         *                 the module. For example, an unhandled exception from the
   775         *                 view code would be stored here.
   776         */
   777        metaonly struct ROVModuleDesc {
   778            String name;
   779            Any addr;
   780            Bool loadFailed;
   781            String loadFailedMsg;
   782            Any cfg;
   783            Any useMod;
   784            Any viewInfo;
   785            Any state;
   786    
   787            Any staticInstAddrs[];
   788            Any dynInstAddrs[];
   789            Bool readAllAddrs;
   790    
   791            ROVInstanceDesc *instances[];
   792            Any viewMap[string];
   793            String errorMap[string];
   794    
   795            String error; // Deprecated, replaced by errorMap
   796    
   797            Any instMap;
   798    
   799            Any userPrivate;
   800        };
   801    
   802        /*!
   803         *  @_nodoc
   804         *  ========= ROVInstanceDesc ========
   805         *  Structure containing all ROV-related data about an individual instance.
   806         *
   807         *  The ROVInstanceDesc objects are stored in the 'instances' array of the
   808         *  respective module's ROVModuleDesc structure.
   809         *
   810         *  The structure's fields:
   811         *    state     Raw instance state object
   812         *    addr      Address of the state object. Redundant with state.$addr,
   813         *              but available so that address is present even if fetch of
   814         *              statefails.
   815         *    viewMap   Contains the instance-level views. The key to the map is
   816         *              the string tab name for the view, and the value is the
   817         *              an instance of Instance_View.
   818         *    errorMap  For each view, contains any error that was encountered
   819         *              in processing the view outside of what was reported by
   820         *              the module. For example, an unhandled exception from the
   821         *              view code would be stored here.
   822         */
   823        metaonly struct ROVInstanceDesc {
   824            Any    state;
   825            Any    addr;
   826            Any    viewMap[string];
   827            String errorMap[string];
   828    
   829            String error; // Deprecated, replaced by errorMap
   830        };
   831    
   832    }
   833    /*
   834     *  @(#) xdc.rov; 1, 0, 1,0; 2-9-2020 18:49:04; /db/ztree/library/trees/xdc/xdc-I08/src/packages/
   835     */
   836