annotate test/runtime/7107135/TestMT.java @ 14094:3f27e57439ed

Truffle/Instrumentation: significant rearrangement (including moved class) and extension of the Truffle Instrumentation Framework. New interfaces include DebugContext (which can be attached to the ExecutionContext), through which access is provided to possibly language-specific (a) node instrumentation, (b) debug services manager, (c) notification when programs halt, (d) display of language values, and (e) display of variable identifiers.
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Mon, 03 Feb 2014 20:58:23 -0800
parents 9058789475af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8710
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
1 /*
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
2 * Copyright (c) 2002-2013, Oracle and/or its affiliates. All rights reserved.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
3 * Copyright (c) 2011 SAP AG. All Rights Reserved.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
5 *
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
6 * This code is free software; you can redistribute it and/or modify it
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
7 * under the terms of the GNU General Public License version 2 only, as
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
8 * published by the Free Software Foundation.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
9 *
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
10 * This code is distributed in the hope that it will be useful, but WITHOUT
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
13 * version 2 for more details (a copy is included in the LICENSE file that
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
14 * accompanied this code).
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
15 *
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License version
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
17 * 2 along with this work; if not, write to the Free Software Foundation,
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
19 *
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
21 * or visit www.oracle.com if you need additional information or have any
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
22 * questions.
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
23 */
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
24
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
25 class TestMT {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
26
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
27 static boolean loadLib(String libName) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
28 try {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
29 System.loadLibrary(libName);
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
30 System.out.println("Loaded library "+ libName + ".");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
31 return true;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
32 } catch (SecurityException e) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
33 System.out.println("loadLibrary(\"" + libName + "\") throws: " + e + "\n");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
34 } catch (UnsatisfiedLinkError e) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
35 System.out.println("loadLibrary(\"" + libName + "\") throws: " + e + "\n");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
36 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
37 return false;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
38 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
39
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
40 public static int counter = 1;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
41 static int Runner() {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
42 counter = counter * -1;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
43 int i = counter;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
44 if (counter < 2) counter += Runner();
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
45 return i;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
46 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
47
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
48 public static int run(String msg) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
49 try {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
50 Runner();
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
51 } catch (StackOverflowError e) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
52 System.out.println(msg + " caught stack overflow error.");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
53 return 0;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
54 } catch (OutOfMemoryError e) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
55 return 0;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
56 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
57 return 2;
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
58 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
59
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
60 public static void main(String argv[]) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
61 try {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
62 for (int i = 0; i < 20; i++) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
63 Thread t = new DoStackOverflow("SpawnedThread " + i);
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
64 t.start();
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
65 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
66 run("Main thread");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
67 loadLib("test-rwx");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
68 run("Main thread");
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
69 } catch (Exception e) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
70 System.out.println(e);
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
71 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
72 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
73
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
74 static class DoStackOverflow extends Thread {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
75 public DoStackOverflow(String name) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
76 super(name);
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
77 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
78 public void run() {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
79 for (int i = 0; i < 10; ++i) {
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
80 TestMT.run(getName());
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
81 yield();
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
82 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
83 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
84 }
9058789475af 7107135: Stack guard pages are no more protected after loading a shared library with executable stack
iklam
parents:
diff changeset
85 }