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-mod-cflags
= $(KSPLICE_CFLAGS
) \
30 "-DKSPLICE_MID=$(KSPLICE_MID)" \
31 $(addprefix -DKSPLICE_TARGET
=,$(target
)) \
32 "-DKSPLICE_VERSION=\"$(KSPLICE_VERSION)\""
34 ksplice-new-code-objs
= new-code-
$(target
).o collect-new-code-
$(mod
).o
35 ksplice-old-code-objs
= old-code-
$(target
).o collect-old-code-
$(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-mod-vars
56 ifneq ($(KSPLICE_SHORT_NAME_HACK
),)
57 obj-m
+= $(KSPLICE
)-n.o
$(KSPLICE
)-o.o
58 $(KSPLICE
)-n-objs
= $(ksplice-new-code-objs
)
59 $(KSPLICE
)-o-objs
= $(ksplice-old-code-objs
)
61 obj-m
+= $(KSPLICE
)-new.o
$(KSPLICE
)-old.o
62 $(KSPLICE
)-new-objs
= $(ksplice-new-code-objs
)
63 $(KSPLICE
)-old-objs
= $(ksplice-old-code-objs
)
65 CFLAGS_new-code-
$(target
).o
= $(ksplice-mod-cflags
)
66 CFLAGS_old-code-
$(target
).o
= $(ksplice-mod-cflags
)
67 CPPFLAGS_ksplice.lds
= $(ksplice-mod-cflags
) -P
70 $(foreach mod
,$(KSPLICE_MODULES
),$(eval
$(ksplice-mod-vars
)))
72 ifneq ($(KSPLICE_MODULES
),)
73 $(foreach mod
,$(KSPLICE_MODULES
),$(obj
)/new-code-
$(target
).o
): $(obj
)/%.o
: $(src
)/new_code_loader.c FORCE
74 $(call if_changed_rule
,cc_o_c
)
75 $(foreach mod
,$(KSPLICE_MODULES
),$(obj
)/old-code-
$(target
).o
): $(obj
)/%.o
: $(src
)/old_code_loader.c FORCE
76 $(call if_changed_rule
,cc_o_c
)
79 $(obj
)/collect-new-code-
%.o
: $(obj
)/%.o.KSPLICE_new_code
$(obj
)/ksplice.lds FORCE
80 $(call if_changed
,ksplice-collect
)
81 $(obj
)/collect-old-code-
%.o
: $(obj
)/%.o.KSPLICE_old_code
$(obj
)/ksplice.lds FORCE
82 $(call if_changed
,ksplice-collect
)
84 ifeq ($(quiet_cmd_cpp_lds_S
),)
85 quiet_cmd_cpp_lds_S
= LDS
$@
86 cmd_cpp_lds_S
= $(CPP
) -Wp
,-MD
,$(depfile
) $(NOSTDINC_FLAGS
) $(CPPFLAGS
) $(EXTRA_CPPFLAGS
) $(CPPFLAGS_
$(@F
)) $(cpp_flags
) -D__ASSEMBLY__
-o
$@
$<
89 $(call if_changed_dep
,cpp_lds_S
)
92 $(obj
)/ksplice.lds
: $(src
)/ksplice.lds.S FORCE
93 $(call if_changed_dep
,cpp_lds_S
)
95 CFLAGS_offsets.o
+= $(KSPLICE_CFLAGS
)
96 ifeq ($(KSPLICE_SKIP_CORE
),)
100 ifneq ($(KSPLICE_STANDALONE
),)
101 CFLAGS_ksplice.o
+= $(KSPLICE_CFLAGS
)
103 quiet_cmd_ksplice-rmsyms
= RMSYMS
$@
104 cmd_ksplice-rmsyms
= \
105 $(ksplice-script
) rmsyms
$< $<.rmsyms
&& \
106 $(LD
) --script
=$(src
)/ksplice-rmsyms.lds
-r
-o
$@
$<.rmsyms
107 $(obj
)/ksplice-rmsyms.o
: $(obj
)/ksplice.o
$(obj
)/offsets.o FORCE
108 $(call if_changed
,ksplice-rmsyms
)
109 endif # KSPLICE_STANDALONE