|
|
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
В общем такая проблема. (хотя неясно, куда это - в "C++", "программирование" или "линукс"). Пытаюсь выловить глюк в Wine 0.9.39 ( линк ). Проблема сводиться к тому, что во время выполнения dlopen с путем к wined3d.dll.so происходит Segmentation Fault. Но только в том случае, если определенная переменная среды не содержит определенного значения, (WINEDEBUG+=relay) которое включает вывод некоторых дебажных сообщений, вшитых в код. :-\ Теперь основной вопрос. Как такое отлавливать/отлаживать? По логике вещей, должен быть аналог DLLMain, в котором глюк, но, насколько знаю, такового под линуксом нет. Либо же должен существовать callback, который вызывается при выполнении dlopen и содержит ошибку. Самое интересное, что проблема появилась неожиданно при апгрейде вайна, и никуда деваться не собирается (т.е. даунгрейд не помогает), что конкретно я сделал перед появлением проблемы, восстановить не удается (просто не помню) - до этого полгода все работало с тем же железом, ядром, и библиотеками (т.е. ничего не обновлял). Если же это системный баг, а не программный, то не совсем понятно, каким боком он связан с отладочными сообщениями и переменной среды WINEDEBUG (если только где-то утечка с повреждением системных данных происходит, но тогда неясно, почему не помогает даунгрейд). Баг железно возникает при загрузке wined3d.dll.so, все остальное прекрасно работает. Буду признателен за помощь. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:01 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
ErVТеперь основной вопрос. Как такое отлавливать/отлаживать? трассировкой зы сноси венду… то есть слаку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:29 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
судя по всему у тебя есть дебугер, вот и входи в эту dlopen и смотри, чего делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:32 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > трассировкой strace? Уже пробовал. Там происходит следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. самое, кроме тогО, что вместо SIGSEGV идет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Ну и адреса, само собой, чуть-чуть различаются > зы сноси венду? то есть слаку Винду давно снес, а вот слаку трогать не буду :). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:51 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > судя по всему у тебя есть дебугер, вот и входи в эту dlopen и смотри, чего > делается Попробую. Только ведь она не факт что с отладочной информацией скомпилина... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:52 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > судя по всему у тебя есть дебугер, вот и входи в эту dlopen и смотри, чего > делается Она без отладочой информации: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:01 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
скомпиль как надо сначала нужно локализовать ошибку два соображения: 1) адреса для ммапа правильно заданы? 0x7dab3000+34240=0x7dabb5c0>0x7dabb000 2) futex в какой библиотеке лежит, libgcc? Судя по названию __cxa_demangle, оно не может прочитать/записать адрес экспортируемого символа 3) а содержимое стека оно может выдать на момент исключения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:21 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > скомпиль как надо На ней полсистемы завязано, могу грохнуть случайно :). Попробую, впрочем. > сначала нужно локализовать ошибку > > два соображения: > 1) адреса для ммапа правильно заданы? > 0x7dab3000+34240=0x7dabb5c0>0x7dabb000 Я не могу на это ответить, вызовы идут автоматом из dlopen после загрузки. Т.е. это системной код, который "должен" быть правильным. Последняя строчка, которую я "вижу" в отладчике - это Код: plaintext 1. выложил, как раз идет с момента вызова dlopen Судя по контексту вызовов - это загрузка *.elf образов в память - самой *.dll.so и нескольких зависимых библиотек. Вот, собственно, сама функция, откуда вызов происходит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. > 2) futex в какой библиотеке лежит, > libgcc? Судя по названию __cxa_demangle, оно не может прочитать/записать > адрес экспортируемого символа Как я понял, это функция ядра (man futex): FUTEX Section: Linux Programmer's Manual (7) NAME futex - Fast Userspace Locking SYNOPSIS #include <linux/futex.h> DESCRIPTION The Linux kernel provides futexes ('Fast Userspace muTexes') as a building block for fast userspace locking and semaphores. Futexes are very basic and lend themselves well for building higher level locking abstractions such as POSIX mutexes. > 3) а содержимое стека оно может выдать на > момент исключения? Wine вешает свой перехватчик на исключения, который выдает следующее: [src] wine: Unhandled page fault on read access to 0xffffffff at address 0x7d6519ce (thread 002e), starting debugger... Unhandled exception: page fault on read access to 0xffffffff in 32-bit code (0x7d6519ce). Register dump: CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b EIP:7d6519ce ESP:0033e8a8 EBP:00009f80 EFLAGS:00210246( - 00 -RIZP1) EAX:0033e8c8 EBX:7d66f000 ECX:00000000 EDX:00000000 ESI:01000000 EDI:00001f80 Stack dump: 0x0033e8a8: 0033e8c8 00000000 00000000 b7fccff8 0x0033e8b8: 7d70faa9 7d70faa9 0033ec18 00001f80 0x0033e8c8: 00000000 00000000 00000000 00000000 0x0033e8d8: 00000000 00000000 00000000 00000000 0x0033e8e8: 00000000 00000000 00000000 00000000 0x0033e8f8: 00000000 00000000 00000000 00000000 Backtrace: =>1 0x7d6519ce (0x00009f80) 2 0x00000000 (0x00000000) 0x7d6519ce: Modules: Module Address Debug info Name (57 modules) PE 7c0000- 1547000 Deferred pno0001 ELF 7bf00000-7bf03000 Deferred <wine-loader> ELF 7d678000-7d6f1000 Deferred libglu.so.1 ELF 7d70b000-7d7c2000 Deferred wined3d<elf> ELF 7d7c2000-7d7ed000 Deferred d3d9<elf> ELF 7d7ed000-7d802000 Deferred midimap<elf> \-PE 7d7f0000-7d802000 \ midimap ELF 7d802000-7d827000 Deferred msacm32<elf> \-PE 7d810000-7d827000 \ msacm32 ELF 7daae000-7dab7000 Deferred libgcc_s.so.1 ELF 7dab7000-7daf2000 Deferred wineoss<elf> \-PE 7dac0000-7daf2000 \ wineoss ELF 7daf2000-7daf7000 Deferred libxfixes.so.3 ELF 7daf7000-7db00000 Deferred libxcursor.so.1 ELF 7db00000-7db1c000 Deferred imm32<elf> \-PE 7db10000-7db1c000 \ imm32 ELF 7db1c000-7db3a000 Deferred ximcp.so.2 ELF 7db3a000-7db3d000 Deferred libxinerama.so.1 ELF 7db3d000-7db55000 Deferred msacm32<elf> \-PE 7db40000-7db55000 \ msacm32 ELF 7df0a000-7e87c000 Deferred libglcore.so.1 ELF 7e87c000-7e910000 Deferred libgl.so.1 ELF 7e910000-7e9dd000 Deferred libx11.so.6 ELF 7e9dd000-7e9eb000 Deferred libxext.so.6 ELF 7e9eb000-7ea03000 Deferred libice.so.6 ELF 7ea03000-7ea0c000 Deferred libsm.so.6 ELF 7ea0d000-7ea10000 Deferred xlcdef.so.2 ELF 7ea10000-7ea14000 Deferred libxrandr.so.2 ELF 7ea14000-7ea1d000 Deferred libxrender.so.1 ELF 7ea26000-7eaae000 Deferred winex11<elf> \-PE 7ea40000-7eaae000 \ winex11 ELF 7eaae000-7eb2f000 Deferred libfreetype.so.6 ELF 7eb2f000-7eb70000 Deferred advapi32<elf> \-PE 7eb40000-7eb70000 \ advapi32 ELF 7eb70000-7ebff000 Deferred gdi32<elf> \-PE 7eb80000-7ebff000 \ gdi32 ELF 7ebff000-7ed29000 Deferred user32<elf> \-PE 7ec20000-7ed29000 \ user32 ELF 7ed29000-7edb3000 Deferred winmm<elf> \-PE 7ed30000-7edb3000 \ winmm ELF 7eddf000-7eefc000 Deferred kernel32<elf> \-PE 7ee00000-7eefc000 \ kernel32 ELF 7eefc000-7ef07000 Deferred libnss_files.so.2 ELF 7ef07000-7ef11000 Deferred libnss_nis.so.2 ELF 7ef11000-7ef27000 Deferred libnsl.so.1 ELF 7ef27000-7ef31000 Deferred libnss_compat.so.2 ELF 7ef31000-7ef54000 Deferred libm.so.6 ELF 7ef55000-7ef57000 Deferred libnvidia-tls.so.1 ELF 7ef57000-7ef5c000 Deferred libxxf86vm.so.1 ELF 7ef5c000-7ef6e000 Deferred libz.so.1 ELF 7ef6e000-7f000000 Deferred ntdll<elf> \-PE 7ef80000-7f000000 \ ntdll ELF b7d42000-b7d46000 Deferred libdl.so.2 ELF b7d46000-b7e75000 Deferred libc.so.6 ELF b7e75000-b7e87000 Deferred libpthread.so.0 ELF b7ea1000-b7fb5000 Deferred libwine.so.1 ELF b7fb6000-b7fce000 Deferred ld-linux.so.2 Threads: process tid prio (all id:s are in hex) 0000002d (D) Z:\home\erv\distr\kkreig\pno0001.exe 0000002e 0 <== 0000000e 0000000f 0 0000000c 00000012 0 00000011 0 00000010 0 0000000d 0 [/src] Кроме этого, в линке, который я выше приводил, есть несколько трейсов, сессий отладки и т.д. Возможно, что что-то будет полезным. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:54 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
ErV wrote: > Вот, собственно, сама функция, откуда вызов происходит: Что-то сглюкнуло. :-\ Вот листинг: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:56 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
ErV> 1) адреса для ммапа правильно заданы? > 0x7dab3000+34240=0x7dabb5c0>0x7dabb000 Я не могу на это ответить, вызовы идут автоматом из dlopen после загрузки. Т.е. это системной код, который "должен" быть правильным.просто эти области памяти перекрываются. Это нормально? Содержимое стека я хотел, чтобы увидеть, что там вызывается между close и вылетом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 18:13 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > просто эти области памяти перекрываются. Это нормально? Пока что не могу сказать. Посмотрю "рабочий" трейс, где была объявлена переменная WINEDEBUG и отпишусь. > Содержимое стека я хотел, чтобы увидеть, что там вызывается между close и > вылетом Вот содержимое стека на момент вызова последнего close Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. А вот состояние непосредственно перед вылетом(это копипаст из истории консоли дебаггера): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 18:32 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > просто эти области памяти перекрываются. Это нормально? Вот кусок рабочего лога - т.е. когда программа не вылетает, (т.е. была объявлена WINEDEBUG+=relay) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 18:38 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
ErV wrote: > ПОка что сижу и смотрю пересечения областей... Прошу прощения. Не тот кусок лога. Вот правильны: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 18:39 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
я смотрю, ты ориентировался на _dl_map_object_deps, а то же для __cxa_demangle проделать можешь? Хотя она наверно очень часто вызывается. хмм… видимо это нормально, что области пересекаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 18:56 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
но вообще в системные библиотеки втыкать умрёшь перекомпилировал wined3d? Спроси тех чуваков, как вообще может WINEDEBUG повлиять на dlopen, причём в рантайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 19:04 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > я смотрю, ты ориентировался на _dl_map_object_deps, Я немного по-другому сделал - поставил бряк на wine_dlopen, когда в параметрах был путь к wined3d.dll.so, поставил бряк на close, потом оттуда выходил finish'ем, параллельно печатая стек, пока не вылетело. > а то же для __cxa_demangle проделать можешь? Хотя она наверно очень часто вызывается. Неа :( На неё бряк нельзя поставить. Если библиотеку перекомпилю с отладочным флагом, то тогда можно будет... >но вообще в системные библиотеки втыкать умрёшь +1 :) >перекомпилировал wined3d? Пересобрал. Ему пофигу. Я уже переставлял дрова на видео с последующей пересборкой вчера - ноль эмоций. Сейчас пересобрал ядро, убил мусор в виде устарвеших модулей (наконец-то все это в пакет собрал) и переставил libc из пакетов - разницы никакой. (можно ещё компилятор проверить...) >Спроси тех чуваков, как вообще может WINEDEBUG повлиять на dlopen, причём в >рантайме. спрошу, хотя по идее он влиять не должен - dlopen это системная функция. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 19:46 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
по регистрам такое ощущение, что это null pointer exception, так что баг, только чей? Похоже на доступ к edx-1, хм… странно (это только предположение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:07 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
Стоп. Судя по логам, у меня два варианта libc.so.6 - один в /lib/tls а второй в /lib, причем они разного размера, хотя версия одна. Это так и должно быть? То же самое касается ld-2.3.6.so и прочего... Все что, в /lib/tls - короче на пару сотен байтов... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:12 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
а как же это? Код: plaintext 1. 2. 3. Вобще он много прямо из /usr/lib тащит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:18 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
ErV wrote: > Стоп. Судя по логам, у меня два варианта libc.so.6 - один в /lib/tls а > второй в /lib, причем они разного размера, хотя версия одна. Это так и > должно быть? То же самое касается ld-2.3.6.so и прочего... Все что, > в /lib/tls - короче на пару сотен байтов... Все, вроде бы, примерно разобрался... http://ecos.sourceware.org/ml/libc-alpha/2005-08/msg00028.html Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:18 |
|
||
|
Linux: Segmentation Fault во время dlopen.
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > open("/usr/lib/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or > directory) В /usr/lib libc.so.6 нет. А вот в /lib она есть. Но, похоже, это к делу не относится, так как из lib открывается только ld-linux. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:23 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34624179&tid=2028593]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 523ms |

| 0 / 0 |
