#!/bin/bash
# test perf probe of function from different CU
# SPDX-License-Identifier: GPL-2.0

set -e

# skip if there's no gcc
if ! [ -x "$(command -v gcc)" ]; then
        echo "failed: no gcc compiler"
        exit 2
fi

temp_dir=$(mktemp -d /tmp/perf-uprobe-different-cu-sh.XXXXXXXXXX)

cleanup()
{
	trap - EXIT TERM INT
	if [[ "${temp_dir}" =~ ^/tmp/perf-uprobe-different-cu-sh.*$ ]]; then
		echo "--- Cleaning up ---"
		perf probe -x ${temp_dir}/testfile -d foo || true
		rm -f "${temp_dir}/"*
		rmdir "${temp_dir}"
	fi
}

trap_cleanup()
{
        cleanup
        exit 1
}

trap trap_cleanup EXIT TERM INT

cat > ${temp_dir}/testfile-foo.h << EOF
struct t
{
  int *p;
  int c;
};

extern int foo (int i, struct t *t);
EOF

cat > ${temp_dir}/testfile-foo.c << EOF
#include "testfile-foo.h"

int
foo (int i, struct t *t)
{
  int j, res = 0;
  for (j = 0; j < i && j < t->c; j++)
    res += t->p[j];

  return res;
}
EOF

cat > ${temp_dir}/testfile-main.c << EOF
#include "testfile-foo.h"

static struct t g;

int
main (int argc, char **argv)
{
  int i;
  int j[argc];
  g.c = argc;
  g.p = j;
  for (i = 0; i < argc; i++)
    j[i] = (int) argv[i][0];
  return foo (3, &g);
}
EOF

gcc -g -Og -flto -c ${temp_dir}/testfile-foo.c -o ${temp_dir}/testfile-foo.o
gcc -g -Og -c ${temp_dir}/testfile-main.c -o ${temp_dir}/testfile-main.o
gcc -g -Og -o ${temp_dir}/testfile ${temp_dir}/testfile-foo.o ${temp_dir}/testfile-main.o

perf probe -x ${temp_dir}/testfile --funcs foo
perf probe -x ${temp_dir}/testfile foo

cleanup
