Commit 949b03ad authored by Robert Sprowson's avatar Robert Sprowson Committed by ROOL

Special case extension of aligned RMA claims

During ModHandReason_ClaimAligned care is taken to start on a multiple of 32 and end on a multiple of 32 + 16 (such that the next block in the heap would be at +20 same as plain ModHandReason_Claim would do). However, during a ModHandReason_ExtendBlock there's a possibility that those criteria can't be retained, due to having to move to a larger gap elsewhere, leaving the end at an inconvenient +36.
Similar allocation functions in other OS' don't guarantee to return an extended block with the same alignment, so take the position that for extends we always allocate a fresh block, copy the contents, and free the original. Shrinks are left in place.
Tested with a random allocator which juggles 16 aligned allocations 50,000 times.

Version 6.36. Tagged as 'Kernel-6_36'
parent 0e0d10cc
......@@ -9,12 +9,12 @@
GBLS Module_ApplicationDate
GBLS Module_HelpVersion
GBLS Module_ComponentName
Module_MajorVersion SETS "6.35"
Module_Version SETA 635
Module_MajorVersion SETS "6.36"
Module_Version SETA 636
Module_MinorVersion SETS ""
Module_Date SETS "02 Mar 2020"
Module_ApplicationDate SETS "02-Mar-20"
Module_Date SETS "18 Mar 2020"
Module_ApplicationDate SETS "18-Mar-20"
Module_ComponentName SETS "Kernel"
Module_FullVersion SETS "6.35"
Module_HelpVersion SETS "6.35 (02 Mar 2020)"
Module_FullVersion SETS "6.36"
Module_HelpVersion SETS "6.36 (18 Mar 2020)"
END
/* (6.35)
/* (6.36)
*
* This file is automatically maintained by srccommit, do not edit manually.
*
*/
#define Module_MajorVersion_CMHG 6.35
#define Module_MajorVersion_CMHG 6.36
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 02 Mar 2020
#define Module_Date_CMHG 18 Mar 2020
#define Module_MajorVersion "6.35"
#define Module_Version 635
#define Module_MajorVersion "6.36"
#define Module_Version 636
#define Module_MinorVersion ""
#define Module_Date "02 Mar 2020"
#define Module_Date "18 Mar 2020"
#define Module_ApplicationDate "02-Mar-20"
#define Module_ApplicationDate "18-Mar-20"
#define Module_ComponentName "Kernel"
#define Module_FullVersion "6.35"
#define Module_HelpVersion "6.35 (02 Mar 2020)"
#define Module_LibraryVersionInfo "6:35"
#define Module_FullVersion "6.36"
#define Module_HelpVersion "6.36 (18 Mar 2020)"
#define Module_LibraryVersionInfo "6:36"
......@@ -1151,14 +1151,42 @@ Module_ExtendBlock ROUT
Push "R0, r1, R3, lr"
ADD R3, R3, #31
BIC R3, R3, #31
BICS R3, R3, #31
BMI %FT10 ; shrinks don't move the block
TST R2, #31 ; starts at 32*n
BEQ %FT30 ; => grow an aligned block
10
MOV R0, #HeapReason_ExtendBlock
BL DoRMAHeapOpWithExtension
20
STRVS R0, [stack]
Pull "R0, r1, R3, lr"
B SLVK_TestV
30
LDR R0, [R2, #-4] ; grow may cause move, so always move rather than lose the carefully
SUB R0, R0, #4 ; arranged next block alignment from RMAClaim_ChunkAligned
Push "R0, R2"
ADD R3, R0, R3
BL RMAClaim_Chunk
ADDVS SP, SP, #4*2
BVS %BT20
Pull "R0, R3" ; size, old block
Push "R2" ; new block
40
SUBS R0, R0, #4
LDRPL LR, [R3, R0]
STRPL LR, [R2, R0]
BPL %BT40
MOV R0, #HeapReason_Free
MOV R1, #RMAAddress
MOV R2, R3
SWI XOS_Heap ; free old
Pull "R2" ; return new
B %BT20
;*************************************************************
; New Incarnation
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment