mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-08 02:38:27 +02:00
143 lines
3.8 KiB
ObjectPascal
143 lines
3.8 KiB
ObjectPascal
{
|
|
$Id$
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 1993,97 by Pierre Muller,
|
|
member of the Free Pascal development team.
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
{ Translated to FPK pascal by Pierre Muller,
|
|
without changing the fpu.s file }
|
|
{
|
|
/* Copyright (C) 1994, 1995 Charles Sandmann (sandmann@clio.rice.edu)
|
|
* FPU setup and emulation hooks for DJGPP V2.0
|
|
* This file maybe freely distributed, no warranty. */
|
|
this file has been translated from
|
|
dxe.h
|
|
dxeload.c
|
|
npxsetup.c
|
|
it uses fpu.as unchanged from fpu.s in DJGPP/SRC/LIBC/}
|
|
|
|
{/* Copyright (C) 1995 Charles Sandmann (sandmann@clio.rice.edu)
|
|
This software may be freely distributed with above copyright, no warranty.
|
|
Based on code by DJ Delorie, it's really his, enhanced, bugs fixed. */}
|
|
|
|
|
|
Unit dxeload;
|
|
|
|
interface
|
|
|
|
type
|
|
dxe_header = record
|
|
magic : longint;
|
|
symbol_offset : longint;
|
|
element_size : longint;
|
|
nrelocs : longint;
|
|
end;
|
|
|
|
const
|
|
DXE_MAGIC = $31455844;
|
|
|
|
{/* data stored after dxe_header in file; then relocs, 4 bytes each */}
|
|
|
|
function dxe_load(filename : string) : pointer;
|
|
|
|
implementation
|
|
|
|
function dxe_load(filename : string) : pointer;
|
|
|
|
type
|
|
pointer_array = array[0..0] of pointer;
|
|
tpa = ^pointer_array;
|
|
plongint = ^longint;
|
|
ppointer = ^pointer;
|
|
var
|
|
dh : dxe_header;
|
|
data : pchar;
|
|
f : file;
|
|
relocs : tpa;
|
|
i : longint;
|
|
addr : plongint;
|
|
|
|
begin
|
|
dxe_load:=nil;
|
|
assign(f,filename);
|
|
reset(f,1);
|
|
blockread(f,@dh,sizeof(dxe_header));
|
|
if dh.magic<>DXE_MAGIC then
|
|
begin
|
|
close(f);
|
|
exit;
|
|
end;
|
|
|
|
{ get memory for code }
|
|
getmem(data,dh.element_size);
|
|
if data=nil then
|
|
exit;
|
|
{ get memory for relocations }
|
|
getmem(relocs,dh.nrelocs*sizeof(pointer));
|
|
if relocs=nil then
|
|
begin
|
|
freemem(data,dh.element_size);
|
|
exit;
|
|
end;
|
|
{ copy code }
|
|
blockread(f,data^,dh.element_size);
|
|
blockread(f,relocs^,dh.nrelocs*sizeof(pointer));
|
|
|
|
{ relocate internal references }
|
|
for i:=0 to dh.nrelocs-1 do
|
|
begin
|
|
cardinal(addr):=cardinal(data)+cardinal(relocs^[i]);
|
|
addr^:=addr^+pointer(data);
|
|
end;
|
|
dxe_load:=pointer( dh.symbol_offset + cardinal(data));
|
|
end;
|
|
end.
|
|
|
|
{
|
|
$Log$
|
|
Revision 1.1 1998-03-25 11:18:42 root
|
|
Initial revision
|
|
|
|
Revision 1.3 1998/01/26 11:57:29 michael
|
|
+ Added log at the end
|
|
|
|
Revision 1.2 1998/01/19 17:04:39 pierre
|
|
* bug in dxe loading corrected, emu still does not work !!
|
|
|
|
Revision 1.1 1998/01/16 16:50:49 pierre
|
|
dxeload is a pascal version of the DJGPP C dxe loader
|
|
|
|
}
|
|
|
|
|
|
{
|
|
$Log$
|
|
Revision 1.1 1998-03-25 11:18:42 root
|
|
Initial revision
|
|
|
|
Revision 1.3 1998/01/26 11:57:29 michael
|
|
+ Added log at the end
|
|
|
|
|
|
|
|
Working file: rtl/dos/go32v2/dxeload.pp
|
|
description:
|
|
----------------------------
|
|
revision 1.2
|
|
date: 1998/01/19 17:04:39; author: pierre; state: Exp; lines: +7 -3
|
|
* bug in dxe loading corrected, emu still does not work !!
|
|
----------------------------
|
|
revision 1.1
|
|
date: 1998/01/16 16:50:49; author: pierre; state: Exp;
|
|
dxeload is a pascal version of the DJGPP C dxe loader
|
|
=============================================================================
|
|
}
|