Собрать код для ppc64

У меня есть код сборки для 32-битного PPC, и я запутался, как конвертировать его для 64-битных. Могут ли некоторые показать ссылки на ABI для 64-битных КПК.

Вот пример функции, как будет выглядеть ее 64-битная версия?

SLEAF(cpu_save_context)

stw    r0,   0(ARG0)
stw    sp,   4(ARG0)    /* Stack frame pointer */

stw     r2,   8(ARG0)
stw     r3,  12(ARG0)
stw     r4,  16(ARG0)
stw     r5,  20(ARG0)
stw     r6,  24(ARG0)
stw     r7,  28(ARG0)
stw     r8,  32(ARG0)
stw     r9,  36(ARG0)
stw  r10,  40(ARG0)
stw  r11,  44(ARG0)
stw     r12,  48(ARG0)

stw    r13,  52(ARG0)    /* Small data area pointer */

stw    r14,  56(ARG0)   /* C-registers */
stw    r15,  60(ARG0)
stw    r16,  64(ARG0)
stw    r17,  68(ARG0)
stw    r18,  72(ARG0)
stw    r19,  76(ARG0)
stw    r20,  80(ARG0)
stw    r21,  84(ARG0)
stw    r22,  88(ARG0)
stw    r23,  92(ARG0)
stw    r24,  96(ARG0)
stw    r25, 100(ARG0)
stw    r26, 104(ARG0)
stw    r27, 108(ARG0)
stw    r28, 112(ARG0)
stw    r29, 116(ARG0)
stw    r30, 120(ARG0)
stw    r31, 124(ARG0)

mfcr    r0        /* Fetch condition register */
stw    r0,  128(ARG0)

mflr    r0        /* Fetch link register */
stw    r0,  132(ARG0)

mfctr    r0        /* Fetch count register */
stw    r0,  136(ARG0)

mfxer    r0,        /* Fetch fixed-point exception Register */
stw    r0,  140(ARG0)

li    ARG0,    1    /* Return TRUE to caller. */
blr

END(cpu_save_context

2 ответа

Вместо stw (store word) для регистров общего назначения (r0, sp, r2-r31) и регистров специального назначения LR, CTR, XER следует использовать std (store doubleword). И вам нужно изменить жестко закодированные смещения ARG0 для хранения 8 байтов, чтобы смещения были "0, 8, 16, 24,..." вместо "0, 4, 8, 12, ...". Вам также может понадобиться рассмотреть, есть ли место, выделенное в указателе ARG0 для дополнительной памяти, необходимой для двойных слов вместо слов.

Например:

std    r0,   0(ARG0)
std    sp,   8(ARG0)    /* Stack frame pointer (offset was previously 4) */

Существует много материалов относительно нового ppc64 ABI, также известного как ABI v2.

Наиболее важной из них является официальная спецификация ELFv2 ABI. Есть также некоторые презентации об этом. Все они находятся по следующему URL.

https://wiki.debian.org/ppc64el

Другие вопросы по тегам