Есть ли способ использовать настраиваемое искажение в g ++ / clang ++? - PullRequest
0 голосов
/ 06 февраля 2019

При использовании C ++ шаблона, и особенно кортежей, я часто получаю очень долго подогнанные имена, как

1003 * _ZN11__sanitizer13InternalAllocEmPNS_28SizeClassAllocatorLocalCacheINS_20SizeClassAllocator32ILm0ELy140737488355328ELm0ENS_12SizeClassMapILm3ELm4ELm8ELm17ELm64ELm14EEELm20ENS_15TwoLevelByteMapILy32768ELy4096ENS_20NoOpMapUnmapCallbackEEES5_EEEEm

Это, очевидно, штрафа в номинальном случае, и облегчить отладкуно когда я использую большие наборы пользовательских типов (с большими пространствами имен), это заканчивается очень большими двоичными файлами только из-за искаженных имен;Некоторые инструменты (например, valgrind) даже имеют максимальную длину имени символа, что делает анализ практически невозможным.

Мне было интересно, есть ли способ попросить g ++ / clang ++ использовать пользовательскую функцию mangling (скажем, md5), чтобыочень длинный символ становится 5c66b1073e1b453900bd7d32cb79fc0e, что намного короче.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Отсутствие этой инновации в любой важной реализации C ++ объясняется тем фактом, что протокол управления именами компилятора C ++ является частью его ABI и не может быть одновременно выбранным пользователем..

Общеизвестно, что код C ++, скомпилированный с помощью GCC, не совместим с кодом, скомпилированным с помощью компиляторов Microsoft, поскольку, среди прочего , они используют разные протоколы преобразования имен.И тот факт, что они делают используют разные протоколы управления именами и не могут быть направлены на использование одного и того же протокола, гарантирует, что более тонкие несовместимости ABI не выживут при попытке соединения.

Постоянствопротокол управления именами компилятора C ++ также предполагается в других утилитах цепочки инструментов, например, binutils nm, objdump.

0 голосов
/ 06 февраля 2019

Я не знаю, как полностью заменить символы.Но вы можете удалить двоичные файлы с помощью -s, чтобы удалить из него все символы.Это может уменьшить размер ваших отгруженных двоичных файлов, но, конечно, не может использоваться с отладкой.

...