Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Roland McGrath
> I assume that if an error happened in a pipe set -e; would catch it.
> But I did not check that - I normally just adds set -e; without much thought.

No, you need set -o pipefail for that (which is a bashism).


Thanks,
Roland
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Sam Ravnborg
On Tue, Nov 20, 2007 at 11:10:15PM -0800, Roland McGrath wrote:
> > > +# This makes sure the $(obj) subdirectory exists even though vdso32/
> > > +# is not a kbuild sub-make subdirectory.
> > > +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
> > 
> > Should we teach kbuild to create dirs specified in targets?
> > Or we could 'fix' it so you do not need the override.
> 
> Something cleaner would be nice, yes.  I'll leave it to you to decide.

OK - if I come up with something smart I will convert the vdso stuff.

> 
> > use "set -e; in front of this shell script to bail out early
> > in case of errors.
> 
> Back when I knew something about make, all commands ran with sh -ec.
> Ah, progress.  Anyway, the one you cited does not have any commands that
> aren't tested with && or if already.  set -e would have no effect.
I assume that if an error happened in a pipe set -e; would catch it.
But I did not check that - I normally just adds set -e; without much thought.

Sam
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Roland McGrath
> > +# This makes sure the $(obj) subdirectory exists even though vdso32/
> > +# is not a kbuild sub-make subdirectory.
> > +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
> 
> Should we teach kbuild to create dirs specified in targets?
> Or we could 'fix' it so you do not need the override.

Something cleaner would be nice, yes.  I'll leave it to you to decide.

> use "set -e; in front of this shell script to bail out early
> in case of errors.

Back when I knew something about make, all commands ran with sh -ec.
Ah, progress.  Anyway, the one you cited does not have any commands that
aren't tested with && or if already.  set -e would have no effect.

> > +VDSO_LDFLAGS = -fPIC -shared $(call ld-option, 
> > -Wl$(comma)--hash-style=sysv)
> 
> Do you need to specify soname for 64-bit - seems missing?

Using this rule for the 64-bit vDSO is not in this patch.
Patch 18/18 defines VDSO_LDFLAGS_vdso.lds for this.

> > +$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
> > @mkdir -p $(MODLIB)/vdso
> > $(call cmd,vdso_install)
> Please use $(Q) in preference for @
> Then it is easier to debug using make V=1

This line is not being changed in this patch, so that is really a separate
question.  Other places in other Makefiles use @mkdir too, so if you are
concerned you could do a patch covering all of those.


Thanks,
Roland
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Sam Ravnborg
Hi Roland.

Some minor things below.
In general I like the simplification of this
area and having it moved out of kernel/Makefile is the-right-thing.

Sam

On Mon, Nov 19, 2007 at 02:05:32PM -0800, Roland McGrath wrote:
> 
> This builds the 32-bit vDSO images in the arch/x86/vdso subdirectory.
> Nothing uses the images yet, but this paves the way for consolidating
> the vDSO build logic all in one place.  The new images use a linker
> script sharing the layout parts from vdso-layout.lds.S with the 64-bit
> vDSO.  A new vdso32-syms.lds is generated in the style of vdso-syms.lds.
> 
> Signed-off-by: Roland McGrath <[EMAIL PROTECTED]>
> ---
>  arch/x86/vdso/Makefile|   76 +++-
>  arch/x86/vdso/vdso32/vdso32.lds.S |   37 ++
>  2 files changed, 110 insertions(+), 3 deletions(-)
>  create mode 100644 arch/x86/vdso/vdso32/vdso32.lds.S
> 
> diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
> index 6a665dd..a1e0418 100644
> --- a/arch/x86/vdso/Makefile
> +++ b/arch/x86/vdso/Makefile
> @@ -1,7 +1,15 @@
>  #
> -# x86-64 vDSO.
> +# Building vDSO images for x86.
>  #
>  
> +VDSO64-$(CONFIG_X86_64)  := y
> +VDSO32-$(CONFIG_X86_32)  := y
> +VDSO32-$(CONFIG_COMPAT)  := y
> +
> +vdso-install-$(VDSO64-y) += vdso.so
> +vdso-install-$(VDSO32-y) += $(vdso32-y:=.so)
> +
> +
>  # files to link into the vdso
>  vobjs-y := vdso-note.o vclock_gettime.o vgetcpu.o vvar.o
>  
> @@ -57,10 +65,72 @@ quiet_cmd_vdsosym = VDSOSYM $@
>  $(obj)/%-syms.lds: $(obj)/%.so.dbg FORCE
>   $(call if_changed,vdsosym)
>  
> +#
> +# Build multiple 32-bit vDSO images to choose from at boot time.
> +#
> +vdso32.so-$(CONFIG_X86_32)   += int80
> +vdso32.so-$(VDSO32-y)+= sysenter
> +
> +CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds)
> +VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
> +
> +# This makes sure the $(obj) subdirectory exists even though vdso32/
> +# is not a kbuild sub-make subdirectory.
> +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/

