Никлаус Вирт ~джва года~ 45 лет этого ждал)))
Никлаус Вирт ~джва года~ 45 лет этого ждал)))
Это моя память меня подводит, или так оно и есть? Есть сцылко напруф какой-либо?
#include <stdbool.h>
bool f() { return (bool)(0/0);}
Почему?
Чтобы потихоньку отвыкали от мозолей и привыкали к проприетарщине. Сначала только BPF, потом что-то ещё, а потом никаких свобод и не останется.
opennet.ru
Помнится, давеча смеялись над JS, оптимизатор которого делал нечто подобное, и минификация ускоряла/замедляла выполнение кода.
Дело оказалось в том, что GCC принимает решение об использовании inline-развёртывания функций в зависимости от результатов косвенной оценки размера результирующего кода (даже если функция определена с ключевым словом "inline"). Компилятор не учитывает фактический размер результирующего кода, а пытается прогнозировать его. Для ассемблерных вставок прогнозирование делается на основе числа переводов строк ("\n") и разделителей (";") в исходном тексте.
Помнится, давеча смеялись над JS, оптимизатор которого делал нечто подобное, и минификация ускоряла/замедляла выполнение кода.
SEH_Init
Теперь понятно, что имеет в виду @vt под «знает, как компилировать под Windows». Если считать Microsoft законодателем мод, то что-то в этом есть, хотя как по мне, — скорее вкусовщина. По-любому, без брандмауэров исключений никакой работы с COM не делается, так что какая разница, что внутри.
On x86_64 windows exception mechanism is no more based on a chained list of handlers addresses on the stack. Instead unwinding information is used to retrieve the exception handler (similar to ZCX GCC mechanism). So in order to register an exception handler we need to put in the final executable some unwinding information. This information might be present statically in the image file inside the .pdata section or registered through RtlAddFunctionTable API. Currently the GCC toolchain does not generate the .pdata information for each function. As we don't need to handle SEH exceptions except for signal handling we are registering a "fake" unwinding data that associate a SEH exception handler to the complete .text section. As we never return from the handler, the system does not try to do the final unwinding using the pdata information. The unwinding is handled by the runtime using either the GNAT SJLJ mechanism or the ZCX GCC mechanism. The current implementation is using the RtlAddFunctionTable.
Here is for information purposes the equivalent using a static .pdata section: …
Теперь понятно, что имеет в виду @vt под «знает, как компилировать под Windows». Если считать Microsoft законодателем мод, то что-то в этом есть, хотя как по мне, — скорее вкусовщина. По-любому, без брандмауэров исключений никакой работы с COM не делается, так что какая разница, что внутри.
#2826442 ). Из спортивного интереса попытался обойтись без C, заюзать GCC'шные фичи через доступ к фичам GCC из GNAT. Так вот, эта штука успешно заимпортировалась:
Однако, при попытке ею воспользоваться из адской процедуры получается error: 'va_start' used in function with fixed args. Пытался полечить, добавив функции GCC'шный аттрибут. Атрибуты в GNAT можно навешивать через pragma Machine_Attribute, а сам список атрибутов можно посмотреть здесь. Там всякая всячина, но вот заставить функцию быть varargs там нету. Так что я в печали. То немногое из C, что недоступно в GNAT, всё–таки добралось до меня. Можно попробовать найти не–built-in версию va_start, в Delphi прокатывало, либо подключать libffi, заодно и трамплин будет, чем сделать.
Сегодня смог продолжить разбираться с libipset ( procedure VA_Start (Arg_Ptr : in out System.Address; Prev_Param : System.Address);
pragma Import (Intrinsic, VA_Start, "__builtin_va_start");
Однако, при попытке ею воспользоваться из адской процедуры получается error: 'va_start' used in function with fixed args. Пытался полечить, добавив функции GCC'шный аттрибут. Атрибуты в GNAT можно навешивать через pragma Machine_Attribute, а сам список атрибутов можно посмотреть здесь. Там всякая всячина, но вот заставить функцию быть varargs там нету. Так что я в печали. То немногое из C, что недоступно в GNAT, всё–таки добралось до меня. Можно попробовать найти не–built-in версию va_start, в Delphi прокатывало, либо подключать libffi, заодно и трамплин будет, чем сделать.
static char buf[bufsize];
…
swc/swc_proto.c:278:14: error: storage size of 'buf' isn't constant
Под ELF никаких проблем: создаётся секция .comment в объектнике, которая: а) не гузится в память; б) с флагом MERGE (дубли схлопываются при линковке). Т.е. в результате в исходном бинарнике получается секция с «подписями» всех компиляторов, когда-либо участвовавших в его создании. Удобно.
Для PE/COFF... Ну, вы поняли... В объектнике создаётся секция .rdata$zzz, которая мало того с флагами ALLOC и LOAD, так ещё дефолтный линк-скрипт аппендит её к .rdata бинарника. В результате, мусор в конце секции .rdata.
И если в 7.10.2 он занимал небольшое количество относительно размера бинарника, то в 7.10.3 со сменой тулчейна ситуация значительно ухудшилась.
Решение:
1. Подвергнуть живительному экстерминатусу секцию .rdata$zzz во всех объекниках и статических библиотеках strip --strip-unneeded --keep-file-symbols -R .rdata$zzz сделает своё дело. Увы, strip обламывается на HsBase из-за громадного размера, поэтому придётся вручную упаковывать/распаковывать.
2. Добавить строчку в линк-скрипт (перед .rdata) DISCARD : {*(rdata$zzz)}
Увы, хрен его знает как это сделать в GHC.
Гугл молчит, так что прошу распространить.
А вообще, эта «фича», мне кажется, может смело номинироваться на премию «Просос года». Даже боязно смотреть как обстоят дела с «официальными» сборками опенсорса под венду.
gcc.godbolt.org —интерактивный конпелятор, позволяет легко увидеть, что в какой версии GCC поломали.
luajit.org Может кто-то простым и доходчивым языком пояснить что оно делает и зачем нужно?
Ребята, а может кто-то умный объяснить зачем нужна эта строчка `-pagezero_size 10000 -image_base 100000000` что бы построить luajit для мака? Конечно, нет.
Одно из первейших требований к свободному ПО это возможность собрать программу из доступных исходников.
Просто взять исходники и собрать GNU GCC нельзя (особенно, если речь идёт о сборке кросскомпилятора), понадобится шаманство и пляски с бубном, так что GNU GCC можно считать свободной программой лишь частично.
(напмню: со сборкой 4.7 проблем не было)
gcc.gnu.org — как заставить lto не выкидывать секции которые хочется разместить в определённых местах адресного пространства.
hizel@wnight:~$ ls -lhS /usr/portage/distfiles/ | egrep 'llvm|clang'
-rw-rw-r-- 1 portage portage 16M May 8 00:10 llvm-3.4.1.src.tar.gz
-rw-rw-r-- 1 portage portage 226K Dec 28 11:46 clang-tools-extra-3.4.src.tar.gz
-rw-rw-r-- 1 portage portage 33K Jan 6 23:29 llvm-3.4-manpages.tar.bz2
hizel@wnight:~$ ls -lhS /usr/portage/distfiles/ | grep gcc
-rw-rw-r-- 1 portage portage 83M May 22 15:22 gcc-4.8.3.tar.bz2
-rw-rw-r-- 1 portage portage 20K Jun 16 06:06 gcc-4.8.3-patches-1.1.tar.bz2
-rw-rw-r-- 1 portage portage 13K Jun 2 03:05 gcc-4.8.3-piepatches-v0.5.9.tar.bz2
-rw-rw-r-- 1 portage portage 3.0K Jun 2 03:05 gcc-4.8.3-uclibc-patches-1.0.tar.bz2
-rw-rw-r-- 1 portage portage 2.0K Jun 18 2010 gcc-4.4.3-specs-0.2.0.tar.bz2
КАК ../../.././gcc/auto-host.h:1989:17: error: expected identifier or '(' before 'char' #define caddr_t char * ^
А то вот я собираю как-то по наитию, и не уверен, что делаю правильно.
Фортрановскими процедурами GETARG, GET_COMMAND, GET_COMMAND_ARGUMENT можно узнать только, какая команда использовалась для ее запуска, т. е. без полного пути.
То есть, для запуска в набиралась команда "./a.out ",функция вернет "./a.out ", а если команда "a.out" , получишь "a.out".
Я подозреваю. что-то можно извлечь из переменных окружения (процедурами GETENV или GET_ENVIRONMENT_VARIABLE) или с использованием какой-то функции gcc для C++. но разобраться не получается.
Помогите. пожалуйста.
Как можно задать принудительную линковку со статической?
Помогите, не разберусь в документации.
opennet.ru
Фанатикопроблемы. У Столлмана «свобода пользователя» — это то же самое, что и у Путина. Пользователь должен жить в будке и жрать похлёбку из селёдочных голов.
Фанатикопроблемы. У Столлмана «свобода пользователя» — это то же самое, что и у Путина. Пользователь должен жить в будке и жрать похлёбку из селёдочных голов.