Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-27 Thread Andreas Franck

Hello Mike, hello Linus,

Some minutes ago, I wrote:
> I think I have found the reason for our bugs. It seems GCC really
> miscompiles buffer.c:bdflush_init without frame pointers. I'll try harder
> now to understand what excactly is going on, but it seems it is smashing
> its local stack space by decrementing its stack pointer too early, then
> calling an assembler function (__down_failed). It might be that GCC is
> confused by this.

[...]

> Any comments on this? I'll now try to split up the stack space operation in
> two parts, the first after call kernel_thread: addl $12, %esp (as in the
> first call), and an additional addl $64, %esp just before leaving (before
> popl %ebx). And I'll report what happened, later - but I have a good
> feeling that I have caught the bug.

... and my good feeling was right. Changing the bogus assembly code made the 
bug go away. I'll try to prepare a simpler testcase for the GCC maintainers 
tomorrow. For short, this is what happens: GCC tries to free its stack frame 
for the local variables far too early. It then calls __down_failed(), which 
pushes some things on the stack - thereby corrupting the semaphore pointer! 
So __down() works on a random memory location instead of the semaphore, which 
is guaranteed to fail badly. 

I've added linux-kernel as CC again, so everybody can now hear that this is 
definitely a GCC bug, and not a kernel issue.

Greetings,
Andreas

-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Paul Laufer

