kbuild: Handle builtin dtb files containing hyphens
Subsystems (3)
PATCH 1/1 kbuild: Handle builtin dtb files containing hyphens
On dtb files which contain hyphens, the dt_S_dtb command to build the dtb.S files (which allow DTB files to be built into the kernel) results in errors like the following:
bcm3368-netgear-cvg834g.dtb.S: Assembler messages:
bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is -' bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode __dtb_bcm3368-netgear-cvg834g_begin:' bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode __dtb_bcm3368-netgear-cvg834g_end:' bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is -'
This is due to the hyphen being used in symbol names. Replace all hyphens with underscores in the dt_S_dtb command to avoid this problem.
Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).
--- scripts/Makefile.lib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
scripts/Makefile.lib +4 -4
@@ -297,11 +297,11 @@ cmd_dt_S_dtb= \ echo '\#include <asm-generic/vmlinux.lds.h>'; \ echo '.section .dtb.init.rodata,"a"'; \ echo '.balign STRUCT_ALIGNMENT'; \ - echo '.global __dtb_$(*F)_begin'; \ - echo '__dtb_$(*F)_begin:'; \ + echo '.global __dtb_$(subst -,_,$(*F))_begin'; \ + echo '__dtb_$(subst -,_,$(*F))_begin:'; \ echo '.incbin "$<" '; \ - echo '__dtb_$(*F)_end:'; \ - echo '.global __dtb_$(*F)_end'; \ + echo '__dtb_$(subst -,_,$(*F))_end:'; \ + echo '.global __dtb_$(subst -,_,$(*F))_end'; \ echo '.balign STRUCT_ALIGNMENT'; \ ) > $@
Signature · 1 line
2.13.6
I initially misread the patch description (and imagined an entirely different problem).
Quoted 1 line · James Hogan
On dtb files which contain hyphens, the
dt_S_dtbcommand to build the>dtb.Sfiles (which allow DTB files to be built into the kernel) results> in errors like the following:> >bcm3368-netgear-cvg834g.dtb.S: Assembler messages:> bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is-'> bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_begin:'> bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_end:'> bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is-'
Please replace the following section:
Quoted 9 lines
This is due to the hyphen being used in symbol names. Replace all hyphens
with underscores in thedt_S_dtbcommand to avoid this problem.Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).
with:
cmd_dt_S_dtb constructs the assembly source to incorporate a devicetree FDT (that is, the .dtb file) as binary data in the kernel image. This assembly source contains labels before and after the binary data. The label names incorporate the file name of the corresponding .dtb file. Hyphens are not legal characters in labels, so transform all hyphens from the file name to underscores when constructing the labels.
Quoted 29 lines
Fixes 695835511f96 ("MIPS: BMIPS: rename bcm96358nb4ser to bcm6358-neufbox4-sercom")Signed-off-by James Hogan <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc Masahiro Yamada <[email protected]>Cc Michal Marek <[email protected]>Cc Ralf Baechle <[email protected]>Cc Florian Fainelli <[email protected]>Cc Kevin Cernekee <[email protected]>Cc <[email protected]> # 4.9+--- scripts/Makefile.lib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)scripts/Makefile.lib +0
-2@@ -297,11 +297,11 @@ cmd_dt_S_dtb= \ echo '\#include <asm-generic/vmlinux.lds.h>'; \ echo '.section .dtb.init.rodata,"a"'; \ echo '.balign STRUCT_ALIGNMENT'; \ - echo '.global __dtb_$(*F)_begin'; \ - echo '__dtb_$(*F)_begin:'; \
scripts/Makefile.lib cmd_dt_S_dtb= \ · line 307
Quoted 10 lines
scripts/Makefile.lib +4
-2+ echo '.global __dtb_$(subst -,_,$(*F))_begin'; \ + echo '__dtb_$(subst -,_,$(*F))_begin:'; \ echo '.incbin "$<" '; \ - echo '__dtb_$(*F)_end:'; \ - echo '.global __dtb_$(*F)_end'; \ + echo '__dtb_$(subst -,_,$(*F))_end:'; \ + echo '.global __dtb_$(subst -,_,$(*F))_end'; \ echo '.balign STRUCT_ALIGNMENT'; \ ) > $@
Quoted 18 lines · Frank Rowand
I initially misread the patch description (and imagined an entirely different problem).
Quoted 1 line · James Hogan
On dtb files which contain hyphens, the
dt_S_dtbcommand to build the>dtb.Sfiles (which allow DTB files to be built into the kernel) results> in errors like the following:> >bcm3368-netgear-cvg834g.dtb.S: Assembler messages:> bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is-'> bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_begin:'> bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_end:'> bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is-'Please replace the following section:
Quoted 9 lines
This is due to the hyphen being used in symbol names. Replace all hyphens
with underscores in thedt_S_dtbcommand to avoid this problem.Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).
Quoted 8 lines
with:
cmd_dt_S_dtbconstructs the assembly source to incorporate a devicetree FDT (that is, the .dtb file) as binary data in the kernel image. This assembly source contains labels before and after the binary data. The label names incorporate the file name of the corresponding .dtb file. Hyphens are not legal characters in labels, so transform all hyphens from the file name to underscores when constructing the labels.
Thanks, that is clearer.
I'll keep the paragraph about MIPS and the example configuration though, as I think its important information to reproduce the problem, and to justify why it wouldn't be appropriate to just rename the files (which was my first reaction).
Quoted 1 line
Reviewed-by Frank Rowand <[email protected]>
Thanks
James
Quoted 28 lines · James Hogan
Quoted 18 lines · Frank Rowand
I initially misread the patch description (and imagined an entirely different problem).
Quoted 1 line · James Hogan
On dtb files which contain hyphens, the
dt_S_dtbcommand to build the>dtb.Sfiles (which allow DTB files to be built into the kernel) results> in errors like the following:> >bcm3368-netgear-cvg834g.dtb.S: Assembler messages:> bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is-'> bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_begin:'> bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_end:'> bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section> bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is-'Please replace the following section:
Quoted 9 lines
This is due to the hyphen being used in symbol names. Replace all hyphens
with underscores in thedt_S_dtbcommand to avoid this problem.Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).Quoted 8 lines
with:
cmd_dt_S_dtbconstructs the assembly source to incorporate a devicetree FDT (that is, the .dtb file) as binary data in the kernel image. This assembly source contains labels before and after the binary data. The label names incorporate the file name of the corresponding .dtb file. Hyphens are not legal characters in labels, so transform all hyphens from the file name to underscores when constructing the labels.
Quoted 6 lines
Thanks, that is clearer.
I'll keep the paragraph about MIPS and the example configuration though, as I think its important information to reproduce the problem, and to justify why it wouldn't be appropriate to just rename the files (which was my first reaction).
Other than the part that says "its only a problem on MIPS". That is pedantically correct because no other architecture (that I am aware of, not that I searched) currently has a devicetree source file name with a hyphen in it, where that file is compiled into the kernel as an asm file. But it is potentially a problem on any architecture to it is misleading to label it as MIPS only.
Quoted 6 lines
Quoted 2 lines
Reviewed-by Frank Rowand <[email protected]>Thanks
James
Quoted 14 lines · Frank Rowand
Quoted 8 lines · James Hogan
Quoted 6 lines · Frank Rowand
Quoted 5 lines · James Hogan
Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).Quoted 4 lines
I'll keep the paragraph about MIPS and the example configuration though, as I think its important information to reproduce the problem, and to justify why it wouldn't be appropriate to just rename the files (which was my first reaction).
Quoted 6 lines
Other than the part that says "its only a problem on MIPS". That is pedantically correct because no other architecture (that I am aware of, not that I searched) currently has a devicetree source file name with a hyphen in it, where that file is compiled into the kernel as an asm file. But it is potentially a problem on any architecture to it is misleading to label it as MIPS only.
Okay I'll reword to make it clearer and do a v2.
Thanks
James
2018-03-08 16:09 GMT+09:00 James Hogan <[email protected]>:
Quoted 22 lines · Frank Rowand
Quoted 14 lines · James Hogan
Quoted 8 lines · Frank Rowand
Quoted 6 lines · James Hogan
Quoted 5 lines
Quite a lot of dts files have hyphens, but its only a problem on MIPS where such files can be built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admitedly shouldn't really build all the dtb.o files, but thats a separate issue).Quoted 4 lines
I'll keep the paragraph about MIPS and the example configuration though, as I think its important information to reproduce the problem, and to justify why it wouldn't be appropriate to just rename the files (which was my first reaction).
Quoted 6 lines
Other than the part that says "its only a problem on MIPS". That is pedantically correct because no other architecture (that I am aware of, not that I searched) currently has a devicetree source file name with a hyphen in it, where that file is compiled into the kernel as an asm file. But it is potentially a problem on any architecture to it is misleading to label it as MIPS only.
Quoted 4 lines
Okay I'll reword to make it clearer and do a v2.
Thanks
James
The code looks good.
If you send v2, I can shortly apply it to the fixes branch.
If possible, I want to send a PR this weekend.
Signature · 2 lines
Best Regards Masahiro Yamada
PATCH v2 1/1 kbuild: Handle builtin dtb file names containing hyphens
cmd_dt_S_dtb constructs the assembly source to incorporate a devicetree FDT (that is, the .dtb file) as binary data in the kernel image. This assembly source contains labels before and after the binary data. The label names incorporate the file name of the corresponding .dtb file. Hyphens are not legal characters in labels, so .dtb files built into the kernel with hyphens in the file name result in errors like the following:
bcm3368-netgear-cvg834g.dtb.S: Assembler messages:
bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is -' bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode __dtb_bcm3368-netgear-cvg834g_begin:' bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode __dtb_bcm3368-netgear-cvg834g_end:' bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is -'
Fix this by updating cmd_dt_S_dtb to transform all hyphens from the file name to underscores when constructing the labels.
As of v4.16-rc2, 1139 .dts files across ARM64, ARM, MIPS and PowerPC contain hyphens in their names, but the issue only currently manifests on Broadcom MIPS platforms, as that is the only place where such files are built into the kernel. For example when CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admittedly shouldn't really build all the dtb.o files, but thats a separate issue).
---
Changes in v2:
- Rewrite commit message (thanks Frank for some improved wording).
- Add Franks' reviewed-by.
--- scripts/Makefile.lib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
scripts/Makefile.lib +4 -4
@@ -297,11 +297,11 @@ cmd_dt_S_dtb= \ echo '\#include <asm-generic/vmlinux.lds.h>'; \ echo '.section .dtb.init.rodata,"a"'; \ echo '.balign STRUCT_ALIGNMENT'; \ - echo '.global __dtb_$(*F)_begin'; \ - echo '__dtb_$(*F)_begin:'; \ + echo '.global __dtb_$(subst -,_,$(*F))_begin'; \ + echo '__dtb_$(subst -,_,$(*F))_begin:'; \ echo '.incbin "$<" '; \ - echo '__dtb_$(*F)_end:'; \ - echo '.global __dtb_$(*F)_end'; \ + echo '__dtb_$(subst -,_,$(*F))_end:'; \ + echo '.global __dtb_$(subst -,_,$(*F))_end'; \ echo '.balign STRUCT_ALIGNMENT'; \ ) > $@
Signature · 1 line
2.13.6
Re: [PATCH v2] kbuild: Handle builtin dtb file names containing hyphens
2018-03-08 20:02 GMT+09:00 James Hogan <[email protected]>:
Quoted 40 lines
cmd_dt_S_dtbconstructs the assembly source to incorporate a devicetree FDT (that is, the .dtb file) as binary data in the kernel image. This assembly source contains labels before and after the binary data. The label names incorporate the file name of the corresponding .dtb file. Hyphens are not legal characters in labels, so .dtb files built into the kernel with hyphens in the file name result in errors like the following:
bcm3368-netgear-cvg834g.dtb.S: Assembler messages:
bcm3368-netgear-cvg834g.dtb.S:5: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:5: Error: junk at end of line, first unrecognized character is-' bcm3368-netgear-cvg834g.dtb.S:6: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_begin:' bcm3368-netgear-cvg834g.dtb.S:8: Error: unrecognized opcode__dtb_bcm3368-netgear-cvg834g_end:' bcm3368-netgear-cvg834g.dtb.S:9: Error: : no such section bcm3368-netgear-cvg834g.dtb.S:9: Error: junk at end of line, first unrecognized character is-'Fix this by updating
cmd_dt_S_dtbto transform all hyphens from the file name to underscores when constructing the labels.As of v4.16-rc2, 1139 .dts files across ARM64, ARM, MIPS and PowerPC contain hyphens in their names, but the issue only currently manifests on Broadcom MIPS platforms, as that is the only place where such files are built into the kernel. For example when
CONFIG_DT_NETGEAR_CVG834G=y, or on BMIPS kernels when the dtbs target is used (in the latter case it admittedly shouldn't really build all the dtb.o files, but thats a separate issue).Fixes 695835511f96 ("MIPS: BMIPS: rename bcm96358nb4ser to bcm6358-neufbox4-sercom")Signed-off-by James Hogan <[email protected]>Reviewed-by Frank Rowand <[email protected]>Cc Rob Herring <[email protected]>Cc Masahiro Yamada <[email protected]>Cc Michal Marek <[email protected]>Cc Ralf Baechle <[email protected]>Cc Florian Fainelli <[email protected]>Cc Kevin Cernekee <[email protected]>Cc <[email protected]> # 4.9+
Quoted 4 lines
---
Changes in v2:
- Rewrite commit message (thanks Frank for some improved wording).
- Add Franks' reviewed-by.
Applied to linux-kbuild/fixes. Thanks!
Signature · 2 lines
Best Regards Masahiro Yamada
Quoted 3 lines · James Hogan
On dtb files which contain hyphens, the
dt_S_dtbcommand to build thedtb.Sfiles (which allow DTB files to be built into the kernel) results in errors like the following:
< snip >
Hi James,
Sorry for dribbling my comments out in so many emails. :-)
Please change the subject line to say "dtb filenames" instead of "dtb files".
Thanks,
Frank