This file is indexed.

/usr/include/psm.h is in libion-dev 3.2.1+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
/*
 	psm.h:		definitions supporting personal space
			management.  See the psm man page for details.

	Author: Scott Burleigh, JPL

	Modification History:
	Date      Who   What
	11-26-02  SCB   Added "trace" functions.

	Copyright (c) 2001, California Institute of Technology.
	ALL RIGHTS RESERVED.  U.S. Government Sponsorship
	acknowledged.
 									*/
#ifndef _PSM_H_
#define _PSM_H_

#include "platform.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
	char		partitionName[32];
	unsigned long	partitionSize;
	unsigned long	smallPoolSize;
	unsigned long	smallPoolFreeBlockCount[SMALL_SIZES];
	unsigned long	smallPoolFree;
	unsigned long	smallPoolAllocated;
	unsigned long	largePoolSize;
	unsigned long	largePoolFreeBlockCount[LARGE_ORDERS];
	unsigned long	largePoolFree;
	unsigned long	largePoolAllocated;
	unsigned long	unusedSize;
} PsmUsageSummary;

typedef struct psm_str		/*	Local view of managed memory.	*/
{
	char		*space;		/*	Local pointer.		*/
	long		freeNeeded;	/*	Free PsmView?  Boolean.	*/
	struct psm_str	*trace;		/*	For sptrace.		*/
	long		traceArea[3];	/*	psm_str for sptrace.	*/
} PsmView, *PsmPartition;

typedef enum { Okay, Redundant, Refused } PsmMgtOutcome;
typedef unsigned long	PsmAddress;

extern int		psm_manage(char *, unsigned long, char *,
					PsmPartition *psmp,
					PsmMgtOutcome *outcome);
			/*	Arguments are:
					pointer to start of the
						memory to manage
					length of memory area (bytes)
					name of partition (max 31
						characters)
					pointer to variable in which
						psm space management
						handle will be returned
					pointer to variable in which
						outcome will be returned

		 		A new psm space management structure
				will be dynamically allocated (and its
				address returned as the space management
				handle) unless *psmp is non-NULL, i.e.,
				*psmp is already a handle pointing to a
				previously allocated psm space management
				structure.		 		*/

extern char		*psm_name(PsmPartition);
			/*	Returns name of partition.		*/

extern char		*psm_space(PsmPartition);
			/*	Returns pointer to the start of the
				memory region managed by this PSM
				partition.  This function is provided
				to enable the application to do an
				operating-system release (such as
				free()) of this memory when the managed
				partition is no longer needed.  NOTE(!)
				that calling psm_erase() or psm_unmanage()
				[or any other PSM function, for that
				matter] after releasing that space is
				virtually guaranteed to result in a
				segmentation fault or other seriously
				bad behavior.				*/

extern void		*psp(PsmPartition, PsmAddress);
			/*	Argument is an offset within the
				partition.  Returns the conversion of
				that offset into an absolute pointer.	*/

extern PsmAddress	psa(PsmPartition, void *);
			/*	Argument is an absolute pointer.
				Returns the conversion of that pointer
				into an offset within the partition.	*/

extern void		psm_panic(PsmPartition);
			/*	Forces standard memory allocation
				algorithm to hunt laboriously for
				free blocks in pools that may not
				contain any.				*/

extern void		psm_relax(PsmPartition);
			/*	Reverses psm_panic.  Lets standard
				memory allocation algorithm return NULL
				when no free block can be found easily.	*/

#define psm_malloc(partition, size) \
Psm_malloc(__FILE__, __LINE__, partition, size)

extern PsmAddress	Psm_malloc(char *, int, PsmPartition, unsigned long);
			/*	Argument is size of block to allocate;
				maximum size is 1/2 of the total
				address space (i.e., 2G for a 32-bit
				machine).  Returns zero if no free
				block could be found.  Block returned
				is aligned on doubleword boundary.	*/

#define psm_zalloc(partition, size) \
Psm_zalloc(__FILE__, __LINE__, partition, size)

extern PsmAddress	Psm_zalloc(char *, int, PsmPartition, unsigned long);
			/*	Argument is size of block to allocate;
				maximum size is 64 words (i.e., 256 for
				a 32-bit machine).  Allocation is
				performed by an especially speedy
				algorithm and minimum space is consumed
				in memory management overhead.  Returns
				0 if no free block could be found.
				Block returned is aligned on word
				boundary.				*/