Should we teach kbuild to create dirs specified in targets?
Or we could 'fix' it so you do not need the override.

> +
> +targets += vdso32/vdso32.lds
> +targets += $(vdso32.so-y:%=vdso32-%.so.dbg) $(vdso32.so-y:%=vdso32-%.so)
> +targets += vdso32/note.o $(vdso32.so-y:%=vdso32/%.o)
> +
> +extra-y  += $(vdso32.so-y:%=vdso32-%.so)
> +
> +$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): asflags-$(CONFIG_X86_64) += -m32
> +
> +$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
> +  $(obj)/vdso32/vdso32.lds \
> +  $(obj)/vdso32/note.o \
> +  $(obj)/vdso32/%.o
> + $(call if_changed,vdso)
> +
> +# Make vdso32-*-syms.lds from each image, and then make sure they match.
> +# The only difference should be that some do not define 
> VDSO32_SYSENTER_RETURN.
> +
> +targets += vdso32-syms.lds $(vdso32.so-y:%=vdso32-%-syms.lds)
> +
> +quiet_cmd_vdso32sym = VDSOSYM $@
> +define cmd_vdso32sym
> + if LC_ALL=C sort -u $(filter-out FORCE,$^) > $(@D)/.tmp_$(@F) && \
> +$(foreach H,$(filter-out FORCE,$^),\
> +  if grep -q VDSO32_SYSENTER_RETURN $H; \
> +  then diff -u $(@D)/.tmp_$(@F) $H; \
> +  else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) | \
> +   diff -u - $H; fi &&) : ;\
> + then mv -f $(@D)/.tmp_$(@F) $@; \
> + else rm -f $(@D)/.tmp_$(@F); exit 1; \
> + fi
> +endef

use "set -e; in front of this shell script to bail out early
in case of errors.


