| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 | include $(srctree)/lib/vdso/Makefile.include
|
| 7 |
|
| 8 | obj-vdso32 = sigtramp32-32.o gettimeofday-32.o datapage-32.o cacheflush-32.o note-32.o getcpu-32.o
|
| 9 | obj-vdso64 = sigtramp64-64.o gettimeofday-64.o datapage-64.o cacheflush-64.o note-64.o getcpu-64.o
|
| 10 |
|
| 11 | obj-vdso32 += getrandom-32.o vgetrandom-chacha-32.o
|
| 12 | obj-vdso64 += getrandom-64.o vgetrandom-chacha-64.o
|
| 13 |
|
| 14 | ifneq ($(c-gettimeofday-y),)
|
| 15 | CFLAGS_vgettimeofday-32.o += -include $(c-gettimeofday-y)
|
| 16 |
|
| 17 |
|
| 18 |
|
| 19 |
|
| 20 | CFLAGS_vgettimeofday-64.o += -include $(c-gettimeofday-y) $(call cc-option, -ffixed-r30)
|
| 21 | endif
|
| 22 |
|
| 23 | ifneq ($(c-getrandom-y),)
|
| 24 | CFLAGS_vgetrandom-32.o += -include $(c-getrandom-y)
|
| 25 | CFLAGS_vgetrandom-64.o += -include $(c-getrandom-y)
|
| 26 | endif
|
| 27 |
|
| 28 |
|
| 29 |
|
| 30 | ifdef CROSS32_COMPILE
|
| 31 | VDSOCC := $(CROSS32_COMPILE)gcc
|
| 32 | else
|
| 33 | VDSOCC := $(CC)
|
| 34 | endif
|
| 35 |
|
| 36 | targets := $(obj-vdso32) vdso32.so.dbg vgettimeofday-32.o vgetrandom-32.o
|
| 37 | targets += crtsavres-32.o
|
| 38 | obj-vdso32 := $(addprefix $(obj)/, $(obj-vdso32))
|
| 39 | targets += $(obj-vdso64) vdso64.so.dbg vgettimeofday-64.o vgetrandom-64.o
|
| 40 | obj-vdso64 := $(addprefix $(obj)/, $(obj-vdso64))
|
| 41 |
|
| 42 | ccflags-y := -fno-common -fno-builtin -DBUILD_VDSO
|
| 43 | ccflags-y += $(DISABLE_LATENT_ENTROPY_PLUGIN)
|
| 44 | ccflags-y += $(call cc-option, -fno-stack-protector)
|
| 45 | ccflags-y += -DDISABLE_BRANCH_PROFILING
|
| 46 | ccflags-y += $(CONFIG_CC_OPT_INLINE_MEMSET)
|
| 47 | ccflags-y += -ffreestanding -fasynchronous-unwind-tables
|
| 48 | ccflags-remove-y := $(CC_FLAGS_FTRACE)
|
| 49 | ldflags-y := -Wl,--hash-style=both -nostdlib -shared -z noexecstack $(CLANG_FLAGS)
|
| 50 | ldflags-$(CONFIG_LD_IS_LLD) += $(call cc-option,--ld-path=$(LD),-fuse-ld=lld)
|
| 51 | ldflags-$(CONFIG_LD_ORPHAN_WARN) += -Wl,--orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL)
|
| 52 |
|
| 53 |
|
| 54 | ldflags-y += $(filter-out $(CC_AUTO_VAR_INIT_ZERO_ENABLER) $(CC_FLAGS_FTRACE) -Wa$(comma)%, $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS))
|
| 55 |
|
| 56 | CC32FLAGS := -m32
|
| 57 | CC32FLAGSREMOVE := -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc -mpcrel
|
| 58 | ifdef CONFIG_CC_IS_CLANG
|
| 59 |
|
| 60 |
|
| 61 | CC32FLAGSREMOVE += -fno-stack-clash-protection
|
| 62 |
|
| 63 |
|
| 64 |
|
| 65 | CC32FLAGSREMOVE += -mstack-protector-guard%
|
| 66 |
|
| 67 |
|
| 68 |
|
| 69 |
|
| 70 |
|
| 71 | CC32FLAGSREMOVE += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
|
| 72 | endif
|
| 73 | LD32FLAGS := -Wl,-soname=linux-vdso32.so.1
|
| 74 | AS32FLAGS := -D__VDSO32__
|
| 75 |
|
| 76 | LD64FLAGS := -Wl,-soname=linux-vdso64.so.1
|
| 77 | AS64FLAGS := -D__VDSO64__
|
| 78 |
|
| 79 | targets += vdso32.lds
|
| 80 | CPPFLAGS_vdso32.lds += -P -C -Upowerpc
|
| 81 | targets += vdso64.lds
|
| 82 | CPPFLAGS_vdso64.lds += -P -C
|
| 83 |
|
| 84 |
|
| 85 | $(obj)/vdso32.so.dbg: $(obj)/vdso32.lds $(obj-vdso32) $(obj)/vgettimeofday-32.o $(obj)/vgetrandom-32.o $(obj)/crtsavres-32.o FORCE
|
| 86 | $(call if_changed,vdso32ld_and_check)
|
| 87 | $(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) $(obj)/vgettimeofday-64.o $(obj)/vgetrandom-64.o FORCE
|
| 88 | $(call if_changed,vdso64ld_and_check)
|
| 89 |
|
| 90 |
|
| 91 | $(obj-vdso32): %-32.o: %.S FORCE
|
| 92 | $(call if_changed_dep,vdso32as)
|
| 93 | $(obj)/crtsavres-32.o: %-32.o: $(srctree)/arch/powerpc/lib/crtsavres.S FORCE
|
| 94 | $(call if_changed_dep,vdso32as)
|
| 95 | $(obj)/vgettimeofday-32.o: %-32.o: %.c FORCE
|
| 96 | $(call if_changed_dep,vdso32cc)
|
| 97 | $(obj)/vgetrandom-32.o: %-32.o: %.c FORCE
|
| 98 | $(call if_changed_dep,vdso32cc)
|
| 99 | $(obj-vdso64): %-64.o: %.S FORCE
|
| 100 | $(call if_changed_dep,vdso64as)
|
| 101 | $(obj)/vgettimeofday-64.o: %-64.o: %.c FORCE
|
| 102 | $(call if_changed_dep,cc_o_c)
|
| 103 | $(obj)/vgetrandom-64.o: %-64.o: %.c FORCE
|
| 104 | $(call if_changed_dep,cc_o_c)
|
| 105 |
|
| 106 |
|
| 107 | gen-vdso32sym := $(src)/gen_vdso32_offsets.sh
|
| 108 | quiet_cmd_vdso32sym = VDSO32SYM $@
|
| 109 | cmd_vdso32sym = $(NM) $< | $(gen-vdso32sym) | LC_ALL=C sort > $@
|
| 110 | gen-vdso64sym := $(src)/gen_vdso64_offsets.sh
|
| 111 | quiet_cmd_vdso64sym = VDSO64SYM $@
|
| 112 | cmd_vdso64sym = $(NM) $< | $(gen-vdso64sym) | LC_ALL=C sort > $@
|
| 113 |
|
| 114 | include/generated/vdso32-offsets.h: $(obj)/vdso32.so.dbg FORCE
|
| 115 | $(call if_changed,vdso32sym)
|
| 116 | include/generated/vdso64-offsets.h: $(obj)/vdso64.so.dbg FORCE
|
| 117 | $(call if_changed,vdso64sym)
|
| 118 |
|
| 119 |
|
| 120 | quiet_cmd_vdso32ld_and_check = VDSO32L $@
|
| 121 | cmd_vdso32ld_and_check = $(VDSOCC) $(ldflags-y) $(CC32FLAGS) $(LD32FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^); $(cmd_vdso_check)
|
| 122 | quiet_cmd_vdso32as = VDSO32A $@
|
| 123 | cmd_vdso32as = $(VDSOCC) $(a_flags) $(CC32FLAGS) $(AS32FLAGS) -c -o $@ $<
|
| 124 | quiet_cmd_vdso32cc = VDSO32C $@
|
| 125 | cmd_vdso32cc = $(VDSOCC) $(filter-out $(CC32FLAGSREMOVE), $(c_flags)) $(CC32FLAGS) -c -o $@ $<
|
| 126 |
|
| 127 | quiet_cmd_vdso64ld_and_check = VDSO64L $@
|
| 128 | cmd_vdso64ld_and_check = $(VDSOCC) $(ldflags-y) $(LD64FLAGS) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^); $(cmd_vdso_check)
|
| 129 | quiet_cmd_vdso64as = VDSO64A $@
|
| 130 | cmd_vdso64as = $(VDSOCC) $(a_flags) $(AS64FLAGS) -c -o $@ $<
|