diff --git a/tools/cooja/examples/jni_test/README.txt b/tools/cooja/examples/jni_test/README.txt new file mode 100644 index 000000000..b01219bc9 --- /dev/null +++ b/tools/cooja/examples/jni_test/README.txt @@ -0,0 +1,18 @@ +The JNI tests have been replaced by the Cooja configuration wizard. + +The JNI tests assisted in configuring Cooja for compiling and linking +Java Native Interface (JNI) enabled Contiki libraries. Such Contiki +libraries are used by Cooja's Contiki Motes: motes simulated at the +operating system abstraction level. + +The new configuration wizard is started from inside Cooja, and exercises +the same functionality as the JNI tests. In contrast, the wizard +is directly connected to the current Cooja configuration, removing the +need to migrate the configuration between JNI tests and Cooja. + +To start the wizard: +* Start COOJA: +tools/cooja> ant run +* Menu > Settings > Compiler configuration wizard + +-- Fredrik Osterlind, fros@sics.se, March 2009 \ No newline at end of file diff --git a/tools/cooja/examples/jni_test/build.xml b/tools/cooja/examples/jni_test/build.xml deleted file mode 100644 index 3bca2d8cb..000000000 --- a/tools/cooja/examples/jni_test/build.xml +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - -The majority of problems encountered during these tests are related to -the compilation and linking stage of the Contiki libraries. -Below follows a number of configurations that work for different users. - -Linux users with the GNU toolchain may try: - PATH_C_COMPILER = gcc - COMPILER_ARGS = - LINK_COMMAND_1 = gcc -shared -Wl,-Map=$(MAPFILE) -o $(LIBFILE) - LINK_COMMAND_2 = - PARSE_WITH_COMMAND=false - -Windows users with recent Cygwin may try: - PATH_C_COMPILER = gcc - COMPILER_ARGS = -mno-cygwin -Wall -I'$(JAVA_HOME)/include' -I'$(JAVA_HOME)/include/win32' - LINK_COMMAND_1 = gcc -mno-cygwin -shared -Wl,-Map=$(MAPFILE) -Wl,--add-stdcall-alias -o $(LIBFILE) - LINK_COMMAND_2 = -L/usr/lib/mingw -lmsvcrt - -Windows users with older Cygwin may try: - PATH_C_COMPILER = gcc - COMPILER_ARGS = -mno-cygwin -I'$(JAVA_HOME)/include' -I'$(JAVA_HOME)/include/win32' - LINK_COMMAND_1 = ld -Map=$(MAPFILE) -shared --add-stdcall-alias /usr/lib/mingw/dllcrt2.o -o $(LIBFILE) - LINK_COMMAND_2 = -L/usr/lib/mingw -lmingw32 -lmingwex -lmsvcrt - -Windows users with recent Cygwin and separate MinGW tools may try: -In recent (early 2007) MinGW-Cygwin versions, the JNI support has been limited. -This may cause COOJA not to be able to load libraries generated using gcc's -mno-cygwin flag. -One possible solution is to download "real" MinGW (http://www.mingw.org), and install it separately -from Cygwin (for example in c:\mingw). Try using the following settings: - PATH_C_COMPILER = gcc - COMPILER_ARGS = -Wall -D_JNI_IMPLEMENTATION_ -I'$(JAVA_HOME)/include' -I'$(JAVA_HOME)/include/win32' - LINK_COMMAND_1 = gcc -shared -Wl,-Map=$(MAPFILE) -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -o $(LIBFILE) - LINK_COMMAND_2 = - -Mac users may try (see Mac note below): - PATH_C_COMPILER = gcc - PARSE_WITH_COMMAND = true - PARSE_COMMAND = nmandsize $(LIBFILE) - COMPILER_ARGS = -Wall -I/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Headers -dynamiclib -fno-common - LINK_COMMAND_1 = gcc -dynamiclib -fno-common -o $(LIBFILE) - LINK_COMMAND_2 = -framework JavaVM - -Mac note: - The Mac OS X support is experimental, and currently depends on an external script to work. - The script 'nmandsize' is available in the subdirectory 'mac_users' and depends on both 'nm' and 'size'. - The purpose of the script is to gather information which COOJA uses to determine the memory sections addresses. - Observe that, if used, this script must be in the path. - - - - - -The COOJA Simulator - JNI Tests -------------------------------- - -These tests can be used to help understand COOJA errors, and to configure COOJA for new users. -For COOJA to compile JNI libraries successfully, tests 2-5 must be completed. -In level3, only level3a or level3b is necessary to pass. - -You may have to change the configuration in the file 'exttools.cfg'. -When all tests pass, these settings should be entered into the COOJA External tool settings dialog. - -Before running the tests, the COOJA JAR file must be created: -> ant compile_cooja - -To run the first test: -> ant level2 - -For more information including configuration examples: -> ant help - -> ant level2 - [compilation test] - Compiles level2.c to level2.library, using both c compiler and linker. - Java class loads the library and calls a simple native function. - -> ant level3a - [address parsing using map file] - -> ant level3b - [address parsing using command] - -> ant level4 - [fetching reference var] - Calculates offset between relative and absolute memory. - A simple native function increases two counters (from both data and bss sections). - -> ant level5 - [fetches and restores memory segments - the final test] - A simple native function increases two counters (from both data and bss sections). - The current memory (data+bss sections) is fetched and restored between function calls. - The counters should be restored with the memory! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Run either - > ant level3a -or - > ant level3b - -3a tests parsing library addresses using the map file generated at link time. -3b tests parsing library addresses using a command. -At least one of the tests must pass. - -After passing, the 'exttools.cfg' must be updated. -The external tools setting: - PARSE_WITH_COMMAND=true -causes COOJA (and the following tests) to use the command to parse library addresses, -and should be used if test 3b passed. - - PARSE_WITH_COMMAND=false -causes COOJA to parse the generated map file, and should be used if test 3a passed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/cooja/examples/jni_test/exttools.cfg b/tools/cooja/examples/jni_test/exttools.cfg deleted file mode 100644 index f57604727..000000000 --- a/tools/cooja/examples/jni_test/exttools.cfg +++ /dev/null @@ -1,10 +0,0 @@ -# EXTERNAL TOOLS CONFIGURATION -# Change these until all tests pass! -# The working configuration must manually be entered in COOJA - -PATH_C_COMPILER = gcc -COMPILER_ARGS = -Wall -D_JNI_IMPLEMENTATION_ -I'$(JAVA_HOME)/include' -I'$(JAVA_HOME)/include/win32' -LINK_COMMAND_1 = gcc -shared -Wl,-Map=$(MAPFILE) -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -o $(LIBFILE) -LINK_COMMAND_2 = -PARSE_WITH_COMMAND=true -PARSE_COMMAND=nm -C $(LIBFILE) \ No newline at end of file diff --git a/tools/cooja/examples/jni_test/level2/Level2.java b/tools/cooja/examples/jni_test/level2/Level2.java deleted file mode 100644 index e6502c7a2..000000000 --- a/tools/cooja/examples/jni_test/level2/Level2.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: Level2.java,v 1.2 2007/09/10 14:07:12 fros4943 Exp $ - */ - -import java.io.*; - -public class Level2 { - - static { - System.out.println("Loading library now"); - System.load(new File("level2.library").getAbsolutePath()); - } - - private native void test(); - - public Level2() { - System.err.println("Calling native test function"); - test(); - } - - public static void main(String[] args) { - new Level2(); - } - -} diff --git a/tools/cooja/examples/jni_test/level2/level2.c b/tools/cooja/examples/jni_test/level2/level2.c deleted file mode 100644 index e7c84a8b7..000000000 --- a/tools/cooja/examples/jni_test/level2/level2.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: level2.c,v 1.2 2007/09/10 14:07:12 fros4943 Exp $ - */ - -#include -#include - -JNIEXPORT void JNICALL -Java_Level2_test(JNIEnv *env, jobject obj) -{ - fprintf(stderr, "Level 2 OK!\n"); - fflush(stderr); -} diff --git a/tools/cooja/examples/jni_test/level3a/Level3a.java b/tools/cooja/examples/jni_test/level3a/Level3a.java deleted file mode 100644 index f681bd10d..000000000 --- a/tools/cooja/examples/jni_test/level3a/Level3a.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: Level3a.java,v 1.1 2007/09/10 14:06:03 fros4943 Exp $ - */ - -import java.io.*; -import java.util.*; -import org.apache.log4j.xml.DOMConfigurator; - -import se.sics.cooja.GUI; -import se.sics.cooja.contikimote.ContikiMoteType; - -public class Level3a { - private final File externalToolsSettingsFile = new File("../exttools.cfg"); - - public Level3a() { - // Configure logger - DOMConfigurator.configure(GUI.class.getResource("/" + GUI.LOG_CONFIG_FILE)); - - // Load configuration - System.out.println("Loading COOJA configuration"); - GUI.externalToolsUserSettingsFile = externalToolsSettingsFile; - GUI.loadExternalToolsDefaultSettings(); - GUI.loadExternalToolsUserSettings(); - - System.out.println("Locating map file"); - File mapFile = new File("level3a.map"); - if (!mapFile.exists()) { - System.err.println("No map file could be loaded"); - System.exit(1); - } - - System.out.println("Loading map data"); - Vector mapData = ContikiMoteType.loadMapFile(mapFile); - if (mapData == null) { - System.err.println("No map data could be loaded"); - System.exit(1); - } - - System.out.println("Parsing map data"); - Properties addresses = new Properties(); - boolean parseOK = ContikiMoteType.parseMapFileData(mapData, addresses); - if (!parseOK) { - System.err.println("Map data parsing failed"); - System.exit(1); - } - int relDataSectionAddr = ContikiMoteType.loadRelDataSectionAddr(mapData); - int dataSectionSize = ContikiMoteType.loadDataSectionSize(mapData); - int relBssSectionAddr = ContikiMoteType.loadRelBssSectionAddr(mapData); - int bssSectionSize = ContikiMoteType.loadBssSectionSize(mapData); - - System.out.println("Found relative data section address: 0x" + Integer.toHexString(relDataSectionAddr)); - System.out.println("Found data section size: 0x" + Integer.toHexString(dataSectionSize)); - System.out.println("Found relative bss section address: 0x" + Integer.toHexString(relBssSectionAddr)); - System.out.println("Found bss section size: 0x" + Integer.toHexString(bssSectionSize)); - - System.out.println("Checking validity of parsed addresses"); - - String varName; - varName = "var1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "var2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "arr1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "arr2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "uvar1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "uvar2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - if (relDataSectionAddr < 0) { - System.err.println("Data segment address < 0: 0x" + Integer.toHexString(relDataSectionAddr)); - System.exit(1); - } - if (relBssSectionAddr < 0) { - System.err.println("BSS segment address < 0: 0x" + Integer.toHexString(relBssSectionAddr)); - System.exit(1); - } - if (dataSectionSize <= 0) { - System.err.println("Data segment size <= 0: 0x" + Integer.toHexString(dataSectionSize)); - System.exit(1); - } - if (bssSectionSize <= 0) { - System.err.println("BSS segment size <= 0: 0x" + Integer.toHexString(bssSectionSize)); - System.exit(1); - } - - System.out.println("Level 3a OK!"); - } - - public static void main(String[] args) { - new Level3a(); - } - -} diff --git a/tools/cooja/examples/jni_test/level3a/level3a.c b/tools/cooja/examples/jni_test/level3a/level3a.c deleted file mode 100644 index f6be56372..000000000 --- a/tools/cooja/examples/jni_test/level3a/level3a.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: level3a.c,v 1.1 2007/09/10 14:06:03 fros4943 Exp $ - */ - -#include -#include - -int var1=1; -int var2=2; -int var3=2; -int arr1[10]; -int arr2[10]; -int uvar1; -int uvar2; - -JNIEXPORT void JNICALL -Java_Level3a_test(JNIEnv *env, jobject obj) -{ -} diff --git a/tools/cooja/examples/jni_test/level3b/Level3b.java b/tools/cooja/examples/jni_test/level3b/Level3b.java deleted file mode 100644 index c5c90b69d..000000000 --- a/tools/cooja/examples/jni_test/level3b/Level3b.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: Level3b.java,v 1.2 2007/09/18 11:35:10 fros4943 Exp $ - */ - -import java.io.*; -import java.util.*; -import org.apache.log4j.xml.DOMConfigurator; - -import se.sics.cooja.GUI; -import se.sics.cooja.contikimote.ContikiMoteType; - -public class Level3b { - private final File externalToolsSettingsFile = new File("../exttools.cfg"); - - public Level3b() { - // Configure logger - DOMConfigurator.configure(GUI.class.getResource("/" + GUI.LOG_CONFIG_FILE)); - - // Load configuration - System.out.println("Loading COOJA configuration"); - GUI.externalToolsUserSettingsFile = externalToolsSettingsFile; - GUI.loadExternalToolsDefaultSettings(); - GUI.loadExternalToolsUserSettings(); - - System.out.println("Using parse command settings: \n" + - "\tPARSE_COMMAND = "+ GUI.getExternalToolsSetting("PARSE_COMMAND")); - - System.out.println("Locating library file"); - File libFile = new File("level3b.library"); - if (!libFile.exists()) { - System.err.println("Library file " + libFile.getAbsolutePath() + " could not be found!"); - System.exit(1); - } - - System.out.println("Loading command data"); - Vector commandData = ContikiMoteType.loadCommandData(libFile); - if (commandData == null) { - System.err.println("No command data could be loaded"); - System.exit(1); - } - - System.out.println("Parsing command data"); - Properties addresses = new Properties(); - boolean parseOK = ContikiMoteType.parseCommandData(commandData, addresses); - if (!parseOK) { - System.err.println("Command data parsing failed"); - System.exit(1); - } - int relDataSectionAddr = ContikiMoteType.loadCommandRelDataSectionAddr(commandData); - int dataSectionSize = ContikiMoteType.loadCommandDataSectionSize(commandData); - int relBssSectionAddr = ContikiMoteType.loadCommandRelBssSectionAddr(commandData); - int bssSectionSize = ContikiMoteType.loadCommandBssSectionSize(commandData); - - System.out.println("Found relative data section address: 0x" + Integer.toHexString(relDataSectionAddr)); - System.out.println("Found data section size: 0x" + Integer.toHexString(dataSectionSize)); - System.out.println("Found relative bss section address: 0x" + Integer.toHexString(relBssSectionAddr)); - System.out.println("Found bss section size: 0x" + Integer.toHexString(bssSectionSize)); - - System.out.println("Checking validity of parsed addresses"); - String varName; - varName = "var1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "var2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "arr1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "arr2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "uvar1"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "uvar2"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - if (relDataSectionAddr < 0) { - System.err.println("Data segment address < 0: 0x" + Integer.toHexString(relDataSectionAddr)); - System.exit(1); - } - if (relBssSectionAddr < 0) { - System.err.println("BSS segment address < 0: 0x" + Integer.toHexString(relBssSectionAddr)); - System.exit(1); - } - if (dataSectionSize <= 0) { - System.err.println("Data segment size <= 0: 0x" + Integer.toHexString(dataSectionSize)); - System.exit(1); - } - if (bssSectionSize <= 0) { - System.err.println("BSS segment size <= 0: 0x" + Integer.toHexString(bssSectionSize)); - System.exit(1); - } - - System.out.println("Level 3b OK!"); - } - - public static void main(String[] args) { - new Level3b(); - } - -} diff --git a/tools/cooja/examples/jni_test/level3b/level3b.c b/tools/cooja/examples/jni_test/level3b/level3b.c deleted file mode 100644 index fb74ad736..000000000 --- a/tools/cooja/examples/jni_test/level3b/level3b.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: level3b.c,v 1.1 2007/09/10 14:06:23 fros4943 Exp $ - */ - -#include -#include - -int var1=1; -int var2=2; -int var3=2; -int arr1[10]; -int arr2[10]; -int uvar1; -int uvar2; - -JNIEXPORT void JNICALL -Java_Level3b_test(JNIEnv *env, jobject obj) -{ -} diff --git a/tools/cooja/examples/jni_test/level4/Level4.java b/tools/cooja/examples/jni_test/level4/Level4.java deleted file mode 100644 index d1658261e..000000000 --- a/tools/cooja/examples/jni_test/level4/Level4.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: Level4.java,v 1.4 2008/11/20 16:22:28 fros4943 Exp $ - */ - -import java.io.*; -import java.util.Properties; -import java.util.Vector; -import org.apache.log4j.xml.DOMConfigurator; - -import se.sics.cooja.GUI; -import se.sics.cooja.contikimote.ContikiMoteType; - -public class Level4 { - private final File externalToolsSettingsFile = new File("../exttools.cfg"); - - static { - System.load(new File("level4.library").getAbsolutePath()); - } - - private native void doCount(); - - public native void setReferenceAddress(int addr); - - public Level4() { - // Configure logger - DOMConfigurator.configure(GUI.class.getResource("/" + GUI.LOG_CONFIG_FILE)); - - // Load configuration - System.out.println("Loading COOJA configuration"); - GUI.externalToolsUserSettingsFile = externalToolsSettingsFile; - GUI.loadExternalToolsDefaultSettings(); - GUI.loadExternalToolsUserSettings(); - - // Should we parse addresses using map file or command? - boolean useCommand = Boolean.parseBoolean(GUI.getExternalToolsSetting("PARSE_WITH_COMMAND", "false")); - - Properties addresses = new Properties(); - int relDataSectionAddr = -1; - int dataSectionSize = -1; - int relBssSectionAddr = -1; - int bssSectionSize = -1; - - if (useCommand) { - // Parse command output - System.out.println("Parsing using command"); - - File libFile = new File("level4.library"); - if (!libFile.exists()) { - System.err.println("Library file " + libFile.getAbsolutePath() + " could not be found!"); - System.exit(1); - } - - Vector commandData = ContikiMoteType.loadCommandData(libFile); - if (commandData == null) { - System.err.println("No command data could be loaded"); - System.exit(1); - } - - boolean parseOK = ContikiMoteType.parseCommandData(commandData, addresses); - if (!parseOK) { - System.err.println("Command data parsing failed"); - System.exit(1); - } - - relDataSectionAddr = ContikiMoteType.loadCommandRelDataSectionAddr(commandData); - dataSectionSize = ContikiMoteType.loadCommandDataSectionSize(commandData); - relBssSectionAddr = ContikiMoteType.loadCommandRelBssSectionAddr(commandData); - bssSectionSize = ContikiMoteType.loadCommandBssSectionSize(commandData); - } else { - // Parse map file - System.out.println("Parsing using map file"); - File mapFile = new File("level4.map"); - if (!mapFile.exists()) { - System.err.println("No map file could be loaded"); - System.exit(1); - } - - Vector mapData = ContikiMoteType.loadMapFile(mapFile); - if (mapData == null) { - System.err.println("No map data could be loaded"); - System.exit(1); - } - - boolean parseOK = ContikiMoteType.parseMapFileData(mapData, addresses); - if (!parseOK) { - System.err.println("Map data parsing failed"); - System.exit(1); - } - - relDataSectionAddr = ContikiMoteType.loadRelDataSectionAddr(mapData); - dataSectionSize = ContikiMoteType.loadDataSectionSize(mapData); - relBssSectionAddr = ContikiMoteType.loadRelBssSectionAddr(mapData); - bssSectionSize = ContikiMoteType.loadBssSectionSize(mapData); - } - - String varName; - varName = "initialized_counter"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "uninitialized_counter"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - varName = "ref_var"; - if (!addresses.containsKey(varName)) { - System.err.println("Could not find address of: " + varName); - System.exit(1); - } - if (relDataSectionAddr < 0) { - System.err.println("Data segment address < 0: 0x" + Integer.toHexString(relDataSectionAddr)); - System.exit(1); - } - if (relBssSectionAddr < 0) { - System.err.println("BSS segment address < 0: 0x" + Integer.toHexString(relBssSectionAddr)); - System.exit(1); - } - if (dataSectionSize <= 0) { - System.err.println("Data segment size <= 0: 0x" + Integer.toHexString(dataSectionSize)); - System.exit(1); - } - if (bssSectionSize <= 0) { - System.err.println("BSS segment size <= 0: 0x" + Integer.toHexString(bssSectionSize)); - System.exit(1); - } - - int relRefAddress = (Integer) addresses.get("ref_var"); - System.out.println("Relative reference address: 0x" + Integer.toHexString(relRefAddress)); - setReferenceAddress(relRefAddress); - - doCount(); - doCount(); - doCount(); - doCount(); - doCount(); - - System.err.println("Level 4 OK!"); - } - - - public static void main(String[] args) { - new Level4(); - } - -} diff --git a/tools/cooja/examples/jni_test/level4/level4.c b/tools/cooja/examples/jni_test/level4/level4.c deleted file mode 100644 index 3adb921c2..000000000 --- a/tools/cooja/examples/jni_test/level4/level4.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: level4.c,v 1.3 2008/11/20 16:22:28 fros4943 Exp $ - */ - -#include -#include - -long ref_var; /* Placed somewhere in the BSS section */ - -int initialized_counter=1; /* Variable in data section */ -int uninitialized_counter; /* Variable in BSS section */ - -JNIEXPORT void JNICALL -Java_Level4_setReferenceAddress(JNIEnv *env, jobject obj, jint addr) -{ - /*printf("relative reference address is %p\n", addr);*/ - /*printf("absolute reference address is %p\n", &ref_var);*/ - - ref_var = (((long)&ref_var) - ((long)addr)); - printf("Offset is 0x%p\n", ref_var); - fflush(stdout); -} - -JNIEXPORT void JNICALL -Java_Level4_doCount(JNIEnv *env, jobject obj) -{ - printf(">> DATA_counter=\t%i\tBSS_counter=\t%i\n", initialized_counter++, uninitialized_counter++); - fflush(stdout); -} diff --git a/tools/cooja/examples/jni_test/level5/Level5.java b/tools/cooja/examples/jni_test/level5/Level5.java deleted file mode 100644 index 8c624d63e..000000000 --- a/tools/cooja/examples/jni_test/level5/Level5.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: Level5.java,v 1.5 2008/11/20 16:22:28 fros4943 Exp $ - */ - -import java.io.*; -import java.util.Properties; -import java.util.Vector; - -import org.apache.log4j.BasicConfigurator; -import se.sics.cooja.GUI; -import se.sics.cooja.SectionMoteMemory; -import se.sics.cooja.contikimote.ContikiMoteType; - -public class Level5 { - private final File externalToolsSettingsFile = new File("../exttools.cfg"); - - static { - System.load(new File("level5.library").getAbsolutePath()); - } - - private native void doCount(); - - public native void setReferenceAddress(int addr); - public native void getMemory(int addr, int length, byte[] mem); - public native void setMemory(int addr, int length, byte[] mem); - - private int javaDataCounter = 1; - private int javaBssCounter = 0; - - public Level5() { - - // Configure logger - BasicConfigurator.configure(); - - // Load configuration - System.out.println("Loading COOJA configuration"); - GUI.externalToolsUserSettingsFile = externalToolsSettingsFile; - GUI.loadExternalToolsDefaultSettings(); - GUI.loadExternalToolsUserSettings(); - - // Should we parse addresses using map file or command? - boolean useCommand = Boolean.parseBoolean(GUI.getExternalToolsSetting("PARSE_WITH_COMMAND", "false")); - - Properties addresses = new Properties(); - int relDataSectionAddr = -1; - int dataSectionSize = -1; - int relBssSectionAddr = -1; - int bssSectionSize = -1; - - if (useCommand) { - // Parse command output - System.out.println("Parsing using command"); - - File libFile = new File("level5.library"); - if (!libFile.exists()) { - System.err.println("Library file " + libFile.getAbsolutePath() + " could not be found!"); - System.exit(1); - } - - Vector commandData = ContikiMoteType.loadCommandData(libFile); - if (commandData == null) { - System.err.println("No command data could be loaded"); - System.exit(1); - } - - boolean parseOK = ContikiMoteType.parseCommandData(commandData, addresses); - if (!parseOK) { - System.err.println("Command data parsing failed"); - System.exit(1); - } - - relDataSectionAddr = ContikiMoteType.loadCommandRelDataSectionAddr(commandData); - dataSectionSize = ContikiMoteType.loadCommandDataSectionSize(commandData); - relBssSectionAddr = ContikiMoteType.loadCommandRelBssSectionAddr(commandData); - bssSectionSize = ContikiMoteType.loadCommandBssSectionSize(commandData); - } else { - // Parse map file - System.out.println("Parsing using map file"); - File mapFile = new File("level5.map"); - if (!mapFile.exists()) { - System.err.println("No map file could be loaded"); - System.exit(1); - } - - Vector mapData = ContikiMoteType.loadMapFile(mapFile); - if (mapData == null) { - System.err.println("No map data could be loaded"); - System.exit(1); - } - - boolean parseOK = ContikiMoteType.parseMapFileData(mapData, addresses); - if (!parseOK) { - System.err.println("Map data parsing failed"); - System.exit(1); - } - - relDataSectionAddr = ContikiMoteType.loadRelDataSectionAddr(mapData); - dataSectionSize = ContikiMoteType.loadDataSectionSize(mapData); - relBssSectionAddr = ContikiMoteType.loadRelBssSectionAddr(mapData); - bssSectionSize = ContikiMoteType.loadBssSectionSize(mapData); - } - - int relRefAddress = (Integer) addresses.get("ref_var"); - setReferenceAddress(relRefAddress); - - System.out.println("Creating section memory"); - byte[] initialDataSection = new byte[dataSectionSize]; - byte[] initialBssSection = new byte[bssSectionSize]; - - getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); - getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); - SectionMoteMemory memory = new SectionMoteMemory(addresses); - memory.setMemorySegment(relDataSectionAddr, initialDataSection); - memory.setMemorySegment(relBssSectionAddr, initialBssSection); - - int dataCounter, bssCounter; - - System.out.print("Checking initial values: "); - dataCounter = memory.getIntValueOf("initialized_counter"); - bssCounter = memory.getIntValueOf("uninitialized_counter"); - if (dataCounter != javaDataCounter) { - System.out.println("DATA mismatch (" + dataCounter + " != " + javaDataCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else if (bssCounter != javaBssCounter) { - System.out.println("BSS mismatch (" + bssCounter + " != " + javaBssCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else { - System.out.println("OK!"); - } - - System.out.println("Increasing counters 5 times"); - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - - System.out.print("Checking increased values: "); - getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); - getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); - memory.setMemorySegment(relDataSectionAddr, initialDataSection); - memory.setMemorySegment(relBssSectionAddr, initialBssSection); - dataCounter = memory.getIntValueOf("initialized_counter"); - bssCounter = memory.getIntValueOf("uninitialized_counter"); - if (dataCounter != javaDataCounter) { - System.out.println("DATA mismatch (" + dataCounter + " != " + javaDataCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else if (bssCounter != javaBssCounter) { - System.out.println("BSS mismatch (" + bssCounter + " != " + javaBssCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else { - System.out.println("OK!"); - } - - System.out.println("Storing both memory segments now"); - byte[] savedDataSection = new byte[dataSectionSize]; - byte[] savedBssSection = new byte[bssSectionSize]; - int savedDataCounter = dataCounter; - int savedBssCounter = bssCounter; - getMemory(relDataSectionAddr, dataSectionSize, savedDataSection); - getMemory(relBssSectionAddr, bssSectionSize, savedBssSection); - - System.out.println("Increasing counters 3 times"); - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - - System.out.print("Checking increased values: "); - getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); - getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); - memory.setMemorySegment(relDataSectionAddr, initialDataSection); - memory.setMemorySegment(relBssSectionAddr, initialBssSection); - dataCounter = memory.getIntValueOf("initialized_counter"); - bssCounter = memory.getIntValueOf("uninitialized_counter"); - if (dataCounter != javaDataCounter) { - System.out.println("DATA mismatch (" + dataCounter + " != " + javaDataCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else if (bssCounter != javaBssCounter) { - System.out.println("BSS mismatch (" + bssCounter + " != " + javaBssCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else { - System.out.println("OK!"); - } - - System.out.println("Restoring data segment"); - setMemory(relDataSectionAddr, dataSectionSize, savedDataSection); - javaDataCounter = savedDataCounter; - - System.out.println("Increasing counters 3 times"); - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - doCount(); javaDataCounter++; javaBssCounter++; - - System.out.print("Checking reset data counter: "); - getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); - getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); - memory.setMemorySegment(relDataSectionAddr, initialDataSection); - memory.setMemorySegment(relBssSectionAddr, initialBssSection); - dataCounter = memory.getIntValueOf("initialized_counter"); - bssCounter = memory.getIntValueOf("uninitialized_counter"); - if (dataCounter != javaDataCounter) { - System.out.println("DATA mismatch (" + dataCounter + " != " + javaDataCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else if (bssCounter != javaBssCounter) { - System.out.println("BSS mismatch (" + bssCounter + " != " + javaBssCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else { - System.out.println("OK!"); - } - - System.out.println("Restoring bss segment"); - setMemory(relBssSectionAddr, bssSectionSize, savedBssSection); - javaBssCounter = savedBssCounter; - - System.out.print("Checking reset bss counter: "); - getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); - getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); - memory.setMemorySegment(relDataSectionAddr, initialDataSection); - memory.setMemorySegment(relBssSectionAddr, initialBssSection); - dataCounter = memory.getIntValueOf("initialized_counter"); - bssCounter = memory.getIntValueOf("uninitialized_counter"); - if (dataCounter != javaDataCounter) { - System.out.println("DATA mismatch (" + dataCounter + " != " + javaDataCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else if (bssCounter != javaBssCounter) { - System.out.println("BSS mismatch (" + bssCounter + " != " + javaBssCounter + ")"); - System.out.println("FAILED!"); - System.exit(1); - } else { - System.out.println("OK!"); - } - - System.out.println("\n"); - System.out.println("Reading and writing memory segments via JNI successfully"); - System.out.println("Level 5 OK!"); - } - - public static void main(String[] args) { - new Level5(); - } - -} diff --git a/tools/cooja/examples/jni_test/level5/level5.c b/tools/cooja/examples/jni_test/level5/level5.c deleted file mode 100644 index c3328da19..000000000 --- a/tools/cooja/examples/jni_test/level5/level5.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: level5.c,v 1.4 2008/11/20 16:22:28 fros4943 Exp $ - */ - -#include -#include -#include -#include - -long ref_var; /* Placed somewhere in the BSS section */ - -int initialized_counter=1; /* Variable in data section */ -int uninitialized_counter; /* Variable in BSS section */ - -JNIEXPORT void JNICALL -Java_Level5_setReferenceAddress(JNIEnv *env, jobject obj, jint addr) -{ - /*printf("relative reference address is %p\n", addr);*/ - /*printf("absolute reference address is %p\n", &ref_var);*/ - - ref_var = (((long)&ref_var) - ((long)addr)); - printf("Offset is 0x%p\n", ref_var); - fflush(stdout); -} - -JNIEXPORT void JNICALL -Java_Level5_doCount(JNIEnv *env, jobject obj) -{ - printf(">> DATA_counter=\t%i\tBSS_counter=\t%i\n", ++initialized_counter, ++uninitialized_counter); - fflush(stdout); -} - -JNIEXPORT void JNICALL -Java_Level5_getMemory(JNIEnv *env, jobject obj, jint rel_addr, jint length, jbyteArray mem_arr) -{ - (*env)->SetByteArrayRegion( - env, - mem_arr, - 0, - (size_t) length, - (jbyte *) (((long)rel_addr) + ref_var) - ); -} - -JNIEXPORT void JNICALL -Java_Level5_setMemory(JNIEnv *env, jobject obj, jint rel_addr, jint length, jbyteArray mem_arr) -{ - jbyte *mem = (*env)->GetByteArrayElements(env, mem_arr, 0); - memcpy( - (char*) (((long)rel_addr) + ref_var), - mem, - length); - (*env)->ReleaseByteArrayElements(env, mem_arr, mem, 0); -}