16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * ***** BEGIN LICENSE BLOCK *****
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Version: MPL 1.1/GPL 2.0/LGPL 2.1
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public License Version
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 1.1 (the "License"); you may not use this file except in compliance with
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * the License. You may obtain a copy of the License at
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * http://www.mozilla.org/MPL/
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Software distributed under the License is distributed on an "AS IS" basis,
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * for the specific language governing rights and limitations under the
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * License.
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * The Original Code is msmap.h code, released
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Oct 3, 2002.
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * The Initial Developer of the Original Code is
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Netscape Communications Corporation.
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Portions created by the Initial Developer are Copyright (C) 2002
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * the Initial Developer. All Rights Reserved.
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Contributor(s):
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *   Garrett Arch Blythe, 03-October-2002
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Alternatively, the contents of this file may be used under the terms of
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * either the GNU General Public License Version 2 or later (the "GPL"), or
29 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30 * in which case the provisions of the GPL or the LGPL are applicable instead
31 * of those above. If you wish to allow use of your version of this file only
32 * under the terms of either the GPL or the LGPL, and not to allow others to
33 * use your version of this file under the terms of the MPL, indicate your
34 * decision by deleting the provisions above and replace them with the notice
35 * and other provisions required by the GPL or the LGPL. If you do not delete
36 * the provisions above, a recipient may use your version of this file under
37 * the terms of any one of the MPL, the GPL or the LGPL.
38 *
39 * ***** END LICENSE BLOCK ***** */
40
41#if !defined __msmap_H
42#define __msmap_H
43
44
45#if defined(__cplusplus)
46extern "C" {
47#endif
48#if 0
49}
50#endif
51
52
53/*
54**  Used to numerically represent addresses.
55*/
56typedef unsigned long address;
57
58
59typedef enum __enum_MSMap_SymbolScope
60/*
61**  Symbol scope.
62*/
63{
64    PUBLIC,
65    STATIC,
66    UNDEFINED
67}
68MSMap_SymbolScope;
69
70
71typedef enum __enum_MSMap_SegmentClass
72/*
73**  Segment class.
74*/
75{
76    CODE,
77    DATA
78}
79MSMap_SegmentClass;
80
81
82typedef struct __struct_MSMap_Segment
83/*
84**  Information about a segment.
85*/
86{
87    address mPrefix;
88    address mOffset;
89    address mLength;
90    address mUsed;
91    char* mSegment;
92    MSMap_SegmentClass mClass;
93}
94MSMap_Segment;
95
96
97typedef struct __struct_MSMap_Symbol
98/*
99**  Information about a symbol.
100*/
101{
102    address mPrefix;
103    address mOffset;
104    char* mSymbol;
105    address mRVABase;
106    char* mObject;
107    MSMap_SymbolScope mScope;
108    unsigned mSymDBSize;
109    MSMap_Segment* mSection;
110}
111MSMap_Symbol;
112
113
114typedef struct __struct_MSMap_Module
115/*
116**  Top level container of the map data.
117*/
118{
119    char* mModule;
120    time_t mTimestamp;
121    address mPreferredLoadAddress;
122    MSMap_Segment* mSegments;
123    unsigned mSegmentCount;
124    unsigned mSegmentCapacity;
125    address mEntryPrefix;
126    address mEntryOffset;
127    MSMap_Symbol* mSymbols;
128    unsigned mSymbolCount;
129    unsigned mSymbolCapacity;
130}
131MSMap_Module;
132
133
134/*
135**  How much to grow our arrays by.
136*/
137#define MSMAP_SEGMENT_GROWBY 0x10
138#define MSMAP_SYMBOL_GROWBY  0x100
139
140
141#if 0
142{
143#endif
144#if defined(__cplusplus)
145} /* extern "C" */
146#endif
147
148
149#endif /* __msmap_H */
150