
# define __ASM_FORM(x)  " " #x " "
# define JUMP_LABEL_INITIAL_NOP ".byte 0xe9 \n\t .long 0\n\t"
# define __ASM_SEL(a,b) __ASM_FORM(b)
#define _ASM_PTR        __ASM_SEL(.long, .quad)

# define JUMP_LABEL(key, label)                                 \
       do {                                                    \
               asm goto("1:"                                   \
                       JUMP_LABEL_INITIAL_NOP                  \
                       ".pushsection __jump_table,  \"a\" \n\t"\
                       _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \
                       ".popsection \n\t"                      \
                       : :  "i" (key) :  : label);             \
       } while (0)

int main(int argc, char *argv[])
{
       JUMP_LABEL("1", do_trace );
       return 1;
do_trace:
       return 0;
}

/*
 * check-name: Asm with goto labels.
 */

