Back to home page

OSCL-LXR

 
 

    


0001 # SPDX-License-Identifier: GPL-2.0
0002 #
0003 # Building vDSO images for x86.
0004 #
0005 
0006 # do not instrument on vdso because KASAN is not compatible with user mode
0007 KASAN_SANITIZE                  := n
0008 
0009 # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
0010 KCOV_INSTRUMENT                := n
0011 
0012 VDSO64-y                := y
0013 
0014 vdso-install-$(VDSO64-y)        += vdso.so
0015 
0016 
0017 # files to link into the vdso
0018 vobjs-y := vdso-note.o um_vdso.o
0019 
0020 # files to link into kernel
0021 obj-$(VDSO64-y)                 += vdso.o vma.o
0022 
0023 vobjs := $(foreach F,$(vobjs-y),$(obj)/$F)
0024 
0025 $(obj)/vdso.o: $(obj)/vdso.so
0026 
0027 targets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y)
0028 
0029 CPPFLAGS_vdso.lds += -P -C
0030 
0031 VDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \
0032        -Wl,-z,max-page-size=4096
0033 
0034 $(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so
0035 
0036 $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(vobjs) FORCE
0037         $(call if_changed,vdso)
0038 
0039 $(obj)/%.so: OBJCOPYFLAGS := -S
0040 $(obj)/%.so: $(obj)/%.so.dbg FORCE
0041         $(call if_changed,objcopy)
0042 
0043 #
0044 # Don't omit frame pointers for ease of userspace debugging, but do
0045 # optimize sibling calls.
0046 #
0047 CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
0048        $(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \
0049        -fno-omit-frame-pointer -foptimize-sibling-calls
0050 
0051 $(vobjs): KBUILD_CFLAGS += $(CFL)
0052 
0053 #
0054 # vDSO code runs in userspace and -pg doesn't help with profiling anyway.
0055 #
0056 CFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage
0057 CFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage
0058 
0059 #
0060 # The DSO images are built using a special linker script.
0061 #
0062 quiet_cmd_vdso = VDSO    $@
0063       cmd_vdso = $(CC) -nostdlib -o $@ \
0064                        $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
0065                        -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \
0066                  sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
0067 
0068 VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack
0069 GCOV_PROFILE := n
0070 
0071 #
0072 # Install the unstripped copy of vdso*.so listed in $(vdso-install-y).
0073 #
0074 quiet_cmd_vdso_install = INSTALL $@
0075       cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/$@
0076 $(vdso-install-y): %.so: $(obj)/%.so.dbg FORCE
0077         @mkdir -p $(MODLIB)/vdso
0078         $(call cmd,vdso_install)
0079 
0080 PHONY += vdso_install $(vdso-install-y)
0081 vdso_install: $(vdso-install-y)