summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-18 18:46:24 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-18 18:55:52 +0200
commit1451a958347f5e683c63466cd7dfb893c1651f19 (patch)
tree50c467fd59805736a73e431419785a682ba66330
parent661a0a5c59714b95633a866f717d8072c67f7ac7 (diff)
kern/lock: use compiler built-in functions to get return address
* kern/lock.c (struct simple_locks_info): Fix type of `ra'. (simple_lock, simple_lock_try): Use compiler built-in functions to get return address.
-rw-r--r--kern/lock.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/kern/lock.c b/kern/lock.c
index fb5e3441..3c74fec8 100644
--- a/kern/lock.c
+++ b/kern/lock.c
@@ -133,7 +133,7 @@ unsigned int simple_locks_taken = 0;
struct simple_locks_info {
simple_lock_t l;
- unsigned int ra;
+ void *ra;
} simple_locks_info[NSLINFO];
void check_simple_locks(void)
@@ -161,10 +161,8 @@ void simple_lock(
info = &simple_locks_info[simple_locks_taken++];
info->l = l;
- /* XXX we want our return address, if possible */
-#if defined(__i386__)
- info->ra = *((unsigned long *)&l - 1);
-#endif /* i386 */
+ info->ra =
+ __builtin_extract_return_addr (__builtin_return_address (0));
}
boolean_t simple_lock_try(
@@ -179,10 +177,8 @@ boolean_t simple_lock_try(
info = &simple_locks_info[simple_locks_taken++];
info->l = l;
- /* XXX we want our return address, if possible */
-#if defined(__i386__)
- info->ra = *((unsigned long *)&l - 1);
-#endif /* i386 */
+ info->ra =
+ __builtin_extract_return_addr (__builtin_return_address (0));
return TRUE;
}