> +
> +$(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
> + $(call if_changed,vdso32sym)
> +
> +#
> +# The DSO images are built using a special linker script.
> +#
> +quiet_cmd_vdso = VDSO$@
> +  cmd_vdso = $(CC) -nostdlib -o $@ \
> +$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
> +-Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
> +
> +VDSO_LDFLAGS = -fPIC -shared $(call ld-option, -Wl$(comma)--hash-style=sysv)

Do you need to specify soname for 64-bit - seems missing?

> +
> +#
> +# Install the unstripped copy of vdso*.so listed in $(vdso-install-y).
> +#
>  quiet_cmd_vdso_install = INSTALL $@
>cmd_vdso_install = cp $(obj)/[EMAIL PROTECTED] $(MODLIB)/vdso/$@
> -vdso.so:
> +$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
>   @mkdir -p $(MODLIB)/vdso
>   $(call cmd,vdso_install)
Please use $(Q) in preference for @
Then it is easier to debug using make V=1

> -vdso_install: vdso.so
> +PHONY += vdso_install $(vdso-install-y)
> +vdso_install: $(vdso-install-y)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Sam Ravnborg
Hi Roland.

Some minor things below.
In general I like the simplification of this
area and having it moved out of kernel/Makefile is the-right-thing.

Sam

On Mon, Nov 19, 2007 at 02:05:32PM -0800, Roland McGrath wrote:
 
 This builds the 32-bit vDSO images in the arch/x86/vdso subdirectory.
 Nothing uses the images yet, but this paves the way for consolidating
 the vDSO build logic all in one place.  The new images use a linker
 script sharing the layout parts from vdso-layout.lds.S with the 64-bit
 vDSO.  A new vdso32-syms.lds is generated in the style of vdso-syms.lds.
 
 Signed-off-by: Roland McGrath [EMAIL PROTECTED]
 ---
  arch/x86/vdso/Makefile|   76 +++-
  arch/x86/vdso/vdso32/vdso32.lds.S |   37 ++
  2 files changed, 110 insertions(+), 3 deletions(-)
  create mode 100644 arch/x86/vdso/vdso32/vdso32.lds.S
 
 diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
 index 6a665dd..a1e0418 100644
 --- a/arch/x86/vdso/Makefile
 +++ b/arch/x86/vdso/Makefile
 @@ -1,7 +1,15 @@
  #
 -# x86-64 vDSO.
 +# Building vDSO images for x86.
  #
  
 +VDSO64-$(CONFIG_X86_64)  := y
 +VDSO32-$(CONFIG_X86_32)  := y
 +VDSO32-$(CONFIG_COMPAT)  := y
 +
 +vdso-install-$(VDSO64-y) += vdso.so
 +vdso-install-$(VDSO32-y) += $(vdso32-y:=.so)
 +
 +
  # files to link into the vdso
  vobjs-y := vdso-note.o vclock_gettime.o vgetcpu.o vvar.o
  
 @@ -57,10 +65,72 @@ quiet_cmd_vdsosym = VDSOSYM $@
  $(obj)/%-syms.lds: $(obj)/%.so.dbg FORCE
   $(call if_changed,vdsosym)
  
 +#
 +# Build multiple 32-bit vDSO images to choose from at boot time.
 +#
 +vdso32.so-$(CONFIG_X86_32)   += int80
 +vdso32.so-$(VDSO32-y)+= sysenter
 +
 +CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds)
 +VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
 +
 +# This makes sure the $(obj) subdirectory exists even though vdso32/
 +# is not a kbuild sub-make subdirectory.
 +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/

Should we teach kbuild to create dirs specified in targets?
Or we could 'fix' it so you do not need the override.

 +
 +targets += vdso32/vdso32.lds
 +targets += $(vdso32.so-y:%=vdso32-%.so.dbg) $(vdso32.so-y:%=vdso32-%.so)
 +targets += vdso32/note.o $(vdso32.so-y:%=vdso32/%.o)
 +
 +extra-y  += $(vdso32.so-y:%=vdso32-%.so)
 +
 +$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): asflags-$(CONFIG_X86_64) += -m32
 +
 +$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
 +  $(obj)/vdso32/vdso32.lds \
 +  $(obj)/vdso32/note.o \
 +  $(obj)/vdso32/%.o
 + $(call if_changed,vdso)
 +
 +# Make vdso32-*-syms.lds from each image, and then make sure they match.
 +# The only difference should be that some do not define 
 VDSO32_SYSENTER_RETURN.
 +
 +targets += vdso32-syms.lds $(vdso32.so-y:%=vdso32-%-syms.lds)
 +
 +quiet_cmd_vdso32sym = VDSOSYM $@
 +define cmd_vdso32sym
 + if LC_ALL=C sort -u $(filter-out FORCE,$^)  $(@D)/.tmp_$(@F)  \
 +$(foreach H,$(filter-out FORCE,$^),\
 +  if grep -q VDSO32_SYSENTER_RETURN $H; \
 +  then diff -u $(@D)/.tmp_$(@F) $H; \
 +  else sed /VDSO32_SYSENTER_RETURN/d $(@D)/.tmp_$(@F) | \
 +   diff -u - $H; fi ) : ;\
 + then mv -f $(@D)/.tmp_$(@F) $@; \
 + else rm -f $(@D)/.tmp_$(@F); exit 1; \
 + fi
 +endef

