2012-03-17 24 views
5

Witam Mam skrypt linkera, w którym znalazłem ten kod "__exidx_start = .;", który ustawia wartość etykiety na wartość licznika lokalizacji ".". Ta etykieta nie jest używana nigdzie w obrębie tego samego skryptu linkera."__exidx_start" i "__exidx_end" co one robią?

Jest podobna etykieta kilka linii poniżej pierwszego i jest zdefiniowany w ten sam sposób "__exidx_end = .;".

Te dwie etykiety są granicami sekcji .text i .rodata, ale nie wiem, dlaczego ktoś zdefiniowałby te dwa, jeśli nie są one używane w skrypcie linkera?

Odpowiedz

2

Nie są one używane w skrypcie łącznika, ale są zadeklarowane jako zmienne zewnętrzne i używane w bibliotece gcc. Wyjmij je i to się stanie:

 
.../gcc/config/arm/unwind-arm.c:614: undefined reference to `__exidx_start' 
.../gcc/config/arm/unwind-arm.c:614: undefined reference to `__exidx_end'