cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

crtsavres.S (10966B)


      1/*
      2 * Special support for eabi and SVR4
      3 *
      4 *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
      5 *   Copyright 2008 Freescale Semiconductor, Inc.
      6 *   Written By Michael Meissner
      7 *
      8 * Based on gcc/config/rs6000/crtsavres.asm from gcc
      9 * 64 bit additions from reading the PPC elf64abi document.
     10 *
     11 * This file is free software; you can redistribute it and/or modify it
     12 * under the terms of the GNU General Public License as published by the
     13 * Free Software Foundation; either version 2, or (at your option) any
     14 * later version.
     15 *
     16 * In addition to the permissions in the GNU General Public License, the
     17 * Free Software Foundation gives you unlimited permission to link the
     18 * compiled version of this file with other programs, and to distribute
     19 * those programs without any restriction coming from the use of this
     20 * file.  (The General Public License restrictions do apply in other
     21 * respects; for example, they cover modification of the file, and
     22 * distribution when not linked into another program.)
     23 *
     24 * This file is distributed in the hope that it will be useful, but
     25 * WITHOUT ANY WARRANTY; without even the implied warranty of
     26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     27 * General Public License for more details.
     28 *
     29 * You should have received a copy of the GNU General Public License
     30 * along with this program; see the file COPYING.  If not, write to
     31 * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
     32 * Boston, MA 02110-1301, USA.
     33 *
     34 *    As a special exception, if you link this library with files
     35 *    compiled with GCC to produce an executable, this does not cause
     36 *    the resulting executable to be covered by the GNU General Public License.
     37 *    This exception does not however invalidate any other reasons why
     38 *    the executable file might be covered by the GNU General Public License.
     39 */
     40
     41#include <asm/ppc_asm.h>
     42
     43	.file	"crtsavres.S"
     44
     45#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
     46
     47	.section ".text"
     48
     49#ifndef CONFIG_PPC64
     50
     51/* Routines for saving integer registers, called by the compiler.  */
     52/* Called with r11 pointing to the stack header word of the caller of the */
     53/* function, just beyond the end of the integer save area.  */
     54
     55_GLOBAL(_savegpr_14)
     56_GLOBAL(_save32gpr_14)
     57	stw	14,-72(11)	/* save gp registers */
     58_GLOBAL(_savegpr_15)
     59_GLOBAL(_save32gpr_15)
     60	stw	15,-68(11)
     61_GLOBAL(_savegpr_16)
     62_GLOBAL(_save32gpr_16)
     63	stw	16,-64(11)
     64_GLOBAL(_savegpr_17)
     65_GLOBAL(_save32gpr_17)
     66	stw	17,-60(11)
     67_GLOBAL(_savegpr_18)
     68_GLOBAL(_save32gpr_18)
     69	stw	18,-56(11)
     70_GLOBAL(_savegpr_19)
     71_GLOBAL(_save32gpr_19)
     72	stw	19,-52(11)
     73_GLOBAL(_savegpr_20)
     74_GLOBAL(_save32gpr_20)
     75	stw	20,-48(11)
     76_GLOBAL(_savegpr_21)
     77_GLOBAL(_save32gpr_21)
     78	stw	21,-44(11)
     79_GLOBAL(_savegpr_22)
     80_GLOBAL(_save32gpr_22)
     81	stw	22,-40(11)
     82_GLOBAL(_savegpr_23)
     83_GLOBAL(_save32gpr_23)
     84	stw	23,-36(11)
     85_GLOBAL(_savegpr_24)
     86_GLOBAL(_save32gpr_24)
     87	stw	24,-32(11)
     88_GLOBAL(_savegpr_25)
     89_GLOBAL(_save32gpr_25)
     90	stw	25,-28(11)
     91_GLOBAL(_savegpr_26)
     92_GLOBAL(_save32gpr_26)
     93	stw	26,-24(11)
     94_GLOBAL(_savegpr_27)
     95_GLOBAL(_save32gpr_27)
     96	stw	27,-20(11)
     97_GLOBAL(_savegpr_28)
     98_GLOBAL(_save32gpr_28)
     99	stw	28,-16(11)
    100_GLOBAL(_savegpr_29)
    101_GLOBAL(_save32gpr_29)
    102	stw	29,-12(11)
    103_GLOBAL(_savegpr_30)
    104_GLOBAL(_save32gpr_30)
    105	stw	30,-8(11)
    106_GLOBAL(_savegpr_31)
    107_GLOBAL(_save32gpr_31)
    108	stw	31,-4(11)
    109	blr
    110
    111/* Routines for restoring integer registers, called by the compiler.  */
    112/* Called with r11 pointing to the stack header word of the caller of the */
    113/* function, just beyond the end of the integer restore area.  */
    114
    115_GLOBAL(_restgpr_14)
    116_GLOBAL(_rest32gpr_14)
    117	lwz	14,-72(11)	/* restore gp registers */
    118_GLOBAL(_restgpr_15)
    119_GLOBAL(_rest32gpr_15)
    120	lwz	15,-68(11)
    121_GLOBAL(_restgpr_16)
    122_GLOBAL(_rest32gpr_16)
    123	lwz	16,-64(11)
    124_GLOBAL(_restgpr_17)
    125_GLOBAL(_rest32gpr_17)
    126	lwz	17,-60(11)
    127_GLOBAL(_restgpr_18)
    128_GLOBAL(_rest32gpr_18)
    129	lwz	18,-56(11)
    130_GLOBAL(_restgpr_19)
    131_GLOBAL(_rest32gpr_19)
    132	lwz	19,-52(11)
    133_GLOBAL(_restgpr_20)
    134_GLOBAL(_rest32gpr_20)
    135	lwz	20,-48(11)
    136_GLOBAL(_restgpr_21)
    137_GLOBAL(_rest32gpr_21)
    138	lwz	21,-44(11)
    139_GLOBAL(_restgpr_22)
    140_GLOBAL(_rest32gpr_22)
    141	lwz	22,-40(11)
    142_GLOBAL(_restgpr_23)
    143_GLOBAL(_rest32gpr_23)
    144	lwz	23,-36(11)
    145_GLOBAL(_restgpr_24)
    146_GLOBAL(_rest32gpr_24)
    147	lwz	24,-32(11)
    148_GLOBAL(_restgpr_25)
    149_GLOBAL(_rest32gpr_25)
    150	lwz	25,-28(11)
    151_GLOBAL(_restgpr_26)
    152_GLOBAL(_rest32gpr_26)
    153	lwz	26,-24(11)
    154_GLOBAL(_restgpr_27)
    155_GLOBAL(_rest32gpr_27)
    156	lwz	27,-20(11)
    157_GLOBAL(_restgpr_28)
    158_GLOBAL(_rest32gpr_28)
    159	lwz	28,-16(11)
    160_GLOBAL(_restgpr_29)
    161_GLOBAL(_rest32gpr_29)
    162	lwz	29,-12(11)
    163_GLOBAL(_restgpr_30)
    164_GLOBAL(_rest32gpr_30)
    165	lwz	30,-8(11)
    166_GLOBAL(_restgpr_31)
    167_GLOBAL(_rest32gpr_31)
    168	lwz	31,-4(11)
    169	blr
    170
    171/* Routines for restoring integer registers, called by the compiler.  */
    172/* Called with r11 pointing to the stack header word of the caller of the */
    173/* function, just beyond the end of the integer restore area.  */
    174
    175_GLOBAL(_restgpr_14_x)
    176_GLOBAL(_rest32gpr_14_x)
    177	lwz	14,-72(11)	/* restore gp registers */
    178_GLOBAL(_restgpr_15_x)
    179_GLOBAL(_rest32gpr_15_x)
    180	lwz	15,-68(11)
    181_GLOBAL(_restgpr_16_x)
    182_GLOBAL(_rest32gpr_16_x)
    183	lwz	16,-64(11)
    184_GLOBAL(_restgpr_17_x)
    185_GLOBAL(_rest32gpr_17_x)
    186	lwz	17,-60(11)
    187_GLOBAL(_restgpr_18_x)
    188_GLOBAL(_rest32gpr_18_x)
    189	lwz	18,-56(11)
    190_GLOBAL(_restgpr_19_x)
    191_GLOBAL(_rest32gpr_19_x)
    192	lwz	19,-52(11)
    193_GLOBAL(_restgpr_20_x)
    194_GLOBAL(_rest32gpr_20_x)
    195	lwz	20,-48(11)
    196_GLOBAL(_restgpr_21_x)
    197_GLOBAL(_rest32gpr_21_x)
    198	lwz	21,-44(11)
    199_GLOBAL(_restgpr_22_x)
    200_GLOBAL(_rest32gpr_22_x)
    201	lwz	22,-40(11)
    202_GLOBAL(_restgpr_23_x)
    203_GLOBAL(_rest32gpr_23_x)
    204	lwz	23,-36(11)
    205_GLOBAL(_restgpr_24_x)
    206_GLOBAL(_rest32gpr_24_x)
    207	lwz	24,-32(11)
    208_GLOBAL(_restgpr_25_x)
    209_GLOBAL(_rest32gpr_25_x)
    210	lwz	25,-28(11)
    211_GLOBAL(_restgpr_26_x)
    212_GLOBAL(_rest32gpr_26_x)
    213	lwz	26,-24(11)
    214_GLOBAL(_restgpr_27_x)
    215_GLOBAL(_rest32gpr_27_x)
    216	lwz	27,-20(11)
    217_GLOBAL(_restgpr_28_x)
    218_GLOBAL(_rest32gpr_28_x)
    219	lwz	28,-16(11)
    220_GLOBAL(_restgpr_29_x)
    221_GLOBAL(_rest32gpr_29_x)
    222	lwz	29,-12(11)
    223_GLOBAL(_restgpr_30_x)
    224_GLOBAL(_rest32gpr_30_x)
    225	lwz	30,-8(11)
    226_GLOBAL(_restgpr_31_x)
    227_GLOBAL(_rest32gpr_31_x)
    228	lwz	0,4(11)
    229	lwz	31,-4(11)
    230	mtlr	0
    231	mr	1,11
    232	blr
    233
    234#ifdef CONFIG_ALTIVEC
    235/* Called with r0 pointing just beyond the end of the vector save area.  */
    236
    237_GLOBAL(_savevr_20)
    238	li	r11,-192
    239	stvx	v20,r11,r0
    240_GLOBAL(_savevr_21)
    241	li	r11,-176
    242	stvx	v21,r11,r0
    243_GLOBAL(_savevr_22)
    244	li	r11,-160
    245	stvx	v22,r11,r0
    246_GLOBAL(_savevr_23)
    247	li	r11,-144
    248	stvx	v23,r11,r0
    249_GLOBAL(_savevr_24)
    250	li	r11,-128
    251	stvx	v24,r11,r0
    252_GLOBAL(_savevr_25)
    253	li	r11,-112
    254	stvx	v25,r11,r0
    255_GLOBAL(_savevr_26)
    256	li	r11,-96
    257	stvx	v26,r11,r0
    258_GLOBAL(_savevr_27)
    259	li	r11,-80
    260	stvx	v27,r11,r0
    261_GLOBAL(_savevr_28)
    262	li	r11,-64
    263	stvx	v28,r11,r0
    264_GLOBAL(_savevr_29)
    265	li	r11,-48
    266	stvx	v29,r11,r0
    267_GLOBAL(_savevr_30)
    268	li	r11,-32
    269	stvx	v30,r11,r0
    270_GLOBAL(_savevr_31)
    271	li	r11,-16
    272	stvx	v31,r11,r0
    273	blr
    274
    275_GLOBAL(_restvr_20)
    276	li	r11,-192
    277	lvx	v20,r11,r0
    278_GLOBAL(_restvr_21)
    279	li	r11,-176
    280	lvx	v21,r11,r0
    281_GLOBAL(_restvr_22)
    282	li	r11,-160
    283	lvx	v22,r11,r0
    284_GLOBAL(_restvr_23)
    285	li	r11,-144
    286	lvx	v23,r11,r0
    287_GLOBAL(_restvr_24)
    288	li	r11,-128
    289	lvx	v24,r11,r0
    290_GLOBAL(_restvr_25)
    291	li	r11,-112
    292	lvx	v25,r11,r0
    293_GLOBAL(_restvr_26)
    294	li	r11,-96
    295	lvx	v26,r11,r0
    296_GLOBAL(_restvr_27)
    297	li	r11,-80
    298	lvx	v27,r11,r0
    299_GLOBAL(_restvr_28)
    300	li	r11,-64
    301	lvx	v28,r11,r0
    302_GLOBAL(_restvr_29)
    303	li	r11,-48
    304	lvx	v29,r11,r0
    305_GLOBAL(_restvr_30)
    306	li	r11,-32
    307	lvx	v30,r11,r0
    308_GLOBAL(_restvr_31)
    309	li	r11,-16
    310	lvx	v31,r11,r0
    311	blr
    312
    313#endif /* CONFIG_ALTIVEC */
    314
    315#else /* CONFIG_PPC64 */
    316
    317.globl	_savegpr0_14
    318_savegpr0_14:
    319	std	r14,-144(r1)
    320.globl	_savegpr0_15
    321_savegpr0_15:
    322	std	r15,-136(r1)
    323.globl	_savegpr0_16
    324_savegpr0_16:
    325	std	r16,-128(r1)
    326.globl	_savegpr0_17
    327_savegpr0_17:
    328	std	r17,-120(r1)
    329.globl	_savegpr0_18
    330_savegpr0_18:
    331	std	r18,-112(r1)
    332.globl	_savegpr0_19
    333_savegpr0_19:
    334	std	r19,-104(r1)
    335.globl	_savegpr0_20
    336_savegpr0_20:
    337	std	r20,-96(r1)
    338.globl	_savegpr0_21
    339_savegpr0_21:
    340	std	r21,-88(r1)
    341.globl	_savegpr0_22
    342_savegpr0_22:
    343	std	r22,-80(r1)
    344.globl	_savegpr0_23
    345_savegpr0_23:
    346	std	r23,-72(r1)
    347.globl	_savegpr0_24
    348_savegpr0_24:
    349	std	r24,-64(r1)
    350.globl	_savegpr0_25
    351_savegpr0_25:
    352	std	r25,-56(r1)
    353.globl	_savegpr0_26
    354_savegpr0_26:
    355	std	r26,-48(r1)
    356.globl	_savegpr0_27
    357_savegpr0_27:
    358	std	r27,-40(r1)
    359.globl	_savegpr0_28
    360_savegpr0_28:
    361	std	r28,-32(r1)
    362.globl	_savegpr0_29
    363_savegpr0_29:
    364	std	r29,-24(r1)
    365.globl	_savegpr0_30
    366_savegpr0_30:
    367	std	r30,-16(r1)
    368.globl	_savegpr0_31
    369_savegpr0_31:
    370	std	r31,-8(r1)
    371	std	r0,16(r1)
    372	blr
    373
    374.globl	_restgpr0_14
    375_restgpr0_14:
    376	ld	r14,-144(r1)
    377.globl	_restgpr0_15
    378_restgpr0_15:
    379	ld	r15,-136(r1)
    380.globl	_restgpr0_16
    381_restgpr0_16:
    382	ld	r16,-128(r1)
    383.globl	_restgpr0_17
    384_restgpr0_17:
    385	ld	r17,-120(r1)
    386.globl	_restgpr0_18
    387_restgpr0_18:
    388	ld	r18,-112(r1)
    389.globl	_restgpr0_19
    390_restgpr0_19:
    391	ld	r19,-104(r1)
    392.globl	_restgpr0_20
    393_restgpr0_20:
    394	ld	r20,-96(r1)
    395.globl	_restgpr0_21
    396_restgpr0_21:
    397	ld	r21,-88(r1)
    398.globl	_restgpr0_22
    399_restgpr0_22:
    400	ld	r22,-80(r1)
    401.globl	_restgpr0_23
    402_restgpr0_23:
    403	ld	r23,-72(r1)
    404.globl	_restgpr0_24
    405_restgpr0_24:
    406	ld	r24,-64(r1)
    407.globl	_restgpr0_25
    408_restgpr0_25:
    409	ld	r25,-56(r1)
    410.globl	_restgpr0_26
    411_restgpr0_26:
    412	ld	r26,-48(r1)
    413.globl	_restgpr0_27
    414_restgpr0_27:
    415	ld	r27,-40(r1)
    416.globl	_restgpr0_28
    417_restgpr0_28:
    418	ld	r28,-32(r1)
    419.globl	_restgpr0_29
    420_restgpr0_29:
    421	ld	r0,16(r1)
    422	ld	r29,-24(r1)
    423	mtlr	r0
    424	ld	r30,-16(r1)
    425	ld	r31,-8(r1)
    426	blr
    427
    428.globl	_restgpr0_30
    429_restgpr0_30:
    430	ld	r30,-16(r1)
    431.globl	_restgpr0_31
    432_restgpr0_31:
    433	ld	r0,16(r1)
    434	ld	r31,-8(r1)
    435	mtlr	r0
    436	blr
    437
    438#ifdef CONFIG_ALTIVEC
    439/* Called with r0 pointing just beyond the end of the vector save area.  */
    440
    441.globl	_savevr_20
    442_savevr_20:
    443	li	r12,-192
    444	stvx	v20,r12,r0
    445.globl	_savevr_21
    446_savevr_21:
    447	li	r12,-176
    448	stvx	v21,r12,r0
    449.globl	_savevr_22
    450_savevr_22:
    451	li	r12,-160
    452	stvx	v22,r12,r0
    453.globl	_savevr_23
    454_savevr_23:
    455	li	r12,-144
    456	stvx	v23,r12,r0
    457.globl	_savevr_24
    458_savevr_24:
    459	li	r12,-128
    460	stvx	v24,r12,r0
    461.globl	_savevr_25
    462_savevr_25:
    463	li	r12,-112
    464	stvx	v25,r12,r0
    465.globl	_savevr_26
    466_savevr_26:
    467	li	r12,-96
    468	stvx	v26,r12,r0
    469.globl	_savevr_27
    470_savevr_27:
    471	li	r12,-80
    472	stvx	v27,r12,r0
    473.globl	_savevr_28
    474_savevr_28:
    475	li	r12,-64
    476	stvx	v28,r12,r0
    477.globl	_savevr_29
    478_savevr_29:
    479	li	r12,-48
    480	stvx	v29,r12,r0
    481.globl	_savevr_30
    482_savevr_30:
    483	li	r12,-32
    484	stvx	v30,r12,r0
    485.globl	_savevr_31
    486_savevr_31:
    487	li	r12,-16
    488	stvx	v31,r12,r0
    489	blr
    490
    491.globl	_restvr_20
    492_restvr_20:
    493	li	r12,-192
    494	lvx	v20,r12,r0
    495.globl	_restvr_21
    496_restvr_21:
    497	li	r12,-176
    498	lvx	v21,r12,r0
    499.globl	_restvr_22
    500_restvr_22:
    501	li	r12,-160
    502	lvx	v22,r12,r0
    503.globl	_restvr_23
    504_restvr_23:
    505	li	r12,-144
    506	lvx	v23,r12,r0
    507.globl	_restvr_24
    508_restvr_24:
    509	li	r12,-128
    510	lvx	v24,r12,r0
    511.globl	_restvr_25
    512_restvr_25:
    513	li	r12,-112
    514	lvx	v25,r12,r0
    515.globl	_restvr_26
    516_restvr_26:
    517	li	r12,-96
    518	lvx	v26,r12,r0
    519.globl	_restvr_27
    520_restvr_27:
    521	li	r12,-80
    522	lvx	v27,r12,r0
    523.globl	_restvr_28
    524_restvr_28:
    525	li	r12,-64
    526	lvx	v28,r12,r0
    527.globl	_restvr_29
    528_restvr_29:
    529	li	r12,-48
    530	lvx	v29,r12,r0
    531.globl	_restvr_30
    532_restvr_30:
    533	li	r12,-32
    534	lvx	v30,r12,r0
    535.globl	_restvr_31
    536_restvr_31:
    537	li	r12,-16
    538	lvx	v31,r12,r0
    539	blr
    540
    541#endif /* CONFIG_ALTIVEC */
    542
    543#endif /* CONFIG_PPC64 */
    544
    545#endif