diff options
Diffstat (limited to 'plugins/itanium/component-int.h')
-rw-r--r-- | plugins/itanium/component-int.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/plugins/itanium/component-int.h b/plugins/itanium/component-int.h new file mode 100644 index 0000000..fb8c423 --- /dev/null +++ b/plugins/itanium/component-int.h @@ -0,0 +1,137 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * component-int.h - prototypes internes pour la description des composants Itanium + * + * Copyright (C) 2013-2017 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * Chrysalide is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Chrysalide is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _PLUGINS_ITANIUM_COMPONENT_INT_H +#define _PLUGINS_ITANIUM_COMPONENT_INT_H + + +#include "component.h" + + + +/* Composant extrait de l'encodage */ +struct _itanium_component +{ + ItaniumComponentType type; /* Type de composant */ + + unsigned int refcount; /* Compteur de références */ + + fnv64_t hash; /* Empreinte en cache */ + + union + { + /* ICT_NAME */ + struct + { + const char *str; + size_t len; + + } s_name; + + /* ICT_OPERATOR_NAME */ + struct + { + ItaniumOperatorType otype; /* Sélection dans l'union */ + + union + { + itanium_operator_info info; /* Opérateur simple */ + itanium_component *trans; /* Type transtypé */ + + }; + + } operator; + + /* ICT_NON_VIRTUAL_OFFSET */ + /* ICT_VIRTUAL_OFFSET */ + ssize_t offset; /* Décalage de fonction */ + + /* ICT_STD_SUBST */ + /* ICT_TYPE */ + GDataType *dtype; /* Type instancié */ + + /* ICT_QUALIFIED_TYPE */ + struct + { + itanium_component *sub; /* Sous-élément */ + TypeQualifier qualifier; /* Propriétés supplémentaires */ + + } qualified; + + /* ICT_FUNCTION_TYPE */ + struct + { + bool extern_c; /* Nature de la fonction */ + itanium_component *args; /* Liste des arguments */ + + } function; + + /* ICT_ARRAY */ + struct + { + bool numbered_dim; /* Dimension numérique */ + union + { + ssize_t dim_number; /* Taille du tableau */ + itanium_component *dim_expr;/* La même, en expression */ + }; + + itanium_component *atype; /* Type du tableau */ + + } array; + + /* ICT_POINTER_TO_MEMBER */ + struct + { + itanium_component *class; /* Classe d'appatenance */ + itanium_component *member; /* Membre représenté */ + + } pmember; + + /* ICT_* */ + struct + { + itanium_component *left; /* Elément premier */ + itanium_component *right; /* Elément second */ + + } binary; + + /* ICT_* */ + struct + { + itanium_component *first; /* Elément premier */ + itanium_component *second; /* Elément second */ + itanium_component *third; /* Elément troisième */ + + } ternary; + + /* ICT_* */ + itanium_component *unary; /* Sous-élément */ + + }; + +}; + + + +#endif /* _PLUGINS_ITANIUM_COMPONENT_INT_H */ |