From c5b2905d92e7c34616fca2dc12d9df991f2d7d06 Mon Sep 17 00:00:00 2001 From: Mathieu Othacehe Date: Tue, 28 Nov 2017 10:19:56 +0100 Subject: gnu: dtc: Fix build on 32 bits platforms. * gnu/packages/bootloaders.scm (dtc)[patches]: Add dtc-32-bits-check.patch and dtc-format-modifier.patch to fix build and tests on 32 bits platforms. * gnu/packages/patches/dtc-32-bits-check.patch : New file. * gnu/packages/patches/dtc-format-modifier.patch : New file. * gnu/local.mk (dist_patch_DATA): Add two above patches. --- gnu/local.mk | 2 + gnu/packages/bootloaders.scm | 6 +- gnu/packages/patches/dtc-32-bits-check.patch | 134 +++++++++++++++++++++++++ gnu/packages/patches/dtc-format-modifier.patch | 38 +++++++ 4 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/dtc-32-bits-check.patch create mode 100644 gnu/packages/patches/dtc-format-modifier.patch (limited to 'gnu') diff --git a/gnu/local.mk b/gnu/local.mk index 926f03ddba..05a86ac177 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -603,6 +603,8 @@ dist_patch_DATA = \ %D%/packages/patches/doc++-include-directives.patch \ %D%/packages/patches/doc++-segfault-fix.patch \ %D%/packages/patches/doxygen-test.patch \ + %D%/packages/patches/dtc-format-modifier.patch \ + %D%/packages/patches/dtc-32-bits-check.patch \ %D%/packages/patches/dvd+rw-tools-add-include.patch \ %D%/packages/patches/elfutils-tests-ptrace.patch \ %D%/packages/patches/elixir-disable-failing-tests.patch \ diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index 7d42ff3ebc..cee1b17019 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -302,7 +302,11 @@ menu to select one of the installed operating systems.") "dtc-" version ".tar.xz")) (sha256 (base32 - "08gnl39i4xy3dm8iqwlz2ygx0ml1bgc5kpiys5ll1wvah1j72b04")))) + "08gnl39i4xy3dm8iqwlz2ygx0ml1bgc5kpiys5ll1wvah1j72b04")) + ;; Fix build and tests on 32 bits platforms. + ;; Will probably be fixed in 1.4.6 release. + (patches (search-patches "dtc-format-modifier.patch" + "dtc-32-bits-check.patch")))) (build-system gnu-build-system) (native-inputs `(("bison" ,bison) diff --git a/gnu/packages/patches/dtc-32-bits-check.patch b/gnu/packages/patches/dtc-32-bits-check.patch new file mode 100644 index 0000000000..cf15be3404 --- /dev/null +++ b/gnu/packages/patches/dtc-32-bits-check.patch @@ -0,0 +1,134 @@ +This fixes tests on 32 bits platforms. Patch taken from upstream. + +commit f8872e29ce06d78d3db71b3ab26a7465fc8a9586 +Author: David Gibson +Date: Fri Oct 6 23:07:30 2017 +1100 + + 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 + +diff --git a/tests/testdata.h b/tests/testdata.h +index 3588778..f6bbe1d 100644 +--- a/tests/testdata.h ++++ b/tests/testdata.h +@@ -4,15 +4,25 @@ + #define ASM_CONST_LL(x) (x##ULL) + #endif + +-#define TEST_ADDR_1 ASM_CONST_LL(0xdeadbeef00000000) +-#define TEST_SIZE_1 ASM_CONST_LL(0x100000) +-#define TEST_ADDR_2 ASM_CONST_LL(123456789) +-#define TEST_SIZE_2 ASM_CONST_LL(010000) ++#define TEST_ADDR_1H ASM_CONST_LL(0xdeadbeef) ++#define TEST_ADDR_1L ASM_CONST_LL(0x00000000) ++#define TEST_ADDR_1 ((TEST_ADDR_1H << 32) | TEST_ADDR_1L) ++#define TEST_SIZE_1H ASM_CONST_LL(0x00000000) ++#define TEST_SIZE_1L ASM_CONST_LL(0x00100000) ++#define TEST_SIZE_1 ((TEST_SIZE_1H << 32) | TEST_SIZE_1L) ++#define TEST_ADDR_2H ASM_CONST_LL(0) ++#define TEST_ADDR_2L ASM_CONST_LL(123456789) ++#define TEST_ADDR_2 ((TEST_ADDR_2H << 32) | TEST_ADDR_2L) ++#define TEST_SIZE_2H ASM_CONST_LL(0) ++#define TEST_SIZE_2L ASM_CONST_LL(010000) ++#define TEST_SIZE_2 ((TEST_SIZE_2H << 32) | TEST_SIZE_2L) + + #define TEST_VALUE_1 0xdeadbeef + #define TEST_VALUE_2 123456789 + +-#define TEST_VALUE64_1 ASM_CONST_LL(0xdeadbeef01abcdef) ++#define TEST_VALUE64_1H ASM_CONST_LL(0xdeadbeef) ++#define TEST_VALUE64_1L ASM_CONST_LL(0x01abcdef) ++#define TEST_VALUE64_1 ((TEST_VALUE64_1H << 32) | TEST_VALUE64_1L) + + #define PHANDLE_1 0x2000 + #define PHANDLE_2 0x2001 +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) diff --git a/gnu/packages/patches/dtc-format-modifier.patch b/gnu/packages/patches/dtc-format-modifier.patch new file mode 100644 index 0000000000..c33d16857f --- /dev/null +++ b/gnu/packages/patches/dtc-format-modifier.patch @@ -0,0 +1,38 @@ +This fixes build on 32 bits platforms. This patch is taken from upstream. + +commit 497432fd2131967f349e69dc5d259072151cc4b4 +Author: Thierry Reding +Date: Wed Sep 27 15:04:09 2017 +0200 + + checks: Use proper format modifier for size_t + + The size of size_t can vary between architectures, so using %ld isn't + going to work on 32-bit builds. Use the %zu modifier to make sure it is + always correct. + + Signed-off-by: Thierry Reding + Acked-by: Rob Herring + Signed-off-by: David Gibson + +diff --git a/checks.c b/checks.c +index 902f2e3..08a3a29 100644 +--- a/checks.c ++++ b/checks.c +@@ -972,7 +972,7 @@ static void check_property_phandle_args(struct check *c, + int cell, cellsize = 0; + + if (prop->val.len % sizeof(cell_t)) { +- FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %ld in node %s", ++ FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %zu in node %s", + prop->name, prop->val.len, sizeof(cell_t), node->fullpath); + return; + } +@@ -1163,7 +1163,7 @@ static void check_interrupts_property(struct check *c, + return; + + if (irq_prop->val.len % sizeof(cell_t)) +- FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %ld in node %s", ++ FAIL(c, dti, "property '%s' size (%d) is invalid, expected multiple of %zu in node %s", + irq_prop->name, irq_prop->val.len, sizeof(cell_t), + node->fullpath); + -- cgit 1.4.1