Перейти к содержанию
    

Непонятное поведение компилятора

Здравствуйте!

 

Есть один и тот же код, который по-разному интерпретируются похожими компиляторами

Вот код:

#define mips32_bissr(set)	mips32_bs_c0(C0_SR,set)
#define mips32_bs_c0(selreg, set) \
__extension__ ({ \
    register reg32_t __o; \
    __o = mips32_get_c0 (selreg); \
    mips32_set_c0 (selreg, __o | (set)); \
    __o; \
}) 
#define SR_IE		0x00000001 	/* interrupt enable */
mips32_bissr(SR_IE);

Есть два компилятора:

1. mips-mti-elf

2. Mips Toolchain для Eclipse

 

Как я понимаю MIPS Toolchain собирался с того же bare-metal

Как резултат:

1-ый компилирует этот код в следующем виде для mips64:

mips32_bissr (SR_IE);
ffffffffb5013fe4:	40026000 	mfc0	$2,$12
ffffffffb5013fe8:	00021000 	sll	$2,$2,0x0
ffffffffb5013fec:	34420001 	ori	$2,$2,0x1
ffffffffb5013ff0:	40826000 	mtc0	$2,$12
ffffffffb5013ff4:	000000c0 	sll	$0,$0,0x3

2-ой для mips32/microAptive в следующем виде:

mips32_bissr(SR_IE);
a0002630:	40026000 	mfc0	v0,c0_status
a0002634:	0040f825 	move	ra,v0
a0002638:	03e01025 	move	v0,ra
a000263c:	0040f825 	move	ra,v0
a0002640:	37e20001 	ori	v0,ra,0x1
a0002644:	40826000 	mtc0	v0,c0_status
a0002648:	000000c0 	ehb

В случае для mips64 все работает а в случае mips32/microAptive в ra записывается зачем-то значение регистра статуса ядра и соответственно далее идем в исключение по "плохому адресу"

Прошу помочь разобраться, откуда компилятор решил записывать значение регистра в адрес возврата

 

Спасибо!

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не понятно, как такое вообще могло написатся компилятором, попробую с версиями поиграться, спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...