dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
#! /bin/sh
|
2006-11-27 06:21:28 +01:00
|
|
|
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
. ./tests.sh
|
2008-03-05 06:01:55 +01:00
|
|
|
|
2009-11-12 03:30:02 +01:00
|
|
|
if [ -z "$CC" ]; then
|
|
|
|
CC=gcc
|
|
|
|
fi
|
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
export QUIET_TEST=1
|
|
|
|
|
2007-11-21 01:56:14 +01:00
|
|
|
export VALGRIND=
|
|
|
|
VGCODE=126
|
|
|
|
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_tests=0
|
|
|
|
tot_pass=0
|
|
|
|
tot_fail=0
|
|
|
|
tot_config=0
|
2007-11-21 01:56:14 +01:00
|
|
|
tot_vg=0
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_strange=0
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
base_run_test() {
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_tests=$((tot_tests + 1))
|
2008-03-05 06:01:55 +01:00
|
|
|
if VALGRIND="$VALGRIND" "$@"; then
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_pass=$((tot_pass + 1))
|
2007-06-26 03:33:10 +02:00
|
|
|
else
|
2007-08-29 04:18:51 +02:00
|
|
|
ret="$?"
|
2010-08-30 04:53:03 +02:00
|
|
|
if [ "$ret" -eq 1 ]; then
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_config=$((tot_config + 1))
|
2010-08-30 04:53:03 +02:00
|
|
|
elif [ "$ret" -eq 2 ]; then
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_fail=$((tot_fail + 1))
|
2010-08-30 04:53:03 +02:00
|
|
|
elif [ "$ret" -eq $VGCODE ]; then
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_vg=$((tot_vg + 1))
|
2007-08-29 04:18:51 +02:00
|
|
|
else
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
tot_strange=$((tot_strange + 1))
|
2007-08-29 04:18:51 +02:00
|
|
|
fi
|
2007-06-26 03:33:10 +02:00
|
|
|
fi
|
2006-11-27 06:21:28 +01:00
|
|
|
}
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_test () {
|
|
|
|
echo -n "$@: "
|
|
|
|
if [ -n "$VALGRIND" -a -f $1.supp ]; then
|
|
|
|
VGSUPP="--suppressions=$1.supp"
|
|
|
|
fi
|
|
|
|
base_run_test $VALGRIND $VGSUPP "./$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
run_sh_test () {
|
|
|
|
echo -n "$@: "
|
|
|
|
base_run_test sh "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
wrap_test () {
|
|
|
|
(
|
|
|
|
if verbose_run "$@"; then
|
|
|
|
PASS
|
|
|
|
else
|
|
|
|
ret="$?"
|
|
|
|
if [ "$ret" -gt 127 ]; then
|
dtc: Address an assortment of portability problems
I've recently worked with a FreeBSD developer, getting dtc and libfdt
working on FreeBSD. This showed up a number of portability problems
in the dtc package which this patch addresses. Changes are as
follows:
- the parent_offset and supernode_atdepth_offset testcases
used the glibc extension functions strchrnul() and strndupa(). Those
are removed, using slightly longer coding with standard C functions
instead.
- some other testcases had a #define _GNU_SOURCE for no
particular reason. This is removed.
- run_tests.sh has bash specific constructs removed, and the
interpreter changed to /bin/sh. This apparently now runs fine on
FreeBSD's /bin/sh, and I've also tested it with both ash and dash.
- convert-dtsv0-lexer.l has some extra #includes added. These
must have been included indirectly with Linux and glibc, but aren't on
FreeBSD.
- the endian handling functions in libfdt_env.h, based on
endian.h and byteswap.h are replaced with some portable open-coded
versions. Unfortunately, these result in fairly crappy code when
compiled, but as far as I can determine there doesn't seem to be any
POSIX, SUS or de facto standard way of determining endianness at
compile time, nor standard names for byteswapping functions.
- some more endian handling, from testdata.h using the
problematic endian.h is simply removed, since it wasn't actually being
used anyway.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-06-26 03:03:49 +02:00
|
|
|
signame=$(kill -l $((ret - 128)))
|
2008-03-05 06:01:55 +01:00
|
|
|
FAIL "Killed by SIG$signame"
|
|
|
|
else
|
|
|
|
FAIL "Returned error code $ret"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
run_wrap_test () {
|
|
|
|
echo -n "$@: "
|
|
|
|
base_run_test wrap_test "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
run_dtc_test () {
|
|
|
|
echo -n "dtc $@: "
|
|
|
|
base_run_test wrap_test $VALGRIND $DTC "$@"
|
|
|
|
}
|
|
|
|
|
2009-01-08 01:47:55 +01:00
|
|
|
asm_to_so () {
|
2009-11-12 03:30:02 +01:00
|
|
|
$CC -shared -o $1.test.so data.S $1.test.s
|
2009-01-08 01:47:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
asm_to_so_test () {
|
|
|
|
run_wrap_test asm_to_so "$@"
|
|
|
|
}
|
|
|
|
|
2006-11-28 07:20:01 +01:00
|
|
|
tree1_tests () {
|
|
|
|
TREE=$1
|
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
# Read-only tests
|
2007-10-10 09:12:12 +02:00
|
|
|
run_test get_mem_rsv $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test root_node $TREE
|
2006-12-11 06:15:34 +01:00
|
|
|
run_test find_property $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test subnode_offset $TREE
|
|
|
|
run_test path_offset $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test get_name $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test getprop $TREE
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test get_phandle $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test get_path $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test supernode_atdepth_offset $TREE
|
|
|
|
run_test parent_offset $TREE
|
2007-09-17 06:28:34 +02:00
|
|
|
run_test node_offset_by_prop_value $TREE
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test node_offset_by_phandle $TREE
|
2007-10-16 05:58:25 +02:00
|
|
|
run_test node_check_compatible $TREE
|
|
|
|
run_test node_offset_by_compatible $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test notfound $TREE
|
2006-11-27 06:21:28 +01:00
|
|
|
|
|
|
|
# Write-in-place tests
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test setprop_inplace $TREE
|
|
|
|
run_test nop_property $TREE
|
|
|
|
run_test nop_node $TREE
|
|
|
|
}
|
|
|
|
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw () {
|
|
|
|
TREE=$1
|
|
|
|
|
|
|
|
# Read-write tests
|
2008-01-11 04:55:05 +01:00
|
|
|
run_test set_name $TREE
|
2007-09-28 06:57:01 +02:00
|
|
|
run_test setprop $TREE
|
|
|
|
run_test del_property $TREE
|
|
|
|
run_test del_node $TREE
|
|
|
|
}
|
|
|
|
|
2008-07-07 03:19:13 +02:00
|
|
|
check_tests () {
|
|
|
|
tree="$1"
|
|
|
|
shift
|
|
|
|
run_sh_test dtc-checkfails.sh "$@" -- -I dts -O dtb $tree
|
|
|
|
run_dtc_test -I dts -O dtb -o $tree.test.dtb -f $tree
|
|
|
|
run_sh_test dtc-checkfails.sh "$@" -- -I dtb -O dtb $tree.test.dtb
|
|
|
|
}
|
|
|
|
|
2007-11-01 01:37:31 +01:00
|
|
|
ALL_LAYOUTS="mts mst tms tsm smt stm"
|
|
|
|
|
2007-09-17 06:39:24 +02:00
|
|
|
libfdt_tests () {
|
2006-11-28 07:20:01 +01:00
|
|
|
tree1_tests test_tree1.dtb
|
2006-11-29 06:45:46 +01:00
|
|
|
|
|
|
|
# Sequential write tests
|
|
|
|
run_test sw_tree1
|
|
|
|
tree1_tests sw_tree1.test.dtb
|
|
|
|
tree1_tests unfinished_tree1.test.dtb
|
2007-11-06 00:42:45 +01:00
|
|
|
run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
|
2006-12-01 05:07:19 +01:00
|
|
|
|
|
|
|
# fdt_move tests
|
|
|
|
for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do
|
|
|
|
rm -f moved.$tree shunted.$tree deshunted.$tree
|
|
|
|
run_test move_and_save $tree
|
2007-11-21 01:29:18 +01:00
|
|
|
run_test dtbs_equal_ordered $tree moved.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree shunted.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree deshunted.$tree
|
2006-12-01 05:07:19 +01:00
|
|
|
done
|
2006-12-01 06:59:43 +01:00
|
|
|
|
2007-10-25 07:05:58 +02:00
|
|
|
# v16 and alternate layout tests
|
2007-11-21 01:29:18 +01:00
|
|
|
for tree in test_tree1.dtb; do
|
2007-10-25 07:05:58 +02:00
|
|
|
for version in 17 16; do
|
2007-11-01 01:37:31 +01:00
|
|
|
for layout in $ALL_LAYOUTS; do
|
2007-10-25 07:05:58 +02:00
|
|
|
run_test mangle-layout $tree $version $layout
|
|
|
|
tree1_tests v$version.$layout.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree v$version.$layout.$tree
|
|
|
|
done
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
2006-12-01 06:59:43 +01:00
|
|
|
# Read-write tests
|
2007-11-21 01:29:18 +01:00
|
|
|
for basetree in test_tree1.dtb; do
|
2007-11-01 01:37:31 +01:00
|
|
|
for version in 17 16; do
|
|
|
|
for layout in $ALL_LAYOUTS; do
|
|
|
|
tree=v$version.$layout.$basetree
|
|
|
|
rm -f opened.$tree repacked.$tree
|
|
|
|
run_test open_pack $tree
|
|
|
|
tree1_tests opened.$tree
|
|
|
|
tree1_tests repacked.$tree
|
|
|
|
|
|
|
|
tree1_tests_rw $tree
|
|
|
|
tree1_tests_rw opened.$tree
|
|
|
|
tree1_tests_rw repacked.$tree
|
|
|
|
done
|
|
|
|
done
|
2007-09-28 06:57:01 +02:00
|
|
|
done
|
2006-12-01 06:59:43 +01:00
|
|
|
run_test rw_tree1
|
|
|
|
tree1_tests rw_tree1.test.dtb
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw rw_tree1.test.dtb
|
2006-12-14 05:29:25 +01:00
|
|
|
|
2008-02-18 06:09:25 +01:00
|
|
|
for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do
|
|
|
|
run_test nopulate $basetree
|
|
|
|
run_test dtbs_equal_ordered $basetree noppy.$basetree
|
|
|
|
tree1_tests noppy.$basetree
|
|
|
|
tree1_tests_rw noppy.$basetree
|
|
|
|
done
|
|
|
|
|
2006-12-14 05:29:25 +01:00
|
|
|
# Tests for behaviour on various sorts of corrupted trees
|
|
|
|
run_test truncated_property
|
2008-02-14 06:50:34 +01:00
|
|
|
|
|
|
|
# Specific bug tests
|
|
|
|
run_test add_subnode_with_nops
|
2006-11-27 06:21:28 +01:00
|
|
|
}
|
|
|
|
|
2007-09-18 02:33:40 +02:00
|
|
|
dtc_tests () {
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_tree1.test.dtb test_tree1.dts
|
2007-09-18 02:33:40 +02:00
|
|
|
tree1_tests dtc_tree1.test.dtb
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw dtc_tree1.test.dtb
|
2007-10-24 03:06:09 +02:00
|
|
|
run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb
|
2007-10-16 08:42:02 +02:00
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_tree1_dts0.test.dtb test_tree1_dts0.dts
|
2007-11-07 01:17:17 +01:00
|
|
|
tree1_tests dtc_tree1_dts0.test.dtb
|
|
|
|
tree1_tests_rw dtc_tree1_dts0.test.dtb
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts
|
2007-10-16 08:42:02 +02:00
|
|
|
run_test string_escapes dtc_escapes.test.dtb
|
2007-11-07 00:34:06 +01:00
|
|
|
|
2009-09-09 06:38:30 +02:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts
|
|
|
|
run_test extra-terminating-null dtc_extra-terminating-null.test.dtb
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_references.test.dtb references.dts
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test references dtc_references.test.dtb
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_path-references.test.dtb path-references.dts
|
2007-12-05 00:43:50 +01:00
|
|
|
run_test path-references dtc_path-references.test.dtb
|
|
|
|
|
Support ePAPR compliant phandle properties
Currently, the Linux kernel, libfdt and dtc, when using flattened
device trees encode a node's phandle into a property named
"linux,phandle". The ePAPR specification, however - aiming as it is
to not be a Linux specific spec - requires that phandles be encoded in
a property named simply "phandle".
This patch adds support for this newer approach to dtc and libfdt.
Specifically:
- fdt_get_phandle() will now return the correct phandle if it
is supplied in either of these properties
- fdt_node_offset_by_phandle() will correctly find a node with
the given phandle encoded in either property.
- By default, when auto-generating phandles, dtc will encode
it into both properties for maximum compatibility. A new -H
option allows either only old-style or only new-style
properties to be generated.
- If phandle properties are explicitly supplied in the dts
file, dtc will not auto-generate ones in the alternate format.
- If both properties are supplied, dtc will check that they
have the same value.
- Some existing testcases are updated to use a mix of old and
new-style phandles, partially testing the changes.
- A new phandle_format test further tests the libfdt support,
and the -H option.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2009-11-26 05:37:13 +01:00
|
|
|
run_test phandle_format dtc_references.test.dtb both
|
|
|
|
for f in legacy epapr both; do
|
|
|
|
run_dtc_test -I dts -O dtb -H $f -o dtc_references.test.$f.dtb references.dts
|
|
|
|
run_test phandle_format dtc_references.test.$f.dtb $f
|
|
|
|
done
|
|
|
|
|
2010-02-24 08:22:17 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o multilabel.test.dtb multilabel.dts
|
|
|
|
run_test references multilabel.test.dtb
|
|
|
|
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o dtc_comments.test.dtb comments.dts
|
|
|
|
run_dtc_test -I dts -O dtb -o dtc_comments-cmp.test.dtb comments-cmp.dts
|
2008-02-15 05:14:16 +01:00
|
|
|
run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb
|
|
|
|
|
2008-08-14 15:28:19 +02:00
|
|
|
# Check aliases support in fdt_path_offset
|
|
|
|
run_dtc_test -I dts -O dtb -o aliases.dtb aliases.dts
|
2008-08-20 08:55:14 +02:00
|
|
|
run_test get_alias aliases.dtb
|
2008-08-14 15:28:19 +02:00
|
|
|
run_test path_offset_aliases aliases.dtb
|
|
|
|
|
2008-06-24 03:21:44 +02:00
|
|
|
# Check /include/ directive
|
|
|
|
run_dtc_test -I dts -O dtb -o includes.test.dtb include0.dts
|
|
|
|
run_test dtbs_equal_ordered includes.test.dtb test_tree1.dtb
|
|
|
|
|
dtc: Add support for binary includes.
On Wed, Jun 04, 2008 at 09:26:23AM -0500, Jon Loeliger wrote:
> David Gibson wrote:
>
>> But as I said that can be dealt with in the future without breaking
>> compatibility. Objection withdrawn.
>>
>
> And on that note, I officially implore Scott to
> re-submit his binary include patch!
Scott's original patch does still have some implementation details I
didn't like. So in the interests of saving time, I've addressed some
of those, added a testcase, and and now resubmitting my revised
version of Scott's patch.
dtc: Add support for binary includes.
A property's data can be populated with a file's contents
as follows:
node {
prop = /incbin/("path/to/data");
};
A subset of a file can be included by passing start and size parameters.
For example, to include bytes 8 through 23:
node {
prop = /incbin/("path/to/data", 8, 16);
};
As with /include/, non-absolute paths are looked for in the directory
of the source file that includes them.
Implementation revised, and a testcase added by David Gibson
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Acked-by: Scott Wood <scottwood@freescale.com>
2008-06-11 03:58:39 +02:00
|
|
|
# Check /incbin/ directive
|
|
|
|
run_dtc_test -I dts -O dtb -o incbin.test.dtb incbin.dts
|
|
|
|
run_test incbin incbin.test.dtb
|
|
|
|
|
2008-05-16 05:22:57 +02:00
|
|
|
# Check boot_cpuid_phys handling
|
2010-02-19 05:50:50 +01:00
|
|
|
run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb boot-cpuid.dts
|
|
|
|
run_test boot-cpuid boot_cpuid.test.dtb 16
|
|
|
|
|
|
|
|
run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb boot-cpuid.dts
|
|
|
|
run_test boot-cpuid boot_cpuid_17.test.dtb 17
|
|
|
|
|
|
|
|
run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
|
|
|
|
run_test boot-cpuid preserve_boot_cpuid.test.dtb 16
|
|
|
|
run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
|
|
|
|
|
|
|
|
run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
|
|
|
|
run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17
|
|
|
|
run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
|
|
|
|
|
|
|
|
run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb
|
|
|
|
run_test boot-cpuid override17_boot_cpuid.test.dtb 17
|
|
|
|
|
|
|
|
run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
|
|
|
|
run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0
|
|
|
|
|
2008-05-16 05:22:57 +02:00
|
|
|
|
2009-01-08 01:47:55 +01:00
|
|
|
# Check -Oasm mode
|
|
|
|
for tree in test_tree1.dts escapes.dts references.dts path-references.dts \
|
2009-01-08 01:48:48 +01:00
|
|
|
comments.dts aliases.dts include0.dts incbin.dts \
|
|
|
|
value-labels.dts ; do
|
2009-01-08 01:47:55 +01:00
|
|
|
run_dtc_test -I dts -O asm -o oasm_$tree.test.s $tree
|
|
|
|
asm_to_so_test oasm_$tree
|
|
|
|
run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree
|
|
|
|
run_test asm_tree_dump ./oasm_$tree.test.so oasm_$tree.test.dtb
|
|
|
|
run_wrap_test cmp oasm_$tree.test.dtb $tree.test.dtb
|
|
|
|
done
|
|
|
|
|
2009-01-08 01:48:48 +01:00
|
|
|
run_test value-labels ./oasm_value-labels.dts.test.so
|
|
|
|
|
2007-11-07 00:34:06 +01:00
|
|
|
# Check -Odts mode preserve all dtb information
|
dtc: Handle linux,phandle properties which self-reference
Currently, dtc will generate phandles for nodes which are referenced
elsewhere in the tree. phandles can also be explicitly assigned by
defining the linux,phandle property. However, there is no way,
currently to tell dtc to generate a phandle for a node if it is not
referenced elsewhere. This is inconvenient when it's expected that
later processing on the flat tree might add nodes which _will_
the node in question.
One way one might attempt to do this is with the construct:
mynode: mynode {
linux,phandle = <&mynode>;
/* ... */
};
Though it's a trifle odd, there's really only one sensible meaning
which can be assigned to this construct: allocate a unique phandle to
"mynode" and put that in its linux,phandle property (as always).
Currently, however, dtc will choke on this self-reference. This patch
corrects this, making the construct above give the expected results.
It also ensures a more meaningful error message is given if you
attempt to process the nonsensical construct:
mynode: mynode {
linux,phandle = <&someothernode>;
/* ... */
};
The 'references' testcase is extended to cover this case, as well.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2008-11-07 02:49:44 +01:00
|
|
|
for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb \
|
2009-09-09 06:38:30 +02:00
|
|
|
dtc_extra-terminating-null.test.dtb dtc_references.test.dtb; do
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dtb -O dts -o odts_$tree.test.dts $tree
|
|
|
|
run_dtc_test -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts
|
2007-11-07 00:34:06 +01:00
|
|
|
run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
|
|
|
|
done
|
2007-11-12 23:59:38 +01:00
|
|
|
|
2008-02-28 10:55:37 +01:00
|
|
|
# Check version conversions
|
|
|
|
for tree in test_tree1.dtb ; do
|
|
|
|
for aver in 1 2 3 16 17; do
|
|
|
|
atree="ov${aver}_$tree.test.dtb"
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dtb -O dtb -V$aver -o $atree $tree
|
2008-02-28 10:55:37 +01:00
|
|
|
for bver in 16 17; do
|
|
|
|
btree="ov${bver}_$atree"
|
2008-03-05 06:01:55 +01:00
|
|
|
run_dtc_test -I dtb -O dtb -V$bver -o $btree $atree
|
2008-02-28 10:55:37 +01:00
|
|
|
run_test dtbs_equal_ordered $btree $tree
|
|
|
|
done
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
2010-02-25 17:58:29 +01:00
|
|
|
# Check merge/overlay functionality
|
|
|
|
run_dtc_test -I dts -O dtb -o dtc_tree1_merge.test.dtb test_tree1_merge.dts
|
|
|
|
tree1_tests dtc_tree1_merge.test.dtb test_tree1.dtb
|
|
|
|
run_dtc_test -I dts -O dtb -o multilabel_merge.test.dtb multilabel_merge.dts
|
|
|
|
run_test references multilabel.test.dtb
|
|
|
|
run_test dtbs_equal_ordered multilabel.test.dtb multilabel_merge.test.dtb
|
|
|
|
|
2007-11-20 06:24:23 +01:00
|
|
|
# Check some checks
|
2008-07-07 03:19:13 +02:00
|
|
|
check_tests dup-nodename.dts duplicate_node_names
|
|
|
|
check_tests dup-propname.dts duplicate_property_names
|
|
|
|
check_tests dup-phandle.dts explicit_phandles
|
|
|
|
check_tests zero-phandle.dts explicit_phandles
|
|
|
|
check_tests minusone-phandle.dts explicit_phandles
|
2008-03-05 06:01:55 +01:00
|
|
|
run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-node-ref.dts
|
|
|
|
run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-label-ref.dts
|
2008-07-07 03:19:13 +02:00
|
|
|
check_tests bad-name-property.dts name_properties
|
|
|
|
|
|
|
|
check_tests bad-ncells.dts address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell
|
|
|
|
check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string
|
|
|
|
check_tests bad-reg-ranges.dts reg_format ranges_format
|
|
|
|
check_tests bad-empty-ranges.dts ranges_format
|
|
|
|
check_tests reg-ranges-root.dts reg_format ranges_format
|
|
|
|
check_tests default-addr-size.dts avoid_default_addr_size
|
|
|
|
check_tests obsolete-chosen-interrupt-controller.dts obsolete_chosen_interrupt_controller
|
2008-03-05 06:01:55 +01:00
|
|
|
run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb
|
|
|
|
run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb
|
|
|
|
run_sh_test dtc-checkfails.sh prop_name_chars -- -I dtb -O dtb bad_prop_char.dtb
|
2008-03-05 06:22:41 +01:00
|
|
|
|
2010-02-23 09:56:41 +01:00
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label1.dts
|
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label2.dts
|
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label3.dts
|
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label4.dts
|
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts
|
|
|
|
run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts
|
|
|
|
|
2008-03-05 06:22:41 +01:00
|
|
|
# Check for proper behaviour reading from stdin
|
|
|
|
run_dtc_test -I dts -O dtb -o stdin_dtc_tree1.test.dtb - < test_tree1.dts
|
|
|
|
run_wrap_test cmp stdin_dtc_tree1.test.dtb dtc_tree1.test.dtb
|
|
|
|
run_dtc_test -I dtb -O dts -o stdin_odts_test_tree1.dtb.test.dts - < test_tree1.dtb
|
|
|
|
run_wrap_test cmp stdin_odts_test_tree1.dtb.test.dts odts_test_tree1.dtb.test.dts
|
|
|
|
|
|
|
|
# Check for graceful failure in some error conditions
|
|
|
|
run_sh_test dtc-fatal.sh -I dts -O dtb nosuchfile.dts
|
|
|
|
run_sh_test dtc-fatal.sh -I dtb -O dtb nosuchfile.dtb
|
|
|
|
run_sh_test dtc-fatal.sh -I fs -O dtb nosuchfile
|
2007-09-18 02:33:40 +02:00
|
|
|
}
|
|
|
|
|
2010-04-30 07:30:00 +02:00
|
|
|
cmp_tests () {
|
|
|
|
basetree="$1"
|
|
|
|
shift
|
|
|
|
wrongtrees="$@"
|
|
|
|
|
|
|
|
run_test dtb_reverse $basetree
|
|
|
|
|
|
|
|
# First dtbs_equal_ordered
|
|
|
|
run_test dtbs_equal_ordered $basetree $basetree
|
|
|
|
run_test dtbs_equal_ordered -n $basetree $basetree.reversed.test.dtb
|
|
|
|
for tree in $wrongtrees; do
|
|
|
|
run_test dtbs_equal_ordered -n $basetree $tree
|
|
|
|
done
|
|
|
|
|
|
|
|
# now unordered
|
|
|
|
run_test dtbs_equal_unordered $basetree $basetree
|
|
|
|
run_test dtbs_equal_unordered $basetree $basetree.reversed.test.dtb
|
|
|
|
run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree
|
|
|
|
for tree in $wrongtrees; do
|
|
|
|
run_test dtbs_equal_unordered -n $basetree $tree
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
dtbs_equal_tests () {
|
|
|
|
WRONG_TREE1=""
|
|
|
|
for x in 1 2 3 4 5 6 7 8 9; do
|
|
|
|
run_dtc_test -I dts -O dtb -o test_tree1_wrong$x.test.dtb test_tree1_wrong$x.dts
|
|
|
|
WRONG_TREE1="$WRONG_TREE1 test_tree1_wrong$x.test.dtb"
|
|
|
|
done
|
|
|
|
cmp_tests test_tree1.dtb $WRONG_TREE1
|
|
|
|
}
|
|
|
|
|
2007-11-21 01:56:14 +01:00
|
|
|
while getopts "vt:m" ARG ; do
|
2006-11-27 06:21:28 +01:00
|
|
|
case $ARG in
|
|
|
|
"v")
|
|
|
|
unset QUIET_TEST
|
|
|
|
;;
|
|
|
|
"t")
|
|
|
|
TESTSETS=$OPTARG
|
|
|
|
;;
|
2007-11-21 01:56:14 +01:00
|
|
|
"m")
|
|
|
|
VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
|
|
|
|
;;
|
2006-11-27 06:21:28 +01:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -z "$TESTSETS" ]; then
|
2010-04-30 07:30:00 +02:00
|
|
|
TESTSETS="libfdt dtc dtbs_equal"
|
2006-11-27 06:21:28 +01:00
|
|
|
fi
|
|
|
|
|
2007-10-16 05:53:20 +02:00
|
|
|
# Make sure we don't have stale blobs lying around
|
2007-11-07 00:34:06 +01:00
|
|
|
rm -f *.test.dtb *.test.dts
|
2007-10-16 05:53:20 +02:00
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
for set in $TESTSETS; do
|
|
|
|
case $set in
|
2007-09-17 06:39:24 +02:00
|
|
|
"libfdt")
|
|
|
|
libfdt_tests
|
2006-11-27 06:21:28 +01:00
|
|
|
;;
|
2007-09-18 02:33:40 +02:00
|
|
|
"dtc")
|
|
|
|
dtc_tests
|
|
|
|
;;
|
2010-04-30 07:30:00 +02:00
|
|
|
"dtbs_equal")
|
|
|
|
dtbs_equal_tests
|
|
|
|
;;
|
2006-11-27 06:21:28 +01:00
|
|
|
esac
|
|
|
|
done
|
2007-06-26 03:33:10 +02:00
|
|
|
|
2009-11-12 01:56:34 +01:00
|
|
|
echo "********** TEST SUMMARY"
|
|
|
|
echo "* Total testcases: $tot_tests"
|
|
|
|
echo "* PASS: $tot_pass"
|
|
|
|
echo "* FAIL: $tot_fail"
|
|
|
|
echo "* Bad configuration: $tot_config"
|
2007-11-21 01:56:14 +01:00
|
|
|
if [ -n "$VALGRIND" ]; then
|
2009-11-12 01:56:34 +01:00
|
|
|
echo "* valgrind errors: $tot_vg"
|
2007-11-21 01:56:14 +01:00
|
|
|
fi
|
2009-11-12 01:56:34 +01:00
|
|
|
echo "* Strange test result: $tot_strange"
|
|
|
|
echo "**********"
|
2007-06-26 03:33:10 +02:00
|
|
|
|