[lkml]   [2008]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [10 PATCHES] inline functions to avoid stack overflow
    On Wed, 25 Jun 2008, Helge Hafting wrote:

    > Mikulas Patocka wrote:
    >> Hi
    >> Here I'm sending 10 patches to inline various functions.
    >> To give you some understanding of sparc64, every function there uses big
    >> stack frame (at least 192 bytes). 128 bytes are required by architecture
    >> (16 64-bit registers), 48 bytes are there due to mistake of Sparc64 ABI
    >> designers (calling function has to allocate 48 bytes for called function)
    >> and 16 bytes are some dubious padding.
    > I guess there is no way around those 128 bytes required by hardware - but
    > is it necessary to allocate the 48 bytes of "mistake" and the dubious
    > padding?
    > Linux kernel functions don't call any outside functions, and are not called
    > from
    > outside either. So violating the ABI should be ok - there is nothing else to
    > be compatible to. Similiar to how x86 experimented with --mregparm to get
    > a little more performance from changing the kernel calling convention.
    > Helge Hafting

    So, ask gcc developers to do kernel-specific ABI with only 128-byte stack

    BTW. could some gcc developer explain the reason for additional 16-bytes
    on stack on sparc64? 64-bit ABI mandates 176 bytes, but gcc allocates 192

    Even worse, gcc doesn't use these additional bytes. If you try this:

    extern void f(int *i);
    void g()
    int a;

    , it allocates additional 16 bytes for the variable "a" (so there's total
    208 bytes), even though it could place the variable into 48-byte
    ABI-mandated area that it inherited from the caller or into it's own
    16-byte padding that it made when calling "f".


     \ /
      Last update: 2008-06-25 14:55    [W:0.024 / U:77.852 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site