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