Hi all,
GTK+2 doesn't work on ia64 when compiled with gcc: it just
segfaults.
It is necessary to apply the same fix that has been been applied to
GLib2 about one year ago:
http://mail.gnome.org/archives/gnome-2-0-list/2001-November/msg00445.html
The GtkFundamentalType enum defined in gtktypeutils.h should be
removed and replaced with #define's (see the fix in attachment).
Some more details:
ia64 is one of the architectures in which gcc has a 64-bit "long
int" type (it is 32-bit even in other 64-bit platforms, like
sparc64).
In gtktypeutils.h the fundamental GTK_TYPE_* values are members of
an enumeration (GtkFundamentalType): it means that they are 32-bit
integers.
The problem is that GtkType == GType == gulong, and then GtkType is
a 64-bit type on ia64. When the GTK_TYPE_* values are put in a
vararg function stack (e. g. when calling gtk_signal_new()), they
are stored as 32-bit integers --- but later they are va_arg()'ed as
64-bit GtkType's.
So, va_arg() reads mostly random bits from the function stack. This
junk makes the GType system segfault while managing the TypeNode's
tree.
The fix in attachment requires to recompile all the GTK+2-based apps
and libraries on ia64 --- but since they actually don't work at all,
it shouldn't be a problem :-)
Regards, and keep up your wonderful work with GTK+2,
alceste
--
This .signature is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version. ___________________________________
______________________________________) PGP information in e-mail header |
diff -Naur gtk+-2.0.6.org/gtk/gtktypeutils.h gtk+-2.0.6/gtk/gtktypeutils.h
--- gtk+-2.0.6.org/gtk/gtktypeutils.h 2002-03-02 19:11:43.000000000 +0000
+++ gtk+-2.0.6/gtk/gtktypeutils.h 2002-10-26 08:53:51.000000000 +0000
@@ -39,27 +39,24 @@
* many of these are just aliases for GLib types to maintain
* compatibility
*/
-typedef enum /*< skip >*/
-{
- GTK_TYPE_INVALID = G_TYPE_INVALID,
- GTK_TYPE_NONE = G_TYPE_NONE,
- GTK_TYPE_ENUM = G_TYPE_ENUM,
- GTK_TYPE_FLAGS = G_TYPE_FLAGS,
-
- /* GtkArg types */
- GTK_TYPE_CHAR = G_TYPE_CHAR,
- GTK_TYPE_UCHAR = G_TYPE_UCHAR,
- GTK_TYPE_BOOL = G_TYPE_BOOLEAN,
- GTK_TYPE_INT = G_TYPE_INT,
- GTK_TYPE_UINT = G_TYPE_UINT,
- GTK_TYPE_LONG = G_TYPE_LONG,
- GTK_TYPE_ULONG = G_TYPE_ULONG,
- GTK_TYPE_FLOAT = G_TYPE_FLOAT,
- GTK_TYPE_DOUBLE = G_TYPE_DOUBLE,
- GTK_TYPE_STRING = G_TYPE_STRING,
- GTK_TYPE_BOXED = G_TYPE_BOXED,
- GTK_TYPE_POINTER = G_TYPE_POINTER
-} GtkFundamentalType;
+#define GTK_TYPE_INVALID G_TYPE_INVALID
+#define GTK_TYPE_NONE G_TYPE_NONE
+#define GTK_TYPE_ENUM G_TYPE_ENUM
+#define GTK_TYPE_FLAGS G_TYPE_FLAGS
+
+/* Gtkarg types */
+#define GTK_TYPE_CHAR G_TYPE_CHAR
+#define GTK_TYPE_UCHAR G_TYPE_UCHAR
+#define GTK_TYPE_BOOL G_TYPE_BOOLEAN
+#define GTK_TYPE_INT G_TYPE_INT
+#define GTK_TYPE_UINT G_TYPE_UINT
+#define GTK_TYPE_LONG G_TYPE_LONG
+#define GTK_TYPE_ULONG G_TYPE_ULONG
+#define GTK_TYPE_FLOAT G_TYPE_FLOAT
+#define GTK_TYPE_DOUBLE G_TYPE_DOUBLE
+#define GTK_TYPE_STRING G_TYPE_STRING
+#define GTK_TYPE_BOXED G_TYPE_BOXED
+#define GTK_TYPE_POINTER G_TYPE_POINTER
/* --- type macros --- */
#define GTK_CLASS_NAME(class) (g_type_name (G_TYPE_FROM_CLASS (class)))
Attachment:
pgp0WFYWQJ5Zm.pgp
Description: PGP signature