[Oberon] PO2013 - Infrequent TRAPs
Tomas Kral
thomas.kral at email.cz
Sun Jun 14 09:58:18 CEST 2020
> 1. from initial boot time and
> 2. on a system which uses all the latest code from the
> www.projectoberon.com site and
> 3. which doesn't include any of your modifications to the latest code
>
> that reliably reproduces any of these problems?
Hi Chris,
I see, distinguish between latest source with
or without my own mods. Is difficult to reproduce as it happens at
random, on some occasions. I run minimal PO2013 FPGA system with 1MB.
Is unlikely to happen on emulated systems, with megs of RAM.
Also I admit, is usually me doing something wrong, but particularly trap with heap and other emntioned eralier became a wee bit persistent.
2016 ORB version, very very rarely does trap on heap.
< MODULE ORB; (*NW 25.6.2014 / 4.4.2017 in Oberon-07*)
---
> MODULE ORB; (*NW 25.6.2014 / 17.9.2016 in Oberon-07*)
25c25
< class*, exno*: BYTE;
---
> class*, lev*, exno*: INTEGER;
27d26
< lev*: INTEGER;
My mods in modules same as in official release, except bottom-up search in modules stack, pls see comment.
MODULE Modules; (*Link and load on RISC; NW 20.10.2013 / 9.4.2016*)
IF res = 0 THEN (*search for a hole in the list*)
INC(size, DescSize); (*mod*) m := root; mod := NIL;
(*WHILE (mod # NIL) & ~((mod.name[0] = 0X) & (mod.size >= size)) DO mod := mod.next END ;*)
WHILE m # NIL DO IF (m.name[0] = 0X) & (m.size >= size) THEN
mod := m END ; m := m.next END ;
MODULE Kernel; (*NW/PR 11.4.86 / 27.12.95 / 4.2.2014*)
...
(* ---------- New: heap allocation ----------*)
PROCEDURE GetBlock(VAR p: LONGINT; len: LONGINT);
(*len is multiple of 256*)
I have some understanding how heap works, we maintain
three `list1 := 0; list2 := 0; list3 := 0; list0 := heapOrg;' distinct lists.
32/64/128/[multi]256 bytes blocks, each with hidden type tag (two addresses Mk/Tag, two INTs = 8 bytes). Allocated by a trap through ORB, aligned on words. (or is it aligned?)
--
Tomas Kral <thomas.kral at email.cz>
More information about the Oberon
mailing list