lkml.org 
[lkml]   [2004]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: kbuild: Simplify vmlinux generation
    Date
    From
    Sam Ravnborg <sam@ravnborg.org> said:

    [...]

    Some comments interspersed.

    Signed off by: Horst H. von Brand <vonbrand@inf.utfsm.cl>

    (Not too much intellect in here, and no property, but...)

    > diff -Nru a/Makefile b/Makefile
    > --- a/Makefile 2004-09-05 22:06:47 +02:00
    > +++ b/Makefile 2004-09-05 22:06:47 +02:00
    > @@ -545,67 +545,91 @@
    >
    > # Build vmlinux
    > # ---------------------------------------------------------------------------
    > +# vmlinux is build from the objects seleted by $(vmlinux-init) and

    selected

    > +# $(vmlinux-main). Most are built-in.o files from top-level directories
    > +# in the kernel tree, others are specified in arch/$(ARCH)Makefile.
    > +# Ordering when linking is important, and $(vmlinux-init) must be first.
    > +#
    > +# vmlinux
    > +# ^
    > +# |
    > +# +-< $(vmlinux-init)
    > +# | +--< init/version.o + more
    > +# |
    > +# +-< built-in.o
    > +# | +--< $(vmlinux-main)
    > +# | +--< driver/built-in.o mm/built-in.o + more
    > +# |
    > +# +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
    > +#
    > +# vmlinux version cannot be updated during normal descending-into-subdirs

    The vmlinux version? Or some file?

    > +# phase since we do not yet know if we need to update vmlinux.
    > +# Therefore this step is delayed until just before final link of vmlinux -
    > +# except in kallsyms case where it is done just before adding the

    in the kallsyms case

    > +# symbols to the kernel.
    > +#
    > +# System.map is generated to document addresses of all kernel symbols
    >
    > -# This is a bit tricky: If we need to relink vmlinux, we want
    > -# the version number incremented, which means recompile init/version.o
    > -# and relink init/init.o. However, we cannot do this during the
    > -# normal descending-into-subdirs phase, since at that time
    > -# we cannot yet know if we will need to relink vmlinux.
    > -# So we descend into init/ inside the rule for vmlinux again.
    > -vmlinux-objs := $(head-y) $(init-y) $(core-y) $(libs-y) $(drivers-y) $(net-y)
    > -
    > -quiet_cmd_vmlinux__ = LD $@
    > -define cmd_vmlinux__
    > - $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) $(head-y) $(init-y) \
    > - --start-group \
    > - $(core-y) \
    > - $(libs-y) \
    > - $(drivers-y) \
    > - $(net-y) \
    > - --end-group \
    > - $(filter .tmp_kallsyms%,$^) \
    > - -o $@
    > -endef
    > +vmlinux-init := $(head-y) $(init-y)
    > +vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)
    > +vmlinux-all := $(vmlinux-init) built-in.o
    > +vmlinux-lds := arch/$(ARCH)/kernel/vmlinux.lds
    > +
    > +# Rule to link vmlinux - also used during CONFIG_KALLSYMS
    > +# May be overridden by arch/$(ARCH)/Makefile
    > +quiet_cmd_vmlinux__ = LD $@
    > + cmd_vmlinux__ = $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \
    > + -T $(filter-out FORCE, $^) -o $@
    > +
    > +# Generate new vmlinux version
    > +quiet_cmd_vmlinux_version = GEN .version
    > + cmd_vmlinux_version = set -e; \
    > + . $(srctree)/scripts/mkversion > .tmp_version; \
    > + mv -f .tmp_version .version; \
    > + $(MAKE) $(build)=init
    > +
    > +# Generate System.map
    > +quiet_cmd_sysmap = SYSMAP
    > + cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
    >
    > -# set -e makes the rule exit immediately on error
    > +# Link of vmlinux
    > +# If CONFIG_KALLSYMS is set .version is already updated
    > +# Generate System.map and verify that the content is consistent
    >
    > define rule_vmlinux__
    > - +set -e; \
    > - $(if $(filter .tmp_kallsyms%,$^),, \
    > - echo ' GEN .version'; \
    > - . $(srctree)/scripts/mkversion > .tmp_version; \
    > - mv -f .tmp_version .version; \
    > - $(MAKE) $(build)=init; \
    > - ) \
    > - $(if $($(quiet)cmd_vmlinux__), \
    > - echo ' $($(quiet)cmd_vmlinux__)' &&) \
    > - $(cmd_vmlinux__); \
    > - echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
    > + $(if $(CONFIG_KALLSYMS),,$(call cmd,vmlinux_version))
    > +
    > + $(call cmd,vmlinux__)
    > + $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd
    > +
    > + $(Q)$(if $($(quiet)cmd_sysmap), \
    > + echo ' $($(quiet)cmd_sysmap) System.map' &&) \
    > + $(cmd_sysmap) $@ System.map; \
    > + if [ $$? -ne 0 ]; then \
    > + rm -f $@; \
    > + /bin/false; \
    > + fi;
    > + $(verify_kallsyms)
    > endef
    >
    > -quiet_cmd_sysmap = SYSMAP
    > - cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
    > -
    > -LDFLAGS_vmlinux += -T arch/$(ARCH)/kernel/vmlinux.lds
    > -
    > -# Generate section listing all symbols and add it into vmlinux
    > -# It's a three stage process:
    > -# o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is
    > -# empty
    > -# Running kallsyms on that gives us .tmp_kallsyms1.o with
    > -# the right size
    > -# o .tmp_vmlinux2 now has a __kallsyms section of the right size,
    > -# but due to the added section, some addresses have shifted
    > -# From here, we generate a correct .tmp_kallsyms2.o
    > -# o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
    > -# o Verify that the System.map from vmlinux matches the map from
    > -# .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
    > -# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
    > -# .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a
    > -# temporary bypass to allow the kernel to be built while the
    > -# maintainers work out what went wrong with kallsyms.
    >
    > ifdef CONFIG_KALLSYMS
    > +# Generate section listing all symbols and add it into vmlinux $(kallsyms.o)
    > +# It's a three stage process:
    > +# o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is
    > +# empty
    > +# Running kallsyms on that gives us .tmp_kallsyms1.o with
    > +# the right size - vmlinux version updated during this step

    is updated

    > +# o .tmp_vmlinux2 now has a __kallsyms section of the right size,
    > +# but due to the added section, some addresses have shifted.
    > +# From here, we generate a correct .tmp_kallsyms2.o
    > +# o The correct .tmp_kallsyms2.o is linked into the final vmlinux.
    > +# o Verify that the System.map from vmlinux matches the map from
    > +# .tmp_vmlinux2, just in case we did not generate kallsyms correctly.
    > +# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
    > +# .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a
    > +# temporary bypass to allow the kernel to be built while the
    > +# maintainers work out what went wrong with kallsyms.
    >
    > ifdef CONFIG_KALLSYMS_EXTRA_PASS
    > last_kallsyms := 3
    > @@ -615,16 +639,28 @@
    >
    > kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
    >
    > -define rule_verify_kallsyms
    > +define verify_kallsyms

    Why delete "rule_" here? Down you create a new rule with "rule_"

    [No further comments, rest snipped]
    --
    Dr. Horst H. von Brand User #22616 counter.li.org
    Departamento de Informatica Fono: +56 32 654431
    Universidad Tecnica Federico Santa Maria +56 32 654239
    Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513
    -
    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 14:05    [W:0.047 / U:64.128 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site