Source: device-tree-compiler
Version: 1.6.1-4
Severity: normal
Tags: ftbfs patch
Dear Maintainer,
Build fails here:
AS tests/trees.o
tests/trees.S: Assembler messages:
tests/trees.S:256: Error: junk at end of line, first unrecognized character is
`''
tests/trees.S:257: Error: junk at end of line, first unrecognized character is
`''
tests/trees.S:258: Error: junk at end of line, first unrecognized character is
`''
tests/trees.S:219: Error: invalid operands (*UND* and .data sections) for `-'
The GNU assembler on hppa differs in a number of ways with the assembler
on other architectures:
1) The end-of-line character is `!'. `;' introduces a comment.
2) The `.string' directive doesn't add a null termination character.
3) It is strict about the format for characters and junk at end of line.
With the attached patch, the device-tree-compiler package builds successfully
on hppa:
https://buildd.debian.org/status/fetch.php?pkg=device-tree-compiler&arch=hppa&ver=1.6.1-4&stamp=1666457482&raw=0
Please push upstream and add to debian/patches if okay.
Thanks,
Dave Anglin
-- System Information:
Debian Release: bookworm/sid
APT prefers buildd-unstable
APT policy: (500, 'buildd-unstable'), (500, 'unstable')
Architecture: hppa (parisc64)
Kernel: Linux 5.19.16+ (SMP w/4 CPU threads)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
Index: device-tree-compiler-1.6.1/flattree.c
===
--- device-tree-compiler-1.6.1.orig/flattree.c
+++ device-tree-compiler-1.6.1/flattree.c
@@ -124,7 +124,7 @@ static void asm_emit_cell(void *e, cell_
{
FILE *f = e;
- fprintf(f, "\t.byte 0x%02x; .byte 0x%02x; .byte 0x%02x; .byte 0x%02x\n",
+ fprintf(f, "\t.byte 0x%02x\n\t.byte 0x%02x\n\t.byte 0x%02x\n\t.byte
0x%02x\n",
(val >> 24) & 0xff, (val >> 16) & 0xff,
(val >> 8) & 0xff, val & 0xff);
}
@@ -133,10 +133,17 @@ static void asm_emit_string(void *e, con
{
FILE *f = e;
+#if defined(__hppa__)
+ if (len != 0)
+ fprintf(f, "\t.stringz\t\"%.*s\"\n", len, str);
+ else
+ fprintf(f, "\t.stringz\t\"%s\"\n", str);
+#else
if (len != 0)
fprintf(f, "\t.string\t\"%.*s\"\n", len, str);
else
fprintf(f, "\t.string\t\"%s\"\n", str);
+#endif
}
static void asm_emit_align(void *e, int a)
@@ -438,7 +445,11 @@ static void dump_stringtable_asm(FILE *f
while (p < (strbuf.val + strbuf.len)) {
len = strlen(p);
+#if defined(__hppa__)
+ fprintf(f, "\t.stringz \"%s\"\n", p);
+#else
fprintf(f, "\t.string \"%s\"\n", p);
+#endif
p += len+1;
}
}
Index: device-tree-compiler-1.6.1/tests/trees.S
===
--- device-tree-compiler-1.6.1.orig/tests/trees.S
+++ device-tree-compiler-1.6.1/tests/trees.S
@@ -1,6 +1,78 @@
#include
#include "testdata.h"
+#ifdef __hppa__
+#define FDTLONG(val) \
+ .byte ((val) >> 24) & 0xff ! \
+ .byte ((val) >> 16) & 0xff ! \
+ .byte ((val) >> 8) & 0xff ! \
+ .byte (val) & 0xff!
+
+#define TREE_HDR(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) !
+
+#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, 0, 0) \
+tree##_rsvmap_end: !
+
+#define PROPHDR(tree, name, len) \
+ FDTLONG(FDT_PROP) ! \
+ FDTLONG(len)! \
+ FDTLONG(tree##_##name - tree##_strings) !
+
+#define PROP_EMPTY(tree, name) \
+ PROPHDR(tree, name, 0) !
+
+#define PROP_INT(tree, name, val) \
+ PROPHDR(tree, name, 4) \
+ FDTLONG(val)!
+
+#define PROP_INT64(tree, name, valh, vall) \
+ PROPHDR(tree, name, 8) \
+ FDTLONG(valh) ! \
+ FDTLONG(vall) !
+
+#define PROP_STR(tree, name, str) \
+ PROPHDR(tree, name, 55f - 54f) \
+54:\
+ .stringzstr ! \
+55:\
+ .balign 4 !
+
+#define BEGIN_NODE(name) \
+ FDTLONG(FDT_BEGIN_NODE) ! \
+ .stringzname! \
+ .balign 4 !
+
+#define END_