Add ArmPlatformPkg from ARM Ltd. patch.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11291 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
andrewfish
2011-02-01 05:41:42 +00:00
parent fb334ef6c5
commit 1d5d0ae92d
103 changed files with 14402 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
// returns the base address of the SEC FV in flash on the EB board
// change this address for where your platform's SEC FV is located
// (or make it more intelligent to search for it)
define /r FindFv()
{
return 0x40000000;
}
.
include /s 'ZZZZZZ/EfiFuncs.inc'
error=continue
unload ,all
error=abort
LoadPeiSec()
include C:\loadfiles.inc

View File

@@ -0,0 +1,463 @@
error=abort
// NOTE: THIS MAY NEED TO BE ADJUSTED
// change to reflect the total amount of ram in your system
define /r GetMaxMem()
{
return 0x10000000; // 256 MB
}
.
define /r GetWord(Addr)
{
unsigned long data;
if( (Addr & 0x2) == 0 )
{
data = dword(Addr);
data = data & 0xffff;
//$printf "getword data is %x\n", data$;
return data;
}
else
{
data = dword(Addr & 0xfffffffc);
//data = data >> 16;
data = data / 0x10000;
//$printf "getword data is %x (1)\n", data$;
return data;
}
}
.
define /r ProcessPE32(imgstart)
unsigned long imgstart;
{
unsigned long filehdrstart;
unsigned long debugdirentryrva;
unsigned long debugtype;
unsigned long debugrva;
unsigned long dwarfsig;
unsigned long baseofcode;
unsigned long baseofdata;
unsigned long elfbase;
char *elfpath;
$printf "PE32 image found at %x",imgstart$;
//$printf "PE file hdr offset %x",dword(imgstart+0x3C)$;
// offset from dos hdr to PE file hdr
filehdrstart = imgstart + dword(imgstart+0x3C);
// offset to debug dir in PE hdrs
//$printf "debug dir is at %x",(filehdrstart+0xA8)$;
debugdirentryrva = dword(filehdrstart + 0xA8);
if(debugdirentryrva == 0)
{
$printf "no debug dir for image at %x",imgstart$;
return;
}
//$printf "debug dir entry rva is %x",debugdirentryrva$;
debugtype = dword(imgstart + debugdirentryrva + 0xc);
if( (debugtype != 0xdf) && (debugtype != 0x2) )
{
$printf "debug type is not dwarf for image at %x",imgstart$;
$printf "debug type is %x",debugtype$;
return;
}
debugrva = dword(imgstart + debugdirentryrva + 0x14);
dwarfsig = dword(imgstart + debugrva);
if(dwarfsig != 0x66727764)
{
$printf "dwarf debug signature not found for image at %x",imgstart$;
return;
}
elfpath = (char *)(imgstart + debugrva + 0xc);
baseofcode = imgstart + dword(filehdrstart + 0x28);
baseofdata = imgstart + dword(filehdrstart + 0x2c);
if( (baseofcode < baseofdata) && (baseofcode != 0) )
{
elfbase = baseofcode;
}
else
{
elfbase = baseofdata;
}
$printf "found path %s",elfpath$;
$fprintf 50, "load /ni /np /a %s &0x%x\n",elfpath,elfbase$;
}
.
define /r ProcessTE(imgstart)
unsigned long imgstart;
{
unsigned long strippedsize;
unsigned long debugdirentryrva;
unsigned long debugtype;
unsigned long debugrva;
unsigned long dwarfsig;
unsigned long elfbase;
char *elfpath;
$printf "TE image found at %x",imgstart$;
// determine pe header bytes removed to account for in rva references
//strippedsize = word(imgstart + 0x6);
//strippedsize = (dword(imgstart + 0x4) & 0xffff0000) >> 16;
strippedsize = (dword(imgstart + 0x4) & 0xffff0000) / 0x10000;
strippedsize = strippedsize - 0x28;
debugdirentryrva = dword(imgstart + 0x20);
if(debugdirentryrva == 0)
{
$printf "no debug dir for image at %x",imgstart$;
return;
}
debugdirentryrva = debugdirentryrva - strippedsize;
//$printf "debug dir entry rva is %x",debugdirentryrva$;
debugtype = dword(imgstart + debugdirentryrva + 0xc);
if( (debugtype != 0xdf) && (debugtype != 0x2) )
{
$printf "debug type is not dwarf for image at %x",imgstart$;
$printf "debug type is %x",debugtype$;
return;
}
debugrva = dword(imgstart + debugdirentryrva + 0x14);
debugrva = debugrva - strippedsize;
dwarfsig = dword(imgstart + debugrva);
if( (dwarfsig != 0x66727764) && (dwarfsig != 0x3031424e) )
{
$printf "dwarf debug signature not found for image at %x",imgstart$;
$printf "found %x", dwarfsig$;
return;
}
if( dwarfsig == 0x66727764 )
{
elfpath = (char *)(imgstart + debugrva + 0xc);
$printf "looking for elf path at 0x%x", elfpath$;
}
else
{
elfpath = (char *)(imgstart + debugrva + 0x10);
$printf "looking for elf path at 0x%x", elfpath$;
}
// elf base is baseofcode (we hope that for TE images it's not baseofdata)
elfbase = imgstart + dword(imgstart + 0xc) - strippedsize;
$printf "found path %s",elfpath$;
$fprintf 50, "load /ni /np /a %s &0x%x\n",elfpath,elfbase$;
}
.
define /r ProcessFvSection(secstart)
unsigned long secstart;
{
unsigned long sectionsize;
unsigned char sectiontype;
sectionsize = dword(secstart);
//sectiontype = (sectionsize & 0xff000000) >> 24;
sectiontype = (sectionsize & 0xff000000) / 0x1000000;
sectionsize = sectionsize & 0x00ffffff;
$printf "fv section at %x size %x type %x",secstart,sectionsize,sectiontype$;
if(sectiontype == 0x10) // PE32
{
ProcessPE32(secstart+0x4);
}
else if(sectiontype == 0x12) // TE
{
ProcessTE(secstart+0x4);
}
}
.
define /r ProcessFfsFile(ffsfilestart)
unsigned long ffsfilestart;
{
unsigned long ffsfilesize;
unsigned long ffsfiletype;
unsigned long secoffset;
unsigned long secsize;
//ffsfiletype = byte(ffsfilestart + 0x12);
ffsfilesize = dword(ffsfilestart + 0x14);
//ffsfiletype = (ffsfilesize & 0xff000000) >> 24;
ffsfiletype = (ffsfilesize & 0xff000000) / 0x1000000;
ffsfilesize = ffsfilesize & 0x00ffffff;
if(ffsfiletype == 0xff) return;
$printf "ffs file at %x size %x type %x",ffsfilestart,ffsfilesize,ffsfiletype$;
secoffset = ffsfilestart + 0x18;
// loop through sections in file
while(secoffset < (ffsfilestart + ffsfilesize))
{
// process fv section and increment section offset by size
secsize = dword(secoffset) & 0x00ffffff;
ProcessFvSection(secoffset);
secoffset = secoffset + secsize;
// align to next 4 byte boundary
if( (secoffset & 0x3) != 0 )
{
secoffset = secoffset + (0x4 - (secoffset & 0x3));
}
} // end section loop
}
.
define /r LoadPeiSec()
{
unsigned long fvbase;
unsigned long fvlen;
unsigned long fvsig;
unsigned long ffsoffset;
unsigned long ffsfilesize;
fvbase = FindFv();
$printf "fvbase %x",fvbase$;
// get fv signature field
fvsig = dword(fvbase + 0x28);
if(fvsig != 0x4856465F)
{
$printf "FV does not have proper signature, exiting"$;
return 0;
}
$printf "FV signature found"$;
$fopen 50, 'C:\loadfiles.inc'$;
fvlen = dword(fvbase + 0x20);
// first ffs file is after fv header, use headerlength field
//ffsoffset = (dword(fvbase + 0x30) & 0xffff0000) >> 16;
ffsoffset = (dword(fvbase + 0x30) & 0xffff0000) / 0x10000;
ffsoffset = fvbase + GetWord(fvbase + 0x30);
// loop through ffs files
while(ffsoffset < (fvbase+fvlen))
{
// process ffs file and increment by ffs file size field
ProcessFfsFile(ffsoffset);
ffsfilesize = (dword(ffsoffset + 0x14) & 0x00ffffff);
if(ffsfilesize == 0)
{
break;
}
ffsoffset = ffsoffset + ffsfilesize;
// align to next 8 byte boundary
if( (ffsoffset & 0x7) != 0 )
{
ffsoffset = ffsoffset + (0x8 - (ffsoffset & 0x7));
}
} // end fv ffs loop
$vclose 50$;
}
.
define /r FindSystemTable(TopOfRam)
unsigned long TopOfRam;
{
unsigned long offset;
$printf "FindSystemTable"$;
$printf "top of mem is %x",TopOfRam$;
offset = TopOfRam;
// align to highest 4MB boundary
offset = offset & 0xFFC00000;
// start at top and look on 4MB boundaries for system table ptr structure
while(offset > 0)
{
//$printf "checking %x",offset$;
//$printf "value is %x",dword(offset)$;
// low signature match
if(dword(offset) == 0x20494249)
{
// high signature match
if(dword(offset+4) == 0x54535953)
{
// less than 4GB?
if(dword(offset+0x0c) == 0)
{
// less than top of ram?
if(dword(offset+8) < TopOfRam)
{
return(dword(offset+8));
}
}
}
}
if(offset < 0x400000) break;
offset = offset - 0x400000;
}
return 0;
}
.
define /r ProcessImage(ImageBase)
unsigned long ImageBase;
{
$printf "ProcessImage %x", ImageBase$;
}
.
define /r FindDebugInfo(SystemTable)
unsigned long SystemTable;
{
unsigned long CfgTableEntries;
unsigned long ConfigTable;
unsigned long i;
unsigned long offset;
unsigned long dbghdr;
unsigned long dbgentries;
unsigned long dbgptr;
unsigned long dbginfo;
unsigned long loadedimg;
$printf "FindDebugInfo"$;
dbgentries = 0;
CfgTableEntries = dword(SystemTable + 0x40);
ConfigTable = dword(SystemTable + 0x44);
$printf "config table is at %x (%d entries)", ConfigTable, CfgTableEntries$;
// now search for debug info entry with guid 49152E77-1ADA-4764-B7A2-7AFEFED95E8B
// 0x49152E77 0x47641ADA 0xFE7AA2B7 0x8B5ED9FE
for(i=0; i<CfgTableEntries; i++)
{
offset = ConfigTable + (i*0x14);
if(dword(offset) == 0x49152E77)
{
if(dword(offset+4) == 0x47641ADA)
{
if(dword(offset+8) == 0xFE7AA2B7)
{
if(dword(offset+0xc) == 0x8B5ED9FE)
{
dbghdr = dword(offset+0x10);
dbgentries = dword(dbghdr + 4);
dbgptr = dword(dbghdr + 8);
}
}
}
}
}
if(dbgentries == 0)
{
$printf "no debug entries found"$;
return;
}
$printf "debug table at %x (%d entries)", dbgptr, dbgentries$;
for(i=0; i<dbgentries; i++)
{
dbginfo = dword(dbgptr + (i*4));
if(dbginfo != 0)
{
if(dword(dbginfo) == 1) // normal debug info type
{
loadedimg = dword(dbginfo + 4);
ProcessPE32(dword(loadedimg + 0x20));
}
}
}
}
.
define /r LoadDxe()
{
unsigned long maxmem;
unsigned long systbl;
$printf "LoadDxe"$;
$fopen 50, 'C:\loadfiles.inc'$;
maxmem = GetMaxMem();
systbl = FindSystemTable(maxmem);
if(systbl != 0)
{
$printf "found system table at %x",systbl$;
FindDebugInfo(systbl);
}
$vclose 50$;
}
.
define /r LoadRuntimeDxe()
{
unsigned long maxmem;
unsigned long SystemTable;
unsigned long CfgTableEntries;
unsigned long ConfigTable;
unsigned long i;
unsigned long offset;
unsigned long numentries;
unsigned long RuntimeDebugInfo;
unsigned long DebugInfoOffset;
unsigned long imgbase;
$printf "LoadRuntimeDxe"$;
$fopen 50, 'C:\loadfiles.inc'$;
RuntimeDebugInfo = 0x80000010;
if(RuntimeDebugInfo != 0)
{
numentries = dword(RuntimeDebugInfo);
$printf "runtime debug info is at %x (%d entries)", RuntimeDebugInfo, numentries$;
DebugInfoOffset = RuntimeDebugInfo + 0x4;
for(i=0; i<numentries; i++)
{
imgbase = dword(DebugInfoOffset);
if(imgbase != 0)
{
$printf "found image at %x",imgbase$;
ProcessPE32(imgbase);
}
DebugInfoOffset = DebugInfoOffset + 0x4;
}
}
$vclose 50$;
}
.

