History log of /freebsd-10-stable/sys/boot/ficl/
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
295135 02-Feb-2016 allanjude

MFC: r294926
ficl on i386 should cast to unsigned char output to support efi i386

Submitted by: Toomas Soome <tsoome at me.com>
Approved by: re (gjb)

294445 20-Jan-2016 emaste

MFC r293233: loader.efi: add terminal emulation support

This is based on the vidconsole implementation.

Submitted by: Toomas Soome <tsoome@me.com>
Relnotes: Yes

281321 09-Apr-2015 jhb

MFC 279949:
The System V ABI for amd64 allows functions to use space in a 128 byte
redzone below the stack pointer for scratch space and requires
interrupt and signal frames to avoid overwriting it. However, EFI uses
the Windows ABI which does not support this. As a result, interrupt
handlers in EFI push their interrupt frames directly on top of the
stack pointer. If the compiler used the red zone in a function in the
EFI loader, then a device interrupt that occurred while that function
was running could trash its local variables. In practice this happens
fairly reliable when using gzipfs as an interrupt during decompression
can trash the local variables in the inflate_table() function
resulting in corrupted output or hangs.

Fix this by disabling the redzone for amd64 EFI binaries. This
requires building not only the loader but any libraries used by the
loader without redzone support.

Thanks to Jilles for pointing me at the redzone once I found the stack
corruption.

271135 04-Sep-2014 emaste

MFC UEFI loader

This MFC consists of the following SVN revisions:
258741 261568 261603 261668 263115 263117 263968 264078 264087 264088
264092 264095 264115 264132 264208 264261 264262 264263 264319 265028
265057 268974

Detailed commit messages:

r258741: Note that libstand is 32-bit on amd64 and powerpc64

r261568: Build libstand as a 64-bit library on amd64

The 32-bit bootloaders now link against libstand.a in
sys/boot/libstand32, so there is no need to force /usr/lib/libstand.a
to be 32-bit.

r261603: Don't force efi to a 32-bit build on amd64

r261668: Build libstand as a 64-bit library on ppc64

The 32-bit bootloaders now link against libstand.a in
sys/boot/libstand32, so there is no need to force /usr/lib/libstand.a
to be 32-bit.

This is equivalent to r261568 for amd64.

r263115: Add amd64 EFI headers

r263117: Connect 64-bit boot ficl to the build

It is not yet used, but this will ensure it doesn't get broken.

r263968: Use EFI types for EFI values (silences warnings).

EFI UINTN is actually a 64-bit type on 64-bit processors.

r264078: Put each source file on a separate line

This will simplify rebasing the amd64 UEFI patch set.

r264087: Build boot/ficl as 64-bit library on amd64

The 32-bit bootloaders on amd64 now use the 32-bit version in ficl32,
as is done with libstand32. The native 64-bit ficl will be used by the
upcoming UEFI loader.

r264088: Merge efilib changes from projects/uefi

r247216: Add the ability for a device to have an "alias" handle.

r247379: Fix network device registration.

r247380: Adjust our load device when we boot from CD under UEFI.

The process for booting from a CD under UEFI involves adding a FAT
filesystem containing your loader code as an El Torito boot image.
When UEFI detects this, it provides a block IO instance that points
at the FAT filesystem as a child of the device that represents the CD
itself. The problem being that the CD device is flagged as a "raw
device" while the boot image is flagged as a "logical partition".
The existing EFI partition code only looks for logical partitions and
so the CD filesystem was rendered invisible.

To fix this, check the type of each block IO device. If it's found to
be a CD, and thus an El Torito boot image, look up its parent device
and add that instead so that the loader will then load the kernel from
the CD filesystem. This is done by using the handle for the boot
filesystem as an alias.

Something similar to this will be required for booting from other media
as well as the loader will live in the EFI system partition, not on the
partition containing the kernel.

r247381: Remove a scatalogical debug printf that crept in.

r264092: Add -fPIC for amd64

r264095: Support UEFI booting on amd64 via loader.efi

This is largely the work from the projects/uefi branch, with some
additional refinements. This is derived from (and replaces) the
original i386 efi implementation; i386 support will be restored later.

Specific revisions of note from projects/uefi:

r247380:

Adjust our load device when we boot from CD under UEFI.

The process for booting from a CD under UEFI involves adding a FAT
filesystem containing your loader code as an El Torito boot image.
When UEFI detects this, it provides a block IO instance that points at
the FAT filesystem as a child of the device that represents the CD
itself. The problem being that the CD device is flagged as a "raw
device" while the boot image is flagged as a "logical partition". The
existing EFI partition code only looks for logical partitions and so
the CD filesystem was rendered invisible.

To fix this, check the type of each block IO device. If it's found to
be a CD, and thus an El Torito boot image, look up its parent device
and add that instead so that the loader will then load the kernel from
the CD filesystem. This is done by using the handle for the boot
filesystem as an alias.

Something similar to this will be required for booting from other
media as well as the loader will live in the EFI system partition, not
on the partition containing the kernel.

r246231:

Add necessary code to hand off from loader to an amd64 kernel.

r246335:

Grab the EFI memory map and store it as module metadata on the kernel.

This is the same approach used to provide the BIOS SMAP to the kernel.

r246336:

Pass the ACPI table metadata via hints so the kernel ACPI code can
find them.

r246608:

Rework copy routines to ensure we always use memory allocated via EFI.

The previous code assumed it could copy wherever it liked. This is not
the case. The approach taken by this code is pretty ham-fisted in that
it simply allocates a large (32MB) buffer area and stages into that,
then copies the whole area into place when it's time to execute. A more
elegant solution could be used but this works for now.

r247214:

Fix a number of problems preventing proper handover to the kernel.

There were two issues at play here. Firstly, there was nothing
preventing UEFI from placing the loader code above 1GB in RAM. This
meant that when we switched in the page tables the kernel expects to
be running on, we are suddenly unmapped and things no longer work. We
solve this by making our trampoline code not dependent on being at any
given position and simply copying it to a "safe" location before
calling it.

Secondly, UEFI could allocate our stack wherever it wants. As it
happened on my PC, that was right where I was copying the kernel to.
This did not cause happiness. The solution to this was to also switch
to a temporary stack in a safe location before performing the final
copy of the loaded kernel.

r246231:

Add necessary code to hand off from loader to an amd64 kernel.

r246335:

Grab the EFI memory map and store it as module metadata on the kernel.

This is the same approach used to provide the BIOS SMAP to the kernel.

r246336:

Pass the ACPI table metadata via hints so the kernel ACPI code can
find them.

r246608:

Rework copy routines to ensure we always use memory allocated via EFI.

The previous code assumed it could copy wherever it liked. This is not
the case. The approach taken by this code is pretty ham-fisted in that
it simply allocates a large (32MB) buffer area and stages into that,
then copies the whole area into place when it's time to execute. A more
elegant solution could be used but this works for now.

r247214:

Fix a number of problems preventing proper handover to the kernel.

There were two issues at play here. Firstly, there was nothing
preventing UEFI from placing the loader code above 1GB in RAM. This
meant that when we switched in the page tables the kernel expects to
be running on, we are suddenly unmapped and things no longer work. We
solve this by making our trampoline code not dependent on being at any
given position and simply copying it to a "safe" location before
calling it.

Secondly, UEFI could allocate our stack wherever it wants. As it
happened on my PC, that was right where I was copying the kernel to.
This did not cause happiness. The solution to this was to also switch
to a temporary stack in a safe location before performing the final
copy of the loaded kernel.

r247216:

Use the UEFI Graphics Output Protocol to get the parameters of the
framebuffer.

r264115: Fix printf format mismatches

r264132: Connect sys/boot/amd64 to the build

r264208: Do not build the amd64 UEFI loader with GCC

The UEFI loader causes buildworld to fail when building with (in-tree)
GCC, due to a typedef redefinition. As it happens the in-tree GCC
cannot successfully build the UEFI loader anyhow, as it does not support
__attribute__((ms_abi)). Thus, just avoid trying to build it with GCC,
rather than disconnecting it from the build until the underlying issue
is fixed.

r264261: Correct a variable's type for 64-bit Ficl

FICL_INT is long.

r264262: Fix printf args for 64-bit archs

r264263: Add explicit casts to quiet warnings in libefi

r264319: Fix EFI loader object tree creation on 9.x build hosts

