No subject
Mon Aug 8 05:14:44 PDT 2011
add some kind of base address to it. so it directly jumps to a smaller
address, which causes the seg fault.
(gdb) info reg
eax 0x8060e08 134614536
ecx 0x1 1
edx 0x0 0
ebx 0xb3ab2d1c -1280627428
esp 0xbfffe960 0xbfffe960
ebp 0xbfffe9f8 0xbfffe9f8
esi 0x808d318 134796056
edi 0xb3ab6dd2 -1280610862
eip 0xb3ab04dc 0xb3ab04dc
<module_alsa_card_LTX_pa__init+28>
eflags 0x282 [ SF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x000015ba in ?? ()
(gdb) info reg
eax 0x8060e08 134614536
ecx 0x1 1
edx 0x0 0
ebx 0xb3ab2d1c -1280627428
esp 0xbfffe95c 0xbfffe95c
ebp 0xbfffe9f8 0xbfffe9f8
esi 0x808d318 134796056
edi 0xb3ab6dd2 -1280610862
eip 0x15ba 0x15ba <------
eflags 0x10282 [ SF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
the correct address for refcnt_inc should be:
(gdb) p pa_alsa_refcnt_inc
$1 = {void (void)} 0xb3a73460 <pa_alsa_refcnt_inc>
> because pa_card_info has a pointer to an array of these objects, with
> the following comment:
>
> pa_card_profile_info* profiles; /**< Array of available profile, or
> NULL. Array is terminated by an entry with name set to NULL. Number of
> entries is stored in n_profiles */
>
> Which means the client has to rely on sizeof(pa_card_profile_info) to
> know the address of the second (and third, and so on) array entry. As
> sizeof(pa_card_profile_info) is changed, recompilation of clients is
> necessary.
>
> :-(
>
> Any good ideas as of how to avoid it?
>
> --
> David Henningsson
> http://launchpad.net/~diwic
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
--
guanqun
More information about the pulseaudio-discuss
mailing list