View File

@@ -0,0 +1,21 @@
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
error = continue
unload
error = abort
setreg @CP15_CONTROL = 0x0005107E
setreg @pc=0x80008208
setreg @cpsr=0x000000D3
dis/D
readfile,raw,nowarn "ZZZZZZ/FV/BEAGLEBOARD_EFI.fd"=0x80008000

View File

@@ -0,0 +1,23 @@
#!/bin/sh
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http:#opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
IN=`/usr/bin/cygpath -u $1`
OUT=`/usr/bin/cygpath -u $2`
/usr/bin/sed -e "s/\/cygdrive\/\(.\)/load\/a\/ni\/np \"\1:/g" \
-e 's:\\:/:g' \
-e "s/^/load\/a\/ni\/np \"/g" \
-e "s/dll /dll\" \&/g" \
$IN | /usr/bin/sort.exe --key=3 --output=$OUT

View File

@@ -0,0 +1,67 @@
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
error = continue
unload
error = abort
setreg @CP15_CONTROL = 0x0005107E
setreg @cpsr=0x000000D3
; General clock settings.
setmem /32 0x48307270=0x00000080
setmem /32 0x48306D40=0x00000003
setmem /32 0x48005140=0x03020A50
;Clock configuration
setmem /32 0x48004A40=0x0000030A
setmem /32 0x48004C40=0x00000015
;DPLL3 (Core) settings
setmem /32 0x48004D00=0x00370037
setmem /32 0x48004D30=0x00000000
setmem /32 0x48004D40=0x094C0C00
;DPLL4 (Peripheral) settings
setmem /32 0x48004D00=0x00370037
setmem /32 0x48004D30=0x00000000
setmem /32 0x48004D44=0x0001B00C
setmem /32 0x48004D48=0x00000009
;DPLL1 (MPU) settings
setmem /32 0x48004904=0x00000037
setmem /32 0x48004934=0x00000000
setmem /32 0x48004940=0x0011F40C
setmem /32 0x48004944=0x00000001
setmem /32 0x48004948=0x00000000
;RAM setup.
setmem /16 0x6D000010=0x0000
setmem /16 0x6D000040=0x0001
setmem /16 0x6D000044=0x0100
setmem /16 0x6D000048=0x0000
setmem /32 0x6D000060=0x0000000A
setmem /32 0x6D000070=0x00000081
setmem /16 0x6D000040=0x0003
setmem /32 0x6D000080=0x02D04011
setmem /16 0x6D000084=0x0032
setmem /16 0x6D00008C=0x0000
setmem /32 0x6D00009C=0xBA9DC4C6
setmem /32 0x6D0000A0=0x00012522
setmem /32 0x6D0000A4=0x0004E201
setmem /16 0x6D000040=0x0003
setmem /32 0x6D0000B0=0x02D04011
setmem /16 0x6D0000B4=0x0032
setmem /16 0x6D0000BC=0x0000
setmem /32 0x6D0000C4=0xBA9DC4C6
setmem /32 0x6D0000C8=0x00012522
setmem /32 0x6D0000D4=0x0004E201

