Browse Source

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>
main
David Gibson 15 years ago committed by Jon Loeliger
parent
commit
b31b271f91
  1. 2
      flattree.c
  2. 4
      tests/Makefile.tests
  3. 7
      tests/run_tests.sh
  4. 4
      tests/value-labels.c

2
flattree.c

@ -166,7 +166,7 @@ static void asm_emit_align(void *e, int a) @@ -166,7 +166,7 @@ static void asm_emit_align(void *e, int a)
{
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)

4
tests/Makefile.tests

@ -41,7 +41,9 @@ tests: $(TESTS) $(TESTS_TREES) @@ -41,7 +41,9 @@ tests: $(TESTS) $(TESTS_TREES)

$(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)


7
tests/run_tests.sh

@ -2,6 +2,10 @@ @@ -2,6 +2,10 @@

. ./tests.sh

if [ -z "$CC" ]; then
CC=gcc
fi

export QUIET_TEST=1

export VALGRIND=
@ -72,8 +76,7 @@ run_dtc_test () { @@ -72,8 +76,7 @@ run_dtc_test () {
}

asm_to_so () {
as -o $1.test.o data.S $1.test.s && \
ld -shared -o $1.test.so $1.test.o
$CC -shared -o $1.test.so data.S $1.test.s
}

asm_to_so_test () {

4
tests/value-labels.c

@ -89,9 +89,9 @@ void check_prop_labels(void *sohandle, void *fdt, const char *name, @@ -89,9 +89,9 @@ void check_prop_labels(void *sohandle, void *fdt, const char *name,
FAIL("Couldn't locate label symbol \"%s\"", name);

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,
p - prop->data, off, name);
(long)(p - prop->data), off, name);
}
}


Loading…
Cancel
Save