X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fvm%2Fsuck.h;h=41feb42a254059e491d556c12ecea80de7feb011;hb=cc78025b4ac412a74a0535eb910578ec335122b4;hp=33ce407b2b772f775abad33cffc66f6201097050;hpb=32c54ffababa1ce7eee8afb0b4ec2d98d07a01bc;p=cacao.git diff --git a/src/vm/suck.h b/src/vm/suck.h index 33ce407b2..41feb42a2 100644 --- a/src/vm/suck.h +++ b/src/vm/suck.h @@ -1,9 +1,9 @@ /* src/vm/suck.h - functions to read LE ordered types from a buffer - Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, - R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, - C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, - Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien This file is part of CACAO. @@ -19,16 +19,16 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - Contact: cacao@complang.tuwien.ac.at + Contact: cacao@cacaojvm.org Authors: Christian Thalinger Changes: - $Id: suck.h 3862 2005-12-03 14:32:40Z twisti $ + $Id: suck.h 4357 2006-01-22 23:33:38Z twisti $ */ @@ -40,19 +40,46 @@ #include "vm/types.h" #include "vm/class.h" +#include "vm/hashtable.h" #include "vm/loader.h" +/* list_classpath_entry *******************************************************/ + +enum { + CLASSPATH_PATH, + CLASSPATH_ARCHIVE +}; + +typedef struct list_classpath_entry list_classpath_entry; + +struct list_classpath_entry { +#if defined(USE_THREADS) + /* Required for monitor locking on zip/jar files. */ + java_objectheader header; +#endif + s4 type; + char *path; + s4 pathlen; +#if defined(ENABLE_ZLIB) + hashtable *htclasses; +#endif + listnode linkage; +}; + + /* macros to read LE and BE types from a buffer ******************************** - BE macros are for class file loading. + BE macros are for Java class file loading. LE macros are for ZIP file loading. *******************************************************************************/ -#if WORDS_BIGENDIAN == 0 +/* LE macros (for ZIP files ) *************************************************/ -/* we can optimize the LE access on little endian machines */ +#if defined(__I386__) || defined(__X86_64__) + +/* we can optimize the LE access on little endian machines without alignment */ #define SUCK_LE_U1(p) *((u1 *) (p)) #define SUCK_LE_U2(p) *((u2 *) (p)) @@ -62,32 +89,7 @@ #define SUCK_LE_U8(p) *((u8 *) (p)) #endif -#define SUCK_BE_U1(p) \ - ((u1) (p)[0]) - -#define SUCK_BE_U2(p) \ - ((((u2) (p)[0]) << 8) + \ - ((u2) (p)[1])) - -#define SUCK_BE_U4(p) \ - ((((u4) (p)[0]) << 24) + \ - (((u4) (p)[1]) << 16) + \ - (((u4) (p)[2]) << 8) + \ - ((u4) (p)[3])) - -#if U8_AVAILABLE == 1 -#define SUCK_BE_U8(p) \ - ((((u8) (p)[0]) << 56) + \ - (((u8) (p)[1]) << 48) + \ - (((u8) (p)[2]) << 40) + \ - (((u8) (p)[3]) << 32) + \ - (((u8) (p)[4]) << 24) + \ - (((u8) (p)[5]) << 16) + \ - (((u8) (p)[6]) << 8) + \ - ((u8) (p)[7])) -#endif - -#else /* WORDS_BIGENDIAN == 0 */ +#else /* defined(__I386__) || defined(__X86_64__) */ #define SUCK_LE_U1(p) \ ((u1) (p)[0]) @@ -114,18 +116,36 @@ ((u8) (p)[0])) #endif -/* we can optimize the BE access on big endian machines */ +#endif /* defined(__I386__) || defined(__X86_64__) */ + + +/* BE macros (for Java class files ) ******************************************/ + +#define SUCK_BE_U1(p) \ + ((u1) (p)[0]) -#define SUCK_BE_U1(p) *((u1 *) (p)) -#define SUCK_BE_U2(p) *((u2 *) (p)) -#define SUCK_BE_U4(p) *((u4 *) (p)) +#define SUCK_BE_U2(p) \ + ((((u2) (p)[0]) << 8) + \ + ((u2) (p)[1])) + +#define SUCK_BE_U4(p) \ + ((((u4) (p)[0]) << 24) + \ + (((u4) (p)[1]) << 16) + \ + (((u4) (p)[2]) << 8) + \ + ((u4) (p)[3])) #if U8_AVAILABLE == 1 -#define SUCK_BE_U8(p) *((u8 *) (p)) +#define SUCK_BE_U8(p) \ + ((((u8) (p)[0]) << 56) + \ + (((u8) (p)[1]) << 48) + \ + (((u8) (p)[2]) << 40) + \ + (((u8) (p)[3]) << 32) + \ + (((u8) (p)[4]) << 24) + \ + (((u8) (p)[5]) << 16) + \ + (((u8) (p)[6]) << 8) + \ + ((u8) (p)[7])) #endif -#endif /* WORDS_BIGENDIAN == 0 */ - /* signed suck defines ********************************************************/ @@ -135,9 +155,20 @@ #define suck_s8(a) (s8) suck_u8((a)) +/* export variables ***********************************************************/ + +extern char *bootclasspath; +extern char *classpath; + +extern list *list_classpath_entries; + + /* function prototypes ********************************************************/ -bool suck_init(char *classpath); +bool suck_init(void); + +void suck_add(char *classpath); +void suck_add_from_property(char *key); bool suck_check_classbuffer_size(classbuffer *cb, s4 len);