Bug 8928 - Падения при использовании O1 на x86_64 (dlsym)
Summary: Падения при использовании O1 на x86_64 (dlsym)
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: gcc3.4 (show other bugs)
Version: unstable
Hardware: all Linux
: P2 critical
Assignee: Dmitry V. Levin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-01-25 13:20 MSK by Anton Farygin
Modified: 2007-04-06 16:03 MSD (History)
2 users (show)

See Also:


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

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Farygin 2006-01-25 13:20:08 MSK
При сборке тестового примера с 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 Anton Farygin 2006-01-25 13:20:58 MSK
Created attachment 1353 [details]
test-o2-x86_64.c

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

Новый тест на dlsym.
Comment 4 Dmitry V. Levin 2006-01-26 15:00:42 MSK
$ 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 Anton Farygin 2006-01-27 10:15:05 MSK
так всё-таки, как быть ?

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

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

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