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:0000000000000004. Что происходит? Откуда, блин?.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 Причём, если назвать функцию, например, 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/ |