Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1501179 > unrolled thread
| Started by | Michal Marek <mmarek@suse.com> |
|---|---|
| First post | 2016-10-14 22:20 +0200 |
| Last post | 2016-10-17 09:00 +0200 |
| Articles | 3 — 3 participants |
Back to article view | Back to linux.kernel
[GIT PULL] kbuild changes for v4.9-rc1 Michal Marek <mmarek@suse.com> - 2016-10-14 22:20 +0200
Re: [GIT PULL] kbuild changes for v4.9-rc1 Nicholas Piggin <npiggin@gmail.com> - 2016-10-17 06:00 +0200
Re: [GIT PULL] kbuild changes for v4.9-rc1 Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-10-17 09:00 +0200
| From | Michal Marek <mmarek@suse.com> |
|---|---|
| Date | 2016-10-14 22:20 +0200 |
| Subject | [GIT PULL] kbuild changes for v4.9-rc1 |
| Message-ID | <ssh7r-68U-9@gated-at.bofh.it> |
Hi Linus,
please pull these kbuild changes for v4.9-rc1:
- EXPORT_SYMBOL for asm source by Al Viro. This does bring a regression,
because genksyms no longer generates checksums for these symbols
(CONFIG_MODVERSIONS). Nick Piggin is working on a patch to fix this.
Plus, we are talking about functions like strcpy(), which rarely
change prototypes.
- Fixes for PPC fallout of the above by Stephen Rothwell and Nick Piggin
- fixdep speedup by Alexey Dobriyan.
- Preparatory work by Nick Piggin to allow architectures to build with
-ffunction-sections, -fdata-sections and --gc-sections
- CONFIG_THIN_ARCHIVES support by Stephen Rothwell
- Fix for filenames with colons in the initramfs source by me.
The following changes since commit 29b4817d4018df78086157ea3a55c1d9424a7cfc:
Linux 4.8-rc1 (2016-08-07 18:18:00 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git kbuild
for you to fetch changes up to 590abbdd273304b55824bcb9ea91840ea375575d:
initramfs: Escape colons in depfile (2016-09-23 10:35:32 +0200)
----------------------------------------------------------------
Al Viro (12):
[kbuild] handle exports in lib-y objects reliably
EXPORT_SYMBOL() for asm
x86: move exports to actual definitions
alpha: move exports to actual definitions
m68k: move exports to definitions
s390: move exports to definitions
arm: move exports to definitions
ppc: move exports to definitions
sparc: move exports to definitions
[sparc] unify 32bit and 64bit string.h
sparc32: debride memcpy.S a bit
ia64: move exports to definitions
Alexey Dobriyan (1):
fixdep: faster CONFIG_ search
Michal Marek (2):
kbuild: Regenerate genksyms lexer
initramfs: Escape colons in depfile
Nicholas Piggin (5):
kbuild: genksyms fix for typeof handling
kbuild: allow archs to select link dead code/data elimination
kbuild: add arch specific post-link Makefile
kbuild: -ffunction-sections fix for archs with conflicting sections
powerpc/64: whitelist unresolved modversions CRCs
Stephen Rothwell (2):
kbuild: allow architectures to use thin archives instead of ld -r
ppc: there is no clear_pages to export
Documentation/kbuild/makefiles.txt | 16 +++
Makefile | 19 +++-
arch/Kconfig | 21 ++++
arch/alpha/include/asm/Kbuild | 1 +
arch/alpha/kernel/Makefile | 2 +-
arch/alpha/kernel/alpha_ksyms.c | 102 -------------------
arch/alpha/kernel/machvec_impl.h | 6 +-
arch/alpha/kernel/setup.c | 1 +
arch/alpha/lib/callback_srm.S | 5 +
arch/alpha/lib/checksum.c | 3 +
arch/alpha/lib/clear_page.S | 3 +-
arch/alpha/lib/clear_user.S | 2 +
arch/alpha/lib/copy_page.S | 3 +-
arch/alpha/lib/copy_user.S | 3 +
arch/alpha/lib/csum_ipv6_magic.S | 2 +
arch/alpha/lib/csum_partial_copy.c | 2 +
arch/alpha/lib/dec_and_lock.c | 2 +
arch/alpha/lib/divide.S | 3 +
arch/alpha/lib/ev6-clear_page.S | 3 +-
arch/alpha/lib/ev6-clear_user.S | 3 +-
arch/alpha/lib/ev6-copy_page.S | 3 +-
arch/alpha/lib/ev6-copy_user.S | 3 +-
arch/alpha/lib/ev6-csum_ipv6_magic.S | 2 +
arch/alpha/lib/ev6-divide.S | 3 +
arch/alpha/lib/ev6-memchr.S | 3 +-
arch/alpha/lib/ev6-memcpy.S | 3 +-
arch/alpha/lib/ev6-memset.S | 7 +-
arch/alpha/lib/ev67-strcat.S | 3 +-
arch/alpha/lib/ev67-strchr.S | 3 +-
arch/alpha/lib/ev67-strlen.S | 3 +-
arch/alpha/lib/ev67-strncat.S | 3 +-
arch/alpha/lib/ev67-strrchr.S | 3 +-
arch/alpha/lib/fpreg.c | 7 ++
arch/alpha/lib/memchr.S | 3 +-
arch/alpha/lib/memcpy.c | 5 +-
arch/alpha/lib/memmove.S | 3 +-
arch/alpha/lib/memset.S | 7 +-
arch/alpha/lib/strcat.S | 2 +
arch/alpha/lib/strchr.S | 3 +-
arch/alpha/lib/strcpy.S | 3 +-
arch/alpha/lib/strlen.S | 3 +-
arch/alpha/lib/strncat.S | 3 +-
arch/alpha/lib/strncpy.S | 3 +-
arch/alpha/lib/strrchr.S | 3 +-
arch/arm/include/asm/Kbuild | 1 +
arch/arm/kernel/Makefile | 2 +-
arch/arm/kernel/armksyms.c | 183 ----------------------------------
arch/arm/kernel/entry-ftrace.S | 3 +
arch/arm/kernel/head.S | 3 +
arch/arm/kernel/smccc-call.S | 3 +
arch/arm/lib/ashldi3.S | 3 +
arch/arm/lib/ashrdi3.S | 3 +
arch/arm/lib/bitops.h | 5 +
arch/arm/lib/bswapsdi2.S | 3 +
arch/arm/lib/clear_user.S | 4 +
arch/arm/lib/copy_from_user.S | 2 +
arch/arm/lib/copy_page.S | 2 +
arch/arm/lib/copy_to_user.S | 4 +
arch/arm/lib/csumipv6.S | 3 +-
arch/arm/lib/csumpartial.S | 2 +
arch/arm/lib/csumpartialcopy.S | 1 +
arch/arm/lib/csumpartialcopygeneric.S | 2 +
arch/arm/lib/csumpartialcopyuser.S | 1 +
arch/arm/lib/delay.c | 2 +
arch/arm/lib/div64.S | 2 +
arch/arm/lib/findbit.S | 9 ++
arch/arm/lib/getuser.S | 9 ++
arch/arm/lib/io-readsb.S | 2 +
arch/arm/lib/io-readsl.S | 2 +
arch/arm/lib/io-readsw-armv3.S | 3 +-
arch/arm/lib/io-readsw-armv4.S | 2 +
arch/arm/lib/io-writesb.S | 2 +
arch/arm/lib/io-writesl.S | 2 +
arch/arm/lib/io-writesw-armv3.S | 2 +
arch/arm/lib/io-writesw-armv4.S | 2 +
arch/arm/lib/lib1funcs.S | 9 ++
arch/arm/lib/lshrdi3.S | 3 +
arch/arm/lib/memchr.S | 2 +
arch/arm/lib/memcpy.S | 3 +
arch/arm/lib/memmove.S | 2 +
arch/arm/lib/memset.S | 3 +
arch/arm/lib/memzero.S | 2 +
arch/arm/lib/muldi3.S | 3 +
arch/arm/lib/putuser.S | 5 +
arch/arm/lib/strchr.S | 2 +
arch/arm/lib/strrchr.S | 2 +
arch/arm/lib/uaccess_with_memcpy.c | 3 +
arch/arm/lib/ucmpdi2.S | 3 +
arch/arm/mach-imx/Makefile | 1 -
arch/arm/mach-imx/ssi-fiq-ksym.c | 20 ----
arch/arm/mach-imx/ssi-fiq.S | 7 +-
arch/ia64/hp/sim/boot/Makefile | 2 +-
arch/ia64/include/asm/export.h | 3 +
arch/ia64/kernel/entry.S | 3 +
arch/ia64/kernel/esi_stub.S | 2 +
arch/ia64/kernel/head.S | 2 +
arch/ia64/kernel/ia64_ksyms.c | 94 +----------------
arch/ia64/kernel/ivt.S | 2 +
arch/ia64/kernel/pal.S | 7 ++
arch/ia64/kernel/setup.c | 4 +
arch/ia64/lib/Makefile | 8 +-
arch/ia64/lib/clear_page.S | 2 +
arch/ia64/lib/clear_user.S | 2 +
arch/ia64/lib/copy_page.S | 2 +
arch/ia64/lib/copy_page_mck.S | 2 +
arch/ia64/lib/copy_user.S | 2 +
arch/ia64/lib/flush.S | 2 +
arch/ia64/lib/idiv32.S | 2 +
arch/ia64/lib/idiv64.S | 2 +
arch/ia64/lib/ip_fast_csum.S | 3 +
arch/ia64/lib/memcpy.S | 2 +
arch/ia64/lib/memcpy_mck.S | 3 +
arch/ia64/lib/memset.S | 2 +
arch/ia64/lib/strlen.S | 2 +
arch/ia64/lib/strlen_user.S | 2 +
arch/ia64/lib/strncpy_from_user.S | 2 +
arch/ia64/lib/strnlen_user.S | 2 +
arch/ia64/lib/xor.S | 5 +
arch/m68k/include/asm/export.h | 3 +
arch/m68k/kernel/Makefile | 2 +-
arch/m68k/kernel/m68k_ksyms.c | 32 ------
arch/m68k/lib/ashldi3.c | 4 +
arch/m68k/lib/ashrdi3.c | 4 +
arch/m68k/lib/divsi3.S | 3 +
arch/m68k/lib/lshrdi3.c | 4 +
arch/m68k/lib/modsi3.S | 3 +
arch/m68k/lib/muldi3.c | 4 +
arch/m68k/lib/mulsi3.S | 4 +-
arch/m68k/lib/udivsi3.S | 4 +-
arch/m68k/lib/umodsi3.S | 4 +-
arch/powerpc/include/asm/Kbuild | 1 +
arch/powerpc/kernel/Makefile | 4 -
arch/powerpc/kernel/entry_32.S | 2 +
arch/powerpc/kernel/entry_64.S | 3 +
arch/powerpc/kernel/epapr_hcalls.S | 2 +
arch/powerpc/kernel/fpu.S | 3 +
arch/powerpc/kernel/head_32.S | 5 +
arch/powerpc/kernel/head_40x.S | 2 +
arch/powerpc/kernel/head_44x.S | 2 +
arch/powerpc/kernel/head_64.S | 2 +
arch/powerpc/kernel/head_8xx.S | 2 +
arch/powerpc/kernel/head_fsl_booke.S | 2 +
arch/powerpc/kernel/misc.S | 2 +
arch/powerpc/kernel/misc_32.S | 10 ++
arch/powerpc/kernel/misc_64.S | 4 +
arch/powerpc/kernel/pci-common.c | 1 +
arch/powerpc/kernel/pci_32.c | 2 +
arch/powerpc/kernel/ppc_ksyms.c | 37 -------
arch/powerpc/kernel/ppc_ksyms_32.c | 60 -----------
arch/powerpc/kernel/setup_32.c | 6 ++
arch/powerpc/kernel/time.c | 1 +
arch/powerpc/kernel/vector.S | 3 +
arch/powerpc/lib/Makefile | 2 +-
arch/powerpc/lib/checksum_32.S | 3 +
arch/powerpc/lib/checksum_64.S | 3 +
arch/powerpc/lib/copy_32.S | 5 +
arch/powerpc/lib/copypage_64.S | 2 +
arch/powerpc/lib/copyuser_64.S | 2 +
arch/powerpc/lib/hweight_64.S | 5 +
arch/powerpc/lib/mem_64.S | 3 +
arch/powerpc/lib/memcmp_64.S | 2 +
arch/powerpc/lib/memcpy_64.S | 2 +
arch/powerpc/lib/ppc_ksyms.c | 29 ------
arch/powerpc/lib/string.S | 6 ++
arch/powerpc/lib/string_64.S | 2 +
arch/powerpc/mm/hash_low_32.S | 3 +
arch/powerpc/relocs_check.sh | 4 +-
arch/powerpc/sysdev/dcr-low.S | 3 +
arch/s390/include/asm/Kbuild | 1 +
arch/s390/kernel/Makefile | 2 +-
arch/s390/kernel/entry.S | 6 ++
arch/s390/kernel/mcount.S | 3 +
arch/s390/kernel/s390_ksyms.c | 15 ---
arch/s390/lib/mem.S | 3 +
arch/sparc/include/asm/Kbuild | 1 +
arch/sparc/include/asm/string.h | 34 +++++++
arch/sparc/include/asm/string_32.h | 56 -----------
arch/sparc/include/asm/string_64.h | 44 --------
arch/sparc/kernel/Makefile | 2 +-
arch/sparc/kernel/entry.S | 3 +
arch/sparc/kernel/head_32.S | 3 +
arch/sparc/kernel/head_64.S | 7 +-
arch/sparc/kernel/helpers.S | 2 +
arch/sparc/kernel/hvcalls.S | 5 +
arch/sparc/kernel/sparc_ksyms.c | 12 +++
arch/sparc/kernel/sparc_ksyms_32.c | 31 ------
arch/sparc/kernel/sparc_ksyms_64.c | 53 ----------
arch/sparc/lib/Makefile | 1 -
arch/sparc/lib/U1memcpy.S | 2 +
arch/sparc/lib/VISsave.S | 2 +
arch/sparc/lib/ashldi3.S | 2 +
arch/sparc/lib/ashrdi3.S | 2 +
arch/sparc/lib/atomic_64.S | 16 ++-
arch/sparc/lib/bitops.S | 7 ++
arch/sparc/lib/blockops.S | 3 +
arch/sparc/lib/bzero.S | 4 +
arch/sparc/lib/checksum_32.S | 3 +
arch/sparc/lib/checksum_64.S | 2 +
arch/sparc/lib/clear_page.S | 3 +
arch/sparc/lib/copy_in_user.S | 2 +
arch/sparc/lib/copy_page.S | 2 +
arch/sparc/lib/copy_user.S | 2 +
arch/sparc/lib/csum_copy.S | 3 +
arch/sparc/lib/divdi3.S | 2 +
arch/sparc/lib/ffs.S | 3 +
arch/sparc/lib/hweight.S | 5 +
arch/sparc/lib/ipcsum.S | 2 +
arch/sparc/lib/ksyms.c | 174 --------------------------------
arch/sparc/lib/locks.S | 5 +
arch/sparc/lib/lshrdi3.S | 2 +
arch/sparc/lib/mcount.S | 2 +
arch/sparc/lib/memcmp.S | 2 +
arch/sparc/lib/memcpy.S | 86 +---------------
arch/sparc/lib/memmove.S | 2 +
arch/sparc/lib/memscan_32.S | 4 +
arch/sparc/lib/memscan_64.S | 4 +
arch/sparc/lib/memset.S | 3 +
arch/sparc/lib/muldi3.S | 2 +
arch/sparc/lib/strlen.S | 2 +
arch/sparc/lib/strncmp_32.S | 2 +
arch/sparc/lib/strncmp_64.S | 2 +
arch/sparc/lib/xor.S | 9 ++
arch/x86/entry/entry_32.S | 2 +
arch/x86/entry/entry_64.S | 2 +
arch/x86/entry/thunk_32.S | 3 +
arch/x86/entry/thunk_64.S | 3 +
arch/x86/include/asm/export.h | 4 +
arch/x86/kernel/Makefile | 4 +-
arch/x86/kernel/head_32.S | 2 +
arch/x86/kernel/head_64.S | 3 +
arch/x86/kernel/i386_ksyms_32.c | 47 ---------
arch/x86/kernel/mcount_64.S | 2 +
arch/x86/kernel/x8664_ksyms_64.c | 85 ----------------
arch/x86/lib/checksum_32.S | 3 +
arch/x86/lib/clear_page_64.S | 2 +
arch/x86/lib/cmpxchg8b_emu.S | 2 +
arch/x86/lib/copy_page_64.S | 2 +
arch/x86/lib/copy_user_64.S | 8 ++
arch/x86/lib/csum-partial_64.c | 1 +
arch/x86/lib/getuser.S | 5 +
arch/x86/lib/hweight.S | 3 +
arch/x86/lib/memcpy_64.S | 4 +
arch/x86/lib/memmove_64.S | 3 +
arch/x86/lib/memset_64.S | 3 +
arch/x86/lib/putuser.S | 5 +
arch/x86/lib/strstr_32.c | 3 +-
arch/x86/um/Makefile | 2 +-
arch/x86/um/checksum_32.S | 2 +
arch/x86/um/ksyms.c | 13 ---
include/asm-generic/export.h | 94 +++++++++++++++++
include/asm-generic/vmlinux.lds.h | 57 ++++++-----
include/linux/compiler.h | 23 +++++
include/linux/export.h | 30 +++---
include/linux/init.h | 38 +++----
init/Makefile | 2 +
scripts/Makefile.build | 43 +++++++-
scripts/Makefile.modpost | 14 ++-
scripts/basic/fixdep.c | 86 ++++++----------
scripts/gen_initramfs_list.sh | 5 +-
scripts/genksyms/lex.l | 35 ++++---
scripts/genksyms/lex.lex.c_shipped | 35 ++++---
scripts/link-vmlinux.sh | 71 +++++++++++--
262 files changed, 1094 insertions(+), 1403 deletions(-)
delete mode 100644 arch/alpha/kernel/alpha_ksyms.c
delete mode 100644 arch/arm/kernel/armksyms.c
delete mode 100644 arch/arm/mach-imx/ssi-fiq-ksym.c
create mode 100644 arch/ia64/include/asm/export.h
create mode 100644 arch/m68k/include/asm/export.h
delete mode 100644 arch/m68k/kernel/m68k_ksyms.c
delete mode 100644 arch/powerpc/kernel/ppc_ksyms.c
delete mode 100644 arch/powerpc/kernel/ppc_ksyms_32.c
delete mode 100644 arch/powerpc/lib/ppc_ksyms.c
delete mode 100644 arch/s390/kernel/s390_ksyms.c
create mode 100644 arch/sparc/kernel/sparc_ksyms.c
delete mode 100644 arch/sparc/kernel/sparc_ksyms_32.c
delete mode 100644 arch/sparc/kernel/sparc_ksyms_64.c
delete mode 100644 arch/sparc/lib/ksyms.c
create mode 100644 arch/x86/include/asm/export.h
delete mode 100644 arch/x86/kernel/i386_ksyms_32.c
delete mode 100644 arch/x86/kernel/x8664_ksyms_64.c
delete mode 100644 arch/x86/um/ksyms.c
create mode 100644 include/asm-generic/export.h
[toc] | [next] | [standalone]
| From | Nicholas Piggin <npiggin@gmail.com> |
|---|---|
| Date | 2016-10-17 06:00 +0200 |
| Message-ID | <st7fI-6x3-5@gated-at.bofh.it> |
| In reply to | #1501179 |
On Sat, 15 Oct 2016 17:22:05 -0700
Omar Sandoval <osandov@osandov.com> wrote:
> On Fri, Oct 14, 2016 at 10:12:46PM +0200, Michal Marek wrote:
> > Hi Linus,
> >
> > please pull these kbuild changes for v4.9-rc1:
> >
> > - EXPORT_SYMBOL for asm source by Al Viro. This does bring a regression,
> > because genksyms no longer generates checksums for these symbols
> > (CONFIG_MODVERSIONS). Nick Piggin is working on a patch to fix this.
> > Plus, we are talking about functions like strcpy(), which rarely
> > change prototypes.
>
> So this has broken all module loading for me. I get the following dmesg
> spew:
>
> ...
> [ 4.586914] scsi_mod: no symbol version for memset
> [ 4.587920] scsi_mod: Unknown symbol memset (err -22)
> [ 4.588443] scsi_mod: no symbol version for ___preempt_schedule
> [ 4.589026] scsi_mod: Unknown symbol ___preempt_schedule (err -22)
> ...
>
> Reverting 784d5699eddc ("x86: move exports to actual definitions") fixes
> it for me. This is with GCC 6.2.1, binutils 2.27, attached config.
>
Thanks for the report. Could you try this patch and see if it helps?
Allow architectures to create asm/asm-prototypes.h file that
provides C prototypes for exported asm functions, which enables
proper CRC versions to be generated for them.
It's done by creating a trivial C program that includes that file
and the EXPORT_SYMBOL()s from the .S file, and preprocesses that
then sends the result to genksyms.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
scripts/Makefile.build | 71 +++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 65 insertions(+), 6 deletions(-)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index de46ab0..edcf876 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -159,7 +159,8 @@ cmd_cpp_i_c = $(CPP) $(c_flags) -o $@ $<
$(obj)/%.i: $(src)/%.c FORCE
$(call if_changed_dep,cpp_i_c)
-cmd_gensymtypes = \
+# These mirror gensymtypes_S and co below, keep them in synch.
+cmd_gensymtypes_c = \
$(CPP) -D__GENKSYMS__ $(c_flags) $< | \
$(GENKSYMS) $(if $(1), -T $(2)) \
$(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \
@@ -169,7 +170,7 @@ cmd_gensymtypes = \
quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
cmd_cc_symtypes_c = \
set -e; \
- $(call cmd_gensymtypes,true,$@) >/dev/null; \
+ $(call cmd_gensymtypes_c,true,$@) >/dev/null; \
test -s $@ || rm -f $@
$(obj)/%.symtypes : $(src)/%.c FORCE
@@ -198,9 +199,10 @@ else
# the actual value of the checksum generated by genksyms
cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
-cmd_modversions = \
+
+cmd_modversions_c = \
if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
- $(call cmd_gensymtypes,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
+ $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
> $(@D)/.tmp_$(@F:.o=.ver); \
\
$(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
@@ -268,13 +270,14 @@ endif # CONFIG_STACK_VALIDATION
define rule_cc_o_c
$(call echo-cmd,checksrc) $(cmd_checksrc) \
$(call cmd_and_fixdep,cc_o_c) \
- $(cmd_modversions) \
+ $(cmd_modversions_c) \
$(cmd_objtool) \
$(call echo-cmd,record_mcount) $(cmd_record_mcount)
endef
define rule_as_o_S
$(call cmd_and_fixdep,as_o_S) \
+ $(cmd_modversions_S) \
$(cmd_objtool)
endef
@@ -314,6 +317,32 @@ modkern_aflags := $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)
$(real-objs-m) : modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
$(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE)
+# .S file exports must have their C prototypes defined in asm/asm-prototypes.h
+# or a file that it includes, in order to get versioned symbols. We build a
+# dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from
+# the .S file (with trailing ';'), and run genksyms on that, to extract vers.
+#
+# These mirror gensymtypes_c and co above, keep them in synch.
+cmd_gensymtypes_S = \
+ (echo "\#include <linux/kernel.h>" ; \
+ echo "\#include <asm/asm-prototypes.h>" ; \
+ grep EXPORT_SYMBOL $< | sed 's/$$/;/' ) | \
+ $(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \
+ $(GENKSYMS) $(if $(1), -T $(2)) \
+ $(patsubst y,-s _,$(CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX)) \
+ $(if $(KBUILD_PRESERVE),-p) \
+ -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null))
+
+quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@
+cmd_cc_symtypes_S = \
+ set -e; \
+ $(call cmd_gensymtypes_S,true,$@) >/dev/null; \
+ test -s $@ || rm -f $@
+
+$(obj)/%.symtypes : $(src)/%.S FORCE
+ $(call cmd,cc_symtypes_S)
+
+
quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@
cmd_cpp_s_S = $(CPP) $(a_flags) -o $@ $<
@@ -321,7 +350,37 @@ $(obj)/%.s: $(src)/%.S FORCE
$(call if_changed_dep,cpp_s_S)
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
-cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+ifndef CONFIG_MODVERSIONS
+cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+else
+
+ASM_PROTOTYPES := $(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/asm-prototypes.h)
+
+ifeq ($(ASM_PROTOTYPES),)
+cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
+
+else
+
+# versioning matches the C process described above, with difference that
+# we parse asm-prototypes.h C header to get function definitions.
+
+cmd_as_o_S = $(CC) $(a_flags) -c -o $(@D)/.tmp_$(@F) $<
+
+cmd_modversions_S = \
+ if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then \
+ $(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \
+ > $(@D)/.tmp_$(@F:.o=.ver); \
+ \
+ $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F) \
+ -T $(@D)/.tmp_$(@F:.o=.ver); \
+ rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver); \
+ else \
+ mv -f $(@D)/.tmp_$(@F) $@; \
+ fi;
+endif
+endif
$(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE
$(call if_changed_rule,as_o_S)
--
2.9.3
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-10-17 09:00 +0200 |
| Message-ID | <sta3U-8rr-9@gated-at.bofh.it> |
| In reply to | #1501607 |
Hi,
>> Reverting 784d5699eddc ("x86: move exports to actual definitions") fixes
>> it for me. This is with GCC 6.2.1, binutils 2.27, attached config.
I've had the same problem. Reverting your binutils from 2.27 to 2.26,
will also fix it. It seems ld 2.27 is not merging weak symbols from .o
files to vmlinux when linking.
Anyhow all crc for symbols exported from .S will be 0, so Nicholas
patch make sense.
Mathieu
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web