On Mon, Dec 25, 2000 at 08:40:50PM + or thereabouts, Thorsten Kranzkowski wrote:
> On Mon, Dec 25, 2000 at 06:09:35AM +0100, Mike Galbraith wrote:
> > I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> > has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.
> > 
> > int ipt_register_table(struct ipt_table *table)
> > {
> > int ret;
> > struct ipt_table_info *newinfo;
> > static struct ipt_table_info bootstrap
> > = { 0, 0, { 0 }, { 0 }, { } };
> >^
> > ip_tables.c:1361: Internal compiler error in array_size_for_constructor, at 
>varasm.c:4456
> 
> 
> Well, I  'fixed' this by changing above line to:
>   = { 0, 0, { 0 }, { 0 }, };
> and repeating this change (deleting the braces) about 15 times in 2 or 3 other 
> files of iptables. (patch available on request)
> Of course gcc shouldn't die but issue a useful message if/when syntax rules
> may have changed.
> 
> Apart from that and a hand-edited arch/alpha/vmlinux.lds that got some 
> newlines wrong, the kernel compiled fine and is up for over a day now.
> Though this is not intel but alpha (ev4 / AXPpci33).
> 
> Marvin:~$ uname -a
> Linux Marvin 2.4.0-test13pre4-ac2 #13 Sun Dec 24 15:26:57 UTC 2000 alpha unknown
> Marvin:~$ uptime
>   8:19pm  up 1 day,  4:28,  4 users,  load average: 0.00, 0.00, 0.00
> Marvin:~$ gcc -v
> Reading specs from /usr/lib/gcc-lib/alpha-unknown-linux-gnu/2.97/specs
> Configured with: ../gcc-20001211/configure --enable-threads --enable-shared 
>--prefix=/usr --enable-languages=c,c++
> gcc version 2.97 20001211 (experimental)
> 
> 
> I use iptables for masquerading my local ethernet and that works as expected
> so far.
> 
> Thorsten.

Its a problem with initializing a zero-length array. This is something
that gcc has never previously been documented to do, but it has worked
in the past (most of the time). Recently it has been decided (according
to traffic on gcc-bugs and gcc-patches lists) that gcc will handle
zero-length arrays as flexable-array-members per ISO C99 standard.
AFAIK, that means that if they are to be initialized, zero-length arrays
can only exist as the last element of a structure, and that the
structure must not be embeded within another structure.

The empty brackets that Thorsten removed were initializing the zero-length
array to empty, but gcc currently has this bit of code in varasm.c
(around line 4460):

  /* ??? I'm fairly certain if there were no elements, we shouldn't have
 created the constructor in the first place.  */
  if (max_index == NULL_TREE)
abort ();

This abort() resulted in the "Internal compiler error" that Mike noticed
earlier.  Removing the empty brackets prevents gcc from trying to
initialize the zero length array and avoids this problem. However, this
can result in warning messages about missing initializers depending upon
the warning flags given to gcc, and seems like the wrong thing to do.
 
The best solution (IMHO) for this situation is to change gcc/varasm.c to
accept empty initializers, something like:

  /* ??? I'm fairly certain if there were no elements, we shouldn't have
 created the constructor in the first place.  */
  /* No, it can be useful to initialize the zero-length array with an
 empty initializer. */
  if (max_index == NULL_TREE)
return 0;

The rest of netfilter will still not compile because in several other C
files the initialized zero-length arrays are nested several structures
deep. If we can convince the gcc folks to drop some of the ISO C99
restrictions on the use of zero-length arrays then all will be back to
normal (as Ulrich Drepper pointed out, the ISO committee in their
infinite wisdom does not always come up with a standard that is the best
solution in the real world).  But I am not sure if that is the best
solution. Perhaps it would be better to change the netfilter code. In
any event, the gcc documentation does not say anything about not being
able to initialize zero-length arrays to empty, so this is a bug and I'm
going to talk with the gcc folks.

-Paul Laufer
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Thorsten Kranzkowski

On Mon, Dec 25, 2000 at 06:09:35AM +0100, Mike Galbraith wrote:
> I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.
> 
> int ipt_register_table(struct ipt_table *table)
> {
>   int ret;
>   struct ipt_table_info *newinfo;
>   static struct ipt_table_info bootstrap
>   = { 0, 0, { 0 }, { 0 }, { } };
>^
> ip_tables.c:1361: Internal compiler error in array_size_for_constructor, at 
>varasm.c:4456


Well, I  'fixed' this by changing above line to:
= { 0, 0, { 0 }, { 0 }, };
and repeating this change (deleting the braces) about 15 times in 2 or 3 other 
files of iptables. (patch available on request)
Of course gcc shouldn't die but issue a useful message if/when syntax rules
may have changed.

Apart from that and a hand-edited arch/alpha/vmlinux.lds that got some 
newlines wrong, the kernel compiled fine and is up for over a day now.
Though this is not intel but alpha (ev4 / AXPpci33).

Marvin:~$ uname -a
Linux Marvin 2.4.0-test13pre4-ac2 #13 Sun Dec 24 15:26:57 UTC 2000 alpha unknown
Marvin:~$ uptime
  8:19pm  up 1 day,  4:28,  4 users,  load average: 0.00, 0.00, 0.00
Marvin:~$ gcc -v
Reading specs from /usr/lib/gcc-lib/alpha-unknown-linux-gnu/2.97/specs
Configured with: ../gcc-20001211/configure --enable-threads --enable-shared 
--prefix=/usr --enable-languages=c,c++
gcc version 2.97 20001211 (experimental)


I use iptables for masquerading my local ethernet and that works as expected
so far.

Thorsten.



-- 
| Thorsten KranzkowskiInternet: [EMAIL PROTECTED]|
| Mobile: ++49 170 1876134   Snail: Niemannsweg 30, 49201 Dissen, Germany |
| Ampr: dl8bcu@db0lj.#rpl.deu.eu, [EMAIL PROTECTED] [44.130.8.19] |
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Mike Galbraith

On Mon, 25 Dec 2000, Andreas Franck wrote:

> Hello Mike, hello linux-kernel hackers,
> 
> Mike Galbraith wrote:
> > I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> > has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.
> 
> Maybe, but you were lucky getting an ICE, and not silently failing code :-)

You bet.

> After having spent several hours debugging now, I think it was 
> worth it (at least for my understanding of lower-level kernel issues and of 
> the (rather nice and almost readable) assembly code gcc generates). There 

Don't get me wrong, chasing things like this is never a waste of time.
In the case of gcc in particular.  Our next 'stable' kernel compiler
is going to come from the gcc development tree just as the next 'stable'
kernel is coming out of the kernel development tree.

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Mike Galbraith

On Mon, 25 Dec 2000, Andreas Franck wrote:

> Hello Mike, hello linux-kernel hackers,
> 
> Mike Galbraith wrote:
> > I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> > has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.
> 
> Maybe, but after having spent several hours debugging now, I think it was 
> worth it: I am almost sure this is not a gcc bug, but a nasty race condition 
> involving the semaphore handling bdflush_init. 
> 
> I figured out by spilling some printk's around in bdflush_init, which made 
> the bug magically disappear, what wasn't what I intended - but which gave me 
> a clearer impression of what's going on.

Oh?  Can you show me (offline) what you did exactly that made it go away?
(that's kinda scary.. _much_ prefer 'compiler has rough edges' option;)

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Andreas Franck

Hello Mike, hello linux-kernel hackers,

Mike Galbraith wrote:
> I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.

Maybe, but after having spent several hours debugging now, I think it was 
worth it: I am almost sure this is not a gcc bug, but a nasty race condition 
involving the semaphore handling bdflush_init. 

I figured out by spilling some printk's around in bdflush_init, which made 
the bug magically disappear, what wasn't what I intended - but which gave me 
a clearer impression of what's going on.

It seems that whyever, the cause for this failure is actually the down(sem) 
call on a not yet up()'ed semaphore, and this is where it starts to get ugly.


-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-25 Thread Andreas Franck

Hello Mike, hello linux-kernel hackers,

Mike Galbraith wrote:
> I wouldn't (not going to here;) spend a lot of time on it.  The compiler
> has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.

Maybe, but you were lucky getting an ICE, and not silently failing code :-)

After having spent several hours debugging now, I think it was 
worth it (at least for my understanding of lower-level kernel issues and of 
the (rather nice and almost readable) assembly code gcc generates). There 
seems to be something going wrong in the down(sem) path after the 
kernel_thread call. 

I'm not sure if down() succeeds instantly when compiling the kernel with 
2.95.2, but it seems to fail for 2.97; I figured out by spilling some 
printk's around in bdflush_init, which made the bug magically disappear, due 
to the looser timing. This also might happen for compiling with frame 
pointers or with the static declaration variables, somehow.

Th bdflush_init function itself does not seem to be responsible, which 
corresponds with the assembly, which is fine and should get the same results 
for all compiled cases.

It seems that whyever, the cause for this failure is actually the down(sem) 
call on a not yet up()'ed semaphore, and this is where it starts to get ugly.

down() then calls __down_failed, which ends up in __down(); __down does some 
waitqueue handling, which I don't understand, and then calls __wake_up - up 
to then, everything seems fine, in __wake_up it is where my search ended up 
to now, but I think something is wrong in this context; however, the 
complexity of this code exceeds my knowledge by magnitudes, so I can't 
continue searching there without going mad :-)

It would be nice if someone else could look from there on, now I've narrowed 
the case down to rather low-level functions.

Greetings,
Andreas

-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-24 Thread Mike Galbraith

On Sun, 24 Dec 2000, Andreas Franck wrote:

> Hello Mike, hello linux-kernel hackers,
> 
> Mike Galbraith wrote:
> 
> > Yes, hmm indeed.  Try these two things.
> > 
> > 1. make DECLARE_MUTEX_LOCKED(sem) in bdflush_init() static.
> > 2. compile with frame pointers.  (normal case for IKD)
> > 
> > My IKD tree works with either option, but not with neither.  I haven't
> > figured out why yet.
> 
> 1 worked for me, too - with the same effect as compiling buffer.c with 
> 2.95.2, thus meaning successful boot and heavy crashing later on. 
> I haven't tried to boot 2 yet, but this looks seriously fishy to me. It would 
> be nice if we could make a simpler testcase to reproduce it, as it's much 
> work to boot the kernel over and over again.

I wouldn't (not going to here;) spend a lot of time on it.  The compiler
has problems.  It won't build glibc-2.2, and chokes horribly on ipchains.

int ipt_register_table(struct ipt_table *table)
{
int ret;
struct ipt_table_info *newinfo;
static struct ipt_table_info bootstrap
= { 0, 0, { 0 }, { 0 }, { } };
   ^
ip_tables.c:1361: Internal compiler error in array_size_for_constructor, at 
varasm.c:4456

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-24 Thread Andreas Franck

Hello Mike, hello linux-kernel hackers,

Mike Galbraith wrote:

> Yes, hmm indeed.  Try these two things.
> 
> 1. make DECLARE_MUTEX_LOCKED(sem) in bdflush_init() static.
> 2. compile with frame pointers.  (normal case for IKD)
> 
> My IKD tree works with either option, but not with neither.  I haven't
> figured out why yet.

1 worked for me, too - with the same effect as compiling buffer.c with 
2.95.2, thus meaning successful boot and heavy crashing later on. 
I haven't tried to boot 2 yet, but this looks seriously fishy to me. It would 
be nice if we could make a simpler testcase to reproduce it, as it's much 
work to boot the kernel over and over again.

I have now printed out the buffer.c:bdflush_init assembly for all four cases, 
2.95.2, 2.97 without patch, 2.97 with static DECLARE... and 2.97 with frame 
pointer, and will try to figure out what's going wrong - it would still be 
nice to know if its a gcc problem or if some kernel assumption about GCC 
behaviour triggered this bug, which seems equally likely, as kernel_thread 
and the mutex/semaphore stuff involve some nontrivial (at least for beginners 
like me...) hand-made assembly code.

A nice evening and still merry christmas to the people westward of Europe :-)

