From: Horst von Brand <vonbrand@inf.utfsm.cl>
To: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: Re: kbuild: Simplify vmlinux generation
Date: Mon, 06 Sep 2004 14:41:39 -0400 [thread overview]
Message-ID: <200409061841.i86Ifdnj008952@laptop11.inf.utfsm.cl> (raw)
In-Reply-To: Message from Sam Ravnborg <sam@ravnborg.org> of "Sun, 05 Sep 2004 22:12:35 +0200." <20040905201235.GC16901@mars.ravnborg.org>
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
next prev parent reply other threads:[~2004-09-06 18:42 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <sam@ravnborg.org>
2004-09-05 20:12 ` Sam Ravnborg
2004-09-05 20:19 ` Sam Ravnborg
2004-09-06 18:41 ` Horst von Brand [this message]
2004-09-06 19:00 ` Sam Ravnborg
2004-09-06 19:12 ` Sam Ravnborg
2014-06-11 19:25 ` [PATCH v2] x86,vdso: Fix vdso_install Andy Lutomirski
2014-06-11 19:45 ` Sam Ravnborg
2014-06-12 13:19 ` Josh Boyer
2014-06-12 15:28 ` [PATCH v3] " Andy Lutomirski
2014-06-12 17:01 ` Josh Boyer
2014-06-13 17:24 ` H. Peter Anvin
2014-06-13 17:28 ` Andy Lutomirski
2014-06-13 18:19 ` [tip:x86/vdso] x86/vdso: " tip-bot for Andy Lutomirski
2004-06-14 20:40 [PATCH 0/5] kbuild Sam Ravnborg
2004-06-14 20:44 ` [PATCH 1/5] kbuild: default kernel image Sam Ravnborg
2004-06-14 21:05 ` Russell King
2004-06-15 4:40 ` Sam Ravnborg
2004-06-15 8:38 ` Russell King
2004-06-15 8:59 ` Christoph Hellwig
2004-06-15 21:07 ` Sam Ravnborg
2004-06-15 21:17 ` Russell King
2004-06-16 15:34 ` Tom Rini
2004-06-15 15:38 ` Tom Rini
2004-06-15 15:53 ` Russell King
2004-06-14 20:45 ` [PATCH 2/5] kbuild: move rpm to scripts/package Sam Ravnborg
2004-06-14 20:46 ` [PATCH 3/5] kbuild: add deb-pkg target Sam Ravnborg
2004-06-14 20:58 ` Wichert Akkerman
2004-06-14 21:22 ` Sam Ravnborg
2004-06-14 20:46 ` [PATCH 4/5] kbuild: make clean improved Sam Ravnborg
2004-06-14 20:50 ` Russell King
2004-06-14 21:19 ` Sam Ravnborg
2004-06-14 21:38 ` Tom Rini
2004-06-15 4:36 ` Sam Ravnborg
2004-06-15 18:50 ` V13
2004-06-14 20:48 ` [PATCH 5/5] kbuild: external module build doc Sam Ravnborg
2004-06-15 12:13 ` Horst von Brand
2004-06-15 20:09 ` Sam Ravnborg
2004-06-15 19:21 ` Jari Ruusu
2004-06-15 19:55 ` Sam Ravnborg
2004-06-15 23:00 ` Martin Schlemmer
2004-06-16 17:32 ` Jari Ruusu
2004-06-14 20:59 ` [PATCH 0/5] kbuild Sam Ravnborg
2004-06-14 23:56 ` Jeff Garzik
2004-06-15 15:41 ` Tom Rini
2004-06-15 17:49 ` Sam Ravnborg
2004-06-15 17:54 ` Tom Rini
2004-06-15 19:01 ` Sam Ravnborg
2004-06-15 19:27 ` Tom Rini
2004-06-15 21:02 ` Sam Ravnborg
2004-06-15 21:24 ` Tom Rini
2004-06-15 18:09 ` Russell King
2004-06-15 19:14 ` Sam Ravnborg
2004-06-15 19:46 ` Russell King
2004-06-15 20:12 ` Sam Ravnborg
2004-06-15 20:55 ` Sam Ravnborg
2004-06-15 20:59 ` Tom Rini
2004-06-15 21:24 ` Sam Ravnborg
2004-06-15 21:06 ` Russell King
2004-06-16 19:49 ` Sam Ravnborg
2004-06-16 20:08 ` Tom Rini
2004-06-16 20:54 ` Sam Ravnborg
2004-06-16 20:49 ` Tom Rini
2004-06-17 6:56 ` Jan-Benedict Glaw
2004-06-18 20:58 ` Sam Ravnborg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200409061841.i86Ifdnj008952@laptop11.inf.utfsm.cl \
--to=vonbrand@inf.utfsm.cl \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®