freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft-devel] More crashes on ARM


From: Frank Meerkoetter
Subject: Re: [ft-devel] More crashes on ARM
Date: Mon, 30 Jan 2006 14:41:24 +0100
User-agent: Internet Messaging Program (IMP) H3 (4.0)

Quoting david turner <address@hidden>:

Hi,

thanks for your explanation.
It seems that FT_CMap_New() isn't called at all.

(gdb) b 'FT_CMap_New'
Function "FT_CMap_New" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y

Breakpoint 1 ('FT_CMap_New') pending.
(gdb) r
Starting program: /root/apdf -qws -f /Doc*/ms*
[Thread debugging using libthread_db enabled]
[New Thread 1024 (LWP 66)]
Breakpoint 2 at 0x409eafcc: file ftobjs.c, line 2329.
Pending breakpoint "'FT_CMap_New'" resolved

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 66)]
0x00000000 in ?? ()
(gdb) bt
#0  0x00000000 in ?? ()
#1  0x409eb304 in FT_Get_Next_Char (face=0x4bb90, charcode=0,
    agindex=0xbefff748) at ftobjs.c:2436

To verify that this isn't a problem with the debugger i also
placed a printf() inside the FT_CMap_New() function.

Regards,
  Frank


Sorry, I should have been more accurate.

You should set the watchpoint just after the creation of the FT_CMap
object (this happens in FT_CMap_New in src/base/ftobjs.c). there is
code like this:

    if ( !FT_ALLOC( cmap, clazz->size ) )
    {
      cmap->charmap = *charmap;
      cmap->clazz   = clazz;

      if ( clazz->init )
      {
        error = clazz->init( cmap, init_data );
        if ( error )
          goto Fail;
      }

      /* add it to our list of charmaps */

you should set the watchpoint after the "cmap->clazz = clazz" statement.
So it should be:

- first set a breakpoint at the "cmap->clazz = clazz" statement
  (line 2598 of current CVS)

- when the breakpoint is reached, add a watchpoint to the
  memory location of the 'clazz' field, i.e.:

     p &cmap->clazz
     0x6734efd4                          (or some other value)
     watch *(char*)0x6734efd4   (replace with previous value)
     c

- repeat each time the first breakpoint is reached (there may be
  several charmaps in the font)

the watchpoint should trigger whenever the memory location is
updated. Note that the watchpoint should make things run very
slowly on some platforms.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]