[pypy-commit] pypy default: try to redo mac fixes
fijal
noreply at buildbot.pypy.org
Tue Oct 13 11:03:32 CEST 2015
Author: fijal
Branch:
Changeset: r80155:a2c908e95b29
Date: 2015-10-13 11:03 +0200
http://bitbucket.org/pypy/pypy/changeset/a2c908e95b29/
Log: try to redo mac fixes
diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -92,12 +92,13 @@
PLT = ""
size_decl = ""
type_decl = ""
+ extra_align = ""
else:
PLT = "@PLT"
type_decl = "\t.type\t%s, @function" % (tramp_name,)
size_decl = "\t.size\t%s, .-%s" % (
tramp_name, tramp_name)
-
+ extra_align = "\t.cfi_def_cfa_offset 8"
assert detect_cpu.autodetect().startswith(detect_cpu.MODEL_X86_64), (
"rvmprof only supports x86-64 CPUs for now")
@@ -132,7 +133,7 @@
\t.cfi_def_cfa_offset 16
\tcall %(cont_name)s%(PLT)s
\taddq\t$8, %%rsp
-\t.cfi_def_cfa_offset 8
+%(extra_align)s
\tret
\t.cfi_endproc
%(size_decl)s
diff --git a/rpython/rlib/rvmprof/src/vmprof_main.h b/rpython/rlib/rvmprof/src/vmprof_main.h
--- a/rpython/rlib/rvmprof/src/vmprof_main.h
+++ b/rpython/rlib/rvmprof/src/vmprof_main.h
@@ -31,7 +31,11 @@
#include <sys/stat.h>
#include <fcntl.h>
#include "vmprof_getpc.h"
+#ifdef __APPLE__
+#include "libunwind.h"
+#else
#include "vmprof_unwind.h"
+#endif
#include "vmprof_mt.h"
@@ -39,10 +43,12 @@
// functions copied from libunwind using dlopen
+#ifndef __APPLE__ // should be linux only probably
static int (*unw_get_reg)(unw_cursor_t*, int, unw_word_t*) = NULL;
static int (*unw_step)(unw_cursor_t*) = NULL;
static int (*unw_init_local)(unw_cursor_t *, unw_context_t *) = NULL;
static int (*unw_get_proc_info)(unw_cursor_t *, unw_proc_info_t *) = NULL;
+#endif
static int profile_file = -1;
static long prepare_interval_usec;
@@ -67,6 +73,7 @@
return "bad value for 'interval'";
prepare_interval_usec = (int)(interval * 1000000.0);
+#ifndef __APPLE__
if (!unw_get_reg) {
void *libhandle;
@@ -81,6 +88,7 @@
if (!(unw_step = dlsym(libhandle, UNW_PREFIX "_step")))
goto error;
}
+#endif
if (prepare_concurrent_bufs() < 0)
return "out of memory";
@@ -206,7 +214,12 @@
void *ip;
int n = 0;
unw_cursor_t cursor;
+#ifdef __APPLE__
+ unw_context_t uc;
+ unw_getcontext(&uc);
+#else
unw_context_t uc = *ucontext;
+#endif
int ret = unw_init_local(&cursor, &uc);
assert(ret >= 0);
diff --git a/rpython/rlib/rvmprof/src/vmprof_unwind.h b/rpython/rlib/rvmprof/src/vmprof_unwind.h
--- a/rpython/rlib/rvmprof/src/vmprof_unwind.h
+++ b/rpython/rlib/rvmprof/src/vmprof_unwind.h
@@ -64,8 +64,7 @@
typedef struct unw_cursor
{
unw_word_t opaque[UNW_TDEP_CURSOR_LEN];
- }
-unw_cursor_t;
+ } unw_cursor_t;
#define UNW_REG_IP UNW_X86_64_RIP
#define UNW_REG_SP UNW_X86_64_RSP
@@ -84,7 +83,7 @@
int format; /* unwind-info format (arch-specific) */
int unwind_info_size; /* size of the information (if applicable) */
void *unwind_info; /* unwind-info (arch-specific) */
- }
-unw_proc_info_t;
+ } unw_proc_info_t;
// end of copy
+
diff --git a/rpython/rlib/rvmprof/test/test_rvmprof.py b/rpython/rlib/rvmprof/test/test_rvmprof.py
--- a/rpython/rlib/rvmprof/test/test_rvmprof.py
+++ b/rpython/rlib/rvmprof/test/test_rvmprof.py
@@ -2,6 +2,7 @@
from rpython.tool.udir import udir
from rpython.rlib import rvmprof
from rpython.translator.c.test.test_genc import compile
+from rpython.rlib.objectmodel import we_are_translated
def test_vmprof_execute_code_1():
@@ -96,7 +97,12 @@
@rvmprof.vmprof_execute_code("xcode1", lambda code, num: code)
def main(code, num):
print num
- return 42
+ s = 0
+ for i in range(num):
+ s += (i << 1)
+ if s % 32423423423 == 0:
+ print s
+ return s
tmpfilename = str(udir.join('test_rvmprof'))
@@ -104,16 +110,37 @@
code = MyCode()
rvmprof.register_code(code, get_name)
fd = os.open(tmpfilename, os.O_WRONLY | os.O_CREAT, 0666)
- rvmprof.enable(fd, 0.5)
- res = main(code, 5)
- assert res == 42
+ if we_are_translated():
+ num = 100000000
+ period = 0.0001
+ else:
+ num = 10000
+ period = 0.9
+ rvmprof.enable(fd, period)
+ res = main(code, num)
+ #assert res == 499999500000
rvmprof.disable()
os.close(fd)
return 0
+ def check_profile(filename):
+ from vmprof import read_profile
+
+ prof = read_profile(filename)
+ assert prof.get_tree().name.startswith("py:")
+ assert prof.get_tree().count
+
assert f() == 0
assert os.path.exists(tmpfilename)
fn = compile(f, [], gcpolicy="minimark")
- os.unlink(tmpfilename)
assert fn() == 0
- assert os.path.exists(tmpfilename)
+ try:
+ import vmprof
+ except ImportError:
+ py.test.skip("vmprof unimportable")
+ else:
+ check_profile(tmpfilename)
+ finally:
+ assert os.path.exists(tmpfilename)
+ os.unlink(tmpfilename)
+
\ No newline at end of file
More information about the pypy-commit
mailing list