[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
hurd-l4 ./configure.ac libl4/l4/compat/types.h ...
From: |
Marcus Brinkmann |
Subject: |
hurd-l4 ./configure.ac libl4/l4/compat/types.h ... |
Date: |
Tue, 09 Sep 2003 17:43:13 -0400 |
CVSROOT: /cvsroot/hurd
Module name: hurd-l4
Branch:
Changes by: Marcus Brinkmann <address@hidden> 03/09/09 17:43:12
Modified files:
. : configure.ac
libl4/l4/compat: types.h
wortel : ia32-cmain.c wortel.c wortel.h
Added files:
physmem : Makefile.am README ia32-cmain.c ia32-crt0.S
output.c output.h physmem.c physmem.h
wortel : README
Log message:
Add a simple demonstration server physmem (not a real physical memory
server at all), and support in wortel to create a new task from it and
start
it.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/configure.ac.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/compat/types.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/Makefile.am?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/README?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/ia32-cmain.c?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/ia32-crt0.S?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/output.c?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/output.h?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/physmem.c?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/physmem/physmem.h?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/wortel/README?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/wortel/ia32-cmain.c.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/wortel/wortel.c.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/wortel/wortel.h.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
Patches:
Index: hurd-l4/configure.ac
diff -u hurd-l4/configure.ac:1.5 hurd-l4/configure.ac:1.6
--- hurd-l4/configure.ac:1.5 Sun Sep 7 21:00:18 2003
+++ hurd-l4/configure.ac Tue Sep 9 17:43:12 2003
@@ -76,9 +76,10 @@
# Checks for library functions.
AC_CONFIG_FILES([Makefile
- laden/Makefile
- wortel/Makefile
libl4/ia32/Makefile libl4/Makefile
+ laden/Makefile
+ wortel/Makefile
+ physmem/Makefile
libhurd-slab/Makefile
libhurd-ihash/Makefile
doc/Makefile])
Index: hurd-l4/libl4/l4/compat/types.h
diff -u hurd-l4/libl4/l4/compat/types.h:1.1 hurd-l4/libl4/l4/compat/types.h:1.2
--- hurd-l4/libl4/l4/compat/types.h:1.1 Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/compat/types.h Tue Sep 9 17:43:12 2003
@@ -1,86 +1,98 @@
-/*********************************************************************
- *
- * Copyright (C) 2001, 2002, 2003, Karlsruhe University
- *
- * File path: l4/types.h
- * Description: Commonly used L4 types
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $Id: types.h,v 1.1 2003/07/26 17:26:09 marcus Exp $
- *
- ********************************************************************/
+/* types.h - Public interface for L4 compatibility types.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Marcus Brinkmann <address@hidden>.
+
+ This file is part of the GNU L4 library.
+
+ The GNU L4 library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation; either version 2.1 of
+ the License, or (at your option) any later version.
+
+ The GNU L4 library is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU L4 library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+#ifndef _L4_TYPES_H
+# error "Never use <l4/compat/types.h> directly; include <l4/types.h> instead."
+#endif
+
+typedef l4_word_t L4_Word_t;
+typedef l4_uint64_t L4_Word64_t;
+typedef l4_word_t L4_Bool_t;
+
+
+/* Clock interface. */
+
+typedef _L4_RAW
+(L4_Word64_t, _L4_STRUCT1
+ ({
+ l4_clock_t clock;
+ })) L4_Clock_t;
+
+
+
+#define _L4_CLOCK_OP(name, op) \
+static inline L4_Clock_t \
+L4_Clock ## name ## Usec (const L4_Clock_t clock, const L4_Word64_t usec) \
+{ \
+ return ((L4_Clock_t) { .clock = clock.clock op usec }); \
+}
+
+_L4_CLOCK_OP(Add, +)
+_L4_CLOCK_OP(Sub, -)
+#undef _L4_CLOCK_OP
+
+
+#define _L4_CLOCK_OP(name, op) \
+static inline L4_Bool_t
\
+L4_Clock ## name (const L4_Clock_t clock1, const L4_Clock_t clock2) \
+{ \
+ return clock1.clock op clock2.clock; \
+}
+
+_L4_CLOCK_OP(Earlier, <)
+_L4_CLOCK_OP(Later, >)
+_L4_CLOCK_OP(Equal, =)
+_L4_CLOCK_OP(NotEqual, !=)
+#undef _L4_CLOCK_OP
+
#if defined(__cplusplus)
-static inline L4_Clock_t operator + (const L4_Clock_t &l, const int r)
-{
- return (L4_Clock_t) { raw : l.raw + r };
-}
-
-static inline L4_Clock_t operator + (const L4_Clock_t & l, const L4_Uint64 t)
-{
- return (L4_Clock_t) { raw : l.raw + t };
-}
-
-static inline L4_Clock_t operator - (const L4_Clock_t & c, const int r)
-{
- return (L4_Clock_t) { raw : c.raw - r };
-}
-static inline L4_Clock_t operator - (const L4_Clock_t & c, const L4_Uint64 r)
-{
- return (L4_Clock_t) { raw : c.raw - r };
-}
-#endif /* __cplusplus */
-
-
-#if defined(__cplusplus)
-static inline L4_Bool_t operator < (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw < r.raw;
-}
+#define _L4_CLOCK_OP(op, type) \
+static inline L4_Clock_t \
+operator ## op ## (const L4_Clock_t& clock, const type usec) \
+{ \
+ return ((L4_Clock_t) { .clock = clock.clock op usec }); \
+}
+
+_L4_CLOCK_OP(+, int)
+_L4_CLOCK_OP(+, L4_Word64_t)
+_L4_CLOCK_OP(-, int)
+_L4_CLOCK_OP(-, L4_Word64_t)
+#undef _L4_CLOCK_OP
+
+
+#define _L4_CLOCK_OP(op) \
+static inline L4_Bool_t
\
+operator ## op ## (const L4_Clock_t& clock1, const L4_Clock_t& clock2) \
+{ \
+ return clock1.clock op clock2.clock; \
+}
+
+_L4_CLOCK_OP(<)
+_L4_CLOCK_OP(>)
+_L4_CLOCK_OP(<=)
+_L4_CLOCK_OP(>=)
+_L4_CLOCK_OP(==)
+_L4_CLOCK_OP(!=)
+#undef _L4_CLOCK_OP
-static inline L4_Bool_t operator > (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw > r.raw;
-}
-
-static inline L4_Bool_t operator <= (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw <= r.raw;
-}
-
-static inline L4_Bool_t operator >= (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw >= r.raw;
-}
-
-static inline L4_Bool_t operator == (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw == r.raw;
-}
-
-static inline L4_Bool_t operator != (const L4_Clock_t &l, const L4_Clock_t &r)
-{
- return l.raw != r.raw;
-}
#endif /* __cplusplus */
Index: hurd-l4/wortel/ia32-cmain.c
diff -u hurd-l4/wortel/ia32-cmain.c:1.2 hurd-l4/wortel/ia32-cmain.c:1.3
--- hurd-l4/wortel/ia32-cmain.c:1.2 Mon Sep 8 10:40:37 2003
+++ hurd-l4/wortel/ia32-cmain.c Tue Sep 9 17:43:12 2003
@@ -124,3 +124,79 @@
/* Never reached. */
}
+
+
+/* The following must be defined and are used to calculate the extents
+ of the laden binary itself. */
+extern char _start;
+extern char _end;
+
+
+/* Find the kernel, the initial servers and the other information
+ required for booting. */
+void
+find_components (void)
+{
+ multiboot_info_t *mbi = (multiboot_info_t *) l4_boot_info ();
+ l4_word_t start;
+ l4_word_t end;
+
+#if 0
+ debug_dump ();
+#endif
+
+ /* Load the module information. */
+ if (CHECK_FLAG (mbi->flags, 3))
+ {
+ module_t *mod = (module_t *) mbi->mods_addr;
+
+ if (mbi->mods_count > 0)
+ {
+ /* Skip the entry for the rootserver. */
+ mod++;
+ }
+
+ if (mbi->mods_count > 1)
+ {
+ physmem.low = mod->mod_start;
+ physmem.high = mod->mod_end;
+ mod++;
+ }
+ }
+
+ /* Now protect ourselves and the mulitboot info (at least the module
+ configuration. */
+ loader_add_region (program_name, (l4_word_t) &_start, (l4_word_t) &_end);
+
+ start = (l4_word_t) mbi;
+ end = start + sizeof (*mbi) - 1;
+ loader_add_region ("grub-mbi", start, end);
+
+ if (CHECK_FLAG (mbi->flags, 3) && mbi->mods_count)
+ {
+ module_t *mod = (module_t *) mbi->mods_addr;
+ int nr;
+
+ start = (l4_word_t) mod;
+ end = ((l4_word_t) mod) + mbi->mods_count * sizeof (*mod);
+ loader_add_region ("grub-mods", start, end);
+
+ start = (l4_word_t) mod[0].string;
+ end = start;
+ for (nr = 0; nr < mbi->mods_count; nr++)
+ {
+ char *str = (char *) mod[nr].string;
+
+ if (str)
+ {
+ if (((l4_word_t) str) < start)
+ start = (l4_word_t) str;
+ while (*str)
+ str++;
+ if (((l4_word_t) str) > end)
+ end = (l4_word_t) str;
+ }
+ }
+ loader_add_region ("grub-mods-cmdlines", start, end);
+ }
+}
Index: hurd-l4/wortel/wortel.c
diff -u hurd-l4/wortel/wortel.c:1.3 hurd-l4/wortel/wortel.c:1.4
--- hurd-l4/wortel/wortel.c:1.3 Mon Sep 8 10:40:37 2003
+++ hurd-l4/wortel/wortel.c Tue Sep 9 17:43:12 2003
@@ -27,6 +27,8 @@
/* The program name. */
char *program_name = "wortel";
+rootserver_t physmem;
+
/* Return the number of memory descriptors. */
l4_word_t
@@ -45,11 +47,179 @@
}
-/* True if debug mode is enabled. */
-int debug;
+static void
+load_components (void)
+{
+ if (!physmem.low)
+ panic ("No physical memory server found");
+ loader_add_region ("physmem-mod", physmem.low, physmem.high);
+
+ loader_elf_load ("physmem-server", physmem.low, physmem.high,
+ &physmem.low, &physmem.high, &physmem.ip);
+ loader_remove_region ("physmem-mod");
+}
static void
+start_components (void)
+{
+ l4_word_t ret;
+ l4_word_t control;
+ l4_msg_t msg;
+ l4_msg_tag_t msg_tag;
+ unsigned int io_map = 0;
+
+ /* Thread nr is next available after rootserver thread nr,
+ version part is 2 (rootserver is 1). */
+ l4_thread_id_t physmem_server
+ = l4_global_id (l4_thread_no (l4_myself ()) + 2,
+ 2);
+ /* The UTCB location below is only a hack. We also need a way to
+ specify the maximum number of threads (ie the size of the UTCB
+ area), for example via ELF symbols, or via the command line.
+ This can also be used to actually create these threads up
+ front. */
+ ret = l4_thread_control (physmem_server, physmem_server, l4_myself (),
+ l4_nilthread, (void *) 0x2000000);
+ if (!ret)
+ panic ("Creation of initial physmem thread failed");
+
+ /* The UTCB area must be controllable in some way, see above. Same
+ for KIP area. */
+ ret = l4_space_control (physmem_server, 0,
+ l4_fpage_log2 (0x2400000, l4_kip_area_size_log2 ()),
+ l4_fpage_log2 (0x2000000, 14),
+ l4_anythread, &control);
+ if (!ret)
+ panic ("Creation of physmem address space failed");
+
+ ret = l4_thread_control (physmem_server, physmem_server, l4_nilthread,
+ l4_myself (), (void *) -1);
+ if (!ret)
+ panic ("Activation of initial physmem thread failed");
+
+ l4_msg_clear (&msg);
+ l4_set_msg_label (&msg, 0);
+ l4_msg_append_word (&msg, physmem.ip);
+ l4_msg_append_word (&msg, 0);
+ l4_msg_load (&msg);
+ msg_tag = l4_send (physmem_server);
+ if (l4_ipc_failed (msg_tag))
+ panic ("Sending startup message to physmemserver thread failed: %u",
+ l4_error_code ());
+
+ do
+ {
+ l4_word_t label;
+
+ msg_tag = l4_receive (physmem_server);
+ if (l4_ipc_failed (msg_tag))
+ panic ("Receiving messages from physmemserver thread failed: %u",
+ (l4_error_code () >> 1) & 0x7);
+
+ /* FIXME: Check sender, etc. */
+
+ label = l4_label (msg_tag);
+ l4_msg_store (msg_tag, &msg);
+ if ((label >> 4) == 0xffe)
+ {
+ l4_grant_item_t grant_item;
+ l4_fpage_t fpage;
+ l4_word_t addr;
+
+ /* This is a page fault. */
+ if (l4_untyped_words (msg_tag) != 2
+ || l4_typed_words (msg_tag) != 0)
+ panic ("Invalid format of page fault msg");
+
+ if (!io_map)
+ {
+ l4_map_item_t map_item;
+
+ /* FIXME: This is a hack. The first time we map the I/O
+ ports into the task. The kernel will repeat the page
+ fault. */
+ io_map = 1;
+
+ /* Now we can grant the mapping to the physmem server.
+ FIXME: Should use the fpage returned by sigma0. */
+ l4_msg_clear (&msg);
+ l4_set_msg_label (&msg, 0);
+ /* FIXME: Try to use largest fpage possible for the image.
+ Keep track of mappings already provided. Possibly map
+ text section rx and data rw. */
+ map_item = l4_map_item (l4_fpage_add_rights
+ (l4_io_fpage (0, 10),
+ l4_fully_accessible), 0);
+ l4_msg_append_map_item (&msg, map_item);
+ l4_msg_load (&msg);
+ l4_reply (physmem_server);
+ continue;
+ }
+
+ addr = l4_msg_word (&msg, 0) & ~((1 << 12) - 1);
+ fpage = l4_fpage_add_rights (l4_fpage_log2 (addr, 12),
+ l4_fully_accessible);
+ debug ("Serving Page Fault: %c%c%c at 0x%x (IP: 0x%x)\n",
+ label & 4 ? 'x' : '-', label & 2 ? 'w' : '-',
+ label & 1 ? 'r' : '-', addr,
+ l4_msg_word (&msg, 1));
+
+ /* First we have to request the fpage from sigma0. */
+ l4_accept (l4_map_grant_items (l4_complete_address_space));
+ l4_msg_clear (&msg);
+ l4_set_msg_label (&msg, 0xffa0);
+ l4_msg_append_word (&msg, fpage.raw);
+ l4_msg_append_word (&msg, L4_DEFAULT_MEMORY);
+ l4_msg_load (&msg);
+ msg_tag = l4_call (l4_global_id (l4_thread_user_base (), 1));
+ if (l4_ipc_failed (msg_tag))
+ panic ("sigma0 request failed during %s: %u",
+ l4_error_code () & 1 ? "receive" : "send",
+ (l4_error_code () >> 1) & 0x7);
+ if (l4_untyped_words (msg_tag) != 0
+ || l4_typed_words (msg_tag) != 2)
+ panic ("Invalid format of sigma0 reply");
+ l4_msg_store (msg_tag, &msg);
+ if (l4_msg_word (&msg, 1) == l4_nilpage.raw)
+ panic ("sigma0 rejected mapping");
+
+ /* Now we can grant the mapping to the physmem server.
+ FIXME: Should use the fpage returned by sigma0. */
+ l4_msg_clear (&msg);
+ l4_set_msg_label (&msg, 0);
+ /* FIXME: Try to use largest fpage possible for the image.
+ Keep track of mappings already provided. Possibly map
+ text section rx and data rw. */
+ grant_item = l4_grant_item (fpage, addr);
+ l4_msg_append_grant_item (&msg, grant_item);
+ l4_msg_load (&msg);
+ }
+#define WORTEL_MSG_PUTCHAR 1
+ else if (label == WORTEL_MSG_PUTCHAR)
+ {
+ int chr;
+
+ /* This is a putchar() message. */
+ if (l4_untyped_words (msg_tag) != 1
+ || l4_typed_words (msg_tag) != 0)
+ panic ("Invalid format of putchar msg");
+
+ chr = (int) l4_msg_word (&msg, 0);
+ putchar (chr);
+ /* No reply needed. */
+ continue;
+ }
+ else
+ panic ("Invalid message with tag 0x%x", msg_tag);
+
+ l4_reply (physmem_server);
+ }
+ while (1);
+}
+
+
+static void
parse_args (int argc, char *argv[])
{
int i = 1;
@@ -126,7 +296,7 @@
else if (!strcmp (argv[i], "-D") || !strcmp (argv[i], "--debug"))
{
i++;
- debug = 1;
+ output_debug = 1;
}
else if (argv[i][0] == '-')
panic ("Unsupported option %s", argv[i]);
@@ -137,12 +307,92 @@
+#define STACK_SIZE 4096
+char exception_handler_stack[STACK_SIZE];
+
+void
+exception_handler (void)
+{
+ int count = 0;
+
+ while (count < 10)
+ {
+ l4_msg_tag_t tag;
+ l4_thread_id_t from;
+ l4_word_t mr[12];
+
+ tag = l4_wait (&from);
+ debug ("EXCEPTION HANDLER: Received message from: ");
+ debug ("0x%x", from);
+ debug ("\n");
+ debug ("Tag: 0x%x", tag.raw);
+ debug ("Label: %u Untyped: %u Typed: %u\n",
+ l4_label (tag), l4_untyped_words (tag), l4_typed_words (tag));
+
+ l4_store_mrs (1, 12, mr);
+ debug ("Succeeded: %u Propagated: %u Redirected: %u Xcpu: %u\n",
+ l4_ipc_succeeded (tag), l4_ipc_propagated (tag),
+ l4_ipc_redirected (tag), l4_ipc_xcpu (tag));
+ debug ("Error Code: 0x%x\n", l4_error_code ());
+ debug ("EIP: 0x%x EFLAGS: 0x%x Exception: %u ErrCode: %u\n",
+ mr[0], mr[1], mr[2], mr[3]);
+ debug ("EDI: 0x%x ESI: 0x%x EBP: 0x%x ESP: 0x%x\n",
+ mr[4], mr[5], mr[6], mr[7]);
+ debug ("EAX: 0x%x EBX: 0x%x ECX: 0x%x EDX: 0x%x\n",
+ mr[11], mr[8], mr[10], mr[9]);
+ }
+
+ debug ("EXCEPTION HANDLER: Too many exceptions.\n");
+
+ while (1)
+ l4_yield ();
+}
+
+
+static void
+setup (void)
+{
+ l4_thread_id_t thread;
+ l4_word_t result;
+ void *utcb;
+
+ /* FIXME: This is not specified by the standard. We don't know
+ where and how much space we have for other thread's UTCB
+ areas in the root server. */
+ utcb = (void *) ((l4_my_local_id ().raw & ~(l4_utcb_size () - 1))
+ + l4_utcb_size ());
+ thread = l4_global_id (l4_thread_no (l4_myself ()) + 1, 1);
+ debug ("Creating exception handler thread at utcb 0x%x: ",
+ (l4_word_t) utcb);
+ result = l4_thread_control (thread, l4_myself (), l4_myself (),
+ l4_global_id (l4_thread_no (l4_myself()) - 2, 1),
+ utcb);
+ debug ("%s\n", result ? "successful" : "failed");
+ /* Set the priority of the other thread to our priority. Otherwise
+ it is 100 and will never be scheduled as long as we are not in a
+ blocking receive. */
+ l4_set_priority (thread, 255);
+ l4_start_sp_ip (thread, ((l4_word_t) exception_handler_stack)
+ + sizeof (exception_handler_stack),
+ (l4_word_t) exception_handler);
+ l4_set_exception_handler (thread);
+}
+
+
int
main (int argc, char *argv[])
{
parse_args (argc, argv);
debug ("%s " PACKAGE_VERSION "\n", program_name);
+
+ setup ();
+
+ find_components ();
+
+ load_components ();
+
+ start_components ();
while (1)
l4_yield ();
Index: hurd-l4/wortel/wortel.h
diff -u hurd-l4/wortel/wortel.h:1.3 hurd-l4/wortel/wortel.h:1.4
--- hurd-l4/wortel/wortel.h:1.3 Mon Sep 8 10:40:37 2003
+++ hurd-l4/wortel/wortel.h Tue Sep 9 17:43:12 2003
@@ -30,4 +30,16 @@
#define BUG_ADDRESS "<address@hidden>"
+
+typedef __l4_rootserver_t rootserver_t;
+
+/* For the boot components, find_components() must fill in the start
+ and end address of the ELF images in memory. The end address is
+ one more than the last byte in the image. */
+extern rootserver_t physmem;
+
+/* Find the kernel, the initial servers and the other information
+ required for booting. */
+void find_components (void);
+
int main (int argc, char *argv[]);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- hurd-l4 ./configure.ac libl4/l4/compat/types.h ...,
Marcus Brinkmann <=