Всем привет! Кто-нибудь подскажет в каких случаях язык С генерирует COMDAT записи в объектном файле, и для чего сам COMDAT был введен. Помогите, а то я уже устал ковырятся бестолку.
Anatoly А вам зачем? Хотите понять как их юзает линкер? Ковыряйте исходники линкера. Поглядите на owl и orl в openwatcom сорцовой дистрибуции (и wl тоже).
Это конечно благородно. Сейчас тем и занимаюсь. Создал эти записи и подсовываю линкеру, смотрю че он делать будет. Другого пути нет. Только не надо забывать что это времени много требует, а мы 1000 лет не живем. По поводу зачем надо : очень просто, я занимаюсь написанием ОС, две написал, теперь для третьей хочу сделать инструмент, так сказать, который будет компоновать для моей ОС. А вообще я пишу пока конвертер в MFF(свой формат, делаю под себя, как будет мне с объектником работать удобно) из OMF. Далее из MFF будет компоноваться для моей ОС. Только не говорите мне что лутше надо было взять COFF, теперь знаю что надо было, мол по проще он, по проще, но вопервых я уже начал и бросать не хочу, а во вторых в COFF тоже есть comdat и много других прелестей. Короче проблемы это не решает, хочу разобраться и точка. Желающие могут помочь. Им за это большое спс. И потом вместо того, чтобы исследовать линкер, проще узнать для чего COMDAT был введен, и многое будет понятно, не все конечно, но основная мысль будет известна.
Да и кстати, или люди поскажите где капать, _basmp_ спс, но желательно по больше, в оригинале не очень то на этому тему разговорчивы, про FIXUPP дочитывал вообще не из официальной доки.
Anatoly Не знаю. Я разбирал когда-то это именно читая сорцы по овл (обжект врайт либ), орл (обжект рид либ) и вл (ватком линкер). Кроме того заставил вл делать мне мой формат из любых омф, софф, ельф объектников/либов по заданым правилам, просто поправив выходной форматер вл (там относительно не сложно). Чего и вам желаю и о чем намекаю уже 3-ий раз. (ведь это вы об омф 2-ю неделю рассрашиваете?)
Нет сегодня первый раз. Вообще сижи подсовываю, интересные вещи в голову приходить начинают, первое - они не дописывают просто невероятно много, хотя просто они бы расписали полностью что делает линкер, и все вопросы отпадут сами собой. По поводу взять готовое и подправить, мысль хорошая, но я уже пол формата проштудировал, и пол конвертера написал, бросать не хочу. (Не ищут русские легких путей!!!). Кстати lazy extern, weak extern и strong extern что это такое? Как я понял что strong extern это тот екстернал, которому нашлось соответствие, так? а остальные два что? Есть конечно еще где прочесть, вообщем я так заранее спрашиваю.
weak extern - указатель заменяется нулём если искомый символ не найден. lazy extern - ресолвится при первом вызове (аналогично delayed imports в win32). Обычно делают указатель на стаб, который в рантайме находит нужный символ и патчит указатель в памяти чтобы последующие вызовы шли напрямую.