1ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai/* Copyright (c) 2007, Google Inc.
2ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * All rights reserved.
3ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *
4ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * Redistribution and use in source and binary forms, with or without
5ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * modification, are permitted provided that the following conditions are
6ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * met:
7ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *
8ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *     * Redistributions of source code must retain the above copyright
9ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * notice, this list of conditions and the following disclaimer.
10ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *     * Redistributions in binary form must reproduce the above
11ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * copyright notice, this list of conditions and the following disclaimer
12ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * in the documentation and/or other materials provided with the
13ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * distribution.
14ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *     * Neither the name of Google Inc. nor the names of its
15ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * contributors may be used to endorse or promote products derived from
16ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * this software without specific prior written permission.
17ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *
18ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai */
30ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
31ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai/* stackwalker_selftest_sol.s
32ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * On Solaris, the recommeded compiler is CC, so we can not use gcc inline
33ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * asm, use this method instead.
34ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *
35ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * How to compile: as -P -L -D_ASM -D_STDC -K PIC -o \
36ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *                 src/processor/stackwalker_selftest_sol.o \
37ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *                 src/processor/stackwalker_selftest_sol.s
38ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai *
39ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai * Author: Michael Shang
40ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai */
41ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
42ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai#include <sys/asm_linkage.h>
43ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
44ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai#if defined(__i386)
45ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
46ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
47ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetEBP)
48ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      pushl    %ebp
49ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %esp,%ebp
50ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      subl     $0x00000004,%esp
51ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     0x00000000(%ebp),%eax
52ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %eax,0xfffffffc(%ebp)
53ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     0xfffffffc(%ebp),%eax
54ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      leave
55ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
56ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetEBP)
57ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
58ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetEIP)
59ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      pushl    %ebp
60ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %esp,%ebp
61ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      subl     $0x00000004,%esp
62ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     0x00000004(%ebp),%eax
63ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %eax,0xfffffffc(%ebp)
64ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     0xfffffffc(%ebp),%eax
65ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      leave
66ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
67ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetEIP)
68ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
69ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetESP)
70ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      pushl    %ebp
71ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %esp,%ebp
72ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      subl     $0x00000004,%esp
73ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %ebp,%eax
74ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     %eax,0xfffffffc(%ebp)
75ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      movl     0xfffffffc(%ebp),%eax
76ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      addl     $0x00000008,%eax
77ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      leave
78ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
79ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetESP)
80ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
81ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
82ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai#elif defined(__sparc)
83ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
84ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
85ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetPC)
86ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      save     %sp, -120, %sp
87ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      mov      %i7, %i4
88ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      inccc    8, %i4
89ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      mov      %i4, %i0
90ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
91ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      restore
92ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetPC)
93ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
94ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetSP)
95ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      save     %sp, -120, %sp
96ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      mov      %fp, %i4
97ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      mov      %i4, %i0
98ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
99ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      restore
100ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetSP)
101ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
102ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiENTRY(GetFP)
103ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      save     %sp, -120, %sp
104ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ld       [%fp + 56], %g1
105ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      mov      %g1, %i0
106ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      ret
107ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai      restore
108ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovaiSET_SIZE(GetFP)
109ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
110ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai
111ea2bba970675e01f9964f82d3f44960c1aad05dcmmentovai#endif  // __i386 || __sparc
112