LINUX.ORG.RU

Какая .so экспортирует символ miRegionCreate? (UPD: Загрузка .so с игнором GLOBAL DEFAULT UNDEF символа?)

 ,


0

1

Символы miRegion* импортируются /usr/lib/xorg/modules/drivers/nvidia_drv.so. Прочие mi* импортируемые разнообразными x11-драйверами (nvidia, amd, intel) лежат в /usr/lib/Xorg, а этот не могу найти. И при этом видяха-то работает.

★★★★

Ответ на: комментарий от anonymous

Если б он не использовался, readelf показывал бы его как WEAK, а так он обязательный к линковке.

dimgel ★★★★ ()

Символы miRegion* импортируются /usr/lib/xorg/modules/drivers/nvidia_drv.so

Следовательно, ответ в nvidia_drv.so

xDShot ★★★★★ ()
Ответ на: комментарий от anonymous

В сорцах искать не особо интересно – в сорцах-то что-нибудь да найдётся. Тем более по твоим ссылкам не ясно, куда оно падает; да и версия 1.6 малость старовата. Мне б понять что в рантайме происходит.

Даже так пусто:

# grep -r miRegionCreate /
grep: /usr/lib/xorg/modules/drivers/nvidia_drv.so: binary file matches

Следовательно, xorg клал хрен на обязательный импорт. Вывод: может я чего-то такого не знаю про ELF формат / протокол загрузки? Может существует глобальный флажок / параметр лоадера, делающий ВСЕ импорты WEAK? С ходу не находится. Да и пахнет дичью.

Это, кстати, не единственный случай на системе. У нескольких вполне себе прикладных либ такая же дичь.

dimgel ★★★★ ()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от dimgel

Я показал где эти символы есть. Потом (лет 10 назад, около того) их переименовали (без mi), и вообще сделали inline функциями.

Вопрос: откуда ты откопал такую древность?

anonymous ()
Ответ на: комментарий от anonymous

древность

# pacman -Qo /usr/lib/xorg/modules/drivers/nvidia_drv.so
/usr/lib/xorg/modules/drivers/nvidia_drv.so is owned by nvidia-utils 495.46-1
# readelf --dyn-syms -W /usr/lib/xorg/modules/drivers/nvidia_drv.so | grep miRegionCreate
    75: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND miRegionCreate

dimgel ★★★★ ()
Ответ на: комментарий от dimgel

древность

nvidia_drv.so

Спасибо, буду знать!

anonymous ()

Вероятно фокус в том, что versym == 0 (VER_NDX_LOCAL). Т.е. фильтрация не только на уровне SHT_DYNSYM выполняется, но бывает ещё и так, что в SHT_DYNSYM написано STB_GLOBAL, а глубже в SHT_GNU_versym - LOCAL. Сраный бардак.

Возможно, комбинация STB_GLOBAL + VER_NDX_LOCAL может использоваться в плагинной архитектуре: если либа A, экспортирующая такой символ S, подгружает либу B, то B видит S. А если какая-то третья либа C сама подгружает A, то C не видит S. Но это фантазия. Спросить что ли на SO?…

Но это в случае экспорта. А что может означать такая комбинация на стороне импорта, вообще никаких догадок.

dimgel ★★★★ ()
Последнее исправление: dimgel (всего исправлений: 3)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.