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

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 @@ ...@@ -9,12 +9,12 @@
GBLS Module_ApplicationDate GBLS Module_ApplicationDate
GBLS Module_HelpVersion GBLS Module_HelpVersion
GBLS Module_ComponentName GBLS Module_ComponentName
Module_MajorVersion SETS "6.35" Module_MajorVersion SETS "6.36"
Module_Version SETA 635 Module_Version SETA 636
Module_MinorVersion SETS "" Module_MinorVersion SETS ""
Module_Date SETS "02 Mar 2020" Module_Date SETS "18 Mar 2020"
Module_ApplicationDate SETS "02-Mar-20" Module_ApplicationDate SETS "18-Mar-20"
Module_ComponentName SETS "Kernel" Module_ComponentName SETS "Kernel"
Module_FullVersion SETS "6.35" Module_FullVersion SETS "6.36"
Module_HelpVersion SETS "6.35 (02 Mar 2020)" Module_HelpVersion SETS "6.36 (18 Mar 2020)"
/* (6.35) /* (6.36)
* *
* This file is automatically maintained by srccommit, do not edit manually. * 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_MinorVersion_CMHG
#define Module_Date_CMHG 02 Mar 2020 #define Module_Date_CMHG 18 Mar 2020
#define Module_MajorVersion "6.35" #define Module_MajorVersion "6.36"
#define Module_Version 635 #define Module_Version 636
#define Module_MinorVersion "" #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_ComponentName "Kernel"
#define Module_FullVersion "6.35" #define Module_FullVersion "6.36"
#define Module_HelpVersion "6.35 (02 Mar 2020)" #define Module_HelpVersion "6.36 (18 Mar 2020)"
#define Module_LibraryVersionInfo "6:35" #define Module_LibraryVersionInfo "6:36"
...@@ -1151,14 +1151,42 @@ Module_ExtendBlock ROUT ...@@ -1151,14 +1151,42 @@ Module_ExtendBlock ROUT
Push "R0, r1, R3, lr" Push "R0, r1, R3, lr"
ADD R3, R3, #31 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
MOV R0, #HeapReason_ExtendBlock MOV R0, #HeapReason_ExtendBlock
BL DoRMAHeapOpWithExtension BL DoRMAHeapOpWithExtension
STRVS R0, [stack] STRVS R0, [stack]
Pull "R0, r1, R3, lr" Pull "R0, r1, R3, lr"
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
Pull "R0, R3" ; size, old block
Push "R2" ; new block
SUBS R0, R0, #4
LDRPL LR, [R3, R0]
STRPL LR, [R2, R0]
MOV R0, #HeapReason_Free
MOV R1, #RMAAddress
MOV R2, R3
SWI XOS_Heap ; free old
Pull "R2" ; return new
B %BT20
;************************************************************* ;*************************************************************
; New Incarnation ; 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