getcontext in libc.
Also cleanup the namespace (check-name-space passes on x86_64 now).
Replace uses of offsets.h with ucontext_i.h.
Rename _x86_64_setcontext to _Ux86_64_setcontext.
TBD: Add CFI annotations for get/setcontext.
Signed-off-by: Paul Pluzhnikov <ppluzhnikov@google.com>
Signed-off-by: Arun Sharma <arun.sharma@google.com>
* src/arm/unwind_i (arm_lock, arm_local_resume): Define.
* src/ptrace/_UPT_find_proc_info.c: Handle ARM like X86 etc.
* tests/flush-cache.S (flush_cache): Add (dummy) ARM-version.
ARM does need executable stack, even on Linux...
Signed-off-by: Anderson Lizardo <anderson.lizardo@indt.org.br>
Signed-off-by: Bruna Moreira <bruna.moreira@indt.org.br>
- Gtest-bt: like on x86/-64, the stack size passed to sigaltstack() is
too small for ARM thus causing segmentation fault due to stack
overflow.
- Gtest-dyn1: code size definition of dynamic function (template()) on
testcase is too big for ARM architecture so memcpy() reads invalid
memory causing random crashes (segmentation fault). A better
solution would be to compile the function in a separate binary,
mmap() it and memcpy() from it instead, so maximum size is known for
sure.
- check-name-space.in: fix some "bashisms", it causes the script to
fail to run on N8XX's busybox shell.
Signed-off-by: Anderson Lizardo <anderson.lizardo@indt.org.br>
Signed-off-by: Bruna Moreira <bruna.moreira@indt.org.br>
On some systems executable stacks are denied. Since libunwind and the
tests don't actually need executable stacks this patch marks all
assembly files as not needing it.
The original patch comes from frysk:
2007-04-05 Jan Kratochvil <jan.kratochvil@redhat.com>
* src/hppa/getcontext.S, src/hppa/setcontext.S, src/hppa/siglongjmp.S,
src/ia64/Ginstall_cursor.S, src/ia64/Linstall_cursor.S,
src/ia64/dyn_info_list.S, src/ia64/getcontext.S, src/ia64/longjmp.S,
src/ia64/setjmp.S, src/ia64/siglongjmp.S, src/ia64/sigsetjmp.S,
src/ppc64/longjmp.S, src/ppc64/siglongjmp.S, src/x86/longjmp.S,
src/x86/siglongjmp.S, src/x86_64/longjmp.S, src/x86_64/setcontext.S,
src/x86_64/siglongjmp.S: Stack should be non-executable, for SELinux.
I added a couple more markers for new files in current libunwind.
Before this patch you would get the following on selinux enabled
systems without allow_exec_stack: error while loading shared
libraries:
libunwind.so.7: cannot enable executable stack as shared object
requires: Permission denied
After the patch that error disappears and all test results are similar
to the results on systems without executable stack protection.
* tests/ia64-test-setjmp.c (doit): New forward declaration.
(doit_pointer): New function pointer variable initialized to DOIT.
(doit): Self-call made by an unoptimizable volatile indirect call.
* tests/test-ptrace.c (target_pid_kill): New function.
(target_pid, main): TARGET_PID made static, for target_pid_kill ().
(main): Register target_pid_kill () for atexit(3).
2007-04-04 Jan Kratochvil <jan.kratochvil@redhat.com>
* tests/Gtest-dyn1.c, tests/test-async-sig.c, tests/test-ptrace.c:
Fixed lockups on broken libunwind (as ppc64 is).
2007-03-07 Jan Kratochvil <jan.kratochvil@redhat.com>
* tests/test-async-sig.c (do_backtrace): Limit maximum backtrace depth
to 100 iterations; it workarounds FC6 DWARF-broken glibc.
2006-12-10 Jan Kratochvil <jan.kratochvil@redhat.com>
* tests/test-ptrace.c (main): Check for too many unexpected child
signals, such as the common `SIGSEGV'.
Don't test read-only access to F0 and F1 registers --- according to
the SCRA manual, those locations cannot even be expressed in SPILL
descriptors and newer versions of GAS (as well as IAS) won't accept
.spillreg directives targeting those registers.
2005/05/17 06:10:13-07:00 hp.com!davidm
(save_pr): Declare
(check_pr): New function.
(all_funcs): Mention save_pr/check_pr.
(random_word): New function.
(check_pr): Likewise.
(check_rotate_regs): Call check_pr().
(run_check): Use random_word() instead of random() to get a word full of
pseudo-random bits.
(Logical change 1.292)
to create NTHREADS threads. With NTHREADS==128 and the stack-size
rlimit set to "unlimited", the test is otherwise likely to fail because
on ia64 it will default to using 32MB of stack per thread.
(Logical change 1.291)
(consume_some_stack_space): New function.
(main): Call consume_some_stack_space() before establishing the
rlimit. Otherwise, stack-expansion may bump into
the address-space rlimit.
(Logical change 1.290)
(main): Do some silly FP computations. On x86-64, this ensures
that the signal handler invocations will always be called
with the FPU-state saved as well. Without this, the first
signal was invoked without FPU-state, the second with, causing
a spurious failure.
2004/11/17 02:06:25-08:00 mostang.com!davidm
(get_bsp): New function.
(handler): Clean up & check for error returns.
(main): Also fail if we didn't get SIGUSR2.
(Logical change 1.290)
for SuSE LES 9) so use 128KB instead.
(do_backtrace): Also print backtrace obtained via backtrace().
(foo): Remove backtrace() call---now done in do_backtrace().
(Logical change 1.290)
2004/10/19 23:11:07-07:00 mostang.com!davidm
(got_here): New global variable.
(raise_exception): Fix off-by-2 error so that we _really_ step
to the outermost a() frame.
(get_bsp): New function.
(__builtin_ia64_bsp): Remove.
(a): Print stack and bsp addresses as we recurse.
When resuming execution in outermost a() frame (n==depth),
clear "result" and set "got_here" so we know we landed in
the right place.
(main): Don't accept arguments that cause "depth" to be < 1.
When returning from a(), also check "got_here". If
the check failed, print result, got_here, and nerrors
for diagnostic purposes.
(Logical change 1.290)
2004/12/02 23:51:00-08:00 hp.com!davidm
(do_backtrace): Also print the symbol offset. Increase nesting-level
tolerance to 64 so we can test programs with deeply nested
call-chains without triggering spurious warnings.
2004/11/30 22:44:47-08:00 mostang.com!davidm
(do_backtrace): Print IP if unw_get_proc_info() fails.
2004/11/23 18:01:09-08:00 mostang.com!davidm
(do_backtrace): Fix "start_ip might be used uninitialized" warning.
(Logical change 1.290)
Include <errno.h>.
Include <ia64intrin.h> if we have it.
(get_bsp): New function.
(doit): Use get_bsp() instead of __builtin_ia64_bsp().
(main): Replace %m with %s/strerror(errno).
(Logical change 1.277)
(num_errors): Likewise.
(do_backtrace): Only print info if verbose is set.
(foo): Likewise.
(sighandler): Likewise.
(main): Likewise.
(bar): New function which is attempting to trigger a bug reported by
Anthony Brewer which is caused by GAS apparently generating bad
offsets for the psprel directive.
(f): New function.
}(Logical change 1.270)
(num_errors): Likewise.
(do_backtrace): Only print info if verbose is set.
(foo): Likewise.
(sighandler): Likewise.
(main): Likewise.
(bar): New function which is attempting to trigger a bug reported by
Anthony Brewer which is caused by GAS apparently generating bad
offsets for the psprel directive.
(f): New function.
2004/09/15 04:24:29-07:00 hp.com!davidm
Rename: tests/bt.c -> tests/Gtest-bt.c
(Logical change 1.270)
(raise_exception): Make non-static, unwind "depth - 1" steps to get to
top-most a() frame.
(__builtin_ia64_bsp): Also define for Intel-compiler.
(a): Restructure so it works in the face of global optimization and also
remove GCC dependencies.
(main): Initialize depth based on argv[1].
(Logical change 1.232)
(test_static_link_LDFLAGS): Replace -all-static with -static.
The former doesn't work on HP-UX because libc doesn't appear
to be availabale in archive format (only libc.so is available).
(forker_LDFLAGS): Likewise.
(Logical change 1.223)
Linux-specific.
Include <sys/uc_access.h> if available.
(NELEMS): Delete (already defined in internal.h).
(all_funcs): Remove left-over #if 1 directives.
(sighandler): Add HP-UX support.
(enable_sighandler): Replace SA_NOMASK with SA_NODEFER. The former
is not available on HP-UX.
(disable_sighandler): Likewise.
(Logical change 1.221)
(resume): Likewise.
(nop): Remove.
(main): Don't cast function pointer to different prototypes. That's apparently
not allowed. icc v8.0 complains about it and GCC 3.5 will actually
generate crashing code when this is done. Talk about terminated with
extreme prejudice!
(Logical change 1.213)
(do_backtrace): Call unw_get_proc_name() only if print_names is TRUE.
(main): Support command-line option -c to turn on caching of
unwind-info and -n to turn off the printing (and lookup)
of symbol names.
Stop execution if child dies with a signal.
(Logical change 1.209)
(KB): New macro.
(big): Lower the size to 64*MB. Should be enough for another year... ;-)
(gettime): Fix typo and lower the assumed cache-line size from 64
to 8 bytes just to be safe across platforms.
(measure_init): Lower N from 1000 to 100.
(cursor): Add some padding between each unw_cursor_t to avoid
benefitting from cache-line sharing.
(uc): Likewise.
Warm up the TLB before measuring the cold-cache cases.
(main): Unlimit the max. stack-size just in case.
Write to "big" to ensure it's backed by real memory
(not just by the zero page).
(Logical change 1.194)
(save_static_to_mem3): Likewise.
(save_static_to_mem4): Likewise.
(save_static_to_mem5): Likewise.
(save_static_to_scratch): Save f4 to f6 to improve test coverage.
(Logical change 1.185)
registers are passed via macro args.
(CALL_NEXT): Define in terms of CALL_NEXT_PTR().
(rotate_regs): Fix it so it doesn't overwrite any local registers
once they are rotated. Note: it's OK to write the output
registers, since those are outside of the rotating partition.
(Logical change 1.184)
(save_static_to_fr): Rename from save_static_to_fpreg().
(check_static_to_fr): Rename from check_static_to_fpreg().
(save_static_to_br): Declare.
(check_static_to_br): New function.
(save_static_to_mem): Declare.
(check_static_to_mem): New function.
(all_funcs): Mention new save/checks.
(Logical change 1.175)
(save_static_to_stacked): Use LOAD_VAL.
(save_static_to_fr): Rename from save_static_to_fpreg().
(save_static_to_br): New function.
(save_static_to_mem): Likewise.
(Logical change 1.175)
(maxlevel): New global variable.
(measure_unwind): Return init/step times via arg pointers.
(f1): Pass through init/step pointers.
(doit): New function.
(main): Use doit() instead of open code.
(Logical change 1.130)