2014-11-17 7 views
1

Когда я смотрю через источник U-Boot код, я обнаружил, что она проходит через глобальные данные r9 регистр как этотПочему u-boot может помещать глобальный адрес данных в регистр r9?

register volatile gd_t *gd asm ("r9") 

Итак, я любопытно, как же U-Boot обеспечить дополнительные коды не будут использовать r9 регистрирует и повреждает глобальные данные. Есть ли опции, чтобы сообщить компилятору не использовать специальный регистр?

+1

Стоит также отметить, что раньше он был r8 и все еще находится в некоторых ветвях поставщиков: http://git.denx.de/?p=u-boot.git;a=commitdiff;h=fe1378a961e508b31b1f29a2bb08ba1dac063155 – unixsmurf

ответ

2

От Procedure Call Standard for the ARM Architecture:

Роль регистра r9 от платформы. Виртуальная платформа может назначить любую роль в этом регистре и должна документировать это использование. Например, он может обозначать его как статическую базу (SB) в независимой от позиции модели данных или может обозначать ее как регистр потока (TR) в среде с локальным хранилищем потоков. Использование этого регистра может потребовать сохранения сохраненного значения во всех вызовах. Виртуальная платформа, которая не нуждается в таком специальном регистре, может назначить r9 в качестве дополнительного регистра переменных переменных, v6.

GCC doesn't have a abi profile for reserving r9 для использования на платформе thus the way u-boot does this is with -ffixed-r9 option.