• Athira Rajeev's avatar
    perf test buildid: Fix shell string substitutions · f1942108
    Athira Rajeev authored
    
    
    The perf test named “build id cache operations” skips with below error
    on some distros:
    
      <<>>
       78: build id cache operations                                       :
      test child forked, pid 111101
      WARNING: wine not found. PE binaries will not be run.
      test binaries: /tmp/perf.ex.SHA1.PKz /tmp/perf.ex.MD5.Gt3 ./tests/shell/../pe-file.exe
      DEBUGINFOD_URLS=
      Adding 4abd406f041feb4f10ecde3fc30fd0639e1a91cb /tmp/perf.ex.SHA1.PKz: Ok
      build id: 4abd406f041feb4f10ecde3fc30fd0639e1a91cb
      ./tests/shell/buildid.sh: 69: ./tests/shell/buildid.sh: Bad substitution
      test child finished with -2
      build id cache operations: Skip
      <<>>
    
    The test script "tests/shell/buildid.sh" uses some of the string
    substitution ways which are supported in bash, but not in "sh" or other
    shells. Above error on line number 69 that reports "Bad substitution"
    is:
    
      <<>>
      link=${build_id_dir}/.build-id/${id:0:2}/${id:2}
      <<>>
    
    Here the way of getting first two characters from id ie, ${id:0:2} and
    similarly expressions like ${id:2} is not recognised in "sh". So the
    line errors and instead of hitting failure, the test gets skipped as
    shown in logs.  So the syntax issue causes test not to be executed in
    such cases. Similarly usage : "${@: -1}" [ to pick last argument passed
    to a function] in “test_record” doesn’t work in all distros.
    
    Fix this by using alternative way with shell substitution to pick
    required characters from the string. Also fix the usage of “${@: -1}” to
    work in all cases.
    
    Another usage in “test_record” is:
    
      <<>>
      ${perf} record --buildid-all -o ${data} $@ &> ${log}
      <<>>
    
    This causes the 'perf record' to start in background and Results in the
    data file not being created by the time "check" function is invoked.
    Below log shows 'perf record' result getting displayed after the call to
    "check" function.
    
      <<>>
      running: perf record /tmp/perf.ex.SHA1.EAU
      build id: 4abd406f041feb4f10ecde3fc30fd0639e1a91cb
      link: /tmp/perf.debug.mLT/.build-id/4a/bd406f041feb4f10ecde3fc30fd0639e1a91cb
      failed: link /tmp/perf.debug.mLT/.build-id/4a/bd406f041feb4f10ecde3fc30fd0639e1a91cb does not exist
      test child finished with -1
      build id cache operations: FAILED!
      root@machine:~/athira/linux/tools/perf# Couldn't synthesize bpf events.
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.010 MB /tmp/perf.data.bFF ]
      <<>>
    
    Fix this by redirecting output instead of using “&” which starts the
    command in background.
    Reviewed-by: default avatarDavid Laight <David.Laight@ACULAB.COM>
    Signed-off-by: default avatarAthira Jajeev <atrajeev@linux.vnet.ibm.com>
    Tested-by: default avatarDisha Goel <disgoel@linux.ibm.com>
    Acked-by: default avatarIan Rogers <irogers@google.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nageswara R Sastry <rnsastry@linux.ibm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: linuxppc-dev@lists.ozlabs.org
    Link: https://lore.kernel.org/r/20230119142719.32628-1-atrajeev@linux.vnet.ibm.com
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    f1942108
buildid.sh 4.14 KB