• J
    xen: make -fstack-protector work under Xen · 577eebea
    Jeremy Fitzhardinge 提交于
    -fstack-protector uses a special per-cpu "stack canary" value.
    gcc generates special code in each function to test the canary to make
    sure that the function's stack hasn't been overrun.
    
    On x86-64, this is simply an offset of %gs, which is the usual per-cpu
    base segment register, so setting it up simply requires loading %gs's
    base as normal.
    
    On i386, the stack protector segment is %gs (rather than the usual kernel
    percpu %fs segment register).  This requires setting up the full kernel
    GDT and then loading %gs accordingly.  We also need to make sure %gs is
    initialized when bringing up secondary cpus too.
    
    To keep things consistent, we do the full GDT/segment register setup on
    both architectures.
    
    Because we need to avoid -fstack-protected code before setting up the GDT
    and because there's no way to disable it on a per-function basis, several
    files need to have stack-protector inhibited.
    
    [ Impact: allow Xen booting with stack-protector enabled ]
    Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    577eebea
enlighten.c 27.4 KB