OSDev
http://osdev.su/

gcc под cygwin чудит...
http://osdev.su/viewtopic.php?f=6&t=622
Страница 1 из 1

Автор:  DJ PhoeniX [ 25 авг 2012, 17:49 ]
Заголовок сообщения:  gcc под cygwin чудит...

Код:
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, такого не происходит.

Автор:  phantom-84 [ 25 авг 2012, 19:16 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

Сделай заглушку для __main(). Она используется для вызова различных конструкторов.

Автор:  DJ PhoeniX [ 25 авг 2012, 20:14 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

phantom-84 писал(а):
Сделай заглушку для __main(). Она используется для вызова различных конструкторов.

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

Автор:  grindars [ 25 авг 2012, 20:19 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

В линуксе глобальные конструкторы и деструкторы вызываются стартапом в libc. Видимо, в cygwin-е сделать так было нельзя.

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

Автор:  phantom-84 [ 25 авг 2012, 20:46 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

ТС самолично отключил стартап-файлы.

Автор:  grindars [ 25 авг 2012, 21:39 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

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

Автор:  phantom-84 [ 25 авг 2012, 23:10 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

grindars писал(а):
Или вы про то, что гцц может его вставлять именно из-за отключенного стартапа?
Ну да, что вполне естественно.

Автор:  grindars [ 25 авг 2012, 23:42 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

Можно попробовать -fno-hosted еще.

Автор:  DJ PhoeniX [ 26 авг 2012, 00:29 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

grindars писал(а):
Можно попробовать -fno-hosted еще.

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

Автор:  Nable [ 26 авг 2012, 16:49 ]
Заголовок сообщения:  Re: gcc под cygwin чудит...

"И рыбку съесть и на.. поезде покататься".

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/