This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
PATCH: Add uintptr_t cast to GET_PC/GET_FRAME/GET_STACK
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Wed, 16 May 2012 06:02:59 -0700
- Subject: PATCH: Add uintptr_t cast to GET_PC/GET_FRAME/GET_STACK
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
This patch adds uintptr_t cast to GET_PC/GET_FRAME/GET_STACK since
x32 has 64-bit register and 32-bit address. Tested on Linux/x86-64.
OK to install?
Thanks.
H.J.
* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h: Include
<stdint.h>.
(GET_PC): Cast to uintptr_t first.
(GET_FRAME): Likewise.
(GET_STACK): Likewise.
diff --git a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
index 1c4b892..f122702 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -15,11 +15,16 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#include <stdint.h>
+
#define SIGCONTEXT siginfo_t *_si, struct ucontext *
#define SIGCONTEXT_EXTRA_ARGS _si,
-#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.gregs[REG_RIP])
-#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.gregs[REG_RBP])
-#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.gregs[REG_RSP])
+#define GET_PC(ctx) \
+ ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RIP])
+#define GET_FRAME(ctx) \
+ ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RBP])
+#define GET_STACK(ctx) \
+ ((void *) (uintptr_t) (ctx)->uc_mcontext.gregs[REG_RSP])
#define CALL_SIGHANDLER(handler, signo, ctx) \
(handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))