* Re: [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change
@ 2006-08-20 10:24 Mikael Pettersson
2006-08-20 10:40 ` Willy Tarreau
0 siblings, 1 reply; 5+ messages in thread
From: Mikael Pettersson @ 2006-08-20 10:24 UTC (permalink / raw)
To: w; +Cc: ak, davem, linux-kernel
On Sun, 20 Aug 2006 03:31:09 +0200, Willy Tarreau wrote:
>On Sun, Aug 20, 2006 at 12:19:06AM +0200, Mikael Pettersson wrote:
>> 2.4.34-pre1 doesn't build on x86_64:
>>
>> kernel/kernel.o(__ksymtab+0x1c10): multiple definition of `__ksymtab_memchr'
>> arch/x86_64/kernel/kernel.o(__ksymtab+0x3f0): first defined here
>> kernel/kernel.o(.kstrtab+0x3960): multiple definition of `__kstrtab_memchr'
>> arch/x86_64/kernel/kernel.o(.kstrtab+0x5fd): first defined here
>> ld: Warning: size of symbol `__kstrtab_memchr' changed from 7 in arch/x86_64/kernel/kernel.o to 17 in kernel/kernel.o
>> make: *** [vmlinux] Error 1
>>
>> This is because the 'export memchr() which is used by smbfs and lp driver'
>> change in 2.4.34-pre1 added an EXPORT_SYMBOL of memchr to kernel/ksyms.c
>> without also removing the existing one in arch/x86_64/kernel/x8664_ksyms.c.
>> Alpha, ARM, ppc32, and SH also have EXPORTs of memchr so they probably
>> also broke.
>>
>> This patch removes the EXPORTs of memchr under arch/, which fixes x86_64
>> and should fix the other architectures as well.
>
>OK Mikael,
>
>I have fixed sparc and sparc64 instead, and it's OK now without having to
>export memchr() in kernel/ksyms.c. So the fix is shorter and more logical.
>It brings non-sparc architectures to their state before my wrong fix. However,
>sparc needs to export memchr() for smbfs and lp.
Works for me. Tested on i386, x86_64, and ppc32. I'll try to test on sparc64
later today.
/Mikael
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change
2006-08-20 10:24 [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change Mikael Pettersson
@ 2006-08-20 10:40 ` Willy Tarreau
0 siblings, 0 replies; 5+ messages in thread
From: Willy Tarreau @ 2006-08-20 10:40 UTC (permalink / raw)
To: Mikael Pettersson; +Cc: ak, davem, linux-kernel
On Sun, Aug 20, 2006 at 12:24:04PM +0200, Mikael Pettersson wrote:
> On Sun, 20 Aug 2006 03:31:09 +0200, Willy Tarreau wrote:
> >On Sun, Aug 20, 2006 at 12:19:06AM +0200, Mikael Pettersson wrote:
> >> 2.4.34-pre1 doesn't build on x86_64:
> >>
> >> kernel/kernel.o(__ksymtab+0x1c10): multiple definition of `__ksymtab_memchr'
> >> arch/x86_64/kernel/kernel.o(__ksymtab+0x3f0): first defined here
> >> kernel/kernel.o(.kstrtab+0x3960): multiple definition of `__kstrtab_memchr'
> >> arch/x86_64/kernel/kernel.o(.kstrtab+0x5fd): first defined here
> >> ld: Warning: size of symbol `__kstrtab_memchr' changed from 7 in arch/x86_64/kernel/kernel.o to 17 in kernel/kernel.o
> >> make: *** [vmlinux] Error 1
> >>
> >> This is because the 'export memchr() which is used by smbfs and lp driver'
> >> change in 2.4.34-pre1 added an EXPORT_SYMBOL of memchr to kernel/ksyms.c
> >> without also removing the existing one in arch/x86_64/kernel/x8664_ksyms.c.
> >> Alpha, ARM, ppc32, and SH also have EXPORTs of memchr so they probably
> >> also broke.
> >>
> >> This patch removes the EXPORTs of memchr under arch/, which fixes x86_64
> >> and should fix the other architectures as well.
> >
> >OK Mikael,
> >
> >I have fixed sparc and sparc64 instead, and it's OK now without having to
> >export memchr() in kernel/ksyms.c. So the fix is shorter and more logical.
> >It brings non-sparc architectures to their state before my wrong fix. However,
> >sparc needs to export memchr() for smbfs and lp.
>
> Works for me. Tested on i386, x86_64, and ppc32. I'll try to test on sparc64
> later today.
Perfect. I have already checked sparc64 last night, so I think the fix was
the right thing to do.
> /Mikael
Thanks Mikael,
Willy
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change
@ 2006-08-19 22:19 Mikael Pettersson
2006-08-19 23:16 ` Willy Tarreau
2006-08-20 1:31 ` Willy Tarreau
0 siblings, 2 replies; 5+ messages in thread
From: Mikael Pettersson @ 2006-08-19 22:19 UTC (permalink / raw)
To: wtarreau; +Cc: ak, linux-kernel
2.4.34-pre1 doesn't build on x86_64:
kernel/kernel.o(__ksymtab+0x1c10): multiple definition of `__ksymtab_memchr'
arch/x86_64/kernel/kernel.o(__ksymtab+0x3f0): first defined here
kernel/kernel.o(.kstrtab+0x3960): multiple definition of `__kstrtab_memchr'
arch/x86_64/kernel/kernel.o(.kstrtab+0x5fd): first defined here
ld: Warning: size of symbol `__kstrtab_memchr' changed from 7 in arch/x86_64/kernel/kernel.o to 17 in kernel/kernel.o
make: *** [vmlinux] Error 1
This is because the 'export memchr() which is used by smbfs and lp driver'
change in 2.4.34-pre1 added an EXPORT_SYMBOL of memchr to kernel/ksyms.c
without also removing the existing one in arch/x86_64/kernel/x8664_ksyms.c.
Alpha, ARM, ppc32, and SH also have EXPORTs of memchr so they probably
also broke.
This patch removes the EXPORTs of memchr under arch/, which fixes x86_64
and should fix the other architectures as well.
Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
diff -rupN linux-2.4.34-pre1/arch/alpha/kernel/alpha_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/alpha/kernel/alpha_ksyms.c
--- linux-2.4.34-pre1/arch/alpha/kernel/alpha_ksyms.c 2003-06-14 13:30:18.000000000 +0200
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/alpha/kernel/alpha_ksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -268,7 +268,6 @@ EXPORT_SYMBOL_NOVERS(__remq);
EXPORT_SYMBOL_NOVERS(__remqu);
EXPORT_SYMBOL_NOVERS(memcpy);
EXPORT_SYMBOL_NOVERS(memset);
-EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL(get_wchan);
diff -rupN linux-2.4.34-pre1/arch/arm/kernel/armksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/arm/kernel/armksyms.c
--- linux-2.4.34-pre1/arch/arm/kernel/armksyms.c 2003-08-25 20:07:40.000000000 +0200
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/arm/kernel/armksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -193,7 +193,6 @@ EXPORT_SYMBOL_NOVERS(memcpy);
EXPORT_SYMBOL_NOVERS(memmove);
EXPORT_SYMBOL_NOVERS(memcmp);
EXPORT_SYMBOL_NOVERS(memscan);
-EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL_NOVERS(__memzero);
/* user mem (segment) */
diff -rupN linux-2.4.34-pre1/arch/ia64/kernel/ia64_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ia64/kernel/ia64_ksyms.c
--- linux-2.4.34-pre1/arch/ia64/kernel/ia64_ksyms.c 2004-04-14 20:22:20.000000000 +0200
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ia64/kernel/ia64_ksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -10,7 +10,6 @@ EXPORT_SYMBOL(pm_idle);
#include <linux/string.h>
EXPORT_SYMBOL_NOVERS(memset);
-EXPORT_SYMBOL(memchr);
EXPORT_SYMBOL(memcmp);
EXPORT_SYMBOL_NOVERS(memcpy);
EXPORT_SYMBOL(memmove);
diff -rupN linux-2.4.34-pre1/arch/ppc/kernel/ppc_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ppc/kernel/ppc_ksyms.c
--- linux-2.4.34-pre1/arch/ppc/kernel/ppc_ksyms.c 2004-04-14 20:22:20.000000000 +0200
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ppc/kernel/ppc_ksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -300,7 +300,6 @@ EXPORT_SYMBOL_NOVERS(memset);
EXPORT_SYMBOL_NOVERS(memmove);
EXPORT_SYMBOL_NOVERS(memscan);
EXPORT_SYMBOL_NOVERS(memcmp);
-EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL(abs);
diff -rupN linux-2.4.34-pre1/arch/sh/kernel/sh_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/sh/kernel/sh_ksyms.c
--- linux-2.4.34-pre1/arch/sh/kernel/sh_ksyms.c 2003-11-29 00:28:11.000000000 +0100
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/sh/kernel/sh_ksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -60,7 +60,6 @@ EXPORT_SYMBOL(pcibios_penalize_isa_irq);
/* mem exports */
EXPORT_SYMBOL(memscan);
-EXPORT_SYMBOL(memchr);
EXPORT_SYMBOL(memcpy);
EXPORT_SYMBOL(memcpy_fromio);
EXPORT_SYMBOL(memcpy_toio);
diff -rupN linux-2.4.34-pre1/arch/x86_64/kernel/x8664_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/x86_64/kernel/x8664_ksyms.c
--- linux-2.4.34-pre1/arch/x86_64/kernel/x8664_ksyms.c 2004-11-17 18:36:41.000000000 +0100
+++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/x86_64/kernel/x8664_ksyms.c 2006-08-20 00:10:15.000000000 +0200
@@ -171,7 +171,6 @@ EXPORT_SYMBOL_NOVERS(strchr);
EXPORT_SYMBOL_NOVERS(strcat);
EXPORT_SYMBOL_NOVERS(strcmp);
EXPORT_SYMBOL_NOVERS(strncat);
-EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL_NOVERS(strrchr);
EXPORT_SYMBOL_NOVERS(strnlen);
EXPORT_SYMBOL_NOVERS(memcmp);
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change
2006-08-19 22:19 Mikael Pettersson
@ 2006-08-19 23:16 ` Willy Tarreau
2006-08-20 1:31 ` Willy Tarreau
1 sibling, 0 replies; 5+ messages in thread
From: Willy Tarreau @ 2006-08-19 23:16 UTC (permalink / raw)
To: Mikael Pettersson; +Cc: ak, linux-kernel
On Sun, Aug 20, 2006 at 12:19:06AM +0200, Mikael Pettersson wrote:
> 2.4.34-pre1 doesn't build on x86_64:
>
> kernel/kernel.o(__ksymtab+0x1c10): multiple definition of `__ksymtab_memchr'
> arch/x86_64/kernel/kernel.o(__ksymtab+0x3f0): first defined here
> kernel/kernel.o(.kstrtab+0x3960): multiple definition of `__kstrtab_memchr'
> arch/x86_64/kernel/kernel.o(.kstrtab+0x5fd): first defined here
> ld: Warning: size of symbol `__kstrtab_memchr' changed from 7 in arch/x86_64/kernel/kernel.o to 17 in kernel/kernel.o
> make: *** [vmlinux] Error 1
>
> This is because the 'export memchr() which is used by smbfs and lp driver'
> change in 2.4.34-pre1 added an EXPORT_SYMBOL of memchr to kernel/ksyms.c
> without also removing the existing one in arch/x86_64/kernel/x8664_ksyms.c.
> Alpha, ARM, ppc32, and SH also have EXPORTs of memchr so they probably
> also broke.
>
> This patch removes the EXPORTs of memchr under arch/, which fixes x86_64
> and should fix the other architectures as well.
Mikael,
I added that patch when I discovered that smbfs had unresolved symbols
on sparc. I was not aware of those per-arch exports, and probably that
I should have added such an export to sparc only instead of adding it
to the whole kernel.
I will try to revert it first and only fix sparc, and if that does not
work, then I will use your fix. But if I can touch only one arch, I'd
feel more comfortable.
Thanks for your report,
Willy
> Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
>
> diff -rupN linux-2.4.34-pre1/arch/alpha/kernel/alpha_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/alpha/kernel/alpha_ksyms.c
> --- linux-2.4.34-pre1/arch/alpha/kernel/alpha_ksyms.c 2003-06-14 13:30:18.000000000 +0200
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/alpha/kernel/alpha_ksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -268,7 +268,6 @@ EXPORT_SYMBOL_NOVERS(__remq);
> EXPORT_SYMBOL_NOVERS(__remqu);
> EXPORT_SYMBOL_NOVERS(memcpy);
> EXPORT_SYMBOL_NOVERS(memset);
> -EXPORT_SYMBOL_NOVERS(memchr);
>
> EXPORT_SYMBOL(get_wchan);
>
> diff -rupN linux-2.4.34-pre1/arch/arm/kernel/armksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/arm/kernel/armksyms.c
> --- linux-2.4.34-pre1/arch/arm/kernel/armksyms.c 2003-08-25 20:07:40.000000000 +0200
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/arm/kernel/armksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -193,7 +193,6 @@ EXPORT_SYMBOL_NOVERS(memcpy);
> EXPORT_SYMBOL_NOVERS(memmove);
> EXPORT_SYMBOL_NOVERS(memcmp);
> EXPORT_SYMBOL_NOVERS(memscan);
> -EXPORT_SYMBOL_NOVERS(memchr);
> EXPORT_SYMBOL_NOVERS(__memzero);
>
> /* user mem (segment) */
> diff -rupN linux-2.4.34-pre1/arch/ia64/kernel/ia64_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ia64/kernel/ia64_ksyms.c
> --- linux-2.4.34-pre1/arch/ia64/kernel/ia64_ksyms.c 2004-04-14 20:22:20.000000000 +0200
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ia64/kernel/ia64_ksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -10,7 +10,6 @@ EXPORT_SYMBOL(pm_idle);
> #include <linux/string.h>
>
> EXPORT_SYMBOL_NOVERS(memset);
> -EXPORT_SYMBOL(memchr);
> EXPORT_SYMBOL(memcmp);
> EXPORT_SYMBOL_NOVERS(memcpy);
> EXPORT_SYMBOL(memmove);
> diff -rupN linux-2.4.34-pre1/arch/ppc/kernel/ppc_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ppc/kernel/ppc_ksyms.c
> --- linux-2.4.34-pre1/arch/ppc/kernel/ppc_ksyms.c 2004-04-14 20:22:20.000000000 +0200
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/ppc/kernel/ppc_ksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -300,7 +300,6 @@ EXPORT_SYMBOL_NOVERS(memset);
> EXPORT_SYMBOL_NOVERS(memmove);
> EXPORT_SYMBOL_NOVERS(memscan);
> EXPORT_SYMBOL_NOVERS(memcmp);
> -EXPORT_SYMBOL_NOVERS(memchr);
>
> EXPORT_SYMBOL(abs);
>
> diff -rupN linux-2.4.34-pre1/arch/sh/kernel/sh_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/sh/kernel/sh_ksyms.c
> --- linux-2.4.34-pre1/arch/sh/kernel/sh_ksyms.c 2003-11-29 00:28:11.000000000 +0100
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/sh/kernel/sh_ksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -60,7 +60,6 @@ EXPORT_SYMBOL(pcibios_penalize_isa_irq);
>
> /* mem exports */
> EXPORT_SYMBOL(memscan);
> -EXPORT_SYMBOL(memchr);
> EXPORT_SYMBOL(memcpy);
> EXPORT_SYMBOL(memcpy_fromio);
> EXPORT_SYMBOL(memcpy_toio);
> diff -rupN linux-2.4.34-pre1/arch/x86_64/kernel/x8664_ksyms.c linux-2.4.34-pre1.kill-arch-memchr-exports/arch/x86_64/kernel/x8664_ksyms.c
> --- linux-2.4.34-pre1/arch/x86_64/kernel/x8664_ksyms.c 2004-11-17 18:36:41.000000000 +0100
> +++ linux-2.4.34-pre1.kill-arch-memchr-exports/arch/x86_64/kernel/x8664_ksyms.c 2006-08-20 00:10:15.000000000 +0200
> @@ -171,7 +171,6 @@ EXPORT_SYMBOL_NOVERS(strchr);
> EXPORT_SYMBOL_NOVERS(strcat);
> EXPORT_SYMBOL_NOVERS(strcmp);
> EXPORT_SYMBOL_NOVERS(strncat);
> -EXPORT_SYMBOL_NOVERS(memchr);
> EXPORT_SYMBOL_NOVERS(strrchr);
> EXPORT_SYMBOL_NOVERS(strnlen);
> EXPORT_SYMBOL_NOVERS(memcmp);
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change
2006-08-19 22:19 Mikael Pettersson
2006-08-19 23:16 ` Willy Tarreau
@ 2006-08-20 1:31 ` Willy Tarreau
1 sibling, 0 replies; 5+ messages in thread
From: Willy Tarreau @ 2006-08-20 1:31 UTC (permalink / raw)
To: Mikael Pettersson; +Cc: ak, linux-kernel, davem
On Sun, Aug 20, 2006 at 12:19:06AM +0200, Mikael Pettersson wrote:
> 2.4.34-pre1 doesn't build on x86_64:
>
> kernel/kernel.o(__ksymtab+0x1c10): multiple definition of `__ksymtab_memchr'
> arch/x86_64/kernel/kernel.o(__ksymtab+0x3f0): first defined here
> kernel/kernel.o(.kstrtab+0x3960): multiple definition of `__kstrtab_memchr'
> arch/x86_64/kernel/kernel.o(.kstrtab+0x5fd): first defined here
> ld: Warning: size of symbol `__kstrtab_memchr' changed from 7 in arch/x86_64/kernel/kernel.o to 17 in kernel/kernel.o
> make: *** [vmlinux] Error 1
>
> This is because the 'export memchr() which is used by smbfs and lp driver'
> change in 2.4.34-pre1 added an EXPORT_SYMBOL of memchr to kernel/ksyms.c
> without also removing the existing one in arch/x86_64/kernel/x8664_ksyms.c.
> Alpha, ARM, ppc32, and SH also have EXPORTs of memchr so they probably
> also broke.
>
> This patch removes the EXPORTs of memchr under arch/, which fixes x86_64
> and should fix the other architectures as well.
OK Mikael,
I have fixed sparc and sparc64 instead, and it's OK now without having to
export memchr() in kernel/ksyms.c. So the fix is shorter and more logical.
It brings non-sparc architectures to their state before my wrong fix. However,
sparc needs to export memchr() for smbfs and lp.
diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c
index 1c08204..f5058fe 100644
--- a/arch/sparc/kernel/sparc_ksyms.c
+++ b/arch/sparc/kernel/sparc_ksyms.c
@@ -297,6 +297,7 @@ EXPORT_SYMBOL_NOVERS(memcmp);
EXPORT_SYMBOL_NOVERS(memcpy);
EXPORT_SYMBOL_NOVERS(memset);
EXPORT_SYMBOL_NOVERS(memmove);
+EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL_NOVERS(__ashrdi3);
EXPORT_SYMBOL_NOVERS(__ashldi3);
EXPORT_SYMBOL_NOVERS(__lshrdi3);
diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c
index 0f1f31f..40accab 100644
--- a/arch/sparc64/kernel/sparc64_ksyms.c
+++ b/arch/sparc64/kernel/sparc64_ksyms.c
@@ -359,6 +359,7 @@ EXPORT_SYMBOL_NOVERS(__ret_efault);
/* No version information on these, as gcc produces such symbols. */
EXPORT_SYMBOL_NOVERS(memcmp);
EXPORT_SYMBOL_NOVERS(memcpy);
+EXPORT_SYMBOL_NOVERS(memchr);
EXPORT_SYMBOL_NOVERS(memset);
EXPORT_SYMBOL_NOVERS(memmove);
diff --git a/kernel/ksyms.c b/kernel/ksyms.c
index 73ad3e9..d1e66c7 100644
--- a/kernel/ksyms.c
+++ b/kernel/ksyms.c
@@ -579,7 +579,6 @@ EXPORT_SYMBOL(get_write_access);
EXPORT_SYMBOL(strnicmp);
EXPORT_SYMBOL(strspn);
EXPORT_SYMBOL(strsep);
-EXPORT_SYMBOL(memchr);
#ifdef CONFIG_CRC32
EXPORT_SYMBOL(crc32_le);
Cheers,
Willy
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2006-08-20 10:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-20 10:24 [PATCH 2.4.34-pre1] fix x86_64 etc build failure due to memchr change Mikael Pettersson
2006-08-20 10:40 ` Willy Tarreau
-- strict thread matches above, loose matches on Subject: below --
2006-08-19 22:19 Mikael Pettersson
2006-08-19 23:16 ` Willy Tarreau
2006-08-20 1:31 ` Willy Tarreau
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.