* [LTP] [PATCH 0/5] Some MUSL fixes
@ 2019-03-18 3:23 Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present Petr Vorel
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
Hi,
there are numerous problems with LTP build with MUSL.
This patchset address only few obvious ones.
Kind regards,
Petr
Petr Vorel (5):
rt_sigaction.h: Check for type sighandler_t and use if present
{rt_,}sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL
ptrace: Use int instead of enum __ptrace_request
mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL
mallopt: Test only on glibc
include/lapi/rt_sigaction.h | 8 ++++++++
m4/ltp-sighandler_t.m4 | 8 ++++++++
testcases/kernel/syscalls/mallopt/mallopt01.c | 6 +++---
testcases/kernel/syscalls/mremap/mremap01.c | 4 ++--
testcases/kernel/syscalls/mremap/mremap02.c | 3 +--
testcases/kernel/syscalls/mremap/mremap03.c | 3 +--
testcases/kernel/syscalls/mremap/mremap04.c | 3 +--
testcases/kernel/syscalls/ptrace/ptrace03.c | 2 +-
testcases/kernel/syscalls/ptrace/ptrace06.c | 2 +-
testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h | 2 +-
testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c | 1 +
testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c | 1 +
testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c | 1 +
testcases/kernel/syscalls/sigaction/sigaction02.c | 2 ++
testcases/misc/crash/crash01.c | 1 +
15 files changed, 33 insertions(+), 14 deletions(-)
create mode 100644 m4/ltp-sighandler_t.m4
--
2.20.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
@ 2019-03-18 3:23 ` Petr Vorel
2019-03-18 15:40 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL Petr Vorel
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
__sighandler_t is libc implementation specific and should not be relied
upon. Instead, we fall back upon void (*)(int), as specified by POSIX.
This fixes MUSL build.
Credits: taken from util-linux
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
include/lapi/rt_sigaction.h | 8 ++++++++
m4/ltp-sighandler_t.m4 | 8 ++++++++
2 files changed, 16 insertions(+)
create mode 100644 m4/ltp-sighandler_t.m4
diff --git a/include/lapi/rt_sigaction.h b/include/lapi/rt_sigaction.h
index 2dbbc7672..ff1a7314d 100644
--- a/include/lapi/rt_sigaction.h
+++ b/include/lapi/rt_sigaction.h
@@ -36,12 +36,20 @@
#if defined(__mips__)
struct kernel_sigaction {
unsigned int sa_flags;
+# ifdef HAVE_SIGHANDLER_T
__sighandler_t k_sa_handler;
+# else
+void (* k_sa_handler)(int);
+# endif
sigset_t sa_mask;
};
#else
struct kernel_sigaction {
+# ifdef HAVE_SIGHANDLER_T
__sighandler_t k_sa_handler;
+# else
+void (* k_sa_handler)(int);
+# endif
unsigned long sa_flags;
void (*sa_restorer) (void);
sigset_t sa_mask;
diff --git a/m4/ltp-sighandler_t.m4 b/m4/ltp-sighandler_t.m4
new file mode 100644
index 000000000..97c70a269
--- /dev/null
+++ b/m4/ltp-sighandler_t.m4
@@ -0,0 +1,8 @@
+dnl SPDX-License-Identifier: GPL-2.0-or-later
+dnl Copyright (c) 2019 Petr Vorel <petr.vorel@gmail.com>
+
+AC_DEFUN([LTP_CHECK_SIGHANDLER_T],[
+AC_CHECK_TYPES([sighandler_t], [], [], [[
+#include <signal.h>
+]])
+])
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present Petr Vorel
@ 2019-03-18 3:23 ` Petr Vorel
2019-03-18 15:41 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request Petr Vorel
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
Unlike glibc and uclibc (which define SA_NOMASK under __USE_MISC)
MUSL requires _GNU_SOURCE.
_GNU_SOURCE is already used in crash02.c.
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c | 1 +
testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c | 1 +
testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c | 1 +
testcases/kernel/syscalls/sigaction/sigaction02.c | 2 ++
testcases/misc/crash/crash01.c | 1 +
5 files changed, 6 insertions(+)
diff --git a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
index be9e9abb7..fa50af319 100644
--- a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
+++ b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c
@@ -28,6 +28,7 @@
/* sigset_t type. */
/******************************************************************************/
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c
index 2c4d8799b..09e351957 100644
--- a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c
+++ b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c
@@ -24,6 +24,7 @@
/* rt_sigaction Expected EFAULT error check */
/******************************************************************************/
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c
index 823fbe6c2..6e7865c07 100644
--- a/testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c
+++ b/testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c
@@ -24,6 +24,7 @@
/* rt_sigaction Expected EINVAL error check */
/******************************************************************************/
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/testcases/kernel/syscalls/sigaction/sigaction02.c b/testcases/kernel/syscalls/sigaction/sigaction02.c
index 641a04eca..aaf716b15 100644
--- a/testcases/kernel/syscalls/sigaction/sigaction02.c
+++ b/testcases/kernel/syscalls/sigaction/sigaction02.c
@@ -49,6 +49,8 @@
* This test doesn't follow the correct LTP format - PLEASE FIX!
*/
#define DEBUG 0
+
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
diff --git a/testcases/misc/crash/crash01.c b/testcases/misc/crash/crash01.c
index 05745214c..192fbc32c 100644
--- a/testcases/misc/crash/crash01.c
+++ b/testcases/misc/crash/crash01.c
@@ -50,6 +50,7 @@ benchmark.
*/
+#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL Petr Vorel
@ 2019-03-18 3:23 ` Petr Vorel
2019-03-18 15:50 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 5/5] mallopt: Test only on glibc Petr Vorel
4 siblings, 1 reply; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
enum __ptrace_request is glibc/uclibc specific.
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
testcases/kernel/syscalls/ptrace/ptrace03.c | 2 +-
testcases/kernel/syscalls/ptrace/ptrace06.c | 2 +-
testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/testcases/kernel/syscalls/ptrace/ptrace03.c b/testcases/kernel/syscalls/ptrace/ptrace03.c
index a4028fc26..f326b834d 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace03.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace03.c
@@ -102,7 +102,7 @@ static pid_t unused_pid;
static pid_t zero_pid;
struct test_case_t {
- enum __ptrace_request request;
+ int request;
pid_t *pid;
int exp_errno;
} test_cases[] = {
diff --git a/testcases/kernel/syscalls/ptrace/ptrace06.c b/testcases/kernel/syscalls/ptrace/ptrace06.c
index ba92ed11f..c0cb3b9bd 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace06.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace06.c
@@ -38,7 +38,7 @@
char *TCID = "ptrace06";
struct test_case_t {
- enum __ptrace_request request;
+ int request;
long addr;
long data;
} test_cases[] = {
diff --git a/testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h b/testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h
index ae538e900..83de9b447 100644
--- a/testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h
+++ b/testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h
@@ -130,7 +130,7 @@ static char *strings[] = {
SPT(KILL)
SPT(SINGLESTEP)
};
-static inline char *strptrace(enum __ptrace_request request)
+static inline char *strptrace(int request)
{
return strings[request];
}
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
` (2 preceding siblings ...)
2019-03-18 3:23 ` [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request Petr Vorel
@ 2019-03-18 3:23 ` Petr Vorel
2019-03-18 15:51 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 5/5] mallopt: Test only on glibc Petr Vorel
4 siblings, 1 reply; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
Unlike glibc and uclibc (which define MREMAP_MAYMOVE under __USE_MISC)
MUSL requires _GNU_SOURCE.
+ Remove __USE_GNU
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
testcases/kernel/syscalls/mremap/mremap01.c | 4 ++--
testcases/kernel/syscalls/mremap/mremap02.c | 3 +--
testcases/kernel/syscalls/mremap/mremap03.c | 3 +--
testcases/kernel/syscalls/mremap/mremap04.c | 3 +--
4 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/testcases/kernel/syscalls/mremap/mremap01.c b/testcases/kernel/syscalls/mremap/mremap01.c
index 16519a23c..4c795fee5 100644
--- a/testcases/kernel/syscalls/mremap/mremap01.c
+++ b/testcases/kernel/syscalls/mremap/mremap01.c
@@ -74,11 +74,11 @@
* RESTRICTIONS:
* None.
*/
+
+#define _GNU_SOURCE
#include <unistd.h>
#include <errno.h>
-#define __USE_GNU
#include <sys/mman.h>
-#undef __USE_GNU
#include <fcntl.h>
#include "test.h"
diff --git a/testcases/kernel/syscalls/mremap/mremap02.c b/testcases/kernel/syscalls/mremap/mremap02.c
index 5a51b9aff..2dabc6847 100644
--- a/testcases/kernel/syscalls/mremap/mremap02.c
+++ b/testcases/kernel/syscalls/mremap/mremap02.c
@@ -72,12 +72,11 @@
* RESTRICTIONS:
* None.
*/
+#define _GNU_SOURCE
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
-#define __USE_GNU
#include <sys/mman.h>
-#undef __USE_GNU
#include "test.h"
diff --git a/testcases/kernel/syscalls/mremap/mremap03.c b/testcases/kernel/syscalls/mremap/mremap03.c
index 4c9c7b069..02b79bc47 100644
--- a/testcases/kernel/syscalls/mremap/mremap03.c
+++ b/testcases/kernel/syscalls/mremap/mremap03.c
@@ -73,12 +73,11 @@
* RESTRICTIONS:
* None.
*/
+#define _GNU_SOURCE
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
-#define __USE_GNU
#include <sys/mman.h>
-#undef __USE_GNU
#include "test.h"
diff --git a/testcases/kernel/syscalls/mremap/mremap04.c b/testcases/kernel/syscalls/mremap/mremap04.c
index c25dbfeb4..53902df73 100644
--- a/testcases/kernel/syscalls/mremap/mremap04.c
+++ b/testcases/kernel/syscalls/mremap/mremap04.c
@@ -77,11 +77,10 @@
* RESTRICTIONS:
* None.
*/
+#define _GNU_SOURCE
#include <errno.h>
#include <unistd.h>
-#define __USE_GNU
#include <sys/mman.h>
-#undef __USE_GNU
#include <sys/ipc.h>
#include <sys/shm.h>
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH 5/5] mallopt: Test only on glibc
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
` (3 preceding siblings ...)
2019-03-18 3:23 ` [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL Petr Vorel
@ 2019-03-18 3:23 ` Petr Vorel
2019-03-18 15:59 ` Cyril Hrubis
4 siblings, 1 reply; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 3:23 UTC (permalink / raw)
To: ltp
Test works with is glibc specific definitions M_MXFAST , M_NLBLKS, which
aren't supported on other libc (uClibc, MUSL, Bionic), probably no other
libc will ever define.
uClibc also defines them in headers, that's we explicitly check glibc.
Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
Hi,
maybe #ifdef M_MXFAST && !defined(UCLINUX) would be better.
Kind regards,
Petr
---
testcases/kernel/syscalls/mallopt/mallopt01.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/testcases/kernel/syscalls/mallopt/mallopt01.c b/testcases/kernel/syscalls/mallopt/mallopt01.c
index 416fc48be..14e26dd81 100644
--- a/testcases/kernel/syscalls/mallopt/mallopt01.c
+++ b/testcases/kernel/syscalls/mallopt/mallopt01.c
@@ -63,7 +63,7 @@ extern int tst_COUNT; /* Test Case counter for tst_routines */
void printinfo();
-#if !defined(UCLINUX)
+#if defined(__GLIBC__)
struct mallinfo info;
int main(int argc, char *argv[])
@@ -150,6 +150,6 @@ void printinfo(void)
#else
int main(void)
{
- tst_brkm(TCONF, NULL, "test is not available on uClinux");
+ tst_brkm(TCONF, NULL, "mallopt defined only for glibc");
}
-#endif /* if !defined(UCLINUX) */
+#endif
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present
2019-03-18 3:23 ` [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present Petr Vorel
@ 2019-03-18 15:40 ` Cyril Hrubis
2019-03-18 18:43 ` Petr Vorel
0 siblings, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2019-03-18 15:40 UTC (permalink / raw)
To: ltp
Hi!
> __sighandler_t is libc implementation specific and should not be relied
> upon. Instead, we fall back upon void (*)(int), as specified by POSIX.
Can't we just use the void (* k_sa_handler)(int) in all cases and don't
add more ifdefs to that file?
The __sighandler_t is defined to void (* __sighandler_t)(int) in glibc anyways.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL
2019-03-18 3:23 ` [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL Petr Vorel
@ 2019-03-18 15:41 ` Cyril Hrubis
0 siblings, 0 replies; 12+ messages in thread
From: Cyril Hrubis @ 2019-03-18 15:41 UTC (permalink / raw)
To: ltp
Hi!
This is obviously OK.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request
2019-03-18 3:23 ` [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request Petr Vorel
@ 2019-03-18 15:50 ` Cyril Hrubis
0 siblings, 0 replies; 12+ messages in thread
From: Cyril Hrubis @ 2019-03-18 15:50 UTC (permalink / raw)
To: ltp
Hi!
Looks OK as well.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL
2019-03-18 3:23 ` [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL Petr Vorel
@ 2019-03-18 15:51 ` Cyril Hrubis
0 siblings, 0 replies; 12+ messages in thread
From: Cyril Hrubis @ 2019-03-18 15:51 UTC (permalink / raw)
To: ltp
Hi!
> Unlike glibc and uclibc (which define MREMAP_MAYMOVE under __USE_MISC)
> MUSL requires _GNU_SOURCE.
> + Remove __USE_GNU
Acked, the __USE_GNU is hack that is not supposed to be used anyway.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 5/5] mallopt: Test only on glibc
2019-03-18 3:23 ` [LTP] [PATCH 5/5] mallopt: Test only on glibc Petr Vorel
@ 2019-03-18 15:59 ` Cyril Hrubis
0 siblings, 0 replies; 12+ messages in thread
From: Cyril Hrubis @ 2019-03-18 15:59 UTC (permalink / raw)
To: ltp
Hi!
I guess that this is OK as well.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 12+ messages in thread
* [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present
2019-03-18 15:40 ` Cyril Hrubis
@ 2019-03-18 18:43 ` Petr Vorel
0 siblings, 0 replies; 12+ messages in thread
From: Petr Vorel @ 2019-03-18 18:43 UTC (permalink / raw)
To: ltp
Hi Cyril,
> > __sighandler_t is libc implementation specific and should not be relied
> > upon. Instead, we fall back upon void (*)(int), as specified by POSIX.
> Can't we just use the void (* k_sa_handler)(int) in all cases and don't
> add more ifdefs to that file?
> The __sighandler_t is defined to void (* __sighandler_t)(int) in glibc anyways.
Thanks for a hint, make sense.
Fixed accordingly and pushed whole patchset.
Kind regards,
Petr
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2019-03-18 18:43 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-18 3:23 [LTP] [PATCH 0/5] Some MUSL fixes Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 1/5] rt_sigaction.h: Check for type sighandler_t and use if present Petr Vorel
2019-03-18 15:40 ` Cyril Hrubis
2019-03-18 18:43 ` Petr Vorel
2019-03-18 3:23 ` [LTP] [PATCH 2/5] {rt_, }sigaction: Define _GNU_SOURCE to get SA_NOMASK on MUSL Petr Vorel
2019-03-18 15:41 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 3/5] ptrace: Use int instead of enum __ptrace_request Petr Vorel
2019-03-18 15:50 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 4/5] mremap: Define _GNU_SOURCE to get MREMAP_MAYMOVE on MUSL Petr Vorel
2019-03-18 15:51 ` Cyril Hrubis
2019-03-18 3:23 ` [LTP] [PATCH 5/5] mallopt: Test only on glibc Petr Vorel
2019-03-18 15:59 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.