#define psm_free(partition, address) \
Psm_free(__FILE__, __LINE__, partition, address)

extern void		Psm_free(char *, int, PsmPartition, PsmAddress);
			/*	Argument is a block allocated by
				psm_malloc or psm_zalloc.		*/

extern int		psm_set_root(PsmPartition, PsmAddress);
			/*	Sets a pointer at a fixed location in
				the partition to the indicated value,
				so that this value can be retrieved if
				access to the partition is lost and
				then re-acquired (typically for
				partitions allocated in shared or
				static RAM).  The argument -- the
				"root object" -- is normally a pointer
				to a list (or tree) of the lists or
				trees that populate the partition.
	 			Returns 0 on success, -1 on any failure
				(e.g., the partition already has some
				other root object).			 */

extern PsmAddress	psm_get_root(PsmPartition);
			/*	Retrieves the pointer value set by
				psm_set_root().				*/

extern void		psm_erase_root(PsmPartition);
			/*	Detaches the partition from its current
			 	"root object".				*/

#define psm_add_catlg(partition) \
Psm_add_catlg(__FILE__, __LINE__, partition)

extern int		Psm_add_catlg(char *, int, PsmPartition);
			/*	Allocates space for an object catalog
			 	in the indicated partition, establishes
			 	the new catalog as the partition's
			 	root object.  Returns 0 on success, -1
			 	on any failure (e.g., the partition
			 	already has some other root object).	*/

#define psm_catlg(partition, name, address) \
Psm_catlg(__FILE__, __LINE__, partition, name, address)

extern int		Psm_catlg(char *, int, PsmPartition, char *objName,
					PsmAddress objLocation);
			/*	Inserts an entry for the indicated
			 	object into the catalog that is the
				root object for this partition.  The
				length of objName cannot exceed 32
				bytes, and objName must be unique in
				the catalog.  Returns 0 on success, -1
				on any failure.				*/

#define psm_uncatlg(partition, name) \
Psm_uncatlg(__FILE__, __LINE__, partition, name)

extern int		Psm_uncatlg(char *, int, PsmPartition, char *objName);
			/*	Removes the entry for the indicated
			 	object from the catalog that is the
				root object for this partition, if it
				exists.  Returns 0 on success, -1 on
				any failure.				*/

extern int		psm_locate(PsmPartition, char *objName,
					PsmAddress *objLocation,
					PsmAddress *entryElt);
			/*	Places in "objLocation" the address
			 	associated with the indicated object
				name in the catalog that is the root
				object for this partition and places
				in "entryElt" the address of the list
				element that points to this catalog
				entry; if name is not found in catalog,
				sets entryElt to zero.  Returns 0 on
				success, -1 on any failure.		*/

extern void		psm_usage(PsmPartition, PsmUsageSummary *);
			/*	Loads PsmUsageSummary structure with
				snapshot of partition's usage status.	*/

extern void		psm_report(PsmUsageSummary *);
			/*	Sends to stdout a snapshot of the
				partition's usage status.		*/

extern int		psm_start_trace(PsmPartition, long, char *);
                        /*	Begins an episode of psm space usage
				tracing.  The int argument specifies
				the amount of shared memory to use
				for the trace operations; this memory
				will be dynamically allocated unless
				the (char *) region pointer argument
				is non-NULL.  Returns 0 on success, -1
				on any error.				*/

extern void		psm_print_trace(PsmPartition, int);
                        /*	Prints cumulative trace report and
				usage report, using writeMemo.  If
				'verbose' int argument is zero, only
				exceptions are reported; otherwise,
				a log of all activity is printed.	*/

extern void		psm_clear_trace(PsmPartition);
                        /*	Deletes closed trace log events.	*/

extern void		psm_stop_trace(PsmPartition);
                        /*	Ends the current episode of psm space
				management tracing and releases
				the shared memory allocated to the
				trace operations.			*/

extern void		psm_unmanage(PsmPartition);
			/*	Terminates psm management of the
				space in the partition and destroys
				this psm management handle to that
				space.					*/

extern void		psm_erase(PsmPartition);
			/*	Discards all information in the space
				managed by this psm management handle
				(preventing re-management of that
				space), in addition to terminating psm
				management of that space and destroying
				the psm management handle.		*/
#ifdef __cplusplus
}
#endif

#endif