1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-06 11:50:51 -08:00

Adding node type, as a tree node containing an address range. this will eventually become the base of segments.

Copied from Perforce
 Change: 190489
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Brooksby 2016-03-28 11:39:52 +01:00
parent e887f85024
commit 1678d1642e
6 changed files with 165 additions and 0 deletions

View file

@ -187,6 +187,7 @@ MPMCOMMON = \
mpm.c \
mpsi.c \
nailboard.c \
node.c \
policy.c \
pool.c \
poolabs.c \

View file

@ -147,6 +147,7 @@ MPMCOMMON=\
[mpm] \
[mpsi] \
[nailboard] \
[node] \
[policy] \
[pool] \
[poolabs] \

View file

@ -240,6 +240,28 @@ typedef struct SegClassStruct {
} SegClassStruct;
/* RangeStruct -- address range
*
* See design.mps.range, range.h, range.c.
*/
typedef struct RangeStruct {
Addr base;
Addr limit;
} RangeStruct;
/* NodeStruct -- address range in a tree
*
* See node.h, node.c.
*/
typedef struct NodeStruct {
TreeStruct treeStruct;
RangeStruct rangeStruct;
} NodeStruct;
/* SegStruct -- segment structure
*
* .seg: Segments are the basic units of protection and tracer activity

View file

@ -109,6 +109,7 @@ typedef struct AllocPatternStruct *AllocPattern;
typedef struct AllocFrameStruct *AllocFrame; /* <design/alloc-frame/> */
typedef struct StackContextStruct *StackContext;
typedef struct RangeStruct *Range; /* <design/range/> */
typedef struct NodeStruct *Node;
typedef struct LandStruct *Land; /* <design/land/> */
typedef struct LandClassStruct *LandClass; /* <design/land/> */
typedef unsigned FindDelete; /* <design/land/> */

78
mps/code/node.c Normal file
View file

@ -0,0 +1,78 @@
/* node.c -- binary trees of address ranges
*
* $Id$
* Copyright (C) 2016 Ravenbrook Limited. See end of file for license.
*/
#include "node.h"
#include "tree.h"
#include "range.h"
#include "mpm.h"
void NodeInit(Node node, Addr base, Addr limit)
{
AVER(node != NULL);
TreeInit(NodeTree(node));
RangeInit(NodeRange(node), base, limit);
AVERT(Node, node);
}
Bool NodeCheck(Node node)
{
CHECKL(node != NULL);
CHECKD_NOSIG(Tree, NodeTree(node));
CHECKD_NOSIG(Range, NodeRange(node));
return TRUE;
}
void NodeFinish(Node node)
{
AVERT(Node, node);
TreeFinish(NodeTree(node));
RangeFinish(NodeRange(node));
}
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Redistributions in any form must be accompanied by information on how
* to obtain complete source code for this software and any accompanying
* software that uses this software. The source code must either be
* included in the distribution or be available for no more than the cost
* of distribution plus a nominal fee, and must be freely redistributable
* under reasonable conditions. For an executable file, complete source
* code means the source code for all modules it contains. It does not
* include source code for modules or files that typically accompany the
* major components of the operating system on which the executable file
* runs.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

62
mps/code/node.h Normal file
View file

@ -0,0 +1,62 @@
/* node.c -- binary trees of address ranges
*
* $Id$
* Copyright (C) 2016 Ravenbrook Limited. See end of file for license.
*/
#ifndef node_h
#define node_h
#include "mpmtypes.h"
#define NodeTree(node) (&(node)->treeStruct)
#define NodeRange(node) (&(node)->rangeStruct)
#define NodeOfTree(tree) PARENT(NodeStruct, treeStruct, tree)
#define NodeOfRange(range) PARENT(NodeStruct, rangeStruct, range)
extern void NodeInit(Node node, Addr base, Addr limit);
extern Bool NodeCheck(Node node);
extern void NodeFinish(Node node);
#endif /* node_h */
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
* All rights reserved. This is an open source license. Contact
* Ravenbrook for commercial licensing options.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Redistributions in any form must be accompanied by information on how
* to obtain complete source code for this software and any accompanying
* software that uses this software. The source code must either be
* included in the distribution or be available for no more than the cost
* of distribution plus a nominal fee, and must be freely redistributable
* under reasonable conditions. For an executable file, complete source
* code means the source code for all modules it contains. It does not
* include source code for modules or files that typically accompany the
* major components of the operating system on which the executable file
* runs.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/