[Cbe-oss-dev] [PATCH] Fix the definition of the PPE-assisted callback handler array
D. Herrendoerfer
d.herrendoerfer at herrendoerfer.name
Thu Jul 26 16:00:29 EST 2007
Added.
Thank you very much.
D.Herrendoerfer
On Thu, 2007-07-26 at 10:22 +1000, Jeremy Kerr wrote:
> Each entry of the callback handler array is defined explicitly, which
> makes it hard to properly place new definitions. This change uses the
> c99 array initialisation syntax, to make things much clearer.
>
> Because I have no way of testing anything but c99 callbacks (which have
> the first entry in the array, so makes a bad testcase), we can check
> the relocation table to inspect this array. My build puts the handers
> array at 0x0002571c, and here are the appropriate relocation table
> entries:
>
> $ objdump -R libspe2.so.2.2.0 | grep _base_spe_default
> 0002571c R_PPC_ADDR32 _base_spe_default_c99_handler
> 00025720 R_PPC_ADDR32 _base_spe_default_posix1_handler
> 00025730 R_PPC_ADDR32 _base_spe_default_libea_handler
>
> (0x0002571c - 0x0002571c) / 4 = 0 (c99)
> (0x00025720 - 0x0002571c) / 4 = 1 (posix1)
> (0x00025720 - 0x0002571c) / 4 = 5 (libea)
>
> So all looks fine here, c99 callbacks work too. libea testing welcome.
>
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
>
> ---
>
> spebase/lib_builtin.c | 30 ++++++++++--------------------
> 1 file changed, 10 insertions(+), 20 deletions(-)
>
> Index: libspe2/spebase/lib_builtin.c
> ===================================================================
> --- libspe2.orig/spebase/lib_builtin.c
> +++ libspe2/spebase/lib_builtin.c
> @@ -26,26 +26,16 @@
> #include "default_posix1_handler.h"
> #include "default_libea_handler.h"
>
> -/*Default SPE library call handlers for 21xx stop-and-signal.
> -*/
> -static void *handlers[] = {
> - _base_spe_default_c99_handler, _base_spe_default_posix1_handler,
> - NULL,NULL,_base_spe_default_libea_handler ,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
> - NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL };
> +#define HANDLER_IDX(x) (x & 0xff)
> +
> +/*
> + * Default SPE library call handlers for 21xx stop-and-signal.
> + */
> +static void *handlers[256] = {
> + [HANDLER_IDX(SPE_C99_CLASS)] = _base_spe_default_c99_handler,
> + [HANDLER_IDX(SPE_POSIX1_CLASS)] = _base_spe_default_posix1_handler,
> + [HANDLER_IDX(SPE_LIBEA_CLASS)] = _base_spe_default_libea_handler
> +};
>
> int _base_spe_callback_handler_register(void * handler, unsigned int callnum, unsigned int mode)
> {
> _______________________________________________
> cbe-oss-dev mailing list
> cbe-oss-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/cbe-oss-dev
More information about the cbe-oss-dev
mailing list