Andreas

-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-24 Thread Mike Galbraith

On Sat, 23 Dec 2000, Andreas Franck wrote:

> Hi Mike, hello linux-kernel audience,
> 
> > I had the same, with the last few snapshots I tried, but 20001218 seems
> > to work ok.
> > dmesg|head -1
> > Linux version 2.4.0-test13ikd (root@el-kaboom) (gcc version gcc-2.97
> > 20001218 (experimental)) #18 Sat Dec 23 17:43:29 CET 2000
> 
> Hmm, would have been nice, but it crashes here with 20001222, nevertheless. 
> For which CPU do you have your kernel configured? It might be a CPU specific 
> issue, I'll try to compile for Pentium I and 486, now, and report my results.

Yes, hmm indeed.  Try these two things.

1. make DECLARE_MUTEX_LOCKED(sem) in bdflush_init() static.
2. compile with frame pointers.  (normal case for IKD)

My IKD tree works with either option, but not with neither.  I haven't
figured out why yet.

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-23 Thread Andreas Franck

The story continues, citing myself:

> Hmm, would have been nice, but it crashes here with 20001222, nevertheless. 
> For which CPU do you have your kernel configured? It might be a CPU 
> specific issue, I'll try to compile for Pentium I and 486, now, and report
> my results.

It does not seem CPU specific, breaks for both 486 and Pentium with the same 
error.

> It would also be nice to know if this is a gcc issue or a kernel issue - if 
> I knew which precise file was responsible for the crash, I could compare 
> the assembly output for stable and snapshot GCC. My suspect is
> kernel/sched.c, but this might be wrong, as the story begins on the launch 
> of kupdate in fs/buffer.c.

And this is where everything seems to go wrong: When I compile buffer.c with 
2.95.2, and link everything together, the kernel magically boots without any 
complaints; later on something starts crashing badly, but this might be other 
issues that can be investigated later on.

> But now I have almost no clue what really goes wrong
... and now I have a bit more, and the suspection that something broke the 
way in which the kernel_thread function (arch/i386/kernel/process.c) wants to 
start the kernel threads, here bdflush and kupdate. I don't understand all 
issues completely, but something seems to have changed.

