/* This testcase is part of GDB, the GNU debugger.

   Copyright 2013 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifdef SYMBOL_PREFIX
#define SYMBOL(str)     SYMBOL_PREFIX #str
#else
#define SYMBOL(str)     #str
#endif

/* `set_point' further below is the label where we'll set tracepoints
   at.  The insn at the label must the large enough to fit a fast
   tracepoint jump.  */
#if (defined __x86_64__ || defined __i386__)
#  define NOP "   .byte 0xe9,0x00,0x00,0x00,0x00\n" /* jmp $+5 (5-byte nop) */
#else
#  define NOP "" /* port me */
#endif

int
main(void)
{
  /* Note: 'volatile' is used to make sure the compiler doesn't
     optimize out these variables.  We want to be sure instructions
     are generated for accesses.  */
  volatile int i = 0;

  /* Generate a single line with a label in the middle where we can
     place either a trap tracepoint or a fast tracepoint.  */
#define LINE_WITH_FAST_TRACEPOINT					\
  do {									\
    i = 1;								\
    asm ("    .global " SYMBOL (set_point) "\n"			\
	 SYMBOL (set_point) ":\n"					\
	 NOP								\
    );									\
    i = 2;								\
 } while (0)

  LINE_WITH_FAST_TRACEPOINT; /* location 1 */

  return 0;
}
