[Asterisk-code-review] backtrace.c: Fix casting pointer to/from integral type. (asterisk[13])

Richard Mudgett asteriskteam at digium.com
Wed Dec 19 12:50:36 CST 2018


Richard Mudgett has uploaded this change for review. ( https://gerrit.asterisk.org/10823


Change subject: backtrace.c: Fix casting pointer to/from integral type.
......................................................................

backtrace.c: Fix casting pointer to/from integral type.

The backtrace library bfd.h include file does not get the sizes of
pointers and ints right on some platforms.  On my old test box the size
of bfd_vma is 8 while the size of a pointer is 4.  gcc on the box
complains of the integer casting to/from pointers size mismatch.

* uintptr_t to the rescue by doing an appropriate two stage cast.

Change-Id: Icb2621583f50c8728de08a3c824d95fe53cc45d0
---
M main/backtrace.c
1 file changed, 5 insertions(+), 5 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/23/10823/1

diff --git a/main/backtrace.c b/main/backtrace.c
index 394a12c..50e642e 100644
--- a/main/backtrace.c
+++ b/main/backtrace.c
@@ -127,7 +127,7 @@
 	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 @@
 		/* 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 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, '/');

-- 
To view, visit https://gerrit.asterisk.org/10823
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb2621583f50c8728de08a3c824d95fe53cc45d0
Gerrit-Change-Number: 10823
Gerrit-PatchSet: 1
Gerrit-Owner: Richard Mudgett <rmudgett at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20181219/3254c633/attachment.html>


More information about the asterisk-code-review mailing list