* src/vm/jit/i386/darwin/md-os.c (md_replace_executionstate_read):
[cacao.git] / src / vm / jit / linenumbertable.c
index 9909fc0c57641560603a77aa6aaf991e01c50a66..2005f878bceae6532eed4db48a8f0d76fd51d990 100644 (file)
@@ -1,7 +1,7 @@
 /* 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 "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 ******************************************************
 
@@ -94,7 +99,7 @@ void linenumbertable_create(jitdata *jd)
        /* 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++) {
@@ -225,6 +230,8 @@ static s4 linenumbertable_linenumber_for_pc_intern(methodinfo **pm, linenumberta
 {
        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