U++ framework
Do not panic. Ask here before giving up.

Home » Developing U++ » Mac OS » MacOS X woes
MacOS X woes [message #7137] Fri, 15 December 2006 13:52 Go to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Fri, 15 December 2006 07:22


Got it and recompiled all, but no difference, core the same place, the same backtrace. At what place to you pull out the number of images so I can check we are getting a sane value? All I see is zeros.






Well, it is a little bit complicated....

There are two .iml formats.

I guess we are dealing here with newer one. In the new format, there are image headers (with names) and images are compressed in about 4KB blocks (because compressing several small images together yields better compression ratio than compressing them individually).

The problem here is most likely that number of headers does not match number of images in compression blocks (there is more headers).

The critical function to investigate first is IMHO:

Vector<Image> UnpackImlData(const String& d)

placing a couple of LOGs and DUMPs there might reveal what is going on.

BTW, moving this to the forum...

Mirek
Re: MacOS X woes [message #7139 is a reply to message #7137] Fri, 15 December 2006 14:07 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

I'm not so good at your debug code, but gdb I can handle... just doing a quick run through of the UnpackImlData() function, what should "len" normally be? I would guess this number is large:

(First pass, first image)

(gdb) p ib
$9 = {
  <NoCopy> = {<No data fields>}, 
  members of ImageBuffer: 
  kind = 0, 
  size = {
    <Moveable<Size_<int>,EmptyClass>> = {
      <> = {<No data fields>}, <No data fields>}, 
    members of Size_<int>: 
    cx = 3328, 
    cy = 3328
  }, 
  pixels = {
    <Moveable<Buffer<RGBA>,EmptyClass>> = {
      <> = {<No data fields>}, <No data fields>}, 
    members of Buffer<RGBA>: 
    ptr = 0x428a008
  }, 
  hotspot = {
    <Moveable<Point_<int>,EmptyClass>> = {
      <> = {<No data fields>}, <No data fields>}, 
    members of Point_<int>: 
    x = 256, 
    y = 256
  }, 
[snip]

(gdb) n
240                     s += 13;
(gdb) n
241                     int len = ib.GetLength();
(gdb) p len
$10 = 11075584



Am I getting warmer?
Re: MacOS X woes [message #7140 is a reply to message #7139] Fri, 15 December 2006 14:10 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Actually, its just size.cx*size.cy and at 3328 pixels each, that is the right value. So assuming 3328x3328 is correct..

The function ends with, after just one pass:

255             return img;
(gdb) p img
$3 = {
  <MoveableAndDeepCopyOption<Vector<Image>,EmptyClass>> = {
    <Moveable<Vector<Image>,DeepCopyOption<Vector<Image>, EmptyClass> >> = {
      <DeepCopyOption<Vector<Image>,EmptyClass>> = {
        <> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}, 
  members of Vector<Image>: 
  vector = 0xbffff740, 
  items = -1, 
  alloc = 2315384
}


Re: MacOS X woes [message #7141 is a reply to message #7140] Fri, 15 December 2006 14:19 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

If I'm posting too much, just tell me off Smile

#1  0x002ffbd0 in UnpackImlData (d=@0xbffff78c) at ImageBlit.cpp:237
237                     ImageBuffer ib(Peek16le(s + 1), Peek16le(s + 3));

(gdb) x/16x s
0xffb014:       0x000d000d      0x00010001      0x00000000      0x00000000
0xffb024:       0x00000000      0x00000000      0x00b2b2be      0xff676789



So +1, and +3 should be 0d00 0d00, in LE, or rather, 13x13. However, I get 3328. ($D00) Peek16le isn't flipping?
Re: MacOS X woes [message #7142 is a reply to message #7140] Fri, 15 December 2006 14:25 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Fri, 15 December 2006 08:10


Actually, its just size.cx*size.cy and at 3328 pixels each, that is the right value. So assuming 3328x3328 is correct..



...but 3328 almost certainly is not...

-> is 0xd00, 0x00d is much more realistical (first picture in the .iml is 13x13 pixel image).

We are definitely getting nuxi problem here...

Are you sure that Peek16le is in correct version? (Maybe just preprocess the file and look.)

Mirek
Re: MacOS X woes [message #7155 is a reply to message #7142] Sat, 16 December 2006 02:30 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

When I rsynced the new Util.h it over-wrote my port changing, including setting of flagPPC. Sigh.

Anyway, back to where we were, looking at the image editor segv.

Called LoadIml(), which does not find IMAGE_ID and IMAGE_DATA, so it throws the exception, and loads in a more low-level loader.

Seems to parse the input ok, until is reaches:

(gdb) p parser
$28 = (CParser &) @0xbffe5a70: {
  term = 0x2161732 "IMAGE_SCAN(\"?\\377\\377\\377\\13????????????????????????????????\\377\\377\\377\")\nIMAGE_PACKED(ufxp, \"\\2\\20\\0\\0\\0\\20\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\")\nIMAGE_BEGIN(options)\n\tIMAGE_SCAN(\"?\\1vlV????\\1??m?\\2??s?"..., 

100                                     else if(id == "IMAGE_PACKED" && parser.IsChar('\"'))
(gdb) n
105                                                     StringStream ss(d);
(gdb) n
106                                                     ss % image;

(gdb) n
107                                                     if(!ss.IsError())
(gdb) n
108                                                             accepted = true;
(gdb) n
109                                             }
(gdb) n
112                             if(name.GetLength() >= 6 && !memcmp(name, "_java_", 6))
(gdb) p name
[snip]
    ptr = 0x1b89654 "ufxp"
(gdb) n
115                             if(accepted)
(gdb) n
117                                     if(name.GetLength() >= 4 && !memcmp(name, "im__", 4))
(gdb) n
120                                     Image m = RLEToAlpha(encoded_data, image.size);
(gdb) p encoded_data
$34 = {
  <AString<char,String>> = {
    <Moveable<String,EmptyClass>> = {
      <> = {<No data fields>}, <No data fields>}, 
    members of AString<char,String>: 
    ptr = 0x20c9414 "????\001?????????????????????\004????????????????\002??????????????\004???[[[?????????\003ooo??????????????\n???\036\036\036\033\033\033??????ooo\f\f\f\016\016\016???????????????\n999\001\001\001"
  }, <No data fields>}
(gdb) p image.size
$35 = {
  <Moveable<Size_<int>,EmptyClass>> = {
    <> = {<No data fields>}, <No data fields>}, 
  members of Size_<int>: 
  cx = 268435456, 
  cy = 268435456
}



Should sizes be set here? Before we call, or is it just uninitialised?

encoded_data looks correct, in that it was parsed in ok.

(gdb) x/16bx encoded_data.ptr
0x20c9414:      0x83    0xff    0xff    0xff    0x01    0xfd    0xfd    0xfd
0x20c941c:      0x82    0xfc    0xfc    0xfc    0x83    0xff    0xff    0xff



But it dies in RLEToAlpha.

Breakpoint 3, RLEToAlpha (rle=@0xbffe5898, sz=@0xbffe5850) at ImlFile.cpp:32
32              ImageBuffer ib(sz);
(gdb) p sz
$39 = (Size &) @0xbffe5850: {
  <Moveable<Size_<int>,EmptyClass>> = {
    <> = {<No data fields>}, <No data fields>}, 
  members of Size_<int>: 
  cx = 268435456, 
  cy = 268435456


Makes me think the size should be "somewhat smaller".

You set the size at IMAGE_END phase, I don't recall it reading IMAGE_END. Could it be our .iml file is incorrect,old ?

Has IMAGE_BEGIN(ufxp)
IMAGE_SCAN x 16
IMAGE_PACKED(ufxp, ....)
Then next IMAGE_BEGIN. etc. (of two)


Re: MacOS X woes [message #7156 is a reply to message #7155] Sat, 16 December 2006 02:49 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

I can confirm that with the following hack

ImlFile.cpp:112

            if (image.size.cx > 1000) {
              image.size.cx = 16;
              image.size.cy = 16;
            }

...since I know that my two icons are 16x16...

The image editor loads without core dumping, and displays my first icon just fine.

Re: MacOS X woes [message #7166 is a reply to message #7155] Sun, 17 December 2006 15:03 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Fri, 15 December 2006 20:30


When I rsynced the new Util.h it over-wrote my port changing, including setting of flagPPC.



Ooops. Can you post the patch please so that I can apply it?

Quote:


Anyway, back to where we were, looking at the image editor segv.



Based on the code, looks like problem in serialization. Will look at it asap.

Mirek
Re: MacOS X woes [message #7171 is a reply to message #7166] Sun, 17 December 2006 15:22 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Coonfirmed&fixed (well, at least I hope).

In the process, I have encountered an interesting problem - serialization of float and double.

How is the float/double format on PowerPC (or other non-x86 CPUs)? Is it the same, just needing to swap the order of bytes like integer types?

Mirek
Re: MacOS X woes [message #7172 is a reply to message #7171] Sun, 17 December 2006 15:38 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
OK. It really seems like fp numbers are the same, just swapped. Altering code to this..

Mirek
Re: MacOS X woes [message #7188 is a reply to message #7172] Mon, 18 December 2006 03:33 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
I stepped through the serialisation code earlier to confirm it did indeed break endianess. (File is saved in little). After setting the sizes to 16x16 it became saved in big-endian and just worked but that's not ideal either Smile

Changes for OSX11 are:

Package Organiser:

CtrlLib: Add Package, When "OSX11": PdfDraw
Draw: New Libraries, When "OSX11": X11 Xft fontconfig Xrender freetype expat


Only patching that is questionable is the plugin/bmp/bmphdr.h with my extra casting.

So currently, you set "flagPPC" or "flagX86" in the Build Environment variables. This will trigger code to add "-arch X" for cc and lnk times.


  • Attachment: osx11_patch
    (Size: 5.51KB, Downloaded 657 times)
Re: MacOS X woes [message #7189 is a reply to message #7188] Mon, 18 December 2006 03:48 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
Hmm, seems that -DflagPPC does not trigger the code with
HasFlag("PPC") so that won't work either.

Need to be able to trigger extra linking variables (since they can not be specified in Build Environment).

I guess I could change it so that you specify "-arch ppc" or "-arch i386" in BE instead, then add:

Core/Core.h:

        #ifdef __BIG_ENDIAN__
                #define flagPPC
                #undef flagX86
        #endif

        #ifdef __LITTLE_ENDIAN__
                #undef flagPPC
                #define flagX86
        #endif

(those endian defines are set by gcc based on the -arch flag)

then I can add linking flags in GccBuilder.cpp.

Which way to do you prefer?

Re: MacOS X woes [message #7190 is a reply to message #7189] Mon, 18 December 2006 08:28 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Hm, what this says

http://developer.apple.com/qa/qa2005/qa1424.html

?

Maybe for the moment, we could use some of predefined macros...

Mirek
Re: MacOS X woes [message #7192 is a reply to message #7190] Mon, 18 December 2006 09:28 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Yeah I'm okay with that. I will change it to be as shown above, and we specify the build type with "-arch" in BuildEnv. Then the lnk additions will also work.

Re: MacOS X woes [message #7193 is a reply to message #7192] Mon, 18 December 2006 10:36 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Mon, 18 December 2006 03:28


Yeah I'm okay with that. I will change it to be as shown above, and we specify the build type with "-arch" in BuildEnv. Then the lnk additions will also work.




Well, I am afraid that __LITTLE_ENDIAN__ could bite us with ARM. Is not there some __power_pc__ macro?

Mirek
Re: MacOS X woes [message #7198 is a reply to message #7193] Mon, 18 December 2006 10:53 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
#define __ppc__ 1
#define __POWERPC__ 1
#define _ARCH_PPC 1

Last one could be interesting.

Similarly:

#define i386 1
#define __i386 1
#define __i386__ 1
Re: MacOS X woes [message #7201 is a reply to message #7198] Mon, 18 December 2006 11:15 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Although I should mention I put the #ifdef ENDIAN inside that of PLATFORM_OSX11 so it shouldn't matter, but based on arch is better than endianess Smile

Re: MacOS X woes [message #7206 is a reply to message #7201] Mon, 18 December 2006 13:50 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Another small issue: Maybe instead CPU_PPC it should be CPU_POWERPC, because PPC clashes with PocketPC a bit...

Mirek
Re: MacOS X woes [message #7227 is a reply to message #7206] Tue, 19 December 2006 01:15 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Ah whoopsie.. I assumed you had previously done CPU_PPC to be powerpc, since the PocketPC cpu arch is ARM, SH3 or MIPS.

I will guess what is needed here and submit a patch.



I use something along the lines of:


#ifdef flagOSX11
        #define PLATFORM_OSX11
        #define PLATFORM_POSIX
        #ifdef flagGUI
                #define PLATFORM_X11
        #endif

        #ifdef flagTESTLEAKS
                #define TESTLEAKS
        #endif

        // defines set by OsX for us.                                           
        #ifdef __POWERPC__
                #define flagPOWERPC
        #endif

        #ifdef __i386__
                #define flagX86
        #endif

#endif



However, can you help to find a solution as to how to be able to do Intel build on a PPC platform and vv.

The problem is, I need to set "-arch i386", which currently I set in "Build Environment". This is only use for Compile, and not use in Linking. There are no Linking options that I can see in Build Environment. So without that set, "__i386__" is not set, so the linking is done as POWERPC.

If no extra input boxes in the GUI, how can I user-optionally build for different archs?

The sources specify "linkoptions" which is Gathered from pkg.link. Not sure where that comes from.

I could take out "flagOSX11" and make two flags, but that seems uneccessary when you have a fully features build environment setup.

Can I define a new GCC32 and supply different flags?


[Updated on: Tue, 19 December 2006 02:28]

Report message to a moderator

Re: MacOS X woes [message #7280 is a reply to message #7227] Wed, 20 December 2006 04:13 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Fetched latest sources to try out the Serialization changes (20th GMT 01:00).

Lots of issues in Installer.cpp (path not defines etc) but I assume that is just work in progress, so //'ing my way through that. It didn't like "::" in "::GetLastError()" in Socket.cpp.

Anyway, loading "ide" I get:

Assertion failed in /Users/lundman/src/upp/uppsrc/Core/Stream.cpp, line 1362
!backup.IsError()

(gdb) bt
#0  0x9004796c in kill ()
#1  0x9012dc14 in abort ()
#2  0x00237abc in Upp::AssertFailed (file=0x3a68d0 "/Users/lundman/src/upp/uppsrc/Core/Stream.cpp", line=1362, cond=0x3a6c14 "!backup.IsError()") at Util.cpp:83
#3  0x002495fc in Upp::Load (serialize=@0xbffe6cb8, stream=@0xbffe6cc0) at Stream.cpp:1362
#4  0x0026ae5c in Upp::LoadFromFile (serialize=@0xbffe6d70, file=0x0) at Stream.cpp:1390
#5  0x00456624 in Upp::LoadFromFile<Ide> (x=@0xbffe6ee8, name=0x0) at Util.h:339
#6  0x00086bf0 in GuiMainFn_ () at idewin.cpp:805
#7  0x0008749c in main (argc=1, argv=0xbffffaec, envptr=0xbffffaf4) at idewin.cpp:571


That "name" and "file" are NULL probably is not good? But might be normal behavior for all I know.

Also, I'm in _awe_ of the size of your "ide" variable. I'm never doing "p ide" again.

Re: MacOS X woes [message #7281 is a reply to message #7280] Wed, 20 December 2006 04:44 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Fails due to

53		int version = 5;
(gdb) s
54		s.Magic(0x12346);
(gdb) s
Upp::Stream::Magic (this=0xbffe6c20, magic=74566) at Stream.cpp:719
719		dword a = magic;
(gdb) s
720		*this % a;
[snip]
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbffe6a68, count=1) at Stream.cpp:459
459		EndianSwap(data, count);
[snip]
(gdb) n
Upp::Stream::operator% (this=0xbffe6c20, d=@0xbffe6a68) at Stream.cpp:592
592		return *this;

Upp::Stream::Magic (this=0xbffe6c20, magic=74566) at Stream.cpp:721
721		if(magic != a) LoadError();
(gdb) p magic
$16 = 74566
(gdb) p a
$17 = 1176699136

Re: MacOS X woes [message #7282 is a reply to message #7281] Wed, 20 December 2006 05:01 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
D'oh, you should have said I need to delete my .ide/ config files since they are all big-endian Smile

However, we do get this situation:

rm .ide/ide.cfg
gdb ide
(gdb) run
(Once loaded, click Cancel instead of Selection a main Package)
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x1876d580
0x00275584 in Upp::RichEdit::SetupRuler (this=0xbfff707c) at Editor.cpp:272
272		                zoom, q.grid, q.numbers, q.numbermul, q.marks);

(gdb) p unit
$1 = 16777216



And indeed, now that it has written "ide.cfg" it won't load it unless I delete it first, with the exact same core. So for some reason "unit" ends up big-endian in memory (as well as on disk?) even when Initialised from scratch.


[Updated on: Wed, 20 December 2006 05:02]

Report message to a moderator

Re: MacOS X woes [message #7283 is a reply to message #7282] Wed, 20 December 2006 08:55 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
I do not see obvious problem.

I think breakpoint at RichEdit/Editor.cpp 452 and see what is going on....

Mirek
Re: MacOS X woes [message #7284 is a reply to message #7227] Wed, 20 December 2006 08:57 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Mon, 18 December 2006 19:15


Ah whoopsie.. I assumed you had previously done CPU_PPC to be powerpc, since the PocketPC cpu arch is ARM, SH3 or MIPS.

I will guess what is needed here and submit a patch.



I use something along the lines of:


#ifdef flagOSX11




OK, now at the beginning of Core.h.

Mirek

[Updated on: Wed, 20 December 2006 08:58]

Report message to a moderator

Re: MacOS X woes [message #7285 is a reply to message #7283] Wed, 20 December 2006 09:14 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Right
Breakpoint 1, Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:453
453		int version = 1;
(gdb) s
454		s / version;
(gdb) s
Upp::Stream::operator/ (this=0xbffe6c20, i=@0xbffe69b8) at Stream.h:223
223		Stream&   operator/(int& i)            { dword w = i + 1; Pack(w); i = w - 1; return *this; }
(gdb) s
Upp::Stream::Pack (this=0xbffe6c20, w=@0xbffe6958) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:471
471		if(IsError()) return;
(gdb) n
491	}
(gdb) n
0x0041d410 in Upp::Stream::operator/ (this=0xbffe6c20, i=@0xbffe69b8) at Stream.h:223
223		Stream&   operator/(int& i)            { dword w = i + 1; Pack(w); i = w - 1; return *this; }
(gdb) n
Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:455
455		s % unit;
(gdb) p version
$4 = 1
(gdb) p unit
$5 = 1
(gdb) s
Upp::Stream::operator% (this=0xbffe6c20, d=@0xbfffb67c) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:585
585		SerializeRaw((dword *)&d, 1);
(gdb) s
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c, count=1) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:457
457		SerializeRaw((byte *)data, 4 * count);
(gdb) s
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c "", size=4) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:442
442		if(IsError()) return;
(gdb) n
447	}
(gdb) n
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c, count=1) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:459
459		EndianSwap(data, count);
(gdb) p data
$6 = (dword *) 0xbfffb67c
(gdb) p *data
$7 = 1
(gdb) n
461	}
(gdb) p *data
$8 = 16777216
(gdb) n
Upp::Stream::operator% (this=0xbffe6c20, d=@0xbfffb67c) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:586
586		return *this;
(gdb) 
587	}
(gdb) 
Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:456
456		s % showcodes;
(gdb) p unit
$9 = 16777216


Seems it is given a default value, then gets EndianSwapped, when maybe it should only be endianswapped when read?

Re: MacOS X woes [message #7286 is a reply to message #7285] Wed, 20 December 2006 09:29 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Wed, 20 December 2006 03:14


Right
Breakpoint 1, Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:453
453		int version = 1;
(gdb) s
454		s / version;
(gdb) s
Upp::Stream::operator/ (this=0xbffe6c20, i=@0xbffe69b8) at Stream.h:223
223		Stream&   operator/(int& i)            { dword w = i + 1; Pack(w); i = w - 1; return *this; }
(gdb) s
Upp::Stream::Pack (this=0xbffe6c20, w=@0xbffe6958) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:471
471		if(IsError()) return;
(gdb) n
491	}
(gdb) n
0x0041d410 in Upp::Stream::operator/ (this=0xbffe6c20, i=@0xbffe69b8) at Stream.h:223
223		Stream&   operator/(int& i)            { dword w = i + 1; Pack(w); i = w - 1; return *this; }
(gdb) n
Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:455
455		s % unit;
(gdb) p version
$4 = 1
(gdb) p unit
$5 = 1
(gdb) s
Upp::Stream::operator% (this=0xbffe6c20, d=@0xbfffb67c) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:585
585		SerializeRaw((dword *)&d, 1);
(gdb) s
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c, count=1) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:457
457		SerializeRaw((byte *)data, 4 * count);
(gdb) s
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c "", size=4) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:442
442		if(IsError()) return;
(gdb) n
447	}
(gdb) n
Upp::Stream::SerializeRaw (this=0xbffe6c20, data=0xbfffb67c, count=1) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:459
459		EndianSwap(data, count);
(gdb) p data
$6 = (dword *) 0xbfffb67c
(gdb) p *data
$7 = 1
(gdb) n
461	}
(gdb) p *data
$8 = 16777216
(gdb) n
Upp::Stream::operator% (this=0xbffe6c20, d=@0xbfffb67c) at /Users/lundman/src/upp/uppsrc/Core/Stream.cpp:586
586		return *this;
(gdb) 
587	}
(gdb) 
Upp::RichEdit::SerializeSettings (this=0xbfff707c, s=@0xbffe6c20) at /Users/lundman/src/upp/uppsrc/RichEdit/Editor.cpp:456
456		s % showcodes;
(gdb) p unit
$9 = 16777216


Seems it is given a default value, then gets EndianSwapped, when maybe it should only be endianswapped when read?




Oops. I am stupid. There must be TWO swaps, one before SerializeRaw, second after it!

void Stream::SerializeRaw(word *data, dword count) {
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
	SerializeRaw((byte *)data, 2 * count);
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
}

void Stream::SerializeRaw(dword *data, dword count) {
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
	SerializeRaw((byte *)data, 4 * count);
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
}

void Stream::SerializeRaw(uint64 *data, dword count) {
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
	SerializeRaw((byte *)data, 8 * count);
#ifdef CPU_BE
	EndianSwap(data, count);
#endif
}



(later we most likely should speed optimize that)

Mirek
Re: MacOS X woes [message #7287 is a reply to message #7286] Wed, 20 December 2006 09:50 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
I pretty guessed that was the case, and it fixed it. It starts up correctly, and looks nice. No change in the icons that are off-colour still.

Can't build anything at the moment, but I think that is due to that the -current version is "in between" versions, maybe.

HelloWorld.cpp:

hello.cpp:3: error: expected class name before `{' token


Hmm odd - but anyway, will sync again next change.

What we were fixing was the Image Editor in ide, and that does work now (reading my little endian .iml file and displays correctly) so that is one bug down.

To focus on why icons in the IDE are odd coloured, where are they coming from? For example the "Help Topics"'s question mark icon?

Any of the Examples do simple .png, .bmp tests?





Re: MacOS X woes [message #7288 is a reply to message #7287] Wed, 20 December 2006 09:59 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Ah no I lie, it was just that my icon had little colour.

If I draw a line on icons

line of red
line of green
line of blue
line of purple

I visually see
line of "nothing"
line of "nothing"
line of blue
line of cyan

Hmm maybe I shoul dhave screenshot that.. So, are RGBA perhaps needed to be Endian swapped too?
Re: MacOS X woes [message #7289 is a reply to message #7288] Wed, 20 December 2006 10:50 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Yes, very likely, RGBA has to be swapped before being sent to X11.

There are two ways how to do that. I think we should try to alter RGBA structure itself first

Core/Color.cpp

#ifdef CPU_LE
struct RGBA : Moveable<RGBA> {
	byte b, g, r, a;
};
#else
struct RGBA : Moveable<RGBA> {
	byte a, r, g, b;
};
#endif


Mirek
Re: MacOS X woes [message #7291 is a reply to message #7289] Wed, 20 December 2006 13:23 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
http://netbsd.interq.or.jp/~lundman/osx8.jpg

Very pretty. Running out of things to fix now. Only thing missing is the ability to specify linking options, or somehow be able to do cross-compile for the other arch.

Final code changes:
Core/Core.h
#endif // #ifdef flagFREEBSD

#ifdef flagOSX11
    #define PLATFORM_OSX11
    #define PLATFORM_POSIX
    #ifdef flagGUI
        #define PLATFORM_X11
    #endif

    #ifdef flagTESTLEAKS
        #define TESTLEAKS
    #endif

     // defines set by OsX for us.                                              
    #ifdef __POWERPC__
        #define flagPOWERPC
    #endif

    #ifdef __i386__
        #define flagX86
    #endif

#endif

#elif defined(flagPPC)
    #define CPU_32
    #define CPU_PPC
    #define CPU_BE
    #define CPU_BIG_ENDIAN
    #define CPU_ALIGNED
+#elif defined(flagPOWERPC)
+    #define CPU_32
+    #define CPU_POWERPC
+    #define CPU_BE
+    #define CPU_BIG_ENDIAN
+    #define CPU_ALIGNED
#else



And the same changed in CppBuilder.cpp and GccBuilder.cpp, Host.cpp, bmphdr.h

And the 2 PackageOrganiser changes.

Next semi-stable release I can make a PPC binary, but Intel needs to wait for the Link options (unless I temporarily hardcode it)

Re: MacOS X woes [message #7292 is a reply to message #7291] Wed, 20 December 2006 16:06 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Do you think you could zip and post all changed files? (Just to be sure that I apply changes correctly).

Mirek
Re: MacOS X woes [message #7299 is a reply to message #7292] Thu, 21 December 2006 02:21 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
As requested, attached file.

I guess I could also mention two other things, they don't really affect the usage of U++, but sometimes perfection is desirable.

When a Window is minimized (or possibly removed) Console gets:
X Error: BadMatch (invalid parameter attributes), request: X_SetInputFocus, resource id: 6295038 = 600DFE


but it is just noisy, no noticable impact.

And when you exit the Ide:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x000004d0
0x00f20468 in XQueryExtension ()
(gdb) bt
#0  0x00f20468 in XQueryExtension ()
#1  0x00f161c0 in XInitExtension ()
#2  0x018bf34c in XextAddDisplay ()
#3  0x00df11e0 in XRenderFreePicture ()
#4  0x00320568 in Upp::Image::Data::SysRelease (this=0x1bd3488) at /Users/lundman/src/upp/uppsrc/Draw/ImageX11.cpp:63
#5  0x002fdbf4 in Upp::Image::Data::~Data (this=0x1bd3488) at Image.cpp:324
#6  0x005850dc in Upp::Image::Data::Release (this=0x1bd3488) at Image.h:117
#7  0x002fdd04 in Upp::Image::~Image (this=0x200993c) at Image.cpp:278
#8  0x0044928c in Upp::Iml::IImage::~IImage (this=0x2009938) at Image.h:253
#9  0x0045a694 in Upp::DestroyArray<Upp::Iml::IImage> (t=0x2009938, lim=0x2009a10) at Topt.h:175
#10 0x0045a76c in Upp::Vector<Upp::Iml::IImage>::Free (this=0x91ea40) at Vcont.hpp:101
#11 0x0045a80c in Upp::Vector<Upp::Iml::IImage>::~Vector (this=0x91ea40) at Vcont.h:82
#12 0x0045a848 in Upp::AMap<Upp::String, Upp::Iml::IImage, Upp::Vector<Upp::Iml::IImage>, Upp::StdHash<Upp::String> >::~AMap (this=0x91ea04) at Map.h:2
#13 0x0045a8c0 in Upp::VectorMap<Upp::String, Upp::Iml::IImage, Upp::StdHash<Upp::String> >::~VectorMap (this=0x91ea00) at Map.h:130
#14 0x0047571c in Upp::Iml::~Iml (this=0x91e9f4) at Image.h:252
#15 0x002ae584 in __tcf_0 () at iml_source.h:54
#16 0x00003a44 in cxa_atexit_wrapper ()
#17 0x9001455c in __cxa_finalize ()
#18 0x90014444 in exit ()
#19 0x00002c58 in _start ()
#20 0x00002958 in start ()


But all files are saved correctly, so again, no impact, just not "clean". I used File/Exit there, but same happens when you push Close X-icon.

Re: MacOS X woes [message #7301 is a reply to message #7299] Thu, 21 December 2006 04:29 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Bored at work, so I looked at it. Reason it complains, is that Xdisplay is NULL, presumably already been freed.

I changed the code to
void Image::Data::SysRelease()
{
    if(picture) {
        if(Xdisplay) XRenderFreePicture(Xdisplay, picture);
        ResCount -= !paintonly;
        picture = 0;
    }
    if(picture8) {
        if (Xdisplay) XRenderFreePicture(Xdisplay, picture8);


And now I get:

Program exited normally.

So that is something. Might not be the proper fix though.

Re: MacOS X woes [message #7308 is a reply to message #7301] Thu, 21 December 2006 14:05 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

I sent a binary of my app to a colleague to check and we found an interesting problem. It does not start up, but spins forever, ktrace tells us it is in:

11119 UFxp     CALL  open(0xe521f4,0,0) 
11119 UFxp     NAMI  "libgtk-x11-2.0.so" 11119 UFxp     RET   open -1 errno 2 No such file or directory 
11119 UFxp     CALL  close(0xffffffff) 
11119 UFxp     RET   close -1 errno 9 Bad file descriptor 
11119 UFxp     CALL  open(0xbfffefa0,0,0)
11119 UFxp     NAMI  "libgtk-x11-2.0.so.36" 
11119 UFxp     RET   open -1 errno 2 No such file or directory


Which is interesting, since it isn't linked against those libraries the usual way. I assume then that you use dynamic library load at run time, and perhaps does not deal with the error as well as one would hope? What should normally happen on failure to open a library?

Lund
Re: MacOS X woes [message #7316 is a reply to message #7308] Thu, 21 December 2006 21:25 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
U++ tries to dlopen gtk libraries to use it for theming widgets.

If that fails, "standard" look is used.

Mirek
Re: MacOS X woes [message #7325 is a reply to message #7316] Fri, 22 December 2006 12:34 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member

Ok, I will try with the latest build to see if it still happens, that was a 605 build.

I will hold off on 612-dev2 as it doesn't have all the OsX changes, and stay with the -current versions for now.

Re: MacOS X woes [message #7335 is a reply to message #7325] Fri, 22 December 2006 19:09 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
Applied all changes EXCEPT bmphdr, which does not make a sense to me... (casting word reference to word reference?!).

But maybe it was just old version.

Mirek
Re: MacOS X woes [message #7340 is a reply to message #7335] Sat, 23 December 2006 04:43 Go to previous messageGo to next message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
Thank you! Synced and trying... You forgot the Color.h changes for RGBA.

Compiling we get:


Bmp.cpp
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h: In member function 'void Upp::BMP_FILEHEADER::SwapEndian()':
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:18: error: cannot bind packed field '((Upp::BMP_FILEHEADER*)this)->Upp::BMP_FILEHEADER::
        bfType' to 'Upp::word&'
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:19: error: cannot bind packed field '((Upp::BMP_FILEHEADER*)this)->Upp::BMP_FILEHEADER::
        bfSize' to 'Upp::dword&'

[snip]


Which I can "fix" by casting it (lets me compile it at least)

Later on I get:

uppsrc/CtrlCore/Win32Proc.cpp:3:20 error winnls.h: No such file or directory


I assume it is just too high up, actually its included twice, so I just removed the top one.

Install.cpp
/Users/lundman/src/upp/uppsrc/ide/Install.cpp: In member function 'void XInstallDlg::FindInstFolder()':
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:267: error: 'path' was not declared in this scope
/Users/lundman/src/upp/uppsrc/ide/Install.cpp: In constructor 'XInstallDlg::XInstallDlg()':
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:280: error: 'tutorial' was not declared in this scope
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:281: error: 'path' was not declared in this scope
/Users/lundman/src/upp/uppsrc/ide/Install.cpp: In function 'bool Install()':
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:304: error: 'struct XInstallDlg' has no member named 'path'
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:311: error: 'struct XInstallDlg' has no member named 'path'
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:346: error: 'struct XInstallDlg' has no member named 'tutorial'
ide: 1 file(s) built in (0:04.97), 4977 msecs / file, duration = 5748 msecs



Apart from that, builds.

Re: MacOS X woes [message #7342 is a reply to message #7340] Sat, 23 December 2006 09:03 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 14290
Registered: November 2005
Ultimate Member
lundman wrote on Fri, 22 December 2006 22:43

Thank you! Synced and trying... You forgot the Color.h changes for RGBA.



You forgot to send the file Smile


Quote:


/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:18: error: cannot bind packed field '((Upp::BMP_FILEHEADER*)this)->Upp::BMP_FILEHEADER::
bfType' to 'Upp::word&'



Ahh, "packed field" rings the bell - it treats the __atrribute__(packed) using bit fields! Which makes your fix most likely wrong. Tried to fix (by adding SwapEndian functions which operate with value input and value return).

If it compiles, please try to load some .bmp files - there is nice examples/ImageView.

Quote:


Later on I get:

uppsrc/CtrlCore/Win32Proc.cpp:3:20 error winnls.h: No such file or directory


I assume it is just too high up, actually its included twice, so I just removed the top one.



Fixed.

Quote:


Install.cpp
/Users/lundman/src/upp/uppsrc/ide/Install.cpp: In member function 'void XInstallDlg::FindInstFolder()':
/Users/lundman/src/upp/uppsrc/ide/Install.cpp:267: error: 'path' was not declared in this scope




Interesting. path should be defined in ide.lay.

Mirek
Re: MacOS X woes [message #7351 is a reply to message #7342] Sat, 23 December 2006 10:58 Go to previous messageGo to previous message
lundman is currently offline  lundman
Messages: 175
Registered: March 2006
Location: Tokyo
Experienced Member
It was your fix Smile
Color.h:
#ifdef PLATFORM_WIN32
struct RGBA : Moveable<RGBA> {
        byte b, g, r, a;
};
#endif

#ifdef PLATFORM_POSIX
#ifdef CPU_BE
struct RGBA : Moveable<RGBA> {
        byte a, r, g, b;
};
#else
struct RGBA : Moveable<RGBA> {
        byte b, g, r, a;
};
#endif
#endif

#ifndef PLATFORM_WIN32



"path" is defined in .lay, I checked, but it just doesn't want to compile Smile



bmphdr (looks like no change):
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h: In member function 'void Upp::BMP_FILEHEADER::SwapEndian()':
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:18: error: no matching function for call to 'Upp::BMP_FILEHEADER::SwapEndian(Upp::word&)
        '
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:15: note: candidates are: void Upp::BMP_FILEHEADER::SwapEndian()
/Users/lundman/src/upp/uppsrc/plugin/bmp/bmphdr.h:19: error: no matching function for call to 'Upp::BMP_FILEHEADER::SwapEndian(Upp::dword&
        )'

etc






Next Topic: 701-dev1 / 2007.1beta on Mac OSX
Goto Forum:
  


Current Time: Sat Apr 25 16:24:16 GMT+2 2026

Total time taken to generate the page: 0.01082 seconds