@@ -6,6 +6,7 @@ ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_
6
6
include $(srctree ) /lib/vdso/Makefile
7
7
8
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
9
10
10
11
ifneq ($(c-gettimeofday-y ) ,)
11
12
CFLAGS_vgettimeofday-32.o += -include $(c-gettimeofday-y )
@@ -15,6 +16,17 @@ ifneq ($(c-gettimeofday-y),)
15
16
CFLAGS_vgettimeofday-32.o += -ffreestanding -fasynchronous-unwind-tables
16
17
CFLAGS_REMOVE_vgettimeofday-32.o = $(CC_FLAGS_FTRACE )
17
18
CFLAGS_REMOVE_vgettimeofday-32.o += -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc
19
+ CFLAGS_vgettimeofday-64.o += -include $(c-gettimeofday-y )
20
+ CFLAGS_vgettimeofday-64.o += $(DISABLE_LATENT_ENTROPY_PLUGIN )
21
+ CFLAGS_vgettimeofday-64.o += $(call cc-option, -fno-stack-protector)
22
+ CFLAGS_vgettimeofday-64.o += -DDISABLE_BRANCH_PROFILING
23
+ CFLAGS_vgettimeofday-64.o += -ffreestanding -fasynchronous-unwind-tables
24
+ CFLAGS_REMOVE_vgettimeofday-64.o = $(CC_FLAGS_FTRACE )
25
+ # Go prior to 1.16.x assumes r30 is not clobbered by any VDSO code. That used to be true
26
+ # by accident when the VDSO was hand-written asm code, but may not be now that the VDSO is
27
+ # compiler generated. To avoid breaking Go tell GCC not to use r30. Impact on code
28
+ # generation is minimal, it will just use r29 instead.
29
+ CFLAGS_vgettimeofday-64.o += $(call cc-option, -ffixed-r30)
18
30
endif
19
31
20
32
# Build rules
27
39
28
40
targets := $(obj-vdso32 ) vdso32.so.dbg vgettimeofday-32.o
29
41
obj-vdso32 := $(addprefix $(obj ) /, $(obj-vdso32 ) )
42
+ targets += $(obj-vdso64 ) vdso64.so.dbg vgettimeofday-64.o
43
+ obj-vdso64 := $(addprefix $(obj ) /, $(obj-vdso64 ) )
30
44
31
45
GCOV_PROFILE := n
32
46
KCOV_INSTRUMENT := n
@@ -38,26 +52,42 @@ ccflags-y := -shared -fno-common -fno-builtin -nostdlib -Wl,--hash-style=both
38
52
CC32FLAGS := -Wl,-soname=linux-vdso32.so.1 -m32
39
53
AS32FLAGS := -D__VDSO32__ -s
40
54
55
+ CC64FLAGS := -Wl,-soname=linux-vdso64.so.1
56
+ AS64FLAGS := -D__VDSO64__ -s
57
+
41
58
targets += vdso32.lds
42
59
CPPFLAGS_vdso32.lds += -P -C -Upowerpc
60
+ targets += vdso64.lds
61
+ CPPFLAGS_vdso64.lds += -P -C -U$(ARCH )
43
62
44
63
# link rule for the .so file, .lds has to be first
45
64
$(obj ) /vdso32.so.dbg : $(src ) /vdso32.lds $(obj-vdso32 ) $(obj ) /vgettimeofday-32.o FORCE
46
65
$(call if_changed,vdso32ld_and_check)
66
+ $(obj ) /vdso64.so.dbg : $(src ) /vdso64.lds $(obj-vdso64 ) $(obj ) /vgettimeofday-64.o FORCE
67
+ $(call if_changed,vdso64ld_and_check)
47
68
48
69
# assembly rules for the .S files
49
70
$(obj-vdso32 ) : % -32.o: % .S FORCE
50
71
$(call if_changed_dep,vdso32as)
51
72
$(obj ) /vgettimeofday-32.o : % -32.o: % .c FORCE
52
73
$(call if_changed_dep,vdso32cc)
74
+ $(obj-vdso64 ) : % -64.o: % .S FORCE
75
+ $(call if_changed_dep,vdso64as)
76
+ $(obj ) /vgettimeofday-64.o : % -64.o: % .c FORCE
77
+ $(call if_changed_dep,cc_o_c)
53
78
54
79
# Generate VDSO offsets using helper script
55
80
gen-vdso32sym := $(srctree ) /$(src ) /gen_vdso32_offsets.sh
56
81
quiet_cmd_vdso32sym = VDSO32SYM $@
57
82
cmd_vdso32sym = $(NM ) $< | $(gen-vdso32sym ) | LC_ALL=C sort > $@
83
+ gen-vdso64sym := $(srctree ) /$(src ) /gen_vdso64_offsets.sh
84
+ quiet_cmd_vdso64sym = VDSO64SYM $@
85
+ cmd_vdso64sym = $(NM ) $< | $(gen-vdso64sym ) | LC_ALL=C sort > $@
58
86
59
87
include/generated/vdso32-offsets.h : $(obj ) /vdso32.so.dbg FORCE
60
88
$(call if_changed,vdso32sym)
89
+ include/generated/vdso64-offsets.h : $(obj ) /vdso64.so.dbg FORCE
90
+ $(call if_changed,vdso64sym)
61
91
62
92
# actual build commands
63
93
quiet_cmd_vdso32ld_and_check = VDSO32L $@
@@ -66,3 +96,8 @@ quiet_cmd_vdso32as = VDSO32A $@
66
96
cmd_vdso32as = $(VDSOCC ) $(a_flags ) $(CC32FLAGS ) $(AS32FLAGS ) -c -o $@ $<
67
97
quiet_cmd_vdso32cc = VDSO32C $@
68
98
cmd_vdso32cc = $(VDSOCC ) $(c_flags ) $(CC32FLAGS ) -c -o $@ $<
99
+
100
+ quiet_cmd_vdso64ld_and_check = VDSO64L $@
101
+ cmd_vdso64ld_and_check = $(VDSOCC ) $(c_flags ) $(CC64FLAGS ) -o $@ -Wl,-T$(filter % .lds,$^ ) $(filter % .o,$^ ) ; $(cmd_vdso_check )
102
+ quiet_cmd_vdso64as = VDSO64A $@
103
+ cmd_vdso64as = $(VDSOCC ) $(a_flags ) $(CC64FLAGS ) $(AS64FLAGS ) -c -o $@ $<
0 commit comments