View File

@@ -0,0 +1,23 @@
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
include 'ZZZZZZ/rvi_symbols_macros.inc'
macro write_symbols_file("ZZZZZZ/rvi_symbols.tmp", 0x00000000, 0x10000000)
host "bash -o igncr ZZZZZZ/rvi_convert_symbols.sh ZZZZZZ/rvi_symbols.tmp ZZZZZZ/rvi_symbols.inc"
include 'ZZZZZZ/rvi_symbols.inc'
load /NI /NP 'ZZZZZZ/rvi_dummy.axf' ;.constdata
unload rvi_dummy.axf
delfile rvi_dummy.axf

View File

@@ -0,0 +1,194 @@
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
define /R int compare_guid(guid1, guid2)
unsigned char *guid1;
unsigned char *guid2;
{
return strncmp(guid1, guid2, 16);
}
.
define /R unsigned char * find_system_table(mem_start, mem_size)
unsigned char *mem_start;
unsigned long mem_size;
{
unsigned char *mem_ptr;
mem_ptr = mem_start + mem_size;
do
{
mem_ptr -= 0x400000; // 4 MB
if (strncmp(mem_ptr, "IBI SYST", 8) == 0)
{
return *(unsigned long *)(mem_ptr + 8); // EfiSystemTableBase
}
} while (mem_ptr > mem_start);
return 0;
}
.
define /R unsigned char * find_debug_info_table_header(system_table)
unsigned char *system_table;
{
unsigned long configuration_table_entries;
unsigned char *configuration_table;
unsigned long index;
unsigned char debug_table_guid[16];
// Fill in the debug table's guid
debug_table_guid[ 0] = 0x77;
debug_table_guid[ 1] = 0x2E;
debug_table_guid[ 2] = 0x15;
debug_table_guid[ 3] = 0x49;
debug_table_guid[ 4] = 0xDA;
debug_table_guid[ 5] = 0x1A;
debug_table_guid[ 6] = 0x64;
debug_table_guid[ 7] = 0x47;
debug_table_guid[ 8] = 0xB7;
debug_table_guid[ 9] = 0xA2;
debug_table_guid[10] = 0x7A;
debug_table_guid[11] = 0xFE;
debug_table_guid[12] = 0xFE;
debug_table_guid[13] = 0xD9;
debug_table_guid[14] = 0x5E;
debug_table_guid[15] = 0x8B;
configuration_table_entries = *(unsigned long *)(system_table + 64);
configuration_table = *(unsigned long *)(system_table + 68);
for (index = 0; index < configuration_table_entries; index++)
{
if (compare_guid(configuration_table, debug_table_guid) == 0)
{
return *(unsigned long *)(configuration_table + 16);
}
configuration_table += 20;
}
return 0;
}
.
define /R int valid_pe_header(header)
unsigned char *header;
{
if ((header[0x00] == 'M') &&
(header[0x01] == 'Z') &&
(header[0x80] == 'P') &&
(header[0x81] == 'E'))
{
return 1;
}
return 0;
}
.
define /R unsigned long pe_headersize(header)
unsigned char *header;
{
unsigned long *size;
size = header + 0x00AC;
return *size;
}
.
define /R unsigned char *pe_filename(header)
unsigned char *header;
{
unsigned long *debugOffset;
unsigned char *stringOffset;
if (valid_pe_header(header))
{
debugOffset = header + 0x0128;
stringOffset = header + *debugOffset + 0x002C;
return stringOffset;
}
return 0;
}
.
define /R int char_is_valid(c)
unsigned char c;
{
if (c >= 32 && c < 127)
return 1;
return 0;
}
.
define /R write_symbols_file(filename, mem_start, mem_size)
unsigned char *filename;
unsigned char *mem_start;
unsigned long mem_size;
{
unsigned char *system_table;
unsigned char *debug_info_table_header;
unsigned char *debug_info_table;
unsigned long debug_info_table_size;
unsigned long index;
unsigned char *debug_image_info;
unsigned char *loaded_image_protocol;
unsigned char *image_base;
unsigned char *debug_filename;
unsigned long header_size;
int status;
system_table = find_system_table(mem_start, mem_size);
if (system_table == 0)
{
return;
}
status = fopen(88, filename, "w");
debug_info_table_header = find_debug_info_table_header(system_table);
debug_info_table = *(unsigned long *)(debug_info_table_header + 8);
debug_info_table_size = *(unsigned long *)(debug_info_table_header + 4);
for (index = 0; index < (debug_info_table_size * 4); index += 4)
{
debug_image_info = *(unsigned long *)(debug_info_table + index);
if (debug_image_info == 0)
{
break;
}
loaded_image_protocol = *(unsigned long *)(debug_image_info + 4);
image_base = *(unsigned long *)(loaded_image_protocol + 32);
debug_filename = pe_filename(image_base);
header_size = pe_headersize(image_base);
$fprintf 88, "%s 0x%08x\n", debug_filename, image_base + header_size$;
}
fclose(88);
}
.

View File

@@ -0,0 +1,118 @@
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
error = continue
unload
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
delfile 1
error = abort