source: mainline/uspace/lib/c/arch/ia64/src/syscall.S

Last change on this file was 70259a55, checked in by Jakub Jermar <jakub@…>, 7 years ago

ia64: Use appropriate imm21 operand with BREAK

This commit changes the imm21 used with the BREAK instruction to conform
to the IA-64 Software Conventions and Runtime Architecture Guide. This
is necessary to be able to distinguish syscalls from compiler-generated
calls to architected software interrupts (e.g. integer divide by zero).

In order to be able to test the used immediate in break_instruction(),
we extend istate_t to hold the CR.IIM register.

  • Property mode set to 100644
File size: 2.0 KB
Line 
1#
2# Copyright (c) 2006 Jakub Jermar
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29#include <abi/asmtool.h>
30
31/*
32 * IA-64 Software Conventions and Runtime Architecture Guide mandates that
33 * the zero-extended imm21 operand of the BREAK instruction is used as follows:
34 *
35 * MSB | Purpose
36 * ----+--------
37 * 000 | Reserved for architected software interrupts
38 * 001 | Available for application use as software interrupts
39 * 01x | Reserved for debugger breakpoints
40 * 1xx | Reserved for definition by each ABI
41 */
42#define SYSCALL_IMM 0x40000
43
44FUNCTION_BEGIN(__syscall)
45 alloc r14 = ar.pfs, 7, 0, 0, 0 ;;
46 break SYSCALL_IMM
47 mov ar.pfs = r14 ;;
48 br.ret.sptk.many b0
49FUNCTION_END(__syscall)
Note: See TracBrowser for help on using the repository browser.