2012-03-17 8 views
5

Ciao Ho uno script linker in cui ho trovato questo codice "__exidx_start = .;" che imposta il valore dell'etichetta sul valore del contatore di posizione ".". Questa etichetta non viene utilizzata in nessun punto all'interno dello stesso script del linker.'__exidx_start' e '__exidx_end' cosa fanno?

C'è un'etichetta simile definita un paio di linee sotto la prima ed è definita allo stesso modo "__exidx_end = .;".

Queste due etichette sono boundries di .text e .rodata sezioni, ma non so perché qualcuno dovrebbe definire quei due se non vengono utilizzati nello script del linker?

risposta

2

Non vengono utilizzati nello script linker, ma sono dichiarati come variabili extern e utilizzati nella libreria gcc. Portali fuori, e questo è quello che succede:

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