Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.03.21 05:42
Оценка:
Определяю вот такой массив:

extern struct StringPtr {
  char * String;
}  const __declspec (selectany) Strings [] = {
  "xxxxxxxxxxxx",
};


Компилирую с ключом /Gy, в ассемблерном листинге вижу, что Strings объявлен в COMDAT.

Линкую хоть по умолчанию, хоть явно с ключом /opt:ref, в verbose-выдаче вижу:

Discarded "struct StringPtr const * const Strings" (?Strings@@3QBUStringPtr@@B) from main.obj


Смотрю EXE — там лежит строка "xxxxxxxxxxxx".

Наблюдается во всех cl/link с середины 2000-х, и до самых последних версий.

Это глюк компилятора/линкера, или я что-то делаю не так?
visual c++ link comdat оптимизация opt ref
Re: Не работает оптимизация COMDAT в MS link
От: flаt  
Дата: 16.03.21 06:21
Оценка:
Подозреваю, что удаляется массив, а не строки. Конечно, если никто не ссылается на строки, то и они должны удаляться, но.

А unilink как ведёт себя?
Re[2]: Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.03.21 04:13
Оценка:
Здравствуйте, flаt, Вы писали:

F>А unilink как ведёт себя?


А где его нынче берут? Ссылка на wiki.dlang.org не работает. Нашел упоминание на Hex-Rays — там тоже нет ссылок. doswin32.com вроде обновляется регулярно, но и там unilink лишь упоминается.

Я помню, что много лет назад Харон писал, как устал бороться с link и сделал первый вариант unilink, но так и не сподобился его попробовать.
Re[3]: Не работает оптимизация COMDAT в MS link
От: flаt  
Дата: 31.03.21 19:31
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>А где его нынче берут? Ссылка на wiki.dlang.org не работает.


У меня работает (что даже удивительно, ведь этому FTP уже лет и лет).
Re[4]: Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 01.04.21 07:02
Оценка: 6 (1)
Здравствуйте, flаt, Вы писали:

F>У меня работает (что даже удивительно, ведь этому FTP уже лет и лет).


У меня этот FTP из Firefox не открывается вообще. Chrome, судя по всему, FTP не умеет — перекидывает на FF. Виндовый ftp.exe устанавливает соединение с сервером, но зависает на командах ls.

Вспомнил, что у меня стоит Opera 12.18 — в ней удалось и открыть, и скачать.

Но при попытке слинковать OBJ в EXE постоянно выдает ошибку "Hash-catalog not accesible". Гугель по такому сообщению (в том числе и с двойным "s") ничего релевантного не выдает.
Re: Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.04.21 07:39
Оценка: +1
Сделал багрепорт для MS.
Re[2]: Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 27.05.21 10:12
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Сделал багрепорт для MS.


Выяснилось, что удаление таких бесхозных строк можно организовать через /GF (read-only string pooling). Я всю жизнь был уверен, что это работает только на уровне модуля, а оказалось, что /GF генерирует COMDAT, даже если не указан /Oy.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.