Previously ${COMPILER_TYPE} was checked in sys/boot/amd64, and the efi
subdirectory was skipped altogether for gcc (since GCC does not support
a required attribute). However, during the early buildworld stages
${COMPILER_TYPE} is the existing system compiler (i.e., gcc on 9.x build
hosts), not the compiler that will eventually be used. This caused
"make obj" to skip the efi subdirectory. In later build stages
${COMPILER_TYPE} is "clang", and then the efi loader would attempt to
build in the source directory.

r265028 (dteske): Disable the beastie menu for EFI console ...

which doesn't support ANSI codes (so things like `at-xy', `clear', and
other commands don't work making it impossible to generate a living
menu).

r265057 (nwhitehorn): Turn off various fancy instruction sets...

as well as deduplicate some options. This makes the EFI loader build
work with CPUTYPE=native in make.conf on my Core i5.

r268974 (sbruno): Supress clang warning for FreeBSD printf %b and %D formats

Relnotes: Yes
Sponsored by: The FreeBSD Foundation

260096 30-Dec-2013 dim

MFC r257532 (by adrian):

Fix this build for clang.

MFC r259730:

To avoid having to explicitly test COMPILER_TYPE for setting
clang-specific or gcc-specific flags, introduce the following new
variables for use in Makefiles:

CFLAGS.clang
CFLAGS.gcc
CXXFLAGS.clang
CXXFLAGS.gcc

In bsd.sys.mk, these get appended to the regular CFLAGS or CXXFLAGS for
the right compiler.

MFC r259913:

For libstand and sys/boot, split off gcc-only flags into CFLAGS.gcc.

MFC r259927:

Fix pc98 build, by also forcing COMPILER_TYPE in sys/boot/pc98/boot2's
Makefile.

Pointy hat to: dim

256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


254155 09-Aug-2013 marcel

Fix the freaddir implementation for the stand-alone interpreter.

Bug pointed out by: Jan Beich <jbeich@tormail.org>


253862 01-Aug-2013 marcel

Fix the build of the testmain target. This target compiles a Forth
interpreter that can be run on the system and as such cannot be
compiled against libbstand. On the one hand this means we need to
include the usual headers for system interfaces that we use and
on the the other hand we can only use standard system interfaces.

While here, define local variables only when needed to make this
WARNS=2 clean on amd64.

PR: 172542
Obtained from: peterj@
Pointed out by: Jan Beich <jbeich@tormail.org>


253172 10-Jul-2013 marcel

Add 2 builtin words for working with directories:
isdir? ( fd -- bool )
freaddir ( fd -- ptr len TRUE | FALSE )

The 'isdir?' word returns `true' if the file descriptor is for a
directory and `false' otherwise.

The 'freaddir' word reads the next directory entry and if successful,
returns its name and 'true'. Otherwise 'false' is returned.

These words give the loader the ability to scan directories and read
files contained in them for 'rc.d'-like flexibility in handling which
modules to load and/or which tunables to set.

Obtained from: Juniper Networks, Inc.


249223 07-Apr-2013 kientzle

The CELL fields can be various integer types depending on the platform
(ARM uses 'int' and 'unsigned'; i386 uses 'long' and 'unsigned long'),
so we need explicit casts to long and unsigned long here to ensure
that the result matches the printf %ld and %lx specifiers.


249222 07-Apr-2013 kientzle

Fix two broken macros.


244531 21-Dec-2012 rpaulo

Build a 64 bit version of the FICL library. This is need for a 64 bit
EFI bootloader (amd64 only for now).

This is not yet connected to the build.


241785 20-Oct-2012 avg

boot: use -march=i386 for both i386 and amd64 builds

.. so that consistent compilation algorithms are used for both
architectures as in practice the binaries are expected to be
interchangeable (for time being).
Previously i386 used default setting which were equivalent to
-march=i486 -mtune=generic.
The only difference is using smaller but slower "leave" instructions.

Discussed with: jhb, dim
MFC after: 29 days


238795 26-Jul-2012 ache

Try to avoid all files dependence on the modification time of the large and
often modified directory created symbolic links points to - it cause
unnecessary full rebuilds each time make runs when directory is changed.
So do it only if symbolic link does not exists, which usually means that
objdir is clean anyway.

MFC after: 1 week


231042 05-Feb-2012 rpaulo

Fix clang warnings.


223695 30-Jun-2011 dfr

Add a version of the FreeBSD bootloader which can run in userland, packaged
as a shared library. This is intended to be used by BHyVe to load FreeBSD
kernels into new virtual machines.


218909 21-Feb-2011 brucec

Fix typos - remove duplicate "the".

PR: bin/154928
Submitted by: Eitan Adler <lists at eitanadler.com>
MFC after: 3 days


217033 05-Jan-2011 dim

On i386 and amd64, consistently use the following options whenever we
want to avoid using any "advanced" CPU features:

-mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -msoft-float


217030 05-Jan-2011 dim

Remove an empty .if/.endif pair from sys/boot/ficl/Makefile that I
forgot to cleanup in the last commit.


217029 05-Jan-2011 dim

In lib/libstand, sys/boot/ficl and sys/boot/zfs, -mno-sse3 should also
be used for amd64, not just for i386.


211678 23-Aug-2010 imp

MF tbemd: Minor tweaks, prefer MACHINE_CPUARCH generally to MACHINE_ARCH (which simplifies some powerpc/powerpc64 ifs)


209920 12-Jul-2010 nwhitehorn

Provide support in loader for booting 64-bit PowerPC kernels. Like amd64,
64-bit PowerPC kernels are loaded by a 32-bit loader, since nearly all
powerpc64 firmwares execute in 32-bit mode.


209361 20-Jun-2010 brian

Add a missing prototype

PR: 145232
Submitted by: gcooper
MFC after: 1 week


188824 19-Feb-2009 imp

Add basic mips support. This has been compile tested only.


183878 14-Oct-2008 raj

Initial support of loader(8) for ARM machines running U-Boot.

This uses the common U-Boot support lib (sys/boot/uboot, already used on
FreeBSD/powerpc), and assumes the underlying firmware has the modern API for
stand-alone apps enabled in the config (CONFIG_API).

Only netbooting is supported at the moment.

Obtained from: Marvell, Semihalf


172664 15-Oct-2007 nyan

Optimize for size on pc98. It enables to boot a kernel again.

I don't know what's wrong (loader, boot2 or others), but this change is
effective.

Tested by: NAKAJI Hiroyuki
MFC after: 3 days


167850 23-Mar-2007 jkim

Update to FICL 3.03 (the last release before FICL4 rewrite).

The relevant changes for FreeBSD (excerpt from the release note):

* Newly implemented CORE EXT words: CASE, OF, ENDOF, and ENDCASE. Also
added FALLTHROUGH, which works like ENDOF but jumps to the instruction
just after the next OF.
* Bugfix: John-Hopkins locals syntax now accepts | and -- in the comment
(between the first -- and the }.)
* Bugfix: Changed vmGetWord0() to make Purify happier. The resulting
code is no slower, no larger, and slightly more robust.


162717 28-Sep-2006 ru

Add -march=i386 to fix amd64 build by generating the same code
as i386 would do.


161454 18-Aug-2006 imp

Copy powerpc ficl files sysdep files (maybe we need a common one)


158466 12-May-2006 jhb

Remove Alpha bits for ficl.


148046 15-Jul-2005 ache

Add -mno-sse3 for prescott/nocona


146828 31-May-2005 obrien

Ensure GCC does not use FP registers in integer code.
I really don't like cluttering up the compiler invocation,
but this bigger hammer will fix reported problems for now.


138223 30-Nov-2004 scottl

Instead of just not defining a bunch of words when TESTMAIN is set, provide
stubs that at least handle the stack correctly. This makes it much easier to
experiment with loader scripts from userland.


136910 24-Oct-2004 ru

For variables that are only checked with defined(), don't provide
any fake value.


134148 22-Aug-2004 marcel

Part 2 of fixing the boot code: gcc 3.4 fixes.

The whole problem seems to be size. Which is odd, because it is said
that size doesn't matter. Anyway... Add -Os to strategic places in the
makefile to have the final loader be as mall as possible. This seems
to be enough to make it work. For now... I think something is more
fundamentally wrong; or something more fundamental is wrong. Potato,
potaato.


125556 07-Feb-2004 ru

Untangle building of AMD64 boot code.

Tested on: amd64 (sledge)


123374 10-Dec-2003 grehan

Disable floating point on PowerPC for the ficl library.


123373 10-Dec-2003 grehan

Define 'arch-powerpc'


123372 10-Dec-2003 grehan

FICL system-dependent files for powerpc. Taken from the i386 versions,
which were the most relevant.


117081 30-Jun-2003 ru

bsd.lib.mk,v 1.143 no longer uses ld(1) directly to strip
symbols from intermediate object files, so these hacks to
get AMD64 compile are no longer needed.

Tested on: sledge.FreeBSD.org


116864 26-Jun-2003 peter

Build on amd64. Yes, I know this isn't particularly nice.


116000 08-Jun-2003 nyan

Set arch-pc98 env to true for pc98.


108470 30-Dec-2002 schweikh

Fix typos, mostly s/ an / a / where appropriate and a few s/an/and/
Add FreeBSD Id tag where missing.


102657 31-Aug-2002 scottl

Make ficl work on sparc64. The assumption that int == long == void * is
very pervasive in this code. This fixes a few of those assumptions and
band-aids over some others.

Tested on: ia32 alpha sparc64

Reviewed by: peter jake (in concept)


102215 21-Aug-2002 scottl

Fix for stand-alone compiling

Reviewed by: mini


96962 19-May-2002 jake

MD ficl files for sparc64.


96755 16-May-2002 trhodes

More s/file system/filesystem/g


96513 13-May-2002 ru

Removed now unused INTERNALSTATICLIB.
INTERNALLIB now implies NOPIC and NOPROFILE.
Removed gratuitous NOMAN.


96455 12-May-2002 obrien

Back out last commit. I expect our bsd.*.mk gods to remove the need for
defining so many extra things in addition to INTERNALLIB. We don't like
repetitive C code and we shouldn't for make code either.


96415 11-May-2002 obrien

NOPIC, NOPROFILE, NOMAN, and INTERNALSTATICLIB are redundant when using
INTERNALLIB now.


96342 10-May-2002 obrien

-ffreestanding is the word.
(also resort some CFLAGS such that the more "important" value are first so
they are easier to see)


96261 09-May-2002 obrien

Partical style cleanup.


94290 09-Apr-2002 dcs

Upgrade to FICL version 3.02. Anything wrong is my fault, everything right is
due Jon Mini.

PR: 36308
Submitted by: Jon Mini <mini@haikugeek.com>
MFC after: 4 weeks


87636 11-Dec-2001 jhb

- Add 'fwrite' and 'fseek' words for writing to and seeking on files.
- Change the 'fopen' keyword to accept a mode parameter. Note that this
will break existing 4th scripts that use fopen. Thus, the loader
version has been bumped and loader.4th has been changed to check for a
sufficient version on i386 and alpha. Be sure that you either do a full
world build or install or full build and install of sys/boot after this
since loader.old won't work with the new 4th files and vice versa.

PR: kern/32389
Submitted by: Jonathan Mini <mini@haikugeek.com>
Sponsored by: ClickArray, Inc.


87265 03-Dec-2001 dcs

Remove unused filed.

PR: kern/32395
Submitted by: Jonathan Mini <mini@haikugeek.com>


85934 03-Nov-2001 obrien

Revert rev 1.7 which moved us away from POSIX character classes.
The community feels our base AWK must handle them.


85842 01-Nov-2001 obrien

Substitute "[:space:]" with the character constants it expands to.
This was a silent 'failure' when using Bell-Labs awk.

Submitted by: David Wolfskill <david@catwhisker.org>


82960 04-Sep-2001 dfr

Avoid an alignment fault on 64bit architectures.

Reviewed by: dcs


82941 04-Sep-2001 dfr

Add definition for arch-ia64.


82940 04-Sep-2001 dfr

Add ia64 system dependancies.


77443 29-May-2001 dcs

Turn dictthreshold and dictincrease into cell-sized variables, so
they can be used with cell operators like !.

As I did this, I noticed the whole CELL thing might have problems with
big endian architectures with sizeof(int)!=sizeof(void*).


77268 27-May-2001 dcs

As in with ":", check dictionary space and increase it if necessary before
"create".


76421 10-May-2001 dcs

FICL 2.05 has a flawed definition of BASE. Fix it.

Spotted by: Peter Jeremy <peter.jeremy@alcatel.com.au>


76116 29-Apr-2001 dcs

Bring in ficl 2.05.

This version has a step debugger, which now completely replaces the
old trace feature. Also, we moved all of the FreeBSD-specific MI
code to loader.c, reducing the diff between this and the official
FICL distribution.


73349 02-Mar-2001 ru

setlocale(3) has been fixed to match POSIX standard:
LC_ALL takes precedence over other LC_* envariables.


69430 01-Dec-2000 ache

Cosmetique: don't use localized `date`


68729 14-Nov-2000 obrien

Don't use the Gawkism strftime(). Pass in the date stamp on the awk
command line instead.

Approved by: dcs


65698 10-Sep-2000 dfr

Fix this so that we actually define HAVE_PNP when its available.


65677 10-Sep-2000 dfr

Only build PnP parts if the platform supports PnP.


65617 08-Sep-2000 dcs

Add the infrastructure necessary to handle PnP from a Forth script.

Also, export the file_findfile() function. Again, this is taken from
work in progress but frozen for the time being. Since it works, I'd
rather commit and remove any uglyness later than hide it on my tree.


64550 11-Aug-2000 peter

Add -mpreferred-stack-boundary=2 to CFLAGS for i386. This and libstand
reduces /boot/loader from 163840 bytes to 155648 and pxeboot from 165888
bytes to 157696 bytes.


61586 12-Jun-2000 dcs

Fix REFILL. It must throw RESTART instead of OUTOFTEXT so that
execution can take place at the point where it stopped after the
input buffer has been refilled.

Add ANS Forth CORE EXT and FILE word SOURCE-ID.


61584 12-Jun-2000 dcs

Make abort" functional in interpret mode. This behavior is undefined
by ANS Forth standard, but it's useful.

Also, define the constant true in a more strict way. C might garantee
2-complement math, but Forth doesn't.


61583 12-Jun-2000 dcs

Make comment reflect reality.


61374 07-Jun-2000 dcs

Add setenv, getenv, setenv?, unsetenv, copyin and copyout to FICL.


61372 07-Jun-2000 dcs

Remove a bug that caused local variables declarations in the format
{ | internal -- } to be rejected.


61182 02-Jun-2000 dcs

Apply a number of fixes for the Alpha platform.


61177 02-Jun-2000 dcs

Add something that was missing from the original 2.04 distribution.


61149 01-Jun-2000 dcs

Add "int" sized manipulation words.


60962 26-May-2000 dcs

Strip spaces and comments more agressively.


60959 26-May-2000 dcs

Bring in FICL 2.04. No bump of loader version is required by this
commit.


60480 12-May-2000 peter

Stop libficl from using floating point registers - this was cauing
dictDelete() to fault early on the Alpha and was the original cause of
the Alpha ficl failures.


60014 05-May-2000 dcs

Lay the groundwork for on-demand dictionary expansion.


60007 04-May-2000 dcs

Correct a bug whereby allocations to the dictionary would not be allowed
unless four times the space requested was available.


60000 04-May-2000 dcs

Add heap?, so we can tell how much free space we have left.


56719 28-Jan-2000 dcs

Implement a machine-independent (word size-independent) FICL_TRUE.


56718 28-Jan-2000 dcs

ANS Forth for logical not is 0=, not invert. Replace wrong usage.


56717 28-Jan-2000 dcs

Add testmain.o to CLEANFILES.


56716 28-Jan-2000 dcs

Try my hand again at removing ugly testmain target.


53777 27-Nov-1999 dcs

Zeroes structure before using it.


53636 23-Nov-1999 dcs

Revert ill-considered simplification in 1.13.

Pointed by: peter


53635 23-Nov-1999 dcs

Improve Makefile by using .PATH.

Taught by: peter


53634 23-Nov-1999 dcs

Improve on ficl port to alpha.

Files sysdep.[ch] are now in ${MACHINE_ARCH} subdirectory. Internal
#if's used to identify the platform where removed.

Make rule for target testmain was greatly simplified, because it was
easier simplifying it than changing it to support the new location of
sysdep.[ch].

(a repo-copy was done on sysdep.[ch], of course)


53633 23-Nov-1999 dcs

(Hopefully) make all necessary changes for ficl to support alpha.


51789 29-Sep-1999 dcs

Fix world-breaking bug, add $FreeBSD$ tag.

This happened to be my first "for real" broken world. I had broken
it once before, but nobody noticed, so it didn't count.

So, how do I get the "I broke world and all I got was the lousy t-shirt"
t-shirt?


51786 29-Sep-1999 dcs

Bring in ficl version 2.03. No version bump for loader.


50477 28-Aug-1999 peter

$Id$ -> $FreeBSD$


45355 06-Apr-1999 dcs

Reactivate trace! after making it egcs-friendly.


44839 17-Mar-1999 dcs

Disable trace! until it gets fixed.


44774 15-Mar-1999 dcs

Remove redundant code.


44322 28-Feb-1999 dcs

Make $ print different lines in, well, different lines.


43801 09-Feb-1999 jkh

Remove dictHashSummary internal function; it used doubles.

Submitted by: Daniel C. Sobral <dcs@newsguy.com>


43615 04-Feb-1999 dcs

Make FICL_TRACE default.

Add freebsd.fr, for FreeBSD specific forth source. Add $ and %, to
replace the lost @ and - functionality of include. $ has the opposite
behavior of @ though, since the default behavior was inverted.


43613 04-Feb-1999 dcs

Make ficlExec recursive. This removes vmReset and vmQuit from the
error cases, but the replacement should be doing everything they
did, except what did shouldn't be doing, and might do a little more
they ought to be doing.


43602 04-Feb-1999 dcs

Fix ficlExecFD to take kern/9412 changes into account. Also modify it
not to vmThrow errors. This is not what the comments say it does, and
it doesn't work when there is no ficlExec environment (like it's only
use in sys/boot/common/interp_forth.c).

PR: bin/9772


43601 04-Feb-1999 dcs

The trace facility was full of bugs. Correct that by using the
right variable.

PR: bin/9756


43599 04-Feb-1999 dcs

The previous fix for "type" was absolutely lousy. Not only the buffer
allocated was not big enough, but it ended up to being used where it
was supposed to be used. The person who did that ought to be shot, but
since I'm a good person, I'll forgive myself...

PR: bin/9743


43598 04-Feb-1999 dcs

Add conditional compilation facilities to ficl. This had been previously
committed to RELENG_3 instead of HEAD, so let's HEAD catch up.

PR: bin/9662


43139 24-Jan-1999 msmith

From the PR:

I added a FICL_TRACE-conditioned trace facility based on "see".
It is ugly because words' functions are almost all static, and ficlExec,
where the trace has to be located, can't get their pointers. So, #ifdef
this staticization, and add most of see's body into ficlExec. Duplication
of code, uglyness, etc. But it is cleanly #ifdef'ed, and works like a
charm.

It does not provide "step" facility, though, just trace. It is
tunable at run-time through "trace!". If anyone (most likely me :) ever
wants a step facility, I'll add it. Should be easy.

PR: bin/9652
Submitted by: "Daniel C. Sobral" <dcs@newsguy.com>


43135 24-Jan-1999 msmith

From the PR:

FICL's TYPE copies the counted string to HERE, as abial has
remarked. Answering to abial's question, this is NOT garanteed to have
enough space.
...
We have dynamic memory. Even before memory-alloc got in, we
already had dynamic memory. Use it, then! (ficlMalloc is sysdep, so I
suppose that's why it was not used for TYPE; ficl is probably designed
to work without a working ficlFree).

Submitted by: "Daniel C. Sobral" <dcs@newsguy.com>


43078 22-Jan-1999 msmith

Add EXCEPTION word set.

Make TIB handling use buffer size to conform with ANS Forth.

Add ANS MEMORY-ALLOC word set.

See the PRs for extensive details.

PR: kern/9412 kern/9442 kern/9514
Submitted by: PRs from Daniel Sobral <dcs@newsguy.com>


42807 18-Jan-1999 msmith

Transition from using Perl to using awk for our text-manipulation
needs. This removes the dependancy on Perl for the generation of the
loader, allowing the world to be built on a perl-free system.

Submitted by: Joe Abley <jabley@clear.co.nz>


42679 14-Jan-1999 abial

Change counter-intuitive pc@ and pc! to inb and outb.

Submitted by: jkh


42634 13-Jan-1999 abial

Add words "pc!" and "pc@" which allow to manipulate I/O ports. This can
be helpful when directly fiddling with PC hardware.

Also, define "arch-i386" appropriately, as suggested by Daniel C. Sobral.


42209 31-Dec-1998 abial

Add support for some FACILITY words:

key? ( -- flag) \ check to see if there's a key to be read from input
ms ( u -- ) \ wait that many milliseconds
seconds ( -- u ) \ get number of seconds from midnight.

'words' now outputs the list page by page - this probably should go
through libstand's pager, but will have to wait for closer integration of
built-ins with Forth...

Submitted partially by: W Gerald Hicks <wghicks@bellsouth.net>


42001 22-Dec-1998 abial

Add new word ".#" which acts like "." but doesn't output a space separator.
I found it impossible to output parametrized strings like "\033[%d;%dH"
without building them first in pad area.


40995 07-Nov-1998 jkh

o Add proper stack checking to all file words
o add fkey and fread
o eliminate fexists now that this can be expressed in HLL forth
( : fexists fopen dup -1 <> if fclose 1 else drop 0 then ; ) :-)

Once we get the ability to write files, it should be possible to do
stand-alone rescue work from the 3rd stage boot. :)


40989 07-Nov-1998 jkh

Eliminate much code cruft by extending simple file I/O API to include
fopen and fclose.


40987 07-Nov-1998 jkh

Take init out of here - it's a layering violation.


40982 07-Nov-1998 jkh

OK, fload/fexec work properly when both compiling and interpreting
now. Gack.


40978 06-Nov-1998 jkh

switch words to default mode.


40977 06-Nov-1998 jkh

Submit better fix to the prompt bug.


40976 06-Nov-1998 jkh

Make fexists/fload work with existing string literals instead. Doing
my own string literal handling is just too wonky.


40971 06-Nov-1998 jkh

Argh, I had this right[er] before. More commits to follow.


40951 06-Nov-1998 jkh

Use proper literal names.


40949 06-Nov-1998 msmith

Don't not print the prompt string; not doing this has funny side-effects.
Make the prompt an empty string instead.


40929 05-Nov-1998 jkh

Remember a bit more of my forth and do:

o Add fexists word to check for the presence of a file
o make fexists and fload immediate words which DTRT both interpreted
and compiled (doh!)
o add an init word which gets run at bootstrapping time to do extra
post-coldload initialization (in the default implementation, we
look for /boot/boot.4th and load it if found).


40927 05-Nov-1998 jkh

1. rebuild all elements of testmain properly for safety.
2. add fload and key prims for doing simple file and terminal I/O, respectively


40924 05-Nov-1998 msmith

Explicitly invoke perl to run the softwords.pl script in case the
script is not executable.
Submitted by: Don Lewis <Don.Lewis@tsc.tdk.com>


40890 04-Nov-1998 msmith

Improve the assertion testing for successful softword compilation.
The excessive use of assert() vs. robust error checking is annoying.


40883 04-Nov-1998 msmith

Fix includes; we were still pulling in <stdlib.h> in some places.
Support building a standalone interpreter with 'make testmain', remove
win32 and egregious gets() in testmain.c


40876 04-Nov-1998 msmith

Make this work in the libstand environment; don't use stdio/stdlib headers.


40843 03-Nov-1998 msmith

Add the Ficl (Forth Inspired Command Language) interpreter. If all goes well,
this will allow us to manage bloat in the loader by using a bytecoded HLL
rather than lots of C code. It also offers an opportunity for vendors
or others with special applications to significantly customise the boot
process without having to commit to a divergent code branch.

This early commit is to allow others to experiment with the most effective
mechanisms for integrating FICL with the loader as it currently stands.

Ficl is distributed with the following license conditions:

"Ficl is freeware. Use it in any way that you like, with the understanding
that the code is not supported."

All source files contain authorship attributions.

Obtained from: John Sadler (john_sadler@alum.mit.edu)