PKG_CHECK_MODULES([BPF], [libbpf])
PKG_CHECK_MODULES([CAP], [libcap])
PKG_CHECK_MODULES([CURL], [libcurl])
+PKG_CHECK_MODULES([DW], [libdw])
PKG_CHECK_MODULES([ELF], [libelf])
PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}-embed],
[], [PKG_CHECK_MODULES([PYTHON_DEVEL], [python-${PYTHON_VERSION}])])
// libelf
#include <gelf.h>
+#include <elfutils/libdwelf.h>
#include <pakfire/ctx.h>
#include <pakfire/file.h>
return pakfire_linter_file_elf(lfile, __pakfire_linter_file_is_stripped, NULL);
}
+static int __pakfire_linter_file_has_debuglink(
+ struct pakfire_linter_file* lfile, Elf* elf, void* data) {
+ const char* name = NULL;
+ GElf_Word crc32;
+
+ // Fetch the debug link
+ name = dwelf_elf_gnu_debuglink(elf, &crc32);
+ if (!name)
+ return pakfire_linter_file_error(lfile, "Missing Debug Link");
+
+ DEBUG(lfile->ctx, "%s has debug link pointing at %s\n", lfile->path, name);
+
+ return 0;
+}
+
+static int pakfire_linter_file_has_debuglink(struct pakfire_linter_file* lfile) {
+ return pakfire_linter_file_elf(lfile, __pakfire_linter_file_has_debuglink, NULL);
+}
+
int pakfire_linter_file_lint(struct pakfire_linter_file* lfile) {
int r = 0;
if (r < 0)
return r;
+ // Check if we have a debug link
+ r = pakfire_linter_file_has_debuglink(lfile);
+ if (r < 0)
+ return r;
+
// Check PIE
r = pakfire_linter_file_check_pie(lfile);
if (r < 0)