diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-18 18:46:24 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-18 18:55:52 +0200 |
commit | 1451a958347f5e683c63466cd7dfb893c1651f19 (patch) | |
tree | 50c467fd59805736a73e431419785a682ba66330 /kern | |
parent | 661a0a5c59714b95633a866f717d8072c67f7ac7 (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.
Diffstat (limited to 'kern')
-rw-r--r-- | kern/lock.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/kern/lock.c b/kern/lock.c index fb5e344..3c74fec 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; } |