2 datarootdir
= @datarootdir@
5 ksplice-script
= $(datadir)/ksplice
/ksplice-obj.pl
7 KSPLICE_KID ?
= $(error
"You must set KSPLICE_KID.")
8 KSPLICE_VERSION ?
= $(error
"You must set KSPLICE_VERSION.")
9 map_printk ?
= $(error
"You must set map_printk.")
11 ifneq ($(KSPLICE_STANDALONE
),)
12 KSPLICE_CFLAGS
+= -DKSPLICE_STANDALONE
14 KSPLICE_CFLAGS
+= -DKSPLICE_KID
=$(KSPLICE_KID
)
15 KSPLICE_CFLAGS
+= -DMAP_PRINTK
=0x
$(map_printk
)L
18 name-fix ?
= $(subst $(comma
),_
,$(subst -,_
,$(1)))
19 target
= $(call name-fix
,$(mod
))
20 KSPLICE_MID
= $(KSPLICE_KID
)_
$(target
)
21 KSPLICE
= ksplice-
$(KSPLICE_MID
)
22 KSPLICE_CORE
= ksplice-
$(KSPLICE_KID
)
24 quiet_cmd_ksplice-collect
= COLLECT
$@
25 cmd_ksplice-collect
= \
26 $(ksplice-script
) finalize
$< $<.final
$* && \
27 $(LD
) --script
=$(obj
)/ksplice.lds
-r
-o
$@
$<.final
29 ksplice-pack-cflags
= $(KSPLICE_CFLAGS
) \
30 "-DKSPLICE_MID=$(KSPLICE_MID)" \
31 $(addprefix -DKSPLICE_TARGET
=,$(target
)) \
32 "-DKSPLICE_VERSION=\"$(KSPLICE_VERSION)\""
34 ksplice-primary-objs
= primary-
$(target
).o collect-primary-
$(mod
).o
35 ksplice-helper-objs
= helper-
$(target
).o collect-helper-
$(mod
).o
37 ifneq ($(KSPLICE_STANDALONE
),)
38 ifeq ($(KSPLICE_SKIP_CORE
),)
39 obj-m
+= $(KSPLICE_CORE
).o
41 UDIS86
= x86
/libudis86
47 $(UDIS86
)/syn-intel.o \
50 $(KSPLICE_CORE
)-objs
= $(fake-ksplice.o
) ksplice-rmsyms.o
$(kudis86
)
51 fake-ksplice.o
= ksplice.o
52 $(obj
)/$(KSPLICE_CORE
).o
: fake-ksplice.o
=
55 define ksplice-pack-vars
56 obj-m
+= $(KSPLICE
).o
$(KSPLICE
)-helper.o
57 $(KSPLICE
)-objs
= $(ksplice-primary-objs
)
58 $(KSPLICE
)-helper-objs
= $(ksplice-helper-objs
)
59 CFLAGS_primary-
$(target
).o
= $(ksplice-pack-cflags
)
60 CFLAGS_helper-
$(target
).o
= $(ksplice-pack-cflags
)
61 CPPFLAGS_ksplice.lds
= $(ksplice-pack-cflags
) -P
64 $(foreach mod
,$(KSPLICE_MODULES
),$(eval
$(ksplice-pack-vars
)))
66 ifneq ($(KSPLICE_MODULES
),)
67 $(foreach mod
,$(KSPLICE_MODULES
),$(obj
)/primary-
$(target
).o
): $(obj
)/%.o
: $(src
)/primary.c FORCE
68 $(call if_changed_rule
,cc_o_c
)
69 $(foreach mod
,$(KSPLICE_MODULES
),$(obj
)/helper-
$(target
).o
): $(obj
)/%.o
: $(src
)/helper.c FORCE
70 $(call if_changed_rule
,cc_o_c
)
73 $(obj
)/collect-primary-
%.o
: $(obj
)/%.o.KSPLICE_primary
$(obj
)/ksplice.lds FORCE
74 $(call if_changed
,ksplice-collect
)
75 $(obj
)/collect-helper-
%.o
: $(obj
)/%.o.KSPLICE_helper
$(obj
)/ksplice.lds FORCE
76 $(call if_changed
,ksplice-collect
)
78 ifeq ($(quiet_cmd_cpp_lds_S
),)
79 quiet_cmd_cpp_lds_S
= LDS
$@
80 cmd_cpp_lds_S
= $(CPP
) -Wp
,-MD
,$(depfile
) $(NOSTDINC_FLAGS
) $(CPPFLAGS
) $(EXTRA_CPPFLAGS
) $(CPPFLAGS_
$(@F
)) $(cpp_flags
) -D__ASSEMBLY__
-o
$@
$<
83 $(call if_changed_dep
,cpp_lds_S
)
86 $(obj
)/ksplice.lds
: $(src
)/ksplice.lds.S FORCE
87 $(call if_changed_dep
,cpp_lds_S
)
89 CFLAGS_offsets.o
+= $(KSPLICE_CFLAGS
)
90 ifeq ($(KSPLICE_SKIP_CORE
),)
94 ifneq ($(KSPLICE_STANDALONE
),)
95 CFLAGS_ksplice.o
+= $(KSPLICE_CFLAGS
)
100 search_exception_tables \
104 __kernel_text_address \
114 kallsyms_token_table \
115 kallsyms_token_index \
116 __module_text_address \
119 __start___ksymtab_gpl \
120 __stop___ksymtab_gpl \
121 __start___ksymtab_gpl_future \
122 __stop___ksymtab_gpl_future \
123 __start___ksymtab_unused \
124 __stop___ksymtab_unused \
125 __start___ksymtab_unused_gpl \
126 __stop___ksymtab_unused_gpl \
127 __start___ksymtab_gpl_future \
128 __stop___ksymtab_gpl_future \
130 __start___kcrctab_gpl \
131 __start___kcrctab_gpl_future \
132 __start___kcrctab_unused \
133 __start___kcrctab_unused_gpl \
134 ftrace_trace_function
136 quiet_cmd_ksplice-rmsyms
= RMSYMS
$@
137 cmd_ksplice-rmsyms
= \
138 $(ksplice-script
) rmsyms
$< $<.rmsyms
$(RMSYMS
) && \
139 $(LD
) -r
-o
$@
$<.rmsyms
$(src
)/ksplice-rmsyms.lds
140 $(obj
)/ksplice-rmsyms.o
: $(obj
)/ksplice.o
$(obj
)/offsets.o FORCE
141 $(call if_changed
,ksplice-rmsyms
)
142 endif # KSPLICE_STANDALONE