@@ -44,16 +44,16 @@ public static NmtMemoryRegion addSorted(NmtMemoryRegion listHead, NmtMemoryRegio
4444 NmtMemoryRegion prev = WordFactory .nullPointer ();
4545 while (current .isNonNull ()) {
4646 if (newRegion .getBaseAddr ().rawValue () < current .getBaseAddr ().rawValue ()) {
47- // if (NmtMemoryRegionAccess.isOverlapping(newRegion, current)){
48- // fail42(newRegion, current);
49- // }
47+ if (NmtMemoryRegionAccess .isOverlapping (newRegion , current )){
48+ fail42 (newRegion , current );
49+ }
5050 assert !NmtMemoryRegionAccess .isOverlapping (newRegion , current );
5151 newRegion .setNext (current );
5252 if (prev .isNonNull ()) {
5353 // New region is in middle of the list
54- // if (NmtMemoryRegionAccess.isOverlapping(newRegion, prev)){
55- // fail42(newRegion, prev);
56- // }
54+ if (NmtMemoryRegionAccess .isOverlapping (newRegion , prev )){
55+ fail42 (newRegion , prev );
56+ }
5757 assert !NmtMemoryRegionAccess .isOverlapping (newRegion , prev );
5858 prev .setNext (newRegion );
5959 return listHead ;
@@ -68,9 +68,9 @@ public static NmtMemoryRegion addSorted(NmtMemoryRegion listHead, NmtMemoryRegio
6868 // New region is the new tail of the list
6969 if (prev .isNonNull ()) {
7070 assert !NmtMemoryRegionAccess .isEqual (newRegion , prev );
71- // if (NmtMemoryRegionAccess.isOverlapping(newRegion, prev)){
72- // fail42(newRegion, prev);
73- // }
71+ if (NmtMemoryRegionAccess .isOverlapping (newRegion , prev )){
72+ fail42 (newRegion , prev );
73+ }
7474 assert !NmtMemoryRegionAccess .isOverlapping (newRegion , prev );
7575 prev .setNext (newRegion );
7676 return listHead ;
@@ -80,50 +80,61 @@ public static NmtMemoryRegion addSorted(NmtMemoryRegion listHead, NmtMemoryRegio
8080 return newRegion ;
8181 }
8282
83- // @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
84- // private static void fail42(NmtMemoryRegion newRegion, NmtMemoryRegion prev){
85- // long size = NmtMemoryRegionAccess.getOverlapSize(newRegion, prev);
86- // int flag = prev.getCategory();
87- // int flagMult = flag*flag;
88- // long mult = size*size;
89- // assert mult <0;
90- // assert flag<100;
91- // }
83+ @ Uninterruptible (reason = "Called from uninterruptible code." , mayBeInlined = true )
84+ private static void fail42 (NmtMemoryRegion newRegion , NmtMemoryRegion prev ){
85+ long size = NmtMemoryRegionAccess .getOverlapSize (newRegion , prev );
86+ int flag = prev .getCategory ();
87+ int flagMult = flag *flag ;
88+ long mult = size *size ;
89+ assert mult <0 ;
90+ assert flag <100 ;
91+ }
9292
9393 /** Assumes list is sorted (since it relies on findPrecedingRegion). Returns new head. */
9494 @ Uninterruptible (reason = "Called from uninterruptible code." , mayBeInlined = true )
95- public static NmtMemoryRegion remove (NmtMemoryRegion listHead , NmtMemoryRegion targetRegionOnStack ) {
95+ public static NmtMemoryRegion remove (NmtMemoryRegion listHead , NmtMemoryRegion targetRegion ) {
9696 assert listHead .isNonNull (); // There must be at least one node to remove
97- NmtMemoryRegion prev = findPrecedingRegion (listHead , targetRegionOnStack );
97+ NmtMemoryRegion prev = findPrecedingRegion (listHead , targetRegion );
9898
9999 // Are we removing the head?
100100 if (prev .isNull ()) {
101- assert NmtMemoryRegionAccess .isEqual (listHead , targetRegionOnStack );
101+ assert NmtMemoryRegionAccess .isEqual (listHead , targetRegion );
102102 NmtMemoryRegion newHead = listHead .getNext ();
103103 NullableNativeMemory .free (listHead );
104104 return newHead ;
105105 }
106106
107107 // We are removing a node that is not head.
108108 NmtMemoryRegion current = prev .getNext ();
109- // assert NmtMemoryRegionAccess.isEqual(current, targetRegionOnStack );
110- assert current .getBaseAddr () == targetRegionOnStack .getBaseAddr ();
111- assert !NmtMemoryRegionAccess .isEqual (listHead , targetRegionOnStack );
109+ // assert NmtMemoryRegionAccess.isEqual(current, targetRegion );
110+ assert current .getBaseAddr () == targetRegion .getBaseAddr ();
111+ assert !NmtMemoryRegionAccess .isEqual (listHead , targetRegion );
112112 prev .setNext (current .getNext ());
113113 NullableNativeMemory .free (current );
114114 return listHead ;
115115 }
116116
117117 /**
118- * Finds the region allocated on the heap that contains or matches the target region. Or nullPtr
119- * if unsuccessful. This is useful for searching for a reserved region that a committed region
120- * may belong to.
118+ * Finds the region that contains or matches the target region. Or nullPtr
119+ * if unsuccessful.
121120 */
122121 @ Uninterruptible (reason = "Called from uninterruptible code." , mayBeInlined = true )
123- static NmtMemoryRegion findContainingRegion (NmtMemoryRegion listHead , NmtMemoryRegion targetRegionOnStack ) {
122+ static NmtMemoryRegion findContainingRegion (NmtMemoryRegion listHead , NmtMemoryRegion targetRegion ) {
123+ NmtMemoryRegion current = listHead ;
124+ while (current .isNonNull ()) {
125+ if (NmtMemoryRegionAccess .contains (current , targetRegion )) {
126+ return current ;
127+ }
128+ current = current .getNext ();
129+ }
130+ return WordFactory .nullPointer ();
131+ }
132+
133+ @ Uninterruptible (reason = "Called from uninterruptible code." , mayBeInlined = true )
134+ static NmtMemoryRegion findRegionMatchingBase (NmtMemoryRegion listHead , org .graalvm .word .PointerBase baseAddr ) {
124135 NmtMemoryRegion current = listHead ;
125136 while (current .isNonNull ()) {
126- if (NmtMemoryRegionAccess . contains ( current , targetRegionOnStack )) {
137+ if (current . getBaseAddr (). rawValue () == baseAddr . rawValue ( )) {
127138 return current ;
128139 }
129140 current = current .getNext ();
@@ -133,12 +144,12 @@ static NmtMemoryRegion findContainingRegion(NmtMemoryRegion listHead, NmtMemoryR
133144
134145 /** Assumes list is sorted. */
135146 @ Uninterruptible (reason = "Called from uninterruptible code." , mayBeInlined = true )
136- static NmtMemoryRegion findPrecedingRegion (NmtMemoryRegion listHead , NmtMemoryRegion targetRegionOnStack ) {
147+ static NmtMemoryRegion findPrecedingRegion (NmtMemoryRegion listHead , NmtMemoryRegion targetRegion ) {
137148 NmtMemoryRegion current = listHead ;
138149 NmtMemoryRegion preceding = WordFactory .nullPointer ();
139150 while (current .isNonNull ()) {
140151 long currentEnd = current .getBaseAddr ().rawValue () + current .getSize ();
141- if (currentEnd > targetRegionOnStack .getBaseAddr ().rawValue ()) { // *** should this be
152+ if (currentEnd > targetRegion .getBaseAddr ().rawValue ()) { // *** should this be
142153 // >=??? [NO. Since end
143154 // is non-inclusive.
144155 // draw it out. This
0 commit comments