OSDev

для всех
Текущее время: 27 апр 2024, 09:02

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 17:49 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Код:
int main(){
  clrscr();
  memory_init();
}
Код:
x86_64-w64-mingw32-gcc -c -nostdlib -s -m64 -O2 src/boot.cpp -o obj/boot.o
Код:
.text:0000000000000000 ; Input MD5   : 540A6BAEA09554C7B0BDB2BE8601BFDD
.text:0000000000000000 ; Input CRC32 : E408638F
.text:0000000000000000 ; File Name   : ...\boot.o
.text:0000000000000000 ; Format      : COFF (Windows AMD64)
.text:0000000000000000                 .686p
.text:0000000000000000                 .mmx
.text:0000000000000000                 .model flat
.text:0000000000000000 .intel_syntax noprefix
.text:0000000000000000 _text           segment para public 'CODE' use64
.text:0000000000000000                 public main
.text:0000000000000000 main            proc near
.text:0000000000000000                 sub     rsp, 28h
.text:0000000000000004                 call    __main ; <=== Какого хрена?
.text:0000000000000009                 call    _Z6clrscrv      ; clrscr(void)
.text:000000000000000E                 call    _Z11memory_initv ; memory_init(void)
.text:0000000000000013                 xor     eax, eax
.text:0000000000000015                 add     rsp, 28h
.text:0000000000000019                 retn
.text:0000000000000019 main            endp
.text:000000000000001A                 align 20h
.text:000000000000001A _text           ends
UNDEF:0000000000000030                 extrn __main:near       ; CODE XREF: main+4p
UNDEF:0000000000000034                 extrn _Z6clrscrv:near   ; CODE XREF: main+9p
UNDEF:0000000000000038                 extrn _Z11memory_initv:near ; CODE XREF: main+Ep
Внимание на строку .text:0000000000000004. Что происходит? Откуда, блин?
Причём, если назвать функцию, например, test, такого не происходит.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 19:16 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Сделай заглушку для __main(). Она используется для вызова различных конструкторов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 20:14 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
phantom-84 писал(а):
Сделай заглушку для __main(). Она используется для вызова различных конструкторов.

Так и поступил. Но это же костыль. Почему gcc той же версии под Linux ничего подобного не вытворяет?

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 20:19 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
В линуксе глобальные конструкторы и деструкторы вызываются стартапом в libc. Видимо, в cygwin-е сделать так было нельзя.

Можно, например, собрать кросс на какой-нибудь i686-pc-pe, тогда не будет таких осеспецифичных приколов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 20:46 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
ТС самолично отключил стартап-файлы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 21:39 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
А вызов __main здесь вставляет и не стартап-файл, а специальный хак в компиляторе для main. Или вы про то, что гцц может его вставлять именно из-за отключенного стартапа? Обычные тулчейны так точно не делают. Cygwin-овский в принципе может, почему я и не рекомендую его не по назначению использовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 23:10 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
grindars писал(а):
Или вы про то, что гцц может его вставлять именно из-за отключенного стартапа?
Ну да, что вполне естественно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 25 авг 2012, 23:42 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Можно попробовать -fno-hosted еще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 26 авг 2012, 00:29 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
grindars писал(а):
Можно попробовать -fno-hosted еще.

Код:
cc1plus: warning: command line option "-fno-hosted" is valid for C/ObjC but not for C++

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: gcc под cygwin чудит...
СообщениеДобавлено: 26 авг 2012, 16:49 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
"И рыбку съесть и на.. поезде покататься".

Если хочется плюсы, то надо чтобы кто-то инициализировал конструкторы до вызова main. Можно потыкаться в http://wiki.osdev.org/C%2B%2B_Bare_Bones


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB