lkml.org 
[lkml]   [2002]   [Jan]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Re: crc32 and lib.a (was Re: [PATCH] nbd in 2.5.3 does not
    On Thu, Jan 31, 2002 at 03:31:15PM -0500, Jeff Garzik wrote:
    > > Unfortunately during conversion I found that there is lib/bust_spinlocks.c,
    > > which is always included in lib.a, is always compiled, even if architecture
    > > provides its own bust_spinlocks function.
    >
    > Yep

    > > But of course if there is consensus that I should convert lib/lib.a
    > > into lib/lib.o, I can either create Config.in symbol
    > > CONFIG_NEED_GENERIC_BUST_SPINLOCK, or add HAVE_ARCH_BUST_SPINLOCK #define
    > > into some of i386, ia64, mips64, s390 and s390x architecture dependent
    > > headers.
    >
    > Implementing HAVE_ARCH_BUST_SPINLOCK would follow kernel convention
    > quite nicely...

    Hi Linus,
    included patch (for 2.5.3) fixes problems with late initialization
    of lib/crc32.o - as it was part of .a library file, it was picked by
    link process AFTER at least one .o file required it - for example
    when ipv4 autoconfiguration file needed it. So crc32's initalization
    function was invoked after ipconfig's one - and it crashed inside
    of ipconfig due to this problem.

    Jeff Garzik advised me that I should convert lib.a to lib.o instead
    of moving crc32 somewhere else, so I did it. I decided to put
    HAVE_ARCH_BUST_SPINLOCKS macro to asm/system.h headers - if you disagree
    with this location, tell me.

    Couple of architectures adds $(TOPDIR)/lib/lib.o into its LIBS
    instead of reusing already set $(LIBS) variable. I was not sure
    what PPC people meant with this, so I left it as is.

    I'd like to ask architecture maintainers (especially ia64, PPC, Sparc
    and Sparc64 maintainers) for verification that my changes did not break
    anything... I tested only i386, but changes were obvious...

    Best regards,
    Petr Vandrovec
    vandrove@vc.cvut.cz


    diff -urdN linux/Makefile linux/Makefile
    --- linux/Makefile Wed Jan 30 02:24:01 2002
    +++ linux/Makefile Thu Jan 31 19:36:31 2002
    @@ -121,7 +121,7 @@
    CORE_FILES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
    NETWORKS =net/network.o

    -LIBS =$(TOPDIR)/lib/lib.a
    +LIBS =$(TOPDIR)/lib/lib.o
    SUBDIRS =kernel lib drivers mm fs net ipc

    DRIVERS-n :=
    diff -urdN linux/arch/ia64/boot/Makefile linux/arch/ia64/boot/Makefile
    --- linux/arch/ia64/boot/Makefile Thu Jan 4 20:50:17 2001
    +++ linux/arch/ia64/boot/Makefile Thu Jan 31 19:31:04 2002
    @@ -23,7 +23,7 @@
    all: $(targets-y)

    bootloader: $(OBJECTS)
    - $(LD) $(LINKFLAGS) $(OBJECTS) $(TOPDIR)/lib/lib.a $(TOPDIR)/arch/$(ARCH)/lib/lib.a \
    + $(LD) $(LINKFLAGS) $(OBJECTS) $(TOPDIR)/lib/lib.o $(TOPDIR)/arch/$(ARCH)/lib/lib.a \
    -o bootloader

    clean:
    diff -urdN linux/arch/ppc/boot/chrp/Makefile linux/arch/ppc/boot/chrp/Makefile
    --- linux/arch/ppc/boot/chrp/Makefile Tue Aug 28 13:58:33 2001
    +++ linux/arch/ppc/boot/chrp/Makefile Thu Jan 31 19:29:34 2002
    @@ -23,7 +23,7 @@

    OBJS = ../common/crt0.o start.o main.o misc.o ../common/string.o image.o \
    ../common/ofcommon.o
    -LIBS = $(TOPDIR)/lib/lib.a ../lib/zlib.a
    +LIBS = $(TOPDIR)/lib/lib.o ../lib/zlib.a
    ADDNOTE = ../utils/addnote
    PIGGYBACK = ../utils/piggyback

    diff -urdN linux/arch/ppc/boot/pmac/Makefile linux/arch/ppc/boot/pmac/Makefile
    --- linux/arch/ppc/boot/pmac/Makefile Tue Aug 28 13:58:33 2001
    +++ linux/arch/ppc/boot/pmac/Makefile Thu Jan 31 19:29:14 2002
    @@ -15,7 +15,7 @@
    COMMONOBJS = start.o misc.o ../common/string.o image.o ../common/ofcommon.o
    COFFOBJS = ../common/coffcrt0.o $(COMMONOBJS) coffmain.o
    CHRPOBJS = ../common/crt0.o $(COMMONOBJS) chrpmain.o
    -LIBS = $(TOPDIR)/lib/lib.a ../lib/zlib.a
    +LIBS = $(TOPDIR)/lib/lib.o ../lib/zlib.a

    MKNOTE := ../utils/mknote
    SIZE := ../utils/size
    diff -urdN linux/arch/sparc/Makefile linux/arch/sparc/Makefile
    --- linux/arch/sparc/Makefile Sat Jul 28 19:12:37 2001
    +++ linux/arch/sparc/Makefile Thu Jan 31 19:26:07 2002
    @@ -41,7 +41,7 @@
    CORE_FILES := arch/sparc/kernel/kernel.o arch/sparc/mm/mm.o $(CORE_FILES) \
    arch/sparc/math-emu/math-emu.o

    -LIBS := $(TOPDIR)/lib/lib.a $(LIBS) $(TOPDIR)/arch/sparc/prom/promlib.a \
    +LIBS := $(LIBS) $(TOPDIR)/arch/sparc/prom/promlib.a \
    $(TOPDIR)/arch/sparc/lib/lib.a

    # This one has to come last
    diff -urdN linux/arch/sparc64/Makefile linux/arch/sparc64/Makefile
    --- linux/arch/sparc64/Makefile Mon Jan 14 18:10:44 2002
    +++ linux/arch/sparc64/Makefile Thu Jan 31 19:30:09 2002
    @@ -69,7 +69,7 @@

    CORE_FILES += arch/sparc64/math-emu/math-emu.o

    -LIBS := $(TOPDIR)/lib/lib.a $(LIBS) $(TOPDIR)/arch/sparc64/prom/promlib.a \
    +LIBS := $(LIBS) $(TOPDIR)/arch/sparc64/prom/promlib.a \
    $(TOPDIR)/arch/sparc64/lib/lib.a

    vmlinux.aout: vmlinux
    diff -urdN linux/include/asm-i386/system.h linux/include/asm-i386/system.h
    --- linux/include/asm-i386/system.h Wed Jan 30 05:41:09 2002
    +++ linux/include/asm-i386/system.h Thu Jan 31 20:38:16 2002
    @@ -123,6 +123,8 @@
    __asm__("movl %0,%%cr4": :"r" (x));
    #define stts() write_cr0(8 | read_cr0())

    +#define HAVE_ARCH_BUST_SPINLOCKS
    +
    #endif /* __KERNEL__ */

    #define wbinvd() \
    diff -urdN linux/include/asm-ia64/system.h linux/include/asm-ia64/system.h
    --- linux/include/asm-ia64/system.h Fri Nov 9 22:26:17 2001
    +++ linux/include/asm-ia64/system.h Thu Jan 31 20:38:55 2002
    @@ -412,6 +412,8 @@
    } while (0)
    #endif

    +#define HAVE_ARCH_BUST_SPINLOCKS
    +
    #endif /* __KERNEL__ */

    #endif /* __ASSEMBLY__ */
    diff -urdN linux/include/asm-mips64/system.h linux/include/asm-mips64/system.h
    --- linux/include/asm-mips64/system.h Wed Jul 4 18:50:39 2001
    +++ linux/include/asm-mips64/system.h Thu Jan 31 20:39:49 2002
    @@ -256,4 +256,6 @@

    extern void set_except_vector(int n, void *addr);

    +#define HAVE_ARCH_BUST_SPINLOCKS
    +
    #endif /* _ASM_SYSTEM_H */
    diff -urdN linux/include/asm-s390/system.h linux/include/asm-s390/system.h
    --- linux/include/asm-s390/system.h Wed Jul 25 21:12:02 2001
    +++ linux/include/asm-s390/system.h Thu Jan 31 20:40:24 2002
    @@ -250,6 +250,9 @@
    extern void save_fp_regs(s390_fp_regs *fpregs);
    extern int restore_fp_regs1(s390_fp_regs *fpregs);
    extern void restore_fp_regs(s390_fp_regs *fpregs);
    +
    +#define HAVE_ARCH_BUST_SPINLOCKS
    +
    #endif

    #endif
    diff -urdN linux/include/asm-s390x/system.h linux/include/asm-s390x/system.h
    --- linux/include/asm-s390x/system.h Wed Jul 25 21:12:03 2001
    +++ linux/include/asm-s390x/system.h Thu Jan 31 20:40:40 2002
    @@ -260,6 +260,9 @@
    extern void save_fp_regs(s390_fp_regs *fpregs);
    extern int restore_fp_regs1(s390_fp_regs *fpregs);
    extern void restore_fp_regs(s390_fp_regs *fpregs);
    +
    +#define HAVE_ARCH_BUST_SPINLOCKS
    +
    #endif

    #endif
    diff -urdN linux/lib/Makefile linux/lib/Makefile
    --- linux/lib/Makefile Wed Jan 30 05:30:41 2002
    +++ linux/lib/Makefile Thu Jan 31 20:28:16 2002
    @@ -6,7 +6,7 @@
    # unless it's something special (ie not a .c file).
    #

    -L_TARGET := lib.a
    +O_TARGET := lib.o

    export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o crc32.o

    diff -urdN linux/lib/bust_spinlocks.c linux/lib/bust_spinlocks.c
    --- linux/lib/bust_spinlocks.c Mon Sep 17 04:22:40 2001
    +++ linux/lib/bust_spinlocks.c Thu Jan 31 20:43:10 2002
    @@ -14,6 +14,8 @@
    #include <linux/wait.h>
    #include <linux/vt_kern.h>

    +#ifndef HAVE_ARCH_BUST_SPINLOCKS
    +
    extern spinlock_t timerlist_lock;

    void bust_spinlocks(int yes)
    @@ -38,4 +40,4 @@
    }
    }

    -
    +#endif /* HAVE_ARCH_BUST_SPINLOCKS */
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:16    [W:3.249 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site