• Jiri Olsa's avatar
    perf test: Fix the "signal" test inline assembly · 8a39e8c4
    Jiri Olsa authored
    When compiling with DEBUG=1 on Fedora 32 I'm getting crash for 'perf
    test signal':
    
      Program received signal SIGSEGV, Segmentation fault.
      0x0000000000c68548 in __test_function ()
      (gdb) bt
      #0  0x0000000000c68548 in __test_function ()
      #1  0x00000000004d62e9 in test_function () at tests/bp_signal.c:61
      #2  0x00000000004d689a in test__bp_signal (test=0xa8e280 <generic_ ...
      #3  0x00000000004b7d49 in run_test (test=0xa8e280 <generic_tests+1 ...
      #4  0x00000000004b7e7f in test_and_print (t=0xa8e280 <generic_test ...
      #5  0x00000000004b8927 in __cmd_test (argc=1, argv=0x7fffffffdce0, ...
      ...
    
    It's caused by the symbol __test_function being in the ".bss" section:
    
      $ readelf -a ./perf | less
        [Nr] Name              Type             Address           Offset
             Size              EntSize          Flags  Link  Info  Align
        ...
        [28] .bss              NOBITS           0000000000c356a0  008346a0
             00000000000511f8  0000000000000000  WA       0     0     32
    
      $ nm perf | grep __test_function
      0000000000c68548 B __test_function
    
    I guess most of the time we're just lucky the inline asm ended up in the
    ".text" section, so making it specific explicit with push and pop
    section clauses.
    
      $ readelf -a ./perf | less
        [Nr] Name              Type             Address           Offset
             Size              EntSize          Flags  Link  Info  Align
        ...
        [13] .text             PROGBITS         0000000000431240  00031240
             0000000000306faa  0000000000000000  AX       0     0     16
    
      $ nm perf | grep __test_function
      00000000004d62c8 T __test_function
    
    Committer testing:
    
      $ readelf -wi ~/bin/perf | grep producer -m1
        <c>   DW_AT_producer    : (indirect string, offset: 0x254a): GNU C99 10.2.1 20200723 (Red Hat 10.2.1-1) -mtune=generic -march=x86-64 -ggdb3 -std=gnu99 -fno-omit-frame-pointer -funwind-tables -fstack-protector-all
                                                                                                                                             ^^^^^
                                                                                                                                             ^^^^^
                                                                                                                                             ^^^^^
      $
    
    Before:
    
      $ perf test signal
      20: Breakpoint overflow signal handler                    : FAILED!
      $
    
    After:
    
      $ perf test signal
      20: Breakpoint overflow signal handler                    : Ok
      $
    
    Fixes: 8fd34e1c ("perf test: Improve bp_signal")
    Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Michael Petlan <mpetlan@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lore.kernel.org/lkml/20200911130005.1842138-1-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    8a39e8c4
bp_signal.c 8.32 KB