Attached are the relevant (?) portions of the assembly output for buffer.c: 
kupdate, bdflush and bdflush_init, compiled with 2.95.2 and 2.97, 
respectively. Perhaps someone could look over it?

Thanks and happy hacking,
Andreas

-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-

 buffer-2.95.2.S
 buffer-2.97.S


Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-23 Thread Andreas Franck

Hi Mike, hello linux-kernel audience,

> I had the same, with the last few snapshots I tried, but 20001218 seems
> to work ok.
> dmesg|head -1
> Linux version 2.4.0-test13ikd (root@el-kaboom) (gcc version gcc-2.97
> 20001218 (experimental)) #18 Sat Dec 23 17:43:29 CET 2000

Hmm, would have been nice, but it crashes here with 20001222, nevertheless. 
For which CPU do you have your kernel configured? It might be a CPU specific 
issue, I'll try to compile for Pentium I and 486, now, and report my results.

It would also be nice to know if this is a gcc issue or a kernel issue - if I 
knew which precise file was responsible for the crash, I could compare the 
assembly output for stable and snapshot GCC. My suspect is kernel/sched.c, 
but this might be wrong, as the story begins on the launch of kupdate in 
fs/buffer.c.

But now I have almost no clue what really goes wrong.

Geetings and a nice christmas to everybody!
Andreas

-- 
->>>--- Andreas Franck <<<-
---<<< [EMAIL PROTECTED] --->>>---
->>> Keep smiling! <<<-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Re: Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-23 Thread Mike Galbraith

On Sat, 23 Dec 2000, Andreas Franck wrote:

> Hello,
> 
> I hope I am not doing something particularly stupid here, but as Linus
> encouraged curious people to try compiling the kernel with the
> latest gcc snapshots, I have tried - as several weeks before, but again
> in vain.
> 
> Since I have tried, the same following error on early boot (just after
> "Starting kswapd v1.8" appears on the screen) has bitten me, when I
> compiled the kernel with a recent gcc snapshot. This was for at least
> 2.4.0-test11 with gcc snapshots from 2 months ago till yesterday.

Hi,

I had the same, with the last few snapshots I tried, but 20001218 seems
to work ok.
dmesg|head -1
Linux version 2.4.0-test13ikd (root@el-kaboom) (gcc version gcc-2.97 20001218 
(experimental)) #18 Sat Dec 23 17:43:29 CET 2000

-Mike

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/



Fatal Oops on boot with 2.4.0testX and recent GCC snapshots

2000-12-23 Thread Andreas Franck

Hello,

I hope I am not doing something particularly stupid here, but as Linus
encouraged curious people to try compiling the kernel with the
latest gcc snapshots, I have tried - as several weeks before, but again
in vain.

Since I have tried, the same following error on early boot (just after
"Starting kswapd v1.8" appears on the screen) has bitten me, when I
compiled the kernel with a recent gcc snapshot. This was for at least
2.4.0-test11 with gcc snapshots from 2 months ago till yesterday.

The ksymoops output is attached here, and I hope it will help. I tried
to narrow it down by myself a bit, and ended in kernel/sched.c:
__wake_up_common, where my understanding of the code came to a sudden
end, so I hope some gurus here will be able to figure out what's wrong.

All (?) relevant output should be found below, if anything important
is missing, I am willing to provide aly further information later on.

I don't know if this happens if I compile the kernel for something
less than Pentium II, this is what I have tried (System is a PII-266 with
160MB RAM on an Intel 430LX motherboard).

With gcc version 2.95.2 2220 (Debian GNU/Linux) everything works
perfectly fine.

Thanks for any advice and happy hacking!
Andreas

Here comes all important info:
---snip---

ksymoops 2.3.5 on i686 2.4.0-test12.  Options used
 -V (default)
 -K (specified)
 -l /proc/modules (default)
 -o /lib/modules/2.4.0-test13-pre4/ (specified)
 -m /usr/src/linux/System.map (specified)

