Bug 8928

Summary: Падения при использовании O1 на x86_64 (dlsym)
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: gcc3.4Assignee: 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 Flags
test-o2-x86_64.c
none
dltest.c none

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
Мой тест новый компилятор прошёл.