[ovs-dev] [PATCH] backtrace: Remove variant that does not support threads.
Ethan Jackson
ethan at nicira.com
Mon Jun 17 19:33:44 UTC 2013
I assume this means you think the backtrace function built into glibc
is thread safe?
Acked-by: Ethan Jackson <ethan at nicira.com>
On Thu, Jun 13, 2013 at 5:15 PM, Ben Pfaff <blp at nicira.com> wrote:
> This variant was Linux-specific, GCC-specific, only worked on
> architectures with frame pointers (possibly only on i386?), and isn't used
> with glibc anyway. Remove it.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
> lib/backtrace.c | 86 +-----------------------------------------------------
> 1 files changed, 2 insertions(+), 84 deletions(-)
>
> diff --git a/lib/backtrace.c b/lib/backtrace.c
> index c6829d7..861a109 100644
> --- a/lib/backtrace.c
> +++ b/lib/backtrace.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc.
> + * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc.
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> @@ -18,16 +18,6 @@
>
> #include "backtrace.h"
>
> -#include <errno.h>
> -#include <inttypes.h>
> -#include <stdbool.h>
> -#include <stdio.h>
> -
> -#include "compiler.h"
> -#include "vlog.h"
> -
> -VLOG_DEFINE_THIS_MODULE(backtrace);
> -
> #ifdef HAVE_BACKTRACE
> #include <execinfo.h>
> void
> @@ -41,79 +31,7 @@ backtrace_capture(struct backtrace *b)
> b->frames[i] = (uintptr_t) frames[i];
> }
> }
> -#elif __GNUC__
> -static uintptr_t
> -get_max_stack(void)
> -{
> - static const char file_name[] = "/proc/self/maps";
> - char line[1024];
> - int line_number;
> - FILE *f;
> -
> - f = fopen(file_name, "r");
> - if (f == NULL) {
> - VLOG_WARN("opening %s failed: %s", file_name, strerror(errno));
> - return -1;
> - }
> -
> - for (line_number = 1; fgets(line, sizeof line, f); line_number++) {
> - if (strstr(line, "[stack]")) {
> - uintptr_t end;
> - if (sscanf(line, "%*x-%"SCNxPTR, &end) != 1) {
> - VLOG_WARN("%s:%d: parse error", file_name, line_number);
> - continue;
> - }
> - fclose(f);
> - return end;
> - }
> - }
> - fclose(f);
> -
> - VLOG_WARN("%s: no stack found", file_name);
> - return -1;
> -}
> -
> -static uintptr_t
> -stack_high(void)
> -{
> - static uintptr_t high;
> - if (!high) {
> - high = get_max_stack();
> - }
> - return high;
> -}
> -
> -static uintptr_t
> -stack_low(void)
> -{
> - uintptr_t low = (uintptr_t) &low;
> - return low;
> -}
> -
> -static bool
> -in_stack(void *p)
> -{
> - uintptr_t address = (uintptr_t) p;
> - return address >= stack_low() && address < stack_high();
> -}
> -
> -void
> -backtrace_capture(struct backtrace *backtrace)
> -{
> - void **frame;
> - size_t n;
> -
> - n = 0;
> - for (frame = __builtin_frame_address(1);
> - frame != NULL && in_stack(frame) && frame[0] != NULL
> - && n < BACKTRACE_MAX_FRAMES;
> - frame = frame[0])
> - {
> - backtrace->frames[n++] = (uintptr_t) frame[1];
> - }
> - backtrace->n_frames = n;
> -}
> -#else /* !HAVE_BACKTRACE && !__GNUC__ */
> +#else
> void
> backtrace_capture(struct backtrace *backtrace)
> {
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list