mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 09:07:59 +02:00
* Modified heap management
* Cleaned some code and resolved some warnings git-svn-id: trunk@4528 -
This commit is contained in:
parent
41185d2f1e
commit
ae43d8658a
@ -25,6 +25,8 @@ unit Dos;
|
||||
|
||||
interface
|
||||
|
||||
{$MODE objfpc}
|
||||
|
||||
type
|
||||
SearchRec = Packed Record
|
||||
AnchorPtr : Pointer; { Pointer to the Anchorpath structure }
|
||||
@ -48,18 +50,22 @@ implementation
|
||||
|
||||
function dosLock(const name: String; accessmode: Longint) : LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function IsLeapYear(Source : Word) : Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function dosSetProtection(const name: string; mask:longint): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function dosSetFileDate(name: string): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
@ -69,6 +75,7 @@ end;
|
||||
|
||||
function DosVersion: Word;
|
||||
begin
|
||||
result := 0;
|
||||
end;
|
||||
|
||||
procedure NewList ();
|
||||
@ -77,6 +84,7 @@ end;
|
||||
|
||||
function CreateExtIO (size: Longint): integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
procedure DeleteExtIO ();
|
||||
@ -85,6 +93,7 @@ end;
|
||||
|
||||
function Createport(name : PChar; pri : longint): integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
procedure DeletePort ();
|
||||
@ -94,6 +103,7 @@ end;
|
||||
|
||||
function Create_Timer(theUnit : longint) : integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
Procedure Delete_Timer();
|
||||
@ -102,10 +112,12 @@ end;
|
||||
|
||||
function set_new_time(secs, micro : longint): longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function get_sys_time(): longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
procedure GetDate(Var Year, Month, MDay, WDay: Word);
|
||||
@ -141,12 +153,14 @@ end;
|
||||
|
||||
Function DiskFree(Drive: Byte): int64;
|
||||
Begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function DiskSize(Drive: Byte): int64;
|
||||
Begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
@ -171,6 +185,7 @@ end;
|
||||
|
||||
function FSearch(path: PathStr; dirlist: String) : PathStr;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
|
||||
@ -199,22 +214,26 @@ end;
|
||||
|
||||
function getpathstring: string;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
|
||||
function EnvCount: Longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function EnvStr(Index: LongInt): String;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function GetEnv(envvar : String): String;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
|
||||
@ -224,10 +243,12 @@ end;
|
||||
|
||||
function MakeDeviceName(str : pchar): string;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
function IsInDeviceList(str : string): boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
procedure ReadInDevices;
|
||||
|
@ -1,300 +1,310 @@
|
||||
/* (c) 2006 by devkitPro (http://www.devkitpro.org) */
|
||||
/* Linker Script Original v1.3 by Jeff Frohwein */
|
||||
/* v1.0 - Original release */
|
||||
/* v1.1 - Added proper .data section support */
|
||||
/* v1.2 - Added support for c++ & iwram overlays */
|
||||
/* - Major contributions by Jason Wilkins. */
|
||||
/* v1.3 - .ewram section now can be used when */
|
||||
/* compiling for MULTIBOOT mode. This fixes */
|
||||
/* malloc() in DevKitAdvance which depends */
|
||||
/* on __eheap_start instead of end to define*/
|
||||
/* the starting location of heap space. */
|
||||
/* External global variable __gba_iwram_heap*/
|
||||
/* support added to allow labels end, _end, */
|
||||
/* & __end__ to point to end of iwram or */
|
||||
/* the end of ewram. */
|
||||
/* Additions by WinterMute */
|
||||
/* v1.4 - .sbss section added for unitialised */
|
||||
/* data in ewram */
|
||||
/* v1.5 - padding section added to stop EZF */
|
||||
/* stripping important data */
|
||||
|
||||
/* This file is released into the public domain */
|
||||
/* for commercial or non-commercial use with no */
|
||||
/* restrictions placed upon it. */
|
||||
|
||||
/* NOTE!!!: This linker script defines the RAM & */
|
||||
/* ROM start addresses. In order for it to work */
|
||||
/* properly, remove -Ttext and -Tbss linker */
|
||||
/* options from your makefile if they are */
|
||||
/* present. */
|
||||
|
||||
/* You can use the following to view section */
|
||||
/* addresses in your .elf file: */
|
||||
/* objdump -h file.elf */
|
||||
/* Please note that empty sections may incorrectly*/
|
||||
/* list the lma address as the vma address for */
|
||||
/* some versions of objdump. */
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(_start)
|
||||
/* SEARCH_DIR(/bin/arm); */
|
||||
|
||||
|
||||
|
||||
/* The linker script function "var1 += var2;" sometimes */
|
||||
/* reports incorrect values in the *.map file but the */
|
||||
/* actual value it calculates is usually, if not always, */
|
||||
/* correct. If you leave out the ". = ALIGN(4);" at the */
|
||||
/* end of each section then the return value of SIZEOF() */
|
||||
/* is sometimes incorrect and "var1 += var2;" appears to */
|
||||
/* not work as well. "var1 += var2" style functions are */
|
||||
/* avoided below as a result. */
|
||||
|
||||
MEMORY {
|
||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||
iwram : ORIGIN = 0x03000000, LENGTH = 32K
|
||||
ewram : ORIGIN = 0x02000000, LENGTH = 256K
|
||||
|
||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||
iwram : ORIGIN = 0x03000000, LENGTH = 32K
|
||||
ewram : ORIGIN = 0x02000000, LENGTH = 256K
|
||||
}
|
||||
|
||||
__text_start = 0x8000000;
|
||||
__eheap_end = 0x2040000;
|
||||
__iwram_start = 0x3000000;
|
||||
__iwram_end = 0x3008000;
|
||||
|
||||
__sp_irq = __iwram_end - 0x100;
|
||||
__sp_usr = __sp_irq - 0x100;
|
||||
/*
|
||||
__text_start = 0x8000000;
|
||||
__eheap_end = 0x2040000;
|
||||
__iwram_start = 0x3000000;
|
||||
__iwram_end = 0x3008000;
|
||||
|
||||
__sp_irq = __iwram_end - 0x100;
|
||||
__sp_usr = __sp_irq - 0x100;
|
||||
*/
|
||||
__text_start = ORIGIN(rom);
|
||||
/* __eheap_end = ORIGIN(ewram) + 0x40000; */
|
||||
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
||||
__iwram_start = ORIGIN(iwram);
|
||||
/* __iwram_end = ORIGIN(iwram) + 0x8000; */
|
||||
__iwram_end = ORIGIN(iwram) + LENGTH(iwram);
|
||||
__sp_irq = __iwram_end - 0x100;
|
||||
__sp_usr = __sp_irq - 0x100;
|
||||
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = __text_start;
|
||||
.init :
|
||||
{
|
||||
KEEP (*(.init))
|
||||
. = ALIGN(4);
|
||||
} >rom =0xff
|
||||
|
||||
. = __text_start;
|
||||
.init :
|
||||
{
|
||||
KEEP (*(.init))
|
||||
. = ALIGN(4);
|
||||
} >rom =0xff
|
||||
.plt :
|
||||
{
|
||||
*(.plt)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom
|
||||
|
||||
.plt :
|
||||
{
|
||||
*(.plt)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom
|
||||
.text : /* ALIGN (4): */
|
||||
{
|
||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
||||
*(.text.*)
|
||||
*(.stub)
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0xff
|
||||
|
||||
.text : /* ALIGN (4): */
|
||||
{
|
||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
||||
*(.text.*)
|
||||
*(.stub)
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0xff
|
||||
__text_end = .;
|
||||
.fini :
|
||||
{
|
||||
KEEP (*(.fini))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom =0
|
||||
|
||||
__text_end = .;
|
||||
.fini :
|
||||
{
|
||||
KEEP (*(.fini))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom =0
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
*all.rodata*(*)
|
||||
*(.roda)
|
||||
*(.rodata.*)
|
||||
*(.gnu.linkonce.r*)
|
||||
SORT(CONSTRUCTORS)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0xff
|
||||
|
||||
|
||||
|
||||
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
*all.rodata*(*)
|
||||
*(.roda)
|
||||
*(.rodata.*)
|
||||
/************************************************************ FL: Attempt n.2 */
|
||||
/* *(.data.*) Moved here from EWRAM because size matters */
|
||||
*(.gnu.linkonce.r*)
|
||||
SORT(CONSTRUCTORS)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0xff
|
||||
|
||||
.ctors :
|
||||
{
|
||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
||||
we make sure it is first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not actually link against
|
||||
crtbegin.o; the linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it doesn't matter which
|
||||
directory crtbegin.o is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
.ctors :
|
||||
{
|
||||
/* gcc uses crtbegin.o to find the start of the constructors, so
|
||||
we make sure it is first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not actually link against
|
||||
crtbegin.o; the linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it doesn't matter which
|
||||
directory crtbegin.o is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
|
||||
.dtors :
|
||||
{
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
.dtors :
|
||||
{
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
|
||||
.jcr : { KEEP (*(.jcr)) } >rom
|
||||
.jcr : { KEEP (*(.jcr)) } >rom
|
||||
|
||||
.eh_frame :
|
||||
{
|
||||
KEEP (*(.eh_frame))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
.eh_frame :
|
||||
{
|
||||
KEEP (*(.eh_frame))
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
|
||||
.gcc_except_table :
|
||||
{
|
||||
*(.gcc_except_table)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
.gcc_except_table :
|
||||
{
|
||||
*(.gcc_except_table)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >rom = 0
|
||||
|
||||
__iwram_lma = .;
|
||||
|
||||
.iwram __iwram_start : AT (__iwram_lma)
|
||||
{
|
||||
__iwram_start = ABSOLUTE(.) ;
|
||||
*(.iwram)
|
||||
*iwram.*(.text)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >iwram = 0xff
|
||||
|
||||
/************************************************************* FL: Attempt n.2
|
||||
__data_lma = . + SIZEOF(.gcc_except_table) ;
|
||||
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
|
||||
__iwram_end = . ;
|
||||
|
||||
.data ALIGN(4) : AT (__data_lma)
|
||||
{
|
||||
__data_start = ABSOLUTE(.);
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
. = ALIGN(4);
|
||||
} >rom = 0xff
|
||||
.bss ALIGN(4) :
|
||||
{
|
||||
__bss_start = ABSOLUTE(.);
|
||||
__bss_start__ = ABSOLUTE(.);
|
||||
*(.dynbss)
|
||||
*(.gnu.linkonce.b*)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >iwram
|
||||
|
||||
__bss_end = . ;
|
||||
__bss_end__ = . ;
|
||||
|
||||
.data ALIGN(4) : AT (__data_lma)
|
||||
{
|
||||
__data_start = ABSOLUTE(.);
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
. = ALIGN(4);
|
||||
} >iwram = 0xff
|
||||
|
||||
__iwram_overlay_lma = __data_lma + SIZEOF(.data);
|
||||
|
||||
__data_end = .;
|
||||
__iwram_overlay_start = . ;
|
||||
|
||||
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
|
||||
{
|
||||
.iwram0 { *(.iwram0) . = ALIGN(4);}
|
||||
.iwram1 { *(.iwram1) . = ALIGN(4);}
|
||||
.iwram2 { *(.iwram2) . = ALIGN(4);}
|
||||
.iwram3 { *(.iwram3) . = ALIGN(4);}
|
||||
.iwram4 { *(.iwram4) . = ALIGN(4);}
|
||||
.iwram5 { *(.iwram5) . = ALIGN(4);}
|
||||
.iwram6 { *(.iwram6) . = ALIGN(4);}
|
||||
.iwram7 { *(.iwram7) . = ALIGN(4);}
|
||||
.iwram8 { *(.iwram8) . = ALIGN(4);}
|
||||
.iwram9 { *(.iwram9) . = ALIGN(4);}
|
||||
}>iwram = 0xff
|
||||
|
||||
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
|
||||
|
||||
__iwram_overlay_end = . ;
|
||||
__iheap_start = . ;
|
||||
|
||||
__ewram_start = 0x2000000;
|
||||
.ewram __ewram_start : AT (__ewram_lma)
|
||||
{
|
||||
*(.ewram)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
}>ewram = 0xff
|
||||
|
||||
__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
|
||||
|
||||
.sbss ALIGN(4):
|
||||
{
|
||||
__sbss_start = ABSOLUTE(.);
|
||||
*(.sbss)
|
||||
. = ALIGN(4);
|
||||
} >ewram
|
||||
|
||||
__data_end = .;
|
||||
*********************************************/
|
||||
__sbss_end = .;
|
||||
|
||||
__ewram_end = . ;
|
||||
__ewram_overlay_start = . ;
|
||||
|
||||
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
|
||||
{
|
||||
.ewram0 { *(.ewram0) . = ALIGN(4);}
|
||||
.ewram1 { *(.ewram1) . = ALIGN(4);}
|
||||
.ewram2 { *(.ewram2) . = ALIGN(4);}
|
||||
.ewram3 { *(.ewram3) . = ALIGN(4);}
|
||||
.ewram4 { *(.ewram4) . = ALIGN(4);}
|
||||
.ewram5 { *(.ewram5) . = ALIGN(4);}
|
||||
.ewram6 { *(.ewram6) . = ALIGN(4);}
|
||||
.ewram7 { *(.ewram7) . = ALIGN(4);}
|
||||
.ewram8 { *(.ewram8) . = ALIGN(4);}
|
||||
.ewram9 { *(.ewram9) . = ALIGN(4);}
|
||||
}>ewram = 0xff
|
||||
|
||||
__pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9);
|
||||
|
||||
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
|
||||
.pad ALIGN(4) : AT (__pad_lma)
|
||||
{
|
||||
LONG(0x52416b64)
|
||||
LONG(0x4d)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} = 0xff
|
||||
|
||||
__ewram_overlay_end = . ;
|
||||
__eheap_start = . ;
|
||||
|
||||
__iwram_lma = .;
|
||||
_end = .;
|
||||
__end__ = _end ; /* v1.3 */
|
||||
PROVIDE (end = _end); /* v1.3 */
|
||||
|
||||
.iwram __iwram_start : AT (__iwram_lma)
|
||||
{
|
||||
__iwram_start = ABSOLUTE(.) ;
|
||||
*(.iwram)
|
||||
*iwram.*(.text)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >iwram = 0xff
|
||||
|
||||
__iwram_end = . ;
|
||||
|
||||
.bss ALIGN(4) :
|
||||
{
|
||||
__bss_start = ABSOLUTE(.);
|
||||
__bss_start__ = ABSOLUTE(.);
|
||||
*(.dynbss)
|
||||
*(.gnu.linkonce.b*)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} >iwram
|
||||
|
||||
__bss_end = . ;
|
||||
__bss_end__ = . ;
|
||||
|
||||
|
||||
__iwram_overlay_lma = __iwram_lma + SIZEOF(.iwram);
|
||||
|
||||
__iwram_overlay_start = . ;
|
||||
|
||||
OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
|
||||
{
|
||||
.iwram0 { *(.iwram0) . = ALIGN(4);}
|
||||
.iwram1 { *(.iwram1) . = ALIGN(4);}
|
||||
.iwram2 { *(.iwram2) . = ALIGN(4);}
|
||||
.iwram3 { *(.iwram3) . = ALIGN(4);}
|
||||
.iwram4 { *(.iwram4) . = ALIGN(4);}
|
||||
.iwram5 { *(.iwram5) . = ALIGN(4);}
|
||||
.iwram6 { *(.iwram6) . = ALIGN(4);}
|
||||
.iwram7 { *(.iwram7) . = ALIGN(4);}
|
||||
.iwram8 { *(.iwram8) . = ALIGN(4);}
|
||||
.iwram9 { *(.iwram9) . = ALIGN(4);}
|
||||
}>iwram = 0xff
|
||||
|
||||
|
||||
|
||||
|
||||
__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
|
||||
|
||||
__iwram_overlay_end = . ;
|
||||
__iheap_start = . ;
|
||||
|
||||
__ewram_start = 0x2000000;
|
||||
.ewram __ewram_start : AT (__ewram_lma)
|
||||
{
|
||||
*(.ewram)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
}>ewram = 0xff
|
||||
|
||||
|
||||
|
||||
__data_lma = __ewram_lma + SIZEOF(.ewram) ;
|
||||
|
||||
.data ALIGN(4) : AT (__data_lma)
|
||||
{
|
||||
__data_start = ABSOLUTE(.);
|
||||
*(.data) /****************************************** FL: Attempt n.2 */
|
||||
*(.data.*) /* Moved to RODATA for size matters */
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
. = ALIGN(4);
|
||||
} >ewram = 0xff
|
||||
|
||||
__data_end = .;
|
||||
|
||||
__ewram_overlay_lma = __data_lma + SIZEOF(.data);
|
||||
|
||||
|
||||
|
||||
.sbss ALIGN(4):
|
||||
{
|
||||
__sbss_start = ABSOLUTE(.);
|
||||
*(.sbss)
|
||||
. = ALIGN(4);
|
||||
} >ewram
|
||||
|
||||
__sbss_end = .;
|
||||
|
||||
__ewram_end = . ;
|
||||
__ewram_overlay_start = . ;
|
||||
|
||||
OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
|
||||
{
|
||||
.ewram0 { *(.ewram0) . = ALIGN(4);}
|
||||
.ewram1 { *(.ewram1) . = ALIGN(4);}
|
||||
.ewram2 { *(.ewram2) . = ALIGN(4);}
|
||||
.ewram3 { *(.ewram3) . = ALIGN(4);}
|
||||
.ewram4 { *(.ewram4) . = ALIGN(4);}
|
||||
.ewram5 { *(.ewram5) . = ALIGN(4);}
|
||||
.ewram6 { *(.ewram6) . = ALIGN(4);}
|
||||
.ewram7 { *(.ewram7) . = ALIGN(4);}
|
||||
.ewram8 { *(.ewram8) . = ALIGN(4);}
|
||||
.ewram9 { *(.ewram9) . = ALIGN(4);}
|
||||
}>ewram = 0xff
|
||||
|
||||
__pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9);
|
||||
|
||||
/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
|
||||
.pad ALIGN(4) : AT (__pad_lma)
|
||||
{
|
||||
LONG(0x52416b64)
|
||||
LONG(0x4d)
|
||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||
} = 0xff
|
||||
|
||||
__ewram_overlay_end = . ;
|
||||
__eheap_start = . ;
|
||||
|
||||
_end = .;
|
||||
__end__ = _end ; /* v1.3 */
|
||||
PROVIDE (end = _end); /* v1.3 */
|
||||
|
||||
|
||||
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
||||
/* These must appear regardless of . */
|
||||
}
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
.stack 0x80000 : { _stack = .; *(.stack) }
|
||||
/* These must appear regardless of . */
|
||||
}
|
||||
|
@ -37,14 +37,17 @@ end;
|
||||
|
||||
function do_write(h: longint; addr: pointer; len: longint) : longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function do_read(h: longint; addr: pointer; len: longint) : longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function do_filepos(handle: longint) : longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
procedure do_seek(handle, pos: longint);
|
||||
@ -53,10 +56,12 @@ end;
|
||||
|
||||
function do_seekend(handle: longint):longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function do_filesize(handle : longint) : longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
{ truncate at a given position }
|
||||
@ -70,5 +75,6 @@ end;
|
||||
|
||||
function do_isdevice(handle: longint): boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
@ -17,9 +17,10 @@
|
||||
OS Memory allocation / deallocation
|
||||
****************************************************************************}
|
||||
|
||||
|
||||
function SysOSAlloc(size: ptrint): pointer;
|
||||
begin
|
||||
|
||||
result := pointer($02000000);
|
||||
end;
|
||||
|
||||
{ $define HAS_SYSOSFREE}
|
||||
|
@ -110,6 +110,24 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure InitHeap;
|
||||
begin
|
||||
FillChar(freelists_fixed,sizeof(tfreelists),0);
|
||||
FillChar(freelists_free_chunk,sizeof(freelists_free_chunk),0);
|
||||
|
||||
freelist_var:=nil;
|
||||
{The GBA has no operating system from which we ask memory, so we
|
||||
initialize the heap with a single block of memory.}
|
||||
freeoslistcount:=1;
|
||||
freeoslist:=pointer($2040000);
|
||||
fillchar(freeoslist^,sizeof(freeoslist^),0);
|
||||
freeoslist^.size:=$40000; {GBA heap is $40000 bytes.}
|
||||
fillchar(internal_status,sizeof(internal_status),0);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
begin
|
||||
StackLength := CheckInitialStkLen(InitialStkLen);
|
||||
StackBottom := Sptr - StackLength;
|
||||
|
@ -34,7 +34,8 @@ interface
|
||||
|
||||
implementation
|
||||
|
||||
uses dos, sysconst;
|
||||
uses
|
||||
dos, sysconst;
|
||||
|
||||
{ Include platform independent implementation part }
|
||||
{$i sysutils.inc}
|
||||
@ -45,45 +46,54 @@ uses dos, sysconst;
|
||||
****************************************************************************}
|
||||
function FileOpen(const FileName: string; Mode: Integer): LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileGetDate(Handle: LongInt) : LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileSetDate(Handle, Age: LongInt) : LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileCreate(const FileName: string) : LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileCreate(const FileName: string; Mode: integer): LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileRead(Handle: LongInt; var Buffer; Count: LongInt): LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileWrite(Handle: LongInt; const Buffer; Count: LongInt): LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
function FileSeek(Handle, FOffset, Origin: LongInt) : LongInt;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function FileSeek(Handle: LongInt; FOffset, Origin: Int64): Int64;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
@ -94,16 +104,19 @@ end;
|
||||
|
||||
function FileTruncate(Handle, Size: LongInt): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
function DeleteFile(const FileName: string) : Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
function RenameFile(const OldName, NewName: string): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
@ -112,22 +125,26 @@ end;
|
||||
|
||||
Function FileAge (Const FileName : String): Longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
Function FileExists (Const FileName : String) : Boolean;
|
||||
Begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Function FindFirst (Const Path : String; Attr : Longint; Out Rslt : TSearchRec) : Longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
Function FindNext (Var Rslt : TSearchRec) : Longint;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
Procedure FindClose (Var F : TSearchrec);
|
||||
@ -136,13 +153,13 @@ end;
|
||||
|
||||
Function FileGetAttr (Const FileName : String) : Longint;
|
||||
begin
|
||||
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
Function FileSetAttr (Const Filename : String; Attr: longint) : Longint;
|
||||
begin
|
||||
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
@ -160,39 +177,43 @@ end;
|
||||
|
||||
Function DiskFree(Drive: Byte): int64;
|
||||
Begin
|
||||
|
||||
result := -1;
|
||||
End;
|
||||
|
||||
|
||||
Function DiskSize(Drive: Byte): int64;
|
||||
Begin
|
||||
|
||||
result := -1;
|
||||
End;
|
||||
|
||||
|
||||
Function GetCurrentDir : String;
|
||||
begin
|
||||
|
||||
result := '';
|
||||
end;
|
||||
|
||||
|
||||
Function SetCurrentDir (Const NewDir : String) : Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
Function CreateDir (Const NewDir : String) : Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
Function RemoveDir (Const Dir : String) : Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
function DirectoryExists(const Directory: string): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
@ -216,9 +237,9 @@ end ;
|
||||
|
||||
|
||||
function SysErrorMessage(ErrorCode: Integer): String;
|
||||
|
||||
begin
|
||||
{ Result:=StrError(ErrorCode);}
|
||||
result := '';
|
||||
end;
|
||||
|
||||
{****************************************************************************
|
||||
@ -227,23 +248,28 @@ end;
|
||||
|
||||
Function GetEnvironmentVariable(Const EnvVar : String) : String;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
Function GetEnvironmentVariableCount : Integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
Function GetEnvironmentString(Index : Integer) : String;
|
||||
begin
|
||||
result := '';
|
||||
end;
|
||||
|
||||
function ExecuteProcess (const Path: AnsiString; const ComLine: AnsiString): integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
function ExecuteProcess (const Path: AnsiString;
|
||||
const ComLine: array of AnsiString): integer;
|
||||
begin
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
|
@ -42,7 +42,7 @@ end;
|
||||
|
||||
function TThread.GetPriority: TThreadPriority;
|
||||
begin
|
||||
|
||||
result := tpNormal;
|
||||
end;
|
||||
|
||||
|
||||
@ -106,7 +106,7 @@ end;
|
||||
|
||||
function TThread.WaitFor: Integer;
|
||||
begin
|
||||
|
||||
result := -1;
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user