mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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®