Commit Graph

848 Commits

Author SHA1 Message Date
Blue Swirl
80cead52eb Remove unused strstr()
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@746 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-15 16:42:59 +00:00
Blue Swirl
28cff5734c Remove unused memscan()
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@745 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-15 16:42:56 +00:00
Blue Swirl
5221245af9 Remove unused bcopy()
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@744 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-15 16:42:54 +00:00
Blue Swirl
fd569ca2f8 Remove unused strspn()
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@743 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-15 16:42:51 +00:00
Blue Swirl
e14d5b08e9 Remove unused strtok()
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@742 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-15 16:42:49 +00:00
Igor V. Kovalenko
2d74db1de3 Commit revised version of Igor Kovalenko's patch for detecting whether dictionary allocations have overrun the memory
buffer allocated for them.

Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@741 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-12 20:02:53 +00:00
Mark Cave-Ayland
2f18dff299 Revert r739 since the update translations code only updates the OpenBIOS properties and not the real MMU translations.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@740 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-12 10:03:05 +00:00
Mark Cave-Ayland
35a7ef00a2 Don't try and update the MMU mappings when claiming physical memory. This is probably related to r737 and seems to solve an
issue whereby Forth starts doing strange things just after attemping a claim on physical memory resource.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@739 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-10 11:08:57 +00:00
Mark Cave-Ayland
b265b42d58 Slight correct to r736 so that the number of getprop arguments is correctly displayed.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@738 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-08 21:31:44 +00:00
Mark Cave-Ayland
ce38a05886 According to the OF spec, any calls to claim made through the /memory node should not attempt to add a memory translation. This
solves a problem in Milax boot whereby the boot loader was attempting to map the address after it had already been done.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@737 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-08 21:22:39 +00:00
Mark Cave-Ayland
e5e7d12503 Fix bug when DEBUG_CIF is enabled and getprop is called with nret set to zero. Originally the code tried to use the size
returned from the CIF, but with nret set to zero then the size argument is never pushed onto the stack and so the size would be 
set to whatever junk was left in the argument block. Change the code to use the size expected by the client instead.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@736 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-08 21:19:09 +00:00
Mark Cave-Ayland
aa6519e1f2 Fix incorrect stack (dropping one too many items) when a phandle of 0 is passed into getprop CIF.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@735 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-05 19:19:37 +00:00
Mark Cave-Ayland
f21a9ceb00 Partially fix up the OpenBIOS PPC build. While the code technically works, even with this fix in place the PPC console output
disappears when booting a FC12 test ISO directly. Interestingly enough, if the equivalent "load" and "go" commands are entered 
manually then the console output works fine and the ISO can boot?! So there is still an issue with the console not being 
initialised correctly somewhere.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@734 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-05 18:41:11 +00:00
Mark Cave-Ayland
a757d43d04 Another couple of client interface fixes:
i) Ensure that the CIF caller's idea of pb->nret is always respected, but if there is a mismatch then log a warning if DEBUG_CIF 
is enabled, then correct the stack and continue.

ii) Correct the code path for call-method and interpret to ensure they ignore the extra status variable pushed onto the stack by 
client-call-iface.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@733 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-03 13:03:39 +00:00
Mark Cave-Ayland
3111a2293b Fix two errors related to argument passing in the client interface:
i) client-call-iface did not set a return value of 0 on success; hence the top stack argument was dropped as part of the status 
check causing an off-by-one error.

ii) instead of setting pb->nret to be the number of arguments returned, the (random) value being passed in was being used to 
control the number of arguments being returned.


Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>



