summaryrefslogtreecommitdiff
path: root/tests/trees.S
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2017-10-06 23:07:30 +1100
committerDavid Gibson <david@gibson.dropbear.id.au>2017-10-06 23:15:32 +1100
commitf8872e29ce06d78d3db71b3ab26a7465fc8a9586 (patch)
treeb8ac53cb4aca9e6b62eec6b9fa5ddde34c4ecf9f /tests/trees.S
parent48c91c08bcfa3cdc10284e048b3c0c629bd67adf (diff)
downloaddevice-tree-compiler-f8872e29ce06d78d3db71b3ab26a7465fc8a9586.tar.gz
tests: Avoid 64-bit arithmetic in assembler
For testing we (ab)use the assembler to build us a sample dtb, independent of the other tools (dtc and libfdt) that we're trying to test. In a few places this uses 64-bit arithmetic to decompose 64-bit constants into the individual bytes in the blob. Unfortunately, it seems that some builds of GNU as don't support >32 bit arithmetic, though it's not entirely clear to me which do and which don't (Fedora i386 does support 64-bit, Debian arm32 doesn't). Anyway, to be safe, this avoids 64-bit arithmetic in assembler at the cost of some extra awkwardness because we have to define the values in 32-bit halves. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'tests/trees.S')
-rw-r--r--tests/trees.S33
1 files changed, 13 insertions, 20 deletions
diff --git a/tests/trees.S b/tests/trees.S
index 9854d1d..9859914 100644
--- a/tests/trees.S
+++ b/tests/trees.S
@@ -7,16 +7,6 @@
.byte ((val) >> 8) & 0xff ; \
.byte (val) & 0xff ;
-#define FDTQUAD(val) \
- .byte ((val) >> 56) & 0xff ; \
- .byte ((val) >> 48) & 0xff ; \
- .byte ((val) >> 40) & 0xff ; \
- .byte ((val) >> 32) & 0xff ; \
- .byte ((val) >> 24) & 0xff ; \
- .byte ((val) >> 16) & 0xff ; \
- .byte ((val) >> 8) & 0xff ; \
- .byte (val) & 0xff ;
-
#define TREE_HDR(tree) \
.balign 8 ; \
.globl _##tree ; \
@@ -33,14 +23,16 @@ tree: \
FDTLONG(tree##_strings_end - tree##_strings) ; \
FDTLONG(tree##_struct_end - tree##_struct) ;
-#define RSVMAP_ENTRY(addr, len) \
- FDTQUAD(addr) ; \
- FDTQUAD(len) ; \
+#define RSVMAP_ENTRY(addrh, addrl, lenh, lenl) \
+ FDTLONG(addrh) ; \
+ FDTLONG(addrl) ; \
+ FDTLONG(lenh) ; \
+ FDTLONG(lenl)
#define EMPTY_RSVMAP(tree) \
.balign 8 ; \
tree##_rsvmap: ; \
- RSVMAP_ENTRY(0, 0) \
+ RSVMAP_ENTRY(0, 0, 0, 0) \
tree##_rsvmap_end: ;
#define PROPHDR(tree, name, len) \
@@ -52,9 +44,10 @@ tree##_rsvmap_end: ;
PROPHDR(tree, name, 4) \
FDTLONG(val) ;
-#define PROP_INT64(tree, name, val) \
+#define PROP_INT64(tree, name, valh, vall) \
PROPHDR(tree, name, 8) \
- FDTQUAD(val) ;
+ FDTLONG(valh) ; \
+ FDTLONG(vall) ;
#define PROP_STR(tree, name, str) \
PROPHDR(tree, name, 55f - 54f) \
@@ -81,16 +74,16 @@ tree##_##name: ; \
.balign 8
test_tree1_rsvmap:
- RSVMAP_ENTRY(TEST_ADDR_1, TEST_SIZE_1)
- RSVMAP_ENTRY(TEST_ADDR_2, TEST_SIZE_2)
- RSVMAP_ENTRY(0, 0)
+ RSVMAP_ENTRY(TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L)
+ RSVMAP_ENTRY(TEST_ADDR_2H, TEST_ADDR_2L, TEST_SIZE_2H, TEST_SIZE_2L)
+ RSVMAP_ENTRY(0, 0, 0, 0)
test_tree1_rsvmap_end:
test_tree1_struct:
BEGIN_NODE("")
PROP_STR(test_tree1, compatible, "test_tree1")
PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
- PROP_INT64(test_tree1, prop_int64, TEST_VALUE64_1)
+ PROP_INT64(test_tree1, prop_int64, TEST_VALUE64_1H, TEST_VALUE64_1L)
PROP_STR(test_tree1, prop_str, TEST_STRING_1)
PROP_INT(test_tree1, address_cells, 1)
PROP_INT(test_tree1, size_cells, 0)