This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 7/8] New port: TI C6x: test case fixes


> Date: Tue, 09 Aug 2011 23:03:37 +0800
> From: Yao Qi <yao@codesourcery.com>

I really think your approach is rather fragile...

> diff --git a/gdb/testsuite/gdb.base/savedregs.c b/gdb/testsuite/gdb.base/savedregs.c
> index 9f302a0..582afc4 100644
> --- a/gdb/testsuite/gdb.base/savedregs.c
> +++ b/gdb/testsuite/gdb.base/savedregs.c
> @@ -22,6 +22,12 @@
>  #include <signal.h>
>  #include <sys/time.h>
>  
> +#ifdef __UCLIBC__
> +#if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
> +#define HAS_NOMMU
> +#endif
> +#endif
> +
>  static volatile int done;
>  
>  extern int
> @@ -45,11 +51,27 @@ catcher (int sig)
>  static void
>  thrower (void)
>  {
> +#if defined(HAS_NOMMU)
> +#if defined(__arm__)
> +  asm(".word 0xf8f00000");
> +#elif defined(__TMS320C6X__)
> +  /* 0x56454314 is also an invalid insn but it causes SIGTRAP in kernel.  */
> +  asm(".word 0x56454313");
> +#else
> +#error Please write an invalid instruction here for your target
> +#endif
> +#else /* defined(HAS_NOMMU) */
>    *(char *)0 = 0;
> +#endif /* defined(HAS_NOMMU) */
>  }
>  
>  main ()
>  {
> +#if defined(HAS_NOMMU)
> +  signal (SIGILL, catcher);
> +#else
>    signal (SIGSEGV, catcher);
> +#endif
> +
>    thrower ();
>  }


Why depend on this NOMMU-magic?  Just install the signal handler for
bth SIGSEGV and SIGILL, try a store to (or perhaps a read from)
address 0, and then fall through to executing an illegal instruction.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]