datacompboy
C++ GCC Что-то я помню недавно (в последние лет 10, где-то так) как минимум гцц менял дефолтное обращение со стеком как минимум для x86/x86-64 чтоб каждая функция была в своём стекферйме, фактически делая стек бесконечным.
Это моя память меня подводит, или так оно и есть? Есть сцылко напруф какой-либо?
Strephil
Linux clang bpf GCC GNU BPF-программы компилилруются компилятором clang, а не gcc.
Почему?
Чтобы потихоньку отвыкали от мозолей и привыкали к проприетарщине. Сначала только BPF, потом что-то ещё, а потом никаких свобод и не останется.
segfault
C GCC продакшенкволити opennet.ru
Дело оказалось в том, что GCC принимает решение об использовании inline-развёртывания функций в зависимости от результатов косвенной оценки размера результирующего кода (даже если функция определена с ключевым словом "inline"). Компилятор не учитывает фактический размер результирующего кода, а пытается прогнозировать его. Для ассемблерных вставок прогнозирование делается на основе числа переводов строк ("\n") и разделителей (";") в исходном тексте.

Помнится, давеча смеялись над JS, оптимизатор которого делал нечто подобное, и минификация ускоряла/замедляла выполнение кода.
OCTAGRAM
x86_64 SEH GCC amd64 mingw64 SEH_Init

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 не делается, так что какая разница, что внутри.
L29Ah
GCC ld WTF ? ld (или даже gcc) чёт охуел и не запихивает мой няшный глобальный void * volatile hui; в таблицу символов elf'а, так что его не видно из gdb, для чего он собственно и создавался. Чем его уебать?
qnikst
C GCC Gentoo В новом gcc появился -fsanitize, который заменяет пол валгринда и ловит датарейсы, use-after-freeи out-of-bounds доступы (в рантайме конечно). Вопрос, кто из гентушников в CFLAGS добавлял systemwide и как много сломается?
OCTAGRAM
C GCC varargs ada Сегодня смог продолжить разбираться с libipset ( #2826442 ). Из спортивного интереса попытался обойтись без C, заюзать GCC'шные фичи через доступ к фичам GCC из GNAT. Так вот, эта штука успешно заимпортировалась:
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, заодно и трамплин будет, чем сделать.
Macil
GCC ? Haskell А можно Х-й Cmm преобразовать в Гццшный TREE? Ну, и дальше «по команде»: GIMPLE, RTL, асм. Из главных плюшек — LTO, конечно. Ну, может быть и оптимизаицй каких-нибудь перепадёт.
Macil
C binutils GCC Windows Haskell *пиздец Натолкнулся на доставляющую фичу бинутилза под PE/COFF. Что GCC, что GHC вставляют что-то типа .ident "Compiler Version" в генерируемые ассемблерные файлы. Для GCC это отключается по -fno-ident, для GHC — хрен знает.
Под 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.
Гугл молчит, так что прошу распространить.
А вообще, эта «фича», мне кажется, может смело номинироваться на премию «Просос года». Даже боязно смотреть как обстоят дела с «официальными» сборками опенсорса под венду.
Shchvova
clang GCC ? программирование Unix Ребята, а может кто-то умный объяснить зачем нужна эта строчка `-pagezero_size 10000 -image_base 100000000` что бы построить luajit для мака? luajit.org Может кто-то простым и доходчивым языком пояснить что оно делает и зачем нужно?
Strephil
GCC GNU СПО Можно ли считать компилятор GNU GCC свободным?
Конечно, нет.
Одно из первейших требований к свободному ПО это возможность собрать программу из доступных исходников.
Просто взять исходники и собрать GNU GCC нельзя (особенно, если речь идёт о сборке кросскомпилятора), понадобится шаманство и пляски с бубном, так что GNU GCC можно считать свободной программой лишь частично.
hizel
Linux GCC почему gcc такой жиробас?
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
Strephil
GCC GNU А где прочитать про то, что такое target при сборке gcc, binutils и т.п.?
А то вот я собираю как-то по наитию, и не уверен, что делаю правильно.
moury
GCC gfortran Как из программы узнать полный путь к ее запущенному исполняемому файлу? Цель: искать конфиг в одной директории с исполняемым файлом.

Фортрановскими процедурами GETARG, GET_COMMAND, GET_COMMAND_ARGUMENT можно узнать только, какая команда использовалась для ее запуска, т. е. без полного пути.
То есть, для запуска в набиралась команда "./a.out ",функция вернет "./a.out ", а если команда "a.out" , получишь "a.out".

Я подозреваю. что-то можно извлечь из переменных окружения (процедурами GETENV или GET_ENVIRONMENT_VARIABLE) или с использованием какой-то функции gcc для C++. но разобраться не получается.

Помогите. пожалуйста.
moury
GCC По умолчанию gcc, если видит одновременно и статическкую, и shared библиотеку, линкует программу с динамической.
Как можно задать принудительную линковку со статической?
Помогите, не разберусь в документации.
Zert
Apple llvm rms GCC GNU opennet.ru

Фанатикопроблемы. У Столлмана «свобода пользователя» — это то же самое, что и у Путина. Пользователь должен жить в будке и жрать похлёбку из селёдочных голов.
Kim
esr GCC WTF Эрик Реймонд пришёл в рассылку GCC через несколько лет после поялвения возможности писать плагины к GCC и потребовал от разработчиков создать интерфейс, позволяющий писать плагины? Гм. Окай.
borman
Linux GCC ? programming Жуйк, а подскажи название заклинания. Задача такая: есть разделяемая библиотека A, которая при сборке статически линкуется с библиотекой B. При этом я вижу, что символы из B начинают экспортироваться в A. Хочется, чтобы 1) из A экспортировался единственный определенный мной символ 2) если это возможно, код для неиспользуемых символов удалялся.