Re: spinlocks() are severely broken in 2.2.X and 2.4.X for modules

From: Jamie Lokier (lk@tantalophile.demon.co.uk)
Date: Fri Jun 30 2000 - 20:13:29 EDT

  • Next message: Jeff V. Merkey: "Re: spinlocks() are severely broken in 2.2.X and 2.4.X for modules"

    Jeff V. Merkey wrote:
    > what gets generated from spinlock.h and GCC in the 2.4.X case is as
    > follows:
    >
    > <NWLockLRU>
    > 0x45a0 mov 0x4(%esp, 1),%edx
    > 0x45a4 pushf
    > 0s45a5 pop %eax
    > 0x45a6 cli
    > 0x45a7 mov %eax,0x80(%edx)
    > 0x45ad lock decb 0x7C(%edx)
    > 0x45b1 js 0x4639 <ReleaseWaiters+49> // if the lock fails it
    > jumps to this address is in the function ReleaseWaiters() ????
    > 0x45b7 ret

    May I suggest you use the `--reloc' option to objdump to generate the
    disassembly, which will show the actual address that is jumped to.

    It will still say "0x4639 <ReleaseWaiters+49>", which is misleading
    (blame the disassembler), but it will also add a line saying where the
    instruction really jumps to after the module is loaded and relocated...

    have a nice day,
    -- Jamie

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Fri Jun 30 2000 - 20:19:10 EDT