forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.4 KiB
98 lines
2.4 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include <stdbool.h> |
|
#include <inttypes.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <linux/bitops.h> |
|
#include <linux/kernel.h> |
|
#include <linux/types.h> |
|
#include <sys/types.h> |
|
#include <sys/stat.h> |
|
#include <unistd.h> |
|
#include <subcmd/exec-cmd.h> |
|
|
|
#include "debug.h" |
|
#include "util/build-id.h" |
|
#include "util/symbol.h" |
|
#include "util/dso.h" |
|
|
|
#include "tests.h" |
|
|
|
#ifdef HAVE_LIBBFD_SUPPORT |
|
|
|
static int run_dir(const char *d) |
|
{ |
|
char filename[PATH_MAX]; |
|
char debugfile[PATH_MAX]; |
|
struct build_id bid; |
|
char debuglink[PATH_MAX]; |
|
char expect_build_id[] = { |
|
0x5a, 0x0f, 0xd8, 0x82, 0xb5, 0x30, 0x84, 0x22, |
|
0x4b, 0xa4, 0x7b, 0x62, 0x4c, 0x55, 0xa4, 0x69, |
|
}; |
|
char expect_debuglink[PATH_MAX] = "pe-file.exe.debug"; |
|
struct dso *dso; |
|
struct symbol *sym; |
|
int ret; |
|
|
|
scnprintf(filename, PATH_MAX, "%s/pe-file.exe", d); |
|
ret = filename__read_build_id(filename, &bid); |
|
TEST_ASSERT_VAL("Failed to read build_id", |
|
ret == sizeof(expect_build_id)); |
|
TEST_ASSERT_VAL("Wrong build_id", !memcmp(bid.data, expect_build_id, |
|
sizeof(expect_build_id))); |
|
|
|
ret = filename__read_debuglink(filename, debuglink, PATH_MAX); |
|
TEST_ASSERT_VAL("Failed to read debuglink", ret == 0); |
|
TEST_ASSERT_VAL("Wrong debuglink", |
|
!strcmp(debuglink, expect_debuglink)); |
|
|
|
scnprintf(debugfile, PATH_MAX, "%s/%s", d, debuglink); |
|
ret = filename__read_build_id(debugfile, &bid); |
|
TEST_ASSERT_VAL("Failed to read debug file build_id", |
|
ret == sizeof(expect_build_id)); |
|
TEST_ASSERT_VAL("Wrong build_id", !memcmp(bid.data, expect_build_id, |
|
sizeof(expect_build_id))); |
|
|
|
dso = dso__new(filename); |
|
TEST_ASSERT_VAL("Failed to get dso", dso); |
|
|
|
ret = dso__load_bfd_symbols(dso, debugfile); |
|
TEST_ASSERT_VAL("Failed to load symbols", ret == 0); |
|
|
|
dso__sort_by_name(dso); |
|
sym = dso__find_symbol_by_name(dso, "main"); |
|
TEST_ASSERT_VAL("Failed to find main", sym); |
|
dso__delete(dso); |
|
|
|
return TEST_OK; |
|
} |
|
|
|
int test__pe_file_parsing(struct test *test __maybe_unused, |
|
int subtest __maybe_unused) |
|
{ |
|
struct stat st; |
|
char path_dir[PATH_MAX]; |
|
|
|
/* First try development tree tests. */ |
|
if (!lstat("./tests", &st)) |
|
return run_dir("./tests"); |
|
|
|
/* Then installed path. */ |
|
snprintf(path_dir, PATH_MAX, "%s/tests", get_argv_exec_path()); |
|
|
|
if (!lstat(path_dir, &st)) |
|
return run_dir(path_dir); |
|
|
|
return TEST_SKIP; |
|
} |
|
|
|
#else |
|
|
|
int test__pe_file_parsing(struct test *test __maybe_unused, |
|
int subtest __maybe_unused) |
|
{ |
|
return TEST_SKIP; |
|
} |
|
|
|
#endif
|
|
|