use set -e; in front of this shell script to bail out early
in case of errors.


 +
 +$(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
 + $(call if_changed,vdso32sym)
 +
 +#
 +# The DSO images are built using a special linker script.
 +#
 +quiet_cmd_vdso = VDSO$@
 +  cmd_vdso = $(CC) -nostdlib -o $@ \
 +$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
 +-Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
 +
 +VDSO_LDFLAGS = -fPIC -shared $(call ld-option, -Wl$(comma)--hash-style=sysv)

Do you need to specify soname for 64-bit - seems missing?

 +
 +#
 +# Install the unstripped copy of vdso*.so listed in $(vdso-install-y).
 +#
  quiet_cmd_vdso_install = INSTALL $@
cmd_vdso_install = cp $(obj)/[EMAIL PROTECTED] $(MODLIB)/vdso/$@
 -vdso.so:
 +$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
   @mkdir -p $(MODLIB)/vdso
   $(call cmd,vdso_install)
Please use $(Q) in preference for @
Then it is easier to debug using make V=1

 -vdso_install: vdso.so
 +PHONY += vdso_install $(vdso-install-y)
 +vdso_install: $(vdso-install-y)

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Roland McGrath
  +# This makes sure the $(obj) subdirectory exists even though vdso32/
  +# is not a kbuild sub-make subdirectory.
  +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
 
 Should we teach kbuild to create dirs specified in targets?
 Or we could 'fix' it so you do not need the override.

Something cleaner would be nice, yes.  I'll leave it to you to decide.

 use set -e; in front of this shell script to bail out early
 in case of errors.

Back when I knew something about make, all commands ran with sh -ec.
Ah, progress.  Anyway, the one you cited does not have any commands that
aren't tested with  or if already.  set -e would have no effect.

  +VDSO_LDFLAGS = -fPIC -shared $(call ld-option, 
  -Wl$(comma)--hash-style=sysv)
 
 Do you need to specify soname for 64-bit - seems missing?

Using this rule for the 64-bit vDSO is not in this patch.
Patch 18/18 defines VDSO_LDFLAGS_vdso.lds for this.

  +$(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
  @mkdir -p $(MODLIB)/vdso
  $(call cmd,vdso_install)
 Please use $(Q) in preference for @
 Then it is easier to debug using make V=1

This line is not being changed in this patch, so that is really a separate
question.  Other places in other Makefiles use @mkdir too, so if you are
concerned you could do a patch covering all of those.


Thanks,
Roland
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Sam Ravnborg
On Tue, Nov 20, 2007 at 11:10:15PM -0800, Roland McGrath wrote:
   +# This makes sure the $(obj) subdirectory exists even though vdso32/
   +# is not a kbuild sub-make subdirectory.
   +override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
  
  Should we teach kbuild to create dirs specified in targets?
  Or we could 'fix' it so you do not need the override.
 
 Something cleaner would be nice, yes.  I'll leave it to you to decide.

OK - if I come up with something smart I will convert the vdso stuff.

 
  use set -e; in front of this shell script to bail out early
  in case of errors.
 
 Back when I knew something about make, all commands ran with sh -ec.
 Ah, progress.  Anyway, the one you cited does not have any commands that
 aren't tested with  or if already.  set -e would have no effect.
I assume that if an error happened in a pipe set -e; would catch it.
But I did not check that - I normally just adds set -e; without much thought.

Sam
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 07/18] x86 vDSO: vdso32 build

2007-11-20 Thread Roland McGrath
 I assume that if an error happened in a pipe set -e; would catch it.
 But I did not check that - I normally just adds set -e; without much thought.

No, you need set -o pipefail for that (which is a bashism).


Thanks,
Roland
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/