Summary: | Падения при использовании O1 на x86_64 (dlsym) | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Anton Farygin <rider> | ||||||
Component: | gcc3.4 | Assignee: | Dmitry V. Levin <ldv> | ||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||
Severity: | critical | ||||||||
Priority: | P2 | CC: | glebfm, inger | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Description
Anton Farygin
2006-01-25 13:20:08 MSK
Created attachment 1353 [details]
test-o2-x86_64.c
Тестовый код.
Нет, это не ошибка в gcc, это либо ошибка в glibc либо неправильное использование open64. Created attachment 1355 [details]
dltest.c
Новый тест на dlsym.
$ 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 так всё-таки, как быть ? можно конечно использовать open вместо open64 на x86_64, но что интересно: на других вызовах это не проявляется (lstat64 работает) в debian'овском переписанном fakechroot используется open64 (собирается по умолчанию без оптимизации). сегодня нарвались на: http://lists.gnu.org/archive/html/guile-devel/2006-02/msg00071.html guile18 становится действительно очень нестабильным будучи собранным с оптимизацией > 0. Дима, нам похоже нужен gcc4 , если мы хотим дистрибутив для amd64. Новый компилятор быстро не собирается... Мой тест новый компилятор прошёл. |