zephyr/scripts
Ulf Magnusson 06b746cc58 dts: dtlib/edtlib: Add a syntax-based type-checking system
Property type-checking has been pretty rudimentary until now, only
checking things like the length being divisible by 4 for 'type: array',
and strings being null-terminated. In particular, no checking was done
for 'type: uint8-array', letting

  jedec-id = < 0xc8 0x28 0x17 >;

slip through when

  jedec-id = [ 0xc8 0x28 0x17 ];

was intended.

Fix it by adding a syntax-based type checker:

  1. Add Property.type, which gives a high-level type for the property,
     derived from the markers added in the previous commit.

     This includes types like TYPE_EMPTY ('foo;'),
     TYPE_NUM ('foo = < 3 >;'), TYPE_BYTES ('foo = [ 01 02 ];'),
     TYPE_STRINGS ('foo = "bar", "baz"'),
     TYPE_PHANDLE ('foo = < &bar >;'), and TYPE_COMPOUND (everything not
     recognized).

     See the Property.type docstring in dtlib for more info.

  2. Use the high-level type in
     Property.to_num()/to_string()/to_node()/etc. to verify that the
     property was assigned in an expected way for the type.

     If the assignment looks bad, give a helpful error:

       expected property 'nums' on /foo/bar in some.dts to be assigned
       with 'nums = < (number) (number) ... >', not 'nums = "oops";'

Some other related changes are included as well:

  - There's a new Property.to_bytes() function that works like accessing
    Property.bytes, except with an added check for the value being
    assigned like 'foo = [ ... ]'.

    This function solves problems like the jedec-id one.

  - There's a new Property.to_path() function for fetching the
    referenced node for assignments like 'foo = &node;', with type
    checking. (Strings are accepted too, as long as they give the path
    to an existing node.)

    This function is used for /chosen and /aliases.

  - A new 'type: phandle' type can now be given in bindings, for
    properties that are assigned like 'foo = < &node >;'.

  - Property.__str__() now displays phandles and path references as they
    were written (e.g. '< &foo >' instead of '< 0x1 >', if the
    allocated phandle happened to be 1).

  - Property.to_num() and Property.to_nums() no longer take a 'length'
    parameter, because it makes no sense with the type checking.

  - The global dtlib.to_string() and dtlib.to_strings() functions were
    removed, because they're not that useful.

  - More tests were added, along with misc. minor cleanup in various
    places.

  - Probably other stuff I forgot.

The more strict type checking in dtlib indirectly makes some parts of
edtlib more strict as well (wherever Property.to_*() is used).

Fixes: #18131

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-08-13 07:41:45 -05:00
..
checkpatch kernel: rename NANO_ESF 2019-07-25 15:06:58 -07:00
ci west: require v0.6.0 or higher 2019-08-05 15:17:45 +02:00
coccinelle scripts/coccinelle: Add script for counting identifier length 2019-04-18 12:29:07 -04:00
dts dts: dtlib/edtlib: Add a syntax-based type-checking system 2019-08-13 07:41:45 -05:00
footprint size_report: Don't crash when observing stripped symbols 2019-07-05 14:18:49 -04:00
gitlint license: cleanup: add SPDX Apache-2.0 license identifier 2019-04-07 08:45:22 -04:00
kconfig genrest: De-spam docs by skipping direct deps. in more places 2019-06-24 12:14:06 -07:00
sanity_chk boards: remove quarl_se_c1000 2019-07-29 21:30:25 -07:00
support license: cleanup: add SPDX Apache-2.0 license identifier 2019-04-07 08:45:22 -04:00
west_commands scripts: openocd: use hex file for flash command 2019-08-08 22:16:50 +02:00
.gitignore
checkpatch.pl dts: import vendor-prefixes.txt from linux kernel 2019-05-22 12:40:20 -04:00
checkstack.pl
coccicheck docs: fix misspelling across the tree 2019-06-19 15:34:13 -05:00
dir_is_writeable.py license: cleanup: add SPDX Apache-2.0 license identifier 2019-04-07 08:45:22 -04:00
elf_helper.py scripts: elf_helper: correct kernel object address check range 2019-07-08 13:28:13 -07:00
file2hex.py file2hex.py: new --gzip-mtime option that defaults to zero + test 2019-04-17 08:27:40 -04:00
filter-known-issues.py docs: fix misspelling across the tree 2019-06-19 15:34:13 -05:00
gen_app_partitions.py gen_app_partitions: deterministic _and_ decreasing app_smem_*.ld 2019-06-27 18:06:30 -07:00
gen_cfb_font_header.py scripts: gen_cfb_font_header: modify to replicate cfb fonts 2019-07-31 05:43:50 -04:00
gen_gcov_files.py scripts: gen_gcov_files: report if data capture is not complete 2019-01-29 15:03:38 -05:00
gen_kobject_list.py userspace: add kobject flag for drivers 2019-07-24 12:33:34 +02:00
gen_offset_header.py scripts: python: cleanup script and fix PEP8 issues 2018-01-03 19:03:41 -05:00
gen_priv_stacks.py scripts: gen_priv_stacks.py: use the right alignment for priv stacks 2019-06-24 10:16:57 -07:00
gen_relocate_app.py scripts: make mpu align in sections for code reloation 2019-07-18 11:09:48 -04:00
gen_syscall_header.py scripts: Remove unnecessary () around if/while conditions in Python 2019-03-26 07:59:59 -05:00
gen_syscalls.py userspace: properly namespace handler functions 2019-03-18 09:23:11 -07:00
mergehex.py scripts: mergehex: Add --overlap argument 2019-05-16 07:16:55 -05:00
parse_syscalls.py userspace: add additional script documentation 2019-03-12 08:37:58 +01:00
process_gperf.py scripts: Remove unnecessary () around if/while conditions in Python 2019-03-26 07:59:59 -05:00
qemu-machine-hack.py license: cleanup: add SPDX Apache-2.0 license identifier 2019-04-07 08:45:22 -04:00
requirements.txt requirements.txt: change package name "hub" to "git-spindle" 2019-08-12 11:53:10 +02:00
sanitycheck scripts/sanitycheck: optimize disk usage for --save-tests 2019-07-31 18:46:32 -04:00
series-push-hook.sh scripts: fix path issue in push-hook script 2019-03-13 11:59:38 -05:00
spelling.txt
subfolder_list.py cmake: Encode and decode in UTF-8 in build system 2019-07-18 16:50:08 +02:00
tags.sh scripts: fix tags.sh to current source tree 2018-01-15 18:30:28 -05:00
valgrind.supp valgrind: Add error supression file for POSIX arch 2018-12-21 21:07:18 +01:00
waitpid
west-commands.yml west: Add completion command 2019-05-10 13:08:27 +02:00
zephyr_module.py build: west: Update the error message when not in west dir 2019-08-06 19:13:24 +02:00