[PATCH 2/3] mips: make sp 16-byte aligned on N64/N32
Adhemerval Zanella
adhemerval.zanella@linaro.org
Fri Dec 4 12:32:51 GMT 2020
On 04/12/2020 07:57, Maciej W. Rozycki wrote:
> On Mon, 30 Nov 2020, Adhemerval Zanella via Libc-alpha wrote:
>
>>> MIPS N64/N32 ABI request stack pointer be 16-byte alinged
>>>
>>
>> It seems to align what gcc assumes:
>>
>> gcc/config/mips/mips.h
>>
>> 364 #define TARGET_NEWABI (mips_abi == ABI_N32 || mips_abi == ABI_64)
>>
>> 2525 /* Treat LOC as a byte offset from the stack pointer and round it up
>> 2526 to the next fully-aligned offset. */
>> 2527 #define MIPS_STACK_ALIGN(LOC) \
>> 2528 (TARGET_NEWABI ? ROUND_UP ((LOC), 16) : ROUND_UP ((LOC), 8))
>
> This is correct (the alignment being twice the register width), although
> in this particular case obviously hardly matters in practice, as the
> syscall will switch to the kernel stack right away. It's fine to get it
> fixed regardless of course, once a correct change has been proposed.
Indeed.
>
>> (It would be easier that https://www.linux-mips.org/ could show
>> this information easier, I could only find the old o32 ABI documentation).
>
> We largely continue relying on old SGI ABI documentation, although there
> used to be a wiki hosted by MIPS Technologies (MTI) where such details
> were summarised. Sadly with the demise of both companies this stuff is
> either gone or hard to track down, except for individual people's storage
> devices.
>
> See:
>
> <https://web.archive.org/web/20180829093347/https://dmz-portal.mips.com/wiki/Main_Page>
>
> for the old MTI wiki; unfortunately not all stuff has been archived.
>
> I can see if I can upload some stuff to linux-mips.org, either the wiki
> itself or my own FTP area I can link the wiki to, but mind that this site
> is under threat of disappearance as well and as much as I'd like to I may
> not be able to stop it.
It would be good if we have a wiki entry referring to all the architecture
and ABI documentation. I will check if I can start one, maybe using the
distro scatter information.
>
>>> @@ -48,8 +48,8 @@ NESTED (syscall, SZREG, ra)
>>>
>>> REG_L s0, (sp)
>>> cfi_restore (s0)
>>> - PTR_ADDIU sp, SZREG
>>> - cfi_adjust_cfa_offset (-SZREG)
>>> + PTR_ADDIU sp, 2 * SZREG
>>> + cfi_adjust_cfa_offset (-2 * 2 * SZREG)
>
> The updated CFA adjustment does not look right to me though.
>
> Maciej
>
More information about the Libc-alpha
mailing list