Bug 8928 - Падения при использовании O1 на x86_64 (dlsym)
: Падения при использовании O1 на x86_64 (dlsym)
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/gcc3.4)
: unstable
: all Linux
: P2 critical
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2006-01-25 13:20 by
Modified: 2007-04-06 16:03 (History)


Attachments
test-o2-x86_64.c (860 bytes, text/plain)
2006-01-25 13:20, Anton Farygin
no flags Details
dltest.c (637 bytes, text/plain)
2006-01-26 14:48, Dmitry V. Levin
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-01-25 13:20:08
При сборке тестового примера с O1 падает на x86_64:
gcc -O1 -ldl -Wall test-o2-x86_64.c -o test-o2-x86_64 
./test-o2-x86_64                                                               

dlvsym(open64): 0x2aaaaad70100
dlsym(open64): 0x2aaaaad70100
Segmentation fault

и не падает при использовании O0:
gcc -O0 -ldl -Wall test-o2-x86_64.c -o test-o2-x86_64
 ./test-o2-x86_64 
dlvsym(open64): 0x2aaaaad70100
dlsym(open64): 0x2aaaaad70100
------- Comment #1 From 2006-01-25 13:20:58 -------
Created an attachment (id=1353) [details]
test-o2-x86_64.c

Тестовый код.
------- Comment #2 From 2006-01-26 14:46:22 -------
Нет, это не ошибка в gcc, это либо ошибка в glibc либо неправильное
использование open64.
------- Comment #3 From 2006-01-26 14:48:02 -------
Created an attachment (id=1355) [details]
dltest.c

Новый тест на dlsym.
------- Comment #4 From 2006-01-26 15:00:42 -------
$ gcc -Wall -W -Werror -O2 dltest.c -ldl -o dltest
$ ./dltest open
dlsym(open) = 0x2aaaaad70070
$ ./dltest open64
dlsym(open64) = 0x2aaaaad70100
Segmentation fault
$ ./dltest exit  
dlsym(exit) = 0x2aaaaacf5c70
$ 

Замечу, что
1. на x86_64 нет системного вызова open64, только простой open.
2. на x86_64 cat использует библиотечную функцию open, в то время как на ix86 -
open64:
32$ ltrace cat /dev/null 2>&1 |fgrep open
open64("/dev/null", 0, 027777773360)             = 3
64$ ltrace cat /dev/null 2>&1 |fgrep open
open("/dev/null", 0, 037777765230)               = 3

------- Comment #5 From 2006-01-27 10:15:05 -------
так всё-таки, как быть ?

можно конечно использовать open вместо open64 на x86_64, но что интересно:
на других вызовах это не проявляется (lstat64 работает)
в debian'овском переписанном fakechroot используется open64 (собирается по
умолчанию без оптимизации).
------- Comment #6 From 2006-02-17 15:31:48 -------
сегодня нарвались на:
http://lists.gnu.org/archive/html/guile-devel/2006-02/msg00071.html

guile18 становится действительно очень нестабильным будучи собранным с
оптимизацией > 0.

Дима, нам похоже нужен gcc4 , если мы хотим дистрибутив для amd64.
------- Comment #7 From 2006-02-17 17:42:37 -------
Новый компилятор быстро не собирается...
------- Comment #8 From 2006-05-27 02:41:14 -------
Мой тест новый компилятор прошёл.