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