git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@732 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-03 08:25:47 +00:00
Blue Swirl
db3348538a Fix build
CC    target/libc/vsprintf.o
cc1: warnings being treated as errors
../libc/string.c: In function 'strncasecmp':
../libc/string.c:518: warning: '__res' may be used uninitialized in this function

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@731 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 14:25:37 +00:00
Mark Cave-Ayland
85412826ed Add an extra linefeed in front of the jump message in (go) to make the debug output a bit tidier.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@730 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 14:17:45 +00:00
Mark Cave-Ayland
8cfdbc4b3d Enable (go) for SPARC64 and also force register o0 to be 0 as detailed in the OF specification.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@729 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 14:14:34 +00:00
Mark Cave-Ayland
bedc10adae Now that we have a C version of go available, rework client.fs so that it will automatically detect if a platform has execution
capability based upon the existence of the lower level (go) word. Also add standard ELF image support to (go) for SPARC32, 
SPARC64 and x86.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@728 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 14:03:38 +00:00
Mark Cave-Ayland
a025a2e653 Since the original boot code had been previously refactored to make use of saved-program-state, we can take the existing code
and with only slight modification use it as a C implementation of the go word.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@727 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 13:29:12 +00:00
Mark Cave-Ayland
1b273803c2 The new loader APIs in libopenbios already have routines to detect the type of executable at a given address and react
accordingly. Hence since the loaders are currently written in C, it makes more sense to drop down into C and re-use the same 
code rather than have a second implementation in Forth.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@726 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 13:01:10 +00:00
Mark Cave-Ayland
9661f91432 Create an initialisation function called openbios_init(), similar to modules_init(), for use by libopenbios and make sure all
architectures are updated to use it. This is required to allow binding of C functions into Forth by libopenbios (i.e. cross 
architecture) rather than having to update everything in every arch/*/ initialisation file.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@725 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 11:41:35 +00:00
Mark Cave-Ayland
075e485628 Finish the use of saved-program-state within the loaders. This involves 2 changes: firstly ensure that the saved-program-state
is being set correctly in all of the loaders, and secondly we change the bootinfo loader so that the bootscript is executed as 
part of init-program and not go. This seems to reflect the idea of execute-buffer in OpenBOOT that any Forth code is executed 
directly during init-program, rather than being deferred to go.

Note: the latter change is fairly simple, but I have been unable to test it myself other than verifying it compiles.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@724 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 10:28:48 +00:00
Mark Cave-Ayland
de891e0244 Move the bootinfo loader into libopenbios, refactoring and adding the new CONFIG_LOADER_BOOTINFO as appropriate.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@723 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 09:18:51 +00:00
Mark Cave-Ayland
7fdf25e044 Switch the bootinfo-loader over to using strncasecmp rather than strcasecmp which should be much safer on binary buffersi of
unknown content/length.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@722 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-02 08:33:07 +00:00
Alexander Graf
41dd5272ca [PPC] Make mac-io ata interrupts depend on local, not global index
In commit r680 I incorrectly made the interrupt number of the mac-io ata
device depend on its global index. Of course the interrupt only depends on
its index inside the mac-io chip.

So let's fix that up and make Qemu's oldworld emulation work again!

Signed-off-by: Alexander Graf <agraf@suse.de>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@721 f158a5a8-5612-0410-a976-696ce0be7e32
2010-04-01 23:40:21 +00:00
Mark Cave-Ayland
d4451ae216 Move the *_init_program() functions into the main loader source files so that everything is in one place. Part of this
involves taking the existing parts of the XCOFF loader and putting them into a new loader file xcoff_load.c. Also fix a 
dependency order change these changes introduce when building openbios-unix.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@720 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-28 23:47:36 +00:00
Mark Cave-Ayland
c60fad9646 Add is_fcode(), is_forth() and is_aout() functions which take a pointer to an area of memory which may contain a valid loader
image.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@719 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-28 20:55:10 +00:00
Blue Swirl
dc5c530885 Add missing newline
Fixes build:
  CC    target/arch/sparc64/boot.o
In file included from ../arch/sparc64/boot.c:14:
../include/libopenbios/forth_load.h:22:28: error: no newline at end of file

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@718 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-28 20:48:53 +00:00
Mark Cave-Ayland
f78fec5713 Introduce a set of CONFIG_LOADER_* configuration options to allow each architecture to specify the loaders that are to be used.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@717 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-28 20:18:30 +00:00
Blue Swirl
63db85036b Fix linker warning
There were two global symbols named 'entry':
  LINK  openbios-builtin.elf
libsparc32.a(entry.o): warning: definition of `entry' overriding common
libsparc32.a(boot.o): warning: common is here

Add 'static' to hide the boot.c one.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@716 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 13:20:54 +00:00
Blue Swirl
5fb589b003 Add missing newlines
Fixes build:
In file included from ../arch/sparc64/boot.c:12:
../include/libopenbios/aout_load.h:24:27: error: no newline at end of file
In file included from ../arch/sparc64/boot.c:13:
../include/libopenbios/fcode_load.h:22:28: error: no newline at end of file

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@715 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 13:20:52 +00:00
Mark Cave-Ayland
0933f8c540 Move the Fcode loader from arch/*/fcodeload.c to libopenbios/fcode_load.c.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@714 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 12:09:16 +00:00
Mark Cave-Ayland
08ee7445f1 Fix a couple of minor omissions (and an incorrect switch-arch alteration) from the previous commit.
git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@713 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 11:59:43 +00:00
Mark Cave-Ayland
126f9ee43e Move the Forth loader forthload.c from arch/*/forthload.c to libopenbios/forth_load.c. While the Forth loader source was
included and built as part of the SPARC64 and SPARC32 builds, it was never actually invoked in the boot sequence. Hence this 
patch maintains the existing behaviour in that only X86 builds included the Forth loader.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@712 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 11:53:59 +00:00
Mark Cave-Ayland
f02d2bde53 Move the a.out loader from arch/*/aoutload.c into libopenbios as aout_load.c.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@711 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 11:30:14 +00:00
Mark Cave-Ayland
1264ad95d2 Create a brand new ELF loader based upon arch/*/elfload.c and libopenbios/elfload.c combined together in libopenbios. This means
that each arch no longer needs its own ELF loader implementation.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@710 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-27 10:57:03 +00:00
Mark Cave-Ayland
6dd0574272 Switch the loaders for x86, sparc64 and sparc32 over to use the new saved-program-state in boot() rather than try to execute the
device payload directly. This is the first stage in isolating the OF "load" and "go" words, and in preparation for moving the 
majority of the loaders into libopenbios.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@709 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-26 22:33:50 +00:00
Mark Cave-Ayland
8a6d445d38 Introduce the concept of the OF saved-program-state structure and modify all of the loaders (except PPC) to make use of it.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@708 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-26 21:17:32 +00:00
Mark Cave-Ayland
d66540542d Remove loadfs.c and loadfs.h from all of the various architectures. They appear to be almost non-existent wrappers which add an
extra layer of indirection without much benefit.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@707 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-26 20:25:04 +00:00
Mark Cave-Ayland
34d5a76f7e Revert the parts of the last commit which changed the exception function to use an exception pointer as it isn't really
required. Update forthstrap to add a new -c option that when specified will direct the Forth kernel console output to a file 
and integrate this into the build system. By default, when a dictionary is built using a base dictionary then a new log file 
called <dict>-console.log will be generated to help debugging if the build fails.

Also update the exception handler in kernel/bootstrap.c so that it matches the entire range of error codes in 
forth/bootstrap/interpreter.fs.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@706 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-25 21:14:00 +00:00
Mark Cave-Ayland
a288b3044b Change the sysdebug exception() callback so that it is now a function pointer, rather than a function. This enables us to setup an appropriate exception handler
for the task in hand; in particular it allows us to distinguish between an error that occurs when attempting to execute a base dictionary, and an error that 
occurs when interpreting source.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@705 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-24 11:49:41 +00:00
Mark Cave-Ayland
5c73290696 Add source file and line number tracking to forthstrap to allow the user to locate forth errors much more easily. An example of the new output is given below:
build@zeno:~/src/openbios/openbios-devel.pre$ ./config/scripts/switch-arch cross-ppc; make
Configuring OpenBIOS on amd64 for cross-ppc
Initializing build tree obj-ppc...ok.
Creating target Makefile...ok.
Creating config files...ok.
Building OpenBIOS for ppc
Building...error:
 HOSTCC host/kernel/stack.o
 HOSTCC forthstrap
  GEN   bootstrap.dict
bootstrap.fs:339 - foo is not defined.



git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@704 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-24 10:28:51 +00:00
Mark Cave-Ayland
553344a5da Change the location of the function prototype for collect_sys_info() so that it both works for x86 and is the same location as
for the amd64 build.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@703 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-17 22:20:12 +00:00
Mark Cave-Ayland
feee9b0fd5 Correct comments in kernel/primitives.c as pointed out by ProgrammingKid and Andreas Färber.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@702 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 21:40:22 +00:00
Mark Cave-Ayland
cbb3d8bf5b Fix a debug whereby the debug banner was being printed to the debug output rather than the console.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@701 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 21:35:54 +00:00
Mark Cave-Ayland
4bc97b7c9f Fix PPC build - it seems that changing the headers around was masking the fact that virt_offset was not being defined within
ppc/qemu.c compared to the other PPC builds.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@700 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 21:14:04 +00:00
Mark Cave-Ayland
10a518a7aa Only one file remains - asm.m4. I have absolutely no idea what this file is supposed to do (since it doesn't seem to be called)
so I'll move in into include/libopenbios for the time being. Anyone know what this file is used for?

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@699 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 21:02:58 +00:00
Mark Cave-Ayland
92f8310ff7 Split nvram.h into its proper two components - one for the arch-specific functions and another for the package functions.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@698 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 20:34:01 +00:00
Mark Cave-Ayland
d60e3b62a4 Commit extra files I forgot to "svn add" from the previous commit :(
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>


git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@697 f158a5a8-5612-0410-a976-696ce0be7e32
2010-03-14 20:19:46 +00:00