Valgrind сообщает об ошибках с помощью libgc - PullRequest
0 голосов
/ 02 января 2019

Я разрабатываю приложение с guile и получаю странные ошибки.Я подозреваю, что ошибки вызваны неинициализированными переменными в guile или некоторыми библиотеками, которые он использует.Проблема возникает с обоими версиями guile 2.0 и 2.2.

Когда я запускал guile с valgrind, я получал следующую ошибку (среди прочих):

==9945== Conditional jump or move depends on uninitialised value(s)
==9945==    at 0x4D5005B: GC_push_all_eager (mark.c:1583)
==9945==    by 0x4D514C4: GC_push_current_stack (mark_rts.c:695)
==9945==    by 0x4D4B254: GC_with_callee_saves_pushed (mach_dep.c:322)
==9945==    by 0x4D51535: GC_push_regs_and_stack (mark_rts.c:772)
==9945==    by 0x4D5163E: GC_push_roots (mark_rts.c:845)
==9945==    by 0x4D4D8F5: GC_mark_some (mark.c:351)
==9945==    by 0x4D42CBA: GC_stopped_mark (alloc.c:702)
==9945==    by 0x4D4283C: GC_try_to_collect_inner (alloc.c:488)
==9945==    by 0x4D527B1: GC_init (misc.c:1292)
==9945==    by 0x48BBC22: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==    by 0x48C46EE: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==    by 0x491826D: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==  Uninitialised value was created by a stack allocation
==9945==    at 0x4D4B182: GC_with_callee_saves_pushed (mach_dep.c:227)
==9945== 
==9945== Conditional jump or move depends on uninitialised value(s)
==9945==    at 0x4D50063: GC_push_all_eager (mark.c:1583)
==9945==    by 0x4D514C4: GC_push_current_stack (mark_rts.c:695)
==9945==    by 0x4D4B254: GC_with_callee_saves_pushed (mach_dep.c:322)
==9945==    by 0x4D51535: GC_push_regs_and_stack (mark_rts.c:772)
==9945==    by 0x4D5163E: GC_push_roots (mark_rts.c:845)
==9945==    by 0x4D4D8F5: GC_mark_some (mark.c:351)
==9945==    by 0x4D42CBA: GC_stopped_mark (alloc.c:702)
==9945==    by 0x4D4283C: GC_try_to_collect_inner (alloc.c:488)
==9945==    by 0x4D527B1: GC_init (misc.c:1292)
==9945==    by 0x48BBC22: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==    by 0x48C46EE: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==    by 0x491826D: ??? (in /usr/lib/x86_64-linux-gnu/libguile-2.2.so.1.3.1)
==9945==  Uninitialised value was created by a stack allocation
==9945==    at 0x4D4B182: GC_with_callee_saves_pushed (mach_dep.c:227)
==9945== 

Я не могу найти неинициализированные значенияв функции GC_with_callee_saves_pressed.Я попытался установить переменную контекста в GC_with_callee_saves_pressed в 0, но это не помогло.Второй аргумент для GC_with_callee_saved_pressed в трассировке происходит от вызова функции GC_approx_sp в строке 702 alloc.c.

Условная ветвь, скомпилированная в GC_with_callee_saves_pressed, - это та, которая следует после "#ifопределена (UNIX_LIKE) ...".Ветвь else "#iffined (HAVE_BUILTIN_UNWIND_INIT)" не скомпилирована.

Может ли эта ошибка быть похожей на this

Есть ли у вас какие-либо идеи о том, как двигаться впередс этим?

...