diff --git a/main/backtrace.c b/main/backtrace.c
index 394a12c7e676a9f70c8e14cb957ecef6347466e8..50e642eb77b4b823a4213c151e56eb79b7c3c2e6 100644
--- a/main/backtrace.c
+++ b/main/backtrace.c
@@ -127,7 +127,7 @@ static void process_section(bfd *bfdobj, asection *section, void *obj)
 	char *fn;
 	int inlined = 0;
 
-	offset = data->pc - (data->dynamic ? (bfd_vma) data->dli.dli_fbase : 0);
+	offset = data->pc - (data->dynamic ? (bfd_vma)(uintptr_t) data->dli.dli_fbase : 0);
 
 	if (!(bfd_get_section_flags(bfdobj, section) & SEC_ALLOC)) {
 		return;
@@ -156,11 +156,11 @@ static void process_section(bfd *bfdobj, asection *section, void *obj)
 		/* file can possibly be null even with a success result from bfd_find_nearest_line */
 		file = file ? file : "";
 		fn = strrchr(file, '/');
-#define FMT_INLINED "[%s] %s %s:%u %s()"
+#define FMT_INLINED     "[%s] %s %s:%u %s()"
 #define FMT_NOT_INLINED "[%p] %s %s:%u %s()"
 
 		snprintf(data->msg, MSG_BUFF_LEN, inlined ? FMT_INLINED : FMT_NOT_INLINED,
-			inlined ? "inlined" : (char *)data->pc,
+			inlined ? "inlined" : (char *)(uintptr_t) data->pc,
 			data->libname,
 			fn ? fn + 1 : file,
 			line, S_OR(func, "???"));
@@ -197,14 +197,14 @@ struct ast_vector_string *__ast_bt_get_symbols(void **addresses, size_t num_fram
 		struct bfd_data data = {
 			.return_strings = return_strings,
 			.msg = msg,
-			.pc = (bfd_vma)addresses[stackfr],
+			.pc = (bfd_vma)(uintptr_t) addresses[stackfr],
 			.found = 0,
 			.dynamic = 0,
 		};
 
 		msg[0] = '\0';
 
-		if (!dladdr((void *)data.pc, &data.dli)) {
+		if (!dladdr((void *)(uintptr_t) data.pc, &data.dli)) {
 			continue;
 		}
 		data.libname = strrchr(data.dli.dli_fname, '/');