backtrace: Remove variant that does not support threads.
authorBen Pfaff <blp@nicira.com>
Tue, 23 Apr 2013 20:41:32 +0000 (13:41 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 17 Jun 2013 22:33:15 +0000 (15:33 -0700)
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@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
lib/backtrace.c

index c6829d7..861a109 100644 (file)
@@ -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.
 
 #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)
 {