Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1357599

Re: [PATCH v5 1/5] Shared library support

From Emese Revfy <re.emese@gmail.com>
Newsgroups linux.kernel
Subject Re: [PATCH v5 1/5] Shared library support
Date 2016-03-14 21:20 +0100
Message-ID <rcH86-dk-5@gated-at.bofh.it> (permalink)
References <r9PYe-39m-1@gated-at.bofh.it> <r9PYf-39m-25@gated-at.bofh.it> <rboKd-1W9-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri, 11 Mar 2016 15:19:33 +0900
Masahiro Yamada <yamada.masahiro@socionext.com> wrote:

> As an alternative, you can add needed build rules
> into tools/gcc/Makefile, not scripts/Makefile.host
> 
> I guess these rule won't be used in other places.

I think it is better if the rules stay under scripts/ because I expect that there will also be clang and llvm plugins
in the future (e.g., clang plugins can access the frontend that gcc plugins can't do). In this case these rules would
either have to be duplicated or moved back under scripts/ (which makes it difficult to backport).
 
> > +# hostcc-option
> > +# Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586)
> > +
> > +hostcc-option = $(call try-run,\
> > +       $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
> > +
> >  __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
> > +__hostlibs := $(sort $(hostlibs-y) $(hostlibs-m))
> > +__hostcxxlibs := $(sort $(hostcxxlibs-y) $(hostcxxlibs-m))
> >
> >  # C code
> >  # Executables compiled from a single .c file
> > @@ -42,6 +60,19 @@ host-cxxmulti        := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
> >  # C++ Object (.o) files compiled from .cc files
> >  host-cxxobjs   := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
> >
> > +# Shared libaries (only .c supported)
> > +# Shared libraries (.so) - all .so files referenced in "xxx-objs"
> > +host-cshlib    := $(sort $(filter %.so, $(host-cobjs)))
> 
> useless.

Which part do you think is useless and why?
 
> > +host-cshlib    += $(sort $(filter %.so, $(__hostlibs)))
> > +host-cxxshlib  := $(sort $(filter %.so, $(__hostcxxlibs)))
> > +# Remove .so files from "xxx-objs"
> > +host-cobjs     := $(filter-out %.so,$(host-cobjs))
> > +host-cxxobjs   := $(filter-out %.so,$(host-cxxobjs))
> > +
> > +# Object (.o) files used by the shared libaries
> > +host-cshobjs   := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
> > +host-cxxshobjs := $(sort $(foreach m,$(host-cxxshlib),$($(m:.so=-objs))))
> > +
> >  # output directory for programs/.o files
> >  # hostprogs-y := tools/build may have been specified.
> >  # Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
> > @@ -56,6 +87,10 @@ host-cmulti  := $(addprefix $(obj)/,$(host-cmulti))
> >  host-cobjs     := $(addprefix $(obj)/,$(host-cobjs))
> >  host-cxxmulti  := $(addprefix $(obj)/,$(host-cxxmulti))
> >  host-cxxobjs   := $(addprefix $(obj)/,$(host-cxxobjs))
> > +host-cshlib    := $(addprefix $(obj)/,$(host-cshlib))
> > +host-cxxshlib  := $(addprefix $(obj)/,$(host-cxxshlib))
> > +host-cshobjs   := $(addprefix $(obj)/,$(host-cshobjs))
> > +host-cxxshobjs := $(addprefix $(obj)/,$(host-cxxshobjs))
> >  host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
> >
> >  obj-dirs += $(host-objdirs)
> > @@ -124,5 +159,37 @@ quiet_cmd_host-cxxobjs     = HOSTCXX $@
> >  $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
> >         $(call if_changed_dep,host-cxxobjs)
> >
> > +# Compile .c file, create position independent .o file
> > +# host-cshobjs -> .o
> > +quiet_cmd_host-cshobjs = HOSTCC  -fPIC $@
> > +      cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
> > +$(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE
> > +       $(call if_changed_dep,host-cshobjs)
> > +
> > +# Compile .c file, create position independent .o file
> > +# host-cxxshobjs -> .o
> > +quiet_cmd_host-cxxshobjs       = HOSTCXX -fPIC $@
> > +      cmd_host-cxxshobjs       = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
> > +$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
> > +       $(call if_changed_dep,host-cxxshobjs)
> > +
> > +# Link a shared library, based on position independent .o files
> > +# *.o -> .so shared library (host-cshlib)
> > +quiet_cmd_host-cshlib  = HOSTLLD -shared $@
> > +      cmd_host-cshlib  = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
> > +                         $(addprefix $(obj)/,$($(@F:.so=-objs))) \
> > +                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
> > +$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE
> > +       $(call if_changed,host-cshlib)
> 
> 
> Could you use $(call multi-depend, ...)
> if you need to handle multi-object please?
> 
> Please refer to commit c8589d1e9e01 and commit 97e3226e6e984c8.

Ok, I will check it out.

> But, I still do not see any gcc-plugin that is large enough
> to be linked from multiple objects.

There will be large plugins later (typically if the plugin has more passes e.g., my size_overflow plugin).

-- 
Emese

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v5 0/5] Introduce GCC plugin infrastructure Emese Revfy <re.emese@gmail.com> - 2016-03-07 00:10 +0100
  [PATCH v5 3/5] Add Cyclomatic complexity GCC plugin Emese Revfy <re.emese@gmail.com> - 2016-03-07 00:10 +0100
    Re: [PATCH v5 3/5] Add Cyclomatic complexity GCC plugin Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-11 07:30 +0100
      Re: [PATCH v5 3/5] Add Cyclomatic complexity GCC plugin Emese Revfy <re.emese@gmail.com> - 2016-03-14 22:10 +0100
  [PATCH v5 5/5] Add sancov plugin Emese Revfy <re.emese@gmail.com> - 2016-03-07 00:10 +0100
    Re: [PATCH v5 5/5] Add sancov plugin Kees Cook <keescook@chromium.org> - 2016-03-07 22:10 +0100
      Re: [PATCH v5 5/5] Add sancov plugin Emese Revfy <re.emese@gmail.com> - 2016-03-07 22:40 +0100
      Re: [PATCH v5 5/5] Add sancov plugin Dmitry Vyukov <dvyukov@google.com> - 2016-03-08 12:00 +0100
  [PATCH v5 1/5] Shared library support Emese Revfy <re.emese@gmail.com> - 2016-03-07 00:10 +0100
    Re: [PATCH v5 1/5] Shared library support Kees Cook <keescook@chromium.org> - 2016-03-07 22:10 +0100
      Re: [PATCH v5 1/5] Shared library support Emese Revfy <re.emese@gmail.com> - 2016-03-07 22:40 +0100
    Re: [PATCH v5 1/5] Shared library support Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-11 07:30 +0100
      Re: [PATCH v5 1/5] Shared library support Emese Revfy <re.emese@gmail.com> - 2016-03-14 21:20 +0100
        Re: [PATCH v5 1/5] Shared library support Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-16 09:00 +0100
  Re: [kernel-hardening] [PATCH v5 2/5] GCC plugin infrastructure David Brown <david.brown@linaro.org> - 2016-03-09 10:10 +0100
    Re: [kernel-hardening] [PATCH v5 2/5] GCC plugin infrastructure Kees Cook <keescook@chromium.org> - 2016-03-09 22:00 +0100
      Re: [kernel-hardening] [PATCH v5 2/5] GCC plugin infrastructure Emese Revfy <re.emese@gmail.com> - 2016-03-09 23:10 +0100
    Re: [kernel-hardening] [PATCH v5 2/5] GCC plugin infrastructure Emese Revfy <re.emese@gmail.com> - 2016-03-09 23:10 +0100
  Re: [PATCH v5 2/5] GCC plugin infrastructure Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-11 07:30 +0100
    Re: [PATCH v5 2/5] GCC plugin infrastructure Emese Revfy <re.emese@gmail.com> - 2016-03-14 22:00 +0100
      Re: [PATCH v5 2/5] GCC plugin infrastructure Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-16 08:50 +0100
        Re: [PATCH v5 2/5] GCC plugin infrastructure Emese Revfy <re.emese@gmail.com> - 2016-03-16 22:10 +0100
    Re: [PATCH v5 2/5] GCC plugin infrastructure "PaX Team" <pageexec@freemail.hu> - 2016-03-14 22:30 +0100
      Re: [PATCH v5 2/5] GCC plugin infrastructure Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-16 08:40 +0100
        Re: [PATCH v5 2/5] GCC plugin infrastructure "PaX Team" <pageexec@freemail.hu> - 2016-03-16 14:00 +0100
          Re: [PATCH v5 2/5] GCC plugin infrastructure Masahiro Yamada <yamada.masahiro@socionext.com> - 2016-03-17 05:20 +0100

csiph-web