#include #include "testdata.h" .macro fdtlong val .byte ((\val) >> 24) & 0xff .byte ((\val) >> 16) & 0xff .byte ((\val) >> 8) & 0xff .byte (\val) & 0xff .endm .macro treehdr tree .balign 8 .globl \tree \tree : fdtlong FDT_MAGIC fdtlong (\tree\()_end - \tree) fdtlong (\tree\()_struct - \tree) fdtlong (\tree\()_strings - \tree) fdtlong (\tree\()_rsvmap - \tree) fdtlong 0x11 fdtlong 0x10 fdtlong 0 fdtlong (\tree\()_strings_end - \tree\()_strings) fdtlong (\tree\()_struct_end - \tree\()_struct) .endm .macro rsvmape addrh, addrl, lenh, lenl fdtlong \addrh fdtlong \addrl fdtlong \lenh fdtlong \lenl .endm .macro empty_rsvmap tree .balign 8 \tree\()_rsvmap: rsvmape 0, 0, 0, 0 \tree\()_rsvmap_end: .endm .macro prophdr tree, name, len fdtlong FDT_PROP fdtlong \len fdtlong (\tree\()_\name - \tree\()_strings) .endm .macro propnil tree, name prophdr \tree, \name, 0 .endm .macro propu32 tree, name, val prophdr \tree, \name, 4 fdtlong \val .endm .macro propu64 tree, name, valh, vall prophdr \tree, \name, 8 fdtlong \valh fdtlong \vall .endm .macro propstr tree, name, str:vararg prophdr \tree, \name, (55f - 54f) 54: .asciz \str 55: .balign 4 .endm .macro beginn name:vararg fdtlong FDT_BEGIN_NODE .asciz \name .balign 4 .endm .macro endn fdtlong FDT_END_NODE .endm .macro string tree, name, str:vararg \tree\()_\name : .asciz \str .endm .data treehdr test_tree1 .balign 8 test_tree1_rsvmap: rsvmape TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L rsvmape TEST_ADDR_2H, TEST_ADDR_2L, TEST_SIZE_2H, TEST_SIZE_2L rsvmape 0, 0, 0, 0 test_tree1_rsvmap_end: test_tree1_struct: beginn "" propstr test_tree1, compatible, "test_tree1" propu32 test_tree1, prop_int, TEST_VALUE_1 propu64 test_tree1, prop_int64, TEST_VALUE64_1H, TEST_VALUE64_1L propstr test_tree1, prop_str, TEST_STRING_1 propu32 test_tree1, address_cells, 1 propu32 test_tree1, size_cells, 0 beginn "subnode@1" propstr test_tree1, compatible, "subnode1" propu32 test_tree1, reg, 1 propu32 test_tree1, prop_int, TEST_VALUE_1 beginn "subsubnode" propstr test_tree1, compatible, "subsubnode1\0subsubnode" propstr test_tree1, placeholder, "this is a placeholder string\0string2" propu32 test_tree1, prop_int, TEST_VALUE_1 endn beginn "ss1" endn endn beginn "subnode@2" propu32 test_tree1, reg, 2 propu32 test_tree1, linux_phandle, PHANDLE_1 propu32 test_tree1, prop_int, TEST_VALUE_2 propu32 test_tree1, address_cells, 1 propu32 test_tree1, size_cells, 0 beginn "subsubnode@0" propu32 test_tree1, reg, 0 propu32 test_tree1, phandle, PHANDLE_2 propstr test_tree1, compatible, "subsubnode2\0subsubnode" propu32 test_tree1, prop_int, TEST_VALUE_2 endn beginn "ss2" endn endn endn fdtlong FDT_END test_tree1_struct_end: test_tree1_strings: string test_tree1, compatible, "compatible" string test_tree1, prop_int, "prop-int" string test_tree1, prop_int64, "prop-int64" string test_tree1, prop_str, "prop-str" string test_tree1, linux_phandle, "linux,phandle" string test_tree1, phandle, "phandle" string test_tree1, reg, "reg" string test_tree1, placeholder, "placeholder" string test_tree1, address_cells, "#address-cells" string test_tree1, size_cells, "#size-cells" test_tree1_strings_end: test_tree1_end: treehdr truncated_property empty_rsvmap truncated_property truncated_property_struct: beginn "" prophdr truncated_property, prop_truncated, 4 /* Oops, no actual property data here */ truncated_property_struct_end: truncated_property_strings: string truncated_property, prop_truncated, "truncated" truncated_property_strings_end: truncated_property_end: treehdr bad_node_char empty_rsvmap bad_node_char bad_node_char_struct: beginn "" beginn "sub$node" endn endn fdtlong FDT_END bad_node_char_struct_end: bad_node_char_strings: bad_node_char_strings_end: bad_node_char_end: treehdr bad_node_format empty_rsvmap bad_node_format bad_node_format_struct: beginn "" beginn "subnode@1@2" endn endn fdtlong FDT_END bad_node_format_struct_end: bad_node_format_strings: bad_node_format_strings_end: bad_node_format_end: treehdr bad_prop_char empty_rsvmap bad_prop_char bad_prop_char_struct: beginn "" propu32 bad_prop_char, prop, TEST_VALUE_1 endn fdtlong FDT_END bad_prop_char_struct_end: bad_prop_char_strings: string bad_prop_char, prop, "prop$erty" bad_prop_char_strings_end: bad_prop_char_end: /* overflow_size_strings */ .balign 8 .globl ovf_size_strings ovf_size_strings: fdtlong FDT_MAGIC fdtlong (ovf_size_strings_end - ovf_size_strings) fdtlong (ovf_size_strings_struct - ovf_size_strings) fdtlong (ovf_size_strings_strings - ovf_size_strings) fdtlong (ovf_size_strings_rsvmap - ovf_size_strings) fdtlong 0x11 fdtlong 0x10 fdtlong 0 fdtlong 0xffffffff fdtlong (ovf_size_strings_struct_end - ovf_size_strings_struct) empty_rsvmap ovf_size_strings ovf_size_strings_struct: beginn "" propu32 ovf_size_strings, bad_string, 0 endn fdtlong FDT_END ovf_size_strings_struct_end: ovf_size_strings_strings: string ovf_size_strings, x, "x" ovf_size_strings_bad_string = ovf_size_strings_strings + 0x10000000 ovf_size_strings_strings_end: ovf_size_strings_end: /* truncated_string */ treehdr truncated_string empty_rsvmap truncated_string truncated_string_struct: beginn "" propnil truncated_string, good_string propnil truncated_string, bad_string endn fdtlong FDT_END truncated_string_struct_end: truncated_string_strings: string truncated_string, good_string, "good" truncated_string_bad_string: .ascii "bad" /* NOTE: terminating \0 deliberately missing */ truncated_string_strings_end: truncated_string_end: /* truncated_memrsv */ treehdr truncated_memrsv truncated_memrsv_struct: beginn "" endn fdtlong FDT_END truncated_memrsv_struct_end: truncated_memrsv_strings: truncated_memrsv_strings_end: .balign 8 truncated_memrsv_rsvmap: rsvmape TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L truncated_memrsv_rsvmap_end: truncated_memrsv_end: /* two root nodes */ treehdr two_roots empty_rsvmap two_roots two_roots_struct: beginn "" endn beginn "" endn fdtlong FDT_END two_roots_struct_end: two_roots_strings: two_roots_strings_end: two_roots_end: /* root node with a non-empty name */ treehdr named_root empty_rsvmap named_root named_root_struct: beginn "fake" endn fdtlong FDT_END named_root_struct_end: named_root_strings: named_root_strings_end: named_root_end: