⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 params.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
字号:
/*  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. *  * This software may be freely used, copied, modified, and distributed * provided that the above copyright notice is preserved in all copies of the * software. *//* -*-C-*- * * $Revision: 1.3 $ *     $Date: 1999/11/01 13:31:39 $ * * *   Project: ANGEL * *     Title: Parameter negotiation utility functions */#include "params.h"#include "angel_endian.h"#include "logging.h"/* * Function: Angel_FindParam *  Purpose: find the value of a given parameter from a config. * * see params.h for details */bool Angel_FindParam( ADP_Parameter          type,                      const ParameterConfig *config,                      unsigned int          *value ){    unsigned int i;    for ( i = 0; i < config->num_parameters; ++i )       if ( config->param[i].type == type )       {           *value = config->param[i].value;           return TRUE;       }    return FALSE;}#if !defined(TARGET) || !defined(MINIMAL_ANGEL) || MINIMAL_ANGEL == 0ParameterList *Angel_FindParamList( const ParameterOptions *options,                                    ADP_Parameter           type ){    unsigned int i;    for ( i = 0; i < options->num_param_lists; ++i )       if ( options->param_list[i].type == type )          return &options->param_list[i];    return NULL;}#if defined(TARGET) || defined(TEST_PARAMS)/* * Function: Angel_MatchParams *  Purpose: find a configuration from the requested options which is *           the best match from the supported options. * * see params.h for details */const ParameterConfig *Angel_MatchParams( const ParameterOptions *requested,                                          const ParameterOptions *supported ){    static Parameter        chosen_params[AP_NUM_PARAMS];    static ParameterConfig  chosen_config = {        AP_NUM_PARAMS,        chosen_params    };    unsigned int i;    ASSERT( requested != NULL, "requested is NULL" );    ASSERT( requested != NULL, "requested is NULL" );    ASSERT( supported->num_param_lists <= AP_NUM_PARAMS, "supp_num too big" );    if ( requested->num_param_lists > supported->num_param_lists )    {        WARN( "req_num exceeds supp_num" );        return NULL;    }    for ( i = 0; i < requested->num_param_lists; ++i )    {        bool           match;        unsigned int   j;        const ParameterList *req_list = &requested->param_list[i];        ADP_Parameter        req_type = req_list->type;        const ParameterList *sup_list = Angel_FindParamList(                                            supported, req_type );        if ( sup_list == NULL )        {#ifdef ASSERTIONS_ENABLED            __rt_warning( "option %x not supported\n", req_type );#endif            return NULL;        }        for ( j = 0, match = FALSE;              (j < req_list->num_options) && !match;              ++j            )        {            unsigned int k;            for ( k = 0;                  (k < sup_list->num_options) && !match;                  ++k                )            {                if ( req_list->option[j] == sup_list->option[k] )                {#ifdef DEBUG                    __rt_info( "chose value %d for option %x\n",                               req_list->option[j], req_type );#endif                    match = TRUE;                    chosen_config.param[i].type = req_type;                    chosen_config.param[i].value = req_list->option[j];                }            }        }        if ( !match )        {#ifdef ASSERTIONS_ENABLED            __rt_warning( "no match found for option %x\n", req_type );#endif            return NULL;        }    }    chosen_config.num_parameters = i;    INFO( "match succeeded" );    return &chosen_config;}#endif /* defined(TARGET) || defined(TEST_PARAMS) */#if !defined(TARGET) || defined(TEST_PARAMS)/* * Function: Angel_StoreParam *  Purpose: store the value of a given parameter to a config. * * see params.h for details */bool Angel_StoreParam( ParameterConfig *config,                       ADP_Parameter    type,                       unsigned int     value ){    unsigned int i;    for ( i = 0; i < config->num_parameters; ++i )       if ( config->param[i].type == type )       {           config->param[i].value = value;           return TRUE;       }    return FALSE;}#endif /* !defined(TARGET) || defined(TEST_PARAMS) */#if defined(TARGET) || defined(LINK_RECOVERY) || defined(TEST_PARAMS)/* * Function: Angel_BuildParamConfigMessage *  Purpose: write a parameter config to a buffer in ADP format. * * see params.h for details */unsigned int Angel_BuildParamConfigMessage( unsigned char         *buffer,                                            const ParameterConfig *config ){    unsigned char *start = buffer;    unsigned int i;    PUT32LE( buffer, config->num_parameters );    buffer += sizeof( word );    for ( i = 0; i < config->num_parameters; ++i )    {        PUT32LE( buffer, config->param[i].type );        buffer += sizeof( word );        PUT32LE( buffer, config->param[i].value );        buffer += sizeof( word );    }    return (buffer - start);}#endif /* defined(TARGET) || defined(LINK_RECOVERY) || defined(TEST_PARAMS) */#if !defined(TARGET) || defined(TEST_PARAMS)/* * Function: Angel_BuildParamOptionsMessage *  Purpose: write a parameter Options to a buffer in ADP format. * * see params.h for details */unsigned int Angel_BuildParamOptionsMessage( unsigned char          *buffer,                                             const ParameterOptions *options ){    unsigned char *start = buffer;    unsigned int i, j;    PUT32LE( buffer, options->num_param_lists );    buffer += sizeof( word );    for ( i = 0; i < options->num_param_lists; ++i )    {        PUT32LE( buffer, options->param_list[i].type );        buffer += sizeof( word );        PUT32LE( buffer, options->param_list[i].num_options );        buffer += sizeof( word );        for ( j = 0; j < options->param_list[i].num_options; ++j )        {            PUT32LE( buffer, options->param_list[i].option[j] );            buffer += sizeof( word );        }    }    return (buffer - start);}#endif /* !defined(TARGET) || defined(TEST_PARAMS) */#if !defined(TARGET) || defined(LINK_RECOVERY) || defined(TEST_PARAMS)/* * Function: Angel_ReadParamConfigMessage *  Purpose: read a parameter config from a buffer where it is in ADP format. * * see params.h for details */bool Angel_ReadParamConfigMessage( const unsigned char *buffer,                                   ParameterConfig     *config ){    unsigned int word;    unsigned int i;    word = GET32LE( buffer );    buffer += sizeof( word );    if ( word > config->num_parameters )    {        WARN( "not enough space" );        return FALSE;    }    config->num_parameters = word;    for ( i = 0; i < config->num_parameters; ++i )    {        config->param[i].type = (ADP_Parameter)GET32LE( buffer );        buffer += sizeof( word );        config->param[i].value = GET32LE( buffer );        buffer += sizeof( word );    }    return TRUE;}#endif /* !defined(TARGET) || defined(LINK_RECOVERY) || defined(TEST_PARAMS) */#if defined(TARGET) || defined(TEST_PARAMS)/* * Function: Angel_ReadParamOptionsMessage *  Purpose: read a parameter options block from a buffer *             where it is in ADP format. * * see params.h for details */bool Angel_ReadParamOptionsMessage( const unsigned char *buffer,                                    ParameterOptions    *options ){    unsigned int word;    unsigned int i, j;    word = GET32LE( buffer );    buffer += sizeof( word );    if ( word > options->num_param_lists )    {        WARN( "not enough space" );        return FALSE;    }    options->num_param_lists = word;    for ( i = 0; i < options->num_param_lists; ++i )    {        ParameterList *list = &options->param_list[i];        list->type = (ADP_Parameter)GET32LE( buffer );        buffer += sizeof( word );        word = GET32LE( buffer );        buffer += sizeof( word );        if ( word > list->num_options )        {            WARN( "not enough list space" );            return FALSE;        }        list->num_options = word;        for ( j = 0; j < list->num_options; ++j )        {            list->option[j] = GET32LE( buffer );            buffer += sizeof( word );        }    }    return TRUE;}#endif /* defined(TARGET) || defined(TEST_PARAMS) */#endif /* !define(TARGET) || !defined(MINIMAL_ANGEL) || MINIMAL_ANGEL == 0 *//* EOF params.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -