mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-14 00:37:41 -04:00
Fix dtc bugs for 64-bit compile
I've just tested building dtc as an x86_64 binary on a 32-bit i386 host by using: make CC="gcc -m64" This patch fixes a handful of minor bugs thus discovered: * There is a printf() type mismatch on 64-bit in value-labels.c * For the tests which use libdl, we were using the GNU make feature where it will find libdl.so given a dependency in the form '-ldl'. But this built-in make logic doesn't know we're compiling 64-bit so finds the 32-bit version of the library. We avoid using this and instead explicitly pass -ldl to CC, which being the 64-bit version does know where to look. * To process dtc's asm output into .so files, run_tests.sh was directly invoking the (default instance of) the assembler and linker. Instead invoke these via the CC driver, and allow that to be overriden from the make environment. * The x86_64 assembler doesn't 0 fill with the .balign directive (presumably it is NOP filling). That doesn't produce strictly incorrect trees, but it is confusing and confounds are testcases which do byte-by-byte comparison of the trees produced by asm output with direct dtb output (which does 0 pad where necessary, of course). This patch uses the optional second argument to .balign to force gas to zero-fill instead. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
f2f6d0f2f0
commit
b31b271f91
4 changed files with 11 additions and 6 deletions
|
@ -166,7 +166,7 @@ static void asm_emit_align(void *e, int a)
|
||||||
{
|
{
|
||||||
FILE *f = e;
|
FILE *f = e;
|
||||||
|
|
||||||
fprintf(f, "\t.balign\t%d\n", a);
|
fprintf(f, "\t.balign\t%d, 0\n", a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void asm_emit_data(void *e, struct data d)
|
static void asm_emit_data(void *e, struct data d)
|
||||||
|
|
|
@ -41,7 +41,9 @@ tests: $(TESTS) $(TESTS_TREES)
|
||||||
|
|
||||||
$(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o $(LIBFDT_archive)
|
$(LIB_TESTS): %: $(TESTS_PREFIX)testutils.o $(LIBFDT_archive)
|
||||||
|
|
||||||
$(DL_LIB_TESTS): %: $(TESTS_PREFIX)testutils.o $(LIBFDT_archive) -ldl
|
$(DL_LIB_TESTS): %: %.o $(TESTS_PREFIX)testutils.o $(LIBFDT_archive)
|
||||||
|
@$(VECHO) LD [libdl] $@
|
||||||
|
$(LINK.c) -o $@ $^ -ldl
|
||||||
|
|
||||||
$(LIBTREE_TESTS): %: $(TESTS_PREFIX)testutils.o $(TESTS_PREFIX)trees.o $(LIBFDT_archive)
|
$(LIBTREE_TESTS): %: $(TESTS_PREFIX)testutils.o $(TESTS_PREFIX)trees.o $(LIBFDT_archive)
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
. ./tests.sh
|
. ./tests.sh
|
||||||
|
|
||||||
|
if [ -z "$CC" ]; then
|
||||||
|
CC=gcc
|
||||||
|
fi
|
||||||
|
|
||||||
export QUIET_TEST=1
|
export QUIET_TEST=1
|
||||||
|
|
||||||
export VALGRIND=
|
export VALGRIND=
|
||||||
|
@ -72,8 +76,7 @@ run_dtc_test () {
|
||||||
}
|
}
|
||||||
|
|
||||||
asm_to_so () {
|
asm_to_so () {
|
||||||
as -o $1.test.o data.S $1.test.s && \
|
$CC -shared -o $1.test.so data.S $1.test.s
|
||||||
ld -shared -o $1.test.so $1.test.o
|
|
||||||
}
|
}
|
||||||
|
|
||||||
asm_to_so_test () {
|
asm_to_so_test () {
|
||||||
|
|
|
@ -89,9 +89,9 @@ void check_prop_labels(void *sohandle, void *fdt, const char *name,
|
||||||
FAIL("Couldn't locate label symbol \"%s\"", name);
|
FAIL("Couldn't locate label symbol \"%s\"", name);
|
||||||
|
|
||||||
if ((p - prop->data) != off)
|
if ((p - prop->data) != off)
|
||||||
FAIL("Label \"%s\" points to offset %d instead of %d"
|
FAIL("Label \"%s\" points to offset %ld instead of %d"
|
||||||
"in property \"%s\"", labels[i].labelname,
|
"in property \"%s\"", labels[i].labelname,
|
||||||
p - prop->data, off, name);
|
(long)(p - prop->data), off, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue