Module Name: src
Committed By: sborrill
Date: Fri Aug 11 12:13:10 UTC 2023
Modified Files:
src/distrib/sets/lists/debug [netbsd-9]: mi
src/distrib/sets/lists/tests [netbsd-9]: mi
src/libexec/ld.elf_so [netbsd-9]: Makefile symbol.c
src/tests/libexec/ld.elf_so [netbsd-9]: Makefile
Added Files:
src/libexec/ld.elf_so [netbsd-9]: hash.c hash.h
src/tests/libexec/ld.elf_so [netbsd-9]: t_hash.c
Log Message:
Pull up the following revisions(s) (requested by riastradh in ticket #1712):
distrib/sets/lists/debug/mi: revision 1.409 via patch
distrib/sets/lists/tests/mi: revision 1.1280 via patch
libexec/ld.elf_so/Makefile: revision 1.145-1.147 via patch
libexec/ld.elf_so/hash.c: revision 1.1 via patch
libexec/ld.elf_so/hash.h: revision 1.1 via patch
libexec/ld.elf_so/symbol.c: revision 1.74-1.76 via patch
tests/libexec/ld.elf_so/Makefile: revision 1.21 via patch
tests/libexec/ld.elf_so/t_hash.c: revision 1.1 via patch
ld.elf_so: Fix sysv elf hash on edge cases like `ZZZZZW9p' on LP64
platforms where long is 64-bit.
To generate a diff of this commit:
cvs rdiff -u -r1.285.2.1 -r1.285.2.2 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.818.2.2 -r1.818.2.3 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.141.2.1 -r1.141.2.2 src/libexec/ld.elf_so/Makefile
cvs rdiff -u -r0 -r1.1.6.2 src/libexec/ld.elf_so/hash.c \
src/libexec/ld.elf_so/hash.h
cvs rdiff -u -r1.69 -r1.69.6.1 src/libexec/ld.elf_so/symbol.c
cvs rdiff -u -r1.10.2.1 -r1.10.2.2 src/tests/libexec/ld.elf_so/Makefile
cvs rdiff -u -r0 -r1.1.6.2 src/tests/libexec/ld.elf_so/t_hash.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/debug/mi
diff -u src/distrib/sets/lists/debug/mi:1.285.2.1 src/distrib/sets/lists/debug/mi:1.285.2.2
--- src/distrib/sets/lists/debug/mi:1.285.2.1 Fri Aug 4 12:55:45 2023
+++ src/distrib/sets/lists/debug/mi Fri Aug 11 12:13:09 2023
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.285.2.1 2023/08/04 12:55:45 martin Exp $
+# $NetBSD: mi,v 1.285.2.2 2023/08/11 12:13:09 sborrill Exp $
./etc/mtree/set.debug comp-sys-root
./usr/lib comp-sys-usr compatdir
./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile
@@ -2314,6 +2314,7 @@
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_dlerror-false.debug tests-libexec-debug debug,atf,pic,compattestfile
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_dlinfo.debug tests-libexec-debug debug,atf,pic,compattestfile
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_dlvsym.debug tests-libexec-debug debug,atf,pic,compattestfile
+./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_hash.debug tests-libexec-debug debug,atf,pic,compattestfile
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_ifunc.debug tests-libexec-debug debug,atf,pic,compattestfile
./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_tls_extern.debug tests-libexec-debug debug,atf,pic,compattestfile
./usr/libdata/debug/usr/tests/net/bpf/t_bpf.debug tests-net-debug debug,atf,rump
Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.818.2.2 src/distrib/sets/lists/tests/mi:1.818.2.3
--- src/distrib/sets/lists/tests/mi:1.818.2.2 Fri Aug 4 12:55:44 2023
+++ src/distrib/sets/lists/tests/mi Fri Aug 11 12:13:09 2023
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.818.2.2 2023/08/04 12:55:44 martin Exp $
+# $NetBSD: mi,v 1.818.2.3 2023/08/11 12:13:09 sborrill Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -3419,6 +3419,7 @@
./usr/tests/libexec/ld.elf_so/t_dlerror-false tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_dlinfo tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_dlvsym tests-libexec-tests compattestfile,atf,pic
+./usr/tests/libexec/ld.elf_so/t_hash tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_ifunc tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_thread_local_dtor tests-libexec-tests compattestfile,atf,pic
./usr/tests/libexec/ld.elf_so/t_tls_extern tests-libexec-tests compattestfile,atf,pic
Index: src/libexec/ld.elf_so/Makefile
diff -u src/libexec/ld.elf_so/Makefile:1.141.2.1 src/libexec/ld.elf_so/Makefile:1.141.2.2
--- src/libexec/ld.elf_so/Makefile:1.141.2.1 Tue Nov 26 08:12:26 2019
+++ src/libexec/ld.elf_so/Makefile Fri Aug 11 12:13:10 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.141.2.1 2019/11/26 08:12:26 martin Exp $
+# $NetBSD: Makefile,v 1.141.2.2 2023/08/11 12:13:10 sborrill Exp $
#
# NOTE: when changing ld.so, ensure that ldd still compiles.
#
@@ -70,9 +70,23 @@ PROG= ld.elf_so
CLIBOBJ!= cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR}
-SRCS+= rtld.c reloc.c symbol.c xmalloc.c xprintf.c debug.c \
- map_object.c load.c search.c headers.c paths.c expand.c \
- tls.c symver.c diagassert.c compat.c
+SRCS+= compat.c
+SRCS+= debug.c
+SRCS+= diagassert.c
+SRCS+= expand.c
+SRCS+= hash.c
+SRCS+= headers.c
+SRCS+= load.c
+SRCS+= map_object.c
+SRCS+= paths.c
+SRCS+= reloc.c
+SRCS+= rtld.c
+SRCS+= search.c
+SRCS+= symbol.c
+SRCS+= symver.c
+SRCS+= tls.c
+SRCS+= xmalloc.c
+SRCS+= xprintf.c
.if ${USE_FORT} == "yes"
.PATH.c: ${NETBSDSRCDIR}/lib/libc/misc
Index: src/libexec/ld.elf_so/symbol.c
diff -u src/libexec/ld.elf_so/symbol.c:1.69 src/libexec/ld.elf_so/symbol.c:1.69.6.1
--- src/libexec/ld.elf_so/symbol.c:1.69 Wed Aug 9 18:44:32 2017
+++ src/libexec/ld.elf_so/symbol.c Fri Aug 11 12:13:10 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: symbol.c,v 1.69 2017/08/09 18:44:32 joerg Exp $ */
+/* $NetBSD: symbol.c,v 1.69.6.1 2023/08/11 12:13:10 sborrill Exp $ */
/*
* Copyright 1996 John D. Polstra.
@@ -40,7 +40,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: symbol.c,v 1.69 2017/08/09 18:44:32 joerg Exp $");
+__RCSID("$NetBSD: symbol.c,v 1.69.6.1 2023/08/11 12:13:10 sborrill Exp $");
#endif /* not lint */
#include <err.h>
@@ -80,29 +80,6 @@ _rtld_donelist_check(DoneList *dlp, cons
return false;
}
-/*
- * Hash function for symbol table lookup. Don't even think about changing
- * this. It is specified by the System V ABI.
- */
-unsigned long
-_rtld_elf_hash(const char *name)
-{
- const unsigned char *p = (const unsigned char *) name;
- unsigned long h = 0;
- unsigned long g;
- unsigned long c;
-
- for (; __predict_true((c = *p) != '\0'); p++) {
- h <<= 4;
- h += c;
- if ((g = h & 0xf0000000) != 0) {
- h ^= g;
- h ^= g >> 24;
- }
- }
- return (h);
-}
-
const Elf_Sym *
_rtld_symlook_list(const char *name, unsigned long hash, const Objlist *objlist,
const Obj_Entry **defobj_out, u_int flags, const Ver_Entry *ventry,
Index: src/tests/libexec/ld.elf_so/Makefile
diff -u src/tests/libexec/ld.elf_so/Makefile:1.10.2.1 src/tests/libexec/ld.elf_so/Makefile:1.10.2.2
--- src/tests/libexec/ld.elf_so/Makefile:1.10.2.1 Fri Aug 4 12:55:46 2023
+++ src/tests/libexec/ld.elf_so/Makefile Fri Aug 11 12:13:10 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.10.2.1 2023/08/04 12:55:46 martin Exp $
+# $NetBSD: Makefile,v 1.10.2.2 2023/08/11 12:13:10 sborrill Exp $
#
NOMAN= # defined
@@ -30,6 +30,12 @@ TESTSDIR= ${TESTSBASE}/libexec/ld.elf_so
TESTS_C+= t_dlerror-cleared t_dlerror-false t_dlinfo t_dlvsym t_ifunc
TESTS_C+= t_tls_extern
+TESTS_C+= t_hash
+
+.PATH: ${NETBSDSRCDIR}/libexec/ld.elf_so
+SRCS.t_hash+= t_hash.c
+SRCS.t_hash+= hash.c
+CPPFLAGS.t_hash.c+= -I${NETBSDSRCDIR}/libexec/ld.elf_so
LDADD.t_dlerror-false= -Wl,-rpath,/var/nonexistent/lib
LDADD.t_dlvsym= -Wl,-rpath,${TESTSDIR}/h_helper_symver_dso2
Added files:
Index: src/libexec/ld.elf_so/hash.c
diff -u /dev/null src/libexec/ld.elf_so/hash.c:1.1.6.2
--- /dev/null Fri Aug 11 12:13:10 2023
+++ src/libexec/ld.elf_so/hash.c Fri Aug 11 12:13:10 2023
@@ -0,0 +1,65 @@
+/* $NetBSD: hash.c,v 1.1.6.2 2023/08/11 12:13:10 sborrill Exp $ */
+
+/*
+ * Copyright 1996 John D. Polstra.
+ * Copyright 1996 Matt Thomas <[email protected]>
+ * Copyright 2002 Charles M. Hannum <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Polstra.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Dynamic linker for ELF.
+ *
+ * John Polstra <[email protected]>.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: hash.c,v 1.1.6.2 2023/08/11 12:13:10 sborrill Exp $");
+#endif /* not lint */
+
+#include <stdint.h>
+
+#include "hash.h"
+
+/*
+ * SysV hash function for symbol table lookup. It is a slightly optimized
+ * version of the hash specified by the System V ABI.
+ */
+Elf32_Word
+_rtld_elf_hash(const char *name)
+{
+ const unsigned char *p = (const unsigned char *) name;
+ Elf32_Word h = 0;
+
+ while (__predict_true(*p != '\0')) {
+ h = (h << 4) + *p++;
+ h ^= (h >> 24) & 0xf0;
+ }
+ return (h & 0x0fffffff);
+}
Index: src/libexec/ld.elf_so/hash.h
diff -u /dev/null src/libexec/ld.elf_so/hash.h:1.1.6.2
--- /dev/null Fri Aug 11 12:13:10 2023
+++ src/libexec/ld.elf_so/hash.h Fri Aug 11 12:13:10 2023
@@ -0,0 +1,41 @@
+/* $NetBSD: hash.h,v 1.1.6.2 2023/08/11 12:13:10 sborrill Exp $ */
+
+/*
+ * Copyright 1996 John D. Polstra.
+ * Copyright 1996 Matt Thomas <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by John Polstra.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RTLD_HASH_H
+#define RTLD_HASH_H
+
+#include <sys/exec_elf.h>
+
+Elf32_Word _rtld_elf_hash(const char *);
+
+#endif /* RTLD_HASH_H */
Index: src/tests/libexec/ld.elf_so/t_hash.c
diff -u /dev/null src/tests/libexec/ld.elf_so/t_hash.c:1.1.6.2
--- /dev/null Fri Aug 11 12:13:10 2023
+++ src/tests/libexec/ld.elf_so/t_hash.c Fri Aug 11 12:13:10 2023
@@ -0,0 +1,169 @@
+/* $NetBSD: t_hash.c,v 1.1.6.2 2023/08/11 12:13:10 sborrill Exp $ */
+
+/*-
+ * Copyright (c) 2023 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+
+#include <atf-c.h>
+#include <stdint.h>
+
+#include "hash.h"
+
+/* known-answer tests */
+struct kat {
+ const char *in;
+ unsigned long long out;
+};
+
+/*
+ * From the SysV spec, with uint64_t instead of unsigned long to
+ * illustrate the problem on all systems, not just LP64 ones.
+ *
+ * https://www.sco.com/developers/devspecs/gabi41.pdf#page=95
+ */
+static uint64_t
+sysv_broken_hash(const char *name)
+{
+ uint64_t h = 0, g;
+
+ while (*name) {
+ h = (h << 4) + *name++;
+ if ((g = h & 0xf0000000) != 0)
+ h ^= g >> 24;
+ h &= ~g;
+ }
+
+ return h;
+}
+
+ATF_TC(sysv);
+ATF_TC_HEAD(sysv, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "SysV hash (32-bit)");
+}
+ATF_TC_BODY(sysv, tc)
+{
+ static const struct kat kat[] = {
+ { "", 0x00000000 },
+ { "a", 0x00000061 },
+ { "aa", 0x00000671 },
+ { "aaa", 0x00006771 },
+ { "aaaa", 0x00067771 },
+ { "aaaaa", 0x00677771 },
+ { "aaaaaa", 0x06777771 },
+ { "aaaaaaa", 0x07777711 },
+ { "aaaaaaaa", 0x07777101 },
+ { "aaaaaaaaa", 0x07771001 },
+ { "ab", 0x00000672 },
+ { "abc", 0x00006783 },
+ { "abcd", 0x00067894 },
+ { "abcde", 0x006789a5 },
+ { "abcdef", 0x06789ab6 },
+ { "abcdefg", 0x0789aba7 },
+ { "abcdefgh", 0x089abaa8 },
+ { "abcdefghi", 0x09abaa69 },
+ /* https://maskray.me/blog/2023-04-12-elf-hash-function */
+ { "Z", 0x0000005a },
+ { "ZZ", 0x000005fa },
+ { "ZZZ", 0x00005ffa },
+ { "ZZZZ", 0x0005fffa },
+ { "ZZZZZ", 0x005ffffa },
+ { "ZZZZZW", 0x05fffff7 },
+ { "ZZZZZW9", 0x0ffffff9 },
+ { "ZZZZZW9p", 0x00000000 },
+ { "pneumonoultramicroscopicsilicovolcanoconiosis",
+ 0x051706b3 },
+ };
+ unsigned i;
+
+ for (i = 0; i < __arraycount(kat); i++) {
+ unsigned long long h = _rtld_elf_hash(kat[i].in);
+
+ ATF_CHECK_EQ_MSG(h, kat[i].out,
+ "[%u] _rtld_elf_hash(\"%s\") = 0x%08llx != 0x%08llx",
+ i, kat[i].in, h, kat[i].out);
+ }
+}
+
+ATF_TC(sysv_broken);
+ATF_TC_HEAD(sysv_broken, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "SysV hash (broken with 64-bit unsigned long)");
+}
+ATF_TC_BODY(sysv_broken, tc)
+{
+ static const struct kat kat[] = {
+ { "", 0x00000000 },
+ { "a", 0x00000061 },
+ { "aa", 0x00000671 },
+ { "aaa", 0x00006771 },
+ { "aaaa", 0x00067771 },
+ { "aaaaa", 0x00677771 },
+ { "aaaaaa", 0x06777771 },
+ { "aaaaaaa", 0x07777711 },
+ { "aaaaaaaa", 0x07777101 },
+ { "aaaaaaaaa", 0x07771001 },
+ { "ab", 0x00000672 },
+ { "abc", 0x00006783 },
+ { "abcd", 0x00067894 },
+ { "abcde", 0x006789a5 },
+ { "abcdef", 0x06789ab6 },
+ { "abcdefg", 0x0789aba7 },
+ { "abcdefgh", 0x089abaa8 },
+ { "abcdefghi", 0x09abaa69 },
+ /* https://maskray.me/blog/2023-04-12-elf-hash-function */
+ { "Z", 0x0000005a },
+ { "ZZ", 0x000005fa },
+ { "ZZZ", 0x00005ffa },
+ { "ZZZZ", 0x0005fffa },
+ { "ZZZZZ", 0x005ffffa },
+ { "ZZZZZW", 0x05fffff7 },
+ { "ZZZZZW9", 0x0ffffff9 },
+ { "ZZZZZW9p", 0x100000000 }, /* XXX */
+ { "pneumonoultramicroscopicsilicovolcanoconiosis",
+ 0x051706b3 },
+ };
+ unsigned i;
+
+ for (i = 0; i < __arraycount(kat); i++) {
+ unsigned long long h = sysv_broken_hash(kat[i].in);
+
+ ATF_CHECK_EQ_MSG(h, kat[i].out,
+ "[%u] sysv_broken_hash(\"%s\") = 0x%08llx != 0x%08llx",
+ i, kat[i].in, h, kat[i].out);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, sysv);
+ ATF_TP_ADD_TC(tp, sysv_broken);
+
+ return atf_no_error();
+}