Самопальная CRT для Visual Studio 2010

Тема в разделе "LANGS.C", создана пользователем Rel, 27 май 2010.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    ни у кого нет? libctiny.lib добавляет прилично функций в таблицу импорта, к тому же с ее помощью у меня не получается собирать x64 код... желательно исходники, так как всегда было интересно посмотреть на функционал инициализации, ну и чтоб была возможность подправить, если что...
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    http://www.codeproject.com/KB/library/tlibc.aspx

    есть сорцы
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    n0name
    да, я находил эту ссылку... но сорцы сайт не отдает незарегистрированным пользователям...
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    так зарегистрируйся, это бесплатно и один раз надо сделать. я там давно есть
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да я скачал уже)))
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    там мне не хватает реализации функций для работы с 64-битными числами... сейчас копаюсь в исходниках CRT студии, но чет ничего не могу найти(((
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    \VC\crt\src\intel\..
    В частонсти ulldiv.asm ullshr.asm llmul.asm и другие
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да-да... спасибо большое! уже нашел...
     
  9. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Хм, есть сервисы вроде bugmenot. Для оперы даже есть скрипты, посылающее запросы на эти сервисы. Вот тут дофига скриптов (http://ruzanow.ru/page.php?2).
     
  10. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    То, есть тут: http://ruzanow.ru/page.php?5
     
  11. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Весьма интересный С ран тайм, написанный на С++ ;) Посмотрите WCRT от Jibz, сравните хотя бы _initterm.
     
  12. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    :) я тоже когда смотрел исходники CRT со студией идет который не раз замечал что он на С++ :))

    есть там такие файлы которые msvc с опцией /TC не скомпилит :)
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    хех... так а в чем проблема? задача была сделать поддержку функционала, по сути не важно на чем она была бы сделана, хоть на лиспе)))))
     
  14. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    _initterm производит инициализацию статических переменных, сравните с WCRT

    Код (Text):
    1. #pragma section(".CRT$XCA", read, write)
    2. #pragma data_seg(".CRT$XCA")        // start of ctor section
    3. _PVFV __xc_a[] = {0};
    4.  
    5. #pragma section(".CRT$XCZ", read, write)
    6. #pragma data_seg(".CRT$XCZ")        // end of ctor section
    7. _PVFV __xc_z[] = {0};
    Код (Text):
    1. #pragma data_seg(".CRT$XCA")
    2. _PVFV __xc_a[] = { 0 };
    3.  
    4. #pragma data_seg(".CRT$XCZ")
    5. _PVFV __xc_z[] = { 0 };
    6.  
    7. #pragma data_seg(".CRT$XIA")
    8. _PIFV __xi_a[] = { 0 };
    9.  
    10. #pragma data_seg(".CRT$XIZ")
    11. _PIFV __xi_z[] = { 0 };
    12.  
    13. #pragma data_seg(".CRT$XPA")
    14. _PVFV __xp_a[] = { 0 };
    15.  
    16. #pragma data_seg(".CRT$XPZ")
    17. _PVFV __xp_z[] = { 0 };
    18.  
    19. #pragma data_seg(".CRT$XTA")
    20. _PVFV __xt_a[] = { 0 };
    21.  
    22. #pragma data_seg(".CRT$XTZ")
    23. _PVFV __xt_z[] = { 0 };
    24.  
    25. #pragma data_seg()
    26.  
    27. #pragma comment(linker, "/merge:.CRT=.data")
    .CRT$XC это инициализаторы С++ статиков, .CRT$XI, если не ошибаюсь, С статиков.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    ну хорошо... это подойдет для C-кода, но не для C++... в частности использование классов будет затруднено без всех инициализаций))) задача мелкомягких делать вещи, подходящие ко всему (поддержка и старого и нового), поэтому у них такое гигантское CRT))) и тем более не стоит удивляться, что многое там написано на C++... там кстати и masm во многом поучаствовал)))

    из другой реализации CRT, с комментариями:
    Код (Text):
    1. #pragma data_seg(".CRT$XIA")
    2. // Begin C Initializer Sections
    3. _PVFV xia[] = { NULL };
    4.  
    5. #pragma data_seg(".CRT$XIZ")
    6. // End C Initializer Sections
    7. _PVFV xiz[] = { NULL };
    8.  
    9. #pragma data_seg(".CRT$XCA")
    10. // Begin C++ Constructor Sections
    11. _PVFV xca[] = { NULL };
    12.  
    13. #pragma data_seg(".CRT$XCZ")
    14. // End C++ Constructor Sections
    15. _PVFV xcz[] = { NULL };
    16.  
    17. #pragma data_seg(".CRT$XPA")
    18. // Begin C Pre-Terminator Sections
    19. _PVFV xpa[] = { NULL };
    20.  
    21. #pragma data_seg(".CRT$XPZ")
    22. // End C Pre-Terminator Sections
    23. _PVFV xpz[] = { NULL };
    24.  
    25. #pragma data_seg(".CRT$XTA")
    26. // Begin C Terminator Sections
    27. _PVFV xta[] = { NULL };
    28.  
    29. #pragma data_seg(".CRT$XTZ")
    30. // End C Terminator Sections
    31. _PVFV xtz[] = { NULL };
     
  16. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Наоборот, ведь в TLIBC только

    #pragma data_seg(".CRT$XCA")
    // Begin C++ Constructor Sections
    _PVFV xca[] = { NULL };
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да-да... чет я немного запутался...
    допустим при использовании tlibc линкер VS2010 Ultimate не хочет собирать инструкции вида:
    Код (Text):
    1. CClass1 cl1 = new CClass1(...);
    так а к чему вы клоните то? до сих пор не могу понять)))
     
  18. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Это должно собираться с tlibc поскольку newdel.cpp собержит определения new и delete. А вот будут ли инициализироваться Сишные статики, не уверен. Поэтому я клоню что для С лучше должен подходить Сшный рантайм WCRT, а не недоделанный С++ный TLIBC.
     
  19. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Код (Text):
    1. CClass1 cl1 = new CClass1(...);
    Не должно, если это статическая инициализация.
     
  20. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Оно должно и собирается, но интересно, почему ты думал иначе?
    Код (Text):
    1. ;t.cpp
    2. void* operator new(size_t){ return 0; }
    3. struct CClass1 { CClass1(...){} };
    4. CClass1 cl1 = new CClass1(0);
    5. void entry(){}
    cl.exe t.cpp /link /nod /entry:entry /subsystem:windows

    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
    Copyright (C) Microsoft Corporation. All rights reserved.

    t.cpp
    Microsoft (R) Incremental Linker Version 8.00.50727.762
    Copyright (C) Microsoft Corporation. All rights reserved.

    /out:t.exe
    /nod
    /entry:entry
    /subsystem:windows
    t.obj
    t.obj : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators