diff options
Diffstat (limited to 'scripts')
182 files changed, 2298 insertions, 1613 deletions
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 7484b9d8272f..73e80b917f12 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | ||
1 | #### | 2 | #### |
2 | # kbuild: Generic definitions | 3 | # kbuild: Generic definitions |
3 | 4 | ||
@@ -67,14 +68,19 @@ endef | |||
67 | 68 | ||
68 | ###### | 69 | ###### |
69 | # gcc support functions | 70 | # gcc support functions |
70 | # See documentation in Documentation/kbuild/makefiles.txt | 71 | # See documentation in Documentation/kbuild/makefiles.rst |
71 | 72 | ||
72 | # cc-cross-prefix | 73 | # cc-cross-prefix |
73 | # Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) | 74 | # Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) |
74 | # Return first <prefix> where a <prefix>gcc is found in PATH. | 75 | # Return first <prefix> where a <prefix>gcc is found in PATH. |
75 | # If no gcc found in PATH with listed prefixes return nothing | 76 | # If no gcc found in PATH with listed prefixes return nothing |
76 | cc-cross-prefix = $(firstword $(foreach c, $(filter-out -%, $(1)), \ | 77 | # |
77 | $(if $(shell which $(c)gcc), $(c)))) | 78 | # Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it |
79 | # would try to directly execute the shell builtin 'command'. This workaround | ||
80 | # should be kept for a long time since this issue was fixed only after the | ||
81 | # GNU Make 4.2.1 release. | ||
82 | cc-cross-prefix = $(firstword $(foreach c, $(1), \ | ||
83 | $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) | ||
78 | 84 | ||
79 | # output directory for tests below | 85 | # output directory for tests below |
80 | TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/) | 86 | TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/) |
@@ -138,11 +144,6 @@ cc-disable-warning = $(call try-run,\ | |||
138 | # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) | 144 | # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) |
139 | cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) | 145 | cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) |
140 | 146 | ||
141 | # cc-ldoption | ||
142 | # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) | ||
143 | cc-ldoption = $(call try-run,\ | ||
144 | $(CC) $(1) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) | ||
145 | |||
146 | # ld-option | 147 | # ld-option |
147 | # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) | 148 | # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) |
148 | ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) | 149 | ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) |
@@ -186,20 +187,6 @@ dtbinst := -f $(srctree)/scripts/Makefile.dtbinst obj | |||
186 | # $(Q)$(MAKE) $(clean)=dir | 187 | # $(Q)$(MAKE) $(clean)=dir |
187 | clean := -f $(srctree)/scripts/Makefile.clean obj | 188 | clean := -f $(srctree)/scripts/Makefile.clean obj |
188 | 189 | ||
189 | ### | ||
190 | # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.headersinst obj= | ||
191 | # Usage: | ||
192 | # $(Q)$(MAKE) $(hdr-inst)=dir | ||
193 | hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj | ||
194 | |||
195 | # Prefix -I with $(srctree) if it is not an absolute path. | ||
196 | # skip if -I has no parameter | ||
197 | addtree = $(if $(patsubst -I%,%,$(1)), \ | ||
198 | $(if $(filter-out -I/% -I./% -I../%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1)),$(1)) | ||
199 | |||
200 | # Find all -I options and call addtree | ||
201 | flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o))) | ||
202 | |||
203 | # echo command. | 190 | # echo command. |
204 | # Short version is used, if $(quiet) equals `quiet_', otherwise full one. | 191 | # Short version is used, if $(quiet) equals `quiet_', otherwise full one. |
205 | echo-cmd = $(if $($(quiet)cmd_$(1)),\ | 192 | echo-cmd = $(if $($(quiet)cmd_$(1)),\ |
@@ -217,15 +204,15 @@ objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o))) | |||
217 | # if_changed_dep - as if_changed, but uses fixdep to reveal dependencies | 204 | # if_changed_dep - as if_changed, but uses fixdep to reveal dependencies |
218 | # including used config symbols | 205 | # including used config symbols |
219 | # if_changed_rule - as if_changed but execute rule instead | 206 | # if_changed_rule - as if_changed but execute rule instead |
220 | # See Documentation/kbuild/makefiles.txt for more info | 207 | # See Documentation/kbuild/makefiles.rst for more info |
221 | 208 | ||
222 | ifneq ($(KBUILD_NOCMDDEP),1) | 209 | ifneq ($(KBUILD_NOCMDDEP),1) |
223 | # Check if both arguments are the same including their order. Result is empty | 210 | # Check if both commands are the same including their order. Result is empty |
224 | # string if equal. User may override this check using make KBUILD_NOCMDDEP=1 | 211 | # string if equal. User may override this check using make KBUILD_NOCMDDEP=1 |
225 | arg-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \ | 212 | cmd-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \ |
226 | $(subst $(space),$(space_escape),$(strip $(cmd_$1)))) | 213 | $(subst $(space),$(space_escape),$(strip $(cmd_$1)))) |
227 | else | 214 | else |
228 | arg-check = $(if $(strip $(cmd_$@)),,1) | 215 | cmd-check = $(if $(strip $(cmd_$@)),,1) |
229 | endif | 216 | endif |
230 | 217 | ||
231 | # Replace >$< with >$$< to preserve $ when reloading the .cmd file | 218 | # Replace >$< with >$$< to preserve $ when reloading the .cmd file |
@@ -238,15 +225,15 @@ make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))) | |||
238 | 225 | ||
239 | # Find any prerequisites that is newer than target or that does not exist. | 226 | # Find any prerequisites that is newer than target or that does not exist. |
240 | # PHONY targets skipped in both cases. | 227 | # PHONY targets skipped in both cases. |
241 | any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^) | 228 | any-prereq = $(filter-out $(PHONY),$?)$(filter-out $(PHONY) $(wildcard $^),$^) |
242 | 229 | ||
243 | # Execute command if command has changed or prerequisite(s) are updated. | 230 | # Execute command if command has changed or prerequisite(s) are updated. |
244 | if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ | 231 | if_changed = $(if $(any-prereq)$(cmd-check), \ |
245 | $(cmd); \ | 232 | $(cmd); \ |
246 | printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) | 233 | printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) |
247 | 234 | ||
248 | # Execute the command and also postprocess generated .d dependencies file. | 235 | # Execute the command and also postprocess generated .d dependencies file. |
249 | if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)),$(cmd_and_fixdep),@:) | 236 | if_changed_dep = $(if $(any-prereq)$(cmd-check),$(cmd_and_fixdep),@:) |
250 | 237 | ||
251 | cmd_and_fixdep = \ | 238 | cmd_and_fixdep = \ |
252 | $(cmd); \ | 239 | $(cmd); \ |
@@ -256,7 +243,7 @@ cmd_and_fixdep = \ | |||
256 | # Usage: $(call if_changed_rule,foo) | 243 | # Usage: $(call if_changed_rule,foo) |
257 | # Will check if $(cmd_foo) or any of the prerequisites changed, | 244 | # Will check if $(cmd_foo) or any of the prerequisites changed, |
258 | # and if so will execute $(rule_foo). | 245 | # and if so will execute $(rule_foo). |
259 | if_changed_rule = $(if $(strip $(any-prereq) $(arg-check)),$(rule_$(1)),@:) | 246 | if_changed_rule = $(if $(any-prereq)$(cmd-check),$(rule_$(1)),@:) |
260 | 247 | ||
261 | ### | 248 | ### |
262 | # why - tell why a target got built | 249 | # why - tell why a target got built |
@@ -281,8 +268,8 @@ ifeq ($(KBUILD_VERBOSE),2) | |||
281 | why = \ | 268 | why = \ |
282 | $(if $(filter $@, $(PHONY)),- due to target is PHONY, \ | 269 | $(if $(filter $@, $(PHONY)),- due to target is PHONY, \ |
283 | $(if $(wildcard $@), \ | 270 | $(if $(wildcard $@), \ |
284 | $(if $(strip $(any-prereq)),- due to: $(any-prereq), \ | 271 | $(if $(any-prereq),- due to: $(any-prereq), \ |
285 | $(if $(arg-check), \ | 272 | $(if $(cmd-check), \ |
286 | $(if $(cmd_$@),- due to command line change, \ | 273 | $(if $(cmd_$@),- due to command line change, \ |
287 | $(if $(filter $@, $(targets)), \ | 274 | $(if $(filter $@, $(targets)), \ |
288 | - due to missing .cmd file, \ | 275 | - due to missing .cmd file, \ |
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include index 87ff1dcc6bd5..8a5c4d645eb1 100644 --- a/scripts/Kconfig.include +++ b/scripts/Kconfig.include | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | # Kconfig helper macros | 2 | # Kconfig helper macros |
2 | 3 | ||
3 | # Convenient variables | 4 | # Convenient variables |
@@ -18,6 +19,10 @@ if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)") | |||
18 | # Return y if <command> exits with 0, n otherwise | 19 | # Return y if <command> exits with 0, n otherwise |
19 | success = $(if-success,$(1),y,n) | 20 | success = $(if-success,$(1),y,n) |
20 | 21 | ||
22 | # $(failure,<command>) | ||
23 | # Return n if <command> exits with 0, y otherwise | ||
24 | failure = $(if-success,$(1),n,y) | ||
25 | |||
21 | # $(cc-option,<flag>) | 26 | # $(cc-option,<flag>) |
22 | # Return y if the compiler supports <flag>, n otherwise | 27 | # Return y if the compiler supports <flag>, n otherwise |
23 | cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null) | 28 | cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null) |
@@ -26,5 +31,9 @@ cc-option = $(success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null) | |||
26 | # Return y if the linker supports <flag>, n otherwise | 31 | # Return y if the linker supports <flag>, n otherwise |
27 | ld-option = $(success,$(LD) -v $(1)) | 32 | ld-option = $(success,$(LD) -v $(1)) |
28 | 33 | ||
34 | # check if $(CC) and $(LD) exist | ||
35 | $(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found) | ||
36 | $(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found) | ||
37 | |||
29 | # gcc version including patch level | 38 | # gcc version including patch level |
30 | gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) | 39 | gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) |
diff --git a/scripts/Makefile b/scripts/Makefile index 9d442ee050bd..16bcb8087899 100644 --- a/scripts/Makefile +++ b/scripts/Makefile | |||
@@ -31,11 +31,6 @@ always := $(hostprogs-y) $(hostprogs-m) | |||
31 | # The following hostprogs-y programs are only build on demand | 31 | # The following hostprogs-y programs are only build on demand |
32 | hostprogs-y += unifdef | 32 | hostprogs-y += unifdef |
33 | 33 | ||
34 | # These targets are used internally to avoid "is up to date" messages | ||
35 | PHONY += build_unifdef | ||
36 | build_unifdef: $(obj)/unifdef | ||
37 | @: | ||
38 | |||
39 | subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins | 34 | subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins |
40 | subdir-$(CONFIG_MODVERSIONS) += genksyms | 35 | subdir-$(CONFIG_MODVERSIONS) += genksyms |
41 | subdir-$(CONFIG_SECURITY_SELINUX) += selinux | 36 | subdir-$(CONFIG_SECURITY_SELINUX) += selinux |
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index ae9cf740633e..be38198d98b2 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
@@ -294,6 +294,15 @@ quiet_cmd_cc_lst_c = MKLST $@ | |||
294 | $(obj)/%.lst: $(src)/%.c FORCE | 294 | $(obj)/%.lst: $(src)/%.c FORCE |
295 | $(call if_changed_dep,cc_lst_c) | 295 | $(call if_changed_dep,cc_lst_c) |
296 | 296 | ||
297 | # header test (header-test-y target) | ||
298 | # --------------------------------------------------------------------------- | ||
299 | |||
300 | quiet_cmd_cc_s_h = CC $@ | ||
301 | cmd_cc_s_h = $(CC) $(c_flags) -S -o $@ -x c /dev/null -include $< | ||
302 | |||
303 | $(obj)/%.h.s: $(src)/%.h FORCE | ||
304 | $(call if_changed_dep,cc_s_h) | ||
305 | |||
297 | # Compile assembler sources (.S) | 306 | # Compile assembler sources (.S) |
298 | # --------------------------------------------------------------------------- | 307 | # --------------------------------------------------------------------------- |
299 | 308 | ||
@@ -504,7 +513,7 @@ existing-targets := $(wildcard $(sort $(targets))) | |||
504 | 513 | ||
505 | -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) | 514 | -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) |
506 | 515 | ||
507 | ifneq ($(srctree),.) | 516 | ifdef building_out_of_srctree |
508 | # Create directories for object files if they do not exist | 517 | # Create directories for object files if they do not exist |
509 | obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) | 518 | obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) |
510 | # If targets exist, their directories apparently exist. Skip mkdir. | 519 | # If targets exist, their directories apparently exist. Skip mkdir. |
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn index 768306add591..a74ce2e3c33e 100644 --- a/scripts/Makefile.extrawarn +++ b/scripts/Makefile.extrawarn | |||
@@ -23,24 +23,24 @@ warning- := $(empty) | |||
23 | warning-1 := -Wextra -Wunused -Wno-unused-parameter | 23 | warning-1 := -Wextra -Wunused -Wno-unused-parameter |
24 | warning-1 += -Wmissing-declarations | 24 | warning-1 += -Wmissing-declarations |
25 | warning-1 += -Wmissing-format-attribute | 25 | warning-1 += -Wmissing-format-attribute |
26 | warning-1 += $(call cc-option, -Wmissing-prototypes) | 26 | warning-1 += -Wmissing-prototypes |
27 | warning-1 += -Wold-style-definition | 27 | warning-1 += -Wold-style-definition |
28 | warning-1 += $(call cc-option, -Wmissing-include-dirs) | 28 | warning-1 += -Wmissing-include-dirs |
29 | warning-1 += $(call cc-option, -Wunused-but-set-variable) | 29 | warning-1 += $(call cc-option, -Wunused-but-set-variable) |
30 | warning-1 += $(call cc-option, -Wunused-const-variable) | 30 | warning-1 += $(call cc-option, -Wunused-const-variable) |
31 | warning-1 += $(call cc-option, -Wpacked-not-aligned) | 31 | warning-1 += $(call cc-option, -Wpacked-not-aligned) |
32 | warning-1 += $(call cc-option, -Wstringop-truncation) | 32 | warning-1 += $(call cc-option, -Wstringop-truncation) |
33 | warning-1 += $(call cc-disable-warning, missing-field-initializers) | 33 | # The following turn off the warnings enabled by -Wextra |
34 | warning-1 += $(call cc-disable-warning, sign-compare) | 34 | warning-1 += -Wno-missing-field-initializers |
35 | warning-1 += -Wno-sign-compare | ||
35 | 36 | ||
36 | warning-2 := -Waggregate-return | ||
37 | warning-2 += -Wcast-align | 37 | warning-2 += -Wcast-align |
38 | warning-2 += -Wdisabled-optimization | 38 | warning-2 += -Wdisabled-optimization |
39 | warning-2 += -Wnested-externs | 39 | warning-2 += -Wnested-externs |
40 | warning-2 += -Wshadow | 40 | warning-2 += -Wshadow |
41 | warning-2 += $(call cc-option, -Wlogical-op) | 41 | warning-2 += $(call cc-option, -Wlogical-op) |
42 | warning-2 += $(call cc-option, -Wmissing-field-initializers) | 42 | warning-2 += -Wmissing-field-initializers |
43 | warning-2 += $(call cc-option, -Wsign-compare) | 43 | warning-2 += -Wsign-compare |
44 | warning-2 += $(call cc-option, -Wmaybe-uninitialized) | 44 | warning-2 += $(call cc-option, -Wmaybe-uninitialized) |
45 | warning-2 += $(call cc-option, -Wunused-macros) | 45 | warning-2 += $(call cc-option, -Wunused-macros) |
46 | 46 | ||
@@ -66,11 +66,9 @@ KBUILD_CFLAGS += $(warning) | |||
66 | else | 66 | else |
67 | 67 | ||
68 | ifdef CONFIG_CC_IS_CLANG | 68 | ifdef CONFIG_CC_IS_CLANG |
69 | KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides) | 69 | KBUILD_CFLAGS += -Wno-initializer-overrides |
70 | KBUILD_CFLAGS += $(call cc-disable-warning, unused-value) | 70 | KBUILD_CFLAGS += -Wno-format |
71 | KBUILD_CFLAGS += $(call cc-disable-warning, format) | 71 | KBUILD_CFLAGS += -Wno-sign-compare |
72 | KBUILD_CFLAGS += $(call cc-disable-warning, sign-compare) | 72 | KBUILD_CFLAGS += -Wno-format-zero-length |
73 | KBUILD_CFLAGS += $(call cc-disable-warning, format-zero-length) | ||
74 | KBUILD_CFLAGS += $(call cc-disable-warning, uninitialized) | ||
75 | endif | 73 | endif |
76 | endif | 74 | endif |
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index 3d1ebaabd1b6..1b405a7ed14f 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst | |||
@@ -14,109 +14,89 @@ __headers: | |||
14 | 14 | ||
15 | include scripts/Kbuild.include | 15 | include scripts/Kbuild.include |
16 | 16 | ||
17 | srcdir := $(srctree)/$(obj) | 17 | src := $(srctree)/$(obj) |
18 | gen := $(objtree)/$(subst include/,include/generated/,$(obj)) | ||
19 | dst := usr/include | ||
18 | 20 | ||
19 | # When make is run under a fakechroot environment, the function | 21 | -include $(src)/Kbuild |
20 | # $(wildcard $(srcdir)/*/.) doesn't only return directories, but also regular | ||
21 | # files. So, we are using a combination of sort/dir/wildcard which works | ||
22 | # with fakechroot. | ||
23 | subdirs := $(patsubst $(srcdir)/%/,%,\ | ||
24 | $(filter-out $(srcdir)/,\ | ||
25 | $(sort $(dir $(wildcard $(srcdir)/*/))))) | ||
26 | 22 | ||
27 | # Recursion | 23 | # $(filter %/, ...) is a workaround for GNU Make <= 4.2.1, where |
28 | __headers: $(subdirs) | 24 | # $(wildcard $(src)/*/) contains not only directories but also regular files. |
25 | src-subdirs := $(patsubst $(src)/%/,%,$(filter %/, $(wildcard $(src)/*/))) | ||
26 | gen-subdirs := $(patsubst $(gen)/%/,%,$(filter %/, $(wildcard $(gen)/*/))) | ||
27 | all-subdirs := $(sort $(src-subdirs) $(gen-subdirs)) | ||
29 | 28 | ||
30 | PHONY += $(subdirs) | 29 | src-headers := $(if $(src-subdirs), $(shell cd $(src) && find $(src-subdirs) -name '*.h')) |
31 | $(subdirs): | 30 | src-headers := $(filter-out $(no-export-headers), $(src-headers)) |
32 | $(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(dst)/$@ | 31 | gen-headers := $(if $(gen-subdirs), $(shell cd $(gen) && find $(gen-subdirs) -name '*.h')) |
32 | gen-headers := $(filter-out $(no-export-headers), $(gen-headers)) | ||
33 | 33 | ||
34 | # Skip header install/check for include/uapi and arch/$(SRCARCH)/include/uapi. | 34 | # If the same header is exported from source and generated directories, |
35 | # We have only sub-directories there. | 35 | # the former takes precedence, but this should be warned. |
36 | skip-inst := $(if $(filter %/uapi,$(obj)),1) | 36 | duplicated := $(filter $(gen-headers), $(src-headers)) |
37 | $(if $(duplicated), $(warning duplicated header export: $(duplicated))) | ||
37 | 38 | ||
38 | ifeq ($(skip-inst),) | 39 | gen-headers := $(filter-out $(duplicated), $(gen-headers)) |
39 | 40 | ||
40 | # Kbuild file is optional | 41 | # Add dst path prefix |
41 | kbuild-file := $(srctree)/$(obj)/Kbuild | 42 | all-subdirs := $(addprefix $(dst)/, $(all-subdirs)) |
42 | -include $(kbuild-file) | 43 | src-headers := $(addprefix $(dst)/, $(src-headers)) |
44 | gen-headers := $(addprefix $(dst)/, $(gen-headers)) | ||
45 | all-headers := $(src-headers) $(gen-headers) | ||
43 | 46 | ||
44 | installdir := $(INSTALL_HDR_PATH)/$(dst) | 47 | # Work out what needs to be removed |
45 | gendir := $(objtree)/$(subst include/,include/generated/,$(obj)) | 48 | old-subdirs := $(wildcard $(all-subdirs)) |
46 | header-files := $(notdir $(wildcard $(srcdir)/*.h)) | 49 | old-headers := $(if $(old-subdirs),$(shell find $(old-subdirs) -name '*.h')) |
47 | header-files := $(filter-out $(no-export-headers), $(header-files)) | 50 | unwanted := $(filter-out $(all-headers), $(old-headers)) |
48 | genhdr-files := $(notdir $(wildcard $(gendir)/*.h)) | ||
49 | genhdr-files := $(filter-out $(header-files), $(genhdr-files)) | ||
50 | 51 | ||
51 | # files used to track state of install/check | 52 | # Create directories |
52 | install-file := $(installdir)/.install | 53 | existing-dirs := $(sort $(dir $(old-headers))) |
53 | check-file := $(installdir)/.check | 54 | wanted-dirs := $(sort $(dir $(all-headers))) |
55 | new-dirs := $(filter-out $(existing-dirs), $(wanted-dirs)) | ||
56 | $(if $(new-dirs), $(shell mkdir -p $(new-dirs))) | ||
54 | 57 | ||
55 | # all headers files for this dir | 58 | # Rules |
56 | all-files := $(header-files) $(genhdr-files) | ||
57 | output-files := $(addprefix $(installdir)/, $(all-files)) | ||
58 | 59 | ||
59 | # Work out what needs to be removed | 60 | ifndef HDRCHECK |
60 | oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) | ||
61 | unwanted := $(filter-out $(all-files),$(oldheaders)) | ||
62 | 61 | ||
63 | # Prefix unwanted with full paths to $(INSTALL_HDR_PATH) | 62 | quiet_cmd_install = HDRINST $@ |
64 | unwanted-file := $(addprefix $(installdir)/, $(unwanted)) | 63 | cmd_install = $(CONFIG_SHELL) $(srctree)/scripts/headers_install.sh $< $@ |
65 | 64 | ||
66 | printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@)) | 65 | $(src-headers): $(dst)/%.h: $(src)/%.h $(srctree)/scripts/headers_install.sh FORCE |
66 | $(call if_changed,install) | ||
67 | 67 | ||
68 | quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ | 68 | $(gen-headers): $(dst)/%.h: $(gen)/%.h $(srctree)/scripts/headers_install.sh FORCE |
69 | file$(if $(word 2, $(all-files)),s)) | 69 | $(call if_changed,install) |
70 | cmd_install = \ | ||
71 | $(CONFIG_SHELL) $< $(installdir) $(srcdir) $(header-files); \ | ||
72 | $(CONFIG_SHELL) $< $(installdir) $(gendir) $(genhdr-files); \ | ||
73 | touch $@ | ||
74 | 70 | ||
75 | quiet_cmd_remove = REMOVE $(unwanted) | 71 | quiet_cmd_remove = REMOVE $(unwanted) |
76 | cmd_remove = rm -f $(unwanted-file) | 72 | cmd_remove = rm -f $(unwanted) |
77 | |||
78 | quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files) | ||
79 | # Headers list can be pretty long, xargs helps to avoid | ||
80 | # the "Argument list too long" error. | ||
81 | cmd_check = for f in $(all-files); do \ | ||
82 | echo "$(installdir)/$${f}"; done \ | ||
83 | | xargs \ | ||
84 | $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \ | ||
85 | touch $@ | ||
86 | 73 | ||
87 | ifndef HDRCHECK | 74 | __headers: $(all-headers) |
88 | # Rules for installing headers | 75 | ifneq ($(unwanted),) |
89 | __headers: $(install-file) | 76 | $(call cmd,remove) |
77 | endif | ||
90 | @: | 78 | @: |
91 | 79 | ||
92 | targets += $(install-file) | 80 | existing-headers := $(filter $(old-headers), $(all-headers)) |
93 | $(install-file): scripts/headers_install.sh \ | 81 | |
94 | $(addprefix $(srcdir)/,$(header-files)) \ | 82 | -include $(foreach f,$(existing-headers),$(dir $(f)).$(notdir $(f)).cmd) |
95 | $(addprefix $(gendir)/,$(genhdr-files)) FORCE | ||
96 | $(if $(unwanted),$(call cmd,remove),) | ||
97 | $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) | ||
98 | $(call if_changed,install) | ||
99 | 83 | ||
100 | else | 84 | else |
101 | __headers: $(check-file) | ||
102 | @: | ||
103 | 85 | ||
104 | targets += $(check-file) | 86 | quiet_cmd_check = HDRCHK $< |
105 | $(check-file): scripts/headers_check.pl $(output-files) FORCE | 87 | cmd_check = $(PERL) $(srctree)/scripts/headers_check.pl $(dst) $(SRCARCH) $<; touch $@ |
106 | $(call if_changed,check) | ||
107 | 88 | ||
108 | endif | 89 | check-files := $(addsuffix .chk, $(all-headers)) |
109 | 90 | ||
110 | cmd_files := $(wildcard \ | 91 | $(check-files): $(dst)/%.chk : $(dst)/% $(srctree)/scripts/headers_check.pl |
111 | $(foreach f,$(sort $(targets)),$(dir $(f)).$(notdir $(f)).cmd)) | 92 | $(call cmd,check) |
112 | 93 | ||
113 | ifneq ($(cmd_files),) | 94 | __headers: $(check-files) |
114 | include $(cmd_files) | 95 | @: |
115 | endif | ||
116 | 96 | ||
117 | endif # skip-inst | 97 | endif |
118 | 98 | ||
119 | PHONY += FORCE | 99 | PHONY += FORCE |
120 | FORCE: ; | 100 | FORCE: |
121 | 101 | ||
122 | .PHONY: $(PHONY) | 102 | .PHONY: $(PHONY) |
diff --git a/scripts/Makefile.host b/scripts/Makefile.host index 73b804197fca..2208ebbd8c4c 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host | |||
@@ -6,7 +6,7 @@ | |||
6 | # | 6 | # |
7 | # Both C and C++ are supported, but preferred language is C for such utilities. | 7 | # Both C and C++ are supported, but preferred language is C for such utilities. |
8 | # | 8 | # |
9 | # Sample syntax (see Documentation/kbuild/makefiles.txt for reference) | 9 | # Sample syntax (see Documentation/kbuild/makefiles.rst for reference) |
10 | # hostprogs-y := bin2hex | 10 | # hostprogs-y := bin2hex |
11 | # Will compile bin2hex.c and create an executable named bin2hex | 11 | # Will compile bin2hex.c and create an executable named bin2hex |
12 | # | 12 | # |
@@ -67,18 +67,16 @@ _hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ | |||
67 | _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ | 67 | _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ |
68 | $(HOSTCXXFLAGS_$(basetarget).o) | 68 | $(HOSTCXXFLAGS_$(basetarget).o) |
69 | 69 | ||
70 | __hostc_flags = $(_hostc_flags) | 70 | # $(objtree)/$(obj) for including generated headers from checkin source files |
71 | __hostcxx_flags = $(_hostcxx_flags) | ||
72 | |||
73 | ifeq ($(KBUILD_EXTMOD),) | 71 | ifeq ($(KBUILD_EXTMOD),) |
74 | ifneq ($(srctree),.) | 72 | ifdef building_out_of_srctree |
75 | __hostc_flags = -I$(obj) $(call flags,_hostc_flags) | 73 | _hostc_flags += -I $(objtree)/$(obj) |
76 | __hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags) | 74 | _hostcxx_flags += -I $(objtree)/$(obj) |
77 | endif | 75 | endif |
78 | endif | 76 | endif |
79 | 77 | ||
80 | hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags) | 78 | hostc_flags = -Wp,-MD,$(depfile) $(_hostc_flags) |
81 | hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags) | 79 | hostcxx_flags = -Wp,-MD,$(depfile) $(_hostcxx_flags) |
82 | 80 | ||
83 | ##### | 81 | ##### |
84 | # Compile programs on the host | 82 | # Compile programs on the host |
diff --git a/scripts/Makefile.kcov b/scripts/Makefile.kcov index 3d61c4bfcbee..52b113302443 100644 --- a/scripts/Makefile.kcov +++ b/scripts/Makefile.kcov | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | ifdef CONFIG_KCOV | 2 | ifdef CONFIG_KCOV |
2 | 3 | ||
3 | kcov-flags-$(CONFIG_CC_HAS_SANCOV_TRACE_PC) += -fsanitize-coverage=trace-pc | 4 | kcov-flags-$(CONFIG_CC_HAS_SANCOV_TRACE_PC) += -fsanitize-coverage=trace-pc |
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 41e98fa66b91..6cb3aa5cbc79 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib | |||
@@ -66,6 +66,20 @@ extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y)) | |||
66 | extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-)) | 66 | extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-)) |
67 | endif | 67 | endif |
68 | 68 | ||
69 | # Test self-contained headers | ||
70 | |||
71 | # Wildcard searches in $(srctree)/$(src)/, but not in $(objtree)/$(obj)/. | ||
72 | # Stale generated headers are often left over, so pattern matching should | ||
73 | # be avoided. Please notice $(srctree)/$(src)/ and $(objtree)/$(obj) point | ||
74 | # to the same location for in-tree building. So, header-test-pattern-y should | ||
75 | # be used with care. | ||
76 | header-test-y += $(filter-out $(header-test-), \ | ||
77 | $(patsubst $(srctree)/$(src)/%, %, \ | ||
78 | $(wildcard $(addprefix $(srctree)/$(src)/, \ | ||
79 | $(header-test-pattern-y))))) | ||
80 | |||
81 | extra-$(CONFIG_HEADER_TEST) += $(addsuffix .s, $(header-test-y)) | ||
82 | |||
69 | # Add subdir path | 83 | # Add subdir path |
70 | 84 | ||
71 | extra-y := $(addprefix $(obj)/,$(extra-y)) | 85 | extra-y := $(addprefix $(obj)/,$(extra-y)) |
@@ -137,36 +151,26 @@ _c_flags += $(if $(patsubst n%,, \ | |||
137 | $(CFLAGS_KCOV)) | 151 | $(CFLAGS_KCOV)) |
138 | endif | 152 | endif |
139 | 153 | ||
140 | __c_flags = $(_c_flags) | 154 | # $(srctree)/$(src) for including checkin headers from generated source files |
141 | __a_flags = $(_a_flags) | 155 | # $(objtree)/$(obj) for including generated headers from checkin source files |
142 | __cpp_flags = $(_cpp_flags) | ||
143 | |||
144 | # If building the kernel in a separate objtree expand all occurrences | ||
145 | # of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). | ||
146 | ifeq ($(KBUILD_EXTMOD),) | 156 | ifeq ($(KBUILD_EXTMOD),) |
147 | ifneq ($(srctree),.) | 157 | ifdef building_out_of_srctree |
148 | 158 | _c_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) | |
149 | # -I$(obj) locates generated .h files | 159 | _a_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) |
150 | # $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files | 160 | _cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) |
151 | # and locates generated .h files | ||
152 | # FIXME: Replace both with specific CFLAGS* statements in the makefiles | ||
153 | __c_flags = $(if $(obj),$(call addtree,-I$(src)) -I$(obj)) \ | ||
154 | $(call flags,_c_flags) | ||
155 | __a_flags = $(call flags,_a_flags) | ||
156 | __cpp_flags = $(call flags,_cpp_flags) | ||
157 | endif | 161 | endif |
158 | endif | 162 | endif |
159 | 163 | ||
160 | c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ | 164 | c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ |
161 | -include $(srctree)/include/linux/compiler_types.h \ | 165 | -include $(srctree)/include/linux/compiler_types.h \ |
162 | $(__c_flags) $(modkern_cflags) \ | 166 | $(_c_flags) $(modkern_cflags) \ |
163 | $(basename_flags) $(modname_flags) | 167 | $(basename_flags) $(modname_flags) |
164 | 168 | ||
165 | a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ | 169 | a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ |
166 | $(__a_flags) $(modkern_aflags) | 170 | $(_a_flags) $(modkern_aflags) |
167 | 171 | ||
168 | cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ | 172 | cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ |
169 | $(__cpp_flags) | 173 | $(_cpp_flags) |
170 | 174 | ||
171 | ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) | 175 | ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) |
172 | 176 | ||
@@ -308,7 +312,7 @@ DT_BINDING_DIR := Documentation/devicetree/bindings | |||
308 | DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml | 312 | DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml |
309 | 313 | ||
310 | quiet_cmd_dtb_check = CHECK $@ | 314 | quiet_cmd_dtb_check = CHECK $@ |
311 | cmd_dtb_check = $(DT_CHECKER) -p $(DT_TMP_SCHEMA) $@ ; | 315 | cmd_dtb_check = $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@ ; |
312 | 316 | ||
313 | define rule_dtc_dt_yaml | 317 | define rule_dtc_dt_yaml |
314 | $(call cmd_and_fixdep,dtc,yaml) | 318 | $(call cmd_and_fixdep,dtc,yaml) |
@@ -341,19 +345,19 @@ printf "%08x\n" $$dec_size | \ | |||
341 | ) | 345 | ) |
342 | 346 | ||
343 | quiet_cmd_bzip2 = BZIP2 $@ | 347 | quiet_cmd_bzip2 = BZIP2 $@ |
344 | cmd_bzip2 = { cat $(real-prereqs) | bzip2 -9 && $(size_append); } > $@ | 348 | cmd_bzip2 = { cat $(real-prereqs) | bzip2 -9; $(size_append); } > $@ |
345 | 349 | ||
346 | # Lzma | 350 | # Lzma |
347 | # --------------------------------------------------------------------------- | 351 | # --------------------------------------------------------------------------- |
348 | 352 | ||
349 | quiet_cmd_lzma = LZMA $@ | 353 | quiet_cmd_lzma = LZMA $@ |
350 | cmd_lzma = { cat $(real-prereqs) | lzma -9 && $(size_append); } > $@ | 354 | cmd_lzma = { cat $(real-prereqs) | lzma -9; $(size_append); } > $@ |
351 | 355 | ||
352 | quiet_cmd_lzo = LZO $@ | 356 | quiet_cmd_lzo = LZO $@ |
353 | cmd_lzo = { cat $(real-prereqs) | lzop -9 && $(size_append); } > $@ | 357 | cmd_lzo = { cat $(real-prereqs) | lzop -9; $(size_append); } > $@ |
354 | 358 | ||
355 | quiet_cmd_lz4 = LZ4 $@ | 359 | quiet_cmd_lz4 = LZ4 $@ |
356 | cmd_lz4 = { cat $(real-prereqs) | lz4c -l -c1 stdin stdout && \ | 360 | cmd_lz4 = { cat $(real-prereqs) | lz4c -l -c1 stdin stdout; \ |
357 | $(size_append); } > $@ | 361 | $(size_append); } > $@ |
358 | 362 | ||
359 | # U-Boot mkimage | 363 | # U-Boot mkimage |
@@ -396,7 +400,7 @@ quiet_cmd_uimage = UIMAGE $@ | |||
396 | # big dictionary would increase the memory usage too much in the multi-call | 400 | # big dictionary would increase the memory usage too much in the multi-call |
397 | # decompression mode. A BCJ filter isn't used either. | 401 | # decompression mode. A BCJ filter isn't used either. |
398 | quiet_cmd_xzkern = XZKERN $@ | 402 | quiet_cmd_xzkern = XZKERN $@ |
399 | cmd_xzkern = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh && \ | 403 | cmd_xzkern = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh; \ |
400 | $(size_append); } > $@ | 404 | $(size_append); } > $@ |
401 | 405 | ||
402 | quiet_cmd_xzmisc = XZMISC $@ | 406 | quiet_cmd_xzmisc = XZMISC $@ |
diff --git a/scripts/Makefile.modbuiltin b/scripts/Makefile.modbuiltin index ea90a90b41a0..50a9990760f3 100644 --- a/scripts/Makefile.modbuiltin +++ b/scripts/Makefile.modbuiltin | |||
@@ -15,7 +15,7 @@ include include/config/tristate.conf | |||
15 | 15 | ||
16 | include scripts/Kbuild.include | 16 | include scripts/Kbuild.include |
17 | 17 | ||
18 | ifneq ($(srctree),.) | 18 | ifdef building_out_of_srctree |
19 | # Create output directory if not already present | 19 | # Create output directory if not already present |
20 | _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) | 20 | _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) |
21 | endif | 21 | endif |
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh index 84bf6b500815..aab4e299d7a2 100755 --- a/scripts/adjust_autoksyms.sh +++ b/scripts/adjust_autoksyms.sh | |||
@@ -1,13 +1,11 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # Script to create/update include/generated/autoksyms.h and dependency files | 4 | # Script to create/update include/generated/autoksyms.h and dependency files |
4 | # | 5 | # |
5 | # Copyright: (C) 2016 Linaro Limited | 6 | # Copyright: (C) 2016 Linaro Limited |
6 | # Created by: Nicolas Pitre, January 2016 | 7 | # Created by: Nicolas Pitre, January 2016 |
7 | # | 8 | # |
8 | # This program is free software; you can redistribute it and/or modify | ||
9 | # it under the terms of the GNU General Public License version 2 as | ||
10 | # published by the Free Software Foundation. | ||
11 | 9 | ||
12 | # Create/update the include/generated/autoksyms.h file from the list | 10 | # Create/update the include/generated/autoksyms.h file from the list |
13 | # of all module's needed symbols as recorded on the third line of | 11 | # of all module's needed symbols as recorded on the third line of |
diff --git a/scripts/asn1_compiler.c b/scripts/asn1_compiler.c index 1b28787028d3..adabd4145264 100644 --- a/scripts/asn1_compiler.c +++ b/scripts/asn1_compiler.c | |||
@@ -1,12 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* Simplified ASN.1 notation parser | 2 | /* Simplified ASN.1 notation parser |
2 | * | 3 | * |
3 | * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. | 4 | * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) | 5 | * Written by David Howells (dhowells@redhat.com) |
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public Licence | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the Licence, or (at your option) any later version. | ||
10 | */ | 6 | */ |
11 | 7 | ||
12 | #include <stdarg.h> | 8 | #include <stdarg.h> |
diff --git a/scripts/atomic/check-atomics.sh b/scripts/atomic/check-atomics.sh index cfa0c2f71c84..8378c63a1e09 100755 --- a/scripts/atomic/check-atomics.sh +++ b/scripts/atomic/check-atomics.sh | |||
@@ -22,7 +22,7 @@ while read header; do | |||
22 | OLDSUM="$(tail -n 1 ${LINUXDIR}/include/${header})" | 22 | OLDSUM="$(tail -n 1 ${LINUXDIR}/include/${header})" |
23 | OLDSUM="${OLDSUM#// }" | 23 | OLDSUM="${OLDSUM#// }" |
24 | 24 | ||
25 | NEWSUM="$(head -n -1 ${LINUXDIR}/include/${header} | sha1sum)" | 25 | NEWSUM="$(sed '$d' ${LINUXDIR}/include/${header} | sha1sum)" |
26 | NEWSUM="${NEWSUM%% *}" | 26 | NEWSUM="${NEWSUM%% *}" |
27 | 27 | ||
28 | if [ "${OLDSUM}" != "${NEWSUM}" ]; then | 28 | if [ "${OLDSUM}" != "${NEWSUM}" ]; then |
diff --git a/scripts/basic/Makefile b/scripts/basic/Makefile index af49b446f17d..548aeb592806 100644 --- a/scripts/basic/Makefile +++ b/scripts/basic/Makefile | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | ### | 2 | ### |
2 | # This Makefile lists the most basic programs used during the build process. | 3 | # This Makefile lists the most basic programs used during the build process. |
3 | # The programs listed herein are what are needed to do the basic stuff, | 4 | # The programs listed herein are what are needed to do the basic stuff, |
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index facbd603adf6..9ba47b0a47b9 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c | |||
@@ -99,6 +99,7 @@ | |||
99 | #include <unistd.h> | 99 | #include <unistd.h> |
100 | #include <fcntl.h> | 100 | #include <fcntl.h> |
101 | #include <string.h> | 101 | #include <string.h> |
102 | #include <stdarg.h> | ||
102 | #include <stdlib.h> | 103 | #include <stdlib.h> |
103 | #include <stdio.h> | 104 | #include <stdio.h> |
104 | #include <ctype.h> | 105 | #include <ctype.h> |
@@ -110,13 +111,43 @@ static void usage(void) | |||
110 | } | 111 | } |
111 | 112 | ||
112 | /* | 113 | /* |
114 | * In the intended usage of this program, the stdout is redirected to .*.cmd | ||
115 | * files. The return value of printf() and putchar() must be checked to catch | ||
116 | * any error, e.g. "No space left on device". | ||
117 | */ | ||
118 | static void xprintf(const char *format, ...) | ||
119 | { | ||
120 | va_list ap; | ||
121 | int ret; | ||
122 | |||
123 | va_start(ap, format); | ||
124 | ret = vprintf(format, ap); | ||
125 | if (ret < 0) { | ||
126 | perror("fixdep"); | ||
127 | exit(1); | ||
128 | } | ||
129 | va_end(ap); | ||
130 | } | ||
131 | |||
132 | static void xputchar(int c) | ||
133 | { | ||
134 | int ret; | ||
135 | |||
136 | ret = putchar(c); | ||
137 | if (ret == EOF) { | ||
138 | perror("fixdep"); | ||
139 | exit(1); | ||
140 | } | ||
141 | } | ||
142 | |||
143 | /* | ||
113 | * Print out a dependency path from a symbol name | 144 | * Print out a dependency path from a symbol name |
114 | */ | 145 | */ |
115 | static void print_dep(const char *m, int slen, const char *dir) | 146 | static void print_dep(const char *m, int slen, const char *dir) |
116 | { | 147 | { |
117 | int c, prev_c = '/', i; | 148 | int c, prev_c = '/', i; |
118 | 149 | ||
119 | printf(" $(wildcard %s/", dir); | 150 | xprintf(" $(wildcard %s/", dir); |
120 | for (i = 0; i < slen; i++) { | 151 | for (i = 0; i < slen; i++) { |
121 | c = m[i]; | 152 | c = m[i]; |
122 | if (c == '_') | 153 | if (c == '_') |
@@ -124,10 +155,10 @@ static void print_dep(const char *m, int slen, const char *dir) | |||
124 | else | 155 | else |
125 | c = tolower(c); | 156 | c = tolower(c); |
126 | if (c != '/' || prev_c != '/') | 157 | if (c != '/' || prev_c != '/') |
127 | putchar(c); | 158 | xputchar(c); |
128 | prev_c = c; | 159 | prev_c = c; |
129 | } | 160 | } |
130 | printf(".h) \\\n"); | 161 | xprintf(".h) \\\n"); |
131 | } | 162 | } |
132 | 163 | ||
133 | struct item { | 164 | struct item { |
@@ -324,13 +355,13 @@ static void parse_dep_file(char *m, const char *target) | |||
324 | */ | 355 | */ |
325 | if (!saw_any_target) { | 356 | if (!saw_any_target) { |
326 | saw_any_target = 1; | 357 | saw_any_target = 1; |
327 | printf("source_%s := %s\n\n", | 358 | xprintf("source_%s := %s\n\n", |
328 | target, m); | 359 | target, m); |
329 | printf("deps_%s := \\\n", target); | 360 | xprintf("deps_%s := \\\n", target); |
330 | } | 361 | } |
331 | is_first_dep = 0; | 362 | is_first_dep = 0; |
332 | } else { | 363 | } else { |
333 | printf(" %s \\\n", m); | 364 | xprintf(" %s \\\n", m); |
334 | } | 365 | } |
335 | 366 | ||
336 | buf = read_file(m); | 367 | buf = read_file(m); |
@@ -353,8 +384,8 @@ static void parse_dep_file(char *m, const char *target) | |||
353 | exit(1); | 384 | exit(1); |
354 | } | 385 | } |
355 | 386 | ||
356 | printf("\n%s: $(deps_%s)\n\n", target, target); | 387 | xprintf("\n%s: $(deps_%s)\n\n", target, target); |
357 | printf("$(deps_%s):\n", target); | 388 | xprintf("$(deps_%s):\n", target); |
358 | } | 389 | } |
359 | 390 | ||
360 | int main(int argc, char *argv[]) | 391 | int main(int argc, char *argv[]) |
@@ -369,7 +400,7 @@ int main(int argc, char *argv[]) | |||
369 | target = argv[2]; | 400 | target = argv[2]; |
370 | cmdline = argv[3]; | 401 | cmdline = argv[3]; |
371 | 402 | ||
372 | printf("cmd_%s := %s\n\n", target, cmdline); | 403 | xprintf("cmd_%s := %s\n\n", target, cmdline); |
373 | 404 | ||
374 | buf = read_file(depfile); | 405 | buf = read_file(depfile); |
375 | parse_dep_file(buf, target); | 406 | parse_dep_file(buf, target); |
diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index 594c55541b16..79c903292ae8 100755 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl | |||
@@ -1,24 +1,10 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # Copyright 2008, Intel Corporation | 4 | # Copyright 2008, Intel Corporation |
4 | # | 5 | # |
5 | # This file is part of the Linux kernel | 6 | # This file is part of the Linux kernel |
6 | # | 7 | # |
7 | # This program file is free software; you can redistribute it and/or modify it | ||
8 | # under the terms of the GNU General Public License as published by the | ||
9 | # Free Software Foundation; version 2 of the License. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
13 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
14 | # for more details. | ||
15 | # | ||
16 | # You should have received a copy of the GNU General Public License | ||
17 | # along with this program in a file named COPYING; if not, write to the | ||
18 | # Free Software Foundation, Inc., | ||
19 | # 51 Franklin Street, Fifth Floor, | ||
20 | # Boston, MA 02110-1301 USA | ||
21 | # | ||
22 | # Authors: | 8 | # Authors: |
23 | # Arjan van de Ven <arjan@linux.intel.com> | 9 | # Arjan van de Ven <arjan@linux.intel.com> |
24 | 10 | ||
diff --git a/scripts/checkkconfigsymbols.py b/scripts/checkkconfigsymbols.py index 8cd16c65d3c5..00a10a293f4f 100755 --- a/scripts/checkkconfigsymbols.py +++ b/scripts/checkkconfigsymbols.py | |||
@@ -1,11 +1,11 @@ | |||
1 | #!/usr/bin/env python3 | 1 | #!/usr/bin/env python3 |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | """Find Kconfig symbols that are referenced but not defined.""" | 4 | """Find Kconfig symbols that are referenced but not defined.""" |
4 | 5 | ||
5 | # (c) 2014-2017 Valentin Rothberg <valentinrothberg@gmail.com> | 6 | # (c) 2014-2017 Valentin Rothberg <valentinrothberg@gmail.com> |
6 | # (c) 2014 Stefan Hengelein <stefan.hengelein@fau.de> | 7 | # (c) 2014 Stefan Hengelein <stefan.hengelein@fau.de> |
7 | # | 8 | # |
8 | # Licensed under the terms of the GNU GPL License version 2 | ||
9 | 9 | ||
10 | 10 | ||
11 | import argparse | 11 | import argparse |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index bb28b178d929..a6d436809bf5 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -3027,7 +3027,7 @@ sub process { | |||
3027 | my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g; | 3027 | my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g; |
3028 | 3028 | ||
3029 | my $dt_path = $root . "/Documentation/devicetree/bindings/"; | 3029 | my $dt_path = $root . "/Documentation/devicetree/bindings/"; |
3030 | my $vp_file = $dt_path . "vendor-prefixes.txt"; | 3030 | my $vp_file = $dt_path . "vendor-prefixes.yaml"; |
3031 | 3031 | ||
3032 | foreach my $compat (@compats) { | 3032 | foreach my $compat (@compats) { |
3033 | my $compat2 = $compat; | 3033 | my $compat2 = $compat; |
@@ -3042,7 +3042,7 @@ sub process { | |||
3042 | 3042 | ||
3043 | next if $compat !~ /^([a-zA-Z0-9\-]+)\,/; | 3043 | next if $compat !~ /^([a-zA-Z0-9\-]+)\,/; |
3044 | my $vendor = $1; | 3044 | my $vendor = $1; |
3045 | `grep -Eq "^$vendor\\b" $vp_file`; | 3045 | `grep -Eq "\\"\\^\Q$vendor\E,\\.\\*\\":" $vp_file`; |
3046 | if ( $? >> 8 ) { | 3046 | if ( $? >> 8 ) { |
3047 | WARN("UNDOCUMENTED_DT_STRING", | 3047 | WARN("UNDOCUMENTED_DT_STRING", |
3048 | "DT compatible string vendor \"$vendor\" appears un-documented -- check $vp_file\n" . $herecurr); | 3048 | "DT compatible string vendor \"$vendor\" appears un-documented -- check $vp_file\n" . $herecurr); |
@@ -5712,7 +5712,7 @@ sub process { | |||
5712 | # ignore udelay's < 10, however | 5712 | # ignore udelay's < 10, however |
5713 | if (! ($delay < 10) ) { | 5713 | if (! ($delay < 10) ) { |
5714 | CHK("USLEEP_RANGE", | 5714 | CHK("USLEEP_RANGE", |
5715 | "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt\n" . $herecurr); | 5715 | "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.rst\n" . $herecurr); |
5716 | } | 5716 | } |
5717 | if ($delay > 2000) { | 5717 | if ($delay > 2000) { |
5718 | WARN("LONG_UDELAY", | 5718 | WARN("LONG_UDELAY", |
@@ -5724,7 +5724,7 @@ sub process { | |||
5724 | if ($line =~ /\bmsleep\s*\((\d+)\);/) { | 5724 | if ($line =~ /\bmsleep\s*\((\d+)\);/) { |
5725 | if ($1 < 20) { | 5725 | if ($1 < 20) { |
5726 | WARN("MSLEEP", | 5726 | WARN("MSLEEP", |
5727 | "msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.txt\n" . $herecurr); | 5727 | "msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.rst\n" . $herecurr); |
5728 | } | 5728 | } |
5729 | } | 5729 | } |
5730 | 5730 | ||
@@ -6115,11 +6115,11 @@ sub process { | |||
6115 | my $max = $7; | 6115 | my $max = $7; |
6116 | if ($min eq $max) { | 6116 | if ($min eq $max) { |
6117 | WARN("USLEEP_RANGE", | 6117 | WARN("USLEEP_RANGE", |
6118 | "usleep_range should not use min == max args; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n"); | 6118 | "usleep_range should not use min == max args; see Documentation/timers/timers-howto.rst\n" . "$here\n$stat\n"); |
6119 | } elsif ($min =~ /^\d+$/ && $max =~ /^\d+$/ && | 6119 | } elsif ($min =~ /^\d+$/ && $max =~ /^\d+$/ && |
6120 | $min > $max) { | 6120 | $min > $max) { |
6121 | WARN("USLEEP_RANGE", | 6121 | WARN("USLEEP_RANGE", |
6122 | "usleep_range args reversed, use min then max; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n"); | 6122 | "usleep_range args reversed, use min then max; see Documentation/timers/timers-howto.rst\n" . "$here\n$stat\n"); |
6123 | } | 6123 | } |
6124 | } | 6124 | } |
6125 | 6125 | ||
diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl index 122aef5e4e14..371bd17a4983 100755 --- a/scripts/checkstack.pl +++ b/scripts/checkstack.pl | |||
@@ -46,7 +46,7 @@ my (@stack, $re, $dre, $x, $xs, $funcre); | |||
46 | $x = "[0-9a-f]"; # hex character | 46 | $x = "[0-9a-f]"; # hex character |
47 | $xs = "[0-9a-f ]"; # hex character or space | 47 | $xs = "[0-9a-f ]"; # hex character or space |
48 | $funcre = qr/^$x* <(.*)>:$/; | 48 | $funcre = qr/^$x* <(.*)>:$/; |
49 | if ($arch eq 'aarch64') { | 49 | if ($arch =~ '^(aarch|arm)64$') { |
50 | #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]! | 50 | #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]! |
51 | #a110: d11643ff sub sp, sp, #0x590 | 51 | #a110: d11643ff sub sp, sp, #0x590 |
52 | $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o; | 52 | $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o; |
diff --git a/scripts/coccinelle/api/alloc/alloc_cast.cocci b/scripts/coccinelle/api/alloc/alloc_cast.cocci index 18fedf7c60ed..f6f0ccdb6409 100644 --- a/scripts/coccinelle/api/alloc/alloc_cast.cocci +++ b/scripts/coccinelle/api/alloc/alloc_cast.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Remove casting the values returned by memory allocation functions | 2 | /// Remove casting the values returned by memory allocation functions |
2 | /// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. | 3 | /// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. |
3 | /// | 4 | /// |
@@ -8,8 +9,8 @@ | |||
8 | //# need some reformatting. | 9 | //# need some reformatting. |
9 | // | 10 | // |
10 | // Confidence: High | 11 | // Confidence: High |
11 | // Copyright: (C) 2014 Himangi Saraogi GPLv2. | 12 | // Copyright: (C) 2014 Himangi Saraogi |
12 | // Copyright: (C) 2017 Himanshu Jha GPLv2. | 13 | // Copyright: (C) 2017 Himanshu Jha |
13 | // Comments: | 14 | // Comments: |
14 | // Options: --no-includes --include-headers | 15 | // Options: --no-includes --include-headers |
15 | // | 16 | // |
diff --git a/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci b/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci index 9b7eb321a025..9c61a23b34db 100644 --- a/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci +++ b/scripts/coccinelle/api/alloc/pool_zalloc-simple.cocci | |||
@@ -1,7 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0 | 3 | /// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0 |
3 | /// | 4 | /// |
4 | // Copyright: (C) 2015 Intel Corp. GPLv2. | 5 | // Copyright: (C) 2015 Intel Corp. |
5 | // Options: --no-includes --include-headers | 6 | // Options: --no-includes --include-headers |
6 | // | 7 | // |
7 | // Keywords: dma_pool_zalloc, pci_pool_zalloc | 8 | // Keywords: dma_pool_zalloc, pci_pool_zalloc |
diff --git a/scripts/coccinelle/api/alloc/zalloc-simple.cocci b/scripts/coccinelle/api/alloc/zalloc-simple.cocci index 5cd1991c582e..26cda3f48f01 100644 --- a/scripts/coccinelle/api/alloc/zalloc-simple.cocci +++ b/scripts/coccinelle/api/alloc/zalloc-simple.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Use zeroing allocator rather than allocator followed by memset with 0 | 3 | /// Use zeroing allocator rather than allocator followed by memset with 0 |
3 | /// | 4 | /// |
@@ -6,9 +7,9 @@ | |||
6 | /// matched code has to be contiguous | 7 | /// matched code has to be contiguous |
7 | /// | 8 | /// |
8 | // Confidence: High | 9 | // Confidence: High |
9 | // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. | 10 | // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. |
10 | // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. | 11 | // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. |
11 | // Copyright: (C) 2017 Himanshu Jha GPLv2. | 12 | // Copyright: (C) 2017 Himanshu Jha |
12 | // URL: http://coccinelle.lip6.fr/rules/kzalloc.html | 13 | // URL: http://coccinelle.lip6.fr/rules/kzalloc.html |
13 | // Options: --no-includes --include-headers | 14 | // Options: --no-includes --include-headers |
14 | // | 15 | // |
diff --git a/scripts/coccinelle/api/check_bq27xxx_data.cocci b/scripts/coccinelle/api/check_bq27xxx_data.cocci index 9212b85169d2..fae539ef0ce5 100644 --- a/scripts/coccinelle/api/check_bq27xxx_data.cocci +++ b/scripts/coccinelle/api/check_bq27xxx_data.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Detect BQ27XXX_DATA structures with identical registers, dm registers or | 2 | /// Detect BQ27XXX_DATA structures with identical registers, dm registers or |
2 | /// properties. | 3 | /// properties. |
3 | //# Doesn't unfold macros used in register or property fields. | 4 | //# Doesn't unfold macros used in register or property fields. |
4 | //# Requires OCaml scripting | 5 | //# Requires OCaml scripting |
5 | /// | 6 | /// |
6 | // Confidence: High | 7 | // Confidence: High |
7 | // Copyright: (C) 2017 Julia Lawall, Inria/LIP6, GPLv2. | 8 | // Copyright: (C) 2017 Julia Lawall, Inria/LIP6, |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Requires: 1.0.7 | 10 | // Requires: 1.0.7 |
10 | // Keywords: BQ27XXX_DATA | 11 | // Keywords: BQ27XXX_DATA |
diff --git a/scripts/coccinelle/api/err_cast.cocci b/scripts/coccinelle/api/err_cast.cocci index 2ce115000af6..0e661c8d8d6f 100644 --- a/scripts/coccinelle/api/err_cast.cocci +++ b/scripts/coccinelle/api/err_cast.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...)) | 3 | /// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...)) |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. | 6 | // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. |
6 | // Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. | 7 | // Copyright: (C) 2009, 2010 Julia Lawall, DIKU. |
7 | // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 8 | // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Options: | 10 | // Options: |
10 | // | 11 | // |
diff --git a/scripts/coccinelle/api/kstrdup.cocci b/scripts/coccinelle/api/kstrdup.cocci index 09cba54ed0cf..19f2645e6076 100644 --- a/scripts/coccinelle/api/kstrdup.cocci +++ b/scripts/coccinelle/api/kstrdup.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use kstrdup rather than duplicating its implementation | 2 | /// Use kstrdup rather than duplicating its implementation |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 5 | // Copyright: (C) 2010-2012 Nicolas Palix. |
5 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
@@ -76,7 +77,7 @@ p1 << r1.p1; | |||
76 | p2 << r1.p2; | 77 | p2 << r1.p2; |
77 | @@ | 78 | @@ |
78 | 79 | ||
79 | cocci.print_main("WARNING opportunity for kstrdep",p1) | 80 | cocci.print_main("WARNING opportunity for kstrdup",p1) |
80 | cocci.print_secs("strcpy",p2) | 81 | cocci.print_secs("strcpy",p2) |
81 | 82 | ||
82 | @script:python depends on org@ | 83 | @script:python depends on org@ |
@@ -84,7 +85,7 @@ p1 << r2.p1; | |||
84 | p2 << r2.p2; | 85 | p2 << r2.p2; |
85 | @@ | 86 | @@ |
86 | 87 | ||
87 | cocci.print_main("WARNING opportunity for kstrdep",p1) | 88 | cocci.print_main("WARNING opportunity for kstrdup",p1) |
88 | cocci.print_secs("memcpy",p2) | 89 | cocci.print_secs("memcpy",p2) |
89 | 90 | ||
90 | @script:python depends on report@ | 91 | @script:python depends on report@ |
@@ -92,7 +93,7 @@ p1 << r1.p1; | |||
92 | p2 << r1.p2; | 93 | p2 << r1.p2; |
93 | @@ | 94 | @@ |
94 | 95 | ||
95 | msg = "WARNING opportunity for kstrdep (strcpy on line %s)" % (p2[0].line) | 96 | msg = "WARNING opportunity for kstrdup (strcpy on line %s)" % (p2[0].line) |
96 | coccilib.report.print_report(p1[0], msg) | 97 | coccilib.report.print_report(p1[0], msg) |
97 | 98 | ||
98 | @script:python depends on report@ | 99 | @script:python depends on report@ |
@@ -100,5 +101,5 @@ p1 << r2.p1; | |||
100 | p2 << r2.p2; | 101 | p2 << r2.p2; |
101 | @@ | 102 | @@ |
102 | 103 | ||
103 | msg = "WARNING opportunity for kstrdep (memcpy on line %s)" % (p2[0].line) | 104 | msg = "WARNING opportunity for kstrdup (memcpy on line %s)" % (p2[0].line) |
104 | coccilib.report.print_report(p1[0], msg) | 105 | coccilib.report.print_report(p1[0], msg) |
diff --git a/scripts/coccinelle/api/memdup.cocci b/scripts/coccinelle/api/memdup.cocci index 8fd6437beda8..30b15df734e5 100644 --- a/scripts/coccinelle/api/memdup.cocci +++ b/scripts/coccinelle/api/memdup.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use kmemdup rather than duplicating its implementation | 2 | /// Use kmemdup rather than duplicating its implementation |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 5 | // Copyright: (C) 2010-2012 Nicolas Palix. |
5 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/api/memdup_user.cocci b/scripts/coccinelle/api/memdup_user.cocci index 2a5aea8e8487..c809ab10bbce 100644 --- a/scripts/coccinelle/api/memdup_user.cocci +++ b/scripts/coccinelle/api/memdup_user.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use memdup_user rather than duplicating its implementation | 2 | /// Use memdup_user rather than duplicating its implementation |
2 | /// This is a little bit restricted to reduce false positives | 3 | /// This is a little bit restricted to reduce false positives |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 6 | // Copyright: (C) 2010-2012 Nicolas Palix. |
6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 8 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Comments: | 10 | // Comments: |
10 | // Options: --no-includes --include-headers | 11 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/api/platform_no_drv_owner.cocci b/scripts/coccinelle/api/platform_no_drv_owner.cocci index c5e3f73f2054..8fa050eeb7e5 100644 --- a/scripts/coccinelle/api/platform_no_drv_owner.cocci +++ b/scripts/coccinelle/api/platform_no_drv_owner.cocci | |||
@@ -1,7 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Remove .owner field if calls are used which set it automatically | 2 | /// Remove .owner field if calls are used which set it automatically |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2014 Wolfram Sang. GPL v2. | 5 | // Copyright: (C) 2014 Wolfram Sang. |
5 | 6 | ||
6 | virtual patch | 7 | virtual patch |
7 | virtual context | 8 | virtual context |
diff --git a/scripts/coccinelle/api/pm_runtime.cocci b/scripts/coccinelle/api/pm_runtime.cocci index d67ccf5f8227..1ccce3fd00b8 100644 --- a/scripts/coccinelle/api/pm_runtime.cocci +++ b/scripts/coccinelle/api/pm_runtime.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE | 2 | /// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE |
2 | /// | 3 | /// |
3 | // Keywords: pm_runtime | 4 | // Keywords: pm_runtime |
4 | // Confidence: Medium | 5 | // Confidence: Medium |
5 | // Copyright (C) 2013 Texas Instruments Incorporated - GPLv2. | 6 | // Copyright (C) 2013 Texas Instruments Incorporated - |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Options: --include-headers | 8 | // Options: --include-headers |
8 | 9 | ||
diff --git a/scripts/coccinelle/api/ptr_ret.cocci b/scripts/coccinelle/api/ptr_ret.cocci index dd58dab5d411..e76cd5d90a8a 100644 --- a/scripts/coccinelle/api/ptr_ret.cocci +++ b/scripts/coccinelle/api/ptr_ret.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR | 3 | /// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Options: --no-includes --include-headers | 9 | // Options: --no-includes --include-headers |
9 | // | 10 | // |
diff --git a/scripts/coccinelle/api/resource_size.cocci b/scripts/coccinelle/api/resource_size.cocci index 1935a58b39d9..a9a571ac04ce 100644 --- a/scripts/coccinelle/api/resource_size.cocci +++ b/scripts/coccinelle/api/resource_size.cocci | |||
@@ -1,11 +1,12 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Use resource_size function on resource object | 3 | /// Use resource_size function on resource object |
3 | /// instead of explicit computation. | 4 | /// instead of explicit computation. |
4 | /// | 5 | /// |
5 | // Confidence: High | 6 | // Confidence: High |
6 | // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. | 7 | // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. |
7 | // Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. | 8 | // Copyright: (C) 2009, 2010 Julia Lawall, DIKU. |
8 | // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 9 | // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. |
9 | // URL: http://coccinelle.lip6.fr/ | 10 | // URL: http://coccinelle.lip6.fr/ |
10 | // Options: | 11 | // Options: |
11 | // | 12 | // |
diff --git a/scripts/coccinelle/api/stream_open.cocci b/scripts/coccinelle/api/stream_open.cocci index 350145da7669..12ce18fa6b74 100644 --- a/scripts/coccinelle/api/stream_open.cocci +++ b/scripts/coccinelle/api/stream_open.cocci | |||
@@ -35,11 +35,11 @@ type loff_t; | |||
35 | // a function that blocks | 35 | // a function that blocks |
36 | @ blocks @ | 36 | @ blocks @ |
37 | identifier block_f; | 37 | identifier block_f; |
38 | identifier wait_event =~ "^wait_event_.*"; | 38 | identifier wait =~ "^wait_.*"; |
39 | @@ | 39 | @@ |
40 | block_f(...) { | 40 | block_f(...) { |
41 | ... when exists | 41 | ... when exists |
42 | wait_event(...) | 42 | wait(...) |
43 | ... when exists | 43 | ... when exists |
44 | } | 44 | } |
45 | 45 | ||
@@ -49,12 +49,12 @@ identifier wait_event =~ "^wait_event_.*"; | |||
49 | // XXX currently reader_blocks supports only direct and 1-level indirect cases. | 49 | // XXX currently reader_blocks supports only direct and 1-level indirect cases. |
50 | @ reader_blocks_direct @ | 50 | @ reader_blocks_direct @ |
51 | identifier stream_reader.readstream; | 51 | identifier stream_reader.readstream; |
52 | identifier wait_event =~ "^wait_event_.*"; | 52 | identifier wait =~ "^wait_.*"; |
53 | @@ | 53 | @@ |
54 | readstream(...) | 54 | readstream(...) |
55 | { | 55 | { |
56 | ... when exists | 56 | ... when exists |
57 | wait_event(...) | 57 | wait(...) |
58 | ... when exists | 58 | ... when exists |
59 | } | 59 | } |
60 | 60 | ||
diff --git a/scripts/coccinelle/free/clk_put.cocci b/scripts/coccinelle/free/clk_put.cocci index 46747adfd20a..7237b49496f6 100644 --- a/scripts/coccinelle/free/clk_put.cocci +++ b/scripts/coccinelle/free/clk_put.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find missing clk_puts. | 2 | /// Find missing clk_puts. |
2 | /// | 3 | /// |
3 | //# This only signals a missing clk_put when there is a clk_put later | 4 | //# This only signals a missing clk_put when there is a clk_put later |
@@ -5,8 +6,8 @@ | |||
5 | //# False positives can be due to loops. | 6 | //# False positives can be due to loops. |
6 | // | 7 | // |
7 | // Confidence: Moderate | 8 | // Confidence: Moderate |
8 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 9 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
9 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 10 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
10 | // URL: http://coccinelle.lip6.fr/ | 11 | // URL: http://coccinelle.lip6.fr/ |
11 | // Comments: | 12 | // Comments: |
12 | // Options: | 13 | // Options: |
diff --git a/scripts/coccinelle/free/devm_free.cocci b/scripts/coccinelle/free/devm_free.cocci index b2a2cf8bf81f..fefd0331a2de 100644 --- a/scripts/coccinelle/free/devm_free.cocci +++ b/scripts/coccinelle/free/devm_free.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find uses of standard freeing functons on values allocated using devm_ | 2 | /// Find uses of standard freeing functons on values allocated using devm_ |
2 | /// functions. Values allocated using the devm_functions are freed when | 3 | /// functions. Values allocated using the devm_functions are freed when |
3 | /// the device is detached, and thus the use of the standard freeing | 4 | /// the device is detached, and thus the use of the standard freeing |
4 | /// function would cause a double free. | 5 | /// function would cause a double free. |
5 | /// See Documentation/driver-model/devres.txt for more information. | 6 | /// See Documentation/driver-model/devres.rst for more information. |
6 | /// | 7 | /// |
7 | /// A difficulty of detecting this problem is that the standard freeing | 8 | /// A difficulty of detecting this problem is that the standard freeing |
8 | /// function might be called from a different function than the one | 9 | /// function might be called from a different function than the one |
@@ -14,8 +15,8 @@ | |||
14 | /// less reliable in these cases. | 15 | /// less reliable in these cases. |
15 | /// | 16 | /// |
16 | // Confidence: Moderate | 17 | // Confidence: Moderate |
17 | // Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. GPLv2. | 18 | // Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. |
18 | // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2. | 19 | // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. |
19 | // URL: http://coccinelle.lip6.fr/ | 20 | // URL: http://coccinelle.lip6.fr/ |
20 | // Comments: | 21 | // Comments: |
21 | // Options: --no-includes --include-headers | 22 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/free/ifnullfree.cocci b/scripts/coccinelle/free/ifnullfree.cocci index a70e123cb12b..b3290c4ee239 100644 --- a/scripts/coccinelle/free/ifnullfree.cocci +++ b/scripts/coccinelle/free/ifnullfree.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// NULL check before some freeing functions is not needed. | 2 | /// NULL check before some freeing functions is not needed. |
2 | /// | 3 | /// |
3 | /// Based on checkpatch warning | 4 | /// Based on checkpatch warning |
4 | /// "kfree(NULL) is safe this check is probably not required" | 5 | /// "kfree(NULL) is safe this check is probably not required" |
5 | /// and kfreeaddr.cocci by Julia Lawall. | 6 | /// and kfreeaddr.cocci by Julia Lawall. |
6 | /// | 7 | /// |
7 | // Copyright: (C) 2014 Fabian Frederick. GPLv2. | 8 | // Copyright: (C) 2014 Fabian Frederick. |
8 | // Comments: - | 9 | // Comments: - |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
10 | 11 | ||
diff --git a/scripts/coccinelle/free/iounmap.cocci b/scripts/coccinelle/free/iounmap.cocci index 5384f4ba1192..0e60e1113a1d 100644 --- a/scripts/coccinelle/free/iounmap.cocci +++ b/scripts/coccinelle/free/iounmap.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find missing iounmaps. | 2 | /// Find missing iounmaps. |
2 | /// | 3 | /// |
3 | //# This only signals a missing iounmap when there is an iounmap later | 4 | //# This only signals a missing iounmap when there is an iounmap later |
@@ -5,8 +6,8 @@ | |||
5 | //# False positives can be due to loops. | 6 | //# False positives can be due to loops. |
6 | // | 7 | // |
7 | // Confidence: Moderate | 8 | // Confidence: Moderate |
8 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 9 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
9 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 10 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
10 | // URL: http://coccinelle.lip6.fr/ | 11 | // URL: http://coccinelle.lip6.fr/ |
11 | // Comments: | 12 | // Comments: |
12 | // Options: | 13 | // Options: |
diff --git a/scripts/coccinelle/free/kfree.cocci b/scripts/coccinelle/free/kfree.cocci index ac438da4fd7b..e9d50e718e46 100644 --- a/scripts/coccinelle/free/kfree.cocci +++ b/scripts/coccinelle/free/kfree.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find a use after free. | 2 | /// Find a use after free. |
2 | //# Values of variables may imply that some | 3 | //# Values of variables may imply that some |
3 | //# execution paths are not possible, resulting in false positives. | 4 | //# execution paths are not possible, resulting in false positives. |
@@ -5,9 +6,9 @@ | |||
5 | //# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument | 6 | //# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument |
6 | /// | 7 | /// |
7 | // Confidence: Moderate | 8 | // Confidence: Moderate |
8 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 9 | // Copyright: (C) 2010-2012 Nicolas Palix. |
9 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 10 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
10 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 11 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
11 | // URL: http://coccinelle.lip6.fr/ | 12 | // URL: http://coccinelle.lip6.fr/ |
12 | // Comments: | 13 | // Comments: |
13 | // Options: --no-includes --include-headers | 14 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/free/kfreeaddr.cocci b/scripts/coccinelle/free/kfreeaddr.cocci index d46063b1db8b..cfaf308328d8 100644 --- a/scripts/coccinelle/free/kfreeaddr.cocci +++ b/scripts/coccinelle/free/kfreeaddr.cocci | |||
@@ -1,7 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Free of a structure field | 2 | /// Free of a structure field |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. | 5 | // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. |
5 | // URL: http://coccinelle.lip6.fr/ | 6 | // URL: http://coccinelle.lip6.fr/ |
6 | // Comments: | 7 | // Comments: |
7 | // Options: --no-includes --include-headers | 8 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/free/pci_free_consistent.cocci b/scripts/coccinelle/free/pci_free_consistent.cocci index 43600ccb62a8..d51e92556b42 100644 --- a/scripts/coccinelle/free/pci_free_consistent.cocci +++ b/scripts/coccinelle/free/pci_free_consistent.cocci | |||
@@ -1,7 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find missing pci_free_consistent for every pci_alloc_consistent. | 2 | /// Find missing pci_free_consistent for every pci_alloc_consistent. |
2 | /// | 3 | /// |
3 | // Confidence: Moderate | 4 | // Confidence: Moderate |
4 | // Copyright: (C) 2013 Petr Strnad. GPLv2. | 5 | // Copyright: (C) 2013 Petr Strnad. |
5 | // URL: http://coccinelle.lip6.fr/ | 6 | // URL: http://coccinelle.lip6.fr/ |
6 | // Keywords: pci_free_consistent, pci_alloc_consistent | 7 | // Keywords: pci_free_consistent, pci_alloc_consistent |
7 | // Options: --no-includes --include-headers | 8 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/free/put_device.cocci b/scripts/coccinelle/free/put_device.cocci index c9f071b0a0ab..120921366e84 100644 --- a/scripts/coccinelle/free/put_device.cocci +++ b/scripts/coccinelle/free/put_device.cocci | |||
@@ -24,7 +24,7 @@ if (id == NULL || ...) { ... return ...; } | |||
24 | when != of_dev_put(id) | 24 | when != of_dev_put(id) |
25 | when != if (id) { ... put_device(&id->dev) ... } | 25 | when != if (id) { ... put_device(&id->dev) ... } |
26 | when != e1 = (T)id | 26 | when != e1 = (T)id |
27 | when != e1 = &id->dev | 27 | when != e1 = (T)(&id->dev) |
28 | when != e1 = get_device(&id->dev) | 28 | when != e1 = get_device(&id->dev) |
29 | when != e1 = (T1)platform_get_drvdata(id) | 29 | when != e1 = (T1)platform_get_drvdata(id) |
30 | ( | 30 | ( |
@@ -42,11 +42,10 @@ p1 << search.p1; | |||
42 | p2 << search.p2; | 42 | p2 << search.p2; |
43 | @@ | 43 | @@ |
44 | 44 | ||
45 | coccilib.report.print_report(p2[0], "ERROR: missing put_device; " | 45 | coccilib.report.print_report(p2[0], |
46 | + "call of_find_device_by_node on line " | 46 | "ERROR: missing put_device; call of_find_device_by_node on line " |
47 | + p1[0].line | 47 | + p1[0].line |
48 | + ", but without a corresponding object release " | 48 | + ", but without a corresponding object release within this function.") |
49 | + "within this function.") | ||
50 | 49 | ||
51 | @script:python depends on org@ | 50 | @script:python depends on org@ |
52 | p1 << search.p1; | 51 | p1 << search.p1; |
diff --git a/scripts/coccinelle/iterators/device_node_continue.cocci b/scripts/coccinelle/iterators/device_node_continue.cocci index a36c16db171b..f8cd14dfa604 100644 --- a/scripts/coccinelle/iterators/device_node_continue.cocci +++ b/scripts/coccinelle/iterators/device_node_continue.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Device node iterators put the previous value of the index variable, so an | 2 | /// Device node iterators put the previous value of the index variable, so an |
2 | /// explicit put causes a double put. | 3 | /// explicit put causes a double put. |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. | 6 | // Copyright: (C) 2015 Julia Lawall, Inria. |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Options: --no-includes --include-headers | 8 | // Options: --no-includes --include-headers |
8 | // Requires: 1.0.4 | 9 | // Requires: 1.0.4 |
diff --git a/scripts/coccinelle/iterators/fen.cocci b/scripts/coccinelle/iterators/fen.cocci index 48c152f224e1..b69f9665f4fb 100644 --- a/scripts/coccinelle/iterators/fen.cocci +++ b/scripts/coccinelle/iterators/fen.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// These iterators only exit normally when the loop cursor is NULL, so there | 2 | /// These iterators only exit normally when the loop cursor is NULL, so there |
2 | /// is no point to call of_node_put on the final value. | 3 | /// is no point to call of_node_put on the final value. |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 6 | // Copyright: (C) 2010-2012 Nicolas Palix. |
6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 8 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Comments: | 10 | // Comments: |
10 | // Options: --no-includes --include-headers | 11 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/iterators/itnull.cocci b/scripts/coccinelle/iterators/itnull.cocci index f58732b56a40..9b362b98d7a1 100644 --- a/scripts/coccinelle/iterators/itnull.cocci +++ b/scripts/coccinelle/iterators/itnull.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Many iterators have the property that the first argument is always bound | 2 | /// Many iterators have the property that the first argument is always bound |
2 | /// to a real list element, never NULL. | 3 | /// to a real list element, never NULL. |
3 | //# False positives arise for some iterators that do not have this property, | 4 | //# False positives arise for some iterators that do not have this property, |
@@ -6,9 +7,9 @@ | |||
6 | //# or return). | 7 | //# or return). |
7 | /// | 8 | /// |
8 | // Confidence: Moderate | 9 | // Confidence: Moderate |
9 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 10 | // Copyright: (C) 2010-2012 Nicolas Palix. |
10 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 11 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
11 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 12 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
12 | // URL: http://coccinelle.lip6.fr/ | 13 | // URL: http://coccinelle.lip6.fr/ |
13 | // Comments: | 14 | // Comments: |
14 | // Options: --no-includes --include-headers | 15 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/iterators/list_entry_update.cocci b/scripts/coccinelle/iterators/list_entry_update.cocci index be6f9f1abb34..d62e8a16085f 100644 --- a/scripts/coccinelle/iterators/list_entry_update.cocci +++ b/scripts/coccinelle/iterators/list_entry_update.cocci | |||
@@ -1,12 +1,13 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// list_for_each_entry uses its first argument to get from one element of | 2 | /// list_for_each_entry uses its first argument to get from one element of |
2 | /// the list to the next, so it is usually not a good idea to reassign it. | 3 | /// the list to the next, so it is usually not a good idea to reassign it. |
3 | /// The first rule finds such a reassignment and the second rule checks | 4 | /// The first rule finds such a reassignment and the second rule checks |
4 | /// that there is a path from the reassignment back to the top of the loop. | 5 | /// that there is a path from the reassignment back to the top of the loop. |
5 | /// | 6 | /// |
6 | // Confidence: High | 7 | // Confidence: High |
7 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 8 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
8 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 9 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
9 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
10 | // URL: http://coccinelle.lip6.fr/ | 11 | // URL: http://coccinelle.lip6.fr/ |
11 | // Comments: | 12 | // Comments: |
12 | // Options: --no-includes --include-headers | 13 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/iterators/use_after_iter.cocci b/scripts/coccinelle/iterators/use_after_iter.cocci index 66a1140474c8..9be48b520879 100644 --- a/scripts/coccinelle/iterators/use_after_iter.cocci +++ b/scripts/coccinelle/iterators/use_after_iter.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// If list_for_each_entry, etc complete a traversal of the list, the iterator | 2 | /// If list_for_each_entry, etc complete a traversal of the list, the iterator |
2 | /// variable ends up pointing to an address at an offset from the list head, | 3 | /// variable ends up pointing to an address at an offset from the list head, |
3 | /// and not a meaningful structure. Thus this value should not be used after | 4 | /// and not a meaningful structure. Thus this value should not be used after |
@@ -7,8 +8,8 @@ | |||
7 | //#may also cause a report to be a false positive. | 8 | //#may also cause a report to be a false positive. |
8 | /// | 9 | /// |
9 | // Confidence: Moderate | 10 | // Confidence: Moderate |
10 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 11 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
11 | // Copyright: (C) 2012 Gilles Muller, INRIA/LIP6. GPLv2. | 12 | // Copyright: (C) 2012 Gilles Muller, INRIA/LIP6. |
12 | // URL: http://coccinelle.lip6.fr/ | 13 | // URL: http://coccinelle.lip6.fr/ |
13 | // Comments: | 14 | // Comments: |
14 | // Options: --no-includes --include-headers | 15 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/locks/call_kern.cocci b/scripts/coccinelle/locks/call_kern.cocci index 669b24436248..5ca0d81b0015 100644 --- a/scripts/coccinelle/locks/call_kern.cocci +++ b/scripts/coccinelle/locks/call_kern.cocci | |||
@@ -1,12 +1,13 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find functions that refer to GFP_KERNEL but are called with locks held. | 2 | /// Find functions that refer to GFP_KERNEL but are called with locks held. |
2 | //# The proposed change of converting the GFP_KERNEL is not necessarily the | 3 | //# The proposed change of converting the GFP_KERNEL is not necessarily the |
3 | //# correct one. It may be desired to unlock the lock, or to not call the | 4 | //# correct one. It may be desired to unlock the lock, or to not call the |
4 | //# function under the lock in the first place. | 5 | //# function under the lock in the first place. |
5 | /// | 6 | /// |
6 | // Confidence: Moderate | 7 | // Confidence: Moderate |
7 | // Copyright: (C) 2012 Nicolas Palix. GPLv2. | 8 | // Copyright: (C) 2012 Nicolas Palix. |
8 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 9 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
9 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 10 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
10 | // URL: http://coccinelle.lip6.fr/ | 11 | // URL: http://coccinelle.lip6.fr/ |
11 | // Comments: | 12 | // Comments: |
12 | // Options: --no-includes --include-headers | 13 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/locks/double_lock.cocci b/scripts/coccinelle/locks/double_lock.cocci index 002752f97dca..9e88a578957c 100644 --- a/scripts/coccinelle/locks/double_lock.cocci +++ b/scripts/coccinelle/locks/double_lock.cocci | |||
@@ -1,11 +1,12 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find double locks. False positives may occur when some paths cannot | 2 | /// Find double locks. False positives may occur when some paths cannot |
2 | /// occur at execution, due to the values of variables, and when there is | 3 | /// occur at execution, due to the values of variables, and when there is |
3 | /// an intervening function call that releases the lock. | 4 | /// an intervening function call that releases the lock. |
4 | /// | 5 | /// |
5 | // Confidence: Moderate | 6 | // Confidence: Moderate |
6 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 7 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
7 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 8 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
8 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 9 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
9 | // URL: http://coccinelle.lip6.fr/ | 10 | // URL: http://coccinelle.lip6.fr/ |
10 | // Comments: | 11 | // Comments: |
11 | // Options: --no-includes --include-headers | 12 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/locks/flags.cocci b/scripts/coccinelle/locks/flags.cocci index debd70e46267..7f990cd55f5a 100644 --- a/scripts/coccinelle/locks/flags.cocci +++ b/scripts/coccinelle/locks/flags.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find nested lock+irqsave functions that use the same flags variables | 2 | /// Find nested lock+irqsave functions that use the same flags variables |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 5 | // Copyright: (C) 2010-2012 Nicolas Palix. |
5 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/locks/mini_lock.cocci b/scripts/coccinelle/locks/mini_lock.cocci index 19c6ee5b986b..c3ad098f4a5b 100644 --- a/scripts/coccinelle/locks/mini_lock.cocci +++ b/scripts/coccinelle/locks/mini_lock.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find missing unlocks. This semantic match considers the specific case | 2 | /// Find missing unlocks. This semantic match considers the specific case |
2 | /// where the unlock is missing from an if branch, and there is a lock | 3 | /// where the unlock is missing from an if branch, and there is a lock |
3 | /// before the if and an unlock after the if. False positives are due to | 4 | /// before the if and an unlock after the if. False positives are due to |
@@ -6,9 +7,9 @@ | |||
6 | /// function call that releases the lock. | 7 | /// function call that releases the lock. |
7 | /// | 8 | /// |
8 | // Confidence: Moderate | 9 | // Confidence: Moderate |
9 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 10 | // Copyright: (C) 2010-2012 Nicolas Palix. |
10 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 11 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
11 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 12 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
12 | // URL: http://coccinelle.lip6.fr/ | 13 | // URL: http://coccinelle.lip6.fr/ |
13 | // Comments: | 14 | // Comments: |
14 | // Options: --no-includes --include-headers | 15 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/array_size.cocci b/scripts/coccinelle/misc/array_size.cocci index 09520f0941f0..4d2518749696 100644 --- a/scripts/coccinelle/misc/array_size.cocci +++ b/scripts/coccinelle/misc/array_size.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element | 2 | /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element |
2 | /// | 3 | /// |
3 | //# This makes an effort to find cases where ARRAY_SIZE can be used such as | 4 | //# This makes an effort to find cases where ARRAY_SIZE can be used such as |
@@ -6,7 +7,7 @@ | |||
6 | //# division of the two sizeofs by ARRAY_SIZE. | 7 | //# division of the two sizeofs by ARRAY_SIZE. |
7 | // | 8 | // |
8 | // Confidence: High | 9 | // Confidence: High |
9 | // Copyright: (C) 2014 Himangi Saraogi. GPLv2. | 10 | // Copyright: (C) 2014 Himangi Saraogi. |
10 | // Comments: | 11 | // Comments: |
11 | // Options: --no-includes --include-headers | 12 | // Options: --no-includes --include-headers |
12 | 13 | ||
diff --git a/scripts/coccinelle/misc/badty.cocci b/scripts/coccinelle/misc/badty.cocci index 08470362199c..ed3e0b8f3b1a 100644 --- a/scripts/coccinelle/misc/badty.cocci +++ b/scripts/coccinelle/misc/badty.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Correct the size argument to alloc functions | 2 | /// Correct the size argument to alloc functions |
2 | /// | 3 | /// |
3 | //# This makes an effort to find cases where the argument to sizeof is wrong | 4 | //# This makes an effort to find cases where the argument to sizeof is wrong |
@@ -8,7 +9,7 @@ | |||
8 | //# may need some reformatting. | 9 | //# may need some reformatting. |
9 | // | 10 | // |
10 | // Confidence: Moderate | 11 | // Confidence: Moderate |
11 | // Copyright: (C) 2014 Himangi Saraogi. GPLv2. | 12 | // Copyright: (C) 2014 Himangi Saraogi. |
12 | // Comments: | 13 | // Comments: |
13 | // Options: | 14 | // Options: |
14 | 15 | ||
diff --git a/scripts/coccinelle/misc/boolconv.cocci b/scripts/coccinelle/misc/boolconv.cocci index 33c464d6bc71..392994e93a19 100644 --- a/scripts/coccinelle/misc/boolconv.cocci +++ b/scripts/coccinelle/misc/boolconv.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Remove unneeded conversion to bool | 2 | /// Remove unneeded conversion to bool |
2 | /// | 3 | /// |
3 | //# Relational and logical operators evaluate to bool, | 4 | //# Relational and logical operators evaluate to bool, |
4 | //# explicit conversion is overly verbose and unneeded. | 5 | //# explicit conversion is overly verbose and unneeded. |
5 | // | 6 | // |
6 | // Copyright: (C) 2016 Andrew F. Davis <afd@ti.com> GPLv2. | 7 | // Copyright: (C) 2016 Andrew F. Davis <afd@ti.com> |
7 | 8 | ||
8 | virtual patch | 9 | virtual patch |
9 | virtual context | 10 | virtual context |
diff --git a/scripts/coccinelle/misc/boolinit.cocci b/scripts/coccinelle/misc/boolinit.cocci index aabb581fab5c..fed6126e2b9d 100644 --- a/scripts/coccinelle/misc/boolinit.cocci +++ b/scripts/coccinelle/misc/boolinit.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Bool initializations should use true and false. Bool tests don't need | 2 | /// Bool initializations should use true and false. Bool tests don't need |
2 | /// comparisons. Based on contributions from Joe Perches, Rusty Russell | 3 | /// comparisons. Based on contributions from Joe Perches, Rusty Russell |
3 | /// and Bruce W Allan. | 4 | /// and Bruce W Allan. |
4 | /// | 5 | /// |
5 | // Confidence: High | 6 | // Confidence: High |
6 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 7 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
7 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 8 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Options: --include-headers | 10 | // Options: --include-headers |
10 | 11 | ||
diff --git a/scripts/coccinelle/misc/bugon.cocci b/scripts/coccinelle/misc/bugon.cocci index 741586094abe..8d595c358408 100644 --- a/scripts/coccinelle/misc/bugon.cocci +++ b/scripts/coccinelle/misc/bugon.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use BUG_ON instead of a if condition followed by BUG. | 2 | /// Use BUG_ON instead of a if condition followed by BUG. |
2 | /// | 3 | /// |
3 | //# This makes an effort to find cases where BUG() follows an if | 4 | //# This makes an effort to find cases where BUG() follows an if |
@@ -6,7 +7,7 @@ | |||
6 | //# as argument. | 7 | //# as argument. |
7 | // | 8 | // |
8 | // Confidence: High | 9 | // Confidence: High |
9 | // Copyright: (C) 2014 Himangi Saraogi. GPLv2. | 10 | // Copyright: (C) 2014 Himangi Saraogi. |
10 | // Comments: | 11 | // Comments: |
11 | // Options: --no-includes --include-headers | 12 | // Options: --no-includes --include-headers |
12 | 13 | ||
diff --git a/scripts/coccinelle/misc/cond_no_effect.cocci b/scripts/coccinelle/misc/cond_no_effect.cocci index 8467dbd1c465..91d16a81d1da 100644 --- a/scripts/coccinelle/misc/cond_no_effect.cocci +++ b/scripts/coccinelle/misc/cond_no_effect.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | ///Find conditions where if and else branch are functionally | 2 | ///Find conditions where if and else branch are functionally |
2 | // identical. | 3 | // identical. |
3 | // | 4 | // |
@@ -37,7 +38,7 @@ | |||
37 | // All other cases look like bugs or at least lack of documentation | 38 | // All other cases look like bugs or at least lack of documentation |
38 | // | 39 | // |
39 | // Confidence: Moderate | 40 | // Confidence: Moderate |
40 | // Copyright: (C) 2016 Nicholas Mc Guire, OSADL. GPLv2. | 41 | // Copyright: (C) 2016 Nicholas Mc Guire, OSADL. |
41 | // Comments: | 42 | // Comments: |
42 | // Options: --no-includes --include-headers | 43 | // Options: --no-includes --include-headers |
43 | 44 | ||
diff --git a/scripts/coccinelle/misc/cstptr.cocci b/scripts/coccinelle/misc/cstptr.cocci index f0368b3d4563..c52e3c8ca9b3 100644 --- a/scripts/coccinelle/misc/cstptr.cocci +++ b/scripts/coccinelle/misc/cstptr.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// PTR_ERR should be applied before its argument is reassigned, typically | 2 | /// PTR_ERR should be applied before its argument is reassigned, typically |
2 | /// to NULL | 3 | /// to NULL |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/doubleinit.cocci b/scripts/coccinelle/misc/doubleinit.cocci index c0c3371d25e0..2f80d3ab38dd 100644 --- a/scripts/coccinelle/misc/doubleinit.cocci +++ b/scripts/coccinelle/misc/doubleinit.cocci | |||
@@ -1,11 +1,12 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find duplicate field initializations. This has a high rate of false | 2 | /// Find duplicate field initializations. This has a high rate of false |
2 | /// positives due to #ifdefs, which Coccinelle is not aware of in a structure | 3 | /// positives due to #ifdefs, which Coccinelle is not aware of in a structure |
3 | /// initialization. | 4 | /// initialization. |
4 | /// | 5 | /// |
5 | // Confidence: Low | 6 | // Confidence: Low |
6 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 7 | // Copyright: (C) 2010-2012 Nicolas Palix. |
7 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 8 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
8 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 9 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
9 | // URL: http://coccinelle.lip6.fr/ | 10 | // URL: http://coccinelle.lip6.fr/ |
10 | // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise | 11 | // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise |
11 | // Options: --no-includes --include-headers | 12 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/ifaddr.cocci b/scripts/coccinelle/misc/ifaddr.cocci index c2663c677ac1..fc92e8fcbfcb 100644 --- a/scripts/coccinelle/misc/ifaddr.cocci +++ b/scripts/coccinelle/misc/ifaddr.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// The address of a variable or field is likely always to be non-zero. | 2 | /// The address of a variable or field is likely always to be non-zero. |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
5 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Comments: | 8 | // Comments: |
8 | // Options: --no-includes --include-headers | 9 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/ifcol.cocci b/scripts/coccinelle/misc/ifcol.cocci index ffe75407c5d2..da0351ed5740 100644 --- a/scripts/coccinelle/misc/ifcol.cocci +++ b/scripts/coccinelle/misc/ifcol.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find confusingly indented code in or after an if. An if branch should | 2 | /// Find confusingly indented code in or after an if. An if branch should |
2 | /// be indented. The code following an if should not be indented. | 3 | /// be indented. The code following an if should not be indented. |
3 | /// Sometimes, code after an if that is indented is actually intended to be | 4 | /// Sometimes, code after an if that is indented is actually intended to be |
@@ -8,9 +9,9 @@ | |||
8 | //# is not visually aligned may be considered to be in the same column. | 9 | //# is not visually aligned may be considered to be in the same column. |
9 | // | 10 | // |
10 | // Confidence: Low | 11 | // Confidence: Low |
11 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 12 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
12 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 13 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
13 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 14 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
14 | // URL: http://coccinelle.lip6.fr/ | 15 | // URL: http://coccinelle.lip6.fr/ |
15 | // Comments: | 16 | // Comments: |
16 | // Options: --no-includes --include-headers | 17 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/noderef.cocci b/scripts/coccinelle/misc/noderef.cocci index 007f0de0c715..72de62a77a44 100644 --- a/scripts/coccinelle/misc/noderef.cocci +++ b/scripts/coccinelle/misc/noderef.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// sizeof when applied to a pointer typed expression gives the size of | 2 | /// sizeof when applied to a pointer typed expression gives the size of |
2 | /// the pointer | 3 | /// the pointer |
3 | /// | 4 | /// |
4 | // Confidence: High | 5 | // Confidence: High |
5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/orplus.cocci b/scripts/coccinelle/misc/orplus.cocci index 08de5be73693..52203dc2ca4b 100644 --- a/scripts/coccinelle/misc/orplus.cocci +++ b/scripts/coccinelle/misc/orplus.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Check for constants that are added but are used elsewhere as bitmasks | 2 | /// Check for constants that are added but are used elsewhere as bitmasks |
2 | /// The results should be checked manually to ensure that the nonzero | 3 | /// The results should be checked manually to ensure that the nonzero |
3 | /// bits in the two constants are actually disjoint. | 4 | /// bits in the two constants are actually disjoint. |
4 | /// | 5 | /// |
5 | // Confidence: Moderate | 6 | // Confidence: Moderate |
6 | // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. | 7 | // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. |
7 | // Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2. | 8 | // Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Comments: | 10 | // Comments: |
10 | // Options: --no-includes --include-headers | 11 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/returnvar.cocci b/scripts/coccinelle/misc/returnvar.cocci index d8286ef5307f..ce0d9eebc7e1 100644 --- a/scripts/coccinelle/misc/returnvar.cocci +++ b/scripts/coccinelle/misc/returnvar.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Remove unneeded variable used to store return value. | 3 | /// Remove unneeded variable used to store return value. |
3 | /// | 4 | /// |
4 | // Confidence: Moderate | 5 | // Confidence: Moderate |
5 | // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Comments: Comments on code can be deleted if near code that is removed. | 8 | // Comments: Comments on code can be deleted if near code that is removed. |
8 | // "when strict" can be removed to get more hits, but adds false | 9 | // "when strict" can be removed to get more hits, but adds false |
diff --git a/scripts/coccinelle/misc/semicolon.cocci b/scripts/coccinelle/misc/semicolon.cocci index 6740c659a2b3..a53edb026dad 100644 --- a/scripts/coccinelle/misc/semicolon.cocci +++ b/scripts/coccinelle/misc/semicolon.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// Remove unneeded semicolon. | 3 | /// Remove unneeded semicolon. |
3 | /// | 4 | /// |
4 | // Confidence: Moderate | 5 | // Confidence: Moderate |
5 | // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Comments: Some false positives on empty default cases in switch statements. | 8 | // Comments: Some false positives on empty default cases in switch statements. |
8 | // Options: --no-includes --include-headers | 9 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/misc/warn.cocci b/scripts/coccinelle/misc/warn.cocci index d2e5b6cedb84..e379661e240d 100644 --- a/scripts/coccinelle/misc/warn.cocci +++ b/scripts/coccinelle/misc/warn.cocci | |||
@@ -1,8 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Use WARN(1,...) rather than printk followed by WARN_ON(1) | 2 | /// Use WARN(1,...) rather than printk followed by WARN_ON(1) |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 5 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
5 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 6 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
6 | // URL: http://coccinelle.lip6.fr/ | 7 | // URL: http://coccinelle.lip6.fr/ |
7 | // Comments: | 8 | // Comments: |
8 | // Options: --no-includes --include-headers | 9 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/null/badzero.cocci b/scripts/coccinelle/null/badzero.cocci index f597c8007b76..882dd65313ab 100644 --- a/scripts/coccinelle/null/badzero.cocci +++ b/scripts/coccinelle/null/badzero.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Compare pointer-typed values to NULL rather than 0 | 2 | /// Compare pointer-typed values to NULL rather than 0 |
2 | /// | 3 | /// |
3 | //# This makes an effort to choose between !x and x == NULL. !x is used | 4 | //# This makes an effort to choose between !x and x == NULL. !x is used |
@@ -7,8 +8,8 @@ | |||
7 | //# include path. | 8 | //# include path. |
8 | // | 9 | // |
9 | // Confidence: High | 10 | // Confidence: High |
10 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. | 11 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. |
11 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. | 12 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. |
12 | // URL: http://coccinelle.lip6.fr/ | 13 | // URL: http://coccinelle.lip6.fr/ |
13 | // Requires: 1.0.0 | 14 | // Requires: 1.0.0 |
14 | // Options: | 15 | // Options: |
diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci index cbc6184e69ef..98f1e7faf503 100644 --- a/scripts/coccinelle/null/deref_null.cocci +++ b/scripts/coccinelle/null/deref_null.cocci | |||
@@ -1,11 +1,12 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// | 2 | /// |
2 | /// A variable is dereferenced under a NULL test. | 3 | /// A variable is dereferenced under a NULL test. |
3 | /// Even though it is known to be NULL. | 4 | /// Even though it is known to be NULL. |
4 | /// | 5 | /// |
5 | // Confidence: Moderate | 6 | // Confidence: Moderate |
6 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 7 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
7 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 8 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
8 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 9 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
9 | // URL: http://coccinelle.lip6.fr/ | 10 | // URL: http://coccinelle.lip6.fr/ |
10 | // Comments: -I ... -all_includes can give more complete results | 11 | // Comments: -I ... -all_includes can give more complete results |
11 | // Options: | 12 | // Options: |
diff --git a/scripts/coccinelle/null/eno.cocci b/scripts/coccinelle/null/eno.cocci index 9bd29aa83399..81584ff87956 100644 --- a/scripts/coccinelle/null/eno.cocci +++ b/scripts/coccinelle/null/eno.cocci | |||
@@ -1,9 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// The various basic memory allocation functions don't return ERR_PTR | 2 | /// The various basic memory allocation functions don't return ERR_PTR |
2 | /// | 3 | /// |
3 | // Confidence: High | 4 | // Confidence: High |
4 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. | 5 | // Copyright: (C) 2010-2012 Nicolas Palix. |
5 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | 6 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. |
6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | 7 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. |
7 | // URL: http://coccinelle.lip6.fr/ | 8 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | 9 | // Comments: |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/null/kmerr.cocci b/scripts/coccinelle/null/kmerr.cocci index 5354a7903ccb..d0e004d4e130 100644 --- a/scripts/coccinelle/null/kmerr.cocci +++ b/scripts/coccinelle/null/kmerr.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// This semantic patch looks for kmalloc etc that are not followed by a | 2 | /// This semantic patch looks for kmalloc etc that are not followed by a |
2 | /// NULL check. It only gives a report in the case where there is some | 3 | /// NULL check. It only gives a report in the case where there is some |
3 | /// error handling code later in the function, which may be helpful | 4 | /// error handling code later in the function, which may be helpful |
@@ -5,9 +6,9 @@ | |||
5 | /// should be. | 6 | /// should be. |
6 | /// | 7 | /// |
7 | // Confidence: High | 8 | // Confidence: High |
8 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 9 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
9 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 10 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 11 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
11 | // URL: http://coccinelle.lip6.fr/ | 12 | // URL: http://coccinelle.lip6.fr/ |
12 | // Comments: | 13 | // Comments: |
13 | // Options: --no-includes --include-headers | 14 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/tests/doublebitand.cocci b/scripts/coccinelle/tests/doublebitand.cocci index 72f1572aaec3..0f0b94e7debd 100644 --- a/scripts/coccinelle/tests/doublebitand.cocci +++ b/scripts/coccinelle/tests/doublebitand.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find bit operations that include the same argument more than once | 2 | /// Find bit operations that include the same argument more than once |
2 | //# One source of false positives is when the argument performs a side | 3 | //# One source of false positives is when the argument performs a side |
3 | //# effect. Another source of false positives is when a neutral value | 4 | //# effect. Another source of false positives is when a neutral value |
@@ -5,9 +6,9 @@ | |||
5 | //# same structure as other similar expressions | 6 | //# same structure as other similar expressions |
6 | /// | 7 | /// |
7 | // Confidence: Moderate | 8 | // Confidence: Moderate |
8 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 9 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
9 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 10 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 11 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
11 | // URL: http://coccinelle.lip6.fr/ | 12 | // URL: http://coccinelle.lip6.fr/ |
12 | // Comments: | 13 | // Comments: |
13 | // Options: --no-includes --include-headers | 14 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/tests/doubletest.cocci b/scripts/coccinelle/tests/doubletest.cocci index 7af2ce7eb9bf..b35519cddb13 100644 --- a/scripts/coccinelle/tests/doubletest.cocci +++ b/scripts/coccinelle/tests/doubletest.cocci | |||
@@ -1,12 +1,13 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Find &&/|| operations that include the same argument more than once | 2 | /// Find &&/|| operations that include the same argument more than once |
2 | //# A common source of false positives is when the expression, or | 3 | //# A common source of false positives is when the expression, or |
3 | //# another expresssion in the same && or || operation, performs a | 4 | //# another expresssion in the same && or || operation, performs a |
4 | //# side effect. | 5 | //# side effect. |
5 | /// | 6 | /// |
6 | // Confidence: Moderate | 7 | // Confidence: Moderate |
7 | // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. | 8 | // Copyright: (C) 2010 Nicolas Palix, DIKU. |
8 | // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. | 9 | // Copyright: (C) 2010 Julia Lawall, DIKU. |
9 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. | 10 | // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. |
10 | // URL: http://coccinelle.lip6.fr/ | 11 | // URL: http://coccinelle.lip6.fr/ |
11 | // Comments: | 12 | // Comments: |
12 | // Options: --no-includes --include-headers | 13 | // Options: --no-includes --include-headers |
diff --git a/scripts/coccinelle/tests/odd_ptr_err.cocci b/scripts/coccinelle/tests/odd_ptr_err.cocci index dfc6b40c2969..11d4e2b6deb8 100644 --- a/scripts/coccinelle/tests/odd_ptr_err.cocci +++ b/scripts/coccinelle/tests/odd_ptr_err.cocci | |||
@@ -1,10 +1,11 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// PTR_ERR should access the value just tested by IS_ERR | 2 | /// PTR_ERR should access the value just tested by IS_ERR |
2 | //# There can be false positives in the patch case, where it is the call to | 3 | //# There can be false positives in the patch case, where it is the call to |
3 | //# IS_ERR that is wrong. | 4 | //# IS_ERR that is wrong. |
4 | /// | 5 | /// |
5 | // Confidence: High | 6 | // Confidence: High |
6 | // Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2. | 7 | // Copyright: (C) 2012, 2015 Julia Lawall, INRIA. |
7 | // Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2. | 8 | // Copyright: (C) 2012, 2015 Gilles Muller, INRIA. |
8 | // URL: http://coccinelle.lip6.fr/ | 9 | // URL: http://coccinelle.lip6.fr/ |
9 | // Options: --no-includes --include-headers | 10 | // Options: --no-includes --include-headers |
10 | 11 | ||
diff --git a/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci index 8fa5a3c7b784..91e286ace54c 100644 --- a/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci +++ b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /// Unsigned expressions cannot be lesser than zero. Presence of | 2 | /// Unsigned expressions cannot be lesser than zero. Presence of |
2 | /// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug, | 3 | /// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug, |
3 | /// usually wrong type of variable. | 4 | /// usually wrong type of variable. |
@@ -11,7 +12,7 @@ | |||
11 | /// result is used to avoid false positives difficult to detect by other ways | 12 | /// result is used to avoid false positives difficult to detect by other ways |
12 | /// | 13 | /// |
13 | // Confidence: Average | 14 | // Confidence: Average |
14 | // Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd. GPLv2. | 15 | // Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd. |
15 | // URL: http://coccinelle.lip6.fr/ | 16 | // URL: http://coccinelle.lip6.fr/ |
16 | // Options: --all-includes | 17 | // Options: --all-includes |
17 | 18 | ||
diff --git a/scripts/conmakehash.c b/scripts/conmakehash.c index 61bbda54cf13..cddd789fe46e 100644 --- a/scripts/conmakehash.c +++ b/scripts/conmakehash.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * conmakehash.c | 3 | * conmakehash.c |
3 | * | 4 | * |
@@ -8,10 +9,6 @@ | |||
8 | * just for this seems like massive overkill. | 9 | * just for this seems like massive overkill. |
9 | * | 10 | * |
10 | * Copyright (C) 1995-1997 H. Peter Anvin | 11 | * Copyright (C) 1995-1997 H. Peter Anvin |
11 | * | ||
12 | * This program is a part of the Linux kernel, and may be freely | ||
13 | * copied under the terms of the GNU General Public License (GPL), | ||
14 | * version 2, or at your option any later version. | ||
15 | */ | 12 | */ |
16 | 13 | ||
17 | #include <stdio.h> | 14 | #include <stdio.h> |
diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh index bcdd45df3f51..13e5fbafdf2f 100755 --- a/scripts/decode_stacktrace.sh +++ b/scripts/decode_stacktrace.sh | |||
@@ -28,7 +28,7 @@ parse_symbol() { | |||
28 | local objfile=${modcache[$module]} | 28 | local objfile=${modcache[$module]} |
29 | else | 29 | else |
30 | [[ $modpath == "" ]] && return | 30 | [[ $modpath == "" ]] && return |
31 | local objfile=$(find "$modpath" -name $module.ko -print -quit) | 31 | local objfile=$(find "$modpath" -name "${module//_/[-_]}.ko*" -print -quit) |
32 | [[ $objfile == "" ]] && return | 32 | [[ $objfile == "" ]] && return |
33 | modcache[$module]=$objfile | 33 | modcache[$module]=$objfile |
34 | fi | 34 | fi |
@@ -73,7 +73,7 @@ parse_symbol() { | |||
73 | if [[ "${cache[$module,$address]+isset}" == "isset" ]]; then | 73 | if [[ "${cache[$module,$address]+isset}" == "isset" ]]; then |
74 | local code=${cache[$module,$address]} | 74 | local code=${cache[$module,$address]} |
75 | else | 75 | else |
76 | local code=$(addr2line -i -e "$objfile" "$address") | 76 | local code=$(${CROSS_COMPILE}addr2line -i -e "$objfile" "$address") |
77 | cache[$module,$address]=$code | 77 | cache[$module,$address]=$code |
78 | fi | 78 | fi |
79 | 79 | ||
@@ -85,7 +85,7 @@ parse_symbol() { | |||
85 | fi | 85 | fi |
86 | 86 | ||
87 | # Strip out the base of the path | 87 | # Strip out the base of the path |
88 | code=${code//^$basepath/""} | 88 | code=${code#$basepath/} |
89 | 89 | ||
90 | # In the case of inlines, move everything to same line | 90 | # In the case of inlines, move everything to same line |
91 | code=${code//$'\n'/' '} | 91 | code=${code//$'\n'/' '} |
diff --git a/scripts/documentation-file-ref-check b/scripts/documentation-file-ref-check index 63e9542656f1..7784c54aa38b 100755 --- a/scripts/documentation-file-ref-check +++ b/scripts/documentation-file-ref-check | |||
@@ -8,15 +8,30 @@ use warnings; | |||
8 | use strict; | 8 | use strict; |
9 | use Getopt::Long qw(:config no_auto_abbrev); | 9 | use Getopt::Long qw(:config no_auto_abbrev); |
10 | 10 | ||
11 | # NOTE: only add things here when the file was gone, but the text wants | ||
12 | # to mention a past documentation file, for example, to give credits for | ||
13 | # the original work. | ||
14 | my %false_positives = ( | ||
15 | "Documentation/scsi/scsi_mid_low_api.txt" => "Documentation/Configure.help", | ||
16 | "drivers/vhost/vhost.c" => "Documentation/virtual/lguest/lguest.c", | ||
17 | ); | ||
18 | |||
11 | my $scriptname = $0; | 19 | my $scriptname = $0; |
12 | $scriptname =~ s,.*/([^/]+/),$1,; | 20 | $scriptname =~ s,.*/([^/]+/),$1,; |
13 | 21 | ||
14 | # Parse arguments | 22 | # Parse arguments |
15 | my $help = 0; | 23 | my $help = 0; |
16 | my $fix = 0; | 24 | my $fix = 0; |
25 | my $warn = 0; | ||
26 | |||
27 | if (! -d ".git") { | ||
28 | printf "Warning: can't check if file exists, as this is not a git tree"; | ||
29 | exit 0; | ||
30 | } | ||
17 | 31 | ||
18 | GetOptions( | 32 | GetOptions( |
19 | 'fix' => \$fix, | 33 | 'fix' => \$fix, |
34 | 'warn' => \$warn, | ||
20 | 'h|help|usage' => \$help, | 35 | 'h|help|usage' => \$help, |
21 | ); | 36 | ); |
22 | 37 | ||
@@ -75,6 +90,9 @@ while (<IN>) { | |||
75 | # Skip this script | 90 | # Skip this script |
76 | next if ($f eq $scriptname); | 91 | next if ($f eq $scriptname); |
77 | 92 | ||
93 | # Ignore the dir where documentation will be built | ||
94 | next if ($ln =~ m,\b(\S*)Documentation/output,); | ||
95 | |||
78 | if ($ln =~ m,\b(\S*)(Documentation/[A-Za-z0-9\_\.\,\~/\*\[\]\?+-]*)(.*),) { | 96 | if ($ln =~ m,\b(\S*)(Documentation/[A-Za-z0-9\_\.\,\~/\*\[\]\?+-]*)(.*),) { |
79 | my $prefix = $1; | 97 | my $prefix = $1; |
80 | my $ref = $2; | 98 | my $ref = $2; |
@@ -109,7 +127,7 @@ while (<IN>) { | |||
109 | # Remove sched-pelt false-positive | 127 | # Remove sched-pelt false-positive |
110 | next if ($fulref =~ m,^Documentation/scheduler/sched-pelt$,); | 128 | next if ($fulref =~ m,^Documentation/scheduler/sched-pelt$,); |
111 | 129 | ||
112 | # Discard some build examples from Documentation/target/tcm_mod_builder.txt | 130 | # Discard some build examples from Documentation/target/tcm_mod_builder.rst |
113 | next if ($fulref =~ m,mnt/sdb/lio-core-2.6.git/Documentation/target,); | 131 | next if ($fulref =~ m,mnt/sdb/lio-core-2.6.git/Documentation/target,); |
114 | 132 | ||
115 | # Check if exists, evaluating wildcards | 133 | # Check if exists, evaluating wildcards |
@@ -119,13 +137,20 @@ while (<IN>) { | |||
119 | if ($f =~ m/tools/) { | 137 | if ($f =~ m/tools/) { |
120 | my $path = $f; | 138 | my $path = $f; |
121 | $path =~ s,(.*)/.*,$1,; | 139 | $path =~ s,(.*)/.*,$1,; |
122 | next if (grep -e, glob("$path/$ref $path/$fulref")); | 140 | next if (grep -e, glob("$path/$ref $path/../$ref $path/$fulref")); |
141 | } | ||
142 | |||
143 | # Discard known false-positives | ||
144 | if (defined($false_positives{$f})) { | ||
145 | next if ($false_positives{$f} eq $fulref); | ||
123 | } | 146 | } |
124 | 147 | ||
125 | if ($fix) { | 148 | if ($fix) { |
126 | if (!($ref =~ m/(scripts|Kconfig|Kbuild)/)) { | 149 | if (!($ref =~ m/(scripts|Kconfig|Kbuild)/)) { |
127 | $broken_ref{$ref}++; | 150 | $broken_ref{$ref}++; |
128 | } | 151 | } |
152 | } elsif ($warn) { | ||
153 | print STDERR "Warning: $f references a file that doesn't exist: $fulref\n"; | ||
129 | } else { | 154 | } else { |
130 | print STDERR "$f: $fulref\n"; | 155 | print STDERR "$f: $fulref\n"; |
131 | } | 156 | } |
@@ -141,6 +166,10 @@ print "Auto-fixing broken references. Please double-check the results\n"; | |||
141 | foreach my $ref (keys %broken_ref) { | 166 | foreach my $ref (keys %broken_ref) { |
142 | my $new =$ref; | 167 | my $new =$ref; |
143 | 168 | ||
169 | my $basedir = "."; | ||
170 | # On translations, only seek inside the translations directory | ||
171 | $basedir = $1 if ($ref =~ m,(Documentation/translations/[^/]+),); | ||
172 | |||
144 | # get just the basename | 173 | # get just the basename |
145 | $new =~ s,.*/,,; | 174 | $new =~ s,.*/,,; |
146 | 175 | ||
@@ -148,31 +177,40 @@ foreach my $ref (keys %broken_ref) { | |||
148 | 177 | ||
149 | # usual reason for breakage: DT file moved around | 178 | # usual reason for breakage: DT file moved around |
150 | if ($ref =~ /devicetree/) { | 179 | if ($ref =~ /devicetree/) { |
151 | my $search = $new; | 180 | # usual reason for breakage: DT file renamed to .yaml |
152 | $search =~ s,^.*/,,; | 181 | if (!$f) { |
153 | $f = qx(find Documentation/devicetree/ -iname "*$search*") if ($search); | 182 | my $new_ref = $ref; |
183 | $new_ref =~ s/\.txt$/.yaml/; | ||
184 | $f=$new_ref if (-f $new_ref); | ||
185 | } | ||
186 | |||
154 | if (!$f) { | 187 | if (!$f) { |
155 | # Manufacturer name may have changed | 188 | my $search = $new; |
156 | $search =~ s/^.*,//; | 189 | $search =~ s,^.*/,,; |
157 | $f = qx(find Documentation/devicetree/ -iname "*$search*") if ($search); | 190 | $f = qx(find Documentation/devicetree/ -iname "*$search*") if ($search); |
191 | if (!$f) { | ||
192 | # Manufacturer name may have changed | ||
193 | $search =~ s/^.*,//; | ||
194 | $f = qx(find Documentation/devicetree/ -iname "*$search*") if ($search); | ||
195 | } | ||
158 | } | 196 | } |
159 | } | 197 | } |
160 | 198 | ||
161 | # usual reason for breakage: file renamed to .rst | 199 | # usual reason for breakage: file renamed to .rst |
162 | if (!$f) { | 200 | if (!$f) { |
163 | $new =~ s/\.txt$/.rst/; | 201 | $new =~ s/\.txt$/.rst/; |
164 | $f=qx(find . -iname $new) if ($new); | 202 | $f=qx(find $basedir -iname $new) if ($new); |
165 | } | 203 | } |
166 | 204 | ||
167 | # usual reason for breakage: use dash or underline | 205 | # usual reason for breakage: use dash or underline |
168 | if (!$f) { | 206 | if (!$f) { |
169 | $new =~ s/[-_]/[-_]/g; | 207 | $new =~ s/[-_]/[-_]/g; |
170 | $f=qx(find . -iname $new) if ($new); | 208 | $f=qx(find $basedir -iname $new) if ($new); |
171 | } | 209 | } |
172 | 210 | ||
173 | # Wild guess: seek for the same name on another place | 211 | # Wild guess: seek for the same name on another place |
174 | if (!$f) { | 212 | if (!$f) { |
175 | $f = qx(find . -iname $new) if ($new); | 213 | $f = qx(find $basedir -iname $new) if ($new); |
176 | } | 214 | } |
177 | 215 | ||
178 | my @find = split /\s+/, $f; | 216 | my @find = split /\s+/, $f; |
diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile index 5f227d8d39d8..82160808765c 100644 --- a/scripts/dtc/Makefile +++ b/scripts/dtc/Makefile | |||
@@ -9,7 +9,7 @@ dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \ | |||
9 | dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o | 9 | dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o |
10 | 10 | ||
11 | # Source files need to get at the userspace version of libfdt_env.h to compile | 11 | # Source files need to get at the userspace version of libfdt_env.h to compile |
12 | HOST_EXTRACFLAGS := -I$(src)/libfdt | 12 | HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt |
13 | 13 | ||
14 | ifeq ($(wildcard /usr/include/yaml.h),) | 14 | ifeq ($(wildcard /usr/include/yaml.h),) |
15 | ifneq ($(CHECK_DTBS),) | 15 | ifneq ($(CHECK_DTBS),) |
@@ -23,8 +23,8 @@ HOSTLDLIBS_dtc := -lyaml | |||
23 | endif | 23 | endif |
24 | 24 | ||
25 | # Generated files need one more search path to include headers in source tree | 25 | # Generated files need one more search path to include headers in source tree |
26 | HOSTCFLAGS_dtc-lexer.lex.o := -I$(src) | 26 | HOSTCFLAGS_dtc-lexer.lex.o := -I $(srctree)/$(src) |
27 | HOSTCFLAGS_dtc-parser.tab.o := -I$(src) | 27 | HOSTCFLAGS_dtc-parser.tab.o := -I $(srctree)/$(src) |
28 | 28 | ||
29 | # dependencies on generated files need to be listed explicitly | 29 | # dependencies on generated files need to be listed explicitly |
30 | $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h | 30 | $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h |
diff --git a/scripts/dtc/Makefile.dtc b/scripts/dtc/Makefile.dtc index d4375630a7f7..9c467b096f03 100644 --- a/scripts/dtc/Makefile.dtc +++ b/scripts/dtc/Makefile.dtc | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | # Makefile.dtc | 2 | # Makefile.dtc |
2 | # | 3 | # |
3 | # This is not a complete Makefile of itself. Instead, it is designed to | 4 | # This is not a complete Makefile of itself. Instead, it is designed to |
diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c index 4834e44b37b2..d7986ee18012 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2007. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2007. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
@@ -660,6 +645,8 @@ ERROR(path_references, fixup_path_references, NULL, &duplicate_node_names); | |||
660 | static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, | 645 | static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, |
661 | struct node *node) | 646 | struct node *node) |
662 | { | 647 | { |
648 | if (generate_symbols && node->labels) | ||
649 | return; | ||
663 | if (node->omit_if_unused && !node->is_referenced) | 650 | if (node->omit_if_unused && !node->is_referenced) |
664 | delete_node(node); | 651 | delete_node(node); |
665 | } | 652 | } |
@@ -1212,8 +1199,24 @@ static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *d | |||
1212 | } | 1199 | } |
1213 | WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size); | 1200 | WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size); |
1214 | 1201 | ||
1215 | static void check_unique_unit_address(struct check *c, struct dt_info *dti, | 1202 | static bool node_is_disabled(struct node *node) |
1216 | struct node *node) | 1203 | { |
1204 | struct property *prop; | ||
1205 | |||
1206 | prop = get_property(node, "status"); | ||
1207 | if (prop) { | ||
1208 | char *str = prop->val.val; | ||
1209 | if (streq("disabled", str)) | ||
1210 | return true; | ||
1211 | } | ||
1212 | |||
1213 | return false; | ||
1214 | } | ||
1215 | |||
1216 | static void check_unique_unit_address_common(struct check *c, | ||
1217 | struct dt_info *dti, | ||
1218 | struct node *node, | ||
1219 | bool disable_check) | ||
1217 | { | 1220 | { |
1218 | struct node *childa; | 1221 | struct node *childa; |
1219 | 1222 | ||
@@ -1230,18 +1233,38 @@ static void check_unique_unit_address(struct check *c, struct dt_info *dti, | |||
1230 | if (!strlen(addr_a)) | 1233 | if (!strlen(addr_a)) |
1231 | continue; | 1234 | continue; |
1232 | 1235 | ||
1236 | if (disable_check && node_is_disabled(childa)) | ||
1237 | continue; | ||
1238 | |||
1233 | for_each_child(node, childb) { | 1239 | for_each_child(node, childb) { |
1234 | const char *addr_b = get_unitname(childb); | 1240 | const char *addr_b = get_unitname(childb); |
1235 | if (childa == childb) | 1241 | if (childa == childb) |
1236 | break; | 1242 | break; |
1237 | 1243 | ||
1244 | if (disable_check && node_is_disabled(childb)) | ||
1245 | continue; | ||
1246 | |||
1238 | if (streq(addr_a, addr_b)) | 1247 | if (streq(addr_a, addr_b)) |
1239 | FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath); | 1248 | FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath); |
1240 | } | 1249 | } |
1241 | } | 1250 | } |
1242 | } | 1251 | } |
1252 | |||
1253 | static void check_unique_unit_address(struct check *c, struct dt_info *dti, | ||
1254 | struct node *node) | ||
1255 | { | ||
1256 | check_unique_unit_address_common(c, dti, node, false); | ||
1257 | } | ||
1243 | WARNING(unique_unit_address, check_unique_unit_address, NULL, &avoid_default_addr_size); | 1258 | WARNING(unique_unit_address, check_unique_unit_address, NULL, &avoid_default_addr_size); |
1244 | 1259 | ||
1260 | static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti, | ||
1261 | struct node *node) | ||
1262 | { | ||
1263 | check_unique_unit_address_common(c, dti, node, true); | ||
1264 | } | ||
1265 | CHECK_ENTRY(unique_unit_address_if_enabled, check_unique_unit_address_if_enabled, | ||
1266 | NULL, false, false, &avoid_default_addr_size); | ||
1267 | |||
1245 | static void check_obsolete_chosen_interrupt_controller(struct check *c, | 1268 | static void check_obsolete_chosen_interrupt_controller(struct check *c, |
1246 | struct dt_info *dti, | 1269 | struct dt_info *dti, |
1247 | struct node *node) | 1270 | struct node *node) |
@@ -1542,10 +1565,14 @@ static void check_interrupts_property(struct check *c, | |||
1542 | prop = get_property(parent, "interrupt-parent"); | 1565 | prop = get_property(parent, "interrupt-parent"); |
1543 | if (prop) { | 1566 | if (prop) { |
1544 | phandle = propval_cell(prop); | 1567 | phandle = propval_cell(prop); |
1545 | /* Give up if this is an overlay with external references */ | 1568 | if ((phandle == 0) || (phandle == -1)) { |
1546 | if ((phandle == 0 || phandle == -1) && | 1569 | /* Give up if this is an overlay with |
1547 | (dti->dtsflags & DTSF_PLUGIN)) | 1570 | * external references */ |
1571 | if (dti->dtsflags & DTSF_PLUGIN) | ||
1548 | return; | 1572 | return; |
1573 | FAIL_PROP(c, dti, parent, prop, "Invalid phandle"); | ||
1574 | continue; | ||
1575 | } | ||
1549 | 1576 | ||
1550 | irq_node = get_node_by_phandle(root, phandle); | 1577 | irq_node = get_node_by_phandle(root, phandle); |
1551 | if (!irq_node) { | 1578 | if (!irq_node) { |
@@ -1714,7 +1741,7 @@ static void check_graph_endpoint(struct check *c, struct dt_info *dti, | |||
1714 | return; | 1741 | return; |
1715 | 1742 | ||
1716 | if (!strprefixeq(node->name, node->basenamelen, "endpoint")) | 1743 | if (!strprefixeq(node->name, node->basenamelen, "endpoint")) |
1717 | FAIL(c, dti, node, "graph endpont node name should be 'endpoint'"); | 1744 | FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'"); |
1718 | 1745 | ||
1719 | check_graph_reg(c, dti, node); | 1746 | check_graph_reg(c, dti, node); |
1720 | 1747 | ||
@@ -1769,6 +1796,7 @@ static struct check *check_table[] = { | |||
1769 | &avoid_default_addr_size, | 1796 | &avoid_default_addr_size, |
1770 | &avoid_unnecessary_addr_size, | 1797 | &avoid_unnecessary_addr_size, |
1771 | &unique_unit_address, | 1798 | &unique_unit_address, |
1799 | &unique_unit_address_if_enabled, | ||
1772 | &obsolete_chosen_interrupt_controller, | 1800 | &obsolete_chosen_interrupt_controller, |
1773 | &chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path, | 1801 | &chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path, |
1774 | 1802 | ||
diff --git a/scripts/dtc/data.c b/scripts/dtc/data.c index 4a204145cc7b..0a43b6de3264 100644 --- a/scripts/dtc/data.c +++ b/scripts/dtc/data.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
diff --git a/scripts/dtc/dt_to_config b/scripts/dtc/dt_to_config index 5dfd1bff351f..299d1c2b20d7 100755 --- a/scripts/dtc/dt_to_config +++ b/scripts/dtc/dt_to_config | |||
@@ -1,10 +1,9 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # Copyright 2016 by Frank Rowand | 4 | # Copyright 2016 by Frank Rowand |
4 | # Copyright 2016 by Gaurav Minocha | 5 | # Copyright 2016 by Gaurav Minocha |
5 | # | 6 | # |
6 | # This file is subject to the terms and conditions of the GNU General Public | ||
7 | # License v2. | ||
8 | 7 | ||
9 | use strict 'refs'; | 8 | use strict 'refs'; |
10 | use strict subs; | 9 | use strict subs; |
diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l index 06c040902444..5c6c3fd557d7 100644 --- a/scripts/dtc/dtc-lexer.l +++ b/scripts/dtc/dtc-lexer.l | |||
@@ -1,21 +1,6 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | %option noyywrap nounput noinput never-interactive | 6 | %option noyywrap nounput noinput never-interactive |
diff --git a/scripts/dtc/dtc-parser.y b/scripts/dtc/dtc-parser.y index 2ec981e86111..2ed4dc1f07fd 100644 --- a/scripts/dtc/dtc-parser.y +++ b/scripts/dtc/dtc-parser.y | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | %{ | 5 | %{ |
21 | #include <stdio.h> | 6 | #include <stdio.h> |
diff --git a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c index 695e1f789fc7..bdb3f5945699 100644 --- a/scripts/dtc/dtc.c +++ b/scripts/dtc/dtc.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include <sys/stat.h> | 6 | #include <sys/stat.h> |
diff --git a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h index 789e0b1bc057..6e74ecea55a3 100644 --- a/scripts/dtc/dtc.h +++ b/scripts/dtc/dtc.h | |||
@@ -1,24 +1,9 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
1 | #ifndef DTC_H | 2 | #ifndef DTC_H |
2 | #define DTC_H | 3 | #define DTC_H |
3 | 4 | ||
4 | /* | 5 | /* |
5 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 6 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
6 | * | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
21 | * USA | ||
22 | */ | 7 | */ |
23 | 8 | ||
24 | #include <stdio.h> | 9 | #include <stdio.h> |
@@ -231,7 +216,8 @@ void add_child(struct node *parent, struct node *child); | |||
231 | void delete_node_by_name(struct node *parent, char *name); | 216 | void delete_node_by_name(struct node *parent, char *name); |
232 | void delete_node(struct node *node); | 217 | void delete_node(struct node *node); |
233 | void append_to_property(struct node *node, | 218 | void append_to_property(struct node *node, |
234 | char *name, const void *data, int len); | 219 | char *name, const void *data, int len, |
220 | enum markertype type); | ||
235 | 221 | ||
236 | const char *get_unitname(struct node *node); | 222 | const char *get_unitname(struct node *node); |
237 | struct property *get_property(struct node *node, const char *propname); | 223 | struct property *get_property(struct node *node, const char *propname); |
diff --git a/scripts/dtc/dtx_diff b/scripts/dtc/dtx_diff index 0d8572008729..00fd4738a587 100755 --- a/scripts/dtc/dtx_diff +++ b/scripts/dtc/dtx_diff | |||
@@ -1,10 +1,8 @@ | |||
1 | #! /bin/bash | 1 | #! /bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # Copyright (C) 2015 Frank Rowand | 4 | # Copyright (C) 2015 Frank Rowand |
4 | # | 5 | # |
5 | # This program is free software; you can redistribute it and/or modify | ||
6 | # it under the terms of the GNU General Public License as published by | ||
7 | # the Free Software Foundation; version 2 of the License. | ||
8 | 6 | ||
9 | 7 | ||
10 | usage() { | 8 | usage() { |
diff --git a/scripts/dtc/fdtget.c b/scripts/dtc/fdtget.c index c2fbab2a5476..c922f82246c6 100644 --- a/scripts/dtc/fdtget.c +++ b/scripts/dtc/fdtget.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 3 | * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
3 | * | 4 | * |
@@ -6,21 +7,6 @@ | |||
6 | * Based on code written by: | 7 | * Based on code written by: |
7 | * Pantelis Antoniou <pantelis.antoniou@gmail.com> and | 8 | * Pantelis Antoniou <pantelis.antoniou@gmail.com> and |
8 | * Matthew McClintock <msm@freescale.com> | 9 | * Matthew McClintock <msm@freescale.com> |
9 | * | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License as | ||
12 | * published by the Free Software Foundation; either version 2 of | ||
13 | * the License, or (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the Free Software | ||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
23 | * MA 02111-1307 USA | ||
24 | */ | 10 | */ |
25 | 11 | ||
26 | #include <assert.h> | 12 | #include <assert.h> |
diff --git a/scripts/dtc/fdtput.c b/scripts/dtc/fdtput.c index f2197f51930b..a363c3cabc59 100644 --- a/scripts/dtc/fdtput.c +++ b/scripts/dtc/fdtput.c | |||
@@ -1,20 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 3 | * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License as | ||
6 | * published by the Free Software Foundation; either version 2 of | ||
7 | * the License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
17 | * MA 02111-1307 USA | ||
18 | */ | 4 | */ |
19 | 5 | ||
20 | #include <assert.h> | 6 | #include <assert.h> |
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c index acf04c30669f..bd6977eedcb8 100644 --- a/scripts/dtc/flattree.c +++ b/scripts/dtc/flattree.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
@@ -525,7 +510,7 @@ void dt_to_asm(FILE *f, struct dt_info *dti, int version) | |||
525 | fprintf(f, "/* Memory reserve map from source file */\n"); | 510 | fprintf(f, "/* Memory reserve map from source file */\n"); |
526 | 511 | ||
527 | /* | 512 | /* |
528 | * Use .long on high and low halfs of u64s to avoid .quad | 513 | * Use .long on high and low halves of u64s to avoid .quad |
529 | * as it appears .quad isn't available in some assemblers. | 514 | * as it appears .quad isn't available in some assemblers. |
530 | */ | 515 | */ |
531 | for (re = dti->reservelist; re; re = re->next) { | 516 | for (re = dti->reservelist; re; re = re->next) { |
diff --git a/scripts/dtc/fstree.c b/scripts/dtc/fstree.c index 1e7eeba47ff6..9871689b4afb 100644 --- a/scripts/dtc/fstree.c +++ b/scripts/dtc/fstree.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
diff --git a/scripts/dtc/libfdt/Makefile.libfdt b/scripts/dtc/libfdt/Makefile.libfdt index 3af3656df801..e54639738c8e 100644 --- a/scripts/dtc/libfdt/Makefile.libfdt +++ b/scripts/dtc/libfdt/Makefile.libfdt | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | # Makefile.libfdt | 2 | # Makefile.libfdt |
2 | # | 3 | # |
3 | # This is not a complete Makefile of itself. Instead, it is designed to | 4 | # This is not a complete Makefile of itself. Instead, it is designed to |
@@ -9,7 +10,9 @@ LIBFDT_VERSION = version.lds | |||
9 | LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c fdt_empty_tree.c \ | 10 | LIBFDT_SRCS = fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c fdt_empty_tree.c \ |
10 | fdt_addresses.c fdt_overlay.c | 11 | fdt_addresses.c fdt_overlay.c |
11 | LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o) | 12 | LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o) |
13 | LIBFDT_LIB = libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) | ||
12 | 14 | ||
13 | libfdt_clean: | 15 | libfdt_clean: |
14 | @$(VECHO) CLEAN "(libfdt)" | 16 | @$(VECHO) CLEAN "(libfdt)" |
15 | rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%) | 17 | rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%) |
18 | rm -f $(LIBFDT_dir)/$(LIBFDT_soname) | ||
diff --git a/scripts/dtc/libfdt/fdt.c b/scripts/dtc/libfdt/fdt.c index ae03b1112961..179168ec63e9 100644 --- a/scripts/dtc/libfdt/fdt.c +++ b/scripts/dtc/libfdt/fdt.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
diff --git a/scripts/dtc/libfdt/fdt.h b/scripts/dtc/libfdt/fdt.h index 74961f9026d1..f2e68807f277 100644 --- a/scripts/dtc/libfdt/fdt.h +++ b/scripts/dtc/libfdt/fdt.h | |||
@@ -1,55 +1,10 @@ | |||
1 | /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ | ||
1 | #ifndef FDT_H | 2 | #ifndef FDT_H |
2 | #define FDT_H | 3 | #define FDT_H |
3 | /* | 4 | /* |
4 | * libfdt - Flat Device Tree manipulation | 5 | * libfdt - Flat Device Tree manipulation |
5 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 6 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
6 | * Copyright 2012 Kim Phillips, Freescale Semiconductor. | 7 | * Copyright 2012 Kim Phillips, Freescale Semiconductor. |
7 | * | ||
8 | * libfdt is dual licensed: you can use it either under the terms of | ||
9 | * the GPL, or the BSD license, at your option. | ||
10 | * | ||
11 | * a) This library is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License as | ||
13 | * published by the Free Software Foundation; either version 2 of the | ||
14 | * License, or (at your option) any later version. | ||
15 | * | ||
16 | * This library is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public | ||
22 | * License along with this library; if not, write to the Free | ||
23 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
24 | * MA 02110-1301 USA | ||
25 | * | ||
26 | * Alternatively, | ||
27 | * | ||
28 | * b) Redistribution and use in source and binary forms, with or | ||
29 | * without modification, are permitted provided that the following | ||
30 | * conditions are met: | ||
31 | * | ||
32 | * 1. Redistributions of source code must retain the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer. | ||
35 | * 2. Redistributions in binary form must reproduce the above | ||
36 | * copyright notice, this list of conditions and the following | ||
37 | * disclaimer in the documentation and/or other materials | ||
38 | * provided with the distribution. | ||
39 | * | ||
40 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
41 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
42 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
43 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
44 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
45 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
46 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
47 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
48 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
49 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
50 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
51 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
52 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
53 | */ | 8 | */ |
54 | 9 | ||
55 | #ifndef __ASSEMBLY__ | 10 | #ifndef __ASSEMBLY__ |
diff --git a/scripts/dtc/libfdt/fdt_addresses.c b/scripts/dtc/libfdt/fdt_addresses.c index f13a87dfa068..d8ba8ec60c6c 100644 --- a/scripts/dtc/libfdt/fdt_addresses.c +++ b/scripts/dtc/libfdt/fdt_addresses.c | |||
@@ -1,53 +1,8 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au> | 4 | * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au> |
4 | * Copyright (C) 2018 embedded brains GmbH | 5 | * Copyright (C) 2018 embedded brains GmbH |
5 | * | ||
6 | * libfdt is dual licensed: you can use it either under the terms of | ||
7 | * the GPL, or the BSD license, at your option. | ||
8 | * | ||
9 | * a) This library is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License as | ||
11 | * published by the Free Software Foundation; either version 2 of the | ||
12 | * License, or (at your option) any later version. | ||
13 | * | ||
14 | * This library is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public | ||
20 | * License along with this library; if not, write to the Free | ||
21 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
22 | * MA 02110-1301 USA | ||
23 | * | ||
24 | * Alternatively, | ||
25 | * | ||
26 | * b) Redistribution and use in source and binary forms, with or | ||
27 | * without modification, are permitted provided that the following | ||
28 | * conditions are met: | ||
29 | * | ||
30 | * 1. Redistributions of source code must retain the above | ||
31 | * copyright notice, this list of conditions and the following | ||
32 | * disclaimer. | ||
33 | * 2. Redistributions in binary form must reproduce the above | ||
34 | * copyright notice, this list of conditions and the following | ||
35 | * disclaimer in the documentation and/or other materials | ||
36 | * provided with the distribution. | ||
37 | * | ||
38 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
39 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
40 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
41 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
42 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
43 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
48 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
49 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
50 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | */ | 6 | */ |
52 | #include "libfdt_env.h" | 7 | #include "libfdt_env.h" |
53 | 8 | ||
@@ -95,3 +50,50 @@ int fdt_size_cells(const void *fdt, int nodeoffset) | |||
95 | return 1; | 50 | return 1; |
96 | return val; | 51 | return val; |
97 | } | 52 | } |
53 | |||
54 | /* This function assumes that [address|size]_cells is 1 or 2 */ | ||
55 | int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset, | ||
56 | const char *name, uint64_t addr, uint64_t size) | ||
57 | { | ||
58 | int addr_cells, size_cells, ret; | ||
59 | uint8_t data[sizeof(fdt64_t) * 2], *prop; | ||
60 | |||
61 | ret = fdt_address_cells(fdt, parent); | ||
62 | if (ret < 0) | ||
63 | return ret; | ||
64 | addr_cells = ret; | ||
65 | |||
66 | ret = fdt_size_cells(fdt, parent); | ||
67 | if (ret < 0) | ||
68 | return ret; | ||
69 | size_cells = ret; | ||
70 | |||
71 | /* check validity of address */ | ||
72 | prop = data; | ||
73 | if (addr_cells == 1) { | ||
74 | if ((addr > UINT32_MAX) || ((UINT32_MAX + 1 - addr) < size)) | ||
75 | return -FDT_ERR_BADVALUE; | ||
76 | |||
77 | fdt32_st(prop, (uint32_t)addr); | ||
78 | } else if (addr_cells == 2) { | ||
79 | fdt64_st(prop, addr); | ||
80 | } else { | ||
81 | return -FDT_ERR_BADNCELLS; | ||
82 | } | ||
83 | |||
84 | /* check validity of size */ | ||
85 | prop += addr_cells * sizeof(fdt32_t); | ||
86 | if (size_cells == 1) { | ||
87 | if (size > UINT32_MAX) | ||
88 | return -FDT_ERR_BADVALUE; | ||
89 | |||
90 | fdt32_st(prop, (uint32_t)size); | ||
91 | } else if (size_cells == 2) { | ||
92 | fdt64_st(prop, size); | ||
93 | } else { | ||
94 | return -FDT_ERR_BADNCELLS; | ||
95 | } | ||
96 | |||
97 | return fdt_appendprop(fdt, nodeoffset, name, data, | ||
98 | (addr_cells + size_cells) * sizeof(fdt32_t)); | ||
99 | } | ||
diff --git a/scripts/dtc/libfdt/fdt_empty_tree.c b/scripts/dtc/libfdt/fdt_empty_tree.c index f2ae9b77c285..49d54d44b8e7 100644 --- a/scripts/dtc/libfdt/fdt_empty_tree.c +++ b/scripts/dtc/libfdt/fdt_empty_tree.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2012 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2012 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
diff --git a/scripts/dtc/libfdt/fdt_overlay.c b/scripts/dtc/libfdt/fdt_overlay.c index 5fdab6c6371d..e97f12b1a780 100644 --- a/scripts/dtc/libfdt/fdt_overlay.c +++ b/scripts/dtc/libfdt/fdt_overlay.c | |||
@@ -1,53 +1,8 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2016 Free Electrons | 4 | * Copyright (C) 2016 Free Electrons |
4 | * Copyright (C) 2016 NextThing Co. | 5 | * Copyright (C) 2016 NextThing Co. |
5 | * | ||
6 | * libfdt is dual licensed: you can use it either under the terms of | ||
7 | * the GPL, or the BSD license, at your option. | ||
8 | * | ||
9 | * a) This library is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License as | ||
11 | * published by the Free Software Foundation; either version 2 of the | ||
12 | * License, or (at your option) any later version. | ||
13 | * | ||
14 | * This library is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public | ||
20 | * License along with this library; if not, write to the Free | ||
21 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
22 | * MA 02110-1301 USA | ||
23 | * | ||
24 | * Alternatively, | ||
25 | * | ||
26 | * b) Redistribution and use in source and binary forms, with or | ||
27 | * without modification, are permitted provided that the following | ||
28 | * conditions are met: | ||
29 | * | ||
30 | * 1. Redistributions of source code must retain the above | ||
31 | * copyright notice, this list of conditions and the following | ||
32 | * disclaimer. | ||
33 | * 2. Redistributions in binary form must reproduce the above | ||
34 | * copyright notice, this list of conditions and the following | ||
35 | * disclaimer in the documentation and/or other materials | ||
36 | * provided with the distribution. | ||
37 | * | ||
38 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
39 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
40 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
41 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
42 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
43 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
48 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
49 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
50 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | */ | 6 | */ |
52 | #include "libfdt_env.h" | 7 | #include "libfdt_env.h" |
53 | 8 | ||
@@ -93,11 +48,11 @@ static uint32_t overlay_get_target_phandle(const void *fdto, int fragment) | |||
93 | * @pathp: pointer which receives the path of the target (or NULL) | 48 | * @pathp: pointer which receives the path of the target (or NULL) |
94 | * | 49 | * |
95 | * overlay_get_target() retrieves the target offset in the base | 50 | * overlay_get_target() retrieves the target offset in the base |
96 | * device tree of a fragment, no matter how the actual targetting is | 51 | * device tree of a fragment, no matter how the actual targeting is |
97 | * done (through a phandle or a path) | 52 | * done (through a phandle or a path) |
98 | * | 53 | * |
99 | * returns: | 54 | * returns: |
100 | * the targetted node offset in the base device tree | 55 | * the targeted node offset in the base device tree |
101 | * Negative error code on error | 56 | * Negative error code on error |
102 | */ | 57 | */ |
103 | static int overlay_get_target(const void *fdt, const void *fdto, | 58 | static int overlay_get_target(const void *fdt, const void *fdto, |
@@ -863,12 +818,16 @@ static int overlay_symbol_update(void *fdt, void *fdto) | |||
863 | 818 | ||
864 | int fdt_overlay_apply(void *fdt, void *fdto) | 819 | int fdt_overlay_apply(void *fdt, void *fdto) |
865 | { | 820 | { |
866 | uint32_t delta = fdt_get_max_phandle(fdt); | 821 | uint32_t delta; |
867 | int ret; | 822 | int ret; |
868 | 823 | ||
869 | FDT_RO_PROBE(fdt); | 824 | FDT_RO_PROBE(fdt); |
870 | FDT_RO_PROBE(fdto); | 825 | FDT_RO_PROBE(fdto); |
871 | 826 | ||
827 | ret = fdt_find_max_phandle(fdt, &delta); | ||
828 | if (ret) | ||
829 | goto err; | ||
830 | |||
872 | ret = overlay_adjust_local_phandles(fdto, delta); | 831 | ret = overlay_adjust_local_phandles(fdto, delta); |
873 | if (ret) | 832 | if (ret) |
874 | goto err; | 833 | goto err; |
diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c index eafc14282892..6fd9ec170dbe 100644 --- a/scripts/dtc/libfdt/fdt_ro.c +++ b/scripts/dtc/libfdt/fdt_ro.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
@@ -144,29 +99,49 @@ static int fdt_string_eq_(const void *fdt, int stroffset, | |||
144 | return p && (slen == len) && (memcmp(p, s, len) == 0); | 99 | return p && (slen == len) && (memcmp(p, s, len) == 0); |
145 | } | 100 | } |
146 | 101 | ||
147 | uint32_t fdt_get_max_phandle(const void *fdt) | 102 | int fdt_find_max_phandle(const void *fdt, uint32_t *phandle) |
148 | { | 103 | { |
149 | uint32_t max_phandle = 0; | 104 | uint32_t max = 0; |
150 | int offset; | 105 | int offset = -1; |
151 | 106 | ||
152 | for (offset = fdt_next_node(fdt, -1, NULL);; | 107 | while (true) { |
153 | offset = fdt_next_node(fdt, offset, NULL)) { | 108 | uint32_t value; |
154 | uint32_t phandle; | ||
155 | 109 | ||
156 | if (offset == -FDT_ERR_NOTFOUND) | 110 | offset = fdt_next_node(fdt, offset, NULL); |
157 | return max_phandle; | 111 | if (offset < 0) { |
112 | if (offset == -FDT_ERR_NOTFOUND) | ||
113 | break; | ||
158 | 114 | ||
159 | if (offset < 0) | 115 | return offset; |
160 | return (uint32_t)-1; | 116 | } |
161 | 117 | ||
162 | phandle = fdt_get_phandle(fdt, offset); | 118 | value = fdt_get_phandle(fdt, offset); |
163 | if (phandle == (uint32_t)-1) | ||
164 | continue; | ||
165 | 119 | ||
166 | if (phandle > max_phandle) | 120 | if (value > max) |
167 | max_phandle = phandle; | 121 | max = value; |
168 | } | 122 | } |
169 | 123 | ||
124 | if (phandle) | ||
125 | *phandle = max; | ||
126 | |||
127 | return 0; | ||
128 | } | ||
129 | |||
130 | int fdt_generate_phandle(const void *fdt, uint32_t *phandle) | ||
131 | { | ||
132 | uint32_t max; | ||
133 | int err; | ||
134 | |||
135 | err = fdt_find_max_phandle(fdt, &max); | ||
136 | if (err < 0) | ||
137 | return err; | ||
138 | |||
139 | if (max == FDT_MAX_PHANDLE) | ||
140 | return -FDT_ERR_NOPHANDLES; | ||
141 | |||
142 | if (phandle) | ||
143 | *phandle = max + 1; | ||
144 | |||
170 | return 0; | 145 | return 0; |
171 | } | 146 | } |
172 | 147 | ||
diff --git a/scripts/dtc/libfdt/fdt_rw.c b/scripts/dtc/libfdt/fdt_rw.c index 2e49855d7cf8..8795947c00dd 100644 --- a/scripts/dtc/libfdt/fdt_rw.c +++ b/scripts/dtc/libfdt/fdt_rw.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
@@ -136,6 +91,14 @@ static int fdt_splice_struct_(void *fdt, void *p, | |||
136 | return 0; | 91 | return 0; |
137 | } | 92 | } |
138 | 93 | ||
94 | /* Must only be used to roll back in case of error */ | ||
95 | static void fdt_del_last_string_(void *fdt, const char *s) | ||
96 | { | ||
97 | int newlen = strlen(s) + 1; | ||
98 | |||
99 | fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) - newlen); | ||
100 | } | ||
101 | |||
139 | static int fdt_splice_string_(void *fdt, int newlen) | 102 | static int fdt_splice_string_(void *fdt, int newlen) |
140 | { | 103 | { |
141 | void *p = (char *)fdt | 104 | void *p = (char *)fdt |
@@ -149,7 +112,7 @@ static int fdt_splice_string_(void *fdt, int newlen) | |||
149 | return 0; | 112 | return 0; |
150 | } | 113 | } |
151 | 114 | ||
152 | static int fdt_find_add_string_(void *fdt, const char *s) | 115 | static int fdt_find_add_string_(void *fdt, const char *s, int *allocated) |
153 | { | 116 | { |
154 | char *strtab = (char *)fdt + fdt_off_dt_strings(fdt); | 117 | char *strtab = (char *)fdt + fdt_off_dt_strings(fdt); |
155 | const char *p; | 118 | const char *p; |
@@ -157,6 +120,8 @@ static int fdt_find_add_string_(void *fdt, const char *s) | |||
157 | int len = strlen(s) + 1; | 120 | int len = strlen(s) + 1; |
158 | int err; | 121 | int err; |
159 | 122 | ||
123 | *allocated = 0; | ||
124 | |||
160 | p = fdt_find_string_(strtab, fdt_size_dt_strings(fdt), s); | 125 | p = fdt_find_string_(strtab, fdt_size_dt_strings(fdt), s); |
161 | if (p) | 126 | if (p) |
162 | /* found it */ | 127 | /* found it */ |
@@ -167,6 +132,8 @@ static int fdt_find_add_string_(void *fdt, const char *s) | |||
167 | if (err) | 132 | if (err) |
168 | return err; | 133 | return err; |
169 | 134 | ||
135 | *allocated = 1; | ||
136 | |||
170 | memcpy(new, s, len); | 137 | memcpy(new, s, len); |
171 | return (new - strtab); | 138 | return (new - strtab); |
172 | } | 139 | } |
@@ -225,11 +192,12 @@ static int fdt_add_property_(void *fdt, int nodeoffset, const char *name, | |||
225 | int nextoffset; | 192 | int nextoffset; |
226 | int namestroff; | 193 | int namestroff; |
227 | int err; | 194 | int err; |
195 | int allocated; | ||
228 | 196 | ||
229 | if ((nextoffset = fdt_check_node_offset_(fdt, nodeoffset)) < 0) | 197 | if ((nextoffset = fdt_check_node_offset_(fdt, nodeoffset)) < 0) |
230 | return nextoffset; | 198 | return nextoffset; |
231 | 199 | ||
232 | namestroff = fdt_find_add_string_(fdt, name); | 200 | namestroff = fdt_find_add_string_(fdt, name, &allocated); |
233 | if (namestroff < 0) | 201 | if (namestroff < 0) |
234 | return namestroff; | 202 | return namestroff; |
235 | 203 | ||
@@ -237,8 +205,11 @@ static int fdt_add_property_(void *fdt, int nodeoffset, const char *name, | |||
237 | proplen = sizeof(**prop) + FDT_TAGALIGN(len); | 205 | proplen = sizeof(**prop) + FDT_TAGALIGN(len); |
238 | 206 | ||
239 | err = fdt_splice_struct_(fdt, *prop, 0, proplen); | 207 | err = fdt_splice_struct_(fdt, *prop, 0, proplen); |
240 | if (err) | 208 | if (err) { |
209 | if (allocated) | ||
210 | fdt_del_last_string_(fdt, name); | ||
241 | return err; | 211 | return err; |
212 | } | ||
242 | 213 | ||
243 | (*prop)->tag = cpu_to_fdt32(FDT_PROP); | 214 | (*prop)->tag = cpu_to_fdt32(FDT_PROP); |
244 | (*prop)->nameoff = cpu_to_fdt32(namestroff); | 215 | (*prop)->nameoff = cpu_to_fdt32(namestroff); |
diff --git a/scripts/dtc/libfdt/fdt_strerror.c b/scripts/dtc/libfdt/fdt_strerror.c index 9677a1887e57..768db66eada5 100644 --- a/scripts/dtc/libfdt/fdt_strerror.c +++ b/scripts/dtc/libfdt/fdt_strerror.c | |||
@@ -1,51 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 5 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
50 | */ | 6 | */ |
51 | #include "libfdt_env.h" | 7 | #include "libfdt_env.h" |
@@ -82,6 +38,7 @@ static struct fdt_errtabent fdt_errtable[] = { | |||
82 | FDT_ERRTABENT(FDT_ERR_BADVALUE), | 38 | FDT_ERRTABENT(FDT_ERR_BADVALUE), |
83 | FDT_ERRTABENT(FDT_ERR_BADOVERLAY), | 39 | FDT_ERRTABENT(FDT_ERR_BADOVERLAY), |
84 | FDT_ERRTABENT(FDT_ERR_NOPHANDLES), | 40 | FDT_ERRTABENT(FDT_ERR_NOPHANDLES), |
41 | FDT_ERRTABENT(FDT_ERR_BADFLAGS), | ||
85 | }; | 42 | }; |
86 | #define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0])) | 43 | #define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0])) |
87 | 44 | ||
diff --git a/scripts/dtc/libfdt/fdt_sw.c b/scripts/dtc/libfdt/fdt_sw.c index 9fa4a94d83c3..76bea22f734f 100644 --- a/scripts/dtc/libfdt/fdt_sw.c +++ b/scripts/dtc/libfdt/fdt_sw.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
@@ -121,6 +76,12 @@ static int fdt_sw_probe_struct_(void *fdt) | |||
121 | return err; \ | 76 | return err; \ |
122 | } | 77 | } |
123 | 78 | ||
79 | static inline uint32_t sw_flags(void *fdt) | ||
80 | { | ||
81 | /* assert: (fdt_magic(fdt) == FDT_SW_MAGIC) */ | ||
82 | return fdt_last_comp_version(fdt); | ||
83 | } | ||
84 | |||
124 | /* 'complete' state: Enter this state after fdt_finish() | 85 | /* 'complete' state: Enter this state after fdt_finish() |
125 | * | 86 | * |
126 | * Allowed functions: none | 87 | * Allowed functions: none |
@@ -141,7 +102,7 @@ static void *fdt_grab_space_(void *fdt, size_t len) | |||
141 | return fdt_offset_ptr_w_(fdt, offset); | 102 | return fdt_offset_ptr_w_(fdt, offset); |
142 | } | 103 | } |
143 | 104 | ||
144 | int fdt_create(void *buf, int bufsize) | 105 | int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags) |
145 | { | 106 | { |
146 | const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header), | 107 | const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header), |
147 | sizeof(struct fdt_reserve_entry)); | 108 | sizeof(struct fdt_reserve_entry)); |
@@ -150,11 +111,22 @@ int fdt_create(void *buf, int bufsize) | |||
150 | if (bufsize < hdrsize) | 111 | if (bufsize < hdrsize) |
151 | return -FDT_ERR_NOSPACE; | 112 | return -FDT_ERR_NOSPACE; |
152 | 113 | ||
114 | if (flags & ~FDT_CREATE_FLAGS_ALL) | ||
115 | return -FDT_ERR_BADFLAGS; | ||
116 | |||
153 | memset(buf, 0, bufsize); | 117 | memset(buf, 0, bufsize); |
154 | 118 | ||
119 | /* | ||
120 | * magic and last_comp_version keep intermediate state during the fdt | ||
121 | * creation process, which is replaced with the proper FDT format by | ||
122 | * fdt_finish(). | ||
123 | * | ||
124 | * flags should be accessed with sw_flags(). | ||
125 | */ | ||
155 | fdt_set_magic(fdt, FDT_SW_MAGIC); | 126 | fdt_set_magic(fdt, FDT_SW_MAGIC); |
156 | fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION); | 127 | fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION); |
157 | fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION); | 128 | fdt_set_last_comp_version(fdt, flags); |
129 | |||
158 | fdt_set_totalsize(fdt, bufsize); | 130 | fdt_set_totalsize(fdt, bufsize); |
159 | 131 | ||
160 | fdt_set_off_mem_rsvmap(fdt, hdrsize); | 132 | fdt_set_off_mem_rsvmap(fdt, hdrsize); |
@@ -164,6 +136,11 @@ int fdt_create(void *buf, int bufsize) | |||
164 | return 0; | 136 | return 0; |
165 | } | 137 | } |
166 | 138 | ||
139 | int fdt_create(void *buf, int bufsize) | ||
140 | { | ||
141 | return fdt_create_with_flags(buf, bufsize, 0); | ||
142 | } | ||
143 | |||
167 | int fdt_resize(void *fdt, void *buf, int bufsize) | 144 | int fdt_resize(void *fdt, void *buf, int bufsize) |
168 | { | 145 | { |
169 | size_t headsize, tailsize; | 146 | size_t headsize, tailsize; |
@@ -262,19 +239,13 @@ int fdt_end_node(void *fdt) | |||
262 | return 0; | 239 | return 0; |
263 | } | 240 | } |
264 | 241 | ||
265 | static int fdt_find_add_string_(void *fdt, const char *s) | 242 | static int fdt_add_string_(void *fdt, const char *s) |
266 | { | 243 | { |
267 | char *strtab = (char *)fdt + fdt_totalsize(fdt); | 244 | char *strtab = (char *)fdt + fdt_totalsize(fdt); |
268 | const char *p; | ||
269 | int strtabsize = fdt_size_dt_strings(fdt); | 245 | int strtabsize = fdt_size_dt_strings(fdt); |
270 | int len = strlen(s) + 1; | 246 | int len = strlen(s) + 1; |
271 | int struct_top, offset; | 247 | int struct_top, offset; |
272 | 248 | ||
273 | p = fdt_find_string_(strtab - strtabsize, strtabsize, s); | ||
274 | if (p) | ||
275 | return p - strtab; | ||
276 | |||
277 | /* Add it */ | ||
278 | offset = -strtabsize - len; | 249 | offset = -strtabsize - len; |
279 | struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt); | 250 | struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt); |
280 | if (fdt_totalsize(fdt) + offset < struct_top) | 251 | if (fdt_totalsize(fdt) + offset < struct_top) |
@@ -285,20 +256,56 @@ static int fdt_find_add_string_(void *fdt, const char *s) | |||
285 | return offset; | 256 | return offset; |
286 | } | 257 | } |
287 | 258 | ||
259 | /* Must only be used to roll back in case of error */ | ||
260 | static void fdt_del_last_string_(void *fdt, const char *s) | ||
261 | { | ||
262 | int strtabsize = fdt_size_dt_strings(fdt); | ||
263 | int len = strlen(s) + 1; | ||
264 | |||
265 | fdt_set_size_dt_strings(fdt, strtabsize - len); | ||
266 | } | ||
267 | |||
268 | static int fdt_find_add_string_(void *fdt, const char *s, int *allocated) | ||
269 | { | ||
270 | char *strtab = (char *)fdt + fdt_totalsize(fdt); | ||
271 | int strtabsize = fdt_size_dt_strings(fdt); | ||
272 | const char *p; | ||
273 | |||
274 | *allocated = 0; | ||
275 | |||
276 | p = fdt_find_string_(strtab - strtabsize, strtabsize, s); | ||
277 | if (p) | ||
278 | return p - strtab; | ||
279 | |||
280 | *allocated = 1; | ||
281 | |||
282 | return fdt_add_string_(fdt, s); | ||
283 | } | ||
284 | |||
288 | int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp) | 285 | int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp) |
289 | { | 286 | { |
290 | struct fdt_property *prop; | 287 | struct fdt_property *prop; |
291 | int nameoff; | 288 | int nameoff; |
289 | int allocated; | ||
292 | 290 | ||
293 | FDT_SW_PROBE_STRUCT(fdt); | 291 | FDT_SW_PROBE_STRUCT(fdt); |
294 | 292 | ||
295 | nameoff = fdt_find_add_string_(fdt, name); | 293 | /* String de-duplication can be slow, _NO_NAME_DEDUP skips it */ |
294 | if (sw_flags(fdt) & FDT_CREATE_FLAG_NO_NAME_DEDUP) { | ||
295 | allocated = 1; | ||
296 | nameoff = fdt_add_string_(fdt, name); | ||
297 | } else { | ||
298 | nameoff = fdt_find_add_string_(fdt, name, &allocated); | ||
299 | } | ||
296 | if (nameoff == 0) | 300 | if (nameoff == 0) |
297 | return -FDT_ERR_NOSPACE; | 301 | return -FDT_ERR_NOSPACE; |
298 | 302 | ||
299 | prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len)); | 303 | prop = fdt_grab_space_(fdt, sizeof(*prop) + FDT_TAGALIGN(len)); |
300 | if (! prop) | 304 | if (! prop) { |
305 | if (allocated) | ||
306 | fdt_del_last_string_(fdt, name); | ||
301 | return -FDT_ERR_NOSPACE; | 307 | return -FDT_ERR_NOSPACE; |
308 | } | ||
302 | 309 | ||
303 | prop->tag = cpu_to_fdt32(FDT_PROP); | 310 | prop->tag = cpu_to_fdt32(FDT_PROP); |
304 | prop->nameoff = cpu_to_fdt32(nameoff); | 311 | prop->nameoff = cpu_to_fdt32(nameoff); |
@@ -360,6 +367,10 @@ int fdt_finish(void *fdt) | |||
360 | 367 | ||
361 | /* Finally, adjust the header */ | 368 | /* Finally, adjust the header */ |
362 | fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt)); | 369 | fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt)); |
370 | |||
371 | /* And fix up fields that were keeping intermediate state. */ | ||
372 | fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION); | ||
363 | fdt_set_magic(fdt, FDT_MAGIC); | 373 | fdt_set_magic(fdt, FDT_MAGIC); |
374 | |||
364 | return 0; | 375 | return 0; |
365 | } | 376 | } |
diff --git a/scripts/dtc/libfdt/fdt_wip.c b/scripts/dtc/libfdt/fdt_wip.c index 534c1cbbb2f3..f64139e0b3dc 100644 --- a/scripts/dtc/libfdt/fdt_wip.c +++ b/scripts/dtc/libfdt/fdt_wip.c | |||
@@ -1,52 +1,7 @@ | |||
1 | // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) | ||
1 | /* | 2 | /* |
2 | * libfdt - Flat Device Tree manipulation | 3 | * libfdt - Flat Device Tree manipulation |
3 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 4 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
4 | * | ||
5 | * libfdt is dual licensed: you can use it either under the terms of | ||
6 | * the GPL, or the BSD license, at your option. | ||
7 | * | ||
8 | * a) This library is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This library is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public | ||
19 | * License along with this library; if not, write to the Free | ||
20 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
21 | * MA 02110-1301 USA | ||
22 | * | ||
23 | * Alternatively, | ||
24 | * | ||
25 | * b) Redistribution and use in source and binary forms, with or | ||
26 | * without modification, are permitted provided that the following | ||
27 | * conditions are met: | ||
28 | * | ||
29 | * 1. Redistributions of source code must retain the above | ||
30 | * copyright notice, this list of conditions and the following | ||
31 | * disclaimer. | ||
32 | * 2. Redistributions in binary form must reproduce the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer in the documentation and/or other materials | ||
35 | * provided with the distribution. | ||
36 | * | ||
37 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
38 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
39 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
40 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
41 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
42 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
43 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
44 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
45 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
46 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
47 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
48 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
49 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
50 | */ | 5 | */ |
51 | #include "libfdt_env.h" | 6 | #include "libfdt_env.h" |
52 | 7 | ||
diff --git a/scripts/dtc/libfdt/libfdt.h b/scripts/dtc/libfdt/libfdt.h index 627da2e079c9..7b5ffd13a887 100644 --- a/scripts/dtc/libfdt/libfdt.h +++ b/scripts/dtc/libfdt/libfdt.h | |||
@@ -1,54 +1,9 @@ | |||
1 | /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ | ||
1 | #ifndef LIBFDT_H | 2 | #ifndef LIBFDT_H |
2 | #define LIBFDT_H | 3 | #define LIBFDT_H |
3 | /* | 4 | /* |
4 | * libfdt - Flat Device Tree manipulation | 5 | * libfdt - Flat Device Tree manipulation |
5 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 6 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
6 | * | ||
7 | * libfdt is dual licensed: you can use it either under the terms of | ||
8 | * the GPL, or the BSD license, at your option. | ||
9 | * | ||
10 | * a) This library is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License as | ||
12 | * published by the Free Software Foundation; either version 2 of the | ||
13 | * License, or (at your option) any later version. | ||
14 | * | ||
15 | * This library is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public | ||
21 | * License along with this library; if not, write to the Free | ||
22 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
23 | * MA 02110-1301 USA | ||
24 | * | ||
25 | * Alternatively, | ||
26 | * | ||
27 | * b) Redistribution and use in source and binary forms, with or | ||
28 | * without modification, are permitted provided that the following | ||
29 | * conditions are met: | ||
30 | * | ||
31 | * 1. Redistributions of source code must retain the above | ||
32 | * copyright notice, this list of conditions and the following | ||
33 | * disclaimer. | ||
34 | * 2. Redistributions in binary form must reproduce the above | ||
35 | * copyright notice, this list of conditions and the following | ||
36 | * disclaimer in the documentation and/or other materials | ||
37 | * provided with the distribution. | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
40 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
41 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
42 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
43 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
44 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
45 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
46 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
47 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
49 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
50 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
51 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
52 | */ | 7 | */ |
53 | 8 | ||
54 | #include "libfdt_env.h" | 9 | #include "libfdt_env.h" |
@@ -138,7 +93,15 @@ | |||
138 | /* FDT_ERR_NOPHANDLES: The device tree doesn't have any | 93 | /* FDT_ERR_NOPHANDLES: The device tree doesn't have any |
139 | * phandle available anymore without causing an overflow */ | 94 | * phandle available anymore without causing an overflow */ |
140 | 95 | ||
141 | #define FDT_ERR_MAX 17 | 96 | #define FDT_ERR_BADFLAGS 18 |
97 | /* FDT_ERR_BADFLAGS: The function was passed a flags field that | ||
98 | * contains invalid flags or an invalid combination of flags. */ | ||
99 | |||
100 | #define FDT_ERR_MAX 18 | ||
101 | |||
102 | /* constants */ | ||
103 | #define FDT_MAX_PHANDLE 0xfffffffe | ||
104 | /* Valid values for phandles range from 1 to 2^32-2. */ | ||
142 | 105 | ||
143 | /**********************************************************************/ | 106 | /**********************************************************************/ |
144 | /* Low-level functions (you probably don't need these) */ | 107 | /* Low-level functions (you probably don't need these) */ |
@@ -171,6 +134,16 @@ static inline uint32_t fdt32_ld(const fdt32_t *p) | |||
171 | | bp[3]; | 134 | | bp[3]; |
172 | } | 135 | } |
173 | 136 | ||
137 | static inline void fdt32_st(void *property, uint32_t value) | ||
138 | { | ||
139 | uint8_t *bp = property; | ||
140 | |||
141 | bp[0] = value >> 24; | ||
142 | bp[1] = (value >> 16) & 0xff; | ||
143 | bp[2] = (value >> 8) & 0xff; | ||
144 | bp[3] = value & 0xff; | ||
145 | } | ||
146 | |||
174 | static inline uint64_t fdt64_ld(const fdt64_t *p) | 147 | static inline uint64_t fdt64_ld(const fdt64_t *p) |
175 | { | 148 | { |
176 | const uint8_t *bp = (const uint8_t *)p; | 149 | const uint8_t *bp = (const uint8_t *)p; |
@@ -185,6 +158,20 @@ static inline uint64_t fdt64_ld(const fdt64_t *p) | |||
185 | | bp[7]; | 158 | | bp[7]; |
186 | } | 159 | } |
187 | 160 | ||
161 | static inline void fdt64_st(void *property, uint64_t value) | ||
162 | { | ||
163 | uint8_t *bp = property; | ||
164 | |||
165 | bp[0] = value >> 56; | ||
166 | bp[1] = (value >> 48) & 0xff; | ||
167 | bp[2] = (value >> 40) & 0xff; | ||
168 | bp[3] = (value >> 32) & 0xff; | ||
169 | bp[4] = (value >> 24) & 0xff; | ||
170 | bp[5] = (value >> 16) & 0xff; | ||
171 | bp[6] = (value >> 8) & 0xff; | ||
172 | bp[7] = value & 0xff; | ||
173 | } | ||
174 | |||
188 | /**********************************************************************/ | 175 | /**********************************************************************/ |
189 | /* Traversal functions */ | 176 | /* Traversal functions */ |
190 | /**********************************************************************/ | 177 | /**********************************************************************/ |
@@ -227,7 +214,7 @@ int fdt_next_subnode(const void *fdt, int offset); | |||
227 | * ... | 214 | * ... |
228 | * } | 215 | * } |
229 | * | 216 | * |
230 | * if ((node < 0) && (node != -FDT_ERR_NOT_FOUND)) { | 217 | * if ((node < 0) && (node != -FDT_ERR_NOTFOUND)) { |
231 | * Error handling | 218 | * Error handling |
232 | * } | 219 | * } |
233 | * | 220 | * |
@@ -362,6 +349,20 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp); | |||
362 | const char *fdt_string(const void *fdt, int stroffset); | 349 | const char *fdt_string(const void *fdt, int stroffset); |
363 | 350 | ||
364 | /** | 351 | /** |
352 | * fdt_find_max_phandle - find and return the highest phandle in a tree | ||
353 | * @fdt: pointer to the device tree blob | ||
354 | * @phandle: return location for the highest phandle value found in the tree | ||
355 | * | ||
356 | * fdt_find_max_phandle() finds the highest phandle value in the given device | ||
357 | * tree. The value returned in @phandle is only valid if the function returns | ||
358 | * success. | ||
359 | * | ||
360 | * returns: | ||
361 | * 0 on success or a negative error code on failure | ||
362 | */ | ||
363 | int fdt_find_max_phandle(const void *fdt, uint32_t *phandle); | ||
364 | |||
365 | /** | ||
365 | * fdt_get_max_phandle - retrieves the highest phandle in a tree | 366 | * fdt_get_max_phandle - retrieves the highest phandle in a tree |
366 | * @fdt: pointer to the device tree blob | 367 | * @fdt: pointer to the device tree blob |
367 | * | 368 | * |
@@ -369,12 +370,39 @@ const char *fdt_string(const void *fdt, int stroffset); | |||
369 | * device tree. This will ignore badly formatted phandles, or phandles | 370 | * device tree. This will ignore badly formatted phandles, or phandles |
370 | * with a value of 0 or -1. | 371 | * with a value of 0 or -1. |
371 | * | 372 | * |
373 | * This function is deprecated in favour of fdt_find_max_phandle(). | ||
374 | * | ||
372 | * returns: | 375 | * returns: |
373 | * the highest phandle on success | 376 | * the highest phandle on success |
374 | * 0, if no phandle was found in the device tree | 377 | * 0, if no phandle was found in the device tree |
375 | * -1, if an error occurred | 378 | * -1, if an error occurred |
376 | */ | 379 | */ |
377 | uint32_t fdt_get_max_phandle(const void *fdt); | 380 | static inline uint32_t fdt_get_max_phandle(const void *fdt) |
381 | { | ||
382 | uint32_t phandle; | ||
383 | int err; | ||
384 | |||
385 | err = fdt_find_max_phandle(fdt, &phandle); | ||
386 | if (err < 0) | ||
387 | return (uint32_t)-1; | ||
388 | |||
389 | return phandle; | ||
390 | } | ||
391 | |||
392 | /** | ||
393 | * fdt_generate_phandle - return a new, unused phandle for a device tree blob | ||
394 | * @fdt: pointer to the device tree blob | ||
395 | * @phandle: return location for the new phandle | ||
396 | * | ||
397 | * Walks the device tree blob and looks for the highest phandle value. On | ||
398 | * success, the new, unused phandle value (one higher than the previously | ||
399 | * highest phandle value in the device tree blob) will be returned in the | ||
400 | * @phandle parameter. | ||
401 | * | ||
402 | * Returns: | ||
403 | * 0 on success or a negative error-code on failure | ||
404 | */ | ||
405 | int fdt_generate_phandle(const void *fdt, uint32_t *phandle); | ||
378 | 406 | ||
379 | /** | 407 | /** |
380 | * fdt_num_mem_rsv - retrieve the number of memory reserve map entries | 408 | * fdt_num_mem_rsv - retrieve the number of memory reserve map entries |
@@ -566,7 +594,7 @@ int fdt_next_property_offset(const void *fdt, int offset); | |||
566 | * ... | 594 | * ... |
567 | * } | 595 | * } |
568 | * | 596 | * |
569 | * if ((property < 0) && (property != -FDT_ERR_NOT_FOUND)) { | 597 | * if ((property < 0) && (property != -FDT_ERR_NOTFOUND)) { |
570 | * Error handling | 598 | * Error handling |
571 | * } | 599 | * } |
572 | * | 600 | * |
@@ -669,7 +697,7 @@ static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset, | |||
669 | /** | 697 | /** |
670 | * fdt_getprop_by_offset - retrieve the value of a property at a given offset | 698 | * fdt_getprop_by_offset - retrieve the value of a property at a given offset |
671 | * @fdt: pointer to the device tree blob | 699 | * @fdt: pointer to the device tree blob |
672 | * @ffset: offset of the property to read | 700 | * @offset: offset of the property to read |
673 | * @namep: pointer to a string variable (will be overwritten) or NULL | 701 | * @namep: pointer to a string variable (will be overwritten) or NULL |
674 | * @lenp: pointer to an integer variable (will be overwritten) or NULL | 702 | * @lenp: pointer to an integer variable (will be overwritten) or NULL |
675 | * | 703 | * |
@@ -1360,7 +1388,45 @@ int fdt_nop_node(void *fdt, int nodeoffset); | |||
1360 | /* Sequential write functions */ | 1388 | /* Sequential write functions */ |
1361 | /**********************************************************************/ | 1389 | /**********************************************************************/ |
1362 | 1390 | ||
1391 | /* fdt_create_with_flags flags */ | ||
1392 | #define FDT_CREATE_FLAG_NO_NAME_DEDUP 0x1 | ||
1393 | /* FDT_CREATE_FLAG_NO_NAME_DEDUP: Do not try to de-duplicate property | ||
1394 | * names in the fdt. This can result in faster creation times, but | ||
1395 | * a larger fdt. */ | ||
1396 | |||
1397 | #define FDT_CREATE_FLAGS_ALL (FDT_CREATE_FLAG_NO_NAME_DEDUP) | ||
1398 | |||
1399 | /** | ||
1400 | * fdt_create_with_flags - begin creation of a new fdt | ||
1401 | * @fdt: pointer to memory allocated where fdt will be created | ||
1402 | * @bufsize: size of the memory space at fdt | ||
1403 | * @flags: a valid combination of FDT_CREATE_FLAG_ flags, or 0. | ||
1404 | * | ||
1405 | * fdt_create_with_flags() begins the process of creating a new fdt with | ||
1406 | * the sequential write interface. | ||
1407 | * | ||
1408 | * fdt creation process must end with fdt_finished() to produce a valid fdt. | ||
1409 | * | ||
1410 | * returns: | ||
1411 | * 0, on success | ||
1412 | * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt | ||
1413 | * -FDT_ERR_BADFLAGS, flags is not valid | ||
1414 | */ | ||
1415 | int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags); | ||
1416 | |||
1417 | /** | ||
1418 | * fdt_create - begin creation of a new fdt | ||
1419 | * @fdt: pointer to memory allocated where fdt will be created | ||
1420 | * @bufsize: size of the memory space at fdt | ||
1421 | * | ||
1422 | * fdt_create() is equivalent to fdt_create_with_flags() with flags=0. | ||
1423 | * | ||
1424 | * returns: | ||
1425 | * 0, on success | ||
1426 | * -FDT_ERR_NOSPACE, bufsize is insufficient for a minimal fdt | ||
1427 | */ | ||
1363 | int fdt_create(void *buf, int bufsize); | 1428 | int fdt_create(void *buf, int bufsize); |
1429 | |||
1364 | int fdt_resize(void *fdt, void *buf, int bufsize); | 1430 | int fdt_resize(void *fdt, void *buf, int bufsize); |
1365 | int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size); | 1431 | int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size); |
1366 | int fdt_finish_reservemap(void *fdt); | 1432 | int fdt_finish_reservemap(void *fdt); |
@@ -1832,6 +1898,43 @@ static inline int fdt_appendprop_cell(void *fdt, int nodeoffset, | |||
1832 | fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) | 1898 | fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) |
1833 | 1899 | ||
1834 | /** | 1900 | /** |
1901 | * fdt_appendprop_addrrange - append a address range property | ||
1902 | * @fdt: pointer to the device tree blob | ||
1903 | * @parent: offset of the parent node | ||
1904 | * @nodeoffset: offset of the node to add a property at | ||
1905 | * @name: name of property | ||
1906 | * @addr: start address of a given range | ||
1907 | * @size: size of a given range | ||
1908 | * | ||
1909 | * fdt_appendprop_addrrange() appends an address range value (start | ||
1910 | * address and size) to the value of the named property in the given | ||
1911 | * node, or creates a new property with that value if it does not | ||
1912 | * already exist. | ||
1913 | * If "name" is not specified, a default "reg" is used. | ||
1914 | * Cell sizes are determined by parent's #address-cells and #size-cells. | ||
1915 | * | ||
1916 | * This function may insert data into the blob, and will therefore | ||
1917 | * change the offsets of some existing nodes. | ||
1918 | * | ||
1919 | * returns: | ||
1920 | * 0, on success | ||
1921 | * -FDT_ERR_BADLAYOUT, | ||
1922 | * -FDT_ERR_BADMAGIC, | ||
1923 | * -FDT_ERR_BADNCELLS, if the node has a badly formatted or invalid | ||
1924 | * #address-cells property | ||
1925 | * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag | ||
1926 | * -FDT_ERR_BADSTATE, | ||
1927 | * -FDT_ERR_BADSTRUCTURE, | ||
1928 | * -FDT_ERR_BADVERSION, | ||
1929 | * -FDT_ERR_BADVALUE, addr or size doesn't fit to respective cells size | ||
1930 | * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to | ||
1931 | * contain a new property | ||
1932 | * -FDT_ERR_TRUNCATED, standard meanings | ||
1933 | */ | ||
1934 | int fdt_appendprop_addrrange(void *fdt, int parent, int nodeoffset, | ||
1935 | const char *name, uint64_t addr, uint64_t size); | ||
1936 | |||
1937 | /** | ||
1835 | * fdt_delprop - delete a property | 1938 | * fdt_delprop - delete a property |
1836 | * @fdt: pointer to the device tree blob | 1939 | * @fdt: pointer to the device tree blob |
1837 | * @nodeoffset: offset of the node whose property to nop | 1940 | * @nodeoffset: offset of the node whose property to nop |
diff --git a/scripts/dtc/libfdt/libfdt_env.h b/scripts/dtc/libfdt/libfdt_env.h index eb2053845c9c..73b6d40450ac 100644 --- a/scripts/dtc/libfdt/libfdt_env.h +++ b/scripts/dtc/libfdt/libfdt_env.h | |||
@@ -1,57 +1,13 @@ | |||
1 | /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ | ||
1 | #ifndef LIBFDT_ENV_H | 2 | #ifndef LIBFDT_ENV_H |
2 | #define LIBFDT_ENV_H | 3 | #define LIBFDT_ENV_H |
3 | /* | 4 | /* |
4 | * libfdt - Flat Device Tree manipulation | 5 | * libfdt - Flat Device Tree manipulation |
5 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 6 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
6 | * Copyright 2012 Kim Phillips, Freescale Semiconductor. | 7 | * Copyright 2012 Kim Phillips, Freescale Semiconductor. |
7 | * | ||
8 | * libfdt is dual licensed: you can use it either under the terms of | ||
9 | * the GPL, or the BSD license, at your option. | ||
10 | * | ||
11 | * a) This library is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License as | ||
13 | * published by the Free Software Foundation; either version 2 of the | ||
14 | * License, or (at your option) any later version. | ||
15 | * | ||
16 | * This library is distributed in the hope that it will be useful, | ||
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
19 | * GNU General Public License for more details. | ||
20 | * | ||
21 | * You should have received a copy of the GNU General Public | ||
22 | * License along with this library; if not, write to the Free | ||
23 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
24 | * MA 02110-1301 USA | ||
25 | * | ||
26 | * Alternatively, | ||
27 | * | ||
28 | * b) Redistribution and use in source and binary forms, with or | ||
29 | * without modification, are permitted provided that the following | ||
30 | * conditions are met: | ||
31 | * | ||
32 | * 1. Redistributions of source code must retain the above | ||
33 | * copyright notice, this list of conditions and the following | ||
34 | * disclaimer. | ||
35 | * 2. Redistributions in binary form must reproduce the above | ||
36 | * copyright notice, this list of conditions and the following | ||
37 | * disclaimer in the documentation and/or other materials | ||
38 | * provided with the distribution. | ||
39 | * | ||
40 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
41 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
42 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
43 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
44 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
45 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
46 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
47 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
48 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
49 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
50 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
51 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
52 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
53 | */ | 8 | */ |
54 | 9 | ||
10 | #include <stdbool.h> | ||
55 | #include <stddef.h> | 11 | #include <stddef.h> |
56 | #include <stdint.h> | 12 | #include <stdint.h> |
57 | #include <stdlib.h> | 13 | #include <stdlib.h> |
diff --git a/scripts/dtc/libfdt/libfdt_internal.h b/scripts/dtc/libfdt/libfdt_internal.h index 4109f890ae60..7830e550c37a 100644 --- a/scripts/dtc/libfdt/libfdt_internal.h +++ b/scripts/dtc/libfdt/libfdt_internal.h | |||
@@ -1,54 +1,9 @@ | |||
1 | /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ | ||
1 | #ifndef LIBFDT_INTERNAL_H | 2 | #ifndef LIBFDT_INTERNAL_H |
2 | #define LIBFDT_INTERNAL_H | 3 | #define LIBFDT_INTERNAL_H |
3 | /* | 4 | /* |
4 | * libfdt - Flat Device Tree manipulation | 5 | * libfdt - Flat Device Tree manipulation |
5 | * Copyright (C) 2006 David Gibson, IBM Corporation. | 6 | * Copyright (C) 2006 David Gibson, IBM Corporation. |
6 | * | ||
7 | * libfdt is dual licensed: you can use it either under the terms of | ||
8 | * the GPL, or the BSD license, at your option. | ||
9 | * | ||
10 | * a) This library is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License as | ||
12 | * published by the Free Software Foundation; either version 2 of the | ||
13 | * License, or (at your option) any later version. | ||
14 | * | ||
15 | * This library is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public | ||
21 | * License along with this library; if not, write to the Free | ||
22 | * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, | ||
23 | * MA 02110-1301 USA | ||
24 | * | ||
25 | * Alternatively, | ||
26 | * | ||
27 | * b) Redistribution and use in source and binary forms, with or | ||
28 | * without modification, are permitted provided that the following | ||
29 | * conditions are met: | ||
30 | * | ||
31 | * 1. Redistributions of source code must retain the above | ||
32 | * copyright notice, this list of conditions and the following | ||
33 | * disclaimer. | ||
34 | * 2. Redistributions in binary form must reproduce the above | ||
35 | * copyright notice, this list of conditions and the following | ||
36 | * disclaimer in the documentation and/or other materials | ||
37 | * provided with the distribution. | ||
38 | * | ||
39 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | ||
40 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
41 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
42 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
43 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
44 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
45 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
46 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
47 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
48 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||
49 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
50 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||
51 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
52 | */ | 7 | */ |
53 | #include <fdt.h> | 8 | #include <fdt.h> |
54 | 9 | ||
diff --git a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c index 7a2e6446a17b..0c039993953a 100644 --- a/scripts/dtc/livetree.c +++ b/scripts/dtc/livetree.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
@@ -249,6 +234,7 @@ struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref) | |||
249 | char *name; | 234 | char *name; |
250 | 235 | ||
251 | if (ref[0] == '/') { | 236 | if (ref[0] == '/') { |
237 | d = data_add_marker(d, TYPE_STRING, ref); | ||
252 | d = data_append_data(d, ref, strlen(ref) + 1); | 238 | d = data_append_data(d, ref, strlen(ref) + 1); |
253 | 239 | ||
254 | p = build_property("target-path", d, NULL); | 240 | p = build_property("target-path", d, NULL); |
@@ -350,17 +336,20 @@ void delete_node(struct node *node) | |||
350 | } | 336 | } |
351 | 337 | ||
352 | void append_to_property(struct node *node, | 338 | void append_to_property(struct node *node, |
353 | char *name, const void *data, int len) | 339 | char *name, const void *data, int len, |
340 | enum markertype type) | ||
354 | { | 341 | { |
355 | struct data d; | 342 | struct data d; |
356 | struct property *p; | 343 | struct property *p; |
357 | 344 | ||
358 | p = get_property(node, name); | 345 | p = get_property(node, name); |
359 | if (p) { | 346 | if (p) { |
360 | d = data_append_data(p->val, data, len); | 347 | d = data_add_marker(p->val, type, name); |
348 | d = data_append_data(d, data, len); | ||
361 | p->val = d; | 349 | p->val = d; |
362 | } else { | 350 | } else { |
363 | d = data_append_data(empty_data, data, len); | 351 | d = data_add_marker(empty_data, type, name); |
352 | d = data_append_data(d, data, len); | ||
364 | p = build_property(name, d, NULL); | 353 | p = build_property(name, d, NULL); |
365 | add_property(node, p); | 354 | add_property(node, p); |
366 | } | 355 | } |
@@ -858,8 +847,8 @@ static void generate_label_tree_internal(struct dt_info *dti, | |||
858 | 847 | ||
859 | /* insert it */ | 848 | /* insert it */ |
860 | p = build_property(l->label, | 849 | p = build_property(l->label, |
861 | data_copy_mem(node->fullpath, | 850 | data_copy_escape_string(node->fullpath, |
862 | strlen(node->fullpath) + 1), | 851 | strlen(node->fullpath)), |
863 | NULL); | 852 | NULL); |
864 | add_property(an, p); | 853 | add_property(an, p); |
865 | } | 854 | } |
@@ -910,7 +899,7 @@ static void add_fixup_entry(struct dt_info *dti, struct node *fn, | |||
910 | 899 | ||
911 | xasprintf(&entry, "%s:%s:%u", | 900 | xasprintf(&entry, "%s:%s:%u", |
912 | node->fullpath, prop->name, m->offset); | 901 | node->fullpath, prop->name, m->offset); |
913 | append_to_property(fn, m->ref, entry, strlen(entry) + 1); | 902 | append_to_property(fn, m->ref, entry, strlen(entry) + 1, TYPE_STRING); |
914 | 903 | ||
915 | free(entry); | 904 | free(entry); |
916 | } | 905 | } |
@@ -970,7 +959,7 @@ static void add_local_fixup_entry(struct dt_info *dti, | |||
970 | char **compp; | 959 | char **compp; |
971 | int i, depth; | 960 | int i, depth; |
972 | 961 | ||
973 | /* walk back retreiving depth */ | 962 | /* walk back retrieving depth */ |
974 | depth = 0; | 963 | depth = 0; |
975 | for (wn = node; wn; wn = wn->parent) | 964 | for (wn = node; wn; wn = wn->parent) |
976 | depth++; | 965 | depth++; |
@@ -993,7 +982,7 @@ static void add_local_fixup_entry(struct dt_info *dti, | |||
993 | free(compp); | 982 | free(compp); |
994 | 983 | ||
995 | value_32 = cpu_to_fdt32(m->offset); | 984 | value_32 = cpu_to_fdt32(m->offset); |
996 | append_to_property(wn, prop->name, &value_32, sizeof(value_32)); | 985 | append_to_property(wn, prop->name, &value_32, sizeof(value_32), TYPE_UINT32); |
997 | } | 986 | } |
998 | 987 | ||
999 | static void generate_local_fixups_tree_internal(struct dt_info *dti, | 988 | static void generate_local_fixups_tree_internal(struct dt_info *dti, |
diff --git a/scripts/dtc/srcpos.c b/scripts/dtc/srcpos.c index 41f83700ee91..f5205fb9c1ff 100644 --- a/scripts/dtc/srcpos.c +++ b/scripts/dtc/srcpos.c | |||
@@ -1,20 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. | 3 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. |
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License as | ||
6 | * published by the Free Software Foundation; either version 2 of the | ||
7 | * License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | * General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
17 | * USA | ||
18 | */ | 4 | */ |
19 | 5 | ||
20 | #define _GNU_SOURCE | 6 | #define _GNU_SOURCE |
diff --git a/scripts/dtc/srcpos.h b/scripts/dtc/srcpos.h index 6326a952c40e..4318d7ad34d9 100644 --- a/scripts/dtc/srcpos.h +++ b/scripts/dtc/srcpos.h | |||
@@ -1,20 +1,6 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
1 | /* | 2 | /* |
2 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. | 3 | * Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc. |
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License as | ||
6 | * published by the Free Software Foundation; either version 2 of the | ||
7 | * License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
12 | * General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
17 | * USA | ||
18 | */ | 4 | */ |
19 | 5 | ||
20 | #ifndef SRCPOS_H | 6 | #ifndef SRCPOS_H |
diff --git a/scripts/dtc/treesource.c b/scripts/dtc/treesource.c index 1af36628b75f..c9d980c8abfc 100644 --- a/scripts/dtc/treesource.c +++ b/scripts/dtc/treesource.c | |||
@@ -1,21 +1,6 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 3 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | * General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
18 | * USA | ||
19 | */ | 4 | */ |
20 | 5 | ||
21 | #include "dtc.h" | 6 | #include "dtc.h" |
diff --git a/scripts/dtc/util.c b/scripts/dtc/util.c index 9c6fb5f286ae..48af961dcc8c 100644 --- a/scripts/dtc/util.c +++ b/scripts/dtc/util.c | |||
@@ -1,24 +1,10 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * Copyright 2011 The Chromium Authors, All Rights Reserved. | 3 | * Copyright 2011 The Chromium Authors, All Rights Reserved. |
3 | * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. | 4 | * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. |
4 | * | 5 | * |
5 | * util_is_printable_string contributed by | 6 | * util_is_printable_string contributed by |
6 | * Pantelis Antoniou <pantelis.antoniou AT gmail.com> | 7 | * Pantelis Antoniou <pantelis.antoniou AT gmail.com> |
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License as | ||
10 | * published by the Free Software Foundation; either version 2 of the | ||
11 | * License, or (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
21 | * USA | ||
22 | */ | 8 | */ |
23 | 9 | ||
24 | #include <ctype.h> | 10 | #include <ctype.h> |
diff --git a/scripts/dtc/util.h b/scripts/dtc/util.h index 7658781a6200..ca5cb52928e3 100644 --- a/scripts/dtc/util.h +++ b/scripts/dtc/util.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
1 | #ifndef UTIL_H | 2 | #ifndef UTIL_H |
2 | #define UTIL_H | 3 | #define UTIL_H |
3 | 4 | ||
@@ -8,21 +9,6 @@ | |||
8 | /* | 9 | /* |
9 | * Copyright 2011 The Chromium Authors, All Rights Reserved. | 10 | * Copyright 2011 The Chromium Authors, All Rights Reserved. |
10 | * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. | 11 | * Copyright 2008 Jon Loeliger, Freescale Semiconductor, Inc. |
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License as | ||
14 | * published by the Free Software Foundation; either version 2 of the | ||
15 | * License, or (at your option) any later version. | ||
16 | * | ||
17 | * This program is distributed in the hope that it will be useful, | ||
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
20 | * General Public License for more details. | ||
21 | * | ||
22 | * You should have received a copy of the GNU General Public License | ||
23 | * along with this program; if not, write to the Free Software | ||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
25 | * USA | ||
26 | */ | 12 | */ |
27 | 13 | ||
28 | #ifdef __GNUC__ | 14 | #ifdef __GNUC__ |
@@ -122,7 +108,7 @@ int utilfdt_read_err(const char *filename, char **buffp, size_t *len); | |||
122 | * stderr. | 108 | * stderr. |
123 | * | 109 | * |
124 | * @param filename The filename to write, or - for stdout | 110 | * @param filename The filename to write, or - for stdout |
125 | * @param blob Poiner to buffer containing fdt | 111 | * @param blob Pointer to buffer containing fdt |
126 | * @return 0 if ok, -1 on error | 112 | * @return 0 if ok, -1 on error |
127 | */ | 113 | */ |
128 | int utilfdt_write(const char *filename, const void *blob); | 114 | int utilfdt_write(const char *filename, const void *blob); |
@@ -133,7 +119,7 @@ int utilfdt_write(const char *filename, const void *blob); | |||
133 | * an error message for the user. | 119 | * an error message for the user. |
134 | * | 120 | * |
135 | * @param filename The filename to write, or - for stdout | 121 | * @param filename The filename to write, or - for stdout |
136 | * @param blob Poiner to buffer containing fdt | 122 | * @param blob Pointer to buffer containing fdt |
137 | * @return 0 if ok, else an errno value representing the error | 123 | * @return 0 if ok, else an errno value representing the error |
138 | */ | 124 | */ |
139 | int utilfdt_write_err(const char *filename, const void *blob); | 125 | int utilfdt_write_err(const char *filename, const void *blob); |
diff --git a/scripts/dtc/version_gen.h b/scripts/dtc/version_gen.h index 75f383c0b9d3..f2761e24cf40 100644 --- a/scripts/dtc/version_gen.h +++ b/scripts/dtc/version_gen.h | |||
@@ -1 +1 @@ | |||
#define DTC_VERSION "DTC 1.4.7-gf267e674" | #define DTC_VERSION "DTC 1.5.0-g702c1b6c" | ||
diff --git a/scripts/dtc/yamltree.c b/scripts/dtc/yamltree.c index a00285a5a9ec..5b6ea8ea862f 100644 --- a/scripts/dtc/yamltree.c +++ b/scripts/dtc/yamltree.c | |||
@@ -1,22 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * (C) Copyright Linaro, Ltd. 2018 | 3 | * (C) Copyright Linaro, Ltd. 2018 |
3 | * (C) Copyright Arm Holdings. 2017 | 4 | * (C) Copyright Arm Holdings. 2017 |
4 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. | 5 | * (C) Copyright David Gibson <dwg@au1.ibm.com>, IBM Corporation. 2005. |
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License as | ||
8 | * published by the Free Software Foundation; either version 2 of the | ||
9 | * License, or (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
19 | * USA | ||
20 | */ | 6 | */ |
21 | 7 | ||
22 | #include <stdlib.h> | 8 | #include <stdlib.h> |
diff --git a/scripts/export_report.pl b/scripts/export_report.pl index 68ff426b347c..0f604f62f067 100755 --- a/scripts/export_report.pl +++ b/scripts/export_report.pl | |||
@@ -1,7 +1,7 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # | 3 | # |
3 | # (C) Copyright IBM Corporation 2006. | 4 | # (C) Copyright IBM Corporation 2006. |
4 | # Released under GPL v2. | ||
5 | # Author : Ram Pai (linuxram@us.ibm.com) | 5 | # Author : Ram Pai (linuxram@us.ibm.com) |
6 | # | 6 | # |
7 | # Usage: export_report.pl -k Module.symvers [-o report_file ] -f *.mod.c | 7 | # Usage: export_report.pl -k Module.symvers [-o report_file ] -f *.mod.c |
diff --git a/scripts/extract-vmlinux b/scripts/extract-vmlinux index 85e1f32fb4a0..8995cd304e6e 100755 --- a/scripts/extract-vmlinux +++ b/scripts/extract-vmlinux | |||
@@ -1,4 +1,5 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # ---------------------------------------------------------------------- | 3 | # ---------------------------------------------------------------------- |
3 | # extract-vmlinux - Extract uncompressed vmlinux from a kernel image | 4 | # extract-vmlinux - Extract uncompressed vmlinux from a kernel image |
4 | # | 5 | # |
@@ -7,7 +8,6 @@ | |||
7 | # | 8 | # |
8 | # (c) 2011 Corentin Chary <corentin.chary@gmail.com> | 9 | # (c) 2011 Corentin Chary <corentin.chary@gmail.com> |
9 | # | 10 | # |
10 | # Licensed under the GNU General Public License, version 2 (GPLv2). | ||
11 | # ---------------------------------------------------------------------- | 11 | # ---------------------------------------------------------------------- |
12 | 12 | ||
13 | check_vmlinux() | 13 | check_vmlinux() |
diff --git a/scripts/extract_xc3028.pl b/scripts/extract_xc3028.pl index a1c51b7e4baf..e1c9af25a595 100755 --- a/scripts/extract_xc3028.pl +++ b/scripts/extract_xc3028.pl | |||
@@ -1,7 +1,7 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org> | 4 | # Copyright (c) Mauro Carvalho Chehab <mchehab@kernel.org> |
4 | # Released under GPLv2 | ||
5 | # | 5 | # |
6 | # In order to use, you need to: | 6 | # In order to use, you need to: |
7 | # 1) Download the windows driver with something like: | 7 | # 1) Download the windows driver with something like: |
diff --git a/scripts/gcc-plugins/Kconfig b/scripts/gcc-plugins/Kconfig index 80220ed26a35..e9c677a53c74 100644 --- a/scripts/gcc-plugins/Kconfig +++ b/scripts/gcc-plugins/Kconfig | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | preferred-plugin-hostcc := $(if-success,[ $(gcc-version) -ge 40800 ],$(HOSTCXX),$(HOSTCC)) | 2 | preferred-plugin-hostcc := $(if-success,[ $(gcc-version) -ge 40800 ],$(HOSTCXX),$(HOSTCC)) |
2 | 3 | ||
3 | config PLUGIN_HOSTCC | 4 | config PLUGIN_HOSTCC |
diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h index 552d5efd7cb7..17f06079a712 100644 --- a/scripts/gcc-plugins/gcc-common.h +++ b/scripts/gcc-plugins/gcc-common.h | |||
@@ -150,8 +150,12 @@ void print_gimple_expr(FILE *, gimple, int, int); | |||
150 | void dump_gimple_stmt(pretty_printer *, gimple, int, int); | 150 | void dump_gimple_stmt(pretty_printer *, gimple, int, int); |
151 | #endif | 151 | #endif |
152 | 152 | ||
153 | #ifndef __unused | ||
153 | #define __unused __attribute__((__unused__)) | 154 | #define __unused __attribute__((__unused__)) |
155 | #endif | ||
156 | #ifndef __visible | ||
154 | #define __visible __attribute__((visibility("default"))) | 157 | #define __visible __attribute__((visibility("default"))) |
158 | #endif | ||
155 | 159 | ||
156 | #define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node)) | 160 | #define DECL_NAME_POINTER(node) IDENTIFIER_POINTER(DECL_NAME(node)) |
157 | #define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node)) | 161 | #define DECL_NAME_LENGTH(node) IDENTIFIER_LENGTH(DECL_NAME(node)) |
diff --git a/scripts/gdb/Makefile b/scripts/gdb/Makefile index 62f5f65becfd..3fca1937d956 100644 --- a/scripts/gdb/Makefile +++ b/scripts/gdb/Makefile | |||
@@ -1 +1,2 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | subdir-y := linux | 2 | subdir-y := linux |
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile index 9fd3d8ed731a..124755087510 100644 --- a/scripts/gdb/linux/Makefile +++ b/scripts/gdb/linux/Makefile | |||
@@ -1,6 +1,6 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | 1 | # SPDX-License-Identifier: GPL-2.0 |
2 | 2 | ||
3 | ifneq ($(srctree),.) | 3 | ifdef building_out_of_srctree |
4 | 4 | ||
5 | symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py)) | 5 | symlinks := $(patsubst $(srctree)/$(src)/%,%,$(wildcard $(srctree)/$(src)/*.py)) |
6 | 6 | ||
diff --git a/scripts/gdb/linux/clk.py b/scripts/gdb/linux/clk.py new file mode 100644 index 000000000000..061aecfa294e --- /dev/null +++ b/scripts/gdb/linux/clk.py | |||
@@ -0,0 +1,76 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | ||
2 | # | ||
3 | # Copyright (c) NXP 2019 | ||
4 | |||
5 | import gdb | ||
6 | import sys | ||
7 | |||
8 | from linux import utils, lists, constants | ||
9 | |||
10 | clk_core_type = utils.CachedType("struct clk_core") | ||
11 | |||
12 | |||
13 | def clk_core_for_each_child(hlist_head): | ||
14 | return lists.hlist_for_each_entry(hlist_head, | ||
15 | clk_core_type.get_type().pointer(), "child_node") | ||
16 | |||
17 | |||
18 | class LxClkSummary(gdb.Command): | ||
19 | """Print clk tree summary | ||
20 | |||
21 | Output is a subset of /sys/kernel/debug/clk/clk_summary | ||
22 | |||
23 | No calls are made during printing, instead a (c) if printed after values which | ||
24 | are cached and potentially out of date""" | ||
25 | |||
26 | def __init__(self): | ||
27 | super(LxClkSummary, self).__init__("lx-clk-summary", gdb.COMMAND_DATA) | ||
28 | |||
29 | def show_subtree(self, clk, level): | ||
30 | gdb.write("%*s%-*s %7d %8d %8d %11lu%s\n" % ( | ||
31 | level * 3 + 1, "", | ||
32 | 30 - level * 3, | ||
33 | clk['name'].string(), | ||
34 | clk['enable_count'], | ||
35 | clk['prepare_count'], | ||
36 | clk['protect_count'], | ||
37 | clk['rate'], | ||
38 | '(c)' if clk['flags'] & constants.LX_CLK_GET_RATE_NOCACHE else ' ')) | ||
39 | |||
40 | for child in clk_core_for_each_child(clk['children']): | ||
41 | self.show_subtree(child, level + 1) | ||
42 | |||
43 | def invoke(self, arg, from_tty): | ||
44 | gdb.write(" enable prepare protect \n") | ||
45 | gdb.write(" clock count count count rate \n") | ||
46 | gdb.write("------------------------------------------------------------------------\n") | ||
47 | for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_root_list")): | ||
48 | self.show_subtree(clk, 0) | ||
49 | for clk in clk_core_for_each_child(gdb.parse_and_eval("clk_orphan_list")): | ||
50 | self.show_subtree(clk, 0) | ||
51 | |||
52 | |||
53 | LxClkSummary() | ||
54 | |||
55 | |||
56 | class LxClkCoreLookup(gdb.Function): | ||
57 | """Find struct clk_core by name""" | ||
58 | |||
59 | def __init__(self): | ||
60 | super(LxClkCoreLookup, self).__init__("lx_clk_core_lookup") | ||
61 | |||
62 | def lookup_hlist(self, hlist_head, name): | ||
63 | for child in clk_core_for_each_child(hlist_head): | ||
64 | if child['name'].string() == name: | ||
65 | return child | ||
66 | result = self.lookup_hlist(child['children'], name) | ||
67 | if result: | ||
68 | return result | ||
69 | |||
70 | def invoke(self, name): | ||
71 | name = name.string() | ||
72 | return (self.lookup_hlist(gdb.parse_and_eval("clk_root_list"), name) or | ||
73 | self.lookup_hlist(gdb.parse_and_eval("clk_orphan_list"), name)) | ||
74 | |||
75 | |||
76 | LxClkCoreLookup() | ||
diff --git a/scripts/gdb/linux/config.py b/scripts/gdb/linux/config.py new file mode 100644 index 000000000000..90e1565b1967 --- /dev/null +++ b/scripts/gdb/linux/config.py | |||
@@ -0,0 +1,44 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | ||
2 | # | ||
3 | # Copyright 2019 Google LLC. | ||
4 | |||
5 | import gdb | ||
6 | import zlib | ||
7 | |||
8 | from linux import utils | ||
9 | |||
10 | |||
11 | class LxConfigDump(gdb.Command): | ||
12 | """Output kernel config to the filename specified as the command | ||
13 | argument. Equivalent to 'zcat /proc/config.gz > config.txt' on | ||
14 | a running target""" | ||
15 | |||
16 | def __init__(self): | ||
17 | super(LxConfigDump, self).__init__("lx-configdump", gdb.COMMAND_DATA, | ||
18 | gdb.COMPLETE_FILENAME) | ||
19 | |||
20 | def invoke(self, arg, from_tty): | ||
21 | if len(arg) == 0: | ||
22 | filename = "config.txt" | ||
23 | else: | ||
24 | filename = arg | ||
25 | |||
26 | try: | ||
27 | py_config_ptr = gdb.parse_and_eval("kernel_config_data + 8") | ||
28 | py_config_size = gdb.parse_and_eval( | ||
29 | "sizeof(kernel_config_data) - 1 - 8 * 2") | ||
30 | except gdb.error as e: | ||
31 | raise gdb.GdbError("Can't find config, enable CONFIG_IKCONFIG?") | ||
32 | |||
33 | inf = gdb.inferiors()[0] | ||
34 | zconfig_buf = utils.read_memoryview(inf, py_config_ptr, | ||
35 | py_config_size).tobytes() | ||
36 | |||
37 | config_buf = zlib.decompress(zconfig_buf, 16) | ||
38 | with open(filename, 'wb') as f: | ||
39 | f.write(config_buf) | ||
40 | |||
41 | gdb.write("Dumped config to " + filename + "\n") | ||
42 | |||
43 | |||
44 | LxConfigDump() | ||
diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in index d3319a80788a..2efbec6b6b8d 100644 --- a/scripts/gdb/linux/constants.py.in +++ b/scripts/gdb/linux/constants.py.in | |||
@@ -12,9 +12,12 @@ | |||
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/clk-provider.h> | ||
15 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <linux/hrtimer.h> | ||
16 | #include <linux/mount.h> | 18 | #include <linux/mount.h> |
17 | #include <linux/of_fdt.h> | 19 | #include <linux/of_fdt.h> |
20 | #include <linux/threads.h> | ||
18 | 21 | ||
19 | /* We need to stringify expanded macros so that they can be parsed */ | 22 | /* We need to stringify expanded macros so that they can be parsed */ |
20 | 23 | ||
@@ -36,6 +39,10 @@ | |||
36 | 39 | ||
37 | import gdb | 40 | import gdb |
38 | 41 | ||
42 | /* linux/clk-provider.h */ | ||
43 | if IS_BUILTIN(CONFIG_COMMON_CLK): | ||
44 | LX_GDBPARSED(CLK_GET_RATE_NOCACHE) | ||
45 | |||
39 | /* linux/fs.h */ | 46 | /* linux/fs.h */ |
40 | LX_VALUE(SB_RDONLY) | 47 | LX_VALUE(SB_RDONLY) |
41 | LX_VALUE(SB_SYNCHRONOUS) | 48 | LX_VALUE(SB_SYNCHRONOUS) |
@@ -44,6 +51,9 @@ LX_VALUE(SB_DIRSYNC) | |||
44 | LX_VALUE(SB_NOATIME) | 51 | LX_VALUE(SB_NOATIME) |
45 | LX_VALUE(SB_NODIRATIME) | 52 | LX_VALUE(SB_NODIRATIME) |
46 | 53 | ||
54 | /* linux/htimer.h */ | ||
55 | LX_GDBPARSED(hrtimer_resolution) | ||
56 | |||
47 | /* linux/mount.h */ | 57 | /* linux/mount.h */ |
48 | LX_VALUE(MNT_NOSUID) | 58 | LX_VALUE(MNT_NOSUID) |
49 | LX_VALUE(MNT_NODEV) | 59 | LX_VALUE(MNT_NODEV) |
@@ -52,8 +62,16 @@ LX_VALUE(MNT_NOATIME) | |||
52 | LX_VALUE(MNT_NODIRATIME) | 62 | LX_VALUE(MNT_NODIRATIME) |
53 | LX_VALUE(MNT_RELATIME) | 63 | LX_VALUE(MNT_RELATIME) |
54 | 64 | ||
65 | /* linux/threads.h */ | ||
66 | LX_VALUE(NR_CPUS) | ||
67 | |||
55 | /* linux/of_fdt.h> */ | 68 | /* linux/of_fdt.h> */ |
56 | LX_VALUE(OF_DT_HEADER) | 69 | LX_VALUE(OF_DT_HEADER) |
57 | 70 | ||
58 | /* Kernel Configs */ | 71 | /* Kernel Configs */ |
72 | LX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS) | ||
73 | LX_CONFIG(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) | ||
74 | LX_CONFIG(CONFIG_HIGH_RES_TIMERS) | ||
75 | LX_CONFIG(CONFIG_NR_CPUS) | ||
59 | LX_CONFIG(CONFIG_OF) | 76 | LX_CONFIG(CONFIG_OF) |
77 | LX_CONFIG(CONFIG_TICK_ONESHOT) | ||
diff --git a/scripts/gdb/linux/cpus.py b/scripts/gdb/linux/cpus.py index ca11e8df31b6..008e62f3190d 100644 --- a/scripts/gdb/linux/cpus.py +++ b/scripts/gdb/linux/cpus.py | |||
@@ -135,6 +135,7 @@ and can help identify the state of hotplugged CPUs""" | |||
135 | gdb.write("Online CPUs : {}\n".format(list(each_online_cpu()))) | 135 | gdb.write("Online CPUs : {}\n".format(list(each_online_cpu()))) |
136 | gdb.write("Active CPUs : {}\n".format(list(each_active_cpu()))) | 136 | gdb.write("Active CPUs : {}\n".format(list(each_active_cpu()))) |
137 | 137 | ||
138 | |||
138 | LxCpus() | 139 | LxCpus() |
139 | 140 | ||
140 | 141 | ||
diff --git a/scripts/gdb/linux/lists.py b/scripts/gdb/linux/lists.py index 2f335fbd86fd..c487ddf09d38 100644 --- a/scripts/gdb/linux/lists.py +++ b/scripts/gdb/linux/lists.py | |||
@@ -16,13 +16,15 @@ import gdb | |||
16 | from linux import utils | 16 | from linux import utils |
17 | 17 | ||
18 | list_head = utils.CachedType("struct list_head") | 18 | list_head = utils.CachedType("struct list_head") |
19 | hlist_head = utils.CachedType("struct hlist_head") | ||
20 | hlist_node = utils.CachedType("struct hlist_node") | ||
19 | 21 | ||
20 | 22 | ||
21 | def list_for_each(head): | 23 | def list_for_each(head): |
22 | if head.type == list_head.get_type().pointer(): | 24 | if head.type == list_head.get_type().pointer(): |
23 | head = head.dereference() | 25 | head = head.dereference() |
24 | elif head.type != list_head.get_type(): | 26 | elif head.type != list_head.get_type(): |
25 | raise gdb.GdbError("Must be struct list_head not {}" | 27 | raise TypeError("Must be struct list_head not {}" |
26 | .format(head.type)) | 28 | .format(head.type)) |
27 | 29 | ||
28 | node = head['next'].dereference() | 30 | node = head['next'].dereference() |
@@ -33,9 +35,24 @@ def list_for_each(head): | |||
33 | 35 | ||
34 | def list_for_each_entry(head, gdbtype, member): | 36 | def list_for_each_entry(head, gdbtype, member): |
35 | for node in list_for_each(head): | 37 | for node in list_for_each(head): |
36 | if node.type != list_head.get_type().pointer(): | 38 | yield utils.container_of(node, gdbtype, member) |
37 | raise TypeError("Type {} found. Expected struct list_head *." | 39 | |
38 | .format(node.type)) | 40 | |
41 | def hlist_for_each(head): | ||
42 | if head.type == hlist_head.get_type().pointer(): | ||
43 | head = head.dereference() | ||
44 | elif head.type != hlist_head.get_type(): | ||
45 | raise TypeError("Must be struct hlist_head not {}" | ||
46 | .format(head.type)) | ||
47 | |||
48 | node = head['first'].dereference() | ||
49 | while node.address: | ||
50 | yield node.address | ||
51 | node = node['next'].dereference() | ||
52 | |||
53 | |||
54 | def hlist_for_each_entry(head, gdbtype, member): | ||
55 | for node in hlist_for_each(head): | ||
39 | yield utils.container_of(node, gdbtype, member) | 56 | yield utils.container_of(node, gdbtype, member) |
40 | 57 | ||
41 | 58 | ||
@@ -110,4 +127,5 @@ class LxListChk(gdb.Command): | |||
110 | raise gdb.GdbError("lx-list-check takes one argument") | 127 | raise gdb.GdbError("lx-list-check takes one argument") |
111 | list_check(gdb.parse_and_eval(argv[0])) | 128 | list_check(gdb.parse_and_eval(argv[0])) |
112 | 129 | ||
130 | |||
113 | LxListChk() | 131 | LxListChk() |
diff --git a/scripts/gdb/linux/proc.py b/scripts/gdb/linux/proc.py index 2f01a958eb22..6a56bba233a9 100644 --- a/scripts/gdb/linux/proc.py +++ b/scripts/gdb/linux/proc.py | |||
@@ -29,6 +29,7 @@ class LxCmdLine(gdb.Command): | |||
29 | def invoke(self, arg, from_tty): | 29 | def invoke(self, arg, from_tty): |
30 | gdb.write(gdb.parse_and_eval("saved_command_line").string() + "\n") | 30 | gdb.write(gdb.parse_and_eval("saved_command_line").string() + "\n") |
31 | 31 | ||
32 | |||
32 | LxCmdLine() | 33 | LxCmdLine() |
33 | 34 | ||
34 | 35 | ||
@@ -43,6 +44,7 @@ class LxVersion(gdb.Command): | |||
43 | # linux_banner should contain a newline | 44 | # linux_banner should contain a newline |
44 | gdb.write(gdb.parse_and_eval("(char *)linux_banner").string()) | 45 | gdb.write(gdb.parse_and_eval("(char *)linux_banner").string()) |
45 | 46 | ||
47 | |||
46 | LxVersion() | 48 | LxVersion() |
47 | 49 | ||
48 | 50 | ||
@@ -86,6 +88,7 @@ Equivalent to cat /proc/iomem on a running target""" | |||
86 | def invoke(self, arg, from_tty): | 88 | def invoke(self, arg, from_tty): |
87 | return show_lx_resources("iomem_resource") | 89 | return show_lx_resources("iomem_resource") |
88 | 90 | ||
91 | |||
89 | LxIOMem() | 92 | LxIOMem() |
90 | 93 | ||
91 | 94 | ||
@@ -100,6 +103,7 @@ Equivalent to cat /proc/ioports on a running target""" | |||
100 | def invoke(self, arg, from_tty): | 103 | def invoke(self, arg, from_tty): |
101 | return show_lx_resources("ioport_resource") | 104 | return show_lx_resources("ioport_resource") |
102 | 105 | ||
106 | |||
103 | LxIOPorts() | 107 | LxIOPorts() |
104 | 108 | ||
105 | 109 | ||
@@ -149,7 +153,7 @@ values of that process namespace""" | |||
149 | if len(argv) >= 1: | 153 | if len(argv) >= 1: |
150 | try: | 154 | try: |
151 | pid = int(argv[0]) | 155 | pid = int(argv[0]) |
152 | except: | 156 | except gdb.error: |
153 | raise gdb.GdbError("Provide a PID as integer value") | 157 | raise gdb.GdbError("Provide a PID as integer value") |
154 | else: | 158 | else: |
155 | pid = 1 | 159 | pid = 1 |
@@ -195,6 +199,7 @@ values of that process namespace""" | |||
195 | info_opts(FS_INFO, s_flags), | 199 | info_opts(FS_INFO, s_flags), |
196 | info_opts(MNT_INFO, m_flags))) | 200 | info_opts(MNT_INFO, m_flags))) |
197 | 201 | ||
202 | |||
198 | LxMounts() | 203 | LxMounts() |
199 | 204 | ||
200 | 205 | ||
@@ -259,7 +264,7 @@ class LxFdtDump(gdb.Command): | |||
259 | 264 | ||
260 | try: | 265 | try: |
261 | f = open(filename, 'wb') | 266 | f = open(filename, 'wb') |
262 | except: | 267 | except gdb.error: |
263 | raise gdb.GdbError("Could not open file to dump fdt") | 268 | raise gdb.GdbError("Could not open file to dump fdt") |
264 | 269 | ||
265 | f.write(fdt_buf) | 270 | f.write(fdt_buf) |
@@ -267,4 +272,5 @@ class LxFdtDump(gdb.Command): | |||
267 | 272 | ||
268 | gdb.write("Dumped fdt blob to " + filename + "\n") | 273 | gdb.write("Dumped fdt blob to " + filename + "\n") |
269 | 274 | ||
275 | |||
270 | LxFdtDump() | 276 | LxFdtDump() |
diff --git a/scripts/gdb/linux/rbtree.py b/scripts/gdb/linux/rbtree.py new file mode 100644 index 000000000000..39db889b874c --- /dev/null +++ b/scripts/gdb/linux/rbtree.py | |||
@@ -0,0 +1,177 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | ||
2 | # | ||
3 | # Copyright 2019 Google LLC. | ||
4 | |||
5 | import gdb | ||
6 | |||
7 | from linux import utils | ||
8 | |||
9 | rb_root_type = utils.CachedType("struct rb_root") | ||
10 | rb_node_type = utils.CachedType("struct rb_node") | ||
11 | |||
12 | |||
13 | def rb_first(root): | ||
14 | if root.type == rb_root_type.get_type(): | ||
15 | node = node.address.cast(rb_root_type.get_type().pointer()) | ||
16 | elif root.type != rb_root_type.get_type().pointer(): | ||
17 | raise gdb.GdbError("Must be struct rb_root not {}".format(root.type)) | ||
18 | |||
19 | node = root['rb_node'] | ||
20 | if node is 0: | ||
21 | return None | ||
22 | |||
23 | while node['rb_left']: | ||
24 | node = node['rb_left'] | ||
25 | |||
26 | return node | ||
27 | |||
28 | |||
29 | def rb_last(root): | ||
30 | if root.type == rb_root_type.get_type(): | ||
31 | node = node.address.cast(rb_root_type.get_type().pointer()) | ||
32 | elif root.type != rb_root_type.get_type().pointer(): | ||
33 | raise gdb.GdbError("Must be struct rb_root not {}".format(root.type)) | ||
34 | |||
35 | node = root['rb_node'] | ||
36 | if node is 0: | ||
37 | return None | ||
38 | |||
39 | while node['rb_right']: | ||
40 | node = node['rb_right'] | ||
41 | |||
42 | return node | ||
43 | |||
44 | |||
45 | def rb_parent(node): | ||
46 | parent = gdb.Value(node['__rb_parent_color'] & ~3) | ||
47 | return parent.cast(rb_node_type.get_type().pointer()) | ||
48 | |||
49 | |||
50 | def rb_empty_node(node): | ||
51 | return node['__rb_parent_color'] == node.address | ||
52 | |||
53 | |||
54 | def rb_next(node): | ||
55 | if node.type == rb_node_type.get_type(): | ||
56 | node = node.address.cast(rb_node_type.get_type().pointer()) | ||
57 | elif node.type != rb_node_type.get_type().pointer(): | ||
58 | raise gdb.GdbError("Must be struct rb_node not {}".format(node.type)) | ||
59 | |||
60 | if rb_empty_node(node): | ||
61 | return None | ||
62 | |||
63 | if node['rb_right']: | ||
64 | node = node['rb_right'] | ||
65 | while node['rb_left']: | ||
66 | node = node['rb_left'] | ||
67 | return node | ||
68 | |||
69 | parent = rb_parent(node) | ||
70 | while parent and node == parent['rb_right']: | ||
71 | node = parent | ||
72 | parent = rb_parent(node) | ||
73 | |||
74 | return parent | ||
75 | |||
76 | |||
77 | def rb_prev(node): | ||
78 | if node.type == rb_node_type.get_type(): | ||
79 | node = node.address.cast(rb_node_type.get_type().pointer()) | ||
80 | elif node.type != rb_node_type.get_type().pointer(): | ||
81 | raise gdb.GdbError("Must be struct rb_node not {}".format(node.type)) | ||
82 | |||
83 | if rb_empty_node(node): | ||
84 | return None | ||
85 | |||
86 | if node['rb_left']: | ||
87 | node = node['rb_left'] | ||
88 | while node['rb_right']: | ||
89 | node = node['rb_right'] | ||
90 | return node.dereference() | ||
91 | |||
92 | parent = rb_parent(node) | ||
93 | while parent and node == parent['rb_left'].dereference(): | ||
94 | node = parent | ||
95 | parent = rb_parent(node) | ||
96 | |||
97 | return parent | ||
98 | |||
99 | |||
100 | class LxRbFirst(gdb.Function): | ||
101 | """Lookup and return a node from an RBTree | ||
102 | |||
103 | $lx_rb_first(root): Return the node at the given index. | ||
104 | If index is omitted, the root node is dereferenced and returned.""" | ||
105 | |||
106 | def __init__(self): | ||
107 | super(LxRbFirst, self).__init__("lx_rb_first") | ||
108 | |||
109 | def invoke(self, root): | ||
110 | result = rb_first(root) | ||
111 | if result is None: | ||
112 | raise gdb.GdbError("No entry in tree") | ||
113 | |||
114 | return result | ||
115 | |||
116 | |||
117 | LxRbFirst() | ||
118 | |||
119 | |||
120 | class LxRbLast(gdb.Function): | ||
121 | """Lookup and return a node from an RBTree. | ||
122 | |||
123 | $lx_rb_last(root): Return the node at the given index. | ||
124 | If index is omitted, the root node is dereferenced and returned.""" | ||
125 | |||
126 | def __init__(self): | ||
127 | super(LxRbLast, self).__init__("lx_rb_last") | ||
128 | |||
129 | def invoke(self, root): | ||
130 | result = rb_last(root) | ||
131 | if result is None: | ||
132 | raise gdb.GdbError("No entry in tree") | ||
133 | |||
134 | return result | ||
135 | |||
136 | |||
137 | LxRbLast() | ||
138 | |||
139 | |||
140 | class LxRbNext(gdb.Function): | ||
141 | """Lookup and return a node from an RBTree. | ||
142 | |||
143 | $lx_rb_next(node): Return the node at the given index. | ||
144 | If index is omitted, the root node is dereferenced and returned.""" | ||
145 | |||
146 | def __init__(self): | ||
147 | super(LxRbNext, self).__init__("lx_rb_next") | ||
148 | |||
149 | def invoke(self, node): | ||
150 | result = rb_next(node) | ||
151 | if result is None: | ||
152 | raise gdb.GdbError("No entry in tree") | ||
153 | |||
154 | return result | ||
155 | |||
156 | |||
157 | LxRbNext() | ||
158 | |||
159 | |||
160 | class LxRbPrev(gdb.Function): | ||
161 | """Lookup and return a node from an RBTree. | ||
162 | |||
163 | $lx_rb_prev(node): Return the node at the given index. | ||
164 | If index is omitted, the root node is dereferenced and returned.""" | ||
165 | |||
166 | def __init__(self): | ||
167 | super(LxRbPrev, self).__init__("lx_rb_prev") | ||
168 | |||
169 | def invoke(self, node): | ||
170 | result = rb_prev(node) | ||
171 | if result is None: | ||
172 | raise gdb.GdbError("No entry in tree") | ||
173 | |||
174 | return result | ||
175 | |||
176 | |||
177 | LxRbPrev() | ||
diff --git a/scripts/gdb/linux/symbols.py b/scripts/gdb/linux/symbols.py index 004b0ac7fa72..2f5b95f09fa0 100644 --- a/scripts/gdb/linux/symbols.py +++ b/scripts/gdb/linux/symbols.py | |||
@@ -139,8 +139,12 @@ lx-symbols command.""" | |||
139 | saved_states.append({'breakpoint': bp, 'enabled': bp.enabled}) | 139 | saved_states.append({'breakpoint': bp, 'enabled': bp.enabled}) |
140 | 140 | ||
141 | # drop all current symbols and reload vmlinux | 141 | # drop all current symbols and reload vmlinux |
142 | orig_vmlinux = 'vmlinux' | ||
143 | for obj in gdb.objfiles(): | ||
144 | if obj.filename.endswith('vmlinux'): | ||
145 | orig_vmlinux = obj.filename | ||
142 | gdb.execute("symbol-file", to_string=True) | 146 | gdb.execute("symbol-file", to_string=True) |
143 | gdb.execute("symbol-file vmlinux") | 147 | gdb.execute("symbol-file {0}".format(orig_vmlinux)) |
144 | 148 | ||
145 | self.loaded_modules = [] | 149 | self.loaded_modules = [] |
146 | module_list = modules.module_list() | 150 | module_list = modules.module_list() |
diff --git a/scripts/gdb/linux/tasks.py b/scripts/gdb/linux/tasks.py index f6ab3ccf698f..0301dc1e0138 100644 --- a/scripts/gdb/linux/tasks.py +++ b/scripts/gdb/linux/tasks.py | |||
@@ -79,6 +79,7 @@ class LxPs(gdb.Command): | |||
79 | pid=task["pid"], | 79 | pid=task["pid"], |
80 | comm=task["comm"].string())) | 80 | comm=task["comm"].string())) |
81 | 81 | ||
82 | |||
82 | LxPs() | 83 | LxPs() |
83 | 84 | ||
84 | 85 | ||
@@ -134,4 +135,5 @@ variable.""" | |||
134 | else: | 135 | else: |
135 | raise gdb.GdbError("No task of PID " + str(pid)) | 136 | raise gdb.GdbError("No task of PID " + str(pid)) |
136 | 137 | ||
138 | |||
137 | LxThreadInfoByPidFunc() | 139 | LxThreadInfoByPidFunc() |
diff --git a/scripts/gdb/linux/timerlist.py b/scripts/gdb/linux/timerlist.py new file mode 100644 index 000000000000..071d0dd5a634 --- /dev/null +++ b/scripts/gdb/linux/timerlist.py | |||
@@ -0,0 +1,219 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0 | ||
2 | # | ||
3 | # Copyright 2019 Google LLC. | ||
4 | |||
5 | import binascii | ||
6 | import gdb | ||
7 | |||
8 | from linux import constants | ||
9 | from linux import cpus | ||
10 | from linux import rbtree | ||
11 | from linux import utils | ||
12 | |||
13 | timerqueue_node_type = utils.CachedType("struct timerqueue_node").get_type() | ||
14 | hrtimer_type = utils.CachedType("struct hrtimer").get_type() | ||
15 | |||
16 | |||
17 | def ktime_get(): | ||
18 | """Returns the current time, but not very accurately | ||
19 | |||
20 | We can't read the hardware timer itself to add any nanoseconds | ||
21 | that need to be added since we last stored the time in the | ||
22 | timekeeper. But this is probably good enough for debug purposes.""" | ||
23 | tk_core = gdb.parse_and_eval("&tk_core") | ||
24 | |||
25 | return tk_core['timekeeper']['tkr_mono']['base'] | ||
26 | |||
27 | |||
28 | def print_timer(rb_node, idx): | ||
29 | timerqueue = utils.container_of(rb_node, timerqueue_node_type.pointer(), | ||
30 | "node") | ||
31 | timer = utils.container_of(timerqueue, hrtimer_type.pointer(), "node") | ||
32 | |||
33 | function = str(timer['function']).split(" ")[1].strip("<>") | ||
34 | softexpires = timer['_softexpires'] | ||
35 | expires = timer['node']['expires'] | ||
36 | now = ktime_get() | ||
37 | |||
38 | text = " #{}: <{}>, {}, ".format(idx, timer, function) | ||
39 | text += "S:{:02x}\n".format(int(timer['state'])) | ||
40 | text += " # expires at {}-{} nsecs [in {} to {} nsecs]\n".format( | ||
41 | softexpires, expires, softexpires - now, expires - now) | ||
42 | return text | ||
43 | |||
44 | |||
45 | def print_active_timers(base): | ||
46 | curr = base['active']['next']['node'] | ||
47 | curr = curr.address.cast(rbtree.rb_node_type.get_type().pointer()) | ||
48 | idx = 0 | ||
49 | while curr: | ||
50 | yield print_timer(curr, idx) | ||
51 | curr = rbtree.rb_next(curr) | ||
52 | idx += 1 | ||
53 | |||
54 | |||
55 | def print_base(base): | ||
56 | text = " .base: {}\n".format(base.address) | ||
57 | text += " .index: {}\n".format(base['index']) | ||
58 | |||
59 | text += " .resolution: {} nsecs\n".format(constants.LX_hrtimer_resolution) | ||
60 | |||
61 | text += " .get_time: {}\n".format(base['get_time']) | ||
62 | if constants.LX_CONFIG_HIGH_RES_TIMERS: | ||
63 | text += " .offset: {} nsecs\n".format(base['offset']) | ||
64 | text += "active timers:\n" | ||
65 | text += "".join([x for x in print_active_timers(base)]) | ||
66 | return text | ||
67 | |||
68 | |||
69 | def print_cpu(hrtimer_bases, cpu, max_clock_bases): | ||
70 | cpu_base = cpus.per_cpu(hrtimer_bases, cpu) | ||
71 | jiffies = gdb.parse_and_eval("jiffies_64") | ||
72 | tick_sched_ptr = gdb.parse_and_eval("&tick_cpu_sched") | ||
73 | ts = cpus.per_cpu(tick_sched_ptr, cpu) | ||
74 | |||
75 | text = "cpu: {}\n".format(cpu) | ||
76 | for i in xrange(max_clock_bases): | ||
77 | text += " clock {}:\n".format(i) | ||
78 | text += print_base(cpu_base['clock_base'][i]) | ||
79 | |||
80 | if constants.LX_CONFIG_HIGH_RES_TIMERS: | ||
81 | fmts = [(" .{} : {} nsecs", 'expires_next'), | ||
82 | (" .{} : {}", 'hres_active'), | ||
83 | (" .{} : {}", 'nr_events'), | ||
84 | (" .{} : {}", 'nr_retries'), | ||
85 | (" .{} : {}", 'nr_hangs'), | ||
86 | (" .{} : {}", 'max_hang_time')] | ||
87 | text += "\n".join([s.format(f, cpu_base[f]) for s, f in fmts]) | ||
88 | text += "\n" | ||
89 | |||
90 | if constants.LX_CONFIG_TICK_ONESHOT: | ||
91 | fmts = [(" .{} : {}", 'nohz_mode'), | ||
92 | (" .{} : {} nsecs", 'last_tick'), | ||
93 | (" .{} : {}", 'tick_stopped'), | ||
94 | (" .{} : {}", 'idle_jiffies'), | ||
95 | (" .{} : {}", 'idle_calls'), | ||
96 | (" .{} : {}", 'idle_sleeps'), | ||
97 | (" .{} : {} nsecs", 'idle_entrytime'), | ||
98 | (" .{} : {} nsecs", 'idle_waketime'), | ||
99 | (" .{} : {} nsecs", 'idle_exittime'), | ||
100 | (" .{} : {} nsecs", 'idle_sleeptime'), | ||
101 | (" .{}: {} nsecs", 'iowait_sleeptime'), | ||
102 | (" .{} : {}", 'last_jiffies'), | ||
103 | (" .{} : {}", 'next_timer'), | ||
104 | (" .{} : {} nsecs", 'idle_expires')] | ||
105 | text += "\n".join([s.format(f, ts[f]) for s, f in fmts]) | ||
106 | text += "\njiffies: {}\n".format(jiffies) | ||
107 | |||
108 | text += "\n" | ||
109 | |||
110 | return text | ||
111 | |||
112 | |||
113 | def print_tickdevice(td, cpu): | ||
114 | dev = td['evtdev'] | ||
115 | text = "Tick Device: mode: {}\n".format(td['mode']) | ||
116 | if cpu < 0: | ||
117 | text += "Broadcast device\n" | ||
118 | else: | ||
119 | text += "Per CPU device: {}\n".format(cpu) | ||
120 | |||
121 | text += "Clock Event Device: " | ||
122 | if dev == 0: | ||
123 | text += "<NULL>\n" | ||
124 | return text | ||
125 | |||
126 | text += "{}\n".format(dev['name']) | ||
127 | text += " max_delta_ns: {}\n".format(dev['max_delta_ns']) | ||
128 | text += " min_delta_ns: {}\n".format(dev['min_delta_ns']) | ||
129 | text += " mult: {}\n".format(dev['mult']) | ||
130 | text += " shift: {}\n".format(dev['shift']) | ||
131 | text += " mode: {}\n".format(dev['state_use_accessors']) | ||
132 | text += " next_event: {} nsecs\n".format(dev['next_event']) | ||
133 | |||
134 | text += " set_next_event: {}\n".format(dev['set_next_event']) | ||
135 | |||
136 | members = [('set_state_shutdown', " shutdown: {}\n"), | ||
137 | ('set_state_periodic', " periodic: {}\n"), | ||
138 | ('set_state_oneshot', " oneshot: {}\n"), | ||
139 | ('set_state_oneshot_stopped', " oneshot stopped: {}\n"), | ||
140 | ('tick_resume', " resume: {}\n")] | ||
141 | for member, fmt in members: | ||
142 | if dev[member]: | ||
143 | text += fmt.format(dev[member]) | ||
144 | |||
145 | text += " event_handler: {}\n".format(dev['event_handler']) | ||
146 | text += " retries: {}\n".format(dev['retries']) | ||
147 | |||
148 | return text | ||
149 | |||
150 | |||
151 | def pr_cpumask(mask): | ||
152 | nr_cpu_ids = 1 | ||
153 | if constants.LX_NR_CPUS > 1: | ||
154 | nr_cpu_ids = gdb.parse_and_eval("nr_cpu_ids") | ||
155 | |||
156 | inf = gdb.inferiors()[0] | ||
157 | bits = mask['bits'] | ||
158 | num_bytes = (nr_cpu_ids + 7) / 8 | ||
159 | buf = utils.read_memoryview(inf, bits, num_bytes).tobytes() | ||
160 | buf = binascii.b2a_hex(buf) | ||
161 | |||
162 | chunks = [] | ||
163 | i = num_bytes | ||
164 | while i > 0: | ||
165 | i -= 1 | ||
166 | start = i * 2 | ||
167 | end = start + 2 | ||
168 | chunks.append(buf[start:end]) | ||
169 | if i != 0 and i % 4 == 0: | ||
170 | chunks.append(',') | ||
171 | |||
172 | extra = nr_cpu_ids % 8 | ||
173 | if 0 < extra <= 4: | ||
174 | chunks[0] = chunks[0][0] # Cut off the first 0 | ||
175 | |||
176 | return "".join(chunks) | ||
177 | |||
178 | |||
179 | class LxTimerList(gdb.Command): | ||
180 | """Print /proc/timer_list""" | ||
181 | |||
182 | def __init__(self): | ||
183 | super(LxTimerList, self).__init__("lx-timerlist", gdb.COMMAND_DATA) | ||
184 | |||
185 | def invoke(self, arg, from_tty): | ||
186 | hrtimer_bases = gdb.parse_and_eval("&hrtimer_bases") | ||
187 | max_clock_bases = gdb.parse_and_eval("HRTIMER_MAX_CLOCK_BASES") | ||
188 | |||
189 | text = "Timer List Version: gdb scripts\n" | ||
190 | text += "HRTIMER_MAX_CLOCK_BASES: {}\n".format(max_clock_bases) | ||
191 | text += "now at {} nsecs\n".format(ktime_get()) | ||
192 | |||
193 | for cpu in cpus.each_online_cpu(): | ||
194 | text += print_cpu(hrtimer_bases, cpu, max_clock_bases) | ||
195 | |||
196 | if constants.LX_CONFIG_GENERIC_CLOCKEVENTS: | ||
197 | if constants.LX_CONFIG_GENERIC_CLOCKEVENTS_BROADCAST: | ||
198 | bc_dev = gdb.parse_and_eval("&tick_broadcast_device") | ||
199 | text += print_tickdevice(bc_dev, -1) | ||
200 | text += "\n" | ||
201 | mask = gdb.parse_and_eval("tick_broadcast_mask") | ||
202 | mask = pr_cpumask(mask) | ||
203 | text += "tick_broadcast_mask: {}\n".format(mask) | ||
204 | if constants.LX_CONFIG_TICK_ONESHOT: | ||
205 | mask = gdb.parse_and_eval("tick_broadcast_oneshot_mask") | ||
206 | mask = pr_cpumask(mask) | ||
207 | text += "tick_broadcast_oneshot_mask: {}\n".format(mask) | ||
208 | text += "\n" | ||
209 | |||
210 | tick_cpu_devices = gdb.parse_and_eval("&tick_cpu_device") | ||
211 | for cpu in cpus.each_online_cpu(): | ||
212 | tick_dev = cpus.per_cpu(tick_cpu_devices, cpu) | ||
213 | text += print_tickdevice(tick_dev, cpu) | ||
214 | text += "\n" | ||
215 | |||
216 | gdb.write(text) | ||
217 | |||
218 | |||
219 | LxTimerList() | ||
diff --git a/scripts/gdb/linux/utils.py b/scripts/gdb/linux/utils.py index 50805874cfc3..bc67126118c4 100644 --- a/scripts/gdb/linux/utils.py +++ b/scripts/gdb/linux/utils.py | |||
@@ -66,6 +66,7 @@ Note that TYPE and ELEMENT have to be quoted as strings.""" | |||
66 | return container_of(ptr, gdb.lookup_type(typename.string()).pointer(), | 66 | return container_of(ptr, gdb.lookup_type(typename.string()).pointer(), |
67 | elementname.string()) | 67 | elementname.string()) |
68 | 68 | ||
69 | |||
69 | ContainerOf() | 70 | ContainerOf() |
70 | 71 | ||
71 | 72 | ||
@@ -148,14 +149,14 @@ def get_gdbserver_type(): | |||
148 | def probe_qemu(): | 149 | def probe_qemu(): |
149 | try: | 150 | try: |
150 | return gdb.execute("monitor info version", to_string=True) != "" | 151 | return gdb.execute("monitor info version", to_string=True) != "" |
151 | except: | 152 | except gdb.error: |
152 | return False | 153 | return False |
153 | 154 | ||
154 | def probe_kgdb(): | 155 | def probe_kgdb(): |
155 | try: | 156 | try: |
156 | thread_info = gdb.execute("info thread 2", to_string=True) | 157 | thread_info = gdb.execute("info thread 2", to_string=True) |
157 | return "shadowCPU0" in thread_info | 158 | return "shadowCPU0" in thread_info |
158 | except: | 159 | except gdb.error: |
159 | return False | 160 | return False |
160 | 161 | ||
161 | global gdbserver_type | 162 | global gdbserver_type |
@@ -172,7 +173,7 @@ def get_gdbserver_type(): | |||
172 | def gdb_eval_or_none(expresssion): | 173 | def gdb_eval_or_none(expresssion): |
173 | try: | 174 | try: |
174 | return gdb.parse_and_eval(expresssion) | 175 | return gdb.parse_and_eval(expresssion) |
175 | except: | 176 | except gdb.error: |
176 | return None | 177 | return None |
177 | 178 | ||
178 | 179 | ||
diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py index 6e0b0afd888a..eff5a48ac026 100644 --- a/scripts/gdb/vmlinux-gdb.py +++ b/scripts/gdb/vmlinux-gdb.py | |||
@@ -27,7 +27,11 @@ else: | |||
27 | import linux.modules | 27 | import linux.modules |
28 | import linux.dmesg | 28 | import linux.dmesg |
29 | import linux.tasks | 29 | import linux.tasks |
30 | import linux.config | ||
30 | import linux.cpus | 31 | import linux.cpus |
31 | import linux.lists | 32 | import linux.lists |
33 | import linux.rbtree | ||
32 | import linux.proc | 34 | import linux.proc |
33 | import linux.constants | 35 | import linux.constants |
36 | import linux.timerlist | ||
37 | import linux.clk | ||
diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile index 03b7ce97de14..66c314bc5933 100644 --- a/scripts/genksyms/Makefile +++ b/scripts/genksyms/Makefile | |||
@@ -31,8 +31,8 @@ $(obj)/parse.tab.h: $(src)/parse.y FORCE | |||
31 | endif | 31 | endif |
32 | 32 | ||
33 | # -I needed for generated C source (shipped source) | 33 | # -I needed for generated C source (shipped source) |
34 | HOSTCFLAGS_parse.tab.o := -I$(src) | 34 | HOSTCFLAGS_parse.tab.o := -I $(srctree)/$(src) |
35 | HOSTCFLAGS_lex.lex.o := -I$(src) | 35 | HOSTCFLAGS_lex.lex.o := -I $(srctree)/$(src) |
36 | 36 | ||
37 | # dependencies on generated files need to be listed explicitly | 37 | # dependencies on generated files need to be listed explicitly |
38 | $(obj)/lex.lex.o: $(obj)/parse.tab.h | 38 | $(obj)/lex.lex.o: $(obj)/parse.tab.h |
diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index e007840f45b9..23eff234184f 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* Generate kernel symbol version hashes. | 2 | /* Generate kernel symbol version hashes. |
2 | Copyright 1996, 1997 Linux International. | 3 | Copyright 1996, 1997 Linux International. |
3 | 4 | ||
@@ -7,19 +8,7 @@ | |||
7 | This file was part of the Linux modutils 2.4.22: moved back into the | 8 | This file was part of the Linux modutils 2.4.22: moved back into the |
8 | kernel sources by Rusty Russell/Kai Germaschewski. | 9 | kernel sources by Rusty Russell/Kai Germaschewski. |
9 | 10 | ||
10 | This program is free software; you can redistribute it and/or modify it | 11 | */ |
11 | under the terms of the GNU General Public License as published by the | ||
12 | Free Software Foundation; either version 2 of the License, or (at your | ||
13 | option) any later version. | ||
14 | |||
15 | This program is distributed in the hope that it will be useful, but | ||
16 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
18 | General Public License for more details. | ||
19 | |||
20 | You should have received a copy of the GNU General Public License | ||
21 | along with this program; if not, write to the Free Software Foundation, | ||
22 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
23 | 12 | ||
24 | #include <stdio.h> | 13 | #include <stdio.h> |
25 | #include <string.h> | 14 | #include <string.h> |
diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h index b724a0290c75..2bcdb9bebab4 100644 --- a/scripts/genksyms/genksyms.h +++ b/scripts/genksyms/genksyms.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
1 | /* Generate kernel symbol version hashes. | 2 | /* Generate kernel symbol version hashes. |
2 | Copyright 1996, 1997 Linux International. | 3 | Copyright 1996, 1997 Linux International. |
3 | 4 | ||
@@ -6,19 +7,7 @@ | |||
6 | 7 | ||
7 | This file is part of the Linux modutils. | 8 | This file is part of the Linux modutils. |
8 | 9 | ||
9 | This program is free software; you can redistribute it and/or modify it | 10 | */ |
10 | under the terms of the GNU General Public License as published by the | ||
11 | Free Software Foundation; either version 2 of the License, or (at your | ||
12 | option) any later version. | ||
13 | |||
14 | This program is distributed in the hope that it will be useful, but | ||
15 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | General Public License for more details. | ||
18 | |||
19 | You should have received a copy of the GNU General Public License | ||
20 | along with this program; if not, write to the Free Software Foundation, | ||
21 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
22 | 11 | ||
23 | #ifndef MODUTILS_GENKSYMS_H | 12 | #ifndef MODUTILS_GENKSYMS_H |
24 | #define MODUTILS_GENKSYMS_H 1 | 13 | #define MODUTILS_GENKSYMS_H 1 |
diff --git a/scripts/genksyms/keywords.c b/scripts/genksyms/keywords.c index 9f40bcd17d07..c586d32dd2c3 100644 --- a/scripts/genksyms/keywords.c +++ b/scripts/genksyms/keywords.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | static struct resword { | 2 | static struct resword { |
2 | const char *name; | 3 | const char *name; |
3 | int token; | 4 | int token; |
@@ -24,6 +25,10 @@ static struct resword { | |||
24 | { "__volatile__", VOLATILE_KEYW }, | 25 | { "__volatile__", VOLATILE_KEYW }, |
25 | { "__builtin_va_list", VA_LIST_KEYW }, | 26 | { "__builtin_va_list", VA_LIST_KEYW }, |
26 | 27 | ||
28 | { "__int128", BUILTIN_INT_KEYW }, | ||
29 | { "__int128_t", BUILTIN_INT_KEYW }, | ||
30 | { "__uint128_t", BUILTIN_INT_KEYW }, | ||
31 | |||
27 | // According to rth, c99 defines "_Bool", __restrict", __restrict__", "restrict". KAO | 32 | // According to rth, c99 defines "_Bool", __restrict", __restrict__", "restrict". KAO |
28 | { "_Bool", BOOL_KEYW }, | 33 | { "_Bool", BOOL_KEYW }, |
29 | { "_restrict", RESTRICT_KEYW }, | 34 | { "_restrict", RESTRICT_KEYW }, |
diff --git a/scripts/genksyms/parse.y b/scripts/genksyms/parse.y index 00a6d7e54971..1ebcf52cd0f9 100644 --- a/scripts/genksyms/parse.y +++ b/scripts/genksyms/parse.y | |||
@@ -76,6 +76,7 @@ static void record_compound(struct string_list **keyw, | |||
76 | %token ATTRIBUTE_KEYW | 76 | %token ATTRIBUTE_KEYW |
77 | %token AUTO_KEYW | 77 | %token AUTO_KEYW |
78 | %token BOOL_KEYW | 78 | %token BOOL_KEYW |
79 | %token BUILTIN_INT_KEYW | ||
79 | %token CHAR_KEYW | 80 | %token CHAR_KEYW |
80 | %token CONST_KEYW | 81 | %token CONST_KEYW |
81 | %token DOUBLE_KEYW | 82 | %token DOUBLE_KEYW |
@@ -263,6 +264,7 @@ simple_type_specifier: | |||
263 | | VOID_KEYW | 264 | | VOID_KEYW |
264 | | BOOL_KEYW | 265 | | BOOL_KEYW |
265 | | VA_LIST_KEYW | 266 | | VA_LIST_KEYW |
267 | | BUILTIN_INT_KEYW | ||
266 | | TYPE { (*$1)->tag = SYM_TYPEDEF; $$ = $1; } | 268 | | TYPE { (*$1)->tag = SYM_TYPEDEF; $$ = $1; } |
267 | ; | 269 | ; |
268 | 270 | ||
diff --git a/scripts/get_abi.pl b/scripts/get_abi.pl new file mode 100755 index 000000000000..c738cb795514 --- /dev/null +++ b/scripts/get_abi.pl | |||
@@ -0,0 +1,468 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # SPDX-License-Identifier: GPL-2.0 | ||
3 | |||
4 | use strict; | ||
5 | use Pod::Usage; | ||
6 | use Getopt::Long; | ||
7 | use File::Find; | ||
8 | use Fcntl ':mode'; | ||
9 | |||
10 | my $help; | ||
11 | my $man; | ||
12 | my $debug; | ||
13 | my $prefix="Documentation/ABI"; | ||
14 | |||
15 | GetOptions( | ||
16 | "debug|d+" => \$debug, | ||
17 | "dir=s" => \$prefix, | ||
18 | 'help|?' => \$help, | ||
19 | man => \$man | ||
20 | ) or pod2usage(2); | ||
21 | |||
22 | pod2usage(1) if $help; | ||
23 | pod2usage(-exitstatus => 0, -verbose => 2) if $man; | ||
24 | |||
25 | pod2usage(2) if (scalar @ARGV < 1 || @ARGV > 2); | ||
26 | |||
27 | my ($cmd, $arg) = @ARGV; | ||
28 | |||
29 | pod2usage(2) if ($cmd ne "search" && $cmd ne "rest" && $cmd ne "validate"); | ||
30 | pod2usage(2) if ($cmd eq "search" && !$arg); | ||
31 | |||
32 | require Data::Dumper if ($debug); | ||
33 | |||
34 | my %data; | ||
35 | |||
36 | # | ||
37 | # Displays an error message, printing file name and line | ||
38 | # | ||
39 | sub parse_error($$$$) { | ||
40 | my ($file, $ln, $msg, $data) = @_; | ||
41 | |||
42 | print STDERR "file $file#$ln: $msg at\n\t$data"; | ||
43 | } | ||
44 | |||
45 | # | ||
46 | # Parse an ABI file, storing its contents at %data | ||
47 | # | ||
48 | sub parse_abi { | ||
49 | my $file = $File::Find::name; | ||
50 | |||
51 | my $mode = (stat($file))[2]; | ||
52 | return if ($mode & S_IFDIR); | ||
53 | return if ($file =~ m,/README,); | ||
54 | |||
55 | my $name = $file; | ||
56 | $name =~ s,.*/,,; | ||
57 | |||
58 | my $nametag = "File $name"; | ||
59 | $data{$nametag}->{what} = "File $name"; | ||
60 | $data{$nametag}->{type} = "File"; | ||
61 | $data{$nametag}->{file} = $name; | ||
62 | $data{$nametag}->{filepath} = $file; | ||
63 | $data{$nametag}->{is_file} = 1; | ||
64 | |||
65 | my $type = $file; | ||
66 | $type =~ s,.*/(.*)/.*,$1,; | ||
67 | |||
68 | my $what; | ||
69 | my $new_what; | ||
70 | my $tag; | ||
71 | my $ln; | ||
72 | my $xrefs; | ||
73 | my $space; | ||
74 | my @labels; | ||
75 | my $label; | ||
76 | |||
77 | print STDERR "Opening $file\n" if ($debug > 1); | ||
78 | open IN, $file; | ||
79 | while(<IN>) { | ||
80 | $ln++; | ||
81 | if (m/^(\S+)(:\s*)(.*)/i) { | ||
82 | my $new_tag = lc($1); | ||
83 | my $sep = $2; | ||
84 | my $content = $3; | ||
85 | |||
86 | if (!($new_tag =~ m/(what|where|date|kernelversion|contact|description|users)/)) { | ||
87 | if ($tag eq "description") { | ||
88 | # New "tag" is actually part of | ||
89 | # description. Don't consider it a tag | ||
90 | $new_tag = ""; | ||
91 | } elsif ($tag ne "") { | ||
92 | parse_error($file, $ln, "tag '$tag' is invalid", $_); | ||
93 | } | ||
94 | } | ||
95 | |||
96 | # Invalid, but it is a common mistake | ||
97 | if ($new_tag eq "where") { | ||
98 | parse_error($file, $ln, "tag 'Where' is invalid. Should be 'What:' instead", $_); | ||
99 | $new_tag = "what"; | ||
100 | } | ||
101 | |||
102 | if ($new_tag =~ m/what/) { | ||
103 | $space = ""; | ||
104 | if ($tag =~ m/what/) { | ||
105 | $what .= ", " . $content; | ||
106 | } else { | ||
107 | parse_error($file, $ln, "What '$what' doesn't have a description", "") if ($what && !$data{$what}->{description}); | ||
108 | |||
109 | $what = $content; | ||
110 | $label = $content; | ||
111 | $new_what = 1; | ||
112 | } | ||
113 | push @labels, [($content, $label)]; | ||
114 | $tag = $new_tag; | ||
115 | |||
116 | push @{$data{$nametag}->{xrefs}}, [($content, $label)] if ($data{$nametag}->{what}); | ||
117 | next; | ||
118 | } | ||
119 | |||
120 | if ($tag ne "" && $new_tag) { | ||
121 | $tag = $new_tag; | ||
122 | |||
123 | if ($new_what) { | ||
124 | @{$data{$what}->{label}} = @labels if ($data{$nametag}->{what}); | ||
125 | @labels = (); | ||
126 | $label = ""; | ||
127 | $new_what = 0; | ||
128 | |||
129 | $data{$what}->{type} = $type; | ||
130 | $data{$what}->{file} = $name; | ||
131 | $data{$what}->{filepath} = $file; | ||
132 | print STDERR "\twhat: $what\n" if ($debug > 1); | ||
133 | } | ||
134 | |||
135 | if (!$what) { | ||
136 | parse_error($file, $ln, "'What:' should come first:", $_); | ||
137 | next; | ||
138 | } | ||
139 | if ($tag eq "description") { | ||
140 | next if ($content =~ m/^\s*$/); | ||
141 | if ($content =~ m/^(\s*)(.*)/) { | ||
142 | my $new_content = $2; | ||
143 | $space = $new_tag . $sep . $1; | ||
144 | while ($space =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {} | ||
145 | $space =~ s/./ /g; | ||
146 | $data{$what}->{$tag} .= "$new_content\n"; | ||
147 | } | ||
148 | } else { | ||
149 | $data{$what}->{$tag} = $content; | ||
150 | } | ||
151 | next; | ||
152 | } | ||
153 | } | ||
154 | |||
155 | # Store any contents before tags at the database | ||
156 | if (!$tag && $data{$nametag}->{what}) { | ||
157 | $data{$nametag}->{description} .= $_; | ||
158 | next; | ||
159 | } | ||
160 | |||
161 | if ($tag eq "description") { | ||
162 | if (!$data{$what}->{description}) { | ||
163 | next if (m/^\s*\n/); | ||
164 | if (m/^(\s*)(.*)/) { | ||
165 | $space = $1; | ||
166 | while ($space =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {} | ||
167 | $data{$what}->{$tag} .= "$2\n"; | ||
168 | } | ||
169 | } else { | ||
170 | my $content = $_; | ||
171 | if (m/^\s*\n/) { | ||
172 | $data{$what}->{$tag} .= $content; | ||
173 | next; | ||
174 | } | ||
175 | |||
176 | while ($content =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {} | ||
177 | $space = "" if (!($content =~ s/^($space)//)); | ||
178 | |||
179 | # Compress spaces with tabs | ||
180 | $content =~ s<^ {8}> <\t>; | ||
181 | $content =~ s<^ {1,7}\t> <\t>; | ||
182 | $content =~ s< {1,7}\t> <\t>; | ||
183 | $data{$what}->{$tag} .= $content; | ||
184 | } | ||
185 | next; | ||
186 | } | ||
187 | if (m/^\s*(.*)/) { | ||
188 | $data{$what}->{$tag} .= "\n$1"; | ||
189 | $data{$what}->{$tag} =~ s/\n+$//; | ||
190 | next; | ||
191 | } | ||
192 | |||
193 | # Everything else is error | ||
194 | parse_error($file, $ln, "Unexpected line:", $_); | ||
195 | } | ||
196 | $data{$nametag}->{description} =~ s/^\n+//; | ||
197 | close IN; | ||
198 | } | ||
199 | |||
200 | # | ||
201 | # Outputs the book on ReST format | ||
202 | # | ||
203 | |||
204 | my %labels; | ||
205 | |||
206 | sub output_rest { | ||
207 | foreach my $what (sort { | ||
208 | ($data{$a}->{type} eq "File") cmp ($data{$b}->{type} eq "File") || | ||
209 | $a cmp $b | ||
210 | } keys %data) { | ||
211 | my $type = $data{$what}->{type}; | ||
212 | my $file = $data{$what}->{file}; | ||
213 | my $filepath = $data{$what}->{filepath}; | ||
214 | |||
215 | my $w = $what; | ||
216 | $w =~ s/([\(\)\_\-\*\=\^\~\\])/\\$1/g; | ||
217 | |||
218 | |||
219 | foreach my $p (@{$data{$what}->{label}}) { | ||
220 | my ($content, $label) = @{$p}; | ||
221 | $label = "abi_" . $label . " "; | ||
222 | $label =~ tr/A-Z/a-z/; | ||
223 | |||
224 | # Convert special chars to "_" | ||
225 | $label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g; | ||
226 | $label =~ s,_+,_,g; | ||
227 | $label =~ s,_$,,; | ||
228 | |||
229 | # Avoid duplicated labels | ||
230 | while (defined($labels{$label})) { | ||
231 | my @chars = ("A".."Z", "a".."z"); | ||
232 | $label .= $chars[rand @chars]; | ||
233 | } | ||
234 | $labels{$label} = 1; | ||
235 | |||
236 | $data{$what}->{label} .= $label; | ||
237 | |||
238 | printf ".. _%s:\n\n", $label; | ||
239 | |||
240 | # only one label is enough | ||
241 | last; | ||
242 | } | ||
243 | |||
244 | |||
245 | $filepath =~ s,.*/(.*/.*),\1,;; | ||
246 | $filepath =~ s,[/\-],_,g;; | ||
247 | my $fileref = "abi_file_".$filepath; | ||
248 | |||
249 | if ($type eq "File") { | ||
250 | my $bar = $w; | ||
251 | $bar =~ s/./-/g; | ||
252 | |||
253 | print ".. _$fileref:\n\n"; | ||
254 | print "$w\n$bar\n\n"; | ||
255 | } else { | ||
256 | my @names = split /\s*,\s*/,$w; | ||
257 | |||
258 | my $len = 0; | ||
259 | |||
260 | foreach my $name (@names) { | ||
261 | $len = length($name) if (length($name) > $len); | ||
262 | } | ||
263 | |||
264 | print "What:\n\n"; | ||
265 | |||
266 | print "+-" . "-" x $len . "-+\n"; | ||
267 | foreach my $name (@names) { | ||
268 | printf "| %s", $name . " " x ($len - length($name)) . " |\n"; | ||
269 | print "+-" . "-" x $len . "-+\n"; | ||
270 | } | ||
271 | print "\n"; | ||
272 | } | ||
273 | |||
274 | print "Defined on file :ref:`$file <$fileref>`\n\n" if ($type ne "File"); | ||
275 | |||
276 | my $desc = $data{$what}->{description}; | ||
277 | $desc =~ s/^\s+//; | ||
278 | |||
279 | # Remove title markups from the description, as they won't work | ||
280 | $desc =~ s/\n[\-\*\=\^\~]+\n/\n/g; | ||
281 | |||
282 | if (!($desc =~ /^\s*$/)) { | ||
283 | if ($desc =~ m/\:\n/ || $desc =~ m/\n[\t ]+/ || $desc =~ m/[\x00-\x08\x0b-\x1f\x7b-\xff]/) { | ||
284 | # put everything inside a code block | ||
285 | $desc =~ s/\n/\n /g; | ||
286 | |||
287 | print "::\n\n"; | ||
288 | print " $desc\n\n"; | ||
289 | } else { | ||
290 | # Escape any special chars from description | ||
291 | $desc =~s/([\x00-\x08\x0b-\x1f\x21-\x2a\x2d\x2f\x3c-\x40\x5c\x5e-\x60\x7b-\xff])/\\$1/g; | ||
292 | |||
293 | print "$desc\n\n"; | ||
294 | } | ||
295 | } else { | ||
296 | print "DESCRIPTION MISSING for $what\n\n" if (!$data{$what}->{is_file}); | ||
297 | } | ||
298 | |||
299 | if ($data{$what}->{xrefs}) { | ||
300 | printf "Has the following ABI:\n\n"; | ||
301 | |||
302 | foreach my $p(@{$data{$what}->{xrefs}}) { | ||
303 | my ($content, $label) = @{$p}; | ||
304 | $label = "abi_" . $label . " "; | ||
305 | $label =~ tr/A-Z/a-z/; | ||
306 | |||
307 | # Convert special chars to "_" | ||
308 | $label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g; | ||
309 | $label =~ s,_+,_,g; | ||
310 | $label =~ s,_$,,; | ||
311 | |||
312 | # Escape special chars from content | ||
313 | $content =~s/([\x00-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])/\\$1/g; | ||
314 | |||
315 | print "- :ref:`$content <$label>`\n\n"; | ||
316 | } | ||
317 | } | ||
318 | } | ||
319 | } | ||
320 | |||
321 | # | ||
322 | # Searches for ABI symbols | ||
323 | # | ||
324 | sub search_symbols { | ||
325 | foreach my $what (sort keys %data) { | ||
326 | next if (!($what =~ m/($arg)/)); | ||
327 | |||
328 | my $type = $data{$what}->{type}; | ||
329 | next if ($type eq "File"); | ||
330 | |||
331 | my $file = $data{$what}->{filepath}; | ||
332 | |||
333 | my $bar = $what; | ||
334 | $bar =~ s/./-/g; | ||
335 | |||
336 | print "\n$what\n$bar\n\n"; | ||
337 | |||
338 | my $kernelversion = $data{$what}->{kernelversion}; | ||
339 | my $contact = $data{$what}->{contact}; | ||
340 | my $users = $data{$what}->{users}; | ||
341 | my $date = $data{$what}->{date}; | ||
342 | my $desc = $data{$what}->{description}; | ||
343 | $kernelversion =~ s/^\s+//; | ||
344 | $contact =~ s/^\s+//; | ||
345 | $users =~ s/^\s+//; | ||
346 | $users =~ s/\n//g; | ||
347 | $date =~ s/^\s+//; | ||
348 | $desc =~ s/^\s+//; | ||
349 | |||
350 | printf "Kernel version:\t\t%s\n", $kernelversion if ($kernelversion); | ||
351 | printf "Date:\t\t\t%s\n", $date if ($date); | ||
352 | printf "Contact:\t\t%s\n", $contact if ($contact); | ||
353 | printf "Users:\t\t\t%s\n", $users if ($users); | ||
354 | print "Defined on file:\t$file\n\n"; | ||
355 | print "Description:\n\n$desc"; | ||
356 | } | ||
357 | } | ||
358 | |||
359 | |||
360 | # | ||
361 | # Parses all ABI files located at $prefix dir | ||
362 | # | ||
363 | find({wanted =>\&parse_abi, no_chdir => 1}, $prefix); | ||
364 | |||
365 | print STDERR Data::Dumper->Dump([\%data], [qw(*data)]) if ($debug); | ||
366 | |||
367 | # | ||
368 | # Handles the command | ||
369 | # | ||
370 | if ($cmd eq "rest") { | ||
371 | output_rest; | ||
372 | } elsif ($cmd eq "search") { | ||
373 | search_symbols; | ||
374 | } | ||
375 | |||
376 | |||
377 | __END__ | ||
378 | |||
379 | =head1 NAME | ||
380 | |||
381 | abi_book.pl - parse the Linux ABI files and produce a ReST book. | ||
382 | |||
383 | =head1 SYNOPSIS | ||
384 | |||
385 | B<abi_book.pl> [--debug] [--man] [--help] [--dir=<dir>] <COMAND> [<ARGUMENT>] | ||
386 | |||
387 | Where <COMMAND> can be: | ||
388 | |||
389 | =over 8 | ||
390 | |||
391 | B<search> [SEARCH_REGEX] - search for [SEARCH_REGEX] inside ABI | ||
392 | |||
393 | B<rest> - output the ABI in ReST markup language | ||
394 | |||
395 | B<validate> - validate the ABI contents | ||
396 | |||
397 | =back | ||
398 | |||
399 | =head1 OPTIONS | ||
400 | |||
401 | =over 8 | ||
402 | |||
403 | =item B<--dir> | ||
404 | |||
405 | Changes the location of the ABI search. By default, it uses | ||
406 | the Documentation/ABI directory. | ||
407 | |||
408 | =item B<--debug> | ||
409 | |||
410 | Put the script in verbose mode, useful for debugging. Can be called multiple | ||
411 | times, to increase verbosity. | ||
412 | |||
413 | =item B<--help> | ||
414 | |||
415 | Prints a brief help message and exits. | ||
416 | |||
417 | =item B<--man> | ||
418 | |||
419 | Prints the manual page and exits. | ||
420 | |||
421 | =back | ||
422 | |||
423 | =head1 DESCRIPTION | ||
424 | |||
425 | Parse the Linux ABI files from ABI DIR (usually located at Documentation/ABI), | ||
426 | allowing to search for ABI symbols or to produce a ReST book containing | ||
427 | the Linux ABI documentation. | ||
428 | |||
429 | =head1 EXAMPLES | ||
430 | |||
431 | Search for all stable symbols with the word "usb": | ||
432 | |||
433 | =over 8 | ||
434 | |||
435 | $ scripts/get_abi.pl search usb --dir Documentation/ABI/stable | ||
436 | |||
437 | =back | ||
438 | |||
439 | Search for all symbols that match the regex expression "usb.*cap": | ||
440 | |||
441 | =over 8 | ||
442 | |||
443 | $ scripts/get_abi.pl search usb.*cap | ||
444 | |||
445 | =back | ||
446 | |||
447 | Output all obsoleted symbols in ReST format | ||
448 | |||
449 | =over 8 | ||
450 | |||
451 | $ scripts/get_abi.pl rest --dir Documentation/ABI/obsolete | ||
452 | |||
453 | =back | ||
454 | |||
455 | =head1 BUGS | ||
456 | |||
457 | Report bugs to Mauro Carvalho Chehab <mchehab+samsung@kernel.org> | ||
458 | |||
459 | =head1 COPYRIGHT | ||
460 | |||
461 | Copyright (c) 2016-2019 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>. | ||
462 | |||
463 | License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>. | ||
464 | |||
465 | This is free software: you are free to change and redistribute it. | ||
466 | There is NO WARRANTY, to the extent permitted by law. | ||
467 | |||
468 | =cut | ||
diff --git a/scripts/get_dvb_firmware b/scripts/get_dvb_firmware index f3f230225aba..1a90802410bc 100755 --- a/scripts/get_dvb_firmware +++ b/scripts/get_dvb_firmware | |||
@@ -1,22 +1,9 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-or-later | ||
2 | # DVB firmware extractor | 3 | # DVB firmware extractor |
3 | # | 4 | # |
4 | # (c) 2004 Andrew de Quincey | 5 | # (c) 2004 Andrew de Quincey |
5 | # | 6 | # |
6 | # This program is free software; you can redistribute it and/or modify | ||
7 | # it under the terms of the GNU General Public License as published by | ||
8 | # the Free Software Foundation; either version 2 of the License, or | ||
9 | # (at your option) any later version. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, | ||
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | # | ||
15 | # GNU General Public License for more details. | ||
16 | # | ||
17 | # You should have received a copy of the GNU General Public License | ||
18 | # along with this program; if not, write to the Free Software | ||
19 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | 7 | ||
21 | use File::Temp qw/ tempdir /; | 8 | use File::Temp qw/ tempdir /; |
22 | use IO::Handle; | 9 | use IO::Handle; |
diff --git a/scripts/gfp-translate b/scripts/gfp-translate index c9230e158a8f..b2ce416d944b 100755 --- a/scripts/gfp-translate +++ b/scripts/gfp-translate | |||
@@ -1,7 +1,7 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # Translate the bits making up a GFP mask | 3 | # Translate the bits making up a GFP mask |
3 | # (c) 2009, Mel Gorman <mel@csn.ul.ie> | 4 | # (c) 2009, Mel Gorman <mel@csn.ul.ie> |
4 | # Licensed under the terms of the GNU GPL License version 2 | ||
5 | SOURCE= | 5 | SOURCE= |
6 | GFPMASK=none | 6 | GFPMASK=none |
7 | 7 | ||
diff --git a/scripts/headers.sh b/scripts/headers.sh deleted file mode 100755 index e0f883eb39a2..000000000000 --- a/scripts/headers.sh +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | #!/bin/sh | ||
2 | # SPDX-License-Identifier: GPL-2.0 | ||
3 | # Run headers_$1 command for all suitable architectures | ||
4 | |||
5 | # Stop on error | ||
6 | set -e | ||
7 | |||
8 | do_command() | ||
9 | { | ||
10 | if [ -f ${srctree}/arch/$2/include/asm/Kbuild ]; then | ||
11 | make ARCH=$2 KBUILD_HEADERS=$1 headers_$1 | ||
12 | else | ||
13 | printf "Ignoring arch: %s\n" ${arch} | ||
14 | fi | ||
15 | } | ||
16 | |||
17 | archs=${HDR_ARCH_LIST:-$(ls ${srctree}/arch)} | ||
18 | |||
19 | for arch in ${archs}; do | ||
20 | case ${arch} in | ||
21 | um) # no userspace export | ||
22 | ;; | ||
23 | *) | ||
24 | if [ -d ${srctree}/arch/${arch} ]; then | ||
25 | do_command $1 ${arch} | ||
26 | fi | ||
27 | ;; | ||
28 | esac | ||
29 | done | ||
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh index 593f8879c641..47f6f3ea0771 100755 --- a/scripts/headers_install.sh +++ b/scripts/headers_install.sh | |||
@@ -1,47 +1,39 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | # SPDX-License-Identifier: GPL-2.0 | 2 | # SPDX-License-Identifier: GPL-2.0 |
3 | 3 | ||
4 | if [ $# -lt 2 ] | 4 | if [ $# -ne 2 ] |
5 | then | 5 | then |
6 | echo "Usage: headers_install.sh OUTDIR SRCDIR [FILES...]" | 6 | echo "Usage: headers_install.sh INFILE OUTFILE" |
7 | echo | 7 | echo |
8 | echo "Prepares kernel header files for use by user space, by removing" | 8 | echo "Prepares kernel header files for use by user space, by removing" |
9 | echo "all compiler.h definitions and #includes, removing any" | 9 | echo "all compiler.h definitions and #includes, removing any" |
10 | echo "#ifdef __KERNEL__ sections, and putting __underscores__ around" | 10 | echo "#ifdef __KERNEL__ sections, and putting __underscores__ around" |
11 | echo "asm/inline/volatile keywords." | 11 | echo "asm/inline/volatile keywords." |
12 | echo | 12 | echo |
13 | echo "OUTDIR: directory to write each userspace header FILE to." | 13 | echo "INFILE: header file to operate on" |
14 | echo "SRCDIR: source directory where files are picked." | 14 | echo "OUTFILE: output file which the processed header is writen to" |
15 | echo "FILES: list of header files to operate on." | ||
16 | 15 | ||
17 | exit 1 | 16 | exit 1 |
18 | fi | 17 | fi |
19 | 18 | ||
20 | # Grab arguments | 19 | # Grab arguments |
20 | INFILE=$1 | ||
21 | OUTFILE=$2 | ||
22 | TMPFILE=$OUTFILE.tmp | ||
21 | 23 | ||
22 | OUTDIR="$1" | 24 | trap 'rm -f $OUTFILE $TMPFILE' EXIT |
23 | shift | ||
24 | SRCDIR="$1" | ||
25 | shift | ||
26 | 25 | ||
27 | # Iterate through files listed on command line | 26 | sed -E -e ' |
27 | s/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g | ||
28 | s/__attribute_const__([[:space:]]|$)/\1/g | ||
29 | s@^#include <linux/compiler(|_types).h>@@ | ||
30 | s/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g | ||
31 | s/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g | ||
32 | s@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @ | ||
33 | ' $INFILE > $TMPFILE || exit 1 | ||
28 | 34 | ||
29 | FILE= | 35 | scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE |
30 | trap 'rm -f "$OUTDIR/$FILE" "$OUTDIR/$FILE.sed"' EXIT | 36 | [ $? -gt 1 ] && exit 1 |
31 | for i in "$@" | 37 | |
32 | do | 38 | rm -f $TMPFILE |
33 | FILE="$(basename "$i")" | ||
34 | sed -E \ | ||
35 | -e 's/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g' \ | ||
36 | -e 's/__attribute_const__([[:space:]]|$)/\1/g' \ | ||
37 | -e 's@^#include <linux/compiler(|_types).h>@@' \ | ||
38 | -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ | ||
39 | -e 's/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g' \ | ||
40 | -e 's@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @' \ | ||
41 | "$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1 | ||
42 | scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \ | ||
43 | > "$OUTDIR/$FILE" | ||
44 | [ $? -gt 1 ] && exit 1 | ||
45 | rm -f "$OUTDIR/$FILE.sed" | ||
46 | done | ||
47 | trap - EXIT | 39 | trap - EXIT |
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index e17837f1d3f2..ae6504d07fd6 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c | |||
@@ -150,6 +150,9 @@ static int read_symbol(FILE *in, struct sym_entry *s) | |||
150 | /* exclude debugging symbols */ | 150 | /* exclude debugging symbols */ |
151 | else if (stype == 'N' || stype == 'n') | 151 | else if (stype == 'N' || stype == 'n') |
152 | return -1; | 152 | return -1; |
153 | /* exclude s390 kasan local symbols */ | ||
154 | else if (!strncmp(sym, ".LASANPC", 8)) | ||
155 | return -1; | ||
153 | 156 | ||
154 | /* include the type field in the symbol name, so that it gets | 157 | /* include the type field in the symbol name, so that it gets |
155 | * compressed together */ | 158 | * compressed together */ |
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile index 7c5dc31c1d95..ab30fe724c43 100644 --- a/scripts/kconfig/Makefile +++ b/scripts/kconfig/Makefile | |||
@@ -12,6 +12,10 @@ else | |||
12 | Kconfig := Kconfig | 12 | Kconfig := Kconfig |
13 | endif | 13 | endif |
14 | 14 | ||
15 | ifndef KBUILD_DEFCONFIG | ||
16 | KBUILD_DEFCONFIG := defconfig | ||
17 | endif | ||
18 | |||
15 | ifeq ($(quiet),silent_) | 19 | ifeq ($(quiet),silent_) |
16 | silent := -s | 20 | silent := -s |
17 | endif | 21 | endif |
@@ -74,9 +78,6 @@ savedefconfig: $(obj)/conf | |||
74 | $< $(silent) --$@=defconfig $(Kconfig) | 78 | $< $(silent) --$@=defconfig $(Kconfig) |
75 | 79 | ||
76 | defconfig: $(obj)/conf | 80 | defconfig: $(obj)/conf |
77 | ifeq ($(KBUILD_DEFCONFIG),) | ||
78 | $< $(silent) --defconfig $(Kconfig) | ||
79 | else | ||
80 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),) | 81 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),) |
81 | @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'" | 82 | @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'" |
82 | $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig) | 83 | $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig) |
@@ -84,7 +85,6 @@ else | |||
84 | @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'" | 85 | @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'" |
85 | $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) | 86 | $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG) |
86 | endif | 87 | endif |
87 | endif | ||
88 | 88 | ||
89 | %_defconfig: $(obj)/conf | 89 | %_defconfig: $(obj)/conf |
90 | $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) | 90 | $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig) |
@@ -147,8 +147,8 @@ common-objs := confdata.o expr.o lexer.lex.o parser.tab.o preprocess.o \ | |||
147 | symbol.o | 147 | symbol.o |
148 | 148 | ||
149 | $(obj)/lexer.lex.o: $(obj)/parser.tab.h | 149 | $(obj)/lexer.lex.o: $(obj)/parser.tab.h |
150 | HOSTCFLAGS_lexer.lex.o := -I$(src) | 150 | HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src) |
151 | HOSTCFLAGS_parser.tab.o := -I$(src) | 151 | HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src) |
152 | 152 | ||
153 | # conf: Used for defconfig, oldconfig and related targets | 153 | # conf: Used for defconfig, oldconfig and related targets |
154 | hostprogs-y += conf | 154 | hostprogs-y += conf |
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index ef3678c24bab..40e16e871ae2 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
@@ -90,7 +90,7 @@ static int conf_askvalue(struct symbol *sym, const char *def) | |||
90 | line[0] = '\n'; | 90 | line[0] = '\n'; |
91 | line[1] = 0; | 91 | line[1] = 0; |
92 | 92 | ||
93 | if (!sym_is_changable(sym)) { | 93 | if (!sym_is_changeable(sym)) { |
94 | printf("%s\n", def); | 94 | printf("%s\n", def); |
95 | line[0] = '\n'; | 95 | line[0] = '\n'; |
96 | line[1] = 0; | 96 | line[1] = 0; |
@@ -234,7 +234,7 @@ static int conf_choice(struct menu *menu) | |||
234 | 234 | ||
235 | sym = menu->sym; | 235 | sym = menu->sym; |
236 | is_new = !sym_has_value(sym); | 236 | is_new = !sym_has_value(sym); |
237 | if (sym_is_changable(sym)) { | 237 | if (sym_is_changeable(sym)) { |
238 | conf_sym(menu); | 238 | conf_sym(menu); |
239 | sym_calc_value(sym); | 239 | sym_calc_value(sym); |
240 | switch (sym_get_tristate_value(sym)) { | 240 | switch (sym_get_tristate_value(sym)) { |
@@ -418,7 +418,7 @@ static void check_conf(struct menu *menu) | |||
418 | 418 | ||
419 | sym = menu->sym; | 419 | sym = menu->sym; |
420 | if (sym && !sym_has_value(sym)) { | 420 | if (sym && !sym_has_value(sym)) { |
421 | if (sym_is_changable(sym) || | 421 | if (sym_is_changeable(sym) || |
422 | (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { | 422 | (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { |
423 | if (input_mode == listnewconfig) { | 423 | if (input_mode == listnewconfig) { |
424 | if (sym->name) { | 424 | if (sym->name) { |
@@ -451,7 +451,7 @@ static struct option long_opts[] = { | |||
451 | {"oldaskconfig", no_argument, NULL, oldaskconfig}, | 451 | {"oldaskconfig", no_argument, NULL, oldaskconfig}, |
452 | {"oldconfig", no_argument, NULL, oldconfig}, | 452 | {"oldconfig", no_argument, NULL, oldconfig}, |
453 | {"syncconfig", no_argument, NULL, syncconfig}, | 453 | {"syncconfig", no_argument, NULL, syncconfig}, |
454 | {"defconfig", optional_argument, NULL, defconfig}, | 454 | {"defconfig", required_argument, NULL, defconfig}, |
455 | {"savedefconfig", required_argument, NULL, savedefconfig}, | 455 | {"savedefconfig", required_argument, NULL, savedefconfig}, |
456 | {"allnoconfig", no_argument, NULL, allnoconfig}, | 456 | {"allnoconfig", no_argument, NULL, allnoconfig}, |
457 | {"allyesconfig", no_argument, NULL, allyesconfig}, | 457 | {"allyesconfig", no_argument, NULL, allyesconfig}, |
@@ -562,8 +562,6 @@ int main(int ac, char **av) | |||
562 | 562 | ||
563 | switch (input_mode) { | 563 | switch (input_mode) { |
564 | case defconfig: | 564 | case defconfig: |
565 | if (!defconfig_file) | ||
566 | defconfig_file = conf_get_default_confname(); | ||
567 | if (conf_read(defconfig_file)) { | 565 | if (conf_read(defconfig_file)) { |
568 | fprintf(stderr, | 566 | fprintf(stderr, |
569 | "***\n" | 567 | "***\n" |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 08ba146a83c5..501fdcc5e999 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> | 3 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <sys/mman.h> | ||
6 | #include <sys/stat.h> | 7 | #include <sys/stat.h> |
7 | #include <ctype.h> | 8 | #include <ctype.h> |
8 | #include <errno.h> | 9 | #include <errno.h> |
@@ -36,6 +37,52 @@ static bool is_dir(const char *path) | |||
36 | return S_ISDIR(st.st_mode); | 37 | return S_ISDIR(st.st_mode); |
37 | } | 38 | } |
38 | 39 | ||
40 | /* return true if the given two files are the same, false otherwise */ | ||
41 | static bool is_same(const char *file1, const char *file2) | ||
42 | { | ||
43 | int fd1, fd2; | ||
44 | struct stat st1, st2; | ||
45 | void *map1, *map2; | ||
46 | bool ret = false; | ||
47 | |||
48 | fd1 = open(file1, O_RDONLY); | ||
49 | if (fd1 < 0) | ||
50 | return ret; | ||
51 | |||
52 | fd2 = open(file2, O_RDONLY); | ||
53 | if (fd2 < 0) | ||
54 | goto close1; | ||
55 | |||
56 | ret = fstat(fd1, &st1); | ||
57 | if (ret) | ||
58 | goto close2; | ||
59 | ret = fstat(fd2, &st2); | ||
60 | if (ret) | ||
61 | goto close2; | ||
62 | |||
63 | if (st1.st_size != st2.st_size) | ||
64 | goto close2; | ||
65 | |||
66 | map1 = mmap(NULL, st1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0); | ||
67 | if (map1 == MAP_FAILED) | ||
68 | goto close2; | ||
69 | |||
70 | map2 = mmap(NULL, st2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0); | ||
71 | if (map2 == MAP_FAILED) | ||
72 | goto close2; | ||
73 | |||
74 | if (bcmp(map1, map2, st1.st_size)) | ||
75 | goto close2; | ||
76 | |||
77 | ret = true; | ||
78 | close2: | ||
79 | close(fd2); | ||
80 | close1: | ||
81 | close(fd1); | ||
82 | |||
83 | return ret; | ||
84 | } | ||
85 | |||
39 | /* | 86 | /* |
40 | * Create the parent directory of the given path. | 87 | * Create the parent directory of the given path. |
41 | * | 88 | * |
@@ -130,8 +177,6 @@ static void conf_message(const char *fmt, ...) | |||
130 | static const char *conf_filename; | 177 | static const char *conf_filename; |
131 | static int conf_lineno, conf_warnings; | 178 | static int conf_lineno, conf_warnings; |
132 | 179 | ||
133 | const char conf_defname[] = "arch/$(ARCH)/defconfig"; | ||
134 | |||
135 | static void conf_warning(const char *fmt, ...) | 180 | static void conf_warning(const char *fmt, ...) |
136 | { | 181 | { |
137 | va_list ap; | 182 | va_list ap; |
@@ -179,28 +224,13 @@ const char *conf_get_configname(void) | |||
179 | return name ? name : ".config"; | 224 | return name ? name : ".config"; |
180 | } | 225 | } |
181 | 226 | ||
182 | const char *conf_get_autoconfig_name(void) | 227 | static const char *conf_get_autoconfig_name(void) |
183 | { | 228 | { |
184 | char *name = getenv("KCONFIG_AUTOCONFIG"); | 229 | char *name = getenv("KCONFIG_AUTOCONFIG"); |
185 | 230 | ||
186 | return name ? name : "include/config/auto.conf"; | 231 | return name ? name : "include/config/auto.conf"; |
187 | } | 232 | } |
188 | 233 | ||
189 | char *conf_get_default_confname(void) | ||
190 | { | ||
191 | static char fullname[PATH_MAX+1]; | ||
192 | char *env, *name; | ||
193 | |||
194 | name = expand_string(conf_defname); | ||
195 | env = getenv(SRCTREE); | ||
196 | if (env) { | ||
197 | sprintf(fullname, "%s/%s", env, name); | ||
198 | if (is_present(fullname)) | ||
199 | return fullname; | ||
200 | } | ||
201 | return name; | ||
202 | } | ||
203 | |||
204 | static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) | 234 | static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) |
205 | { | 235 | { |
206 | char *p2; | 236 | char *p2; |
@@ -504,11 +534,9 @@ int conf_read(const char *name) | |||
504 | switch (sym->type) { | 534 | switch (sym->type) { |
505 | case S_BOOLEAN: | 535 | case S_BOOLEAN: |
506 | case S_TRISTATE: | 536 | case S_TRISTATE: |
507 | if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym)) | 537 | if (sym->def[S_DEF_USER].tri == sym_get_tristate_value(sym)) |
508 | break; | ||
509 | if (!sym_is_choice(sym)) | ||
510 | continue; | 538 | continue; |
511 | /* fall through */ | 539 | break; |
512 | default: | 540 | default: |
513 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) | 541 | if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) |
514 | continue; | 542 | continue; |
@@ -766,7 +794,7 @@ int conf_write_defconfig(const char *filename) | |||
766 | goto next_menu; | 794 | goto next_menu; |
767 | sym->flags &= ~SYMBOL_WRITE; | 795 | sym->flags &= ~SYMBOL_WRITE; |
768 | /* If we cannot change the symbol - skip */ | 796 | /* If we cannot change the symbol - skip */ |
769 | if (!sym_is_changable(sym)) | 797 | if (!sym_is_changeable(sym)) |
770 | goto next_menu; | 798 | goto next_menu; |
771 | /* If symbol equals to default value - skip */ | 799 | /* If symbol equals to default value - skip */ |
772 | if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0) | 800 | if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0) |
@@ -817,40 +845,35 @@ int conf_write(const char *name) | |||
817 | FILE *out; | 845 | FILE *out; |
818 | struct symbol *sym; | 846 | struct symbol *sym; |
819 | struct menu *menu; | 847 | struct menu *menu; |
820 | const char *basename; | ||
821 | const char *str; | 848 | const char *str; |
822 | char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8]; | 849 | char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1]; |
823 | char *env; | 850 | char *env; |
851 | bool need_newline = false; | ||
852 | |||
853 | if (!name) | ||
854 | name = conf_get_configname(); | ||
855 | |||
856 | if (!*name) { | ||
857 | fprintf(stderr, "config name is empty\n"); | ||
858 | return -1; | ||
859 | } | ||
860 | |||
861 | if (is_dir(name)) { | ||
862 | fprintf(stderr, "%s: Is a directory\n", name); | ||
863 | return -1; | ||
864 | } | ||
865 | |||
866 | if (make_parent_dir(name)) | ||
867 | return -1; | ||
824 | 868 | ||
825 | dirname[0] = 0; | ||
826 | if (name && name[0]) { | ||
827 | char *slash; | ||
828 | |||
829 | if (is_dir(name)) { | ||
830 | strcpy(dirname, name); | ||
831 | strcat(dirname, "/"); | ||
832 | basename = conf_get_configname(); | ||
833 | } else if ((slash = strrchr(name, '/'))) { | ||
834 | int size = slash - name + 1; | ||
835 | memcpy(dirname, name, size); | ||
836 | dirname[size] = 0; | ||
837 | if (slash[1]) | ||
838 | basename = slash + 1; | ||
839 | else | ||
840 | basename = conf_get_configname(); | ||
841 | } else | ||
842 | basename = name; | ||
843 | } else | ||
844 | basename = conf_get_configname(); | ||
845 | |||
846 | sprintf(newname, "%s%s", dirname, basename); | ||
847 | env = getenv("KCONFIG_OVERWRITECONFIG"); | 869 | env = getenv("KCONFIG_OVERWRITECONFIG"); |
848 | if (!env || !*env) { | 870 | if (env && *env) { |
849 | sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid()); | ||
850 | out = fopen(tmpname, "w"); | ||
851 | } else { | ||
852 | *tmpname = 0; | 871 | *tmpname = 0; |
853 | out = fopen(newname, "w"); | 872 | out = fopen(name, "w"); |
873 | } else { | ||
874 | snprintf(tmpname, sizeof(tmpname), "%s.%d.tmp", | ||
875 | name, (int)getpid()); | ||
876 | out = fopen(tmpname, "w"); | ||
854 | } | 877 | } |
855 | if (!out) | 878 | if (!out) |
856 | return 1; | 879 | return 1; |
@@ -871,12 +894,16 @@ int conf_write(const char *name) | |||
871 | "#\n" | 894 | "#\n" |
872 | "# %s\n" | 895 | "# %s\n" |
873 | "#\n", str); | 896 | "#\n", str); |
897 | need_newline = false; | ||
874 | } else if (!(sym->flags & SYMBOL_CHOICE)) { | 898 | } else if (!(sym->flags & SYMBOL_CHOICE)) { |
875 | sym_calc_value(sym); | 899 | sym_calc_value(sym); |
876 | if (!(sym->flags & SYMBOL_WRITE)) | 900 | if (!(sym->flags & SYMBOL_WRITE)) |
877 | goto next; | 901 | goto next; |
902 | if (need_newline) { | ||
903 | fprintf(out, "\n"); | ||
904 | need_newline = false; | ||
905 | } | ||
878 | sym->flags &= ~SYMBOL_WRITE; | 906 | sym->flags &= ~SYMBOL_WRITE; |
879 | |||
880 | conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); | 907 | conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); |
881 | } | 908 | } |
882 | 909 | ||
@@ -888,6 +915,12 @@ next: | |||
888 | if (menu->next) | 915 | if (menu->next) |
889 | menu = menu->next; | 916 | menu = menu->next; |
890 | else while ((menu = menu->parent)) { | 917 | else while ((menu = menu->parent)) { |
918 | if (!menu->sym && menu_is_visible(menu) && | ||
919 | menu != &rootmenu) { | ||
920 | str = menu_get_prompt(menu); | ||
921 | fprintf(out, "# end of %s\n", str); | ||
922 | need_newline = true; | ||
923 | } | ||
891 | if (menu->next) { | 924 | if (menu->next) { |
892 | menu = menu->next; | 925 | menu = menu->next; |
893 | break; | 926 | break; |
@@ -897,14 +930,20 @@ next: | |||
897 | fclose(out); | 930 | fclose(out); |
898 | 931 | ||
899 | if (*tmpname) { | 932 | if (*tmpname) { |
900 | strcat(dirname, basename); | 933 | if (is_same(name, tmpname)) { |
901 | strcat(dirname, ".old"); | 934 | conf_message("No change to %s", name); |
902 | rename(newname, dirname); | 935 | unlink(tmpname); |
903 | if (rename(tmpname, newname)) | 936 | sym_set_change_count(0); |
937 | return 0; | ||
938 | } | ||
939 | |||
940 | snprintf(oldname, sizeof(oldname), "%s.old", name); | ||
941 | rename(name, oldname); | ||
942 | if (rename(tmpname, name)) | ||
904 | return 1; | 943 | return 1; |
905 | } | 944 | } |
906 | 945 | ||
907 | conf_message("configuration written to %s", newname); | 946 | conf_message("configuration written to %s", name); |
908 | 947 | ||
909 | sym_set_change_count(0); | 948 | sym_set_change_count(0); |
910 | 949 | ||
@@ -917,8 +956,6 @@ static int conf_write_dep(const char *name) | |||
917 | struct file *file; | 956 | struct file *file; |
918 | FILE *out; | 957 | FILE *out; |
919 | 958 | ||
920 | if (!name) | ||
921 | name = ".kconfig.d"; | ||
922 | out = fopen("..config.tmp", "w"); | 959 | out = fopen("..config.tmp", "w"); |
923 | if (!out) | 960 | if (!out) |
924 | return 1; | 961 | return 1; |
diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c index 5d4ecf309ee4..e36b342f1065 100644 --- a/scripts/kconfig/gconf.c +++ b/scripts/kconfig/gconf.c | |||
@@ -638,7 +638,7 @@ on_set_option_mode3_activate(GtkMenuItem *menuitem, gpointer user_data) | |||
638 | void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data) | 638 | void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data) |
639 | { | 639 | { |
640 | GtkWidget *dialog; | 640 | GtkWidget *dialog; |
641 | const gchar *intro_text = | 641 | const gchar *intro_text = |
642 | "Welcome to gkc, the GTK+ graphical configuration tool\n" | 642 | "Welcome to gkc, the GTK+ graphical configuration tool\n" |
643 | "For each option, a blank box indicates the feature is disabled, a\n" | 643 | "For each option, a blank box indicates the feature is disabled, a\n" |
644 | "check indicates it is enabled, and a dot indicates that it is to\n" | 644 | "check indicates it is enabled, and a dot indicates that it is to\n" |
diff --git a/scripts/kconfig/lexer.l b/scripts/kconfig/lexer.l index c9df1c8b9824..6354c905b006 100644 --- a/scripts/kconfig/lexer.l +++ b/scripts/kconfig/lexer.l | |||
@@ -378,7 +378,8 @@ FILE *zconf_fopen(const char *name) | |||
378 | if (!f && name != NULL && name[0] != '/') { | 378 | if (!f && name != NULL && name[0] != '/') { |
379 | env = getenv(SRCTREE); | 379 | env = getenv(SRCTREE); |
380 | if (env) { | 380 | if (env) { |
381 | sprintf(fullname, "%s/%s", env, name); | 381 | snprintf(fullname, sizeof(fullname), |
382 | "%s/%s", env, name); | ||
382 | f = fopen(fullname, "r"); | 383 | f = fopen(fullname, "r"); |
383 | } | 384 | } |
384 | } | 385 | } |
diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h index d871539e4b45..4fb16f316626 100644 --- a/scripts/kconfig/lkc.h +++ b/scripts/kconfig/lkc.h | |||
@@ -49,8 +49,6 @@ const char *zconf_curname(void); | |||
49 | 49 | ||
50 | /* confdata.c */ | 50 | /* confdata.c */ |
51 | const char *conf_get_configname(void); | 51 | const char *conf_get_configname(void); |
52 | const char *conf_get_autoconfig_name(void); | ||
53 | char *conf_get_default_confname(void); | ||
54 | void sym_set_change_count(int count); | 52 | void sym_set_change_count(int count); |
55 | void sym_add_change_count(int count); | 53 | void sym_add_change_count(int count); |
56 | bool conf_set_all_new_symbols(enum conf_def_mode mode); | 54 | bool conf_set_all_new_symbols(enum conf_def_mode mode); |
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h index 86c267540ccc..f9ab98238aef 100644 --- a/scripts/kconfig/lkc_proto.h +++ b/scripts/kconfig/lkc_proto.h | |||
@@ -42,7 +42,7 @@ tristate sym_toggle_tristate_value(struct symbol *sym); | |||
42 | bool sym_string_valid(struct symbol *sym, const char *newval); | 42 | bool sym_string_valid(struct symbol *sym, const char *newval); |
43 | bool sym_string_within_range(struct symbol *sym, const char *str); | 43 | bool sym_string_within_range(struct symbol *sym, const char *str); |
44 | bool sym_set_string_value(struct symbol *sym, const char *newval); | 44 | bool sym_set_string_value(struct symbol *sym, const char *newval); |
45 | bool sym_is_changable(struct symbol *sym); | 45 | bool sym_is_changeable(struct symbol *sym); |
46 | struct property * sym_get_choice_prop(struct symbol *sym); | 46 | struct property * sym_get_choice_prop(struct symbol *sym); |
47 | const char * sym_get_string_value(struct symbol *sym); | 47 | const char * sym_get_string_value(struct symbol *sym); |
48 | 48 | ||
@@ -58,7 +58,6 @@ void env_write_dep(FILE *f, const char *auto_conf_name); | |||
58 | void variable_add(const char *name, const char *value, | 58 | void variable_add(const char *name, const char *value, |
59 | enum variable_flavor flavor); | 59 | enum variable_flavor flavor); |
60 | void variable_all_del(void); | 60 | void variable_all_del(void); |
61 | char *expand_string(const char *in); | ||
62 | char *expand_dollar(const char **str); | 61 | char *expand_dollar(const char **str); |
63 | char *expand_one_token(const char **str); | 62 | char *expand_one_token(const char **str); |
64 | 63 | ||
diff --git a/scripts/kconfig/lxdialog/BIG.FAT.WARNING b/scripts/kconfig/lxdialog/BIG.FAT.WARNING index a8999d82bdb3..7cb5a7ec93d2 100644 --- a/scripts/kconfig/lxdialog/BIG.FAT.WARNING +++ b/scripts/kconfig/lxdialog/BIG.FAT.WARNING | |||
@@ -1,4 +1,4 @@ | |||
1 | This is NOT the official version of dialog. This version has been | 1 | This is NOT the official version of dialog. This version has been |
2 | significantly modified from the original. It is for use by the Linux | 2 | significantly modified from the original. It is for use by the Linux |
3 | kernel configuration script. Please do not bother Savio Lam with | 3 | kernel configuration script. Please do not bother Savio Lam with |
4 | questions about this program. | 4 | questions about this program. |
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c index 5f8c82a4cb08..49c26ea9dd98 100644 --- a/scripts/kconfig/mconf.c +++ b/scripts/kconfig/mconf.c | |||
@@ -536,7 +536,7 @@ static void build_conf(struct menu *menu) | |||
536 | } | 536 | } |
537 | 537 | ||
538 | val = sym_get_tristate_value(sym); | 538 | val = sym_get_tristate_value(sym); |
539 | if (sym_is_changable(sym)) { | 539 | if (sym_is_changeable(sym)) { |
540 | switch (type) { | 540 | switch (type) { |
541 | case S_BOOLEAN: | 541 | case S_BOOLEAN: |
542 | item_make("[%c]", val == no ? ' ' : '*'); | 542 | item_make("[%c]", val == no ? ' ' : '*'); |
@@ -587,7 +587,7 @@ static void build_conf(struct menu *menu) | |||
587 | } else { | 587 | } else { |
588 | switch (type) { | 588 | switch (type) { |
589 | case S_BOOLEAN: | 589 | case S_BOOLEAN: |
590 | if (sym_is_changable(sym)) | 590 | if (sym_is_changeable(sym)) |
591 | item_make("[%c]", val == no ? ' ' : '*'); | 591 | item_make("[%c]", val == no ? ' ' : '*'); |
592 | else | 592 | else |
593 | item_make("-%c-", val == no ? ' ' : '*'); | 593 | item_make("-%c-", val == no ? ' ' : '*'); |
@@ -600,7 +600,7 @@ static void build_conf(struct menu *menu) | |||
600 | case mod: ch = 'M'; break; | 600 | case mod: ch = 'M'; break; |
601 | default: ch = ' '; break; | 601 | default: ch = ' '; break; |
602 | } | 602 | } |
603 | if (sym_is_changable(sym)) { | 603 | if (sym_is_changeable(sym)) { |
604 | if (sym->rev_dep.tri == mod) | 604 | if (sym->rev_dep.tri == mod) |
605 | item_make("{%c}", ch); | 605 | item_make("{%c}", ch); |
606 | else | 606 | else |
@@ -617,7 +617,7 @@ static void build_conf(struct menu *menu) | |||
617 | if (tmp < 0) | 617 | if (tmp < 0) |
618 | tmp = 0; | 618 | tmp = 0; |
619 | item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), | 619 | item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), |
620 | (sym_has_value(sym) || !sym_is_changable(sym)) ? | 620 | (sym_has_value(sym) || !sym_is_changeable(sym)) ? |
621 | "" : " (NEW)"); | 621 | "" : " (NEW)"); |
622 | item_set_tag('s'); | 622 | item_set_tag('s'); |
623 | item_set_data(menu); | 623 | item_set_data(menu); |
@@ -625,7 +625,7 @@ static void build_conf(struct menu *menu) | |||
625 | } | 625 | } |
626 | } | 626 | } |
627 | item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), | 627 | item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), |
628 | (sym_has_value(sym) || !sym_is_changable(sym)) ? | 628 | (sym_has_value(sym) || !sym_is_changeable(sym)) ? |
629 | "" : " (NEW)"); | 629 | "" : " (NEW)"); |
630 | if (menu->prompt->type == P_MENU) { | 630 | if (menu->prompt->type == P_MENU) { |
631 | item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); | 631 | item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); |
@@ -936,7 +936,7 @@ static void conf_save(void) | |||
936 | set_config_filename(dialog_input_result); | 936 | set_config_filename(dialog_input_result); |
937 | return; | 937 | return; |
938 | } | 938 | } |
939 | show_textbox(NULL, "Can't create file! Probably a nonexistent directory.", 5, 60); | 939 | show_textbox(NULL, "Can't create file!", 5, 60); |
940 | break; | 940 | break; |
941 | case 1: | 941 | case 1: |
942 | show_helptext("Save Alternate Configuration", save_config_help); | 942 | show_helptext("Save Alternate Configuration", save_config_help); |
diff --git a/scripts/kconfig/nconf-cfg.sh b/scripts/kconfig/nconf-cfg.sh index 001559ef0a60..001559ef0a60 100644..100755 --- a/scripts/kconfig/nconf-cfg.sh +++ b/scripts/kconfig/nconf-cfg.sh | |||
diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c index ac92c0ded6c5..b7c1ef757178 100644 --- a/scripts/kconfig/nconf.c +++ b/scripts/kconfig/nconf.c | |||
@@ -803,7 +803,7 @@ static void build_conf(struct menu *menu) | |||
803 | } | 803 | } |
804 | 804 | ||
805 | val = sym_get_tristate_value(sym); | 805 | val = sym_get_tristate_value(sym); |
806 | if (sym_is_changable(sym)) { | 806 | if (sym_is_changeable(sym)) { |
807 | switch (type) { | 807 | switch (type) { |
808 | case S_BOOLEAN: | 808 | case S_BOOLEAN: |
809 | item_make(menu, 't', "[%c]", | 809 | item_make(menu, 't', "[%c]", |
@@ -857,7 +857,7 @@ static void build_conf(struct menu *menu) | |||
857 | } else { | 857 | } else { |
858 | switch (type) { | 858 | switch (type) { |
859 | case S_BOOLEAN: | 859 | case S_BOOLEAN: |
860 | if (sym_is_changable(sym)) | 860 | if (sym_is_changeable(sym)) |
861 | item_make(menu, 't', "[%c]", | 861 | item_make(menu, 't', "[%c]", |
862 | val == no ? ' ' : '*'); | 862 | val == no ? ' ' : '*'); |
863 | else | 863 | else |
@@ -876,7 +876,7 @@ static void build_conf(struct menu *menu) | |||
876 | ch = ' '; | 876 | ch = ' '; |
877 | break; | 877 | break; |
878 | } | 878 | } |
879 | if (sym_is_changable(sym)) { | 879 | if (sym_is_changeable(sym)) { |
880 | if (sym->rev_dep.tri == mod) | 880 | if (sym->rev_dep.tri == mod) |
881 | item_make(menu, | 881 | item_make(menu, |
882 | 't', "{%c}", ch); | 882 | 't', "{%c}", ch); |
@@ -896,14 +896,14 @@ static void build_conf(struct menu *menu) | |||
896 | item_add_str("%*c%s%s", tmp, ' ', | 896 | item_add_str("%*c%s%s", tmp, ' ', |
897 | menu_get_prompt(menu), | 897 | menu_get_prompt(menu), |
898 | (sym_has_value(sym) || | 898 | (sym_has_value(sym) || |
899 | !sym_is_changable(sym)) ? "" : | 899 | !sym_is_changeable(sym)) ? "" : |
900 | " (NEW)"); | 900 | " (NEW)"); |
901 | goto conf_childs; | 901 | goto conf_childs; |
902 | } | 902 | } |
903 | } | 903 | } |
904 | item_add_str("%*c%s%s", indent + 1, ' ', | 904 | item_add_str("%*c%s%s", indent + 1, ' ', |
905 | menu_get_prompt(menu), | 905 | menu_get_prompt(menu), |
906 | (sym_has_value(sym) || !sym_is_changable(sym)) ? | 906 | (sym_has_value(sym) || !sym_is_changeable(sym)) ? |
907 | "" : " (NEW)"); | 907 | "" : " (NEW)"); |
908 | if (menu->prompt && menu->prompt->type == P_MENU) { | 908 | if (menu->prompt && menu->prompt->type == P_MENU) { |
909 | item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); | 909 | item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); |
@@ -1438,8 +1438,7 @@ static void conf_save(void) | |||
1438 | set_config_filename(dialog_input_result); | 1438 | set_config_filename(dialog_input_result); |
1439 | return; | 1439 | return; |
1440 | } | 1440 | } |
1441 | btn_dialog(main_window, "Can't create file! " | 1441 | btn_dialog(main_window, "Can't create file!", |
1442 | "Probably a nonexistent directory.", | ||
1443 | 1, "<OK>"); | 1442 | 1, "<OK>"); |
1444 | break; | 1443 | break; |
1445 | case 1: | 1444 | case 1: |
diff --git a/scripts/kconfig/preprocess.c b/scripts/kconfig/preprocess.c index 592dfbfa9fb3..0243086fb168 100644 --- a/scripts/kconfig/preprocess.c +++ b/scripts/kconfig/preprocess.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) | 15 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) |
16 | 16 | ||
17 | static char *expand_string_with_args(const char *in, int argc, char *argv[]); | 17 | static char *expand_string_with_args(const char *in, int argc, char *argv[]); |
18 | static char *expand_string(const char *in); | ||
18 | 19 | ||
19 | static void __attribute__((noreturn)) pperror(const char *format, ...) | 20 | static void __attribute__((noreturn)) pperror(const char *format, ...) |
20 | { | 21 | { |
@@ -550,7 +551,7 @@ static char *expand_string_with_args(const char *in, int argc, char *argv[]) | |||
550 | return __expand_string(&in, is_end_of_str, argc, argv); | 551 | return __expand_string(&in, is_end_of_str, argc, argv); |
551 | } | 552 | } |
552 | 553 | ||
553 | char *expand_string(const char *in) | 554 | static char *expand_string(const char *in) |
554 | { | 555 | { |
555 | return expand_string_with_args(in, 0, NULL); | 556 | return expand_string_with_args(in, 0, NULL); |
556 | } | 557 | } |
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index ce7fc87a49a7..82773cc35d35 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc | |||
@@ -152,7 +152,7 @@ void ConfigItem::updateMenu(void) | |||
152 | case S_TRISTATE: | 152 | case S_TRISTATE: |
153 | char ch; | 153 | char ch; |
154 | 154 | ||
155 | if (!sym_is_changable(sym) && list->optMode == normalOpt) { | 155 | if (!sym_is_changeable(sym) && list->optMode == normalOpt) { |
156 | setPixmap(promptColIdx, QIcon()); | 156 | setPixmap(promptColIdx, QIcon()); |
157 | setText(noColIdx, QString::null); | 157 | setText(noColIdx, QString::null); |
158 | setText(modColIdx, QString::null); | 158 | setText(modColIdx, QString::null); |
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 1f9266dadedf..f56eec5ea4c7 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
@@ -785,7 +785,7 @@ const char *sym_get_string_value(struct symbol *sym) | |||
785 | return (const char *)sym->curr.val; | 785 | return (const char *)sym->curr.val; |
786 | } | 786 | } |
787 | 787 | ||
788 | bool sym_is_changable(struct symbol *sym) | 788 | bool sym_is_changeable(struct symbol *sym) |
789 | { | 789 | { |
790 | return sym->visible > sym->rev_dep.tri; | 790 | return sym->visible > sym->rev_dep.tri; |
791 | } | 791 | } |
@@ -1114,7 +1114,7 @@ static void sym_check_print_recursive(struct symbol *last_sym) | |||
1114 | } | 1114 | } |
1115 | 1115 | ||
1116 | fprintf(stderr, | 1116 | fprintf(stderr, |
1117 | "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n" | 1117 | "For a resolution refer to Documentation/kbuild/kconfig-language.rst\n" |
1118 | "subsection \"Kconfig recursive dependency limitations\"\n" | 1118 | "subsection \"Kconfig recursive dependency limitations\"\n" |
1119 | "\n"); | 1119 | "\n"); |
1120 | 1120 | ||
diff --git a/scripts/kconfig/tests/err_recursive_dep/expected_stderr b/scripts/kconfig/tests/err_recursive_dep/expected_stderr index 84679b104655..c9f4abf9a791 100644 --- a/scripts/kconfig/tests/err_recursive_dep/expected_stderr +++ b/scripts/kconfig/tests/err_recursive_dep/expected_stderr | |||
@@ -1,38 +1,38 @@ | |||
1 | Kconfig:11:error: recursive dependency detected! | 1 | Kconfig:11:error: recursive dependency detected! |
2 | Kconfig:11: symbol B is selected by B | 2 | Kconfig:11: symbol B is selected by B |
3 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 3 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
4 | subsection "Kconfig recursive dependency limitations" | 4 | subsection "Kconfig recursive dependency limitations" |
5 | 5 | ||
6 | Kconfig:5:error: recursive dependency detected! | 6 | Kconfig:5:error: recursive dependency detected! |
7 | Kconfig:5: symbol A depends on A | 7 | Kconfig:5: symbol A depends on A |
8 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 8 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
9 | subsection "Kconfig recursive dependency limitations" | 9 | subsection "Kconfig recursive dependency limitations" |
10 | 10 | ||
11 | Kconfig:17:error: recursive dependency detected! | 11 | Kconfig:17:error: recursive dependency detected! |
12 | Kconfig:17: symbol C1 depends on C2 | 12 | Kconfig:17: symbol C1 depends on C2 |
13 | Kconfig:21: symbol C2 depends on C1 | 13 | Kconfig:21: symbol C2 depends on C1 |
14 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 14 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
15 | subsection "Kconfig recursive dependency limitations" | 15 | subsection "Kconfig recursive dependency limitations" |
16 | 16 | ||
17 | Kconfig:32:error: recursive dependency detected! | 17 | Kconfig:32:error: recursive dependency detected! |
18 | Kconfig:32: symbol D2 is selected by D1 | 18 | Kconfig:32: symbol D2 is selected by D1 |
19 | Kconfig:27: symbol D1 depends on D2 | 19 | Kconfig:27: symbol D1 depends on D2 |
20 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 20 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
21 | subsection "Kconfig recursive dependency limitations" | 21 | subsection "Kconfig recursive dependency limitations" |
22 | 22 | ||
23 | Kconfig:37:error: recursive dependency detected! | 23 | Kconfig:37:error: recursive dependency detected! |
24 | Kconfig:37: symbol E1 depends on E2 | 24 | Kconfig:37: symbol E1 depends on E2 |
25 | Kconfig:42: symbol E2 is implied by E1 | 25 | Kconfig:42: symbol E2 is implied by E1 |
26 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 26 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
27 | subsection "Kconfig recursive dependency limitations" | 27 | subsection "Kconfig recursive dependency limitations" |
28 | 28 | ||
29 | Kconfig:60:error: recursive dependency detected! | 29 | Kconfig:60:error: recursive dependency detected! |
30 | Kconfig:60: symbol G depends on G | 30 | Kconfig:60: symbol G depends on G |
31 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 31 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
32 | subsection "Kconfig recursive dependency limitations" | 32 | subsection "Kconfig recursive dependency limitations" |
33 | 33 | ||
34 | Kconfig:51:error: recursive dependency detected! | 34 | Kconfig:51:error: recursive dependency detected! |
35 | Kconfig:51: symbol F2 depends on F1 | 35 | Kconfig:51: symbol F2 depends on F1 |
36 | Kconfig:49: symbol F1 default value contains F2 | 36 | Kconfig:49: symbol F1 default value contains F2 |
37 | For a resolution refer to Documentation/kbuild/kconfig-language.txt | 37 | For a resolution refer to Documentation/kbuild/kconfig-language.rst |
38 | subsection "Kconfig recursive dependency limitations" | 38 | subsection "Kconfig recursive dependency limitations" |
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig b/scripts/kconfig/tests/err_recursive_inc/Kconfig index 0e4c8750ab65..c6f4adec76d1 100644 --- a/scripts/kconfig/tests/err_recursive_inc/Kconfig +++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig | |||
@@ -1 +1,2 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | source "Kconfig.inc1" | 2 | source "Kconfig.inc1" |
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1 index 00e408d653fc..01cbf0d69cce 100644 --- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1 +++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc1 | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | 2 | ||
2 | 3 | ||
3 | 4 | ||
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2 index 349ea2db15dc..82351075ab1b 100644 --- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2 +++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc2 | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | 2 | ||
2 | 3 | ||
3 | source "Kconfig.inc3" | 4 | source "Kconfig.inc3" |
diff --git a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3 b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3 index 0e4c8750ab65..c6f4adec76d1 100644 --- a/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3 +++ b/scripts/kconfig/tests/err_recursive_inc/Kconfig.inc3 | |||
@@ -1 +1,2 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | source "Kconfig.inc1" | 2 | source "Kconfig.inc1" |
diff --git a/scripts/kconfig/tests/err_recursive_inc/expected_stderr b/scripts/kconfig/tests/err_recursive_inc/expected_stderr index 6b582eee2176..b070a31fdfeb 100644 --- a/scripts/kconfig/tests/err_recursive_inc/expected_stderr +++ b/scripts/kconfig/tests/err_recursive_inc/expected_stderr | |||
@@ -1,6 +1,6 @@ | |||
1 | Recursive inclusion detected. | 1 | Recursive inclusion detected. |
2 | Inclusion path: | 2 | Inclusion path: |
3 | current file : Kconfig.inc1 | 3 | current file : Kconfig.inc1 |
4 | included from: Kconfig.inc3:1 | 4 | included from: Kconfig.inc3:2 |
5 | included from: Kconfig.inc2:3 | 5 | included from: Kconfig.inc2:4 |
6 | included from: Kconfig.inc1:4 | 6 | included from: Kconfig.inc1:5 |
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 3350e498b4ce..6b03012750da 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
@@ -249,7 +249,7 @@ my @highlights_rst = ( | |||
249 | [$type_member_func, "\\:c\\:type\\:`\$1\$2\$3\\\\(\\\\) <\$1>`"], | 249 | [$type_member_func, "\\:c\\:type\\:`\$1\$2\$3\\\\(\\\\) <\$1>`"], |
250 | [$type_member, "\\:c\\:type\\:`\$1\$2\$3 <\$1>`"], | 250 | [$type_member, "\\:c\\:type\\:`\$1\$2\$3 <\$1>`"], |
251 | [$type_fp_param, "**\$1\\\\(\\\\)**"], | 251 | [$type_fp_param, "**\$1\\\\(\\\\)**"], |
252 | [$type_func, "\\:c\\:func\\:`\$1()`"], | 252 | [$type_func, "\$1()"], |
253 | [$type_enum, "\\:c\\:type\\:`\$1 <\$2>`"], | 253 | [$type_enum, "\\:c\\:type\\:`\$1 <\$2>`"], |
254 | [$type_struct, "\\:c\\:type\\:`\$1 <\$2>`"], | 254 | [$type_struct, "\\:c\\:type\\:`\$1 <\$2>`"], |
255 | [$type_typedef, "\\:c\\:type\\:`\$1 <\$2>`"], | 255 | [$type_typedef, "\\:c\\:type\\:`\$1 <\$2>`"], |
@@ -285,7 +285,7 @@ use constant { | |||
285 | OUTPUT_INTERNAL => 4, # output non-exported symbols | 285 | OUTPUT_INTERNAL => 4, # output non-exported symbols |
286 | }; | 286 | }; |
287 | my $output_selection = OUTPUT_ALL; | 287 | my $output_selection = OUTPUT_ALL; |
288 | my $show_not_found = 0; | 288 | my $show_not_found = 0; # No longer used |
289 | 289 | ||
290 | my @export_file_list; | 290 | my @export_file_list; |
291 | 291 | ||
@@ -435,7 +435,7 @@ while ($ARGV[0] =~ m/^--?(.*)/) { | |||
435 | } elsif ($cmd eq 'enable-lineno') { | 435 | } elsif ($cmd eq 'enable-lineno') { |
436 | $enable_lineno = 1; | 436 | $enable_lineno = 1; |
437 | } elsif ($cmd eq 'show-not-found') { | 437 | } elsif ($cmd eq 'show-not-found') { |
438 | $show_not_found = 1; | 438 | $show_not_found = 1; # A no-op but don't fail |
439 | } else { | 439 | } else { |
440 | # Unknown argument | 440 | # Unknown argument |
441 | usage(); | 441 | usage(); |
@@ -2163,12 +2163,14 @@ sub process_file($) { | |||
2163 | } | 2163 | } |
2164 | 2164 | ||
2165 | # Make sure we got something interesting. | 2165 | # Make sure we got something interesting. |
2166 | if ($initial_section_counter == $section_counter) { | 2166 | if ($initial_section_counter == $section_counter && $ |
2167 | if ($output_mode ne "none") { | 2167 | output_mode ne "none") { |
2168 | print STDERR "${file}:1: warning: no structured comments found\n"; | 2168 | if ($output_selection == OUTPUT_INCLUDE) { |
2169 | print STDERR "${file}:1: warning: '$_' not found\n" | ||
2170 | for keys %function_table; | ||
2169 | } | 2171 | } |
2170 | if (($output_selection == OUTPUT_INCLUDE) && ($show_not_found == 1)) { | 2172 | else { |
2171 | print STDERR " Was looking for '$_'.\n" for keys %function_table; | 2173 | print STDERR "${file}:1: warning: no structured comments found\n"; |
2172 | } | 2174 | } |
2173 | } | 2175 | } |
2174 | } | 2176 | } |
diff --git a/scripts/leaking_addresses.pl b/scripts/leaking_addresses.pl index ef9e5b2a1614..b2d8b8aa2d99 100755 --- a/scripts/leaking_addresses.pl +++ b/scripts/leaking_addresses.pl | |||
@@ -1,7 +1,7 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # | 3 | # |
3 | # (c) 2017 Tobin C. Harding <me@tobin.cc> | 4 | # (c) 2017 Tobin C. Harding <me@tobin.cc> |
4 | # Licensed under the terms of the GNU GPL License version 2 | ||
5 | # | 5 | # |
6 | # leaking_addresses.pl: Scan the kernel for potential leaking addresses. | 6 | # leaking_addresses.pl: Scan the kernel for potential leaking addresses. |
7 | # - Scans dmesg output. | 7 | # - Scans dmesg output. |
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl index 70dcfb6b3de1..e476caf52414 100755 --- a/scripts/markup_oops.pl +++ b/scripts/markup_oops.pl | |||
@@ -1,4 +1,5 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | use File::Basename; | 4 | use File::Basename; |
4 | use Math::BigInt; | 5 | use Math::BigInt; |
@@ -8,10 +9,6 @@ use Getopt::Long; | |||
8 | # | 9 | # |
9 | # This file is part of the Linux kernel | 10 | # This file is part of the Linux kernel |
10 | # | 11 | # |
11 | # This program file is free software; you can redistribute it and/or modify it | ||
12 | # under the terms of the GNU General Public License as published by the | ||
13 | # Free Software Foundation; version 2 of the License. | ||
14 | # | ||
15 | # Authors: | 12 | # Authors: |
16 | # Arjan van de Ven <arjan@linux.intel.com> | 13 | # Arjan van de Ven <arjan@linux.intel.com> |
17 | 14 | ||
diff --git a/scripts/modules-check.sh b/scripts/modules-check.sh new file mode 100755 index 000000000000..39e8cb36ba19 --- /dev/null +++ b/scripts/modules-check.sh | |||
@@ -0,0 +1,16 @@ | |||
1 | #!/bin/sh | ||
2 | # SPDX-License-Identifier: GPL-2.0 | ||
3 | |||
4 | set -e | ||
5 | |||
6 | # Check uniqueness of module names | ||
7 | check_same_name_modules() | ||
8 | { | ||
9 | for m in $(sed 's:.*/::' modules.order | sort | uniq -d) | ||
10 | do | ||
11 | echo "warning: same module names found:" >&2 | ||
12 | sed -n "/\/$m/s:^kernel/: :p" modules.order >&2 | ||
13 | done | ||
14 | } | ||
15 | |||
16 | check_same_name_modules | ||
diff --git a/scripts/objdiff b/scripts/objdiff index 4fb5d6796893..72b0b63c3fe1 100755 --- a/scripts/objdiff +++ b/scripts/objdiff | |||
@@ -1,11 +1,11 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | # objdiff - a small script for validating that a commit or series of commits | 4 | # objdiff - a small script for validating that a commit or series of commits |
4 | # didn't change object code. | 5 | # didn't change object code. |
5 | # | 6 | # |
6 | # Copyright 2014, Jason Cooper <jason@lakedaemon.net> | 7 | # Copyright 2014, Jason Cooper <jason@lakedaemon.net> |
7 | # | 8 | # |
8 | # Licensed under the terms of the GNU GPL version 2 | ||
9 | 9 | ||
10 | # usage example: | 10 | # usage example: |
11 | # | 11 | # |
diff --git a/scripts/package/Makefile b/scripts/package/Makefile index 2c6de21e5152..ca7f46b562a4 100644 --- a/scripts/package/Makefile +++ b/scripts/package/Makefile | |||
@@ -1,3 +1,4 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | # Makefile for the different targets used to generate full packages of a kernel | 2 | # Makefile for the different targets used to generate full packages of a kernel |
2 | # It uses the generic clean infrastructure of kbuild | 3 | # It uses the generic clean infrastructure of kbuild |
3 | 4 | ||
@@ -103,7 +104,7 @@ clean-dirs += $(objtree)/snap/ | |||
103 | # --------------------------------------------------------------------------- | 104 | # --------------------------------------------------------------------------- |
104 | tar%pkg: FORCE | 105 | tar%pkg: FORCE |
105 | $(MAKE) -f $(srctree)/Makefile | 106 | $(MAKE) -f $(srctree)/Makefile |
106 | $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ | 107 | +$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ |
107 | 108 | ||
108 | clean-dirs += $(objtree)/tar-install/ | 109 | clean-dirs += $(objtree)/tar-install/ |
109 | 110 | ||
diff --git a/scripts/package/builddeb b/scripts/package/builddeb index b03dd56a4782..e8ca6dc97e96 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb | |||
@@ -130,7 +130,7 @@ if is_enabled CONFIG_MODULES; then | |||
130 | fi | 130 | fi |
131 | 131 | ||
132 | if [ "$ARCH" != "um" ]; then | 132 | if [ "$ARCH" != "um" ]; then |
133 | $MAKE -f $srctree/Makefile headers_check | 133 | $MAKE -f $srctree/Makefile headers |
134 | $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" | 134 | $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" |
135 | fi | 135 | fi |
136 | 136 | ||
diff --git a/scripts/package/mkspec b/scripts/package/mkspec index 009147d4718e..2d29df4a0a53 100755 --- a/scripts/package/mkspec +++ b/scripts/package/mkspec | |||
@@ -31,7 +31,7 @@ PROVIDES="$PROVIDES kernel-$KERNELRELEASE" | |||
31 | __KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g") | 31 | __KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g") |
32 | EXCLUDES="$RCS_TAR_IGNORE --exclude=.tmp_versions --exclude=*vmlinux* \ | 32 | EXCLUDES="$RCS_TAR_IGNORE --exclude=.tmp_versions --exclude=*vmlinux* \ |
33 | --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \ | 33 | --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \ |
34 | --exclude=.config.old --exclude=.missing-syscalls.d" | 34 | --exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s" |
35 | 35 | ||
36 | # We can label the here-doc lines for conditional output to the spec file | 36 | # We can label the here-doc lines for conditional output to the spec file |
37 | # | 37 | # |
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c index a50a2aa963ad..8387a9bc064a 100644 --- a/scripts/recordmcount.c +++ b/scripts/recordmcount.c | |||
@@ -1,8 +1,8 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /* | 2 | /* |
2 | * recordmcount.c: construct a table of the locations of calls to 'mcount' | 3 | * recordmcount.c: construct a table of the locations of calls to 'mcount' |
3 | * so that ftrace can find them quickly. | 4 | * so that ftrace can find them quickly. |
4 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. | 5 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. |
5 | * Licensed under the GNU General Public License, version 2 (GPLv2). | ||
6 | * | 6 | * |
7 | * Restructured to fit Linux format, as well as other updates: | 7 | * Restructured to fit Linux format, as well as other updates: |
8 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. | 8 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. |
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h index 2e7793735e14..13c5e6c8829c 100644 --- a/scripts/recordmcount.h +++ b/scripts/recordmcount.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-only */ | ||
1 | /* | 2 | /* |
2 | * recordmcount.h | 3 | * recordmcount.h |
3 | * | 4 | * |
@@ -15,8 +16,6 @@ | |||
15 | * | 16 | * |
16 | * This conversion to macros was done by: | 17 | * This conversion to macros was done by: |
17 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. | 18 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. |
18 | * | ||
19 | * Licensed under the GNU General Public License, version 2 (GPLv2). | ||
20 | */ | 19 | */ |
21 | #undef append_func | 20 | #undef append_func |
22 | #undef is_fake_mcount | 21 | #undef is_fake_mcount |
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index d24759214efd..3f77a5d695c1 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl | |||
@@ -1,6 +1,6 @@ | |||
1 | #!/usr/bin/env perl | 1 | #!/usr/bin/env perl |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # (c) 2008, Steven Rostedt <srostedt@redhat.com> | 3 | # (c) 2008, Steven Rostedt <srostedt@redhat.com> |
3 | # Licensed under the terms of the GNU GPL License version 2 | ||
4 | # | 4 | # |
5 | # recordmcount.pl - makes a section called __mcount_loc that holds | 5 | # recordmcount.pl - makes a section called __mcount_loc that holds |
6 | # all the offsets to the calls to mcount. | 6 | # all the offsets to the calls to mcount. |
diff --git a/scripts/selinux/Makefile b/scripts/selinux/Makefile index b3048b894a39..59494e14989b 100644 --- a/scripts/selinux/Makefile +++ b/scripts/selinux/Makefile | |||
@@ -1 +1,2 @@ | |||
1 | # SPDX-License-Identifier: GPL-2.0-only | ||
1 | subdir-y := mdp genheaders | 2 | subdir-y := mdp genheaders |
diff --git a/scripts/selinux/mdp/mdp.c b/scripts/selinux/mdp/mdp.c index 18fd6143888b..576d11a60417 100644 --- a/scripts/selinux/mdp/mdp.c +++ b/scripts/selinux/mdp/mdp.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
1 | /* | 2 | /* |
2 | * | 3 | * |
3 | * mdp - make dummy policy | 4 | * mdp - make dummy policy |
@@ -5,20 +6,6 @@ | |||
5 | * When pointed at a kernel tree, builds a dummy policy for that kernel | 6 | * When pointed at a kernel tree, builds a dummy policy for that kernel |
6 | * with exactly one type with full rights to itself. | 7 | * with exactly one type with full rights to itself. |
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
21 | * | ||
22 | * Copyright (C) IBM Corporation, 2006 | 9 | * Copyright (C) IBM Corporation, 2006 |
23 | * | 10 | * |
24 | * Authors: Serge E. Hallyn <serue@us.ibm.com> | 11 | * Authors: Serge E. Hallyn <serue@us.ibm.com> |
diff --git a/scripts/show_delta b/scripts/show_delta index 5b365009e6a3..264399307c4f 100755 --- a/scripts/show_delta +++ b/scripts/show_delta | |||
@@ -1,4 +1,5 @@ | |||
1 | #!/usr/bin/python | 1 | #!/usr/bin/python |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # | 3 | # |
3 | # show_deltas: Read list of printk messages instrumented with | 4 | # show_deltas: Read list of printk messages instrumented with |
4 | # time data, and format with time deltas. | 5 | # time data, and format with time deltas. |
@@ -7,7 +8,6 @@ | |||
7 | # | 8 | # |
8 | # Copyright 2003 Sony Corporation | 9 | # Copyright 2003 Sony Corporation |
9 | # | 10 | # |
10 | # GPL 2.0 applies. | ||
11 | 11 | ||
12 | import sys | 12 | import sys |
13 | import string | 13 | import string |
diff --git a/scripts/sortextable.c b/scripts/sortextable.c index 365a907f98b3..55768654e3c6 100644 --- a/scripts/sortextable.c +++ b/scripts/sortextable.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
1 | /* | 2 | /* |
2 | * sortextable.c: Sort the kernel's exception table | 3 | * sortextable.c: Sort the kernel's exception table |
3 | * | 4 | * |
@@ -6,7 +7,6 @@ | |||
6 | * Based on code taken from recortmcount.c which is: | 7 | * Based on code taken from recortmcount.c which is: |
7 | * | 8 | * |
8 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. | 9 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. |
9 | * Licensed under the GNU General Public License, version 2 (GPLv2). | ||
10 | * | 10 | * |
11 | * Restructured to fit Linux format, as well as other updates: | 11 | * Restructured to fit Linux format, as well as other updates: |
12 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. | 12 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. |
diff --git a/scripts/sortextable.h b/scripts/sortextable.h index ba8700428e21..d4b3f6c40f02 100644 --- a/scripts/sortextable.h +++ b/scripts/sortextable.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* SPDX-License-Identifier: GPL-2.0-only */ | ||
1 | /* | 2 | /* |
2 | * sortextable.h | 3 | * sortextable.h |
3 | * | 4 | * |
@@ -7,9 +8,6 @@ | |||
7 | * | 8 | * |
8 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. | 9 | * Copyright 2009 John F. Reiser <jreiser@BitWagon.com>. All rights reserved. |
9 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. | 10 | * Copyright 2010 Steven Rostedt <srostedt@redhat.com>, Red Hat Inc. |
10 | * | ||
11 | * | ||
12 | * Licensed under the GNU General Public License, version 2 (GPLv2). | ||
13 | */ | 11 | */ |
14 | 12 | ||
15 | #undef extable_ent_size | 13 | #undef extable_ent_size |
diff --git a/scripts/spdxcheck.py b/scripts/spdxcheck.py index 4fe392e507fb..6374e078a5f2 100755 --- a/scripts/spdxcheck.py +++ b/scripts/spdxcheck.py | |||
@@ -32,7 +32,8 @@ class SPDXdata(object): | |||
32 | def read_spdxdata(repo): | 32 | def read_spdxdata(repo): |
33 | 33 | ||
34 | # The subdirectories of LICENSES in the kernel source | 34 | # The subdirectories of LICENSES in the kernel source |
35 | license_dirs = [ "preferred", "other", "exceptions" ] | 35 | # Note: exceptions needs to be parsed as last directory. |
36 | license_dirs = [ "preferred", "dual", "deprecated", "exceptions" ] | ||
36 | lictree = repo.head.commit.tree['LICENSES'] | 37 | lictree = repo.head.commit.tree['LICENSES'] |
37 | 38 | ||
38 | spdx = SPDXdata() | 39 | spdx = SPDXdata() |
@@ -58,13 +59,13 @@ def read_spdxdata(repo): | |||
58 | elif l.startswith('SPDX-Licenses:'): | 59 | elif l.startswith('SPDX-Licenses:'): |
59 | for lic in l.split(':')[1].upper().strip().replace(' ', '').replace('\t', '').split(','): | 60 | for lic in l.split(':')[1].upper().strip().replace(' ', '').replace('\t', '').split(','): |
60 | if not lic in spdx.licenses: | 61 | if not lic in spdx.licenses: |
61 | raise SPDXException(None, 'Exception %s missing license %s' %(ex, lic)) | 62 | raise SPDXException(None, 'Exception %s missing license %s' %(exception, lic)) |
62 | spdx.exceptions[exception].append(lic) | 63 | spdx.exceptions[exception].append(lic) |
63 | 64 | ||
64 | elif l.startswith("License-Text:"): | 65 | elif l.startswith("License-Text:"): |
65 | if exception: | 66 | if exception: |
66 | if not len(spdx.exceptions[exception]): | 67 | if not len(spdx.exceptions[exception]): |
67 | raise SPDXException(el, 'Exception %s is missing SPDX-Licenses' %excid) | 68 | raise SPDXException(el, 'Exception %s is missing SPDX-Licenses' %exception) |
68 | spdx.exception_files += 1 | 69 | spdx.exception_files += 1 |
69 | else: | 70 | else: |
70 | spdx.license_files += 1 | 71 | spdx.license_files += 1 |
diff --git a/scripts/spelling.txt b/scripts/spelling.txt index 86b87332b9e5..de75b9feaaed 100644 --- a/scripts/spelling.txt +++ b/scripts/spelling.txt | |||
@@ -41,6 +41,7 @@ accquired||acquired | |||
41 | accross||across | 41 | accross||across |
42 | acessable||accessible | 42 | acessable||accessible |
43 | acess||access | 43 | acess||access |
44 | acessing||accessing | ||
44 | achitecture||architecture | 45 | achitecture||architecture |
45 | acient||ancient | 46 | acient||ancient |
46 | acitions||actions | 47 | acitions||actions |
@@ -54,6 +55,7 @@ activete||activate | |||
54 | actived||activated | 55 | actived||activated |
55 | actualy||actually | 56 | actualy||actually |
56 | acumulating||accumulating | 57 | acumulating||accumulating |
58 | acumulative||accumulative | ||
57 | acumulator||accumulator | 59 | acumulator||accumulator |
58 | adapater||adapter | 60 | adapater||adapter |
59 | addional||additional | 61 | addional||additional |
@@ -103,6 +105,7 @@ alogrithm||algorithm | |||
103 | alot||a lot | 105 | alot||a lot |
104 | alow||allow | 106 | alow||allow |
105 | alows||allows | 107 | alows||allows |
108 | alredy||already | ||
106 | altough||although | 109 | altough||although |
107 | alue||value | 110 | alue||value |
108 | ambigious||ambiguous | 111 | ambigious||ambiguous |
@@ -223,6 +226,7 @@ boardcast||broadcast | |||
223 | borad||board | 226 | borad||board |
224 | boundry||boundary | 227 | boundry||boundary |
225 | brievely||briefly | 228 | brievely||briefly |
229 | brigde||bridge | ||
226 | broadcase||broadcast | 230 | broadcase||broadcast |
227 | broadcat||broadcast | 231 | broadcat||broadcast |
228 | bufufer||buffer | 232 | bufufer||buffer |
@@ -239,6 +243,7 @@ calulate||calculate | |||
239 | cancelation||cancellation | 243 | cancelation||cancellation |
240 | cancle||cancel | 244 | cancle||cancel |
241 | capabilites||capabilities | 245 | capabilites||capabilities |
246 | capabilties||capabilities | ||
242 | capabilty||capability | 247 | capabilty||capability |
243 | capabitilies||capabilities | 248 | capabitilies||capabilities |
244 | capablity||capability | 249 | capablity||capability |
@@ -325,6 +330,7 @@ conector||connector | |||
325 | connecetd||connected | 330 | connecetd||connected |
326 | configuartion||configuration | 331 | configuartion||configuration |
327 | configuation||configuration | 332 | configuation||configuration |
333 | configued||configured | ||
328 | configuratoin||configuration | 334 | configuratoin||configuration |
329 | configuraton||configuration | 335 | configuraton||configuration |
330 | configuretion||configuration | 336 | configuretion||configuration |
@@ -407,6 +413,7 @@ depreacte||deprecate | |||
407 | desactivate||deactivate | 413 | desactivate||deactivate |
408 | desciptor||descriptor | 414 | desciptor||descriptor |
409 | desciptors||descriptors | 415 | desciptors||descriptors |
416 | descripto||descriptor | ||
410 | descripton||description | 417 | descripton||description |
411 | descrition||description | 418 | descrition||description |
412 | descritptor||descriptor | 419 | descritptor||descriptor |
@@ -432,6 +439,7 @@ deveolpment||development | |||
432 | devided||divided | 439 | devided||divided |
433 | deviece||device | 440 | deviece||device |
434 | diable||disable | 441 | diable||disable |
442 | dicline||decline | ||
435 | dictionnary||dictionary | 443 | dictionnary||dictionary |
436 | didnt||didn't | 444 | didnt||didn't |
437 | diferent||different | 445 | diferent||different |
@@ -461,6 +469,7 @@ disharge||discharge | |||
461 | disnabled||disabled | 469 | disnabled||disabled |
462 | dispertion||dispersion | 470 | dispertion||dispersion |
463 | dissapears||disappears | 471 | dissapears||disappears |
472 | dissconect||disconnect | ||
464 | distiction||distinction | 473 | distiction||distinction |
465 | divisable||divisible | 474 | divisable||divisible |
466 | divsiors||divisors | 475 | divsiors||divisors |
@@ -469,11 +478,14 @@ documantation||documentation | |||
469 | documentaion||documentation | 478 | documentaion||documentation |
470 | documment||document | 479 | documment||document |
471 | doesnt||doesn't | 480 | doesnt||doesn't |
481 | donwload||download | ||
482 | donwloading||downloading | ||
472 | dorp||drop | 483 | dorp||drop |
473 | dosen||doesn | 484 | dosen||doesn |
474 | downlad||download | 485 | downlad||download |
475 | downlads||downloads | 486 | downlads||downloads |
476 | droped||dropped | 487 | droped||dropped |
488 | droput||dropout | ||
477 | druing||during | 489 | druing||during |
478 | dynmaic||dynamic | 490 | dynmaic||dynamic |
479 | eanable||enable | 491 | eanable||enable |
@@ -482,6 +494,7 @@ ecspecially||especially | |||
482 | edditable||editable | 494 | edditable||editable |
483 | editting||editing | 495 | editting||editing |
484 | efective||effective | 496 | efective||effective |
497 | effectivness||effectiveness | ||
485 | efficently||efficiently | 498 | efficently||efficiently |
486 | ehther||ether | 499 | ehther||ether |
487 | eigth||eight | 500 | eigth||eight |
@@ -543,6 +556,7 @@ extensability||extensibility | |||
543 | extention||extension | 556 | extention||extension |
544 | extenstion||extension | 557 | extenstion||extension |
545 | extracter||extractor | 558 | extracter||extractor |
559 | faied||failed | ||
546 | faield||failed | 560 | faield||failed |
547 | falied||failed | 561 | falied||failed |
548 | faild||failed | 562 | faild||failed |
@@ -567,6 +581,7 @@ fetaures||features | |||
567 | fileystem||filesystem | 581 | fileystem||filesystem |
568 | fimware||firmware | 582 | fimware||firmware |
569 | firmare||firmware | 583 | firmare||firmware |
584 | firmaware||firmware | ||
570 | firware||firmware | 585 | firware||firmware |
571 | finanize||finalize | 586 | finanize||finalize |
572 | findn||find | 587 | findn||find |
@@ -601,6 +616,8 @@ funtions||functions | |||
601 | furthur||further | 616 | furthur||further |
602 | futhermore||furthermore | 617 | futhermore||furthermore |
603 | futrue||future | 618 | futrue||future |
619 | gatable||gateable | ||
620 | gateing||gating | ||
604 | gauage||gauge | 621 | gauage||gauge |
605 | gaurenteed||guaranteed | 622 | gaurenteed||guaranteed |
606 | generiously||generously | 623 | generiously||generously |
@@ -641,9 +658,11 @@ iomaped||iomapped | |||
641 | imblance||imbalance | 658 | imblance||imbalance |
642 | immeadiately||immediately | 659 | immeadiately||immediately |
643 | immedaite||immediate | 660 | immedaite||immediate |
661 | immedate||immediate | ||
644 | immediatelly||immediately | 662 | immediatelly||immediately |
645 | immediatly||immediately | 663 | immediatly||immediately |
646 | immidiate||immediate | 664 | immidiate||immediate |
665 | immutible||immutable | ||
647 | impelentation||implementation | 666 | impelentation||implementation |
648 | impementated||implemented | 667 | impementated||implemented |
649 | implemantation||implementation | 668 | implemantation||implementation |
@@ -661,10 +680,12 @@ incative||inactive | |||
661 | incomming||incoming | 680 | incomming||incoming |
662 | incompatabilities||incompatibilities | 681 | incompatabilities||incompatibilities |
663 | incompatable||incompatible | 682 | incompatable||incompatible |
683 | incompatble||incompatible | ||
664 | inconsistant||inconsistent | 684 | inconsistant||inconsistent |
665 | increas||increase | 685 | increas||increase |
666 | incremeted||incremented | 686 | incremeted||incremented |
667 | incrment||increment | 687 | incrment||increment |
688 | inculde||include | ||
668 | indendation||indentation | 689 | indendation||indentation |
669 | indended||intended | 690 | indended||intended |
670 | independant||independent | 691 | independant||independent |
@@ -778,6 +799,7 @@ libary||library | |||
778 | librairies||libraries | 799 | librairies||libraries |
779 | libraris||libraries | 800 | libraris||libraries |
780 | licenceing||licencing | 801 | licenceing||licencing |
802 | logaritmic||logarithmic | ||
781 | loggging||logging | 803 | loggging||logging |
782 | loggin||login | 804 | loggin||login |
783 | logile||logfile | 805 | logile||logfile |
@@ -832,6 +854,7 @@ mispelled||misspelled | |||
832 | mispelt||misspelt | 854 | mispelt||misspelt |
833 | mising||missing | 855 | mising||missing |
834 | mismactch||mismatch | 856 | mismactch||mismatch |
857 | missign||missing | ||
835 | missmanaged||mismanaged | 858 | missmanaged||mismanaged |
836 | missmatch||mismatch | 859 | missmatch||mismatch |
837 | miximum||maximum | 860 | miximum||maximum |
@@ -848,6 +871,7 @@ mopdule||module | |||
848 | mroe||more | 871 | mroe||more |
849 | mulitplied||multiplied | 872 | mulitplied||multiplied |
850 | multidimensionnal||multidimensional | 873 | multidimensionnal||multidimensional |
874 | multipe||multiple | ||
851 | multple||multiple | 875 | multple||multiple |
852 | mumber||number | 876 | mumber||number |
853 | muticast||multicast | 877 | muticast||multicast |
@@ -870,7 +894,9 @@ nescessary||necessary | |||
870 | nessessary||necessary | 894 | nessessary||necessary |
871 | noticable||noticeable | 895 | noticable||noticeable |
872 | notications||notifications | 896 | notications||notifications |
897 | notifcations||notifications | ||
873 | notifed||notified | 898 | notifed||notified |
899 | notity||notify | ||
874 | numebr||number | 900 | numebr||number |
875 | numner||number | 901 | numner||number |
876 | obtaion||obtain | 902 | obtaion||obtain |
@@ -887,6 +913,7 @@ occuring||occurring | |||
887 | offser||offset | 913 | offser||offset |
888 | offet||offset | 914 | offet||offset |
889 | offloded||offloaded | 915 | offloded||offloaded |
916 | offseting||offsetting | ||
890 | omited||omitted | 917 | omited||omitted |
891 | omiting||omitting | 918 | omiting||omitting |
892 | omitt||omit | 919 | omitt||omit |
@@ -1009,6 +1036,8 @@ programers||programmers | |||
1009 | programm||program | 1036 | programm||program |
1010 | programms||programs | 1037 | programms||programs |
1011 | progresss||progress | 1038 | progresss||progress |
1039 | prohibitted||prohibited | ||
1040 | prohibitting||prohibiting | ||
1012 | promiscous||promiscuous | 1041 | promiscous||promiscuous |
1013 | promps||prompts | 1042 | promps||prompts |
1014 | pronnounced||pronounced | 1043 | pronnounced||pronounced |
@@ -1023,6 +1052,7 @@ prosess||process | |||
1023 | protable||portable | 1052 | protable||portable |
1024 | protcol||protocol | 1053 | protcol||protocol |
1025 | protecion||protection | 1054 | protecion||protection |
1055 | protedcted||protected | ||
1026 | protocoll||protocol | 1056 | protocoll||protocol |
1027 | promixity||proximity | 1057 | promixity||proximity |
1028 | psudo||pseudo | 1058 | psudo||pseudo |
@@ -1037,6 +1067,7 @@ reasearcher||researcher | |||
1037 | reasearchers||researchers | 1067 | reasearchers||researchers |
1038 | reasearch||research | 1068 | reasearch||research |
1039 | recepient||recipient | 1069 | recepient||recipient |
1070 | recevied||received | ||
1040 | receving||receiving | 1071 | receving||receiving |
1041 | recieved||received | 1072 | recieved||received |
1042 | recieve||receive | 1073 | recieve||receive |
@@ -1110,6 +1141,7 @@ retreived||retrieved | |||
1110 | retreive||retrieve | 1141 | retreive||retrieve |
1111 | retreiving||retrieving | 1142 | retreiving||retrieving |
1112 | retrive||retrieve | 1143 | retrive||retrieve |
1144 | retrived||retrieved | ||
1113 | retuned||returned | 1145 | retuned||returned |
1114 | reudce||reduce | 1146 | reudce||reduce |
1115 | reuest||request | 1147 | reuest||request |
@@ -1145,7 +1177,6 @@ senarios||scenarios | |||
1145 | sentivite||sensitive | 1177 | sentivite||sensitive |
1146 | separatly||separately | 1178 | separatly||separately |
1147 | sepcify||specify | 1179 | sepcify||specify |
1148 | sepc||spec | ||
1149 | seperated||separated | 1180 | seperated||separated |
1150 | seperately||separately | 1181 | seperately||separately |
1151 | seperate||separate | 1182 | seperate||separate |
@@ -1177,6 +1208,7 @@ singaled||signaled | |||
1177 | singal||signal | 1208 | singal||signal |
1178 | singed||signed | 1209 | singed||signed |
1179 | sleeped||slept | 1210 | sleeped||slept |
1211 | sliped||slipped | ||
1180 | softwares||software | 1212 | softwares||software |
1181 | speach||speech | 1213 | speach||speech |
1182 | specfic||specific | 1214 | specfic||specific |
@@ -1283,6 +1315,7 @@ threds||threads | |||
1283 | threshhold||threshold | 1315 | threshhold||threshold |
1284 | thresold||threshold | 1316 | thresold||threshold |
1285 | throught||through | 1317 | throught||through |
1318 | trackling||tracking | ||
1286 | troughput||throughput | 1319 | troughput||throughput |
1287 | thses||these | 1320 | thses||these |
1288 | tiggers||triggers | 1321 | tiggers||triggers |
@@ -1409,5 +1442,6 @@ wnat||want | |||
1409 | workarould||workaround | 1442 | workarould||workaround |
1410 | writeing||writing | 1443 | writeing||writing |
1411 | writting||writing | 1444 | writting||writing |
1445 | wtih||with | ||
1412 | zombe||zombie | 1446 | zombe||zombie |
1413 | zomebie||zombie | 1447 | zomebie||zombie |
diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install index f6a5c0bae31e..f230e65329a2 100755 --- a/scripts/sphinx-pre-install +++ b/scripts/sphinx-pre-install | |||
@@ -1,20 +1,16 @@ | |||
1 | #!/usr/bin/perl | 1 | #!/usr/bin/perl |
2 | # SPDX-License-Identifier: GPL-2.0-or-later | ||
2 | use strict; | 3 | use strict; |
3 | 4 | ||
4 | # Copyright (c) 2017 Mauro Carvalho Chehab <mchehab@kernel.org> | 5 | # Copyright (c) 2017-2019 Mauro Carvalho Chehab <mchehab@kernel.org> |
5 | # | 6 | # |
6 | # This program is free software; you can redistribute it and/or | ||
7 | # modify it under the terms of the GNU General Public License | ||
8 | # as published by the Free Software Foundation; either version 2 | ||
9 | # of the License, or (at your option) any later version. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, | ||
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | # GNU General Public License for more details. | ||
15 | 7 | ||
16 | my $virtenv_dir = "sphinx_1.4"; | 8 | my $prefix = "./"; |
17 | my $requirement_file = "Documentation/sphinx/requirements.txt"; | 9 | $prefix = "$ENV{'srctree'}/" if ($ENV{'srctree'}); |
10 | |||
11 | my $conf = $prefix . "Documentation/conf.py"; | ||
12 | my $requirement_file = $prefix . "Documentation/sphinx/requirements.txt"; | ||
13 | my $virtenv_prefix = "sphinx_"; | ||
18 | 14 | ||
19 | # | 15 | # |
20 | # Static vars | 16 | # Static vars |
@@ -26,7 +22,10 @@ my $need = 0; | |||
26 | my $optional = 0; | 22 | my $optional = 0; |
27 | my $need_symlink = 0; | 23 | my $need_symlink = 0; |
28 | my $need_sphinx = 0; | 24 | my $need_sphinx = 0; |
25 | my $rec_sphinx_upgrade = 0; | ||
29 | my $install = ""; | 26 | my $install = ""; |
27 | my $virtenv_dir = ""; | ||
28 | my $min_version; | ||
30 | 29 | ||
31 | # | 30 | # |
32 | # Command line arguments | 31 | # Command line arguments |
@@ -34,6 +33,7 @@ my $install = ""; | |||
34 | 33 | ||
35 | my $pdf = 1; | 34 | my $pdf = 1; |
36 | my $virtualenv = 1; | 35 | my $virtualenv = 1; |
36 | my $version_check = 0; | ||
37 | 37 | ||
38 | # | 38 | # |
39 | # List of required texlive packages on Fedora and OpenSuse | 39 | # List of required texlive packages on Fedora and OpenSuse |
@@ -201,13 +201,15 @@ sub check_missing_tex($) | |||
201 | } | 201 | } |
202 | } | 202 | } |
203 | 203 | ||
204 | sub check_sphinx() | 204 | sub get_sphinx_fname() |
205 | { | 205 | { |
206 | return if findprog("sphinx-build"); | 206 | my $fname = "sphinx-build"; |
207 | return $fname if findprog($fname); | ||
207 | 208 | ||
208 | if (findprog("sphinx-build-3")) { | 209 | $fname = "sphinx-build-3"; |
210 | if (findprog($fname)) { | ||
209 | $need_symlink = 1; | 211 | $need_symlink = 1; |
210 | return; | 212 | return $fname; |
211 | } | 213 | } |
212 | 214 | ||
213 | if ($virtualenv) { | 215 | if ($virtualenv) { |
@@ -219,6 +221,74 @@ sub check_sphinx() | |||
219 | } else { | 221 | } else { |
220 | add_package("python-sphinx", 0); | 222 | add_package("python-sphinx", 0); |
221 | } | 223 | } |
224 | |||
225 | return ""; | ||
226 | } | ||
227 | |||
228 | sub check_sphinx() | ||
229 | { | ||
230 | my $rec_version; | ||
231 | my $cur_version; | ||
232 | |||
233 | open IN, $conf or die "Can't open $conf"; | ||
234 | while (<IN>) { | ||
235 | if (m/^\s*needs_sphinx\s*=\s*[\'\"]([\d\.]+)[\'\"]/) { | ||
236 | $min_version=$1; | ||
237 | last; | ||
238 | } | ||
239 | } | ||
240 | close IN; | ||
241 | |||
242 | die "Can't get needs_sphinx version from $conf" if (!$min_version); | ||
243 | |||
244 | open IN, $requirement_file or die "Can't open $requirement_file"; | ||
245 | while (<IN>) { | ||
246 | if (m/^\s*Sphinx\s*==\s*([\d\.]+)$/) { | ||
247 | $rec_version=$1; | ||
248 | last; | ||
249 | } | ||
250 | } | ||
251 | close IN; | ||
252 | |||
253 | die "Can't get recommended sphinx version from $requirement_file" if (!$min_version); | ||
254 | |||
255 | $virtenv_dir = $virtenv_prefix . $rec_version; | ||
256 | |||
257 | my $sphinx = get_sphinx_fname(); | ||
258 | return if ($sphinx eq ""); | ||
259 | |||
260 | open IN, "$sphinx --version 2>&1 |" or die "$sphinx returned an error"; | ||
261 | while (<IN>) { | ||
262 | if (m/^\s*sphinx-build\s+([\d\.]+)$/) { | ||
263 | $cur_version=$1; | ||
264 | last; | ||
265 | } | ||
266 | # Sphinx 1.2.x uses a different format | ||
267 | if (m/^\s*Sphinx.*\s+([\d\.]+)$/) { | ||
268 | $cur_version=$1; | ||
269 | last; | ||
270 | } | ||
271 | } | ||
272 | close IN; | ||
273 | |||
274 | die "$sphinx didn't return its version" if (!$cur_version); | ||
275 | |||
276 | if ($cur_version lt $min_version) { | ||
277 | printf "ERROR: Sphinx version is %s. It should be >= %s (recommended >= %s)\n", | ||
278 | $cur_version, $min_version, $rec_version;; | ||
279 | $need_sphinx = 1; | ||
280 | return; | ||
281 | } | ||
282 | |||
283 | if ($cur_version lt $rec_version) { | ||
284 | printf "Sphinx version %s\n", $cur_version; | ||
285 | print "Warning: It is recommended at least Sphinx version $rec_version.\n"; | ||
286 | $rec_sphinx_upgrade = 1; | ||
287 | return; | ||
288 | } | ||
289 | |||
290 | # On version check mode, just assume Sphinx has all mandatory deps | ||
291 | exit (0) if ($version_check); | ||
222 | } | 292 | } |
223 | 293 | ||
224 | # | 294 | # |
@@ -503,27 +573,18 @@ sub check_distros() | |||
503 | 573 | ||
504 | sub check_needs() | 574 | sub check_needs() |
505 | { | 575 | { |
576 | # Check for needed programs/tools | ||
577 | check_sphinx(); | ||
578 | |||
506 | if ($system_release) { | 579 | if ($system_release) { |
507 | print "Detected OS: $system_release.\n"; | 580 | print "Detected OS: $system_release.\n\n"; |
508 | } else { | 581 | } else { |
509 | print "Unknown OS\n"; | 582 | print "Unknown OS\n\n"; |
510 | } | 583 | } |
511 | 584 | ||
512 | # RHEL 7.x and clones have Sphinx version 1.1.x and incomplete texlive | 585 | print "To upgrade Sphinx, use:\n\n" if ($rec_sphinx_upgrade); |
513 | if (($system_release =~ /Red Hat Enterprise Linux/) || | ||
514 | ($system_release =~ /CentOS/) || | ||
515 | ($system_release =~ /Scientific Linux/) || | ||
516 | ($system_release =~ /Oracle Linux Server/)) { | ||
517 | $virtualenv = 1; | ||
518 | $pdf = 0; | ||
519 | |||
520 | printf("NOTE: On this distro, Sphinx and TexLive shipped versions are incompatible\n"); | ||
521 | printf("with doc build. So, use Sphinx via a Python virtual environment.\n\n"); | ||
522 | printf("This script can't install a TexLive version that would provide PDF.\n"); | ||
523 | } | ||
524 | 586 | ||
525 | # Check for needed programs/tools | 587 | # Check for needed programs/tools |
526 | check_sphinx(); | ||
527 | check_perl_module("Pod::Usage", 0); | 588 | check_perl_module("Pod::Usage", 0); |
528 | check_program("make", 0); | 589 | check_program("make", 0); |
529 | check_program("gcc", 0); | 590 | check_program("gcc", 0); |
@@ -540,26 +601,33 @@ sub check_needs() | |||
540 | printf "\tsudo ln -sf %s /usr/bin/sphinx-build\n\n", | 601 | printf "\tsudo ln -sf %s /usr/bin/sphinx-build\n\n", |
541 | which("sphinx-build-3"); | 602 | which("sphinx-build-3"); |
542 | } | 603 | } |
543 | if ($need_sphinx) { | 604 | if ($need_sphinx || $rec_sphinx_upgrade) { |
544 | my $activate = "$virtenv_dir/bin/activate"; | 605 | my $min_activate = "$ENV{'PWD'}/${virtenv_prefix}${min_version}/bin/activate"; |
545 | if (-e "$ENV{'PWD'}/$activate") { | 606 | my @activates = glob "$ENV{'PWD'}/${virtenv_prefix}*/bin/activate"; |
546 | printf "\nNeed to activate virtualenv with:\n"; | 607 | |
547 | printf "\t. $activate\n"; | 608 | @activates = sort {$b cmp $a} @activates; |
609 | |||
610 | if ($need_sphinx && scalar @activates > 0 && $activates[0] ge $min_activate) { | ||
611 | printf "\nNeed to activate a compatible Sphinx version on virtualenv with:\n"; | ||
612 | printf "\t. $activates[0]\n"; | ||
613 | exit (1); | ||
548 | } else { | 614 | } else { |
615 | my $rec_activate = "$virtenv_dir/bin/activate"; | ||
549 | my $virtualenv = findprog("virtualenv-3"); | 616 | my $virtualenv = findprog("virtualenv-3"); |
550 | $virtualenv = findprog("virtualenv-3.5") if (!$virtualenv); | 617 | $virtualenv = findprog("virtualenv-3.5") if (!$virtualenv); |
551 | $virtualenv = findprog("virtualenv") if (!$virtualenv); | 618 | $virtualenv = findprog("virtualenv") if (!$virtualenv); |
552 | $virtualenv = "virtualenv" if (!$virtualenv); | 619 | $virtualenv = "virtualenv" if (!$virtualenv); |
553 | 620 | ||
554 | printf "\t$virtualenv $virtenv_dir\n"; | 621 | printf "\t$virtualenv $virtenv_dir\n"; |
555 | printf "\t. $activate\n"; | 622 | printf "\t. $rec_activate\n"; |
556 | printf "\tpip install -r $requirement_file\n"; | 623 | printf "\tpip install -r $requirement_file\n"; |
557 | $need++; | 624 | |
625 | $need++ if (!$rec_sphinx_upgrade); | ||
558 | } | 626 | } |
559 | } | 627 | } |
560 | printf "\n"; | 628 | printf "\n"; |
561 | 629 | ||
562 | print "All optional dependenties are met.\n" if (!$optional); | 630 | print "All optional dependencies are met.\n" if (!$optional); |
563 | 631 | ||
564 | if ($need == 1) { | 632 | if ($need == 1) { |
565 | die "Can't build as $need mandatory dependency is missing"; | 633 | die "Can't build as $need mandatory dependency is missing"; |
@@ -581,8 +649,14 @@ while (@ARGV) { | |||
581 | $virtualenv = 0; | 649 | $virtualenv = 0; |
582 | } elsif ($arg eq "--no-pdf"){ | 650 | } elsif ($arg eq "--no-pdf"){ |
583 | $pdf = 0; | 651 | $pdf = 0; |
652 | } elsif ($arg eq "--version-check"){ | ||
653 | $version_check = 1; | ||
584 | } else { | 654 | } else { |
585 | print "Usage:\n\t$0 <--no-virtualenv> <--no-pdf>\n\n"; | 655 | print "Usage:\n\t$0 <--no-virtualenv> <--no-pdf> <--version-check>\n\n"; |
656 | print "Where:\n"; | ||
657 | print "\t--no-virtualenv\t- Recommend installing Sphinx instead of using a virtualenv\n"; | ||
658 | print "\t--version-check\t- if version is compatible, don't check for missing dependencies\n"; | ||
659 | print "\t--no-pdf\t- don't check for dependencies required to build PDF docs\n\n"; | ||
586 | exit -1; | 660 | exit -1; |
587 | } | 661 | } |
588 | } | 662 | } |
diff --git a/scripts/tags.sh b/scripts/tags.sh index 70e14c67bde7..4e18ae5282a6 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh | |||
@@ -1,11 +1,12 @@ | |||
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | # Generate tags or cscope files | 3 | # Generate tags or cscope files |
3 | # Usage tags.sh <mode> | 4 | # Usage tags.sh <mode> |
4 | # | 5 | # |
5 | # mode may be any of: tags, TAGS, cscope | 6 | # mode may be any of: tags, TAGS, cscope |
6 | # | 7 | # |
7 | # Uses the following environment variables: | 8 | # Uses the following environment variables: |
8 | # ARCH, SUBARCH, SRCARCH, srctree, src, obj | 9 | # SUBARCH, SRCARCH, srctree |
9 | 10 | ||
10 | if [ "$KBUILD_VERBOSE" = "1" ]; then | 11 | if [ "$KBUILD_VERBOSE" = "1" ]; then |
11 | set -x | 12 | set -x |
@@ -16,8 +17,7 @@ ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" | |||
16 | # tags and cscope files should also ignore MODVERSION *.mod.c files | 17 | # tags and cscope files should also ignore MODVERSION *.mod.c files |
17 | ignore="$ignore ( -name *.mod.c ) -prune -o" | 18 | ignore="$ignore ( -name *.mod.c ) -prune -o" |
18 | 19 | ||
19 | # Do not use full path if we do not use O=.. builds | 20 | # Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} |
20 | # Use make O=. {tags|cscope} | ||
21 | # to force full paths for a non-O= build | 21 | # to force full paths for a non-O= build |
22 | if [ "${srctree}" = "." -o -z "${srctree}" ]; then | 22 | if [ "${srctree}" = "." -o -z "${srctree}" ]; then |
23 | tree= | 23 | tree= |
@@ -35,21 +35,19 @@ elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then | |||
35 | ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') | 35 | ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') |
36 | fi | 36 | fi |
37 | 37 | ||
38 | # find sources in arch/$ARCH | 38 | # find sources in arch/$1 |
39 | find_arch_sources() | 39 | find_arch_sources() |
40 | { | 40 | { |
41 | for i in $archincludedir; do | 41 | for i in $archincludedir; do |
42 | prune="$prune -wholename $i -prune -o" | 42 | prune="$prune -wholename $i -prune -o" |
43 | done | 43 | done |
44 | find ${tree}arch/$1 $ignore $subarchprune $prune -name "$2" \ | 44 | find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print; |
45 | -not -type l -print; | ||
46 | } | 45 | } |
47 | 46 | ||
48 | # find sources in arch/$1/include | 47 | # find sources in arch/$1/include |
49 | find_arch_include_sources() | 48 | find_arch_include_sources() |
50 | { | 49 | { |
51 | include=$(find ${tree}arch/$1/ $subarchprune \ | 50 | include=$(find ${tree}arch/$1/ -name include -type d -print); |
52 | -name include -type d -print); | ||
53 | if [ -n "$include" ]; then | 51 | if [ -n "$include" ]; then |
54 | archincludedir="$archincludedir $include" | 52 | archincludedir="$archincludedir $include" |
55 | find $include $ignore -name "$2" -not -type l -print; | 53 | find $include $ignore -name "$2" -not -type l -print; |
@@ -305,36 +303,6 @@ if [ "${ARCH}" = "um" ]; then | |||
305 | else | 303 | else |
306 | archinclude=${SUBARCH} | 304 | archinclude=${SUBARCH} |
307 | fi | 305 | fi |
308 | elif [ "${SRCARCH}" = "arm" -a "${SUBARCH}" != "" ]; then | ||
309 | subarchdir=$(find ${tree}arch/$SRCARCH/ -name "mach-*" -type d -o \ | ||
310 | -name "plat-*" -type d); | ||
311 | mach_suffix=$SUBARCH | ||
312 | plat_suffix=$SUBARCH | ||
313 | |||
314 | # Special cases when $plat_suffix != $mach_suffix | ||
315 | case $mach_suffix in | ||
316 | "omap1" | "omap2") | ||
317 | plat_suffix="omap" | ||
318 | ;; | ||
319 | esac | ||
320 | |||
321 | if [ ! -d ${tree}arch/$SRCARCH/mach-$mach_suffix ]; then | ||
322 | echo "Warning: arch/arm/mach-$mach_suffix/ not found." >&2 | ||
323 | echo " Fix your \$SUBARCH appropriately" >&2 | ||
324 | fi | ||
325 | |||
326 | for i in $subarchdir; do | ||
327 | case "$i" in | ||
328 | *"mach-"${mach_suffix}) | ||
329 | ;; | ||
330 | *"plat-"${plat_suffix}) | ||
331 | ;; | ||
332 | *) | ||
333 | subarchprune="$subarchprune \ | ||
334 | -wholename $i -prune -o" | ||
335 | ;; | ||
336 | esac | ||
337 | done | ||
338 | fi | 306 | fi |
339 | 307 | ||
340 | remove_structs= | 308 | remove_structs= |
diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py index 9b6dd4f36335..b65735758520 100755 --- a/scripts/tracing/draw_functrace.py +++ b/scripts/tracing/draw_functrace.py | |||
@@ -1,8 +1,8 @@ | |||
1 | #!/usr/bin/python | 1 | #!/usr/bin/python |
2 | # SPDX-License-Identifier: GPL-2.0-only | ||
2 | 3 | ||
3 | """ | 4 | """ |
4 | Copyright 2008 (c) Frederic Weisbecker <fweisbec@gmail.com> | 5 | Copyright 2008 (c) Frederic Weisbecker <fweisbec@gmail.com> |
5 | Licensed under the terms of the GNU GPL License version 2 | ||
6 | 6 | ||
7 | This script parses a trace provided by the function tracer in | 7 | This script parses a trace provided by the function tracer in |
8 | kernel/trace/trace_functions.c | 8 | kernel/trace/trace_functions.c |