Date: Mon, 15 Mar 1999 12:26:30 -0500 From: Matthew Hagerty <matthew@venux.net> To: freebsd-hackers@freebsd.org Subject: Program can't get pointer-to-function, gdb can... Message-ID: <4.1.19990315121447.009ae700@mail.venux.net>
index | next in thread | raw e-mail
Greetings,
I'm running 2.2.7-RELEASE (I know, I know), and I am trying to use a pdf
lib inside php3. The program crashes when I try to call the function
PDF_get_info. I ran the program in gdb, it fails when trying to get the
address of the pdf_default_error_handler function (listing 1). However, if
I step up to that point in the program, set the value by hand, then skip
over the program assignment, it works (listing 2)!! Any insight would be
greatly appreciated.
Thanks,
Matthew
bash-2.02# gdb php
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
(gdb) list p_basic.c:95
90
91 PDF_info*
92 PDF_get_info(void)
93 {
94 PDF_info *info;
95
96 info = (PDF_info *) PDF_malloc(sizeof(PDF_info), "PDF_get_info");
97
98 info->binary_mode = false;
99 info->required_compatibility= PDF1_1;
(gdb) break 96
Breakpoint 1 at 0x590ff: file p_basic.c, line 96.
(gdb) run -f test2.php3
Starting program: /usr/local/tempphp/php-3.0.7/php -f test2.php3
Breakpoint 1, PDF_get_info () at p_basic.c:96
96 info = (PDF_info *) PDF_malloc(sizeof(PDF_info), "PDF_get_info");
(gdb) next
98 info->binary_mode = false;
(gdb) print info
$1 = (PDF_info *) 0xe73c0
(gdb) print *info
$2 = {binary_mode = 0, required_compatibility = PDF1_0, error_handler = 0,
Keywords = 0x0, Subject = 0x0, ModDate = 0x0, Title = 0x0,
CreationDate = 0x0, Creator = 0x0, Producer = 0x0, Author = 0x0,
fontpath = 0x0}
(gdb) next
99 info->required_compatibility= PDF1_1;
(gdb) next
102 info->Keywords = NULL;
(gdb) next
103 info->Subject = NULL;
(gdb) next
104 info->ModDate = NULL;
(gdb) next
105 info->Title = NULL;
(gdb) next
106 info->CreationDate = NULL;
(gdb) next
107 info->Creator = NULL;
(gdb) print *info
$3 = {binary_mode = 0, required_compatibility = PDF1_1, error_handler = 0,
Keywords = 0x0, Subject = 0x0, ModDate = 0x0, Title = 0x0,
CreationDate = 0x0, Creator = 0x0, Producer = 0x0, Author = 0x0,
fontpath = 0x0}
(gdb) next
108 info->Producer = NULL;
(gdb) next
109 info->Author = NULL;
(gdb) next
111 info->error_handler = pdf_default_error_handler;
(gdb) print *info
$4 = {binary_mode = 0, required_compatibility = PDF1_1, error_handler = 0,
Keywords = 0x0, Subject = 0x0, ModDate = 0x0, Title = 0x0,
CreationDate = 0x0, Creator = 0x0, Producer = 0x0, Author = 0x0,
fontpath = 0x0}
(gdb) next
Program received signal SIGSEGV, Segmentation fault.
0x5917b in PDF_get_info () at p_basic.c:111
111 info->error_handler = pdf_default_error_handler;
(gdb) print info
$5 = (PDF_info *) 0xe73c0
(gdb) print *info
$6 = {binary_mode = 0, required_compatibility = PDF1_1, error_handler = 0,
Keywords = 0x0, Subject = 0x0, ModDate = 0x0, Title = 0x0,
CreationDate = 0x0, Creator = 0x0, Producer = 0x0, Author = 0x0,
fontpath = 0x0}
(gdb) quit
The program is running. Quit anyway (and kill it)? (y or n) y
bash-2.02#
BUT, if I set the value inside gdb, it works...
bash-2.02# gdb php
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd),
Copyright 1996 Free Software Foundation, Inc...
(gdb) list p_basic.c:110
105 info->Title = NULL;
106 info->CreationDate = NULL;
107 info->Creator = NULL;
108 info->Producer = NULL;
109 info->Author = NULL;
110
111 info->error_handler = pdf_default_error_handler;
112
113 info->fontpath = PDF_DEFAULT_FONT_PATH;
114 return info;
(gdb) break 110
Breakpoint 1 at 0x59178: file p_basic.c, line 110.
(gdb) run -f test2.php3
Starting program: /usr/local/tempphp/php-3.0.7/php -f test2.php3
Breakpoint 1, PDF_get_info () at p_basic.c:111
111 info->error_handler = pdf_default_error_handler;
(gdb) print info
$1 = (PDF_info *) 0xe73c0
(gdb) print *info
$2 = {binary_mode = 0, required_compatibility = PDF1_1, error_handler = 0,
Keywords = 0x0, Subject = 0x0, ModDate = 0x0, Title = 0x0,
CreationDate = 0x0, Creator = 0x0, Producer = 0x0, Author = 0x0,
fontpath = 0x0}
(gdb) print pdf_default_error_handler
$3 = {void (int, char *, char *)} 0x58e44 <pdf_default_error_handler>
(gdb) set info->error_handler = pdf_default_error_handler
(gdb) print *info
$4 = {binary_mode = 0, required_compatibility = PDF1_1,
error_handler = 0x58e44 <pdf_default_error_handler>, Keywords = 0x0,
Subject = 0x0, ModDate = 0x0, Title = 0x0, CreationDate = 0x0,
Creator = 0x0, Producer = 0x0, Author = 0x0, fontpath = 0x0}
(gdb) jump 112
Continuing at 0x59186.
Program exited normally.
(gdb)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4.1.19990315121447.009ae700>
