diff options
author | Arun Sharma <arun@sharma-home.net> | 2014-09-20 09:03:10 -0700 |
---|---|---|
committer | Arun Sharma <arun@sharma-home.net> | 2014-09-27 09:47:23 -0700 |
commit | 781d5d526361504143e4b19c3e911fc71fca95ba (patch) | |
tree | cb3c6089e652063c4028add3a989a8539806db77 /src/x86 | |
parent | 06e608d0437fe7c33469236622457296d8bfe7a4 (diff) | |
download | libunwind-781d5d526361504143e4b19c3e911fc71fca95ba.tar.gz |
One time whitespace fixup.
for f in $(find src include -name '*.[ch]'); do
expand -t 8 $f > $tmp; mv $tmp $f;
done
Diffstat (limited to 'src/x86')
-rw-r--r-- | src/x86/Gcreate_addr_space.c | 2 | ||||
-rw-r--r-- | src/x86/Gget_proc_info.c | 6 | ||||
-rw-r--r-- | src/x86/Gget_save_loc.c | 4 | ||||
-rw-r--r-- | src/x86/Gglobal.c | 4 | ||||
-rw-r--r-- | src/x86/Ginit.c | 22 | ||||
-rw-r--r-- | src/x86/Ginit_local.c | 2 | ||||
-rw-r--r-- | src/x86/Ginit_remote.c | 2 | ||||
-rw-r--r-- | src/x86/Gos-freebsd.c | 54 | ||||
-rw-r--r-- | src/x86/Gos-linux.c | 34 | ||||
-rw-r--r-- | src/x86/Gregs.c | 30 | ||||
-rw-r--r-- | src/x86/Gresume.c | 24 | ||||
-rw-r--r-- | src/x86/Gstep.c | 86 | ||||
-rw-r--r-- | src/x86/init.h | 4 | ||||
-rw-r--r-- | src/x86/is_fpreg.c | 6 | ||||
-rw-r--r-- | src/x86/offsets.h | 232 | ||||
-rw-r--r-- | src/x86/unwind_i.h | 42 |
16 files changed, 277 insertions, 277 deletions
diff --git a/src/x86/Gcreate_addr_space.c b/src/x86/Gcreate_addr_space.c index 5b07940d..45fec6da 100644 --- a/src/x86/Gcreate_addr_space.c +++ b/src/x86/Gcreate_addr_space.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2003 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. diff --git a/src/x86/Gget_proc_info.c b/src/x86/Gget_proc_info.c index a5334830..45b4cd5b 100644 --- a/src/x86/Gget_proc_info.c +++ b/src/x86/Gget_proc_info.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -33,8 +33,8 @@ unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) if (dwarf_make_proc_info (&c->dwarf) < 0) { /* On x86, it's relatively common to be missing DWARF unwind - info. We don't want to fail in that case, because the - frame-chain still would let us do a backtrace at least. */ + info. We don't want to fail in that case, because the + frame-chain still would let us do a backtrace at least. */ memset (pi, 0, sizeof (*pi)); pi->start_ip = c->dwarf.ip; pi->end_ip = c->dwarf.ip + 1; diff --git a/src/x86/Gget_save_loc.c b/src/x86/Gget_save_loc.c index e8cc79ee..d440f9ec 100644 --- a/src/x86/Gget_save_loc.c +++ b/src/x86/Gget_save_loc.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2004 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -31,7 +31,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) struct cursor *c = (struct cursor *) cursor; dwarf_loc_t loc; - loc = DWARF_NULL_LOC; /* default to "not saved" */ + loc = DWARF_NULL_LOC; /* default to "not saved" */ switch (reg) { diff --git a/src/x86/Gglobal.c b/src/x86/Gglobal.c index 033a788b..132b8249 100644 --- a/src/x86/Gglobal.c +++ b/src/x86/Gglobal.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -60,7 +60,7 @@ tdep_init (void) #ifndef UNW_REMOTE_ONLY x86_local_addr_space_init (); #endif - tdep_init_done = 1; /* signal that we're initialized... */ + tdep_init_done = 1; /* signal that we're initialized... */ } out: lock_release (&x86_lock, saved_mask); diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c index b8890a3c..b05a08ed 100644 --- a/src/x86/Ginit.c +++ b/src/x86/Ginit.c @@ -1,7 +1,7 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2002 Hewlett-Packard Co Copyright (C) 2007 David Mosberger-Tang - Contributed by David Mosberger-Tang <dmosberger@gmail.com> + Contributed by David Mosberger-Tang <dmosberger@gmail.com> This file is part of libunwind. @@ -69,14 +69,14 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) static int get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - void *arg) + void *arg) { *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; return 0; } #define PAGE_SIZE 4096 -#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) +#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) /* Cache of already validated addresses */ #define NLGA 4 @@ -105,7 +105,7 @@ validate_mem (unw_word_t addr) for (i = 0; i < NLGA; i++) { if (last_good_addr[i] && (addr == last_good_addr[i])) - return 0; + return 0; } #ifdef HAVE_MINCORE @@ -134,7 +134,7 @@ validate_mem (unw_word_t addr) static int access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - void *arg) + void *arg) { if (write) { @@ -155,7 +155,7 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, static int access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - void *arg) + void *arg) { unw_word_t *addr; ucontext_t *uc = ((struct cursor *)arg)->uc; @@ -185,7 +185,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, static int access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - int write, void *arg) + int write, void *arg) { ucontext_t *uc = ((struct cursor *)arg)->uc; unw_fpreg_t *addr; @@ -199,14 +199,14 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, if (write) { Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), - ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); + ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); *(unw_fpreg_t *) addr = *val; } else { *val = *(unw_fpreg_t *) addr; Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), - ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); + ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); } return 0; @@ -218,8 +218,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, static int get_static_proc_name (unw_addr_space_t as, unw_word_t ip, - char *buf, size_t buf_len, unw_word_t *offp, - void *arg) + char *buf, size_t buf_len, unw_word_t *offp, + void *arg) { return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); } diff --git a/src/x86/Ginit_local.c b/src/x86/Ginit_local.c index 412663be..02fb994e 100644 --- a/src/x86/Ginit_local.c +++ b/src/x86/Ginit_local.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. diff --git a/src/x86/Ginit_remote.c b/src/x86/Ginit_remote.c index c8899054..16b63954 100644 --- a/src/x86/Ginit_remote.c +++ b/src/x86/Ginit_remote.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2003 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. diff --git a/src/x86/Gos-freebsd.c b/src/x86/Gos-freebsd.c index 284148c2..cf05f078 100644 --- a/src/x86/Gos-freebsd.c +++ b/src/x86/Gos-freebsd.c @@ -51,21 +51,21 @@ unw_is_signal_frame (unw_cursor_t *cursor) /* Check if EIP points at sigreturn() sequence. It can be: sigcode+4: from amd64 freebsd32 environment -8d 44 24 20 lea 0x20(%esp),%eax -50 push %eax -b8 a1 01 00 00 mov $0x1a1,%eax -50 push %eax -cd 80 int $0x80 +8d 44 24 20 lea 0x20(%esp),%eax +50 push %eax +b8 a1 01 00 00 mov $0x1a1,%eax +50 push %eax +cd 80 int $0x80 sigcode+4: from real i386 -8d 44 24 20 lea 0x20(%esp),%eax -50 push %eax -f7 40 54 00 02 00 testl $0x20000,0x54(%eax) -75 03 jne sigcode+21 -8e 68 14 mov 0x14(%eax),%gs -b8 a1 01 00 00 mov $0x1a1,%eax -50 push %eax -cd 80 int $0x80 +8d 44 24 20 lea 0x20(%esp),%eax +50 push %eax +f7 40 54 00 02 00 testl $0x20000,0x54(%eax) +75 03 jne sigcode+21 +8e 68 14 mov 0x14(%eax),%gs +b8 a1 01 00 00 mov $0x1a1,%eax +50 push %eax +cd 80 int $0x80 freebsd4_sigcode+4: XXX @@ -85,10 +85,10 @@ XXX ret = X86_SCF_FREEBSD_SIGFRAME; else { if ((*a->access_mem) (as, ip + 16, &w4, 0, arg) < 0 || - (*a->access_mem) (as, ip + 20, &w5, 0, arg) < 0) + (*a->access_mem) (as, ip + 20, &w5, 0, arg) < 0) return ret; if (w0 == 0x2024448d && w1 == 0x5440f750 && w2 == 0x75000200 && - w3 == 0x14688e03 && w4 == 0x0001a1b8 && w5 == 0x80cd5000) + w3 == 0x14688e03 && w4 == 0x0001a1b8 && w5 == 0x80cd5000) ret = X86_SCF_FREEBSD_SIGFRAME; } @@ -120,8 +120,8 @@ unw_handle_signal_frame (unw_cursor_t *cursor) ret = dwarf_get (&c->dwarf, esp_loc, &c->dwarf.cfa); if (ret < 0) { - Debug (2, "returning 0\n"); - return 0; + Debug (2, "returning 0\n"); + return 0; } c->dwarf.loc[EIP] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EIP_OFF, 0); @@ -290,20 +290,20 @@ x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg) if (is_fpstate) { if ((ret = dwarf_get (&c->dwarf, - DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPSTATE_OFF), - &fpstate)) < 0) - return DWARF_NULL_LOC; + DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPSTATE_OFF), + &fpstate)) < 0) + return DWARF_NULL_LOC; if (fpstate == FREEBSD_UC_MCONTEXT_FPOWNED_NONE) - return DWARF_NULL_LOC; + return DWARF_NULL_LOC; if ((ret = dwarf_get (&c->dwarf, - DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPFORMAT_OFF), - &fpformat)) < 0) - return DWARF_NULL_LOC; + DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPFORMAT_OFF), + &fpformat)) < 0) + return DWARF_NULL_LOC; if (fpformat == FREEBSD_UC_MCONTEXT_FPFMT_NODEV || - (is_xmmstate && fpformat != FREEBSD_UC_MCONTEXT_FPFMT_XMM)) - return DWARF_NULL_LOC; + (is_xmmstate && fpformat != FREEBSD_UC_MCONTEXT_FPFMT_XMM)) + return DWARF_NULL_LOC; if (is_xmmstate) - off = xmm_off; + off = xmm_off; } return DWARF_MEM_LOC (c, addr + off); diff --git a/src/x86/Gos-linux.c b/src/x86/Gos-linux.c index 8bc24a8c..17aebc29 100644 --- a/src/x86/Gos-linux.c +++ b/src/x86/Gos-linux.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2002-2004 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -43,9 +43,9 @@ unw_is_signal_frame (unw_cursor_t *cursor) /* Check if EIP points at sigreturn() sequence. On Linux, this is: __restore: - 0x58 pop %eax - 0xb8 0x77 0x00 0x00 0x00 movl 0x77,%eax - 0xcd 0x80 int 0x80 + 0x58 pop %eax + 0xb8 0x77 0x00 0x00 0x00 movl 0x77,%eax + 0xcd 0x80 int 0x80 without SA_SIGINFO, and @@ -62,7 +62,7 @@ unw_is_signal_frame (unw_cursor_t *cursor) ret = 0; else ret = ((w0 == 0x0077b858 && w1 == 0x80cd0000) - || (w0 == 0x0000adb8 && (w1 & 0xffffff) == 0x80cd00)); + || (w0 == 0x0000adb8 && (w1 & 0xffffff) == 0x80cd00)); Debug (16, "returning %d\n", ret); return ret; } @@ -87,7 +87,7 @@ unw_handle_signal_frame (unw_cursor_t *cursor) siginfo_ptr_loc = DWARF_LOC (siginfo_ptr_addr, 0); sigcontext_ptr_loc = DWARF_LOC (sigcontext_ptr_addr, 0); ret = (dwarf_get (&c->dwarf, siginfo_ptr_loc, &siginfo_ptr) - | dwarf_get (&c->dwarf, sigcontext_ptr_loc, &sigcontext_ptr)); + | dwarf_get (&c->dwarf, sigcontext_ptr_loc, &sigcontext_ptr)); if (ret < 0) { Debug (2, "returning 0\n"); @@ -105,10 +105,10 @@ unw_handle_signal_frame (unw_cursor_t *cursor) else { /* If SA_SIGINFO were not specified, we actually read - various segment pointers instead. We believe that at - least fs and _fsh are always zero for linux, so it is - not just unlikely, but impossible that we would end - up here. */ + various segment pointers instead. We believe that at + least fs and _fsh are always zero for linux, so it is + not just unlikely, but impossible that we would end + up here. */ c->sigcontext_format = X86_SCF_LINUX_RT_SIGFRAME; c->sigcontext_addr = sigcontext_ptr; sc_addr = sigcontext_ptr + LINUX_UC_MCONTEXT_OFF; @@ -180,8 +180,8 @@ x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg) case UNW_X86_SS: off = LINUX_SC_SS_OFF; break; /* The following is probably not correct for all possible cases. - Somebody who understands this better should review this for - correctness. */ + Somebody who understands this better should review this for + correctness. */ case UNW_X86_FCW: is_fpstate = 1; off = LINUX_FPSTATE_CW_OFF; break; case UNW_X86_FSW: is_fpstate = 1; off = LINUX_FPSTATE_SW_OFF; break; @@ -233,13 +233,13 @@ x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg) if (is_fpstate) { if ((ret = dwarf_get (&c->dwarf, - DWARF_MEM_LOC (&c->dwarf, - addr + LINUX_SC_FPSTATE_OFF), - &fpstate_addr)) < 0) - return DWARF_NULL_LOC; + DWARF_MEM_LOC (&c->dwarf, + addr + LINUX_SC_FPSTATE_OFF), + &fpstate_addr)) < 0) + return DWARF_NULL_LOC; if (!fpstate_addr) - return DWARF_NULL_LOC; + return DWARF_NULL_LOC; return DWARF_MEM_LOC (c, fpstate_addr + off); } diff --git a/src/x86/Gregs.c b/src/x86/Gregs.c index 05bc1a30..4a959261 100644 --- a/src/x86/Gregs.c +++ b/src/x86/Gregs.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -37,7 +37,7 @@ x86_scratch_loc (struct cursor *c, unw_regnum_t reg) HIDDEN int tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - int write) + int write) { dwarf_loc_t loc = DWARF_NULL_LOC; unsigned int mask; @@ -48,14 +48,14 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, case UNW_X86_EIP: if (write) - c->dwarf.ip = *valp; /* also update the EIP cache */ + c->dwarf.ip = *valp; /* also update the EIP cache */ loc = c->dwarf.loc[EIP]; break; case UNW_X86_CFA: case UNW_X86_ESP: if (write) - return -UNW_EREADONLYREG; + return -UNW_EREADONLYREG; *valp = c->dwarf.cfa; return 0; @@ -64,18 +64,18 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, arg_num = reg - UNW_X86_EAX; mask = (1 << arg_num); if (write) - { - c->dwarf.eh_args[arg_num] = *valp; - c->dwarf.eh_valid_mask |= mask; - return 0; - } + { + c->dwarf.eh_args[arg_num] = *valp; + c->dwarf.eh_valid_mask |= mask; + return 0; + } else if ((c->dwarf.eh_valid_mask & mask) != 0) - { - *valp = c->dwarf.eh_args[arg_num]; - return 0; - } + { + *valp = c->dwarf.eh_args[arg_num]; + return 0; + } else - loc = c->dwarf.loc[(reg == UNW_X86_EAX) ? EAX : EDX]; + loc = c->dwarf.loc[(reg == UNW_X86_EAX) ? EAX : EDX]; break; case UNW_X86_ECX: loc = c->dwarf.loc[ECX]; break; @@ -120,7 +120,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, HIDDEN int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, - int write) + int write) { struct dwarf_loc loc = DWARF_NULL_LOC; diff --git a/src/x86/Gresume.c b/src/x86/Gresume.c index c39c5884..cb3fb31e 100644 --- a/src/x86/Gresume.c +++ b/src/x86/Gresume.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -35,9 +35,9 @@ static inline int establish_machine_state (struct cursor *c) { int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, - int write, void *); + int write, void *); int (*access_fpreg) (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, - int write, void *); + int write, void *); unw_addr_space_t as = c->dwarf.as; void *arg = c->dwarf.as_arg; unw_fpreg_t fpval; @@ -53,15 +53,15 @@ establish_machine_state (struct cursor *c) { Debug (16, "copying %s %d\n", unw_regname (reg), reg); if (unw_is_fpreg (reg)) - { - if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) - (*access_fpreg) (as, reg, &fpval, 1, arg); - } + { + if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) + (*access_fpreg) (as, reg, &fpval, 1, arg); + } else - { - if (tdep_access_reg (c, reg, &val, 0) >= 0) - (*access_reg) (as, reg, &val, 1, arg); - } + { + if (tdep_access_reg (c, reg, &val, 0) >= 0) + (*access_reg) (as, reg, &val, 1, arg); + } } return 0; } @@ -78,5 +78,5 @@ unw_resume (unw_cursor_t *cursor) return ret; return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, - c->dwarf.as_arg); + c->dwarf.as_arg); } diff --git a/src/x86/Gstep.c b/src/x86/Gstep.c index fb1d6a26..10e2cbc8 100644 --- a/src/x86/Gstep.c +++ b/src/x86/Gstep.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2002-2004 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -46,7 +46,7 @@ unw_step (unw_cursor_t *cursor) if (unlikely (ret < 0)) { /* DWARF failed, let's see if we can follow the frame-chain - or skip over the signal trampoline. */ + or skip over the signal trampoline. */ struct dwarf_loc ebp_loc, eip_loc; /* We could get here because of missing/bad unwind information. @@ -58,57 +58,57 @@ unw_step (unw_cursor_t *cursor) if (unw_is_signal_frame (cursor)) { ret = unw_handle_signal_frame(cursor); - if (ret < 0) - { - Debug (2, "returning 0\n"); - return 0; - } + if (ret < 0) + { + Debug (2, "returning 0\n"); + return 0; + } } else - { - ret = dwarf_get (&c->dwarf, c->dwarf.loc[EBP], &c->dwarf.cfa); - if (ret < 0) - { - Debug (2, "returning %d\n", ret); - return ret; - } - - Debug (13, "[EBP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EBP]), - c->dwarf.cfa); - - ebp_loc = DWARF_LOC (c->dwarf.cfa, 0); - eip_loc = DWARF_LOC (c->dwarf.cfa + 4, 0); - c->dwarf.cfa += 8; - - /* Mark all registers unsaved, since we don't know where - they are saved (if at all), except for the EBP and - EIP. */ - for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) - c->dwarf.loc[i] = DWARF_NULL_LOC; + { + ret = dwarf_get (&c->dwarf, c->dwarf.loc[EBP], &c->dwarf.cfa); + if (ret < 0) + { + Debug (2, "returning %d\n", ret); + return ret; + } + + Debug (13, "[EBP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EBP]), + c->dwarf.cfa); + + ebp_loc = DWARF_LOC (c->dwarf.cfa, 0); + eip_loc = DWARF_LOC (c->dwarf.cfa + 4, 0); + c->dwarf.cfa += 8; + + /* Mark all registers unsaved, since we don't know where + they are saved (if at all), except for the EBP and + EIP. */ + for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) + c->dwarf.loc[i] = DWARF_NULL_LOC; c->dwarf.loc[EBP] = ebp_loc; c->dwarf.loc[EIP] = eip_loc; c->dwarf.use_prev_instr = 1; - } + } c->dwarf.ret_addr_column = EIP; if (!DWARF_IS_NULL_LOC (c->dwarf.loc[EBP])) - { - ret = dwarf_get (&c->dwarf, c->dwarf.loc[EIP], &c->dwarf.ip); - if (ret < 0) - { - Debug (13, "dwarf_get([EIP=0x%x]) failed\n", DWARF_GET_LOC (c->dwarf.loc[EIP])); - Debug (2, "returning %d\n", ret); - return ret; - } - else - { - Debug (13, "[EIP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EIP]), - c->dwarf.ip); - } - } + { + ret = dwarf_get (&c->dwarf, c->dwarf.loc[EIP], &c->dwarf.ip); + if (ret < 0) + { + Debug (13, "dwarf_get([EIP=0x%x]) failed\n", DWARF_GET_LOC (c->dwarf.loc[EIP])); + Debug (2, "returning %d\n", ret); + return ret; + } + else + { + Debug (13, "[EIP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EIP]), + c->dwarf.ip); + } + } else - c->dwarf.ip = 0; + c->dwarf.ip = 0; } ret = (c->dwarf.ip == 0) ? 0 : 1; Debug (2, "returning %d\n", ret); diff --git a/src/x86/init.h b/src/x86/init.h index f35387d4..027aedc3 100644 --- a/src/x86/init.h +++ b/src/x86/init.h @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2002 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -50,7 +50,7 @@ common_init (struct cursor *c, unsigned use_prev_instr) return ret; ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_X86_ESP), - &c->dwarf.cfa); + &c->dwarf.cfa); if (ret < 0) return ret; diff --git a/src/x86/is_fpreg.c b/src/x86/is_fpreg.c index 8f1536d1..addf9bca 100644 --- a/src/x86/is_fpreg.c +++ b/src/x86/is_fpreg.c @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -29,6 +29,6 @@ PROTECTED int unw_is_fpreg (int regnum) { return ((regnum >= UNW_X86_ST0 && regnum <= UNW_X86_ST7) - || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi) - || (regnum >= UNW_X86_XMM0 && regnum <= UNW_X86_XMM7)); + || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi) + || (regnum >= UNW_X86_XMM0 && regnum <= UNW_X86_XMM7)); } diff --git a/src/x86/offsets.h b/src/x86/offsets.h index e8a255cd..e5aec7f5 100644 --- a/src/x86/offsets.h +++ b/src/x86/offsets.h @@ -4,137 +4,137 @@ /* Offsets for x86 Linux "ucontext_t": */ -#define LINUX_UC_FLAGS_OFF 0x00 -#define LINUX_UC_LINK_OFF 0x04 -#define LINUX_UC_STACK_OFF 0x08 -#define LINUX_UC_MCONTEXT_OFF 0x14 -#define LINUX_UC_SIGMASK_OFF 0x6c -#define LINUX_UC_FPREGS_MEM_OFF 0xec +#define LINUX_UC_FLAGS_OFF 0x00 +#define LINUX_UC_LINK_OFF 0x04 +#define LINUX_UC_STACK_OFF 0x08 +#define LINUX_UC_MCONTEXT_OFF 0x14 +#define LINUX_UC_SIGMASK_OFF 0x6c +#define LINUX_UC_FPREGS_MEM_OFF 0xec /* The struct sigcontext is located at an offset of 4 from the stack pointer in the signal frame. */ /* Offsets for x86 Linux "struct sigcontext": */ -#define LINUX_SC_GS_OFF 0x00 -#define LINUX_SC_GSH_OFF 0x02 -#define LINUX_SC_FS_OFF 0x04 -#define LINUX_SC_FSH_OFF 0x06 -#define LINUX_SC_ES_OFF 0x08 -#define LINUX_SC_ESH_OFF 0x0a -#define LINUX_SC_DS_OFF 0x0c -#define LINUX_SC_DSH_OFF 0x0e -#define LINUX_SC_EDI_OFF 0x10 -#define LINUX_SC_ESI_OFF 0x14 -#define LINUX_SC_EBP_OFF 0x18 -#define LINUX_SC_ESP_OFF 0x1c -#define LINUX_SC_EBX_OFF 0x20 -#define LINUX_SC_EDX_OFF 0x24 -#define LINUX_SC_ECX_OFF 0x28 -#define LINUX_SC_EAX_OFF 0x2c -#define LINUX_SC_TRAPNO_OFF 0x30 -#define LINUX_SC_ERR_OFF 0x34 -#define LINUX_SC_EIP_OFF 0x38 -#define LINUX_SC_CS_OFF 0x3c -#define LINUX_SC_CSH_OFF 0x3e -#define LINUX_SC_EFLAGS_OFF 0x40 -#define LINUX_SC_ESP_AT_SIGNAL_OFF 0x44 -#define LINUX_SC_SS_OFF 0x48 -#define LINUX_SC_SSH_OFF 0x4a -#define LINUX_SC_FPSTATE_OFF 0x4c -#define LINUX_SC_OLDMASK_OFF 0x50 -#define LINUX_SC_CR2_OFF 0x54 +#define LINUX_SC_GS_OFF 0x00 +#define LINUX_SC_GSH_OFF 0x02 +#define LINUX_SC_FS_OFF 0x04 +#define LINUX_SC_FSH_OFF 0x06 +#define LINUX_SC_ES_OFF 0x08 +#define LINUX_SC_ESH_OFF 0x0a +#define LINUX_SC_DS_OFF 0x0c +#define LINUX_SC_DSH_OFF 0x0e +#define LINUX_SC_EDI_OFF 0x10 +#define LINUX_SC_ESI_OFF 0x14 +#define LINUX_SC_EBP_OFF 0x18 +#define LINUX_SC_ESP_OFF 0x1c +#define LINUX_SC_EBX_OFF 0x20 +#define LINUX_SC_EDX_OFF 0x24 +#define LINUX_SC_ECX_OFF 0x28 +#define LINUX_SC_EAX_OFF 0x2c +#define LINUX_SC_TRAPNO_OFF 0x30 +#define LINUX_SC_ERR_OFF 0x34 +#define LINUX_SC_EIP_OFF 0x38 +#define LINUX_SC_CS_OFF 0x3c +#define LINUX_SC_CSH_OFF 0x3e +#define LINUX_SC_EFLAGS_OFF 0x40 +#define LINUX_SC_ESP_AT_SIGNAL_OFF 0x44 +#define LINUX_SC_SS_OFF 0x48 +#define LINUX_SC_SSH_OFF 0x4a +#define LINUX_SC_FPSTATE_OFF 0x4c +#define LINUX_SC_OLDMASK_OFF 0x50 +#define LINUX_SC_CR2_OFF 0x54 /* Offsets for x86 Linux "struct _fpstate": */ -#define LINUX_FPSTATE_CW_OFF 0x000 -#define LINUX_FPSTATE_SW_OFF 0x004 -#define LINUX_FPSTATE_TAG_OFF 0x008 -#define LINUX_FPSTATE_IPOFF_OFF 0x00c -#define LINUX_FPSTATE_CSSEL_OFF 0x010 -#define LINUX_FPSTATE_DATAOFF_OFF 0x014 -#define LINUX_FPSTATE_DATASEL_OFF 0x018 -#define LINUX_FPSTATE_ST0_OFF 0x01c -#define LINUX_FPSTATE_ST1_OFF 0x026 -#define LINUX_FPSTATE_ST2_OFF 0x030 -#define LINUX_FPSTATE_ST3_OFF 0x03a -#define LINUX_FPSTATE_ST4_OFF 0x044 -#define LINUX_FPSTATE_ST5_OFF 0x04e -#define LINUX_FPSTATE_ST6_OFF 0x058 -#define LINUX_FPSTATE_ST7_OFF 0x062 -#define LINUX_FPSTATE_STATUS_OFF 0x06c -#define LINUX_FPSTATE_MAGIC_OFF 0x06e -#define LINUX_FPSTATE_FXSR_ENV_OFF 0x070 -#define LINUX_FPSTATE_MXCSR_OFF 0x088 -#define LINUX_FPSTATE_FXSR_ST0_OFF 0x090 -#define LINUX_FPSTATE_FXSR_ST1_OFF 0x0a0 -#define LINUX_FPSTATE_FXSR_ST2_OFF 0x0b0 -#define LINUX_FPSTATE_FXSR_ST3_OFF 0x0c0 -#define LINUX_FPSTATE_FXSR_ST4_OFF 0x0d0 -#define LINUX_FPSTATE_FXSR_ST5_OFF 0x0e0 -#define LINUX_FPSTATE_FXSR_ST6_OFF 0x0f0 -#define LINUX_FPSTATE_FXSR_ST7_OFF 0x100 -#define LINUX_FPSTATE_XMM0_OFF 0x110 -#define LINUX_FPSTATE_XMM1_OFF 0x120 -#define LINUX_FPSTATE_XMM2_OFF 0x130 -#define LINUX_FPSTATE_XMM3_OFF 0x140 -#define LINUX_FPSTATE_XMM4_OFF 0x150 -#define LINUX_FPSTATE_XMM5_OFF 0x160 -#define LINUX_FPSTATE_XMM6_OFF 0x170 -#define LINUX_FPSTATE_XMM7_OFF 0x180 +#define LINUX_FPSTATE_CW_OFF 0x000 +#define LINUX_FPSTATE_SW_OFF 0x004 +#define LINUX_FPSTATE_TAG_OFF 0x008 +#define LINUX_FPSTATE_IPOFF_OFF 0x00c +#define LINUX_FPSTATE_CSSEL_OFF 0x010 +#define LINUX_FPSTATE_DATAOFF_OFF 0x014 +#define LINUX_FPSTATE_DATASEL_OFF 0x018 +#define LINUX_FPSTATE_ST0_OFF 0x01c +#define LINUX_FPSTATE_ST1_OFF 0x026 +#define LINUX_FPSTATE_ST2_OFF 0x030 +#define LINUX_FPSTATE_ST3_OFF 0x03a +#define LINUX_FPSTATE_ST4_OFF 0x044 +#define LINUX_FPSTATE_ST5_OFF 0x04e +#define LINUX_FPSTATE_ST6_OFF 0x058 +#define LINUX_FPSTATE_ST7_OFF 0x062 +#define LINUX_FPSTATE_STATUS_OFF 0x06c +#define LINUX_FPSTATE_MAGIC_OFF 0x06e +#define LINUX_FPSTATE_FXSR_ENV_OFF 0x070 +#define LINUX_FPSTATE_MXCSR_OFF 0x088 +#define LINUX_FPSTATE_FXSR_ST0_OFF 0x090 +#define LINUX_FPSTATE_FXSR_ST1_OFF 0x0a0 +#define LINUX_FPSTATE_FXSR_ST2_OFF 0x0b0 +#define LINUX_FPSTATE_FXSR_ST3_OFF 0x0c0 +#define LINUX_FPSTATE_FXSR_ST4_OFF 0x0d0 +#define LINUX_FPSTATE_FXSR_ST5_OFF 0x0e0 +#define LINUX_FPSTATE_FXSR_ST6_OFF 0x0f0 +#define LINUX_FPSTATE_FXSR_ST7_OFF 0x100 +#define LINUX_FPSTATE_XMM0_OFF 0x110 +#define LINUX_FPSTATE_XMM1_OFF 0x120 +#define LINUX_FPSTATE_XMM2_OFF 0x130 +#define LINUX_FPSTATE_XMM3_OFF 0x140 +#define LINUX_FPSTATE_XMM4_OFF 0x150 +#define LINUX_FPSTATE_XMM5_OFF 0x160 +#define LINUX_FPSTATE_XMM6_OFF 0x170 +#define LINUX_FPSTATE_XMM7_OFF 0x180 /* FreeBSD-specific definitions: */ -#define FREEBSD_SC_UCONTEXT_OFF 0x20 -#define FREEBSD_UC_MCONTEXT_OFF 0x10 +#define FREEBSD_SC_UCONTEXT_OFF 0x20 +#define FREEBSD_UC_MCONTEXT_OFF 0x10 -#define FREEBSD_UC_MCONTEXT_GS_OFF 0x14 -#define FREEBSD_UC_MCONTEXT_FS_OFF 0x18 -#define FREEBSD_UC_MCONTEXT_ES_OFF 0x1c -#define FREEBSD_UC_MCONTEXT_DS_OFF 0x20 -#define FREEBSD_UC_MCONTEXT_EDI_OFF 0x24 -#define FREEBSD_UC_MCONTEXT_ESI_OFF 0x28 -#define FREEBSD_UC_MCONTEXT_EBP_OFF 0x2c -#define FREEBSD_UC_MCONTEXT_EBX_OFF 0x34 -#define FREEBSD_UC_MCONTEXT_EDX_OFF 0x38 -#define FREEBSD_UC_MCONTEXT_ECX_OFF 0x3c -#define FREEBSD_UC_MCONTEXT_EAX_OFF 0x40 -#define FREEBSD_UC_MCONTEXT_TRAPNO_OFF 0x44 -#define FREEBSD_UC_MCONTEXT_EIP_OFF 0x4c -#define FREEBSD_UC_MCONTEXT_ESP_OFF 0x58 -#define FREEBSD_UC_MCONTEXT_CS_OFF 0x50 -#define FREEBSD_UC_MCONTEXT_EFLAGS_OFF 0x54 -#define FREEBSD_UC_MCONTEXT_SS_OFF 0x5c -#define FREEBSD_UC_MCONTEXT_MC_LEN_OFF 0x60 +#define FREEBSD_UC_MCONTEXT_GS_OFF 0x14 +#define FREEBSD_UC_MCONTEXT_FS_OFF 0x18 +#define FREEBSD_UC_MCONTEXT_ES_OFF 0x1c +#define FREEBSD_UC_MCONTEXT_DS_OFF 0x20 +#define FREEBSD_UC_MCONTEXT_EDI_OFF 0x24 +#define FREEBSD_UC_MCONTEXT_ESI_OFF 0x28 +#define FREEBSD_UC_MCONTEXT_EBP_OFF 0x2c +#define FREEBSD_UC_MCONTEXT_EBX_OFF 0x34 +#define FREEBSD_UC_MCONTEXT_EDX_OFF 0x38 +#define FREEBSD_UC_MCONTEXT_ECX_OFF 0x3c +#define FREEBSD_UC_MCONTEXT_EAX_OFF 0x40 +#define FREEBSD_UC_MCONTEXT_TRAPNO_OFF 0x44 +#define FREEBSD_UC_MCONTEXT_EIP_OFF 0x4c +#define FREEBSD_UC_MCONTEXT_ESP_OFF 0x58 +#define FREEBSD_UC_MCONTEXT_CS_OFF 0x50 +#define FREEBSD_UC_MCONTEXT_EFLAGS_OFF 0x54 +#define FREEBSD_UC_MCONTEXT_SS_OFF 0x5c +#define FREEBSD_UC_MCONTEXT_MC_LEN_OFF 0x60 #define FREEBSD_UC_MCONTEXT_FPFORMAT_OFF 0x64 -#define FREEBSD_UC_MCONTEXT_OWNEDFP_OFF 0x68 -#define FREEBSD_UC_MCONTEXT_FPSTATE_OFF 0x70 +#define FREEBSD_UC_MCONTEXT_OWNEDFP_OFF 0x68 +#define FREEBSD_UC_MCONTEXT_FPSTATE_OFF 0x70 -#define FREEBSD_UC_MCONTEXT_CW_OFF 0x70 -#define FREEBSD_UC_MCONTEXT_SW_OFF 0x74 -#define FREEBSD_UC_MCONTEXT_TAG_OFF 0x78 -#define FREEBSD_UC_MCONTEXT_IPOFF_OFF 0x7c -#define FREEBSD_UC_MCONTEXT_CSSEL_OFF 0x80 -#define FREEBSD_UC_MCONTEXT_DATAOFF_OFF 0x84 -#define FREEBSD_US_MCONTEXT_DATASEL_OFF 0x88 -#define FREEBSD_UC_MCONTEXT_ST0_OFF 0x8c +#define FREEBSD_UC_MCONTEXT_CW_OFF 0x70 +#define FREEBSD_UC_MCONTEXT_SW_OFF 0x74 +#define FREEBSD_UC_MCONTEXT_TAG_OFF 0x78 +#define FREEBSD_UC_MCONTEXT_IPOFF_OFF 0x7c +#define FREEBSD_UC_MCONTEXT_CSSEL_OFF 0x80 +#define FREEBSD_UC_MCONTEXT_DATAOFF_OFF 0x84 +#define FREEBSD_US_MCONTEXT_DATASEL_OFF 0x88 +#define FREEBSD_UC_MCONTEXT_ST0_OFF 0x8c -#define FREEBSD_UC_MCONTEXT_CW_XMM_OFF 0x70 -#define FREEBSD_UC_MCONTEXT_SW_XMM_OFF 0x72 -#define FREEBSD_UC_MCONTEXT_TAG_XMM_OFF 0x74 -#define FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF 0x78 -#define FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF 0x7c -#define FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF 0x80 -#define FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF 0x84 -#define FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF 0x88 -#define FREEBSD_UC_MCONTEXT_ST0_XMM_OFF 0x90 -#define FREEBSD_UC_MCONTEXT_XMM0_OFF 0x110 +#define FREEBSD_UC_MCONTEXT_CW_XMM_OFF 0x70 +#define FREEBSD_UC_MCONTEXT_SW_XMM_OFF 0x72 +#define FREEBSD_UC_MCONTEXT_TAG_XMM_OFF 0x74 +#define FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF 0x78 +#define FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF 0x7c +#define FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF 0x80 +#define FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF 0x84 +#define FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF 0x88 +#define FREEBSD_UC_MCONTEXT_ST0_XMM_OFF 0x90 +#define FREEBSD_UC_MCONTEXT_XMM0_OFF 0x110 -#define FREEBSD_UC_MCONTEXT_MC_LEN_VAL 0x280 -#define FREEBSD_UC_MCONTEXT_FPFMT_NODEV 0x10000 -#define FREEBSD_UC_MCONTEXT_FPFMT_387 0x10001 -#define FREEBSD_UC_MCONTEXT_FPFMT_XMM 0x10002 -#define FREEBSD_UC_MCONTEXT_FPOWNED_NONE 0x20000 -#define FREEBSD_UC_MCONTEXT_FPOWNED_FPU 0x20001 -#define FREEBSD_UC_MCONTEXT_FPOWNED_PCB 0x20002 +#define FREEBSD_UC_MCONTEXT_MC_LEN_VAL 0x280 +#define FREEBSD_UC_MCONTEXT_FPFMT_NODEV 0x10000 +#define FREEBSD_UC_MCONTEXT_FPFMT_387 0x10001 +#define FREEBSD_UC_MCONTEXT_FPFMT_XMM 0x10002 +#define FREEBSD_UC_MCONTEXT_FPOWNED_NONE 0x20000 +#define FREEBSD_UC_MCONTEXT_FPOWNED_FPU 0x20001 +#define FREEBSD_UC_MCONTEXT_FPOWNED_PCB 0x20002 diff --git a/src/x86/unwind_i.h b/src/x86/unwind_i.h index 1db2e98d..cd528242 100644 --- a/src/x86/unwind_i.h +++ b/src/x86/unwind_i.h @@ -1,6 +1,6 @@ /* libunwind - a platform-independent unwind library Copyright (C) 2002 Hewlett-Packard Co - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> + Contributed by David Mosberger-Tang <davidm@hpl.hp.com> This file is part of libunwind. @@ -33,29 +33,29 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "libunwind_i.h" /* DWARF column numbers: */ -#define EAX 0 -#define ECX 1 -#define EDX 2 -#define EBX 3 -#define ESP 4 -#define EBP 5 -#define ESI 6 -#define EDI 7 -#define EIP 8 -#define EFLAGS 9 -#define TRAPNO 10 -#define ST0 11 - -#define x86_lock UNW_OBJ(lock) -#define x86_local_resume UNW_OBJ(local_resume) -#define x86_local_addr_space_init UNW_OBJ(local_addr_space_init) -#define x86_scratch_loc UNW_OBJ(scratch_loc) -#define x86_get_scratch_loc UNW_OBJ(get_scratch_loc) -#define x86_r_uc_addr UNW_OBJ(r_uc_addr) +#define EAX 0 +#define ECX 1 +#define EDX 2 +#define EBX 3 +#define ESP 4 +#define EBP 5 +#define ESI 6 +#define EDI 7 +#define EIP 8 +#define EFLAGS 9 +#define TRAPNO 10 +#define ST0 11 + +#define x86_lock UNW_OBJ(lock) +#define x86_local_resume UNW_OBJ(local_resume) +#define x86_local_addr_space_init UNW_OBJ(local_addr_space_init) +#define x86_scratch_loc UNW_OBJ(scratch_loc) +#define x86_get_scratch_loc UNW_OBJ(get_scratch_loc) +#define x86_r_uc_addr UNW_OBJ(r_uc_addr) extern void x86_local_addr_space_init (void); extern int x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, - void *arg); + void *arg); extern dwarf_loc_t x86_scratch_loc (struct cursor *c, unw_regnum_t reg); extern dwarf_loc_t x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg); extern void *x86_r_uc_addr (ucontext_t *uc, int reg); |