Re: soft lookup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Bernhard R. Link" <brlink@xxxxxxxxxx>
Date: Sun, 14 Feb 2010 21:49:31 +0100

> As I said, my sparc assembler knowledge is almost not existing,
> so excuses in advance for messing everything up.
> 
> I'm assuming objdump -d on the unpacked vmlinuz gives me correct
> addresses. That means it is here (the sparc64_realfault_common):
> 
>   407a94:       10 6f f3 2b     b  %xcc, 404740
>   407a98:       8f 41 40 00     rd  %pc, %g7
>   407a9c:       e8 29 a0 08     stb  %l4, [ %g6 + 8 ]     <-TPC
>   407aa0:       ea 71 a0 20     stx  %l5, [ %g6 + 0x20 ]  <-TNPC
>   407aa4:       40 01 09 1e     call  449f1c              <-ret_pc
>   407aa8:       90 03 a8 bf     add  %sp, 0x8bf, %o0
>   407aac:       10 6f f4 35     b  %xcc, 404b80
>   407ab0:       01 00 00 00     nop
> 
> That seems very strange in my eyes. The odd sp value does not make my
> confusion smaller.

%g6 holds the current thread pointer.

The stack pointer is always odd on sparc64.  The value stored
in the %sp register is "biased" by 2047 bytes from the real
base of the current stack frame.  It's done this way to allow
more of the stack variables to be accessible with a 13-bit
signed offset from the frame pointer %fp since that can be
done in one load or store instruction.
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux