/* src/vm/jit/linenumbertable.c - linenumber handling stuff
Copyright (C) 2007
- CACAOVM - Verein zu Foerderung der freien virtuellen Machine CACAO
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
#include "vm/jit/codegen-common.h"
#include "vm/jit/linenumbertable.h"
+#if defined(ENABLE_STATISTICS)
+# include "vmcore/options.h"
+# include "vmcore/statistics.h"
+#endif
+
+#if defined(__S390__)
+# define ADDR_MASK(type, x) ((type)((uintptr_t)(x) & 0x7FFFFFFF))
+#else
+# define ADDR_MASK(type, x) (x)
+#endif
/* linenumbertable_create ******************************************************
lnt = NEW(linenumbertable_t);
lnte = MNEW(linenumbertable_entry_t, l->size);
+#if defined(ENABLE_STATISTICS)
+ if (opt_stat) {
+ count_linenumbertable++;
+
+ size_linenumbertable +=
+ sizeof(linenumbertable_t) +
+ sizeof(linenumbertable_entry_t) * l->size;
+ }
+#endif
+
/* Fill the linenumber table. */
lnt->length = l->size;
/* Fill the linenumber table entries in reverse order, so the
search can be forward. */
- pv = code->entrypoint;
+ pv = ADDR_MASK(uint8_t *, code->entrypoint);
for (le = list_last_unsynced(l); le != NULL;
le = list_prev_unsynced(l, le), lnte++) {
{
linenumbertable_entry_t *lntinline; /* special entry for inlined method */
+ pc = ADDR_MASK(void *, pc);
+
for (; lntsize > 0; lntsize--, lnte++) {
/* Note: In case of inlining this may actually compare the pc
against a methodinfo *, yielding a non-sensical