david@walking.pub.uu.oz.au (David Le Blanc) (06/27/91)
The other day, I decided to have a look at overlays. I have found out the following. 1) When Blink creates overlays, it generates an 'overlay' table, and and 'overlay' hunk for the loader. When the loader encounters this hunk, it does the following. a) Load the table into memory. b) Corrupt the 3rd to 6th long words (inclusive) of your FIRST loaded segment. (I dont REALLY mean corrupt. I'll get to it..) c) Halt loading, leaving the file open. 2) When your program is loaded, you find that the ROOT overlay is in memory (and all your data) and an overlay table. Your load file is also still open. You also find that a table has been placed into your loaded segment at the 3rd longword (room left for instructions to jump over the table I assume). This table appears to be : BPTR Executable_File_Handle APTR Overlay_Table BPTR [Fill in the blanks] #1 APTR [Fill in the blanks] #2 3) You can load in more chunks of your program via calls to 'Seek' since you know the address of the File Handle, and the overlay table containing the seek offset, Eg from Lattice's _ovlyMgr (reproduced without permission) FF52(PC) = address of file handle. (A3) = contains the pointer into the overlay table for the segment we want to load. | 00B4 223A FF52 MOVE.L FF52(PC),D1 | 00B8 2413 MOVE.L (A3),D2 | 00BA 76FF MOVEQ #FF,D3 | 00C0 4EAE FFBE JSR FFBE(A6) Now to LOAD the code, you call LoadSeg(). The AmigaDos manual says 'LoadSeg(name)(d1)'. Eg from Lattice's _ovlyMgr (reproduced without permission) FF44(PC) = address of #1 FF36(PC) = address of File_Handle. | 00CA 243A FF44 MOVE.L FF44(PC),D2 | 00CE 7200 MOVEQ #00,D1 | 00D0 263A FF36 MOVE.L FF36(PC),D3 | 00D8 4EAE FF6A JSR FF6A(A6) This code here says LoadSeg(NULL,#1,FileHandle)(d1,d2,d3). I would assume that #1 is a pointer to the loaders hunk tables for relocation purposes (Nice of it to leave it lying around :) Can anyone explain WHY's, and maybe describe the unknowns #1 and #2? Why is #2 never accessed? (I would probably know when I understand what it points to..) Does WB2.0 have a direct call you can make to 'LoadSegFromFileHandle()' (in the same way it has OpenLock() and its ilk) Any pointers to GOOD documentation about all this would be greatly appreciated! Thanks Everybody! David -- ----------------------------------------------------------------------------- David Le Blanc UUCP (home) : david@walking.pub.uu.oz.au Life is a puddle. ACSNET (work) : david@mlb.geomechanics.csiro.au - CSIRO Division of Geomechanics - Fragment analysis and 3D Fractal imaging - "What do you mean officer? This bike can't GO 140 km/h" -----------------------------------------------------------------------------
rosenber@ra.abo.fi (Robin Rosenberg INF) (06/29/91)
In article <6124@walking.pub.uu.oz.au> david@walking.pub.uu.oz.au (David Le Blanc) writes: > BPTR Executable_File_Handle > APTR Overlay_Table > BPTR [Fill in the blanks] #1 > APTR [Fill in the blanks] #2 #1 is Hunk tablble #2 is Global vector According to the source ovs.a in the directory source on the fourth disk on the Lattice/SAS C distribution. ---------- Robin
baxter_a@wehi.dn.mu.oz (06/29/91)
In article <6124@walking.pub.uu.oz.au>, david@walking.pub.uu.oz.au (David Le Blanc) writes: > > The other day, I decided to have a look at overlays. I have found out > the following. > > 1) When Blink creates overlays, it generates an 'overlay' table, and > and 'overlay' hunk for the loader. ....> > 2) When your program is loaded, you find that the ROOT overlay is > in memory (and all your data) and an overlay table. Your load file ....> > 3) You can load in more chunks of your program via calls to 'Seek' > since you know the address of the File Handle, and the overlay > This code here says LoadSeg(NULL,#1,FileHandle)(d1,d2,d3). > > I would assume that #1 is a pointer to the loaders hunk tables > for relocation purposes (Nice of it to leave it lying around :) > > Can anyone explain WHY's, and maybe describe the unknowns #1 and #2? > Why is #2 never accessed? (I would probably know when I understand > what it points to..) > > Does WB2.0 have a direct call you can make to 'LoadSegFromFileHandle()' > (in the same way it has OpenLock() and its ilk) > > Any pointers to GOOD documentation about all this would be greatly > appreciated! > > Thanks Everybody! > David While I can't follow your disassembly, I have had much trouble with the SAS/C overlay manager, and SAS/C have offered to send my a pre-beta of one that is supposed to work properly. I have not received the replacement Blink, so I can't comment on it. Sounds like you should enquire. The Sydney people are quite helpful. Regards Alan