Makefile 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. # SPDX-License-Identifier: GPL-2.0
  2. # Objects to go into the VDSO.
  3. # Include the generic Makefile to check the built vdso.
  4. include $(srctree)/lib/vdso/Makefile.include
  5. obj-vdso-y := elf.o vgettimeofday.o sigreturn.o
  6. # Common compiler flags between ABIs.
  7. ccflags-vdso := \
  8. $(filter -I%,$(KBUILD_CFLAGS)) \
  9. $(filter -E%,$(KBUILD_CFLAGS)) \
  10. $(filter -mmicromips,$(KBUILD_CFLAGS)) \
  11. $(filter -march=%,$(KBUILD_CFLAGS)) \
  12. $(filter -m%-float,$(KBUILD_CFLAGS)) \
  13. $(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
  14. $(CLANG_FLAGS) \
  15. -D__VDSO__
  16. ifndef CONFIG_64BIT
  17. ccflags-vdso += -DBUILD_VDSO32
  18. endif
  19. #
  20. # The -fno-jump-tables flag only prevents the compiler from generating
  21. # jump tables but does not prevent the compiler from emitting absolute
  22. # offsets.
  23. cflags-vdso := $(ccflags-vdso) \
  24. $(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
  25. $(filter -std=%,$(KBUILD_CFLAGS)) \
  26. -O3 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \
  27. -mrelax-pic-calls $(call cc-option, -mexplicit-relocs) \
  28. -fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
  29. $(call cc-option, -fno-asynchronous-unwind-tables)
  30. aflags-vdso := $(ccflags-vdso) \
  31. -D__ASSEMBLY__ -Wa,-gdwarf-2
  32. ifneq ($(c-gettimeofday-y),)
  33. CFLAGS_vgettimeofday.o = -include $(c-gettimeofday-y)
  34. # config-n32-o32-env.c prepares the environment to build a 32bit vDSO
  35. # library on a 64bit kernel.
  36. # Note: Needs to be included before than the generic library.
  37. CFLAGS_vgettimeofday-o32.o = -include $(src)/config-n32-o32-env.c -include $(c-gettimeofday-y)
  38. CFLAGS_vgettimeofday-n32.o = -include $(src)/config-n32-o32-env.c -include $(c-gettimeofday-y)
  39. endif
  40. CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE)
  41. ifdef CONFIG_MIPS_DISABLE_VDSO
  42. obj-vdso-y := $(filter-out vgettimeofday.o, $(obj-vdso-y))
  43. endif
  44. # VDSO linker flags.
  45. ldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \
  46. $(filter -E%,$(KBUILD_CFLAGS)) -shared \
  47. -G 0 --eh-frame-hdr --hash-style=sysv --build-id=sha1 -T
  48. CFLAGS_REMOVE_vdso.o = $(CC_FLAGS_FTRACE)
  49. # Check that we don't have PIC 'jalr t9' calls left
  50. quiet_cmd_vdso_mips_check = VDSOCHK $@
  51. cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | grep -E -h "jalr.*t9" > /dev/null; \
  52. then (echo >&2 "$@: PIC 'jalr t9' calls are not supported"; \
  53. rm -f $@; /bin/false); fi
  54. #
  55. # Shared build commands.
  56. #
  57. quiet_cmd_vdsold_and_vdso_check = LD $@
  58. cmd_vdsold_and_vdso_check = $(cmd_ld); $(cmd_vdso_check); $(cmd_vdso_mips_check)
  59. quiet_cmd_vdsoas_o_S = AS $@
  60. cmd_vdsoas_o_S = $(CC) $(a_flags) -c -o $@ $<
  61. # Strip rule for the raw .so files
  62. $(obj)/%.so.raw: OBJCOPYFLAGS := -S
  63. $(obj)/%.so.raw: $(obj)/%.so.dbg.raw FORCE
  64. $(call if_changed,objcopy)
  65. hostprogs := genvdso
  66. quiet_cmd_genvdso = GENVDSO $@
  67. define cmd_genvdso
  68. $(foreach file,$(filter %.raw,$^),cp $(file) $(file:%.raw=%) &&) \
  69. $(obj)/genvdso $(<:%.raw=%) $(<:%.dbg.raw=%) $@ $(VDSO_NAME)
  70. endef
  71. #
  72. # Build native VDSO.
  73. #
  74. native-abi := $(filter -mabi=%,$(KBUILD_CFLAGS))
  75. targets += $(obj-vdso-y)
  76. targets += vdso.lds
  77. targets += vdso.so.dbg.raw vdso.so.raw
  78. targets += vdso.so.dbg vdso.so
  79. targets += vdso-image.c
  80. obj-vdso := $(obj-vdso-y:%.o=$(obj)/%.o)
  81. $(obj-vdso): KBUILD_CFLAGS := $(cflags-vdso) $(native-abi)
  82. $(obj-vdso): KBUILD_AFLAGS := $(aflags-vdso) $(native-abi)
  83. $(obj)/vdso.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) $(native-abi)
  84. $(obj)/vdso.so.dbg.raw: $(obj)/vdso.lds $(obj-vdso) FORCE
  85. $(call if_changed,vdsold_and_vdso_check)
  86. $(obj)/vdso-image.c: $(obj)/vdso.so.dbg.raw $(obj)/vdso.so.raw \
  87. $(obj)/genvdso FORCE
  88. $(call if_changed,genvdso)
  89. obj-y += vdso-image.o
  90. #
  91. # Build O32 VDSO.
  92. #
  93. # Define these outside the ifdef to ensure they are picked up by clean.
  94. targets += $(obj-vdso-y:%.o=%-o32.o)
  95. targets += vdso-o32.lds
  96. targets += vdso-o32.so.dbg.raw vdso-o32.so.raw
  97. targets += vdso-o32.so.dbg vdso-o32.so
  98. targets += vdso-o32-image.c
  99. ifdef CONFIG_MIPS32_O32
  100. obj-vdso-o32 := $(obj-vdso-y:%.o=$(obj)/%-o32.o)
  101. $(obj-vdso-o32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=32
  102. $(obj-vdso-o32): KBUILD_AFLAGS := $(aflags-vdso) -mabi=32
  103. $(obj)/%-o32.o: $(src)/%.S FORCE
  104. $(call if_changed_dep,vdsoas_o_S)
  105. $(obj)/%-o32.o: $(src)/%.c FORCE
  106. $(call cmd,force_checksrc)
  107. $(call if_changed_rule,cc_o_c)
  108. $(obj)/vdso-o32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=32
  109. $(obj)/vdso-o32.lds: $(src)/vdso.lds.S FORCE
  110. $(call if_changed_dep,cpp_lds_S)
  111. $(obj)/vdso-o32.so.dbg.raw: $(obj)/vdso-o32.lds $(obj-vdso-o32) FORCE
  112. $(call if_changed,vdsold_and_vdso_check)
  113. $(obj)/vdso-o32-image.c: VDSO_NAME := o32
  114. $(obj)/vdso-o32-image.c: $(obj)/vdso-o32.so.dbg.raw $(obj)/vdso-o32.so.raw \
  115. $(obj)/genvdso FORCE
  116. $(call if_changed,genvdso)
  117. obj-y += vdso-o32-image.o
  118. endif
  119. #
  120. # Build N32 VDSO.
  121. #
  122. targets += $(obj-vdso-y:%.o=%-n32.o)
  123. targets += vdso-n32.lds
  124. targets += vdso-n32.so.dbg.raw vdso-n32.so.raw
  125. targets += vdso-n32.so.dbg vdso-n32.so
  126. targets += vdso-n32-image.c
  127. ifdef CONFIG_MIPS32_N32
  128. obj-vdso-n32 := $(obj-vdso-y:%.o=$(obj)/%-n32.o)
  129. $(obj-vdso-n32): KBUILD_CFLAGS := $(cflags-vdso) -mabi=n32
  130. $(obj-vdso-n32): KBUILD_AFLAGS := $(aflags-vdso) -mabi=n32
  131. $(obj)/%-n32.o: $(src)/%.S FORCE
  132. $(call if_changed_dep,vdsoas_o_S)
  133. $(obj)/%-n32.o: $(src)/%.c FORCE
  134. $(call cmd,force_checksrc)
  135. $(call if_changed_rule,cc_o_c)
  136. $(obj)/vdso-n32.lds: KBUILD_CPPFLAGS := $(ccflags-vdso) -mabi=n32
  137. $(obj)/vdso-n32.lds: $(src)/vdso.lds.S FORCE
  138. $(call if_changed_dep,cpp_lds_S)
  139. $(obj)/vdso-n32.so.dbg.raw: $(obj)/vdso-n32.lds $(obj-vdso-n32) FORCE
  140. $(call if_changed,vdsold_and_vdso_check)
  141. $(obj)/vdso-n32-image.c: VDSO_NAME := n32
  142. $(obj)/vdso-n32-image.c: $(obj)/vdso-n32.so.dbg.raw $(obj)/vdso-n32.so.raw \
  143. $(obj)/genvdso FORCE
  144. $(call if_changed,genvdso)
  145. obj-y += vdso-n32-image.o
  146. endif
  147. # FIXME: Need install rule for debug.
  148. # Needs to deal with dependency for generation of dbg by cmd_genvdso...