Arun Sharma
06d2ffa41a
[x86-64] (unw_step): Improve handling of functions which lack unwind info.
...
If following the frame-chain leads to a frame >= 4KB away, we conclude that
the frame-pointer isn't really valid.
2006-07-26 22:04:40 -06:00
Arun Sharma
7c0907634d
[x86-64] (unw_is_signal_frame): If access mem fails, it's not a signal frame.
2006-07-26 21:58:27 -06:00
Arun Sharma
58888a5060
(dwarf_find_save_locs): Also apply register-state after parsing the FDE
2006-07-26 21:55:09 -06:00
Arun Sharma
527225e492
[x86-64] Make a best effort at validating pointers before dereferencing them.
...
Signed-off-by: Arun Sharma <arun.sharma@google.com>
2006-07-26 21:46:39 -06:00
Arun Sharma
4312719cbc
[dwarf] Need to guard against multiple threads accessing the rs cache.
...
Signed-off-by: Arun Sharma <arun.sharma@google.com>
2006-07-26 21:44:38 -06:00
Arun Sharma
c5dc3c150a
[dwarf] Allow return address column to differ from function to function.
...
Signed-off-by: Andrey Veskov <Andrey.Veskov@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@google.com>
2006-07-26 21:29:50 -06:00
Arun Sharma
60b7af702a
(dwarf_find_save_locs): Add a comment.
...
Now that dwarf_find_save_locs() not just finds the save-locations but
also updates the cursor-state, document this fact (the function really
is misnamed now).
2006-07-26 21:25:37 -06:00
Arun Sharma
3dfde7a3f0
(dwarf_find_save_locs): put_unwind_info() is not needed in the cached case.
2006-07-26 21:23:30 -06:00
Arun Sharma
00db7f752a
Implement a ip -> dwarf_reg_state cache.
...
Signed-off-by: Arun Sharma <arun.sharma@google.com>
2006-07-26 21:18:49 -06:00
David Mosberger-Tang
1a0af36731
Fix forgotten copyright year update.
2006-07-26 15:48:48 -06:00
David Mosberger-Tang
6a89d40236
Fix missed "tdep.h" -> "libunwind_i.h" conversions.
2006-07-26 15:44:23 -06:00
David Mosberger-Tang
8c94e12429
(_UPT_find_proc_info): Fix potential crash due to uninitialized pointer.
...
Be sure to clear pi->unwind_info when looking up the kernel table and
not needing the unwind-info. Otherwise, _UPT_put_unwind_info() may
erroneously call free() on the pointer, even though that space wasn't
malloc'd, leading to crashes..
2006-07-26 15:43:23 -06:00
David Mosberger-Tang
fd2fa63a6c
Fix missed merge on setjmp_i.h and siglongjmp.c.
2006-07-26 15:21:52 -06:00
David Mosberger-Tang
69d85f7c14
Restore mi/Ldyn-remote.c.
2006-07-26 15:10:48 -06:00
David Mosberger-Tang
236e370dc5
Remove three Emacs backup-files which accidentially got checked into git.
2006-07-26 14:54:50 -06:00
David Mosberger-Tang
6daeeac60a
Revert "Initial revision"
...
This reverts e6446885f4
commit.
2006-07-26 14:53:49 -06:00
David Mosberger-Tang
a369768c27
Revert "Initial revision"
...
This reverts 06d223e924
commit.
2006-07-26 14:47:44 -06:00
David Mosberger-Tang
ca69fee8bb
Merge ../libunwind-v0.98
...
Conflicts:
include/dwarf_i.h
include/x86/jmpbuf.h
include/x86_64/jmpbuf.h
src/hppa/init.h
src/mi/Gget_fpreg.c
src/mi/Gset_fpreg.c
src/mi/strerror.c
2006-07-25 21:41:43 -06:00
David Mosberger-Tang
af2503e223
Fix bug in libunwind-ptrace which can cause reading of random data.
...
(maps_next): After reading less than a full buffer of data, copy
remaining data to the top of the buffer so as to maintain the
invariant that all data between mi->buf and mi->buf_end is valid.
This avoids maps_next() parsing uninitialized data.
2006-07-25 21:35:30 -06:00
David Mosberger-Tang
f176ad6fc6
Bring git v0.98.5 tree in sync with released v0.98.5.
...
Sadly, the conversion from Bitkeeper -> CVS -> git wasn't perfect. Or
so it seems.
2006-07-25 21:32:28 -06:00
hp.com!davidm
36a0275014
Allow write-access to UNW_IA64_BSP and UNW_REG_SP.
...
(Logical change 1.303)
2005-05-20 15:32:18 +00:00
hp.com!davidm
cf2a44ca49
Use update_nat() instead of equivalent open code.
...
(Logical change 1.301)
2005-05-20 14:58:46 +00:00
hp.com!davidm
f5de64f9f7
If r1 has been saved in an ABI-specific frame
...
(such as an interrupt frame), access the saved
value. Otherwise, pick it up from the unwind-info
for the matching IP.
(Logical change 1.300)
2005-05-20 14:50:54 +00:00
hp.com!davidm
399f120c96
Drop unused readonly variable.
...
(Logical change 1.299)
2005-05-20 14:13:01 +00:00
hp.com!davidm
3fa950e818
Remove early-out test when IP is zero.
...
(Logical change 1.298)
2005-05-20 13:35:32 +00:00
hp.com!davidm
19e3bf3ea6
(rbs_switch): Use rbs_get_base() to determine the size of the register
...
backing store.
(Logical change 1.297)
2005-05-20 13:13:07 +00:00
hp.com!davidm
9724ac492c
(common_init): Use rbs_get_base() to determine size of register-backing store.
...
(Logical change 1.297)
2005-05-20 13:13:07 +00:00
hp.com!davidm
080f8423d9
Read sp and bsp via ia64_get() and then pass them to common_init().
...
(Logical change 1.296)
2005-05-20 12:47:59 +00:00
hp.com!davidm
50bbc1fe3d
(set_as_arg): New function.
...
(get_initial_stack_pointers): Likewise.
(unw_init_local): Use new functions to make code more readable and add
Linux kernel support.
(Logical change 1.296)
2005-05-20 12:47:59 +00:00
hp.com!davidm
84bd124a24
(inlined_uc_addr): Remove UNW_IA64_AR_BSP. We no longer need this ugly hack
...
since the initial BSP is now passed directly into common_init().
(Logical change 1.296)
2005-05-20 12:47:59 +00:00
hp.com!davidm
4992f1c936
(common_init): Take initial sp and bsp values as arguments instead of
...
reading them via ia64_get().
(Logical change 1.296)
2005-05-20 12:47:59 +00:00
hp.com!davidm
97b483dcaa
Drop include of "mempool.h", which causes problems in the kernel, due to
...
a conflicting <linux/mempool.h>.
(SOS_MEMORY_SIZE): Move to libunwind_i.h.
(Logical change 1.295)
2005-05-20 11:28:16 +00:00
hp.com!davidm
1b63be3f89
(parse_dynamic): Make it a dummy-function of _U_dyn_op isn't defined, i.e.,
...
if libunwind-dynamic.h isn't in use (as is the case for the kernel at
the moment).
(Logical change 1.295)
2005-05-20 11:28:16 +00:00
hp.com!davidm
7894f0edc0
(ia64_strloc): Move to Grbs.c.
...
(Logical change 1.295)
2005-05-20 11:28:16 +00:00
hp.com!davidm
96407911ee
(ia64_strloc): Move here from Ginit.c so it can be shared with the kernel.
...
(Logical change 1.295)
2005-05-20 11:28:16 +00:00
hp.com!davidm
2e35dd035c
Regenerate.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
3e8a50255c
Include from tdep-$(arch) directory after the normal incliude directory.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
32385d36fd
Include "tdep-ia64/rse.h" instead of "ia64/rse.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
1228462adc
Include "rse.h" instead of "ia64/rse.h".
...
Include "libunwind_i.h" instead of "internal.h" and "tdep.h".
Define rbs_cover_and_flush() only for the !UNW_REMOTE_ONLY case.
(ia64_is_big_endian): New macro.
(ia64_get_abi): Likewise.
(ia64_set_abi): Likewise.
(ia64_get_abi_marker): Likewise.
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
8e6f3c8485
Include "rse.h" instead of "ia64/rse.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
83820a78d1
Include "libunwind_i.h" instead of "tdep.h".
...
Include "tdep-ia64/rse.h" instead of "ia64/rse.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
67f90c24be
Include "libunwind_i.h" instead of "tdep.h".
...
Include "elfxx.c" instead of "elf64.c".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
d9e100753f
Include "libunwind_i.h" instead of "tdep.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
07b01ad205
Include "libunwind_i.h" instead of "tdep.h" and "internal.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
670dd57e82
Include "libunwind_i.h" instead of "libunwind.h" and a whole bunch of standard
...
header files.
Use lock_release instead of mutex_unlock/sigprocmask calls.
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
5724bee8c2
Include "libunwind_i.h" instead of "internal.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
19df6612fa
Include "libunwind_i.h" instead of "internal.h" and "tdep.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
b7adf160ee
Include "dwarf_i.h" instead of "dwarf.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
c027d98386
Don't include headers already included via unwind_i.h.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
df3d6af467
Don't include <string.h>.
...
Include "libunwind_i.h" instead of "tdep.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
dda1a6d625
Don't include <string.h>.
...
Include "libunwind_i.h" instead of "internal.h" and "tdep.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
379fb069d2
Don't include <string.h>, <unistd.h>, <sys/types.h>.
...
Include "libunwind_i.h" instead of "tdep.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
9e8ba174e6
Don't include <string.h> and <stdlib.h>.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
9fac7579ee
Don't include <string.h> and "tdep.h".
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
71acf1d00e
Don't include <stdlib.h>.
...
Include "libunwind_i.h" instead of "tdep.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
03ba50ccaa
Don't include <stdlib.h> and <string.h>.
...
Include "libunwind_i.h" instead of "tdep.h".
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
fa2871946a
Don't include <assert.h> and <stddef.h>.
...
Use ia64_get_abi_marker() instead of directly referencing c->last_abi_marker.
(linux_scratch_loc): When accessing an fp-reg, default to IA64_FPREG_LOC.
Handle more registers for the Linux interrupt-frame case.
(tdep_access_reg): Use ia64_get_abi() instead of c->as->abi.
Use ia64_is_big_endian() instead of c->as->big_endian.
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
8bb167d4c1
Don't include <alloca.h> and <stdlib.h>.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
6675be4926
(linux_interrupt): Enable this code for the kernel, too.
...
Use ia64_get_abi_marker() instead of c->abi_marker.
Use ia64_set_abi() instead of storing directly to c->as->abi.
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
ee6eeb4f7d
(get_script_cache): Use HAVE_ATOMIC_H instead of __linux && __KERNEL__.
...
(Logical change 1.294)
2005-05-20 09:48:08 +00:00
hp.com!davidm
8a1e0a2bcd
Auto merged
...
2005/05/17 14:14:23-07:00 hp.com!davidm
(tdep_access_reg): Access AR.EC via ec_loc instead of cfm_loc.
(Logical change 1.293)
2005-05-17 21:28:19 +00:00
hp.com!davidm
26fdb45d76
Auto merged
...
2005/05/17 14:14:23-07:00 hp.com!davidm
(linux_sigtramp): Add "prev_cfm_loc" argument. Use it to set c->ec_loc.
(linux_interrupt): Likewise.
(hpux_sigtramp): Likewise.
(update_frame_state): Copy old cfm_loc to prev_cfm_loc and pass it to
ABI-specific handlers. Initialize c->ec_loc to c->cfm_loc by default.
(Logical change 1.293)
2005-05-17 21:28:19 +00:00
hp.com!davidm
a6ba57d556
Auto merged
...
2005/05/17 06:10:13-07:00 hp.com!davidm
(tdep_access_reg): Don't rotate contents of UNW_IA64_PR.
(Logical change 1.292)
2005-05-17 13:24:49 +00:00
hp.com!davidm
8462f1f87d
(pr_ltop): Remove.
...
(pr_ptol): Remove.
(Logical change 1.292)
2005-05-17 13:24:49 +00:00
mostang.com!davidm
23884c98cb
Rename: src/sigsetjmp.c -> src/setjmp/sigsetjmp.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
4d7f2a5be7
Rename: src/sigsetjmp.c -> src/setjmp/sigsetjmp.c
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
5ac5853589
Rename: src/setjmp.c -> src/setjmp/setjmp.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
8e06df0e52
Rename: src/setjmp.c -> src/setjmp/setjmp.c
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
9bc79a618b
Rename: src/dwarf/dwarf-eh.h -> include/dwarf-eh.h
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
06d223e924
Initial revision
2005-05-03 09:13:17 +00:00
mostang.com!davidm
4e833d43fc
Include "setjmp_i.h".
...
Abstract ia64-specific code into bsp_match() routine.
Support any platform with at least 2 EH argument registers.
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
4f16756123
Include "setjmp_i.h".
...
Abstract ia64-specific code into bsp_match() routine.
Support any platform with at least 2 EH argument registers.
2004/12/06 01:33:16-08:00 mostang.com!davidm
Rename: src/longjmp.c -> src/setjmp/longjmp.c
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
203c0a5363
Include "setjmp_i.h".
...
Abstract ia64-specific code into bsp_match() and
resume_restores_sigmask() routines.
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
acf90b1f82
Include "setjmp_i.h".
...
Abstract ia64-specific code into bsp_match() and
resume_restores_sigmask() routines.
2004/12/06 01:33:01-08:00 mostang.com!davidm
Rename: src/siglongjmp.c -> src/setjmp/siglongjmp.c
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
239ea4e7ea
Implement for real. Note: this version is currently broken.
...
We don't pass sigmask the way this routine expects because it
can't work.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
7a5549f2d8
Drop "inline" since it's now part of ALWAYS_INLINE.
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
411331eecb
Delete: src/hppa/Lget_reg.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
ca02ad1708
Delete: src/hppa/Lget_proc_name.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
181bddfba0
Delete: src/hppa/Gget_reg.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
f45210852c
Delete: src/hppa/Gget_proc_name.c
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
10a269d6d0
Also enable DWARF code for UNW_TARGET_HPPA.
...
2004/11/23 16:59:56-08:00 mostang.com!davidm
(_UPTi_find_unwind_table): Implement first draft for x86/-64.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
b267dfc8c9
Adjust for sigset_t to intrmask_t renaming.
...
}(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
dc89a17613
Adjust for sigset_t to intrmask_t renaming.
...
2004/12/02 00:40:45-08:00 mostang.com!davidm
Add copyright notice.
Provide canonical DWARF-based implementation.
2004/11/30 23:38:42-08:00 mostang.com!davidm
Rename: src/hppa/global.c -> src/hppa/Gglobal.c
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
1f5ac0f5bd
Adjust for sigset_t to intrmask_t renaming.
...
2004/11/17 02:43:39-08:00 mostang.com!davidm
(struct callback_data): New structure.
(linear_search): New function.
(callback): Convert to getting auxiliary info passed via a pointer to
a callback_data structure, rather than an unw_dyn_info_t
structure.
Keep track of the maximum load address in max_load_addr.
If an object doesn't have a binary search-table, fall back
on a linear search.
(dwarf_find_proc_info): Fill in callback-data structure before calling
dl_iterate_phdr(). Upon returning, check whether
cb_data.single_fde is set and, if so, return directly, without
searching the DWARF unwind-table.
(dwarf_search_unwind_table): Adjust for renaming of
dwarf_parse_fde() to dwarf_extract_proc_info_from_fde().
If IP doesn't fall into the IP-range of the FDE-entry found
by the search, return UNW_ENOINFO.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
7fbb8a9593
Adjust for sigset_t to intrmask_t renaming.
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
9f3360a546
Adjust for "ia64_rse" to "rse" prefix change.
...
2005/02/23 12:55:45-08:00 mostang.com!davidm
(inlined_uc_addr): Adjust for ALWAYS_INLINE change.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
7f8b54ae5c
Adjust for "ia64_rse" to "rse" prefix change.
...
2005/02/20 21:42:55-08:00 mostang.com!davidm
Adjust for NELEMS to ARRAY_SIZE renaming.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
3f73836b87
Adjust for "ia64_rse" to "rse" prefix change.
...
2004/12/15 15:40:09-08:00 hp.com!davidm
Include "tdep.h" on ia64 (we need the cursor).
(bsp_match): Fix it so it compiles again.
(resume_restore_sigmask): Likewise.
2004/12/06 10:40:49-08:00 mostang.com!davidm
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
3e00b79170
Adjust for "ia64_rse" to "rse" prefix change.
...
2004/12/06 10:40:49-08:00 mostang.com!davidm
(tdep_access_reg): Fix typo in code to read EH argument registers.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
4849af2d09
Adjust for "ia64_rse" to "rse" prefix change.
...
2004/11/23 16:59:56-08:00 mostang.com!davidm
(_UPT_access_reg): If the register is out of range, set errno
to EINVAL.
When encountering an error while accessing a register,
print the corresponding error string.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
87081cebab
Adjust for "ia64_rse" to "rse" prefix change.
...
2004/10/25 07:52:30-07:00 hp.com!davidm
(unw_step): Add Debug statement to print return-value.
2004/10/25 05:21:51-07:00 hp.com!davidm
(unw_step): Print IP along with cursor address.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
bf832fc29e
Adjust for "ia64_rse" to "rse" prefix change.
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
3f16641760
(x86_local_resume): Delete unused code.
...
(establish_machine_state): Fix off-by-one error.
Fix Debug-statement formatting & debug-level.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
17bf4d0af8
(unw_step): If dwarf_step() fails and the frame doesn't look like
...
a signal-trampoline, assume that it's a PLT stub.
If non-DWARF stepping fails to change IP and CFA, declare
it a bad frame.
2004/11/23 16:59:56-08:00 mostang.com!davidm
(unw_step): Also print IP as part of the function-trace.
2004/11/23 16:17:37-08:00 mostang.com!davidm
(unw_step): When dwarf_step() fails on a signal-frame, fill in all
the known locations because dwarf_step() fails on older
kernels which don't export the kernel vDSO even though every-
thing else may be providing proper DWARF unwind-info.
2004/10/25 17:43:57+02:00 homeip.net!davidm
Add Debug statement for return-value.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
fa0828ac7d
(unw_step): Also print IP as part of the function-trace.
...
2004/11/23 12:49:54-08:00 mostang.com!davidm
(unw_step): If dwarf_step() fails on a signal-frame, fill in the
save-locations for everything that gets saved in the
sigcontext structure.
2004/10/25 17:43:57+02:00 homeip.net!davidm
Add Debug statement for return-value.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
93599dc278
(unw_init_local): Implement it based on the DWARF unwinder.
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
0f27732d35
(unw_get_proc_info): Implement it based on dwarf_make_proc_info().
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
7ac9665fd3
(unw_get_proc_info): Don't freak out if dwarf_make_proc_info() fails.
...
Unfortunately, it must fail for current versions of libc
since they fail to provide unwind-info for _start() and
_dl_start().
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
b1b84400b9
(tdep_uc_addr): Define as HIDDEN.
...
(Logical change 1.290)
2005-05-03 09:13:17 +00:00
mostang.com!davidm
db1517609c
(tdep_access_reg): Buffer writes to EH argument registers (EAX
...
and EDX) in dwarf.eh_args[].
2004/11/17 02:43:39-08:00 mostang.com!davidm
(tdep_access_reg): Treat UNW_X86_ESP exactly like UNW_X86_CFA.
(Logical change 1.290)
2005-05-03 09:13:17 +00:00