---- a/libdwfl/libdwfl.h
-+++ b/libdwfl/libdwfl.h
-@@ -31,6 +31,27 @@
-
- #include "libdw.h"
- #include <stdio.h>
-+#include <unistd.h>
-+#include <alloca.h>
-+#include <string.h>
-+
-+#ifndef TEMP_FAILURE_RETRY
-+#define TEMP_FAILURE_RETRY(expression) \
-+ (__extension__ \
-+ ({ long int __result; \
-+ do __result = (long int) (expression); \
-+ while (__result == -1L && errno == EINTR); \
-+ __result; }))
-+#endif
-+
-+#ifndef strndupa
-+#define strndupa(s, n) \
-+ (__extension__ ({const char *__in = (s); \
-+ size_t __len = strnlen (__in, (n)) + 1; \
-+ char *__out = (char *) alloca (__len); \
-+ __out[__len-1] = '\0'; \
-+ (char *) memcpy (__out, __in, __len-1);}))
-+#endif
-
- /* Handle for a session using the library. */
- typedef struct Dwfl Dwfl;
---- a/libdwfl/find-debuginfo.c
-+++ b/libdwfl/find-debuginfo.c
-@@ -385,7 +385,7 @@ dwfl_standard_find_debuginfo (Dwfl_Modul
- /* If FILE_NAME is a symlink, the debug file might be associated
- with the symlink target name instead. */
-
-- char *canon = canonicalize_file_name (file_name);
-+ char *canon = realpath (file_name, NULL);
- if (canon != NULL && strcmp (file_name, canon))
- fd = find_debuginfo_in_path (mod, canon,
- debuglink_file, debuglink_crc,
---- a/libdwfl/dwfl_build_id_find_elf.c
-+++ b/libdwfl/dwfl_build_id_find_elf.c
-@@ -94,7 +94,7 @@ __libdwfl_open_by_build_id (Dwfl_Module
- {
- if (*file_name != NULL)
- free (*file_name);
-- *file_name = canonicalize_file_name (name);
-+ *file_name = realpath (name, NULL);
- if (*file_name == NULL)
- {
- *file_name = name;
---- a/libelf/elf_getarsym.c
-+++ b/libelf/elf_getarsym.c
-@@ -297,7 +297,7 @@ elf_getarsym (Elf *elf, size_t *ptr)
- arsym[cnt].as_off = (*u32)[cnt];
-
- arsym[cnt].as_hash = _dl_elf_hash (str_data);
-- str_data = rawmemchr (str_data, '\0') + 1;
-+ str_data = memchr (str_data, '\0', SIZE_MAX) + 1;
- }
-
- /* At the end a special entry. */