mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-06-17 07:21:44 +02:00
(unw_addr_space): If we have atomic-ops library installed, declare
cache_generation as AO_t. (dwarf_getfp): Do casts via "char *" to avoid type-punning warnings. (dwarf_putfp): Likewise. (Logical change 1.266)
This commit is contained in:
parent
34be77c7b2
commit
8e96c357a8
|
@ -39,7 +39,11 @@ struct unw_addr_space
|
||||||
{
|
{
|
||||||
struct unw_accessors acc;
|
struct unw_accessors acc;
|
||||||
unw_caching_policy_t caching_policy;
|
unw_caching_policy_t caching_policy;
|
||||||
|
#ifdef HAVE_ATOMIC_OPS_H
|
||||||
|
AO_t cache_generation;
|
||||||
|
#else
|
||||||
uint32_t cache_generation;
|
uint32_t cache_generation;
|
||||||
|
#endif
|
||||||
unw_word_t dyn_generation; /* see dyn-common.h */
|
unw_word_t dyn_generation; /* see dyn-common.h */
|
||||||
unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */
|
unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */
|
||||||
};
|
};
|
||||||
|
@ -125,6 +129,7 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
|
||||||
static inline int
|
static inline int
|
||||||
dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val)
|
dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val)
|
||||||
{
|
{
|
||||||
|
char *valp = (char *) &val;
|
||||||
unw_word_t addr;
|
unw_word_t addr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -136,17 +141,18 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val)
|
||||||
val, 0, c->as_arg);
|
val, 0, c->as_arg);
|
||||||
|
|
||||||
addr = DWARF_GET_LOC (loc);
|
addr = DWARF_GET_LOC (loc);
|
||||||
if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) &val,
|
if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp,
|
||||||
0, c->as_arg)) < 0)
|
0, c->as_arg)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) &val + 1, 0,
|
return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0,
|
||||||
c->as_arg);
|
c->as_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val)
|
dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val)
|
||||||
{
|
{
|
||||||
|
char *valp = (char *) &val;
|
||||||
unw_word_t addr;
|
unw_word_t addr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -158,11 +164,11 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val)
|
||||||
&val, 1, c->as_arg);
|
&val, 1, c->as_arg);
|
||||||
|
|
||||||
addr = DWARF_GET_LOC (loc);
|
addr = DWARF_GET_LOC (loc);
|
||||||
if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) &val,
|
if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp,
|
||||||
1, c->as_arg)) < 0)
|
1, c->as_arg)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) &val + 1,
|
return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1,
|
||||||
1, c->as_arg);
|
1, c->as_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue