X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fbacktrace.c;h=80cae54a6a15310643631fae55718bbb623a2424;hb=3cfafd474026fd751765300fa462da2358379297;hp=0999a081ecb351e9e0c530b43010cadc7c4dcf10;hpb=34e63086edddcae06d7c1a4fa84fec0861e50758;p=openvswitch diff --git a/lib/backtrace.c b/lib/backtrace.c index 0999a081..80cae54a 100644 --- a/lib/backtrace.c +++ b/lib/backtrace.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009 Nicira Networks. + * Copyright (c) 2008, 2009, 2010 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ #define THIS_MODULE VLM_backtrace #include "vlog.h" -static uintptr_t UNUSED +static uintptr_t OVS_UNUSED get_max_stack(void) { static const char file_name[] = "/proc/self/maps"; @@ -42,7 +42,7 @@ get_max_stack(void) for (line_number = 1; fgets(line, sizeof line, f); line_number++) { if (strstr(line, "[stack]")) { uintptr_t end; - if (sscanf(line, "%*"SCNxPTR"-%"SCNxPTR, &end) != 1) { + if (sscanf(line, "%*x-%"SCNxPTR, &end) != 1) { VLOG_WARN("%s:%d: parse error", file_name, line_number); continue; } @@ -73,6 +73,10 @@ stack_low(void) uintptr_t low; asm("movl %%esp,%0" : "=g" (low)); return low; +#elif __x86_64__ + uintptr_t low; + asm("movq %%rsp,%0" : "=g" (low)); + return low; #else /* This causes a warning in GCC that cannot be disabled, so use it only on * non-x86. */