This is the mail archive of the gdb-prs@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

threads/1872: After segfault on client app "info threads" causes gdb to segfault


>Number:         1872
>Category:       threads
>Synopsis:       After segfault on client app "info threads" causes gdb to segfault
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 18 07:18:01 UTC 2005
>Closed-Date:
>Last-Modified:
>Originator:     Henrik probell
>Release:        6.3
>Organization:
>Environment:
Debian Woody/Linux 2.6.9-2-686-smp #1 SMP Sat Jan 8 13:48:57 EST 2005 i686 GNU/Linux,
g++ (GCC) 3.4.3,
GNU gdb 6.3.50.20050211 (Have tried other versions of 6.3 but this was the newest one I tried)
>Description:
When debugging a program (that created and destroyed an object that created and destroyed pthreads) and that program segfaults (which it does after a while, still don't know exactly why - nevermind). Trying to see what happened by typing "info threads" causes GDB to segfault.

I came across this on GDB 6.3-debian but downloading and using gdb-weekly-6.3.50.20050211 gave the same result.

Cheers.

Transcript from GDB:

(gdb) run
Starting program: /home/henrik/trev-devel/henrik/pc/gdbbug/gdbbug
[Thread debugging using libthread_db enabled]
[New Thread -1210387360 (LWP 27524)]
Main start
[New Thread -1210389584 (LWP 27527)]
tv_sec 1108705378 tv_nsec 612926000
tv_sec 1108705378 tv_nsec 613005000

Program received signal SIG32, Real-time event 32.
[Switching to Thread -1210389584 (LWP 27527)]
0xffffe410 in __kernel_vsyscall ()
(gdb)
(gdb) cont
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0xb7fe06eb in __condvar_tw_cleanup () from /lib/tls/i686/cmov/libpthread.so.0
(gdb) info threads
  1 Thread -1210387360 (LWP 27524)  0xffffe410 in __kernel_vsyscall ()
Segmentation fault


Attaching another GDB process to the GDB that crashes yields this:

(gdb) attach 27481
Attaching to process 27481
warning: could not load vsyscall page because no executable was specified
warning: try using the "file" command first
Reading symbols from /home/henrik/download/gdb/gdb/gdb...done.
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
Reading symbols from /lib/libncurses.so.5...done.
Loaded symbols for /lib/libncurses.so.5
Reading symbols from /lib/tls/i686/cmov/libm.so.6...done.
Loaded symbols for /lib/tls/i686/cmov/libm.so.6
Reading symbols from /lib/tls/i686/cmov/libdl.so.2...done.
Loaded symbols for /lib/tls/i686/cmov/libdl.so.2
Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/tls/i686/cmov/libthread_db.so.1...done.
Loaded symbols for /lib/tls/i686/cmov/libthread_db.so.1
0xffffe410 in ?? ()
(gdb) cont
Continuing.
Detaching after fork from child process 27524.
Detaching after fork from child process 27525.

Program received signal SIGSEGV, Segmentation fault.
thread_db_map_id2thr (thread_info=
During symbol reading, incomplete CFI data; unspecified registers (e.g., eax) at 0x809a5ff.
0x0, fatal=1) at ../../gdb-6.3.50.20050211/gdb/linux-thread-db.c:314
314       if (thread_info->private->th_valid)
(gdb) bt
#0  thread_db_map_id2thr (thread_info=0x0, fatal=1) at ../../gdb-6.3.50.20050211/gdb/linux-thread-db.c:314
#1  0x0809ba65 in thread_db_fetch_registers (regno=1) at ../../gdb-6.3.50.20050211/gdb/linux-thread-db.c:1004
#2  0x080ddd7d in regcache_raw_read (regcache=0x82e7ed8, regnum=8, buf=0xbfffe778) at ../../gdb-6.3.50.20050211/gdb/regcache.c:590
#3  0x080de191 in deprecated_read_register_gen (regnum=1, buf=0x1 <Address 0x1 out of bounds>)
    at ../../gdb-6.3.50.20050211/gdb/regcache.c:659
#4  0x080deee8 in read_register (regnum=8) at ../../gdb-6.3.50.20050211/gdb/regcache.c:939
#5  0x080def5c in read_register_pid (regnum=8, ptid={pid = 27524, lwp = 27527, tid = -1210389584})
    at ../../gdb-6.3.50.20050211/gdb/regcache.c:951
#6  0x080df3f2 in read_pc_pid (ptid={pid = 27524, lwp = 27527, tid = -1210389584}) at ../../gdb-6.3.50.20050211/gdb/regcache.c:1075
#7  0x080df455 in read_pc () at ../../gdb-6.3.50.20050211/gdb/regcache.c:1088
#8  0x08112659 in switch_to_thread (ptid={pid = 27524, lwp = 27527, tid = -1210389584}) at ../../gdb-6.3.50.20050211/gdb/thread.c:467
#9  0x08112578 in info_threads_command (arg=0x0, from_tty=1) at ../../gdb-6.3.50.20050211/gdb/thread.c:435
#10 0x080b6439 in do_cfunc (c=0x1, args=0x1 <Address 0x1 out of bounds>, from_tty=1) at ../../gdb-6.3.50.20050211/gdb/cli/cli-decode.c:57
#11 0x080b850c in cmd_func (cmd=0x82d2da0, args=0x1 <Address 0x1 out of bounds>, from_tty=1)
    at ../../gdb-6.3.50.20050211/gdb/cli/cli-decode.c:1637
#12 0x0808477c in execute_command (p=0x82b784c "", from_tty=1) at ../../gdb-6.3.50.20050211/gdb/top.c:434
#13 0x0811721f in command_handler (command=0x82b7840 "info threads") at ../../gdb-6.3.50.20050211/gdb/event-top.c:504
#14 0x08117665 in command_line_handler (rl=0x830a8f8 "info threads") at ../../gdb-6.3.50.20050211/gdb/event-top.c:789
#15 0x081f77d5 in rl_callback_read_char () at ../../gdb-6.3.50.20050211/readline/callback.c:123
#16 0x08116b6b in rl_callback_read_char_wrapper (client_data=0x0) at ../../gdb-6.3.50.20050211/gdb/event-top.c:170
#17 0x0811711a in stdin_event_handler (error=0, client_data=0x1) at ../../gdb-6.3.50.20050211/gdb/event-top.c:420
#18 0x081163fe in handle_file_event (event_file_desc=0) at ../../gdb-6.3.50.20050211/gdb/event-loop.c:722
#19 0x08115eb9 in process_event () at ../../gdb-6.3.50.20050211/gdb/event-loop.c:335
#20 0x08115f18 in gdb_do_one_event (data=0x0) at ../../gdb-6.3.50.20050211/gdb/event-loop.c:372
#21 0x0811377b in catch_errors (func=0x8115ee0 <gdb_do_one_event>, func_args=0x0, errstring=0x821d4de "", mask=1)
    at ../../gdb-6.3.50.20050211/gdb/exceptions.c:515
#22 0x080c4f74 in tui_command_loop (data=0x0) at ../../gdb-6.3.50.20050211/gdb/tui/tui-interp.c:151
#23 0x08113bf3 in current_interp_command_loop () at ../../gdb-6.3.50.20050211/gdb/interps.c:278
#24 0x0807b88b in captured_command_loop (data=0x0) at ../../gdb-6.3.50.20050211/gdb/main.c:92
#25 0x0811377b in catch_errors (func=0x807b880 <captured_command_loop>, func_args=0x0, errstring=0x821d4de "", mask=1)
    at ../../gdb-6.3.50.20050211/gdb/exceptions.c:515
#26 0x0807c194 in captured_main (data=0x0) at ../../gdb-6.3.50.20050211/gdb/main.c:800
#27 0x0811377b in catch_errors (func=0x807b8d0 <captured_main>, func_args=0xbfffed00, errstring=0x821d4de "", mask=1)
    at ../../gdb-6.3.50.20050211/gdb/exceptions.c:515
#28 0x0807c5a3 in gdb_main (args=0x0) at ../../gdb-6.3.50.20050211/gdb/main.c:809
#29 0x0807b86e in main (argc=1, argv=0x1) at ../../gdb-6.3.50.20050211/gdb/gdb.c:35

>How-To-Repeat:
1. Compile with "g++ -D_THREAD_SAFE -D_REENTRANT -gdwarf-2 -O0 -lpthread gdbbug.cc". Not sure how much the switches affect results but this seems to break somewhat reliably.
2. Load up the program in GDB.
3. Disable stops and printing for SIG32. "handle SIG32 nostop noprint"
4. run.
5. Wait for the program to Segfault. Sometimes it does it directly, sometimes it takes a while.
6. Try to see the thread info with "info threads'
7. GDB Segfaults.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-c++src; name="gdbbug.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gdbbug.cc"

I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHRpbWUu
aD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyB2aWJy
YVRocmVhZHMKewpwdWJsaWM6CiAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PSBQdWJsaWMgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ki8KICAvKiBDb25zdHJ1Y3RvciAqLwogIHZpYnJhVGhyZWFkcyhjb25zdCBjaGFyICpwb3J0
KTsKCiAgLyogRGVzdHJ1Y3Rvciwgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnV0IHJh
dGhlciBpbmRpcmVjdGx5IGJ5IGRlbGV0ZS4gKi8KICB+dmlicmFUaHJlYWRzKCk7CgogIC8qIFNl
bmRzIGEgc2lnbmFsIHRvIGEgdGhyZWFkICovCiAgaW50IHNpZ25hbFRocmVhZCh1bnNpZ25lZCBj
aGFyIHRocmVhZCk7Cgpwcml2YXRlOiAKICAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSBQcml2YXRlIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PSovCiAgLyogVGhpcyBpcyB3aGF0IGlzIGFjdHVhbGx5IGV4ZWN1dGVkIHdoZW4g
dGhlIHRocmVhZCBpcyBydW5uaW5nICovCiAgdm9pZCAqdGhyZWFkKHZvaWQgKnRocmVhZERhdGEp
OwogIC8qIEhlbHBlciBmdW5jdGlvbiB0byBiZSBhYmxlIHRvIGNhbGwgcHRocmVhZF9jcmVhdGUo
KSAqLwogIHN0YXRpYyB2b2lkICp0aHJlYWRIZWxwZXIodm9pZCAqYXJncyk7CgogIC8qPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQcml2YXRlIHN0cnVjdCBkZWZzID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogIC8qIFN0cnVjdCB0aGF0IGlzIHVz
ZWQgdG8gYmUgYWJsZSB0byBnaXZlIGEgc2luZ2xlIHBvaW50ZXIKICAgICBjb250YWluaW5nIGxv
dHMgb2YgaW5mbyB0byBhIHB0aHJlYWQgYXQgc3RhcnR1cC4gCiAgICAgVGhpcyBzdHJ1Y3QgYWxz
byBjb250YWlucyBhIHBvaW50ZXIgdG8gaXQncyBjcmVhdGluZyBvYmplY3QuICovCiAgdHlwZWRl
ZiBzdHJ1Y3QgdGhyZWFkX2RhdGF7CiAgICB1bnNpZ25lZCBjaGFyIHRocmVhZDsKICAgIHZpYnJh
VGhyZWFkcyAqcFRoaXM7CiAgfTsKCiAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
IFByaXZhdGUgKG9iamVjdC0pZ2xvYmFsIHZhcmlhYmxlcyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PSovCiAgLyogUG9pbnRlcnMgdG8gdmVjdG9ycyB3aXRoIGNvbmRpdGlvbiB2YXJpYWJs
ZXMgYW5kIG11dGV4ZXMgZm9yIGNvbnRyb2xsaW5nIHRoZSB0aHJlYWRzLiAqLwogIHB0aHJlYWRf
bXV0ZXhfdCAqZ2xDb25kTXV0ZXhlczsKICBwdGhyZWFkX2NvbmRfdCAqZ2xDb25kVmFyczsKCiAg
LyogVGhpcyB3aWxsIHBvaW50IHRvIGEgdmVjdG9yIHdpdGggcG9pbnRlcnMgdG8gdGhlIGRpZmZl
cmVudCB0aHJlYWRzJyBwYXJhbWV0ZXJzICovCiAgdGhyZWFkX2RhdGEgKmdsVGhyZWFkUGFyYW1z
OwoKICAvKiBUaGUgdmFyaWFibGVzIGRlY2xhcmVkIHN0YXRpYyBhcmUgb25seSBjcmVhdGVkIG9u
Y2UgZm9yIGV2ZXJ5IGNsYXNzLCByZWdhcmRsZXNzIG9mCiAgICAgdGhlIG51bWJlciBvZiBpbnN0
YW5jZXMgPSBUaGVzZSB2YXJpYWJsZXMgYXJlIGNvbW1vbiBmb3IgYWxsIHRocmVhZHMgc3Bhd25l
ZCBvZiB0aGlzIGNsYXNzICovCgogIC8qIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIFBJRHMgb2Yg
dGhlIHRocmVhZHMgc3RhcnRlZAogICAgIGJ5IHZpYnJhdGUoKS4gQWxsb2NhdGVkIG9uIGZpcnN0
IGNhbGwgdG8gdmlicmF0ZSgpCiAgICAgZnJlZWQgaW4gdGhlIGRlc3RydWN0b3IgKi8KICBwdGhy
ZWFkX3QgKlRocmVhZFBJRDsKfTsKCgp2aWJyYVRocmVhZHM6OnZpYnJhVGhyZWFkcyhjb25zdCBj
aGFyICpwb3J0KQp7CiAgLyogQWxsb2NhdGUgdGhlIHZlY3RvciB0byBjb250YWluIHRoZSB0aHJl
YWRzJyBQSURzLiAqLwogIFRocmVhZFBJRCA9IG5ldyBwdGhyZWFkX3Q7CgogIC8qIFNldCB1cCB0
aGUgdGhyZWFkIGNyZWF0aW5nIGF0dHJpYnV0ZXMuIEFsbCB0aHJlYWRzIGFyZSBjcmVhdGVkIHdp
dGggdGhlIHNhbWUgYXR0cmlidXRlcy4gKi8KICBwdGhyZWFkX2F0dHJfdCB0aHJlYWRBdHRyaWI7
CgogIC8qIENyZWF0ZSB0aGUgKGRlZmF1bHQpIGF0dHJpYnV0ZXMuIFRoaXMgbWFrZXMgdGhlIHRo
cmVhZHMgY3JlYXRlZCBqb2luYWJsZSBhbmQgY2FuY2VsYWJsZSAoZGVmZXJyZWQpICovCiAgaWYo
cHRocmVhZF9hdHRyX2luaXQoJnRocmVhZEF0dHJpYikpCiAgICAgIHBlcnJvcigicHRocmVhZF9h
dHRyX2luaXQoKSBmYWlsZWQhIik7CgogIC8qIEJ1dCB0aGUgdGhyZWFkcyBzaG91bGQgYmUgY3Jl
YXRlZCBkZXRhY2hlZCAoc28gdGhleSBjbGVhbiB1cCBhZnRlciB0aGVtc2VsdmVzIGFmdGVyIGV4
aXRpbmcpICovCiAgaWYocHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZ0aHJlYWRBdHRyaWIs
IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKSkKICAgICAgcGVycm9yKCJwdGhyZWFkX2F0dHJfc2V0
ZGV0YWNoc3RhdGUoKSBmYWlsZWQhIik7CgoKICAvKiBUaGlzIHdpbGwgaG9sZCBwb2ludGVycyB0
byB0aGUgdGhyZWFkcydzIGRhdGEgc3RydWN0cy4gKi8KICBnbFRocmVhZFBhcmFtcyA9IG5ldyB0
aHJlYWRfZGF0YTsKCiAgLyogQWxsb2NhdGUgdGhlIGNvbmRpdGlvbiB2YXJpYWJsZXMgYW5kIHRo
ZWlyIG11dGV4ZXMsIG9uZSBwYWlyIGZvciBlYWNoIHRocmVhZC9jaGFubmVsLiAqLwogIGdsQ29u
ZE11dGV4ZXMgPSBuZXcgcHRocmVhZF9tdXRleF90OwogIGdsQ29uZFZhcnMgPSBuZXcgcHRocmVh
ZF9jb25kX3Q7CgogIC8qIEluaWFsaXplIHRoZSBjb25kaXRpb24gdmFyaWFibGUvbXV0ZXggcGFp
ciBmb3IgdGhlIHRocmVhZCB0byBiZSBjcmVhdGVkICovCiAgcHRocmVhZF9tdXRleF9pbml0KGds
Q29uZE11dGV4ZXMsIE5VTEwpOwogIAogIHB0aHJlYWRfY29uZF9pbml0KGdsQ29uZFZhcnMsIE5V
TEwpOwogIAogIC8qIExvY2sgdGhlIHRocmVhZCBzcGVjaWZpYyBtdXRleCAtIFRoaXMgcHJldmVu
dHMgdGhlIHRocmVhZCBmcm9tIGdldHRpbmcgYW55d2hlcmUgdW50aWwgdGhlCiAgICAgaW5pdGFs
aXphdGlvbiBpcyBkb25lLiAqLwogIHB0aHJlYWRfbXV0ZXhfbG9jayhnbENvbmRNdXRleGVzKTsK
ICAKICAvKiBJbnNlcnQgdGhlIGdpdmVuIHBhcmFtZXRlcnMgaW4gYSB0aHJlYWRfZGF0YSBzdHJ1
Y3QgKi8KICBnbFRocmVhZFBhcmFtcy0+dGhyZWFkID0gMDsgLy8gVGhlIHRocmVhZAogIGdsVGhy
ZWFkUGFyYW1zLT5wVGhpcyA9IHRoaXM7IC8vIFRoZSBhZHJlc3Mgb2YgdGhlIHBhcmVudCBvYmpl
Y3QKICAKICAvKiBTdGFydCB0aGUgdGhyZWFkICh0aGlzIGRvZXMgc29tZSBtYWdpYyBhbmQgdGhl
biBnb2VzIHRvIHRocmVhZEhlbHBlcigpIHdoaWNoIGlzIGEgd3JhcHBlciBmb3IgdGhyZWFkKCkp
LiAqLwogIHB0aHJlYWRfY3JlYXRlKFRocmVhZFBJRCwgJnRocmVhZEF0dHJpYiwgdmlicmFUaHJl
YWRzOjp0aHJlYWRIZWxwZXIsIGdsVGhyZWFkUGFyYW1zKTsKICAKICAvKiBXYWl0IGZvciB0aGUg
dGhyZWFkIHRvIHNpZ25hbCB0aGF0IGl0J3MgcmVhZHkgKi8KICBwdGhyZWFkX2NvbmRfd2FpdChn
bENvbmRWYXJzLCBnbENvbmRNdXRleGVzKTsKICAKICAvKiBMZXQgdGhlIHRocmVhZCBnby4gKi8K
ICBwdGhyZWFkX211dGV4X3VubG9jayhnbENvbmRNdXRleGVzKTsKICAKfQoKCi8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogRGVzdHJ1Y3Rvciwgc3VwcG9z
ZWQgdG8gY2xvc2UgdGhlIGNsYXNzIHByb3Blcmx5LiBDYW5jZWxzIHRoZSB0aHJlYWRzIGFuZCB3
YWl0cyBmb3IgdGhlbSB0byBqb2luLiAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCnZpYnJhVGhyZWFkczo6fnZpYnJhVGhyZWFkcygpCnsKICBpbnQgZXJy
b3I7CgogIC8qIENhbmNlbCB0aGUgdGhyZWFkcyBhbmQgZGVhbGxvY2F0ZSBvYmplY3Qtd2lkZSB2
YXJpYWJsZXMgYW5kIHN0cnVjdHMuICovCgogIC8qIFJlcXVlc3QgdGhlIHRocmVhZCBmb3IgImNo
YW5uZWwiIHRvIGJlIGNhbmNlbGVkLiAqLwogIHB0aHJlYWRfY2FuY2VsKCpUaHJlYWRQSUQpOwog
IAogIC8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gam9pbiBzbyB3ZSBrbm93IGl0J3Mgc2h1dCBk
b3duLiAqLwogIHB0aHJlYWRfam9pbigqVGhyZWFkUElELCBOVUxMKTsKICAKICAvKiBEZXN0cm95
IHRoZSBjb25kaXRpb24gdmFyaWFibGVzIGZvciB0aGUgdGhyZWFkICh0aGUgbXV0ZXhlcyBhcmUK
ICAgICBoZWxkIGJ5IHRoZSB0aHJlYWQgd2hlbiB0aGlzIGlzIGNhbGxlZCBzbyB0aGV5IGdldCBj
YW5jZWxsZWQgd2l0aAogICAgIHRoZSB0aHJlYWQuKi8KICBwdGhyZWFkX2NvbmRfZGVzdHJveShn
bENvbmRWYXJzKTsKCiAgZGVsZXRlIGdsQ29uZE11dGV4ZXM7CiAgZGVsZXRlIGdsQ29uZFZhcnM7
CiAgZGVsZXRlIGdsVGhyZWFkUGFyYW1zOwogIGRlbGV0ZSBUaHJlYWRQSUQ7Cn0KCgovKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogSGVscGVyIGZ1bmN0aW9u
IHRvIGJlIGFibGUgdG8gY2FsbCBwdGhyZWFkX2NyZWF0ZSgpIHdoaWNoIGlzIG5vdCByZWFsbHkg
YSBDKysgZnVuY3Rpb24uCiAgIEVzc2VudGlhbGx5IHRoZSB0aHJlYWQgaXMgc3Bhd25lZCBhbmQg
c3RhcnRzIGV4ZWN1dGluZyBoZXJlLiBUaGlzIGZ1bmN0aW9uIHRoZW4gImdvZXMgYmFjayIKICAg
dG8gdGhlIEMrKyBvYmplY3RzLiBBIGJpdCB3aWVyZCwgeWVzLCBidXQgdGhlcmUgaXNuJ3QgYW55
IG90aGVyIHdheS4gKD8pICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwp2b2lkICp2aWJyYVRocmVhZHM6OnRocmVhZEhlbHBlcih2b2lkICphcmdzKQp7CiAg
LyogUmUtY2FzdCB0aGUgc3RydWN0IHBvaW50ZXIgdG8gYSBsb2NhbCBwb2ludGVyIG9mIGl0J3Mg
b3JpZ25hbCB0eXBlLiAqLwogIHRocmVhZF9kYXRhICpwSW5mbyA9IHN0YXRpY19jYXN0IDx0aHJl
YWRfZGF0YSAqPihhcmdzKTsKICAgICAgCiAgLyogVGhlbiBjYWxsIHRoZSB0aHJlYWQoKSBtZXRo
b2Qgd2l0aCB0aGUgZGF0YSBzdHJ1Y3QgYXMgYW4gYXJndW1lbnQgdXNpbmcKICAgICB0aGUgcG9p
bnRlciBnaXZlbiBpbiB0aGUgZGF0YSBzdHJ1Y3QgdG8gZ2V0IHRoZSByaWdodCBvYmplY3QuICov
CiAgcEluZm8tPnBUaGlzLT50aHJlYWQocEluZm8pOwogIAogIC8qIHRocmVhZCgpIHNob3VsZCBu
ZXZlciByZXR1cm4uIFRoZSBvcmRpbmFyeSB3YXkgZm9yIGl0IHRvIHF1aXQgaXMgdG8gZ2V0IGNh
bmNlbGVkLiAqLwoKICAvKiBXaGVuIHdlIGNvbWUgaGVyZSB0aGUgbWFuIHRocmVhZCBoYXMgZmlu
aXNoZWQgYW5kIHdlIG1ha2UgYSBncmFjZWZ1bCBleGl0LiAqLwogIHB0aHJlYWRfZXhpdChOVUxM
KTsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBU
aGlzIGlzIHdoYXQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQgd2hlbiB0aGUgdGhyZWFkIGlzIHJ1bm5p
bmcgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQg
KnZpYnJhVGhyZWFkczo6dGhyZWFkKHZvaWQgKnRocmVhZERhdGEpCnsKICBzdHJ1Y3QgdGhyZWFk
X2RhdGEgKmxvY2FsVGhyZWFkRGF0YVB0cjsKICBzdHJ1Y3QgdGltZXNwZWMgd2FpdFVudGlsOwog
IHN0cnVjdCB0aW1ldmFsIHRpbWVOb3c7CiAgdW5zaWduZWQgY2hhciBsb2NhbFRocmVhZDsKICBs
b25nIGRlbGF5TmFub3NlY29uZHMsIGRlbGF5U2Vjb25kczsKCiAgLyogQ29weSB0aGUgc3RydWN0
IGluIHRoZSBwb2ludGVyIHRvIGEgbG9jYWwgc3RydWN0IGFuZCBjYXN0IGl0IGJhY2sgdG8gaXQn
cwogICAgIG9yaWdpbmFsICJzaGFwZSIuIE5vdGUhIFRoaXMgZG9lc24ndCBjb3B5IHRoZSBkYXRh
LCBpdCBqdXN0IHJlY2FzdHMgdGhlCiAgICAgcG9pbnRlciEgTXV0ZXhlcyBzaG91bGQgYmUgdXNl
ZCEgV2hlbiByZWFkaW5nIHRoaXMgZGF0YSEgKi8KICBsb2NhbFRocmVhZERhdGFQdHIgPSAoc3Ry
dWN0IHRocmVhZF9kYXRhICopdGhyZWFkRGF0YTsKCiAgLyogQ29weSB0aGUgdmFsdWUgaW4gdGhl
IHN0cnVjdCB0byBhIGxvY2FsIHZhcmlhYmxlLiBUaGlzIGlzLCB1bmJlbGVsaWV2YWJseSwgInNh
ZmUiLiAidGhyZWFkIiBpcyBvbmx5IG1vZGlmaWVkCiAgICAgb25jZSwgYmVmb3JlIHRoZSB0aHJl
YWQgaXMgc3Bhd25lZC4gKi8KICBsb2NhbFRocmVhZCA9IGxvY2FsVGhyZWFkRGF0YVB0ci0+dGhy
ZWFkOwogIAogIC8qIExvY2sgdGhlIG11dGV4IHRoYXQgd2lsbCBiZSB1c2VkIHdpdGggdGhlIGNv
bmRpdGlvbiB2YXJpYWJsZS4gKi8KICBwdGhyZWFkX211dGV4X2xvY2soJmdsQ29uZE11dGV4ZXNb
bG9jYWxUaHJlYWRdKTsKCiAgLyogVGhlbiBzaWduYWwgdGhlIGNvbnN0cnVjdG9yIHNvIGl0IGtu
b3dzIHRoYXQgdGhlIHRocmVhZCBpcyByZWFkeS4gKi8KICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZn
bENvbmRWYXJzW2xvY2FsVGhyZWFkXSk7CgogIC8qIFdhaXQgaGVyZSBmb3IgYSBzaWduYWwgZnJv
bSBzaWduYWxUaHJlYWRzIHRvIHN0YXJ0IHRoZSBmaXJzdCB2aWJyYXRpb24uICovCiAgcHRocmVh
ZF9jb25kX3dhaXQoJmdsQ29uZFZhcnNbbG9jYWxUaHJlYWRdLCAmZ2xDb25kTXV0ZXhlc1tsb2Nh
bFRocmVhZF0pOwoKICAvKiBUaGlzIGxvb3AgaXMgcnVuIG92ZXIgYW5kIG92ZXIgdW50aWwgdGhl
IG9iamVjdCBpcyBkZXN0cm95ZWQuICovCiAgd2hpbGUoMSkgCiAgICB7CiAgICAgIC8qIEdldCB0
aGUgY3VycmVudCB0aW1lLiAqLwogICAgICBnZXR0aW1lb2ZkYXkoJnRpbWVOb3csIE5VTEwpOwog
ICAgICAKICAgICAgLyogQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSB0aW1lIHRvIHdhaXQgdW50aWwg
c28gdGhhdCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IHVuZGVyc3RhbmRzIGl0LiAqLwogICAgICB3
YWl0VW50aWwudHZfc2VjID0gdGltZU5vdy50dl9zZWMgKyAxOwogICAgICB3YWl0VW50aWwudHZf
bnNlYyA9IHRpbWVOb3cudHZfdXNlYyoxMDAwOwogICAgICAKICAgICAgLyogUmV0dXJuIHRoZSBz
aWduYWwuIFdhaXQuICovCiAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJmdsQ29uZFZhcnNbbG9j
YWxUaHJlYWRdKTsKICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmZ2xDb25kVmFyc1tsb2Nh
bFRocmVhZF0sICZnbENvbmRNdXRleGVzW2xvY2FsVGhyZWFkXSwgJndhaXRVbnRpbCk7CiAgICB9
IC8vIHdoaWxlCgp9CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi8qIE1ldGhvZCB0aGF0IHdpbGwgd2FrZSB1cCB0aGUgdGhyZWFkIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIHJlcXVlc3RlZCB0aHJlYWQgYW5kIG1ha2UgaXQgZG8gaXQncwogICB0aGluZy4gSWYg
dGhlIHRocmVhZCBpcyBhbHJlYWR5IGRvaW5nIHNvbWV0aGluZyBpdCB3aWxsIGp1c3QgYWJhbmRv
biB0aGF0IGFuZCAic3RhcnQgb3ZlciIuIAogICAiZnJlcSIgZGVmYXVsdHMgdG8gU1REX0ZSRVEg
ZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUuICovCi8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwppbnQgdmlicmFUaHJlYWRzOjpzaWduYWxUaHJlYWQodW5zaWdu
ZWQgY2hhciB0aHJlYWQpCnsKICBpbnQgZXJyb3IgPSAwOwoKICAvKiBSZXF1ZXN0IGEgbG9jayBm
b3IgdGhlIGdpdmVuIHRocmVhZCdzIG11dGV4LiBUaGlzIHByb3RlY3RzIHRoZSB0aHJlYWQncyBk
YXRhIHN0cnVjdC4gKi8KICBlcnJvciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2xDb25kTXV0ZXhl
c1t0aHJlYWRdKTsKCiAgCiAgLyogU2lnbmFsIHRoZSB0aHJlYWQgdG8gd2FrZSB1cC4gVGhlIHRo
cmVhZCBob2xkcyB1bnRpbCB0aGUgYXNzb2NpYXRlZCBtdXRleCBpcyByZWxlYXNlZC4gKi8KICBl
cnJvciA9IHB0aHJlYWRfY29uZF9zaWduYWwoJmdsQ29uZFZhcnNbdGhyZWFkXSk7CgogIC8qIERF
QlVHICovCiAgcHRocmVhZF9jb25kX3dhaXQoJmdsQ29uZFZhcnNbdGhyZWFkXSwgJmdsQ29uZE11
dGV4ZXNbdGhyZWFkXSk7CgogIC8qIFJlbGVhc2UgdGhlIG11dGV4IHRvIG1ha2UgdGhlIHRocmVh
ZCBnby4gKi8KICBlcnJvciA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnbENvbmRNdXRleGVzW3Ro
cmVhZF0pOwogCiAgcmV0dXJuIDA7Cn0KCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp
CnsKICB2aWJyYVRocmVhZHMgKm91dHB1dDA7CiAgCiAgY291dCA8PCAiTWFpbiBzdGFydCIgPDwg
ZW5kbDsKCiAgd2hpbGUoMSkKICAgIHsKICAgICAgb3V0cHV0MCA9IG5ldyB2aWJyYVRocmVhZHMo
Ii9kZXYvdHR5UzAiKTsKICAgICAgb3V0cHV0MC0+c2lnbmFsVGhyZWFkKDApOwogICAgICBvdXRw
dXQwLT5zaWduYWxUaHJlYWQoMCk7CiAgICAgIGRlbGV0ZSBvdXRwdXQwOwogICAgfQoKICBjb3V0
IDw8ICJNYWluIGVuZHMgaGVyZS4iIDw8IGVuZGw7CgogIHJldHVybiAwOwp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]