No modules in ksyms, skipping objects
No ksyms, skipping lsmod
Unable to handle kernel paging request at virtual address fe4c
c0114e9d
*pde = 1063
Oops: 
CPU:0
EIP:0010:[]
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010097
eax: c40effb8   ebx: c3585a59   ecx: fe4c   edx: 
esi: c0107b0c   edi: fff9   ebp: c12b9fc8   esp: c12b9fa4
ds: 0018   es: 0018   ss: 0018
Process kupdate (pid 6, stackpage=c12b900)
Stack:  0246  c40effb8 0001 0003 c12b8000 
   fff9 c12b8000 c0107b38 c40effac c12b8550  c01f896f 00010f00
   c40eff74 00105000 0008e000 c0107486 c40effac c0137900 
Call Trace: [] [] [] [] [] 
[]
Code: 8b 01 85 45 f0 74 ec 8b 7d dc 85 ff 74 79 8b 45 ec 8b 16 21

>>EIP; c0114e9d <__wake_up+5d/140>   <=
Trace; fff9 
Trace; c0107b38 <__up_wakeup+8/c>
Trace; c01f896f 
Trace; c0105000 
Trace; c0107486 
Trace; c0137900 
Code;  c0114e9d <__wake_up+5d/140>
 <_EIP>:
Code;  c0114e9d <__wake_up+5d/140>   <=
   0:   8b 01 mov(%ecx),%eax   <=
Code;  c0114e9f <__wake_up+5f/140>
   2:   85 45 f0  test   %eax,0xfff0(%ebp)
Code;  c0114ea2 <__wake_up+62/140>
   5:   74 ec je fff3 <_EIP+0xfff3> c0114e90 
<__wake_up+50/140>
Code;  c0114ea4 <__wake_up+64/140>
   7:   8b 7d dc  mov0xffdc(%ebp),%edi
Code;  c0114ea7 <__wake_up+67/140>
   a:   85 ff test   %edi,%edi
Code;  c0114ea9 <__wake_up+69/140>
   c:   74 79 je 87 <_EIP+0x87> c0114f24 
<__wake_up+e4/140>
Code;  c0114eab <__wake_up+6b/140>
   e:   8b 45 ec  mov0xffec(%ebp),%eax
Code;  c0114eae <__wake_up+6e/140>
  11:   8b 16 mov(%esi),%edx
Code;  c0114eb0 <__wake_up+70/140>
  13:   21 00 and%eax,(%eax)

gcc snapshot version:

Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/2.97/specs
Configured with: ../gcc/configure --prefix=/usr --enable-shared 
--enable-threads
gcc version 2.97 20001222 (experimental)


My .config:

#
# Automatically generated by make menuconfig: don't edit
#
CONFIG_X86=y
CONFIG_ISA=y
# CONFIG_SBUS is not set
CONFIG_UID16=y

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y

#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODVERSIONS=y
CONFIG_KMOD=y

#
# Processor type and features
#
# CONFIG_M386 is not set
# CONFIG_M486 is not set
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
# CONFIG_M586MMX is not set
CONFIG_M686=y
# CONFIG_M686FXSR is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MCRUSOE is not set
# CONFIG_MWINCHIPC6 is not set
# CONFIG_MWINCHIP2 is not set
# CONFIG_MWINCHIP3D is not set
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_TSC=y
CONFIG_X86_GOOD_APIC=y
CONFIG_X86_PGE=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
# CONFIG_TOSHIBA is not set
CONFIG_MICROCODE=m
CONFIG_X86_MSR=m
CONFIG_X86_CPUID=m
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
# CONFIG_SMP is not set
CONFIG_X86_UP_IOAPIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_LOCAL_APIC=y

#
# General setup
#
CONFIG_NET=y
# CONFIG_VISWS is not set
CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GODIRECT is not set
CONFIG_PCI_GOANY=y