> From: roux(a)ecoledoc.lip6.fr (Cedric ROUX)
> Subject: some bugs
> To: l4-hackers(a)os.inf.tu-dresden.de
> Date: Fri, 11 Dec 1998 13:23:47 +0100 (MET)
>
> [...]
> i could run koules with svgalib !! but, a program of mine don't
> work. If someone could try it to see if it's my machine or what ?
> available at :
> http://www.ecoledoc.lip6.fr/~roux/demo/lost.tar.gz
> and a binary is provided at :
> http://www.ecoledoc.lip6.fr/~roux/demo/lost
> If you …
[View More]could try it with a clean linux to see what should be
> the correct behavior, then try it with fiasco.
> It's just a poor animation with some sound (maybe sound is necessary for it
> to behave bad, don't know).
> When i run it under fiasco, it runs a little, then it blocks, so i press
> ctrl+c, that nornmally should end up the program and give me back the
> shell, but not, it just continues a little more, and stops again, and so on
> until the end of the program.
> Then i see a lot of "Aiee: scheduling in interrupt 00422ba (activ 10000)"
> with sometimes a 0 in place of the 10000.
> This works too with patch3, i don't have put patch4, but don't think
> it is relevent.
> And when i press Esc, it simply reboots.
>
> [...]
What kind of sound driver did you use with L4Linux? Did you compile it into the
L4Linux server, or did you use some kind of module?
Please note that normal kernel modules for monolithic Linux cannot be used with
L4Linux.
Michael
--
hohmuth(a)innocent.com, hohmuth(a)inf.tu-dresden.de
http://home.pages.de/~hohmuth/
[View Less]
That means, you cannot take your binary compiled for your standard Linux, but you can take
the source code without any changes and compile it for the L4Linux architecture.
Sebastian
-----Original Message-----
From: Michael Hohmuth [SMTP:fiasco-bugs@os.inf.tu-dresden.de]
Sent: Friday, January 29, 1999 4:41 PM
To: roux(a)ecoledoc.lip6.fr
Cc: l4-hackers(a)os.inf.tu-dresden.de
Subject: Re: Aiee: scheduling in interrupt (PR#9)
What kind of sound driver did you use with L4Linux? Did you compile …
[View More]it into the
L4Linux server, or did you use some kind of module?
Please note that normal kernel modules for monolithic Linux cannot be used with
L4Linux.
Michael
--
hohmuth(a)innocent.com, hohmuth(a)inf.tu-dresden.de
http://home.pages.de/~hohmuth/
[View Less]
Superbowl XXXIII - JANUARY 31, 1999
Dear Sports Fan,
WIN BIG gives you the opportunity to make the game more exiting and profitable, with our online sportsbook. You can make a friendly wager on the SUPERBOWL or any other pro sporting event. Or play our many interactive casino games that come with our free sopftware package. Visa Mastercard and American Express accepted and for a limited time we are offering a complimentary 10% of your initial deposit added to your account upon sign-up !
…
[View More]Please visit our website for more info:
http://204.71.176.71/members6/game-online
Please contact interrupt(a)hotmail.com if you have recieved this message in error.
Thank you, and happy gaming!
[View Less]
"Paul Phillips" <pphillips(a)ivue.com> writes:
> FYI gcc is version 2.7.2.3
> g++ is egcs-2.90.29 980515 (egcs-1.0.3 release)
> The GNU manual simple says that gcc uses 'C' linkage and g++ calls gcc and
> uses C++ linkage.
I don't thoroughly understand what might be meant with ``linkage''
here, but I don't think that linkage is a problem unless you combine
modules compiled with different compilers. I have successfully used
Fiasco kernels compiled with the `gcc' driver from …
[View More]Gcc 2.7.2.3, so
certainly its ``linkage'' is alright.
One possible other reason for this problem is that you might be trying
to compile Fiasco without optimization ("-O" flag). For Gcc 2.7.2.3
I know for sure that this doesn't work: Optimization must be enabled
to allow inline-assembler code to work; if it's not, the compiler
skips the register-conflict-detection pass which makes sure arguments
for inline-assembler code are put into the correct CPU registers.
Maybe this has been corrected in Egcs (I haven't tried).
> I won't try to solve this problem right now as g++ seems to work OK. Your
> makefile uses gcc however, and I am wondering which I should be using.
The Makefile shipped with the distribution should be using `egcc', a
driver which belongs to Egcs, so it should be using Egcs 1.0 or 1.1.
I recommend using a version of Egcs if you have access to it; Egcs 1.1
is best.
> One of your correspondence mentions a version of egcs, and I'm not
> sure of the relationships between gcc and egcs.
Gcc and Egcs are two different compiler distributions which both
include a C compiler and a C++ compiler. Normally, only one of the
distributions is installed on one system; the front ends (driver
programs) `gcc' and `g++' access the same compiler distribution, and
one can compile both C and C++ source files with both drivers.
However, newer Linux distributions confusingly come with both Gcc and
Egcs, and both distributions contain both the C compiler and the C++
compiler. The driver program `gcc' is made to access Gcc, while `g++'
and `egcc' use Egcs. As I said, all of these drivers can compile C
code and C++ code, but they access different compiler distributions.
The reason why both Egcs and Gcc are installed is that the Linux-2.0
kernel cannot be compiled with compilers newer than Gcc 2.7.2.x for
political reasons (Linus Torvalds and the Egcs team like to blame and
yell at each other for that). However, supplying only this old
version of Gcc is unsatisfying because the newer C++ compilers offer
more features and are more standards-compliant.
Does this clear up some confusion?
Michael
--
hohmuth(a)innocent.com, hohmuth(a)inf.tu-dresden.de
http://home.pages.de/~hohmuth/
[View Less]
"Paul Phillips" <pphillips(a)ivue.com> writes:
> I believe I have found a couple of bugs in Fiasco which were causing the
> multiple server problem, and probably some other problems. In
> /fiasco/src/time.h :
> the code for set( microseconds):
>From the first impression, your fix looks right. Thanks for tracking
this down!
I still wonder why I haven't ever seen this problem... I think I
tried booting L4Linux and `hello' concurrently, but maybe the order in
which they'…
[View More]re started makes a difference.
I almost can't believe that I wrote that routine... :-) It must have
been late at night. I probably didn't invest much thought into it
because I was thinking I was going to rewrite it soon. The timeout
handling also suffers from at least two other problems: It disables
interrupts while traversing a linear linked list of unknown length,
that is, potentially for an unacceptably long time; and it suffers
from the ``page fault may re-enable interrupts'' problem because it
potentially touches a TCB in a 4-MB kernel region for which a
reference to its shared page table hasn't yet been inserted into the
current task's page directory (this is done ``on demand'' in the page
fault handler). This is just one more example why doing kernel
synchronization using interrupt-disabling is a bad idea.
[ from a different email ]
> >Why did you relocate it to 0x2400000? It should be able to run (even
> >concurrently with L4Linux) at the memory location it is linked to
> >using the distributed version of l4/server/hello/Makefile, 0x200000.
> I thought perhaps GRUB was trying to load both 'hello' and L4Linux at the
> same physical address and that was the reasoning behind my relocating it. It
> makes no difference.
GRUB is never trying to load boot modules to conflicting memory
addresses; the modules (in this case, ELF binaries) are not
interpreted at all---GRUB just locates them linearly behind what has
been loaded as the ``kernel,'' which in our case is Rmgr, the resource
and boot manager.
Once it has been started by GRUB, Rmgr interprets the ELF binaries and
loads them to their destination addresses. Rmgr makes sure these
addresses don't conflict---otherwise you will see an ugly (and not
very informative, I'm afraid) assertion failure.
Thanks again!
Michael
[ code included for reference so that the bug tracking system sees it, too ]
> inline void
> timeout_t::set(unsigned long long abs_microsec)
> {
> // XXX uses cli/sti
>
> _wakeup = abs_microsec;
> _flags.set = 1;
>
> unsigned flags = get_eflags();
> cli();
>
> if (!timer::first_timeout)
> {
> timer::first_timeout = this;
> _prev = _next = 0;
> }
> else
> {
> timeout_t *ti = timer::first_timeout;
>
> for (;;)
> {
> if (ti->_wakeup >= _wakeup)
> {
> // insert before ti
> _next = ti;
> _prev = ti->_prev;
> ti->_prev = this;
> if (_prev) _prev->_next = this;
> /***** here you need to set timer::first_timeout since you just replaced it
> */
> else timer::first_timeout = this;
> /**********/
> goto done;
> }
>
> if (ti->_next)
> {
> ti = ti->_next;
> continue;
> }
> /**** here you need to put a break in case ti->wakeup < timeout,
> and and ti->_next==0 .
> Otherwise you loop here with interrupts disabled forever */
> else break;
> /********************/
> }
>
> // insert as last item after ti
> ti->_next = this;
> _prev = ti;
> _next = 0;
> }
>
> done:
> set_eflags(flags);
> }
--
hohmuth(a)innocent.com, hohmuth(a)sax.de
http://www.sax.de/~hohmuth/
[View Less]
Michael,
Thanks again for responding.
I believe I have found a couple of bugs in Fiasco which were causing the
multiple server problem, and probably some other problems. In
/fiasco/src/time.h :
the code for set( microseconds):
inline void
timeout_t::set(unsigned long long abs_microsec)
{
// XXX uses cli/sti
_wakeup = abs_microsec;
_flags.set = 1;
unsigned flags = get_eflags();
cli();
if (!timer::first_timeout)
{
timer::first_timeout = this;
_prev = _next = 0;
…
[View More] }
else
{
timeout_t *ti = timer::first_timeout;
for (;;)
{
if (ti->_wakeup >= _wakeup)
{
// insert before ti
_next = ti;
_prev = ti->_prev;
ti->_prev = this;
if (_prev) _prev->_next = this;
/***** here you need to set timer::first_timeout since you just replaced it
*/
else timer::first_timeout = this;
/**********/
goto done;
}
if (ti->_next)
{
ti = ti->_next;
continue;
}
/**** here you need to put a break in case ti->wakeup < timeout,
and and ti->_next==0 .
Otherwise you loop here with interrupts disabled forever */
else break;
/********************/
}
// insert as last item after ti
ti->_next = this;
_prev = ti;
_next = 0;
}
done:
set_eflags(flags);
}
Thanks,
Paul Phillips
-----Original Message-----
From: Michael Hohmuth <hohmuth(a)innocent.com>
To: Paul Phillips <pphillips(a)ivue.com>
Cc: l4-hackers(a)os.inf.tu-dresden.de <l4-hackers(a)os.inf.tu-dresden.de>
Date: Tuesday, January 26, 1999 11:21 AM
Subject: Re: multiple servers
>Paul,
>
>thanks for trying Fiasco and L4Linux!
>
>"Paul Phillips" <pphillips(a)ivue.com> writes:
>
>> Right now I'm trying to run two servers concurrently. This is just a
>> "proof of concept" for now. I am trying to run the "hello" server
>> (relocated to 0x2400000) along with the L4-Linux server. I load the
>> "hello"server first and then L4-Linux. L4-linux gets to the
>> "Calibrating delay loop.." and hangs. I am obviously forgetting
>> something here. Is the printf used by the hello server causing a
>> problem?
>
>No, I don't think so.
>
>I take it that without `hello', L4Linux works correctly. My guess
>would be that hello has trouble running at the memory location you
>linked it at. Did you see `hello's output ("hello: My thread-id
>is...") at least once?
>
>Did you get `hello' to work without L4Linux?
>
>Why did you relocate it to 0x2400000? It should be able to run (even
>concurrently with L4Linux) at the memory location it is linked to
>using the distributed version of l4/server/hello/Makefile, 0x200000.
>
>> BTW - I ran across the problem of the "relocation truncated ...." The
>> problem is in the oskit/libsmp/x86/boot.S which contains the
>> trampoline code. When the jump is made to the 32 bit code some linkers
>> have a problem resolving the long jump.
>>
>> ljmp $KERNEL_CS,.........
>>
>> The fix is to put the ".code32" before the jump. This problem has
>> been fixed in the latest release of the OSkit.
>
>Thanks for the hint!
>
>Michael
>--
>hohmuth(a)innocent.com, hohmuth(a)sax.de
>http://www.sax.de/~hohmuth/
[View Less]
Thanks Michael,
FYI gcc is version 2.7.2.3
g++ is egcs-2.90.29 980515 (egcs-1.0.3 release)
The GNU manual simple says that gcc uses 'C' linkage and g++ calls gcc and
uses C++ linkage.
I won't try to solve this problem right now as g++ seems to work OK. Your
makefile uses gcc however, and I am wondering which I should be using. One
of your correspondence mentions a version of egcs, and I'm not sure of the
relationships between gcc and egcs. Thanks,
Paul Phillips
-----Original Message-----
…
[View More]From: Michael Hohmuth <hohmuth(a)innocent.com>
To: Paul Phillips <pphillips(a)ivue.com>
Cc: l4-hackers(a)os.inf.tu-dresden.de <l4-hackers(a)os.inf.tu-dresden.de>
Date: Tuesday, January 26, 1999 11:22 AM
Subject: Re: gcc VS g++
>"Paul Phillips" <pphillips(a)ivue.com> writes:
>
>> When I compile Fiasco with CC=gcc I get a message :
>>
>> KERNEL: no page fault handler for region: 0xffff0000, error 0x0.
>
>> However, when I compile with CC=g++ I get no such message.
>
>> Any ideas why this is happening?
>
>Obviously, the `gcc' driver uses a different compiler than the `g++'
>driver ("gcc -v" and "g++ -v" should tell you that.) However, without
>further context (like a backtrace) it's hard to tell what exactly went
>wrong.
>
>Michael
[View Less]
Michael, Thanks for responding,
-----Original Message-----
From: Michael Hohmuth <hohmuth(a)innocent.com>
To: Paul Phillips <pphillips(a)ivue.com>
Cc: l4-hackers(a)os.inf.tu-dresden.de <l4-hackers(a)os.inf.tu-dresden.de>
Date: Tuesday, January 26, 1999 11:21 AM
Subject: Re: multiple servers
>Paul,
>
>thanks for trying Fiasco and L4Linux!
>
>"Paul Phillips" <pphillips(a)ivue.com> writes:
>
>> Right now I'm trying to run two servers …
[View More]concurrently. This is just a
>> "proof of concept" for now. I am trying to run the "hello" server
>> (relocated to 0x2400000) along with the L4-Linux server. I load the
>> "hello"server first and then L4-Linux. L4-linux gets to the
>> "Calibrating delay loop.." and hangs. I am obviously forgetting
>> something here. Is the printf used by the hello server causing a
>> problem?
>
>No, I don't think so.
>
>I take it that without `hello', L4Linux works correctly. My guess
>would be that hello has trouble running at the memory location you
>linked it at. Did you see `hello's output ("hello: My thread-id
>is...") at least once?
>
Yes, both 'hello' and L4Linux run correctly (some bugs in L4, but that's OK
for now)
when running as a single server.
I do see the 'hello' output one time only:
"hello: My id is 80000" , in the middle of the Linux bootup messages.
I tried 'hello' at the default 0x200000 as well as 0x2400000. Both perform
the same.
>Did you get `hello' to work without L4Linux?
>
Yes, no problem!
>Why did you relocate it to 0x2400000? It should be able to run (even
>concurrently with L4Linux) at the memory location it is linked to
>using the distributed version of l4/server/hello/Makefile, 0x200000.
>
I thought perhaps GRUB was trying to load both 'hello' and L4Linux at the
same physical address and that was the reasoning behind my relocating it. It
makes no difference.
I have GDB running, but because the system hangs I can't generate a
backtrace. Any ideas?
Thanks
Paul Phillips
[View Less]
"Paul Phillips" <pphillips(a)ivue.com> writes:
> When I compile Fiasco with CC=gcc I get a message :
>
> KERNEL: no page fault handler for region: 0xffff0000, error 0x0.
> However, when I compile with CC=g++ I get no such message.
> Any ideas why this is happening?
Obviously, the `gcc' driver uses a different compiler than the `g++'
driver ("gcc -v" and "g++ -v" should tell you that.) However, without
further context (like a backtrace) it's hard to …
[View More]tell what exactly went
wrong.
Michael
--
hohmuth(a)innocent.com, hohmuth(a)inf.tu-dresden.de
http://home.pages.de/~hohmuth/
[View Less]
Paul,
thanks for trying Fiasco and L4Linux!
"Paul Phillips" <pphillips(a)ivue.com> writes:
> Right now I'm trying to run two servers concurrently. This is just a
> "proof of concept" for now. I am trying to run the "hello" server
> (relocated to 0x2400000) along with the L4-Linux server. I load the
> "hello"server first and then L4-Linux. L4-linux gets to the
> "Calibrating delay loop.." and hangs. I am obviously forgetting
> something here. Is the …
[View More]printf used by the hello server causing a
> problem?
No, I don't think so.
I take it that without `hello', L4Linux works correctly. My guess
would be that hello has trouble running at the memory location you
linked it at. Did you see `hello's output ("hello: My thread-id
is...") at least once?
Did you get `hello' to work without L4Linux?
Why did you relocate it to 0x2400000? It should be able to run (even
concurrently with L4Linux) at the memory location it is linked to
using the distributed version of l4/server/hello/Makefile, 0x200000.
> BTW - I ran across the problem of the "relocation truncated ...." The
> problem is in the oskit/libsmp/x86/boot.S which contains the
> trampoline code. When the jump is made to the 32 bit code some linkers
> have a problem resolving the long jump.
>
> ljmp $KERNEL_CS,.........
>
> The fix is to put the ".code32" before the jump. This problem has
> been fixed in the latest release of the OSkit.
Thanks for the hint!
Michael
--
hohmuth(a)innocent.com, hohmuth(a)sax.de
http://www.sax.de/~hohmuth/
[View Less]