Port de sablevm sous Windows
Licence
Ce document est gratuit; vous pouvez le
redistribuer et/ou le modifier en accord avec les termes de la GNU
Lesser General Public License, telle que stipulée dans les
textes du permis 2.1(ou une version ultérieure) de la Free
Software Foundation. Ce document est distribué dans
l'espoir qu'il sera utile mais sans aucune garantie
de quelque nature que ce soit.
TABLE DES MATIÈRES
- 1.
Introduction
-
1.1 Objectif de ce document
-
1.2 Survol du document
-
1.3 Glossaire
-
-
2. Première étape: Port sous Cygwin
-
2.1 Description générale des étapes
du port
-
-
2.1.1
Installation de Cygwin
-
2.1.2
Installation d'un compilateur java
-
2.1.3
Compilation et exécution de sablevm
-
2.1.4
Compilation et exécution
de sablevm-classpath
-
-
2.2.
Description spécifique des étapes du port
-
-
2.2.1
Détail des modifications pour sablevm
-
2.2.2
Détail des modifications pour le classpath
-
-
3. Deuxième étape: Port sous Windows
-
-
4. À faire
-
4.1 Port de sablevm sous
Cygwin
-
4.2 Port de sablevm sous
Windows
-
-
5. Contributions
-
-
6. Annexes
-
6.1 Port de sablevm sous Cygwin
-
-
6.1.1 Fichier « diff
» de sablevm
-
6.1.2 Fichier
« diff » de sablevm-classpath
-
-
6.2 Port de sablevm sous Windows
-
1.1 Objectif de ce
document
Ce
document a pour mandat de comptabiliser et d'expliquer les problèmes
rencontrés et les solutions apportées lors du
port, sous Windows, de la machine virtuelle java: sablevm. Il
s'adresse donc à toutes
personnes intéressées à poursuivre le port de
sablevm sous Windows ou simplement désirant tenter
l'installation de sablevm sous cette même plate-forme.
Dans un premier temps, le
port de sablevm se fera sous Cygwin et puis ensuite, à l'aide
des outils purement Microsoft, directement sous Windows. C'est
pourquoi, ce document est divisé en deux parties principales
soit la partie traitant du port sous Cygwin soit la partie expliquant
le port sous Windows.
Ce
document est donc un travail en cours et tout individu désirant
y apporter sa contribution est bien venu de le faire. Le tableau
ci-dessous contient la liste de tout changement important apporté
au document ainsi que la date, l'auteur(e) et le numéro de
version qui s'y rattachent. Pour un suivi des modifications adéquat,
il est donc important que chaques contributeurs conservent ce tableau
à jour.
Versions
Version
|
Auteur(e)
|
Date
|
Modification(s)
|
v1.0
|
Mélanie Lord
|
15/12/2003
|
|
|
|
|
|
1.2 Survol de ce document
Sections principales
Section
|
Description
|
1. Introduction
|
Cette section présente les grandes
lignes de ce document: ses intentions, à qui il s'adresse
ainsi qu'une brève description de ses différentes
sections. Cette section comprend aussi un glossaire des termes
utilisés dans ce document.
|
2. Première étape: Port sous
Cygwin
|
Cette section montre les changements
apportés pour réaliser le port de sablevm sous
Cygwin.
|
- 2.1
Description générale du port
|
Mise en contexte des problèmes
rencontrés et explication générale des
solutions apportées.
|
- 2.2.Description
spécifique du port
|
Commentaires sur les fichiers « diff »
résultant des modifications apportées à
sablevm ainsi qu'à sablevm-classpath.
|
3. Deuxième étape: Port sous
Windows
|
Cette section montre les changements
apportés pour réaliser le port de sablevm sous
Windows.
|
4. À
faire
|
Cette section fait l'inventaire des étapes
qu'il reste à franchir pour la réalisation complète
du port de sablevm sous Cygwin et sous Windows.
|
5. Contributions
|
Cette section présente la liste de
touts les contributeurs autres que ceux mentionnés dans le
tableau des versions du présent document.
|
6. Annexes
|
Cette section contient tout document jugé
intéressant et complémentaire au présent
document.
|
1.3 Glossaire
Glossaire
Terme
|
Signification
|
sablevm
|
La machine virtuelle
java dont le nom est sablevm
|
dll
|
Librairie dynamique
(dynamic link library)
|
Cygwin
|
Un émulateur de Linux sous Windows
|
Libsablevm
|
La librairie dynamique libsablevm.
|
2. Première étape: Port sous Cygwin
2.1 Description générale des étapes du port
2.1.1 Installation de
Cygwin
Évidemment, avant de
pouvoir porter sablevm sous Cygwin, il faut avoir préalablement
installé Cygwin sous Windows. Lors de l'installation, il faut
s'assurer d'installer toutes les librairies requises et tous les
outils nécessaires pour la compilation de sablevm (libpopt,
libltdl, libffi, libtool, gcc...). Il est recommandé de
consulter la
documentation de sablevm à ce sujet.
Toutes les librairies
requises pour exécuter sablevm sont disponibles sous Cygwin à
l'exception de la librairie libffi dont l'installation a été
un peu plus compliquée. Ce cas particulier est discuté
à la section 2.1.3.
Notes:
2.1.2
Installation d'un compilateur java
Un
compilateur java est nécessaire pour compiler les
fichiers java contenus dans sablevm-classpath. Il doit être
installé sous Cygwin. Celui qui a été utilisé
pour le port est Jikes1.18. et celui-ci peut être
téléchargé à cette adresse:
http://anfaenger.de/cygwin/jikes/jikes-1.18-src.tar.bz2
2.1.3
Compilation et exécution
de sablevm
Le port de sablevm sous Cygwin a été
effectué avec une version de sablevm qu'on peut récupérer
soit avec Subversion, à l'adresse
svn.sablevm.org/sablevm/branches/staging/ ou en téléchargeant
une image de sablevm-staging à l'adresse
http://devel.sablevm.org/shot/latest/sablevm-staging-svn.tar.gz
Configuration
Pour la première
tentative du port, afin d'obtenir la configuration la plus
« vanille » de sablevm (version « switch »,
sans signaux, sans « inlined threading » etc.) le
script de configuration a été exécuté
avec l'option « enable-debugging-features » qui
assure la compilation de la version la plus simple possible. Il
serait intéressant, dans le futur, d'assurer le port d'autres
configurations de sablevm telles que « inlined »,
« direct », « traditional »,
« nosig » etc.
Compilation
et Exécution
Lors de la compilation, une
série d'avertissements de ce genre a laissé supposer
qu'il y aurait certainement des problèmes à l'exécution
de sablevm.
-
*** Warning: This system can not link to
static lib archive ../fdlibm/libfdlibm.la.
*** I have the
capability to make that library automatically link in when
***
you link to this library. But I can only do this if you have
a
*** shared version of the library, which you do not
appear to have. -
Effectivement, les librairies dynamiques
n'ayant pas toutes été créées lors de la
compilation sous Cygwin, l'exécution a échoué en
lançant une erreur reliée à la liaison des
librairies, pendant l'exécution.
En fait, deux librairies
manquaient dans leur version dynamique: libsablevm et libffi. En ce
qui concerne les librairies libpopt et libltdl, les versions
dynamiques avaient été créées et
installées correctement, probablement à cause du fait
que ces deux librairies existaient sous forme de paquetage créé
exprès pour Cygwin contrairement à libffi, installée
via gcc et à libsablevm. Il fallait donc trouver le moyen de
créer les versions dynamiques des librairies requises
manquantes.
Librairies
dynamiques sous Cygwin
Lors de la création
d'une librairie dynamique, 3 fichiers sont créés.
Par exemple, supposons que
le nom de la librairie soit « toto » et que sa
version soit 2, si on créait une version dynamique de cette
librairie, on obtiendrait ces 3 fichiers:
libtoto.dll.a
|
|
libtoto.la
|
Librairie dynamique créée par libtool.
Fait le lien entre le fichier .dll et le fichier .dll.a.
Contient des informations
telles la version de la librairie, son répertoire
d'installation etc.
|
cygtoto-2.dll
|
|
- NOTES:
Le fichier .dll.a et le fichier .la sont placés dans un
répertoire /lib tandis que le fichier .dll est placé
dans un répertoire /bin par défaut.
Il
est possible de charger(dlopen) autant le fichier .la que le fichier
.dll.
Pour forcer libtool à
créer des librairies dynamiques sous Cygwin, le truc qui a
fonctionné a été d'ajouter l'option
« -no-undefined » à la ligne ou apparaît
la variable LDFLAGS, drapeau utilisé par libtool lorsqu'il lie
un programme à une librairie dynamique. Pour libsablevm, il
n'a suffit que d'ajouter cette option au Makefile pour obtenir les 3
fichiers de la version dynamique dans les répertoires
/lib et /bin du répertoire d'installation de sablevm .
En
ce qui concerne libffi, l'exercice a été un peu plus
ardu.
Obtention
d'une version dynamique de la librairie libffi
Une
version statique de libffi avait déjà été
installée via l'installation de gcc sous Cygwin mais les
fichiers d'entêtes, par exemple, étaient manquants.
Les
étapes suivantes sont celles qui ont permis la création
d'une version dynamique fonctionnelle de libffi:
Puisque
la librairie libffi est maintenue par gcc, téléchargement
d'une version récente de gcc à partir du site de
Debian par exemple.
Application
d'un changement dans le fichier gcc../libffi/configure.in
pour permettre la compilation séparée de libffi plutôt
que la compilation complète de gcc.
- libffi/configure.in~
2003-10-22 01:02:59.000000000 +0200
-
+++
libffi/configure.in 2003-11-11 12:33:40.000000000 +0100
-
@@
-29,6 +29,7 @@
-
else
-
libffi_basedir=
-
fi
-
+libffi_basedir=
-
AC_SUBST(libffi_basedir)
-
AC_CONFIG_AUX_DIR(${libffi_vasedir}..)
|
-
**voir
la page web à l'adresse suivanrte pour plus d'information:
http://devel.sablevm.org/wiki/index.cgi?LibFFI
Ajout de
deux macros dans le fichier acinclude.m4, pour permettre au
script gcc.../libffi/autogen.sh de fonctionner correctement:
- AC_DEFUN([AC_C_BIGENDIAN_CROSS]
-
AC_DEFUN([AC_COMPILE_CHECK_SIZEOF]
|
Exécution
du script gcc.../libffi/autogen.sh pour regénérer
le script configuration.
Exécution
du processus d'installation normale de libffi (configure, make et
make install) pour obtenir une version statique de libffi et du même
coup, les fichiers d'entêtes de libffi. Une version
dynamique(dll) est aussi créée et installée à
ce moment mais cette version est presque vide et n'est pas dutout
fonctionnelle.
Reconfiguration avec l'option
« --enable-shared » (peut-être non
indispensable) et compilation de libffi, à la main, en
modifiant la ligne de compilation originale, afin de forcer la
création d'une librairie dynamique fonctionnelle:
La ligne de compilation originale ressemble à
ceci (on remarque qu'il y manque la liste
des fichiers objets):
|
- gcc
-shared -o .libs/cygffi-2-00-beta.dll
-Wl,--image-base=0x10000000 -Wl,out-implib,.libs/libffi.dll.a
|
La nouvelle ligne de compilation, intégrant,
cette fois, la liste des fichiers objets, devrait ressembler à
ceci:
|
- gcc
-shared \
-
./src/debug.o
./src/java_raw_api.o ./src/prep_cif.o \
-
./src/raw_api.o
./src/types.o ./src/x86/ffi.o ./src/x86/win32.o \
-
-o
.libs/cygffi-2-00-beta.dll -Wl,--image-base=0x10000000 \
-
-Wl,--out-implib,.libs/libffi.dll.a
|
L'exécution
de la ligne de commande ci-dessus compile une version dynamique
pleinement fonctionnelle de la librairie libffi.
|
Impossibilité,
pour une librairie dynamique, de se charger elle-même.
L'histoire
de la création des librairies dynamiques étant réglée,
une autre difficulté s'est manifestée:
Sous
Cygwin, une librairie dynamique ne peut obtenir un « handle »
d'elle-même. En d'autres termes, la commande
dlopen(NULL) ne fonctionne pas. Cette constatation a fait
apparaitre un autre obstacle étant donné que la
librairie libsablevm utilisait la commande dlopen(NULL) pour obtenir
un « Handle » pointant sur elle-même afin
de faire appel à d'autres fonctions(en
obtenant un pointeur sur ces fonctions) contenues, elles
aussi, dans la librairie dynamique libsablevm.
La
solution proposée et adoptée pour résoudre
ce contre-temps a été de construire, au début de
l'exécution de la machine virtuelle, une liste de toutes les
adresses des fonctions à
exporter de la librairie dynamique libsablevm et conserver cette
liste en mémoire pour y référer à
volonté. Un arbre
binaire (splay tree), dont chaque noeud a pour clé le
nom de la fonction et pour donnée, le pointeur à la
fonction de ce nom, a été mis en place. Chaques
fonctions exportées a été insérées
dans cet arbre. Ainsi, il est désormais possible d'obtenir un
pointeur à une fonction exportée de libsablevm
directement en la recherchant, par son nom, dans l'arbre binaire. La
mise en place de cet arbre binaire n'a pas été très
laborieuse puisque sablevm contenait déjà un dispositif
permettant d'implanter rapidement ce genre de structure, lorsque
désirée. Les détails de cette opération
sont expliqués à la section 2.2.1.
2.1.4 Compilation et exécution
de sablevm-classpath
La version du classpath
correspondant à la version de sablevm utilisée pour le
port peut se récupérer soit, avec subversion, à
l'adresse svn.sablevm.org/svn/sablevm-classpath/branches/staging/
soit, en téléchargeant une image de
sablevm-classpath-staging à l'adresse
http://devel.sablevm.org/shot/latest/sablevm-classpath-staging-svn.tar.gz
Dans un premier temps, pour
arriver à compiler sablevm-classpath, il a été
nécessaire de transformer quelques lignes de quelques
fichiers, en commentaires. Entre autre, par exemple, la compilation
de gtk-peer a été annulée pour facilité
la compilation du classpath sous Cygwin. Cette solution n'est
certainement pas élégante et demeure temporaire. Il
sera nécessaire, dans le futur, de corriger cela.
Après avoir réussi
à compiler le classpath, il a fallu ajouter, comme dans le cas
de sablevm, l'option « -no-undefined » à
la ligne ou la variable LDFLAGS apparaît et ce, pour tous les
Makefiles de toutes les librairies natives, afin de générer
les versions dynamiques de ces librairies.
Finalement, il n'est resté
qu'un petit détail à régler: À ce jour,
le nom des librairies dynamiques chargées, dans le classpath,
était codé directement comme portant l'extension
« .so ». Comme, sous Cygwin, les librairies à
charger portent l'extension .la (ou .dll), cela posait un problème.
Pour l'instant, cette difficulté a été réglée
en codant directement l'extension .la. Cette solution est évidemment
temporaire et est appelée à être améliorée
dans le futur.
Le détail des
changements apportés au classpath est exposé à
la section 2.2.2.
2.2 Description spécifique des étapes du port
2.2.1
Détails des modifications pour sablevm
- Index:
configure.ac
-
===================================================================
-
---
configure.ac (revision 1204)
-
+++
configure.ac (revision 1295)
-
@@
-6,6 +6,10 @@
-
Ajout
d'une macro pour permettre un message significatif lors de la
configuration
-
si
la version d'autoconf n'est pas au moins celle recommandée
ie 2.52
-
dnl
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
AC_INIT([sablevm],
[1.0.9], [http://www.sablevm.org/])
-
+
-
+dnl
minimal version of autoconf under cygwin
-
+AC_PREREQ(2.52)
-
+
-
AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME,
AC_PACKAGE_VERSION)
-
AM_CONFIG_HEADER(src/include/config.h)
-
@@
-258,6 +262,21 @@
-
Définition
du symbole=PLATEFORM_WIN32 si l'hôte est Cygwin(ou Mingw).
-
La
définition de ce symbole servira, plus tard, dans le
Makefile, de condition
-
pour
définir une variable nécessaire à la
génération des librairies dynamiques sous
-
Cygwin.
-
echo
"$as_me:$LINENO: result: no" >&5
-
echo
"${ECHO_T}no" >&6
-
fi
-
+
-
+AC_MSG_CHECKING([for
some Win32 platform])
-
+
-
+case
"$host" in
-
+
*-*-mingw*|*-*-cygwin*)
-
+
platform_win32=yes
-
+
;;
-
+
*)
-
+
platform_win32=no
-
+
;;
-
+esac
-
+AC_MSG_RESULT([$platform_win32])
-
+AM_CONDITIONAL(PLATFORM_WIN32,
test "$platform_win32" = "yes")
-
+
-
dnl
TODO: we should allow user to force if the __clear_cache was
used or not
-
case
"$system_clear_cache" in
-
yes)AC_DEFINE(HAS_SYSTEM_CLEAR_CACHE,1,use
__clear_cache) ;;
-
Index:
src/libsablevm/util2.c
-
===================================================================
-
---
src/libsablevm/util2.c (revision 1204)
-
+++
src/libsablevm/util2.c (revision 1295)
-
@@
-446,6 +446,22 @@
-
Fonction
de comparaison devant être fournie pour la mise en place
de l'arbre binaire (splay tree)
-
contenant
les adresses de toutes les fonctions exportables de la librairie
dynamique libsablevm.
-
/*
-
----------------------------------------------------------------------
-
+_svmf_tree_compare_function
-
+----------------------------------------------------------------------
-
+*/
-
+inline
static jint
-
+_svmf_tree_compare_function
(_svmt_function_node * value1,
-
+
_svmt_function_node * value2)
-
+{
-
+
assert (value1 != NULL);
-
+
assert (value2 != NULL);
-
+
-
+
return strcmp (value1->name, value2->name);
-
+
-
+}
-
+
-
+/*
-
+----------------------------------------------------------------------
-
_svmf_tree_compare_interface_method_signature
-
----------------------------------------------------------------------
-
*/
-
Index:
src/libsablevm/exported_functions.m4.c
-
===================================================================
-
---
src/libsablevm/exported_functions.m4.c (revision 0)
-
+++
src/libsablevm/exported_functions.m4.c (revision 1295)
-
@@
-0,0 +1,72 @@
-
Ce
nouveau fichier est responsable de la génération
du fichier exported_functions.c.
-
Pour
chaque fonction exportable de libsablevm, listée dans le
fichier exported_functions.list,
-
l'adresse
de la fonction est inséré dans l'arbre binaire des
fonctions exportables de libsablevm.
-
Chaque
noeud de l'arbre contient une clé, qui est le nom de la
fonction et une donnée qui est
-
l'adresse
de la fonction.
-
+/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_file_head
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+m4svm_define_begin
v = ":], [:m4svm_file_head:])";
-
+
-
+static
jint
-
+m4svmf_initialize_functions_tree
(_svmt_JNIEnv *env)
-
+{
-
+
/*node to insert in the functions splay tree*/
-
+
_svmt_function_node *function_node = NULL;
-
+
-
+
/*
-
+
* Stocking the pointer to each function to export from
-
+
* libsablevm in a splay tree
-
+
*/
-
+
-
+
m4svm_define_end v = ":])";
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_file_tail
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+
m4svm_define_begin v = ":], [:m4svm_file_tail:])";
-
+
return JNI_OK;
-
+}
-
+
-
+m4svm_define_end
v = ":])";
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_java_function
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+/*
-
+
* This macro can be multi-called.
-
+
* m4svm_multicall(m4svm_java_function)
-
+
*/
-
+
-
+void
-
+M4svm_java_function
()
-
+{
-
+
-
+
m4svm_define_begin v = ":], [:m4svm_java_function:])";
-
+
-
+
/* Put address of $1 into splay tree */
-
+
-
+
if (_svmm_gzalloc_function_node (env, function_node) != JNI_OK)
-
+
{
-
+
return JNI_ERR;
-
+
}
-
+
-
+
function_node->name = "$1";
-
+
function_node->code = (void (*)(void))$1;
-
+
-
+
_svmm_tree_insert_function
(env->vm->class_loading.boot_loader.functions_tree_root,
function_node);
-
+
-
+
m4svm_define_end v = ":])";
-
+
-
+}
-
Index:
src/libsablevm/invoke_interface.c
-
===================================================================
-
---
src/libsablevm/invoke_interface.c (revision 1204)
-
+++
src/libsablevm/invoke_interface.c (revision 1295)
-
C'est
ici que la fonction dlopen(NULL) était utilisée.
Cette instruction est ici remplacée
-
par
l'initialisation du « handle » à
NULL. Plus tard, dans la fonction svmf_bind_native_method
-
du
fichier native.c, si le « handle » est
égal à NULL, c'est à ce moment que la
méthode sera
-
directement
recherchée dans l'arbre binaire, sans avoir recours au
« handle » habituel.
-
@@
-360,6 +360,7 @@
-
goto
error;
-
}
-
+
/*
-
vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
handle
= lt_dlopen (NULL);
-
if
(vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
@@
-367,6 +368,14 @@
-
{
-
goto
error;
-
}
-
+
-
+
In this particular case, instead of libsablevm dlopen itself, we
-
+
initialize the handle to NULL and this case will be manage in
the function
-
+
_svmf_bind_native_method in native.c: if the handle is null,
search
-
+
the handle in the functions splay tree (trying with short and
long name).
-
+
*/
-
+
vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
+
handle = NULL;
-
/*
time to bootstrap! */
-
if
(_svmf_bootstrap (env) != JNI_OK)
-
Index:
src/libsablevm/exported_functions.list
-
===================================================================
-
---
src/libsablevm/exported_functions.list (revision 0)
-
+++
src/libsablevm/exported_functions.list (revision 1295)
-
@@
-0,0 +1,141 @@
-
Liste
des fonctions exportables de la librairie dynamique libsablevm.
Cette liste est utilisée
-
par
le fichier exported_functions.m4.c pour générer le
fichier exported_functions.c qui contient
-
le
code qui initialise l'arbre binaire des fonctions exportées
de libsablevm en y insérant toutes
-
les
adresse de ces fonctions.
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
-
+----------------------------------------------------------------------
-
+head
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_name
-
+
-
+----------------------------------------------------------------------
-
+file_head
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_head
-
+
-
+----------------------------------------------------------------------
-
+list
of internal java function
-
+----------------------------------------------------------------------
-
+
-
+m4svm_java_function_begin[:
-
+
-
+JNI_GetDefaultJavaVMInitArgs
-
+JNI_GetCreatedJavaVMs
-
+JNI_CreateJavaVM
-
+Java_java_io_VMObjectStreamClass_hasClassInitializer
-
+Java_java_lang_Object_getClass
-
+Java_java_lang_ProcessImpl_nativeWaitFor
-
+Java_java_lang_Runtime_availableProcessors
-
+Java_java_lang_Runtime_freeMemory
-
+Java_java_lang_Runtime_totalMemory
-
+Java_java_lang_Runtime_maxMemory
-
+Java_java_lang_Runtime_execInternal
-
+Java_java_lang_Runtime_exitInternal
-
+Java_java_lang_Runtime_runFinalization
-
+Java_java_lang_Runtime_gc
-
+Java_java_lang_Runtime_traceInstructions
-
+Java_java_lang_Runtime_traceMethodCalls
-
+Java_java_lang_Runtime_nativeLoad
-
+Java_java_lang_Runtime_getBootstrapClassPath
-
+Java_java_lang_Runtime_getBootstrapLibraryPath
-
+Java_java_lang_Runtime_getSableVMVersion
-
+Java_java_lang_Runtime_getFileSeparator
-
+Java_java_lang_Runtime_getPathSeparator
-
+Java_java_lang_Runtime_getLineSeparator
-
+Java_java_lang_Runtime_getUserName
-
+Java_java_lang_Runtime_getUserHome
-
+Java_java_lang_Runtime_getWorkDir
-
+Java_java_lang_Runtime_getPropertyCount
-
+Java_java_lang_Runtime_getProperty
-
+Java_java_lang_SecurityManager_getClassContext
-
+Java_java_lang_VMThread_yield
-
+Java_java_lang_VMThread_nativeIsAlive
-
+Java_java_lang_VMThread_nativeStart
-
+Java_java_lang_VMThread_currentThread
-
+Java_java_lang_Throwable_nativeGetStackTraceList
-
+Java_java_lang_VMClass_isArray
-
+Java_java_lang_VMClass_isInstance
-
+Java_java_lang_VMClass_getModifiers
-
+Java_java_lang_VMClass_isInterface
-
+Java_java_lang_VMClass_getSuperclass
-
+Java_java_lang_VMClass_getInterfaces
-
+Java_java_lang_VMClass_getDeclaredFields
-
+getDeclaredMethodsConstructors_helper
-
+Java_java_lang_VMClass_getDeclaredMethods
-
+Java_java_lang_VMClass_getDeclaredConstructors
-
+Java_java_lang_VMClass_isAssignableFrom
-
+Java_java_lang_VMClass_getClassLoader
-
+Java_java_lang_VMClass_getName
-
+Java_java_lang_VMClass_isInitialized
-
+Java_java_lang_VMClass_setInitialized
-
+Java_java_lang_VMClass_step7
-
+Java_java_lang_VMClass_step8
-
+Java_java_lang_VMClassLoader_getClassLoadingLock
-
+Java_java_lang_VMClassLoader_newClassLoaderVmData
-
+Java_java_lang_VMClassLoader_getPrimitiveArray
-
+Java_java_lang_VMClassLoader_getArray
-
+Java_java_lang_VMClassLoader_nativeDefineArray
-
+Java_java_lang_VMClassLoader_nativeDefineClass
-
+Java_java_lang_VMClassLoader_linkClass
-
+Java_java_lang_VMClassLoader_initializeClass
-
+Java_java_lang_VMClassLoader_nativeLoadClass
-
+Java_java_lang_VMClassLoader_nativeCreateArray
-
+Java_java_lang_VMClassLoader_getPrimitiveClass
-
+Java_java_lang_VMObject_notify
-
+Java_java_lang_VMObject_notifyAll
-
+Java_java_lang_VMObject_wait
-
+Java_java_lang_VMObject_clone
-
+Java_java_lang_VMSecurityManager_getClassContext
-
+Java_java_lang_VMSecurityManager_currentClassLoader
-
+Java_java_lang_VMSystem_identityHashCode
-
+Java_java_lang_VMSystem_arraycopy
-
+Java_java_lang_VirtualMachine_invokeMain
-
+Java_java_lang_VirtualMachine_print__Z
-
+Java_java_lang_VirtualMachine_print__B
-
+Java_java_lang_VirtualMachine_print__S
-
+Java_java_lang_VirtualMachine_print__C
-
+Java_java_lang_VirtualMachine_print__I
-
+Java_java_lang_VirtualMachine_print__J
-
+Java_java_lang_VirtualMachine_print__F
-
+Java_java_lang_VirtualMachine_print__D
-
+Java_java_lang_VirtualMachine_print__Ljava_lang_String_2
-
+Java_java_lang_VirtualMachine_println__Z
-
+Java_java_lang_VirtualMachine_println__B
-
+Java_java_lang_VirtualMachine_println__S
-
+Java_java_lang_VirtualMachine_println__C
-
+Java_java_lang_VirtualMachine_println__I
-
+Java_java_lang_VirtualMachine_println__J
-
+Java_java_lang_VirtualMachine_println__F
-
+Java_java_lang_VirtualMachine_println__D
-
+Java_java_lang_VirtualMachine_println__Ljava_lang_String_2
-
+Java_java_lang_reflect_Array_createObjectArray
-
+Java_java_lang_reflect_Constructor_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Constructor_nativeGetModifiers
-
+Java_java_lang_reflect_Constructor_nativeGetExceptionTypes
-
+Java_java_lang_reflect_Constructor_constructNative
-
+Java_java_lang_reflect_Constructor_nativeGetDescriptor
-
+Java_java_lang_reflect_Field_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Field_nativeGetModifiers
-
+Java_java_lang_reflect_Field_nativeGetType
-
+Java_java_lang_reflect_Field_nativeGetName
-
+Java_java_lang_reflect_Field_nativeGetBoolean
-
+Java_java_lang_reflect_Field_nativeGetReference
-
+Java_java_lang_reflect_Method_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Method_nativeGetName
-
+Java_java_lang_reflect_Method_nativeGetModifiers
-
+Java_java_lang_reflect_Method_nativeGetExceptionTypes
-
+Java_java_lang_reflect_Method_invokeNative
-
+Java_java_lang_reflect_Method_nativeGetDescriptor
-
+
-
+:]m4svm_java_function_end
-
+
-
+----------------------------------------------------------------------
-
+file_tail
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_tail
-
+
-
Index:
src/libsablevm/error.c
-
===================================================================
-
---
src/libsablevm/error.c (revision 1204)
-
+++
src/libsablevm/error.c (revision 1295)
-
@@
-8,10 +8,11 @@
-
Les
quelques changements dans ce fichier ont pour but de s'assurer
que, lorsque sablevm est configurer
-
avec
l'option --enable-debugging-features(qui se veut une version
sans utilisation de signaux), aucune en-tête
-
« C »
relative au signaux n'est utilisée. Sans cette condition,
sablevm ne compile pas pour l'instant.
-
/*
We remember previously established signal handlers, so that we
can
-
delegate
back to them when we don't handle a signal. */
-
-static
struct sigaction _svmv_old_sigquit;
-
#if
defined(_SABLEVM_SIGNALS_FOR_EXCEPTIONS) ||
defined(_SABLEVM_INLINABILITY_TESTING)
-
+static
struct sigaction _svmv_old_sigquit;
-
+
-
static
struct sigaction _svmv_old_sigsegv;
-
static
struct sigaction _svmv_old_sigfpe;
-
@@
-69,7 +70,6 @@
-
siglongjmp
(*(env->signal_handler), 1);
-
}
-
-#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
/*
-
----------------------------------------------------------------------
-
@@
-280,6 +280,9 @@
-
}
-
}
-
+#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
+
-
+
-
/*
-
----------------------------------------------------------------------
-
_svmf_error_init
-
@@
-289,6 +292,9 @@
-
static
jint
-
_svmf_error_init
(void)
-
{
-
+
-
+#if
defined(_SABLEVM_SIGNALS_FOR_EXCEPTIONS) ||
defined(_SABLEVM_INLINABILITY_TESTING)
-
+
-
struct
sigaction sa;
-
_svmm_zero_memory
(sa);
-
@@
-412,6 +418,8 @@
-
#endif
/* _SABLEVM_INLINABILITY_TESTING */
-
+#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
+
-
return
JNI_OK;
-
error:
-
Index:
src/libsablevm/splay_tree.list
-
===================================================================
-
---
src/libsablevm/splay_tree.list (revision 1204)
-
+++
src/libsablevm/splay_tree.list (revision 1295)
-
Ajout,
à la liste des arbres binaires déjà mis en
place, de l'arbre binaire
-
des
fonctions exportées de libsablevm.
-
@@
-21,6 +21,7 @@
-
m4svm_splay_tree_begin[:
-
+function,
_svmt_function_node
-
type,
_svmt_type_node
-
gc_map,
_svmt_gc_map_node
-
sequence,
_svmt_sequence_node
-
Index:
src/libsablevm/exported_functions.h
-
===================================================================
-
---
src/libsablevm/exported_functions.h (revision 0)
-
+++
src/libsablevm/exported_functions.h (revision 1295)
-
@@
-0,0 +1,14 @@
-
Ce
nouveau fichier est le fichier d'en-tête du fichier
exported_functions.c contenant
-
le
prototype de la fonction responsable d'initialiser l'arbre
binaire des fonctions
-
exportées
de libsablevm.
-
+/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
-
+#ifndef
SVM_EXPORTED_FUNCTIONS_H
-
+#define
SVM_EXPORTED_FUNCTIONS_H
-
+
-
+static
jint
-
+m4svmf_initialize_functions_tree
(_svmt_JNIEnv *env);
-
+
-
+#endif
/* NOT SVM_EXPORTED_FUNCTIONS_H */
-
Index:
src/libsablevm/types.h
-
===================================================================
-
---
src/libsablevm/types.h (revision 1204)
-
+++
src/libsablevm/types.h (revision 1295)
-
@@
-98,6 +98,7 @@
-
Définition
d'un type à partir de la structure qui constitue un noeud
de l'arbre binaire contenant les
-
fonctions
exportées de libsablevm.
-
typedef
struct _svmt_threads_struct _svmt_threads;
-
typedef
struct _svmt_type_info_struct _svmt_type_info;
-
typedef
struct _svmt_type_node_struct _svmt_type_node;
-
+typedef
struct _svmt_function_node_struct _svmt_function_node;
-
typedef
struct _svmt_unknown_attribute_struct _svmt_unknown_attribute;
-
typedef
struct _svmt_vtable_struct _svmt_vtable;
-
typedef
union _svmt_code_union _svmt_code;
-
@@
-392,6 +393,7 @@
-
Définition
de la racine de l'arbre binaire contenant les fonctions
exportées de libsablevm.
-
_svmt_type_node
*initiated_type_tree;
-
_svmt_type_node
*partially_derived_type_tree;
-
_svmt_class_file
current_class_file;
-
+
_svmt_function_node *functions_tree_root;
-
_svmt_class_loader_info
*class_loader_info;
-
};
-
@@
-1796,6 +1798,23 @@
-
Définition
de la structure d'un noeud de l'arbre binaire contenant les
fonctions exportées de libsablevm.
-
_svmt_type_node
*right;
-
};
-
+/*
-
+----------------------------------------------------------------------
-
+-svmt_function_node
-
+----------------------------------------------------------------------
-
+*/
-
+struct
_svmt_function_node_struct
-
+{
-
+
const char *name;
-
+
void (*code) (void);
-
+
-
+
_svmt_function_node *parent;
-
+
_svmt_function_node *left;
-
+
_svmt_function_node *right;
-
+
-
+};
-
+
-
+
-
/*
-
----------------------------------------------------------------------
-
_svmt_interface_method_signature_node
-
Index:
src/libsablevm/libsablevm.c
-
===================================================================
-
---
src/libsablevm/libsablevm.c (revision 1204)
-
+++
src/libsablevm/libsablevm.c (revision 1295)
-
@@
-49,6 +49,7 @@
-
Inclusion
du nouveau fichier d'en-tête exported_functions.h, dans
libsablevm.c
-
#include
"interpreter.h"
-
#include
"method_invoke.h"
-
#include
"new_instance.h"
-
+#include
"exported_functions.h"
-
#include
"cast.c"
-
#include
"util1.c"
-
@@
-120,3 +121,5 @@
-
Inclusion
du nouveau fichier exported_functions.c, dans libsablevm.c
-
#include
"java_lang_reflect_Constructor.c"
-
#include
"java_lang_reflect_Field.c"
-
#include
"java_lang_reflect_Method.c"
-
+
-
+#include
"exported_functions.c"
-
Index:
src/libsablevm/native.c
-
===================================================================
-
---
src/libsablevm/native.c (revision 1204)
-
+++
src/libsablevm/native.c (revision 1295)
-
@@
-597,6 +597,57 @@
-
C'est
ici que la recherche dans l'arbre binaire des fonctions
expportées est utilisée. Lors
-
du
parcours des librairies dynamiques,si le « handle »
est NULL, la fonction est recherchée,
-
par
son nom (court et long), directement dans l'arbre binaire.
-
/*
process native libraries in loading order */
-
while
(native_library != NULL)
-
{
-
+
-
+
if (native_library->handle == NULL)
-
+
{
-
+
/*the found function node*/
-
+
_svmt_function_node *function_node;
-
+
/*tmp node needed for the search in the tree(node key = name) */
-
+
_svmt_function_node tmp_node = { NULL, NULL, NULL, NULL, NULL };
-
+
-
+
/*try short name*/
-
+
tmp_node.name = method->data.native_method->short_name;
-
+
-
+
function_node = _svmm_tree_find_function
(vm->class_loading.boot_loader.functions_tree_root,
-
+
&tmp_node);
-
+
-
+
if(function_node != NULL)
-
+
{
-
+
method->data.native_method->code = function_node->code;
-
+
-
+
if (method->data.native_method->code != NULL)
-
+
{
-
+
break;
-
+
}
-
+
-
+
}
-
+
else
-
+
{
-
+
method->data.native_method->code = NULL;
-
+
}
-
+
-
+
/*try long name */
-
+
tmp_node.name = method->data.native_method->long_name;
-
+
-
+
function_node = _svmm_tree_find_function
(vm->class_loading.boot_loader.functions_tree_root,
-
+
&tmp_node);
-
+
if(function_node != NULL)
-
+
{
-
+
method->data.native_method->code = function_node->code;
-
+
-
+
if (method->data.native_method->code != NULL)
-
+
{
-
+
break;
-
+
}
-
+
}
-
+
else
-
+
{
-
+
/*method not found*/
-
+
method->data.native_method->code = NULL;
-
+
}
-
+
-
+
}
-
+
-
/*
try short name */
-
method->data.native_method->code
=
-
(void
(*)(void)) lt_dlsym (native_library->handle,
-
Index:
src/libsablevm/global_alloc.list
-
===================================================================
-
---
src/libsablevm/global_alloc.list (revision 1204)
-
+++
src/libsablevm/global_alloc.list (revision 1295)
-
@@
-46,6 +46,7 @@
-
Ajout
pour la mise en place de l'arbre binaire(splay tree) contenant
les fonctions exportées de libsablevm.
-
Relatif
à l'allocation de mémoire.
-
memory_block,
_svmt_memory_block
-
sequence_node,
_svmt_sequence_node
-
type_node,
_svmt_type_node
-
+function_node,
_svmt_function_node
-
:]m4svm_global_zalloc_end
-
Index:
src/libsablevm/interpreter.c
-
===================================================================
-
---
src/libsablevm/interpreter.c (revision 1204)
-
+++
src/libsablevm/interpreter.c (revision 1295)
-
@@
-633,6 +633,13 @@
-
L'appel
de la fonction d'initialisation de l'arbre binaire contenant les
-
fonctions
exportées de libsablevm.
-
#endif
-
+
/* initialization of the functions tree */
-
+
if (env->vm->class_loading.boot_loader.functions_tree_root
== NULL)
-
+
{
-
+
m4svmf_initialize_functions_tree (env);
-
+
}
-
+
-
return
JNI_OK;
-
}
-
}
-
+
-
Index:
src/libsablevm/interpreter.h
-
===================================================================
-
---
src/libsablevm/interpreter.h (revision 1204)
-
+++
src/libsablevm/interpreter.h (revision 1295)
-
@@
-9,5 +9,6 @@
-
Ajout
du prototype de la fonction d'initialisation de l'arbre binaire
contenant les fonctions
-
exportées
de libsablevm.
-
#define
SVM_INTERPRETER_H
-
static
jint _svmf_interpreter (_svmt_JNIEnv *_env);
-
+static
jint initialize_functions_tree (_svmt_JNIEnv *env);
-
#endif
/* NOT SVM_INTERPRETER_H */
-
Index:
src/libsablevm/Makefile.am
-
===================================================================
-
---
src/libsablevm/Makefile.am (revision 1204)
-
+++
src/libsablevm/Makefile.am (revision 1295)
-
@@
-19,6 +19,11 @@
-
Définition
d'une variable=-no-undefined sous Cygwin (et Mingw) seulement.
-
libsablevm_la_SOURCES
= \
-
libsablevm.c
-
+##
under Cygwin, forces libtool to create shared libraries (dll)
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
##
We use m4 to generate some files and save ourselves
-
##
a lot of boring typing. It's more fun to write
-
##
m4 macros;-)
-
@@
-36,6 +41,7 @@
-
Ajustement
du Makefile en fonction des nouveaux fichiers.
-
error_throwing.c
\
-
global_alloc.c
\
-
global_alloc.h
\
-
+
exported_functions.c \
-
instructions_preparation_direct_threaded.c
\
-
instructions_preparation_inlined_threaded.c
\
-
instructions_preparation_switch_threaded.c
\
-
@@
-60,6 +66,7 @@
-
Ajustement
du Makefile en fonction des nouveaux fichiers.
-
error_throwing.c
\
-
global_alloc.c
\
-
global_alloc.h
\
-
+
exported_functions.c \
-
instructions_preparation_direct_threaded.c
\
-
instructions_preparation_inlined_threaded.c
\
-
instructions_preparation_switch_threaded.c
\
-
@@
-183,6 +190,11 @@
-
Ajustement
du Makefile en fonction des nouveaux fichiers.
-
util.m4.c
\
-
vm_args.m4.c
-
+exported_functions.c:
macros.m4 exported_functions.list exported_functions.m4.c
-
+
rm -f exported_functions.c
-
+
m4 -P macros.m4 exported_functions.m4.c exported_functions.list
> exported_functions.c
-
+
chmod a-w exported_functions.c
-
+
-
class_file_parser.c:
macros.m4 class_file_parser.m4.c
-
rm
-f class_file_parser.c
-
m4
-P macros.m4 class_file_parser.m4.c > class_file_parser.c
-
@@
-306,6 +318,7 @@
-
Ajustement
du Makefile en fonction des nouveaux fichiers.
-
rm
-f error_throwing.c
-
rm
-f global_alloc.c
-
rm
-f global_alloc.h
-
+
rm -f exported_functions.c
-
rm
-f instructions_preparation_direct_threaded.c
-
rm
-f instructions_preparation_inlined_threaded.c
-
rm
-f instructions_preparation_switch_threaded.c
-
@@
-317,9 +330,10 @@
-
Retrait
de -lrt pour la compilation.
-
Ajout
de la variable no_undefined pour forcer la création de
librairie dynamique sous Cygwin.
-
rm
-f util.c
-
rm
-f vm_args.c
-
-libsablevm_la_LIBADD
= -lpthread -lm -lffi -lltdl -lrt
-
+libsablevm_la_LIBADD
= -lpthread -lm -lffi -lltdl
-
+#######
-lrt
-
-libsablevm_la_LDFLAGS
= -version-info @LIBRARY_VERSION@
-
+libsablevm_la_LDFLAGS
= -version-info @LIBRARY_VERSION@ $(no_undefined)
-
INCLUDES
= \
-
-I@srcdir@/include
-I@srcdir@/inlinability \
|
2.2.2 Détails des modifications pour le classpath
- Index:
native/jni/java-lang/Makefile.am
-
===================================================================
-
---
native/jni/java-lang/Makefile.am (revision 1203)
-
+++
native/jni/java-lang/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
Définition
d'une variable=-no-undefined sous Cygwin (et Mingw) seulement.
-
Cette
opération est répétée dans tous les
fichiers suivants:
-
native/jni/classpath/Makefile.am
-
native/jni/java-nio/Makefile.am
-
native/jni/java-net/Makefile.am
-
native/jni/java-io/Makefile.am
-
native/jni/java-util/Makefile.am
-
native/jni/gtk-peer/Makefile.am
-
native/fdlibm/Makefile.am
-
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavalang.la libjavalangreflect.la
-
libjavalang_la_SOURCES
= java_lang_VMSystem.c \
-
@@
-11,7 +15,7 @@
-
Ajout
de la variable no_undefined pour forcer la création de
librairie dynamique sous Cygwin.
-
Cette
opération est répétée dans tous les
fichiers suivants:
-
native/jni/classpath/Makefile.am
-
native/jni/java-nio/Makefile.am
-
native/jni/java-net/Makefile.am
-
native/jni/java-io/Makefile.am
-
native/jni/java-util/Makefile.am
-
native/jni/gtk-peer/Makefile.am
-
native/fdlibm/Makefile.am
-
libjavalang_la_LIBADD
= $(wildcard $(top_builddir)/native/fdlibm/*.lo) \
-
$(top_builddir)/native/jni/classpath/jcl.lo
-
-libjavalang_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavalang_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
libjavalangreflect_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
-
-
Index:
native/jni/Makefile.am
-
===================================================================
-
---
native/jni/Makefile.am (revision 1203)
-
+++
native/jni/Makefile.am (revision 1295)
-
@@
-1,7 +1,8 @@
-
Annulation
de la compilation de gtk-peer. Cela posait problème à
la compilation du classpath.
-
##
Input file for automake to generate the Makefile.in used by
configure
-
if
CREATE_GTK_PEER_LIBRARIES
-
-SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
gtk-peer
-
+#SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
gtk-peer
-
+SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
-
else
-
SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
-
endif
-
Index:
native/jni/java-util/java_util_TimeZone.c
-
===================================================================
-
---
native/jni/java-util/java_util_TimeZone.c (revision 1203)
-
+++
native/jni/java-util/java_util_TimeZone.c (revision 1295)
-
@@
-61,7 +61,7 @@
-
Ajout
d'une condition, possiblement temporaire, pour permettre la
compilation du classpath.
-
JNIEXPORT
jstring JNICALL
-
Java_java_util_TimeZone_getDefaultTimeZoneId(JNIEnv
*env, jclass clazz)
-
{
-
-#ifdef
HAVE_TZNAME
-
+#if
defined(HAVE_TZNAME) && !defined(__CYGWIN__)
-
char
buffer[128];
-
int
result;
-
jstring
retval;
-
Index:
java/lang/System.java
-
===================================================================
-
---
java/lang/System.java (revision 1203)
-
+++
java/lang/System.java (revision 1295)
-
@@
-674,7 +677,14 @@
-
Changement
du « .so » par « .la »
pour que l'extension corresponde à celle des librairies
dynamiques
-
sous
Cygwin.
-
*/
-
public
static String mapLibraryName(String libname)
-
{
-
-
return "lib" + libname + ".so";
-
+
-
+
/*
-
+
For the cygwin port, the extension of the dynamic library to
load
-
+
is .la instead of .so. For the moment, it's hard coded but this
-
+
must be fixe in the future.
-
+
*/
-
+
//return "lib" + libname + ".so";
-
+
return "lib" + libname + ".la";
-
}
-
}
// class System
-
Index:
vm/reference/java/lang/Runtime.java
-
===================================================================
-
---
vm/reference/java/lang/Runtime.java (revision 1203)
-
+++
vm/reference/java/lang/Runtime.java (revision 1295)
-
@@
-716,10 +720,17 @@
-
Changement
du « .so » par « .la »
pour que l'extension corresponde à celle des librairies
dynamiques
-
sous
Cygwin.
-
path
+= "/";
-
}
-
-
String fullName = path + "lib" + libname + ".so";
-
+
/*
-
+
For the cygwin port, the extension of the dynamic library to
load
-
+
is .la instead of .so. For the moment, it's hard coded but this
-
+
must be fixe in the future.
-
+
*/
-
+
//String fullName = path + "lib" + libname + ".so";
-
+
String fullName = path + "lib" + libname + ".la";
-
//VirtualMachine.println("Trying
to load: " + fullName);
-
-
//try {
-
+
//try {
-
+
-
load
(fullName);
-
//VirtualMachine.println("Was
loaded: " + fullName);
-
//}
catch (UnsatisfiedLinkError e) {
-
Index:
configure.in
-
===================================================================
-
---
configure.in (revision 1203)
-
+++
configure.in (revision 1295)
-
@@
-54,13 +54,13 @@
-
Annulation
de la compilation de gtk-peer pour facilité la
compilation du
-
classpath.
-
dnl
GTK native peer
-
dnl
-----------------------------------------------------------
-
AC_ARG_ENABLE(gtk-peer,
-
-[
--enable-gtk-peer compile GTK native peers [default=yes]],
-
+[
--enable-gtk-peer compile GTK native peers [default=no]],
-
[case
"${enableval}" in
-
yes)
COMPILE_GTK_PEER=yes ;;
-
no)
COMPILE_GTK_PEER=no ;;
-
*)
COMPILE_GTK_PEER=yes ;;
-
esac],
-
-[COMPILE_GTK_PEER=yes])
-
+[COMPILE_GTK_PEER=no])
-
AM_CONDITIONAL(CREATE_JNI_LIBRARIES,
test "x${COMPILE_JNI}" = xyes)
-
AM_CONDITIONAL(CREATE_CNI_LIBRARIES,
test "x${COMPILE_CNI}" = xyes)
-
@@
-124,19 +125,19 @@
-
Mise
en commentaires de trucs relatifs à gtk-peer pour
facilité la compilation du classpath.
-
fi
-
dnl
Check for AWT related glib/gtk/libart_lgpl
-
-
if test "x${COMPILE_GTK_PEER}" = xyes; then
-
-
m4_pattern_allow([AM_PATH_GTK_2_0])
-
-
m4_pattern_allow([AM_PATH_GLIB_2_0])
-
-
m4_ifdef([AM_PATH_GTK_2_0],
-
-
[AM_PATH_GTK_2_0(2.2.0,,exit 1)],
-
-
[AC_MSG_ERROR([No AM_PATH_GTK_2_0 macro found: use
--disable-gtk-peer])])
-
-
m4_ifdef([AM_PATH_GTK_2_0],
-
-
[AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)],
-
-
[AC_MSG_ERROR([No AM_PATH_GLIB_2_0 macro found: use
--disable-gtk-peer])])
-
-
dnl XXX Fix me when libart.m4 has the compile test fixed!
-
-
dnl enable_libarttest=no
-
-
AM_PATH_LIBART(2.1.0,,exit 1)
-
-
fi
-
+#
if test "x${COMPILE_GTK_PEER}" = xyes; then
-
+#
m4_pattern_allow([AM_PATH_GTK_2_0])
-
+#
m4_pattern_allow([AM_PATH_GLIB_2_0])
-
+#
m4_ifdef([AM_PATH_GTK_2_0],
-
+#
[AM_PATH_GTK_2_0(2.2.0,,exit 1)],
-
+#
[AC_MSG_ERROR([No AM_PATH_GTK_2_0 macro found: use
--disable-gtk-peer])])
-
+#
m4_ifdef([AM_PATH_GTK_2_0],
-
+#
[AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)],
-
+#
[AC_MSG_ERROR([No AM_PATH_GLIB_2_0 macro found: use
--disable-gtk-peer])])
-
+#
dnl XXX Fix me when libart.m4 has the compile test fixed!
-
+#
dnl enable_libarttest=no
-
+#
AM_PATH_LIBART(2.1.0,,exit 1)
-
+#
fi
-
fi
-
@@
-171,6 +172,21 @@
-
Définition
du symbole=PLATEFORM_WIN32 si l'hôte est Cygwin(ou Mingw).
-
La
définition de ce symbole servira, plus tard, dans les
Makefiles, de condition
-
pour
définir une variable nécessaire à la
génération des librairies dynamiques sous
-
Cygwin.
-
dnl
-----------------------------------------------------------
-
+dnl
define for Cygwin/Win32 platform
-
+dnl
-----------------------------------------------------------
-
+AC_MSG_CHECKING([for
some Win32 platform])
-
+case
"$host" in
-
+
*-*-mingw*|*-*-cygwin*)
-
+
platform_win32=yes
-
+
;;
-
+
*)
-
+
platform_win32=no
-
+
;;
-
+esac
-
+AC_MSG_RESULT([$platform_win32])
-
+AM_CONDITIONAL(PLATFORM_WIN32,
test "$platform_win32" = "yes")
-
+
-
+dnl
-----------------------------------------------------------
-
dnl
Initialize maintainer mode
-
dnl
-----------------------------------------------------------
-
AM_MAINTAINER_MODE
-
|
3. Deuxième étape: Port sous Windows
À faire
4. À faire
4.1 Port de sablevm
sous Cygwin
Faire
des tests avec d'autres applications java; s'assurer de la
robustesse des changements effectués.
Apporter
des solutions plus élégantes aux mises en commentaires
temporaires, dans les Makefiles.
Apporter
des solutions plus élégantes pour toutes les
instructions « hardcoded » comme celles dans
les fichiers java/lang/System.java et
java/lang/vm/reference/java/lang/Runtime.java de sablevm-classpath
qui « hardcode » un « .la »
(au lieu d'un « .so »).
Poursuivre
le port avec d'autres saveurs de sablevm comme par exemple, celle
avec les signaux ou le « inlined-threading »
etc.
4.2 Port de sablevm
sous Windows
Tout
reste à faire:
Construction
de dll avec les outils Microsoft.
Compilation
de sablevm et de sablevm-classpath avec les outils Microsoft.
Trouver
les équivalents Windows des appels de la librairie Posix.
...
5. Contributions
Contributeur(trice)s
Nom
|
Brève description de la contribution
|
Etienne
M. Gagnon
|
|
Grzegorz
B. Prokopski
|
|
6. Annexes
6.1 Port sous Cygwin
6.1.1 Fichier diff de
sablevm
- Index:
configure.ac
-
===================================================================
-
---
configure.ac (revision 1204)
-
+++
configure.ac (revision 1295)
-
@@
-6,6 +6,10 @@
-
dnl
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
AC_INIT([sablevm],
[1.0.9], [http://www.sablevm.org/])
-
+
-
+dnl
minimal version of autoconf under cygwin
-
+AC_PREREQ(2.52)
-
+
-
AM_INIT_AUTOMAKE(AC_PACKAGE_TARNAME,
AC_PACKAGE_VERSION)
-
AM_CONFIG_HEADER(src/include/config.h)
-
@@
-258,6 +262,21 @@
-
echo
"$as_me:$LINENO: result: no" >&5
-
echo
"${ECHO_T}no" >&6
-
fi
-
+
-
+dnl
defining macro (platform_win32) only for Cygwin or Mingw
-
+AC_MSG_CHECKING([for
some Win32 platform])
-
+
-
+case
"$host" in
-
+
*-*-mingw*|*-*-cygwin*)
-
+
platform_win32=yes
-
+
;;
-
+
*)
-
+
platform_win32=no
-
+
;;
-
+esac
-
+AC_MSG_RESULT([$platform_win32])
-
+AM_CONDITIONAL(PLATFORM_WIN32,
test "$platform_win32" = "yes")
-
+
-
dnl
TODO: we should allow user to force if the __clear_cache was
used or not
-
case
"$system_clear_cache" in
-
yes)AC_DEFINE(HAS_SYSTEM_CLEAR_CACHE,1,use
__clear_cache) ;;
-
Index:
src/libsablevm/util2.c
-
===================================================================
-
---
src/libsablevm/util2.c (revision 1204)
-
+++
src/libsablevm/util2.c (revision 1295)
-
@@
-446,6 +446,22 @@
-
/*
-
----------------------------------------------------------------------
-
+_svmf_tree_compare_function
-
+----------------------------------------------------------------------
-
+*/
-
+inline
static jint
-
+_svmf_tree_compare_function
(_svmt_function_node * value1,
-
+
_svmt_function_node * value2)
-
+{
-
+
assert (value1 != NULL);
-
+
assert (value2 != NULL);
-
+
-
+
return strcmp (value1->name, value2->name);
-
+
-
+}
-
+
-
+/*
-
+----------------------------------------------------------------------
-
_svmf_tree_compare_interface_method_signature
-
----------------------------------------------------------------------
-
*/
-
Index:
src/libsablevm/exported_functions.m4.c
-
===================================================================
-
---
src/libsablevm/exported_functions.m4.c (revision 0)
-
+++
src/libsablevm/exported_functions.m4.c (revision 1295)
-
@@
-0,0 +1,72 @@
-
+/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_file_head
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+m4svm_define_begin
v = ":], [:m4svm_file_head:])";
-
+
-
+static
jint
-
+m4svmf_initialize_functions_tree
(_svmt_JNIEnv *env)
-
+{
-
+
/*node to insert in the functions splay tree*/
-
+
_svmt_function_node *function_node = NULL;
-
+
-
+
/*
-
+
* Stocking the pointer to each function to export from
-
+
* libsablevm in a splay tree
-
+
*/
-
+
-
+
m4svm_define_end v = ":])";
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_file_tail
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+
m4svm_define_begin v = ":], [:m4svm_file_tail:])";
-
+
return JNI_OK;
-
+}
-
+
-
+m4svm_define_end
v = ":])";
-
+
-
+/*
-
+----------------------------------------------------------------------
-
+m4svm_java_function
-
+----------------------------------------------------------------------
-
+*/
-
+
-
+/*
-
+
* This macro can be multi-called.
-
+
* m4svm_multicall(m4svm_java_function)
-
+
*/
-
+
-
+void
-
+M4svm_java_function
()
-
+{
-
+
-
+
m4svm_define_begin v = ":], [:m4svm_java_function:])";
-
+
-
+
/* Put address of $1 into splay tree */
-
+
-
+
if (_svmm_gzalloc_function_node (env, function_node) != JNI_OK)
-
+
{
-
+
return JNI_ERR;
-
+
}
-
+
-
+
function_node->name = "$1";
-
+
function_node->code = (void (*)(void))$1;
-
+
-
+
_svmm_tree_insert_function
(env->vm->class_loading.boot_loader.functions_tree_root,
function_node);
-
+
-
+
m4svm_define_end v = ":])";
-
+
-
+}
-
Index:
src/libsablevm/invoke_interface.c
-
===================================================================
-
---
src/libsablevm/invoke_interface.c (revision 1204)
-
+++
src/libsablevm/invoke_interface.c (revision 1295)
-
@@
-360,6 +360,7 @@
-
goto
error;
-
}
-
+
/*
-
vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
handle
= lt_dlopen (NULL);
-
if
(vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
@@
-367,6 +368,14 @@
-
{
-
goto
error;
-
}
-
+
-
+
In this particular case, instead of libsablevm dlopen itself, we
-
+
initialize the handle to NULL and this case will be manage in
the function
-
+
_svmf_bind_native_method in native.c: if the handle is null,
search
-
+
the handle in the functions splay tree (trying with short and
long name).
-
+
*/
-
+
vm->class_loading.boot_loader.class_loader_info->native_library_list->
-
+
handle = NULL;
-
/*
time to bootstrap! */
-
if
(_svmf_bootstrap (env) != JNI_OK)
-
Index:
src/libsablevm/exported_functions.list
-
===================================================================
-
---
src/libsablevm/exported_functions.list (revision 0)
-
+++
src/libsablevm/exported_functions.list (revision 1295)
-
@@
-0,0 +1,141 @@
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
-
+----------------------------------------------------------------------
-
+head
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_name
-
+
-
+----------------------------------------------------------------------
-
+file_head
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_head
-
+
-
+----------------------------------------------------------------------
-
+list
of internal java function
-
+----------------------------------------------------------------------
-
+
-
+m4svm_java_function_begin[:
-
+
-
+JNI_GetDefaultJavaVMInitArgs
-
+JNI_GetCreatedJavaVMs
-
+JNI_CreateJavaVM
-
+Java_java_io_VMObjectStreamClass_hasClassInitializer
-
+Java_java_lang_Object_getClass
-
+Java_java_lang_ProcessImpl_nativeWaitFor
-
+Java_java_lang_Runtime_availableProcessors
-
+Java_java_lang_Runtime_freeMemory
-
+Java_java_lang_Runtime_totalMemory
-
+Java_java_lang_Runtime_maxMemory
-
+Java_java_lang_Runtime_execInternal
-
+Java_java_lang_Runtime_exitInternal
-
+Java_java_lang_Runtime_runFinalization
-
+Java_java_lang_Runtime_gc
-
+Java_java_lang_Runtime_traceInstructions
-
+Java_java_lang_Runtime_traceMethodCalls
-
+Java_java_lang_Runtime_nativeLoad
-
+Java_java_lang_Runtime_getBootstrapClassPath
-
+Java_java_lang_Runtime_getBootstrapLibraryPath
-
+Java_java_lang_Runtime_getSableVMVersion
-
+Java_java_lang_Runtime_getFileSeparator
-
+Java_java_lang_Runtime_getPathSeparator
-
+Java_java_lang_Runtime_getLineSeparator
-
+Java_java_lang_Runtime_getUserName
-
+Java_java_lang_Runtime_getUserHome
-
+Java_java_lang_Runtime_getWorkDir
-
+Java_java_lang_Runtime_getPropertyCount
-
+Java_java_lang_Runtime_getProperty
-
+Java_java_lang_SecurityManager_getClassContext
-
+Java_java_lang_VMThread_yield
-
+Java_java_lang_VMThread_nativeIsAlive
-
+Java_java_lang_VMThread_nativeStart
-
+Java_java_lang_VMThread_currentThread
-
+Java_java_lang_Throwable_nativeGetStackTraceList
-
+Java_java_lang_VMClass_isArray
-
+Java_java_lang_VMClass_isInstance
-
+Java_java_lang_VMClass_getModifiers
-
+Java_java_lang_VMClass_isInterface
-
+Java_java_lang_VMClass_getSuperclass
-
+Java_java_lang_VMClass_getInterfaces
-
+Java_java_lang_VMClass_getDeclaredFields
-
+getDeclaredMethodsConstructors_helper
-
+Java_java_lang_VMClass_getDeclaredMethods
-
+Java_java_lang_VMClass_getDeclaredConstructors
-
+Java_java_lang_VMClass_isAssignableFrom
-
+Java_java_lang_VMClass_getClassLoader
-
+Java_java_lang_VMClass_getName
-
+Java_java_lang_VMClass_isInitialized
-
+Java_java_lang_VMClass_setInitialized
-
+Java_java_lang_VMClass_step7
-
+Java_java_lang_VMClass_step8
-
+Java_java_lang_VMClassLoader_getClassLoadingLock
-
+Java_java_lang_VMClassLoader_newClassLoaderVmData
-
+Java_java_lang_VMClassLoader_getPrimitiveArray
-
+Java_java_lang_VMClassLoader_getArray
-
+Java_java_lang_VMClassLoader_nativeDefineArray
-
+Java_java_lang_VMClassLoader_nativeDefineClass
-
+Java_java_lang_VMClassLoader_linkClass
-
+Java_java_lang_VMClassLoader_initializeClass
-
+Java_java_lang_VMClassLoader_nativeLoadClass
-
+Java_java_lang_VMClassLoader_nativeCreateArray
-
+Java_java_lang_VMClassLoader_getPrimitiveClass
-
+Java_java_lang_VMObject_notify
-
+Java_java_lang_VMObject_notifyAll
-
+Java_java_lang_VMObject_wait
-
+Java_java_lang_VMObject_clone
-
+Java_java_lang_VMSecurityManager_getClassContext
-
+Java_java_lang_VMSecurityManager_currentClassLoader
-
+Java_java_lang_VMSystem_identityHashCode
-
+Java_java_lang_VMSystem_arraycopy
-
+Java_java_lang_VirtualMachine_invokeMain
-
+Java_java_lang_VirtualMachine_print__Z
-
+Java_java_lang_VirtualMachine_print__B
-
+Java_java_lang_VirtualMachine_print__S
-
+Java_java_lang_VirtualMachine_print__C
-
+Java_java_lang_VirtualMachine_print__I
-
+Java_java_lang_VirtualMachine_print__J
-
+Java_java_lang_VirtualMachine_print__F
-
+Java_java_lang_VirtualMachine_print__D
-
+Java_java_lang_VirtualMachine_print__Ljava_lang_String_2
-
+Java_java_lang_VirtualMachine_println__Z
-
+Java_java_lang_VirtualMachine_println__B
-
+Java_java_lang_VirtualMachine_println__S
-
+Java_java_lang_VirtualMachine_println__C
-
+Java_java_lang_VirtualMachine_println__I
-
+Java_java_lang_VirtualMachine_println__J
-
+Java_java_lang_VirtualMachine_println__F
-
+Java_java_lang_VirtualMachine_println__D
-
+Java_java_lang_VirtualMachine_println__Ljava_lang_String_2
-
+Java_java_lang_reflect_Array_createObjectArray
-
+Java_java_lang_reflect_Constructor_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Constructor_nativeGetModifiers
-
+Java_java_lang_reflect_Constructor_nativeGetExceptionTypes
-
+Java_java_lang_reflect_Constructor_constructNative
-
+Java_java_lang_reflect_Constructor_nativeGetDescriptor
-
+Java_java_lang_reflect_Field_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Field_nativeGetModifiers
-
+Java_java_lang_reflect_Field_nativeGetType
-
+Java_java_lang_reflect_Field_nativeGetName
-
+Java_java_lang_reflect_Field_nativeGetBoolean
-
+Java_java_lang_reflect_Field_nativeGetReference
-
+Java_java_lang_reflect_Method_nativeGetDeclaringClass
-
+Java_java_lang_reflect_Method_nativeGetName
-
+Java_java_lang_reflect_Method_nativeGetModifiers
-
+Java_java_lang_reflect_Method_nativeGetExceptionTypes
-
+Java_java_lang_reflect_Method_invokeNative
-
+Java_java_lang_reflect_Method_nativeGetDescriptor
-
+
-
+:]m4svm_java_function_end
-
+
-
+----------------------------------------------------------------------
-
+file_tail
-
+----------------------------------------------------------------------
-
+
-
+m4svm_file_tail
-
+
-
Index:
src/libsablevm/error.c
-
===================================================================
-
---
src/libsablevm/error.c (revision 1204)
-
+++
src/libsablevm/error.c (revision 1295)
-
@@
-8,10 +8,11 @@
-
/*
We remember previously established signal handlers, so that we
can
-
delegate
back to them when we don't handle a signal. */
-
-static
struct sigaction _svmv_old_sigquit;
-
#if
defined(_SABLEVM_SIGNALS_FOR_EXCEPTIONS) ||
defined(_SABLEVM_INLINABILITY_TESTING)
-
+static
struct sigaction _svmv_old_sigquit;
-
+
-
static
struct sigaction _svmv_old_sigsegv;
-
static
struct sigaction _svmv_old_sigfpe;
-
@@
-69,7 +70,6 @@
-
siglongjmp
(*(env->signal_handler), 1);
-
}
-
-#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
/*
-
----------------------------------------------------------------------
-
@@
-280,6 +280,9 @@
-
}
-
}
-
+#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
+
-
+
-
/*
-
----------------------------------------------------------------------
-
_svmf_error_init
-
@@
-289,6 +292,9 @@
-
static
jint
-
_svmf_error_init
(void)
-
{
-
+
-
+#if
defined(_SABLEVM_SIGNALS_FOR_EXCEPTIONS) ||
defined(_SABLEVM_INLINABILITY_TESTING)
-
+
-
struct
sigaction sa;
-
_svmm_zero_memory
(sa);
-
@@
-412,6 +418,8 @@
-
#endif
/* _SABLEVM_INLINABILITY_TESTING */
-
+#endif
/* _SABLEVM_SIGNALS_FOR_EXCEPTIONS ||
_SABLEVM_INLINABILITY_TESTING */
-
+
-
return
JNI_OK;
-
error:
-
Index:
src/libsablevm/splay_tree.list
-
===================================================================
-
---
src/libsablevm/splay_tree.list (revision 1204)
-
+++
src/libsablevm/splay_tree.list (revision 1295)
-
@@
-21,6 +21,7 @@
-
m4svm_splay_tree_begin[:
-
+function,
_svmt_function_node
-
type,
_svmt_type_node
-
gc_map,
_svmt_gc_map_node
-
sequence,
_svmt_sequence_node
-
Index:
src/libsablevm/exported_functions.h
-
===================================================================
-
---
src/libsablevm/exported_functions.h (revision 0)
-
+++
src/libsablevm/exported_functions.h (revision 1295)
-
@@
-0,0 +1,14 @@
-
+/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
+
* This file is part of SableVM. *
-
+
* See the file "LICENSE" for Copyright information and
the *
-
+
* terms and conditions for copying, distribution and *
-
+
* modification of SableVM. *
-
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
-
+#ifndef
SVM_EXPORTED_FUNCTIONS_H
-
+#define
SVM_EXPORTED_FUNCTIONS_H
-
+
-
+static
jint
-
+m4svmf_initialize_functions_tree
(_svmt_JNIEnv *env);
-
+
-
+#endif
/* NOT SVM_EXPORTED_FUNCTIONS_H */
-
Index:
src/libsablevm/types.h
-
===================================================================
-
---
src/libsablevm/types.h (revision 1204)
-
+++
src/libsablevm/types.h (revision 1295)
-
@@
-98,6 +98,7 @@
-
typedef
struct _svmt_threads_struct _svmt_threads;
-
typedef
struct _svmt_type_info_struct _svmt_type_info;
-
typedef
struct _svmt_type_node_struct _svmt_type_node;
-
+typedef
struct _svmt_function_node_struct _svmt_function_node;
-
typedef
struct _svmt_unknown_attribute_struct _svmt_unknown_attribute;
-
typedef
struct _svmt_vtable_struct _svmt_vtable;
-
typedef
union _svmt_code_union _svmt_code;
-
@@
-392,6 +393,7 @@
-
_svmt_type_node
*initiated_type_tree;
-
_svmt_type_node
*partially_derived_type_tree;
-
_svmt_class_file
current_class_file;
-
+
_svmt_function_node *functions_tree_root;
-
_svmt_class_loader_info
*class_loader_info;
-
};
-
@@
-1796,6 +1798,23 @@
-
_svmt_type_node
*right;
-
};
-
+/*
-
+----------------------------------------------------------------------
-
+-svmt_function_node
-
+----------------------------------------------------------------------
-
+*/
-
+struct
_svmt_function_node_struct
-
+{
-
+
const char *name;
-
+
void (*code) (void);
-
+
-
+
_svmt_function_node *parent;
-
+
_svmt_function_node *left;
-
+
_svmt_function_node *right;
-
+
-
+};
-
+
-
+
-
/*
-
----------------------------------------------------------------------
-
_svmt_interface_method_signature_node
-
Index:
src/libsablevm/libsablevm.c
-
===================================================================
-
---
src/libsablevm/libsablevm.c (revision 1204)
-
+++
src/libsablevm/libsablevm.c (revision 1295)
-
@@
-49,6 +49,7 @@
-
#include
"interpreter.h"
-
#include
"method_invoke.h"
-
#include
"new_instance.h"
-
+#include
"exported_functions.h"
-
#include
"cast.c"
-
#include
"util1.c"
-
@@
-120,3 +121,5 @@
-
#include
"java_lang_reflect_Constructor.c"
-
#include
"java_lang_reflect_Field.c"
-
#include
"java_lang_reflect_Method.c"
-
+
-
+#include
"exported_functions.c"
-
Index:
src/libsablevm/native.c
-
===================================================================
-
---
src/libsablevm/native.c (revision 1204)
-
+++
src/libsablevm/native.c (revision 1295)
-
@@
-597,6 +597,57 @@
-
/*
process native libraries in loading order */
-
while
(native_library != NULL)
-
{
-
+
-
+
if (native_library->handle == NULL)
-
+
{
-
+
/*the found function node*/
-
+
_svmt_function_node *function_node;
-
+
/*tmp node needed for the search in the tree(node key = name) */
-
+
_svmt_function_node tmp_node = { NULL, NULL, NULL, NULL, NULL };
-
+
-
+
/*try short name*/
-
+
tmp_node.name = method->data.native_method->short_name;
-
+
-
+
function_node = _svmm_tree_find_function
(vm->class_loading.boot_loader.functions_tree_root,
-
+
&tmp_node);
-
+
-
+
if(function_node != NULL)
-
+
{
-
+
method->data.native_method->code = function_node->code;
-
+
-
+
if (method->data.native_method->code != NULL)
-
+
{
-
+
break;
-
+
}
-
+
-
+
}
-
+
else
-
+
{
-
+
method->data.native_method->code = NULL;
-
+
}
-
+
-
+
/*try long name */
-
+
tmp_node.name = method->data.native_method->long_name;
-
+
-
+
function_node = _svmm_tree_find_function
(vm->class_loading.boot_loader.functions_tree_root,
-
+
&tmp_node);
-
+
if(function_node != NULL)
-
+
{
-
+
method->data.native_method->code = function_node->code;
-
+
-
+
if (method->data.native_method->code != NULL)
-
+
{
-
+
break;
-
+
}
-
+
}
-
+
else
-
+
{
-
+
/*method not found*/
-
+
method->data.native_method->code = NULL;
-
+
}
-
+
-
+
}
-
+
-
/*
try short name */
-
method->data.native_method->code
=
-
(void
(*)(void)) lt_dlsym (native_library->handle,
-
Index:
src/libsablevm/global_alloc.list
-
===================================================================
-
---
src/libsablevm/global_alloc.list (revision 1204)
-
+++
src/libsablevm/global_alloc.list (revision 1295)
-
@@
-46,6 +46,7 @@
-
memory_block,
_svmt_memory_block
-
sequence_node,
_svmt_sequence_node
-
type_node,
_svmt_type_node
-
+function_node,
_svmt_function_node
-
:]m4svm_global_zalloc_end
-
Index:
src/libsablevm/interpreter.c
-
===================================================================
-
---
src/libsablevm/interpreter.c (revision 1204)
-
+++
src/libsablevm/interpreter.c (revision 1295)
-
@@
-633,6 +633,13 @@
-
#endif
-
+
/* initialization of the functions tree */
-
+
if (env->vm->class_loading.boot_loader.functions_tree_root
== NULL)
-
+
{
-
+
m4svmf_initialize_functions_tree (env);
-
+
}
-
+
-
return
JNI_OK;
-
}
-
}
-
+
-
Index:
src/libsablevm/interpreter.h
-
===================================================================
-
---
src/libsablevm/interpreter.h (revision 1204)
-
+++
src/libsablevm/interpreter.h (revision 1295)
-
@@
-9,5 +9,6 @@
-
#define
SVM_INTERPRETER_H
-
static
jint _svmf_interpreter (_svmt_JNIEnv *_env);
-
+static
jint initialize_functions_tree (_svmt_JNIEnv *env);
-
#endif
/* NOT SVM_INTERPRETER_H */
-
Index:
src/libsablevm/Makefile.am
-
===================================================================
-
---
src/libsablevm/Makefile.am (revision 1204)
-
+++
src/libsablevm/Makefile.am (revision 1295)
-
@@
-19,6 +19,11 @@
-
libsablevm_la_SOURCES
= \
-
libsablevm.c
-
+##
under Cygwin, forces libtool to create shared libraries (dll)
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
##
We use m4 to generate some files and save ourselves
-
##
a lot of boring typing. It's more fun to write
-
##
m4 macros;-)
-
@@
-36,6 +41,7 @@
-
error_throwing.c
\
-
global_alloc.c
\
-
global_alloc.h
\
-
+
exported_functions.c \
-
instructions_preparation_direct_threaded.c
\
-
instructions_preparation_inlined_threaded.c
\
-
instructions_preparation_switch_threaded.c
\
-
@@
-60,6 +66,7 @@
-
error_throwing.c
\
-
global_alloc.c
\
-
global_alloc.h
\
-
+
exported_functions.c \
-
instructions_preparation_direct_threaded.c
\
-
instructions_preparation_inlined_threaded.c
\
-
instructions_preparation_switch_threaded.c
\
-
@@
-183,6 +190,11 @@
-
util.m4.c
\
-
vm_args.m4.c
-
+exported_functions.c:
macros.m4 exported_functions.list exported_functions.m4.c
-
+
rm -f exported_functions.c
-
+
m4 -P macros.m4 exported_functions.m4.c exported_functions.list
> exported_functions.c
-
+
chmod a-w exported_functions.c
-
+
-
class_file_parser.c:
macros.m4 class_file_parser.m4.c
-
rm
-f class_file_parser.c
-
m4
-P macros.m4 class_file_parser.m4.c > class_file_parser.c
-
@@
-306,6 +318,7 @@
-
rm
-f error_throwing.c
-
rm
-f global_alloc.c
-
rm
-f global_alloc.h
-
+
rm -f exported_functions.c
-
rm
-f instructions_preparation_direct_threaded.c
-
rm
-f instructions_preparation_inlined_threaded.c
-
rm
-f instructions_preparation_switch_threaded.c
-
@@
-317,9 +330,10 @@
-
rm
-f util.c
-
rm
-f vm_args.c
-
-libsablevm_la_LIBADD
= -lpthread -lm -lffi -lltdl -lrt
-
+libsablevm_la_LIBADD
= -lpthread -lm -lffi -lltdl
-
+#######
-lrt
-
-libsablevm_la_LDFLAGS
= -version-info @LIBRARY_VERSION@
-
+libsablevm_la_LDFLAGS
= -version-info @LIBRARY_VERSION@ $(no_undefined)
-
INCLUDES
= \
-
-I@srcdir@/include
-I@srcdir@/inlinability \
|
6.1.2 Fichier
diff de sablevm-classpath
- Index:
native/jni/java-lang/Makefile.am
-
===================================================================
-
---
native/jni/java-lang/Makefile.am (revision 1203)
-
+++
native/jni/java-lang/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavalang.la libjavalangreflect.la
-
libjavalang_la_SOURCES
= java_lang_VMSystem.c \
-
@@
-11,7 +15,7 @@
-
libjavalang_la_LIBADD
= $(wildcard $(top_builddir)/native/fdlibm/*.lo) \
-
$(top_builddir)/native/jni/classpath/jcl.lo
-
-libjavalang_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavalang_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
libjavalangreflect_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
Index:
native/jni/classpath/Makefile.am
-
===================================================================
-
---
native/jni/classpath/Makefile.am (revision 1203)
-
+++
native/jni/classpath/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
noinst_LTLIBRARIES
= libclasspath.la
-
libclasspath_la_SOURCES
= jcl.c jcl.h \
-
@@
-5,7 +9,7 @@
-
primlib.c
primlib.h \
-
native_state.c
native_state.h
-
-libclasspath_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libclasspath_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
-I$(top_srcdir)/include
\
-
Index:
native/jni/java-nio/Makefile.am
-
===================================================================
-
---
native/jni/java-nio/Makefile.am (revision 1203)
-
+++
native/jni/java-nio/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavanio.la
-
libjavanio_la_SOURCES
= java_nio_DirectByteBufferImpl.c \
-
@@
-4,7 +8,7 @@
-
java_nio_FileChannelImpl.c
\
-
java_nio_FileLockImpl.c
-
-libjavanio_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavanio_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
libjavanio_la_LIBADD
= $(top_builddir)/native/jni/classpath/jcl.lo
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
Index:
native/jni/java-net/Makefile.am
-
===================================================================
-
---
native/jni/java-net/Makefile.am (revision 1203)
-
+++
native/jni/java-net/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavanet.la
-
libjavanet_la_SOURCES
= javanet.c \
-
@@
-7,7 +11,7 @@
-
gnu_java_net_PlainDatagramSocketImpl.c
\
-
gnu_java_net_PlainSocketImpl.c
-
-libjavanet_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavanet_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
libjavanet_la_LIBADD
= $(top_builddir)/native/jni/classpath/jcl.lo
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
Index:
native/jni/java-io/Makefile.am
-
===================================================================
-
---
native/jni/java-io/Makefile.am (revision 1203)
-
+++
native/jni/java-io/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavaio.la
-
libjavaio_la_SOURCES
= javaio.h \
-
@@
-6,7 +10,7 @@
-
FileDescriptor.c
\
-
java_io_ObjectInputStream.c
-
-libjavaio_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavaio_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
libjavaio_la_LIBADD
= $(top_builddir)/native/jni/classpath/jcl.lo
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
Index:
native/jni/Makefile.am
-
===================================================================
-
---
native/jni/Makefile.am (revision 1203)
-
+++
native/jni/Makefile.am (revision 1295)
-
@@
-1,7 +1,8 @@
-
##
Input file for automake to generate the Makefile.in used by
configure
-
if
CREATE_GTK_PEER_LIBRARIES
-
-SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
gtk-peer
-
+#SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
gtk-peer
-
+SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
-
else
-
SUBDIRS
= classpath java-io java-lang java-net java-nio java-util
-
endif
-
Index:
native/jni/java-util/Makefile.am
-
===================================================================
-
---
native/jni/java-util/Makefile.am (revision 1203)
-
+++
native/jni/java-util/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libjavautil.la
-
libjavautil_la_SOURCES
= java_util_TimeZone.c
-
@@
-2,3 +6,3 @@
-
-libjavautil_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libjavautil_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
Index:
native/jni/java-util/java_util_TimeZone.c
-
===================================================================
-
---
native/jni/java-util/java_util_TimeZone.c (revision 1203)
-
+++
native/jni/java-util/java_util_TimeZone.c (revision 1295)
-
@@
-61,7 +61,7 @@
-
JNIEXPORT
jstring JNICALL
-
Java_java_util_TimeZone_getDefaultTimeZoneId(JNIEnv
*env, jclass clazz)
-
{
-
-#ifdef
HAVE_TZNAME
-
+#if
defined(HAVE_TZNAME) && !defined(__CYGWIN__)
-
char
buffer[128];
-
int
result;
-
jstring
retval;
-
Index:
native/jni/gtk-peer/Makefile.am
-
===================================================================
-
---
native/jni/gtk-peer/Makefile.am (revision 1203)
-
+++
native/jni/gtk-peer/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
pkglib_LTLIBRARIES
= libgtkpeer.la
-
libgtkpeer_la_SOURCES
= \
-
@@
-33,7 +37,7 @@
-
gtkpeer.h
-
libgtkpeer_la_LIBADD
= $(top_builddir)/native/jni/classpath/native_state.lo
-
-libgtkpeer_la_LDFLAGS
= -module -version-info @LIBVERSION@ @GTK_LIBS@ @GLIB_LIBS@
@LIBART_LIBS@
-
+libgtkpeer_la_LDFLAGS
= -module -version-info @LIBVERSION@ @GTK_LIBS@ @GLIB_LIBS@
@LIBART_LIBS@ $(no_undefined)
-
INCLUDES
= -I. @EXTRA_INCLUDES@ \
-
@GTK_CFLAGS@
\
-
Index:
native/fdlibm/Makefile.am
-
===================================================================
-
---
native/fdlibm/Makefile.am (revision 1203)
-
+++
native/fdlibm/Makefile.am (revision 1295)
-
@@
-1,3 +1,7 @@
-
+if
PLATFORM_WIN32
-
+no_undefined
= -no-undefined
-
+endif
-
+
-
noinst_LTLIBRARIES
= libfdlibm.la
-
libfdlibm_la_SOURCES
= \
-
@@
-45,7 +49,7 @@
-
w_remainder.c
\
-
w_sqrt.c
-
-libfdlibm_la_LDFLAGS
= -module -version-info @LIBVERSION@
-
+libfdlibm_la_LDFLAGS
= -module -version-info @LIBVERSION@ $(no_undefined)
-
INCLUDES
= @EXTRA_INCLUDES@ \
-
-I$(top_builddir)/include
-
Index:
java/lang/System.java
-
===================================================================
-
---
java/lang/System.java (revision 1203)
-
+++
java/lang/System.java (revision 1295)
-
@@
-674,7 +677,14 @@
-
*/
-
public
static String mapLibraryName(String libname)
-
{
-
-
return "lib" + libname + ".so";
-
+
-
+
/*
-
+
For the cygwin port, the extension of the dynamic library to
load
-
+
is .la instead of .so. For the moment, it's hard coded but this
-
+
must be fixe in the future.
-
+
*/
-
+
//return "lib" + libname + ".so";
-
+
return "lib" + libname + ".la";
-
}
-
}
// class System
-
Index:
vm/reference/java/lang/Runtime.java
-
===================================================================
-
---
vm/reference/java/lang/Runtime.java (revision 1203)
-
+++
vm/reference/java/lang/Runtime.java (revision 1295)
-
@@
-716,10 +720,17 @@
-
path
+= "/";
-
}
-
-
String fullName = path + "lib" + libname + ".so";
-
+
/*
-
+
For the cygwin port, the extension of the dynamic library to
load
-
+
is .la instead of .so. For the moment, it's hard coded but this
-
+
must be fixe in the future.
-
+
*/
-
+
//String fullName = path + "lib" + libname + ".so";
-
+
String fullName = path + "lib" + libname + ".la";
-
//VirtualMachine.println("Trying
to load: " + fullName);
-
-
//try {
-
+
//try {
-
+
-
load
(fullName);
-
//VirtualMachine.println("Was
loaded: " + fullName);
-
//}
catch (UnsatisfiedLinkError e) {
-
Index:
configure.in
-
===================================================================
-
---
configure.in (revision 1203)
-
+++
configure.in (revision 1295)
-
@@
-54,13 +54,13 @@
-
dnl
GTK native peer
-
dnl
-----------------------------------------------------------
-
AC_ARG_ENABLE(gtk-peer,
-
-[
--enable-gtk-peer compile GTK native peers [default=yes]],
-
+[
--enable-gtk-peer compile GTK native peers [default=no]],
-
[case
"${enableval}" in
-
yes)
COMPILE_GTK_PEER=yes ;;
-
no)
COMPILE_GTK_PEER=no ;;
-
*)
COMPILE_GTK_PEER=yes ;;
-
esac],
-
-[COMPILE_GTK_PEER=yes])
-
+[COMPILE_GTK_PEER=no])
-
AM_CONDITIONAL(CREATE_JNI_LIBRARIES,
test "x${COMPILE_JNI}" = xyes)
-
AM_CONDITIONAL(CREATE_CNI_LIBRARIES,
test "x${COMPILE_CNI}" = xyes)
-
@@
-124,19 +125,19 @@
-
fi
-
dnl
Check for AWT related glib/gtk/libart_lgpl
-
-
if test "x${COMPILE_GTK_PEER}" = xyes; then
-
-
m4_pattern_allow([AM_PATH_GTK_2_0])
-
-
m4_pattern_allow([AM_PATH_GLIB_2_0])
-
-
m4_ifdef([AM_PATH_GTK_2_0],
-
-
[AM_PATH_GTK_2_0(2.2.0,,exit 1)],
-
-
[AC_MSG_ERROR([No AM_PATH_GTK_2_0 macro found: use
--disable-gtk-peer])])
-
-
m4_ifdef([AM_PATH_GTK_2_0],
-
-
[AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)],
-
-
[AC_MSG_ERROR([No AM_PATH_GLIB_2_0 macro found: use
--disable-gtk-peer])])
-
-
dnl XXX Fix me when libart.m4 has the compile test fixed!
-
-
dnl enable_libarttest=no
-
-
AM_PATH_LIBART(2.1.0,,exit 1)
-
-
fi
-
+#
if test "x${COMPILE_GTK_PEER}" = xyes; then
-
+#
m4_pattern_allow([AM_PATH_GTK_2_0])
-
+#
m4_pattern_allow([AM_PATH_GLIB_2_0])
-
+#
m4_ifdef([AM_PATH_GTK_2_0],
-
+#
[AM_PATH_GTK_2_0(2.2.0,,exit 1)],
-
+#
[AC_MSG_ERROR([No AM_PATH_GTK_2_0 macro found: use
--disable-gtk-peer])])
-
+#
m4_ifdef([AM_PATH_GTK_2_0],
-
+#
[AM_PATH_GLIB_2_0(2.2.0,,exit 1,gthread)],
-
+#
[AC_MSG_ERROR([No AM_PATH_GLIB_2_0 macro found: use
--disable-gtk-peer])])
-
+#
dnl XXX Fix me when libart.m4 has the compile test fixed!
-
+#
dnl enable_libarttest=no
-
+#
AM_PATH_LIBART(2.1.0,,exit 1)
-
+#
fi
-
fi
-
@@
-171,6 +172,21 @@
-
dnl
-----------------------------------------------------------
-
+dnl
define for Cygwin/Win32 platform
-
+dnl
-----------------------------------------------------------
-
+AC_MSG_CHECKING([for
some Win32 platform])
-
+case
"$host" in
-
+
*-*-mingw*|*-*-cygwin*)
-
+
platform_win32=yes
-
+
;;
-
+
*)
-
+
platform_win32=no
-
+
;;
-
+esac
-
+AC_MSG_RESULT([$platform_win32])
-
+AM_CONDITIONAL(PLATFORM_WIN32,
test "$platform_win32" = "yes")
-
+
-
+dnl
-----------------------------------------------------------
-
dnl
Initialize maintainer mode
-
dnl
-----------------------------------------------------------
-
AM_MAINTAINER_MODE
-
|
6.2 Port sous
windows