Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Jun 2017 06:15:29 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        Justin Hibbits <jhibbits@FreeBSD.org>, Nathan Whitehorn <nwhitehorn@freebsd.org>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, freebsd-hackers@freebsd.org
Subject:   On a old PowerMac G5: two 32-bit powerpc FreeBSD vmcore's from having protected most wired kernel memory from execution: what is common
Message-ID:  <D56D7968-13F4-4917-86EF-38C252B5D0B3@dsl-only.net>

next in thread | raw e-mail | index | archive | help
Based on the changed page protections. . .
Instead of illegal instruction the periodic/random kernel panic
reported for both example panics:

fatal kernel trap:

exception       =3D 0x400 instruction storage interrupt
virtual address =3D 0x90a0f0
srr0            =3D 0x90a0f0
srr1            =3D 0x10001032
lr              =3D 0x535ad0
                  (sched_affinity+0x18 ???)
curthread       =3D 0x147d360
pid =3D 11, comm =3D idle: cpu1

[ thread pid 11 tid 100003 ]
Stopped at etext+0xb8fc: illegal instruction 0

(So it looks like I disabled execute in that
area correctly.)


Most levels of the backtraces are different
between vmcore.5 and vmcore.6 . But the
lowest level ones are the same.

In particular the prior bl is to tdq_add
from sched_add but the 0x90a0f0 it jumps
to when getting the 0x400 exception is
wildly different than the 0x5356ec for the
bl to tdq_add.

For reference: sched_affinity through
sched_affinity+0x18 is:

00535ab8 <sched_affinity> stwu    r1,-32(r1)
00535abc <sched_affinity+0x4> mflr    r0
00535ac0 <sched_affinity+0x8> stw     r29,20(r1)
00535ac4 <sched_affinity+0xc> stw     r30,24(r1)
00535ac8 <sched_affinity+0x10> stw     r31,28(r1)
00535acc <sched_affinity+0x14> stw     r0,36(r1)
00535ad0 <sched_affinity+0x18> mr      r31,r1

So 00535ad0 is an odd spot for a lr value.


backtrace summary for vmcore.5:
(Listing the LR values, not 4 back from that.)

trapexit+0x0 (after trapagain+0x4) for 0x400 trap
0x90a0f0 from .hash section (bad address)
sched_add+0x1a0
  005359c4 <sched_add+0x188> bl      004cde6c <thread_lock_unblock>
  005359c8 <sched_add+0x18c> bl      008ea4e0 <spinlock_exit>
  005359cc <sched_add+0x190> mr      r3,r28
  005359d0 <sched_add+0x194> mr      r4,r27
  005359d4 <sched_add+0x198> mr      r5,r25
  005359d8 <sched_add+0x19c> bl      005356ec <tdq_add>
  005359dc <sched_add+0x1a0> mfsprg  r9,0

(from here until cpu_idle_60x+0x88 is not common with vmcore.6)
intr_event_schedule_thread+0xd0
  004a8780 <intr_event_schedule_thread+0xc4> mr      r3,r28
  004a8784 <intr_event_schedule_thread+0xc8> li      r4,4
  004a8788 <intr_event_schedule_thread+0xcc> bl      0053583c =
<sched_add>
  004a878c <intr_event_schedule_thread+0xd0> lwz     r9,0(r28)
intr_event_handle+0x114
powerpc_dispatch_intr+0xcc
openpic_dispatch+0x94
powerpc_interrupt+0xc4
trapexit+0x0 (after trapagain+0x4) for 0x500 trap (vmcore.6: 0x900)

cpu_idle_60x+0x88
. . . (not shown)


backtrace summary for vmcore.6:
(Listing the LR values, not 4 back from that.)

trapexit+0x0 (after trapagain+0x4) for 0x400 trap
0x90a0f0 from .hash section (bad address)
sched_add+0x1a0
  005359c4 <sched_add+0x188> bl      004cde6c <thread_lock_unblock>
  005359c8 <sched_add+0x18c> bl      008ea4e0 <spinlock_exit>
  005359cc <sched_add+0x190> mr      r3,r28
  005359d0 <sched_add+0x194> mr      r4,r27
  005359d4 <sched_add+0x198> mr      r5,r25
  005359d8 <sched_add+0x19c> bl      005356ec <tdq_add>
  005359dc <sched_add+0x1a0> mfsprg  r9,0

(from here until cpu_idle_60x+0x88 is not common with vmcore.5)
sched_wakeup+0xa8
  00535c0c <sched_wakeup+0x9c> mr      r3,r29
  00535c10 <sched_wakeup+0xa0> li      r4,0
  00535c14 <sched_wakeup+0xa4> bl      0053583c <sched_add>
  00535c18 <sched_wakeup+0xa8> lwz     r11,0(r1)
setrunnable+0xa0
sleepq_resume_thread+0x180
sleepq_timeout+0xcc
softclock_call_cc+0x1f4
callout_process+0x280
handleevents+0x2ac
timercb+0x4c4
decr_intr+0xf4
powerpc_dispatch_intr+0xf8
trapexit+0x0 (after trapagain+0x4) for 0x900 trap (vmcore.5: 0x500)

cpu_idle_60x+0x88
. . . (not shown)



=46rom the vmcore.5:
(The formatting depends on mono-spaced text)

                      [         ]: trapexit+0x0 (after trapagain+0x4)
013ed680  df 5e a7 40 00 10 08 f8  00 00 00 04 df 5e a7 40  =
|.^.@.........^.@|
013ed690  01 47 d3 60 00 00 00 14  01 47 e3 60 00 00 00 04  =
|.G.`.....G.`....|
013ed6a0  00 00 00 04 00 fd 98 7f  00 00 00 00 00 d4 c0 50  =
|...............P|
013ed6b0  01 47 d3 60 df 5e a7 80  df 5d 0d 00 00 00 00 00  =
|.G.`.^...]......|
013ed6c0  00 d4 be 00 00 cb 98 98  00 c9 66 bc 00 c4 5e a8  =
|..........f...^.|
013ed6d0  00 c9 66 bc 00 d4 c5 4c  df 5e a9 e0 00 eb a8 00  =
|..f....L.^......|
013ed6e0  00 c9 66 bc 01 47 d3 60  00 00 00 00 df 5e a8 78  =
|..f..G.`.....^.x|
013ed6f0  01 44 0e 00 01 47 d3 60  00 eb af 00 01 47 d3 60  =
|.D...G.`.....G.`|
013ed700  00 d1 ca ac df 5e a7 40  00 53 5a d0 20 00 90 34  =
|.....^.@.SZ. ..4|
                                   [         ]: sched_affinity+0x18

                                   [         ]: =46rom .hash section
013ed710  00 00 00 00 00 8d ef b4  00 90 a0 f0 10 00 10 32  =
|...............2|
         [0x400 trap]
013ed720  00 00 04 00 41 a1 e5 68  0a 00 00 00 01 47 e3 60  =
|....A..h.....G.`|
013ed730  00 eb af 00 01 47 d3 60  00 d1 ca ac df 5e a7 40  =
|.....G.`.....^.@|

                      [         ]: sched_add+0x1a0
013ed740  df 5e a7 80 00 53 59 dc  00 c9 66 bc 00 d4 c5 4c  =
|.^...SY...f....L|
013ed750  df 5e a9 e0 00 eb a8 00  00 c9 66 bc 00 00 00 04  =
|.^........f.....|
013ed760  00 00 00 00 df 5e a8 78  01 44 0e 00 01 47 d3 60  =
|.....^.x.D...G.`|
013ed770  01 47 e3 60 01 51 ff 80  00 d1 b4 30 df 5e a7 80  =
|.G.`.Q.....0.^..|

                      [         ]: intr_event_schedule_thread+0xd0
013ed780  df 5e a7 b0 00 4a 87 8c  6d 0c 21 5c df 5e 00 00  =
|.^...J..m.!\.^..|
013ed790  df 5e a7 b0 00 00 00 7c  00 00 00 00 01 47 d3 60  =
|.^.....|.....G.`|
013ed7a0  00 00 00 01 00 00 00 00  00 d2 6e 70 df 5e a7 b0  =
|..........np.^..|

                      [         ]: intr_event_handle+0x114
013ed7b0  df 5e a7 e0 00 4a 95 fc  00 c9 66 bc 00 00 00 00  =
|.^...J....f.....|
013ed7c0  df 5e a9 8c df 5e a8 78  df 5e a8 78 01 44 0e 00  =
|.^...^.x.^.x.D..|
013ed7d0  00 02 10 a0 01 48 b2 80  00 d2 6e 70 df 5e a7 e0  =
|.....H....np.^..|

                      [         ]: powerpc_dispatch_intr+0xcc
013ed7e0  df 5e a8 10 00 8e 91 8c  df 5e a7 f0 00 cf 48 a8  =
|.^.......^....H.|
013ed7f0  df 5e a8 10 df 5e a8 78  01 47 d3 60 df 5e a8 78  =
|.^...^.x.G.`.^.x|
013ed800  00 02 10 a0 01 4c d4 00  00 d2 70 2c df 5e a8 10  =
|.....L....p,.^..|

                      [         ]: openpic_dispatch+0x94
013ed810  df 5e a8 40 00 8e c9 48  ec 94 8e 64 e6 38 8f 72  =
|.^.@...H...d.8.r|
013ed820  df 5e a8 40 00 00 00 02  00 00 00 00 00 eb af 00  =
|.^.@............|
013ed830  41 a1 e5 68 01 48 b1 00  00 d2 6e 60 df 5e a8 40  =
|A..h.H....n`.^.@|

                      [         ]: powerpc_interrupt+0xc4
013ed840  df 5e a8 70 00 8e 7d 28  8b 00 00 00 00 00 55 c4  =
|.^.p..}(......U.|
013ed850  00 cd f0 74 00 00 00 03  00 00 00 03 00 eb af 00  =
|...t............|
013ed860  41 a1 e5 68 0a 00 00 00  00 00 00 00 00 00 90 32  =
|A..h...........2|

                      [         ]: trapexit+0x0 (after trapagain+0x4)
013ed870  df 5e a9 30 00 10 08 f8  00 04 90 32 df 5e a9 30  =
|.^.0.......2.^.0|
013ed880  01 47 d3 60 00 00 00 00  7f a3 8e 84 00 00 00 00  =
|.G.`............|
013ed890  7f a3 8e 84 00 fd 98 7f  00 00 00 00 00 00 00 44  =
|...............D|
013ed8a0  01 fc a0 55 00 00 90 32  df 5d 0d 00 00 00 00 00  =
|...U...2.]......|
013ed8b0  00 d4 be 00 00 cb 98 98  00 c9 66 bc 00 c4 5e a8  =
|..........f...^.|
013ed8c0  00 c9 66 bc 00 d4 c5 4c  df 5e a9 e0 00 eb a8 00  =
|..f....L.^......|
013ed8d0  00 c9 66 bc 01 47 d3 60  df 5e a9 8c 00 00 00 03  =
|..f..G.`.^......|
013ed8e0  00 00 00 03 00 eb af 00  00 00 00 00 00 8e 3c b8  =
|..............<.|
013ed8f0  00 d2 6c 04 df 5e a9 30  00 8e 3c d4 40 00 00 42  =
|..l..^.0..<.@..B|

                                   [         ]: cpu_idle_60x+0x88
013ed900  20 00 00 00 00 8e 3c b8  00 8e 3d 40 00 00 90 32  | =
.....<...=3D@...2|
         [0x500 trap]
013ed910  00 00 05 00 41 a1 e5 68  0a 00 00 00 00 00 00 00  =
|....A..h........|
013ed920  0b 5c 71 7c 79 c0 d7 fc  00 00 00 00 00 00 00 04  =
|.\q|y...........|

                      [ignore?  ] (see above trap frame)
013ed930  df 5e a9 50 00 00 00 03  00 00 00 03 00 eb af 00  =
|.^.P............|
013ed940  00 00 00 00 00 d4 ca 44  00 d2 6c 04 df 5e a9 50  =
|.......D..l..^.P|

                      [         ]: cpu_idle+0x58
013ed950  df 5e a9 70 00 8e 32 5c  00 00 00 02 00 eb af 00  =
|.^.p..2\........|
013ed960  00 f2 d6 7c 00 00 00 03  00 d1 ca ac df 5e a9 70  =
|...|.........^.p|

                      [         ]: sched_idletd+0x4d4
013ed970  df 5e aa 50 00 53 6e 7c  df 5e a9 80 00 00 00 00  =
|.^.P.Sn|.^......|
013ed980  df 5e a9 b0 01 47 d3 60  df 5e a9 90 ff ff ff fd  =
|.^...G.`.^......|
013ed990  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9a0  ff ff ff ff ff ff ff ff  ff ff ff ff df 5e a9 b0  =
|.............^..|
013ed9b0  df 5e a9 d0 00 00 00 02  ff ff ff ff 00 00 01 e5  =
|.^..............|
013ed9c0  ff ff ff fd ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9e0  ff ff ff fd ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013eda00  df 5e aa 20 00 f6 4a 00  00 00 00 00 00 00 00 00  |.^. =
..J.........|
013eda10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|
*
013eda30  00 00 00 00 00 53 69 a8  df 5e aa 98 00 00 00 00  =
|.....Si..^......|
013eda40  01 47 96 e0 01 47 d3 60  00 d1 b3 70 df 5e aa 50  =
|.G...G.`...p.^.P|

                      [         ]: fork_exit+0xb4
013eda50  df 5e aa 80 00 4a 3c b4  df 5e aa 60 df 5e aa 60  =
|.^...J<..^.`.^.`|
013eda60  df 5e aa 80 00 00 00 00  00 00 00 00 00 00 00 00  =
|.^..............|
013eda70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|

                      [         ]: fork_tramoline+0x10
013eda80  00 00 00 00 00 8f 19 90  00 53 69 a8 00 00 00 00  =
|.........Si.....|
013eda90  df 5e aa 98 00 00 00 00  00 00 00 00 00 00 00 00  =
|.^..............|
013edaa0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|



=46rom the vmcore.6:

                      [         ]: trapexit+0x0 (after trapagain+0x4)
013ed4d0  df 5e a5 90 00 10 08 f8  00 00 00 04 df 5e a5 90  =
|.^...........^..|
013ed4e0  01 47 d3 60 00 00 00 54  05 91 b0 00 00 00 00 00  =
|.G.`...T........|
013ed4f0  00 00 00 00 00 00 00 0f  00 00 00 00 00 d4 c0 50  =
|...............P|
013ed500  01 47 d3 60 df 5e a5 d0  00 00 00 00 00 00 00 00  =
|.G.`.^..........|
013ed510  00 d4 be 00 00 cb 98 98  00 d4 c4 6c 00 d4 c4 6c  =
|...........l...l|
013ed520  00 11 11 97 00 11 12 16  00 00 11 11 05 91 b0 00  =
|................|
013ed530  00 56 64 30 00 00 01 14  00 00 00 00 00 00 00 00  =
|.Vd0............|
013ed540  00 00 00 01 00 00 00 00  00 eb af 00 01 47 d3 60  =
|.............G.`|
013ed550  00 d1 ca ac df 5e a5 90  00 53 5a d0 20 00 90 34  =
|.....^...SZ. ..4|
                                   [         ]: sched_affinity+0x18

                                   [         ]: =46rom .hash section
013ed560  00 00 00 00 00 00 00 00  00 90 a0 f0 10 00 10 32  =
|...............2|
         [0x400 trap]
013ed570  00 00 04 00 01 81 a4 7c  0a 00 00 00 05 91 b0 00  =
|.......|........|
013ed580  00 eb af 00 01 47 d3 60  00 d1 ca ac df 5e a5 90  =
|.....G.`.....^..|

                      [         ]: sched_add+0x1a0
013ed590  df 5e a5 d0 00 53 59 dc  00 00 00 01 00 d4 c5 4c  =
|.^...SY........L|
013ed5a0  df 5e 00 00 00 00 00 40  df 5e a5 b0 00 00 00 04  =
|.^.....@.^......|
013ed5b0  df 5e a5 d0 00 00 00 00  00 00 00 01 00 00 00 00  =
|.^..............|
013ed5c0  05 91 b3 28 05 91 b0 00  00 d1 ca ac df 5e a5 d0  =
|...(.........^..|

                      [         ]: sched_wakeup+0xa8
013ed5d0  df 5e a5 f0 00 53 5c 18  00 00 00 00 00 00 00 00  =
|.^...S\.........|
013ed5e0  01 42 b0 80 05 91 b0 00  00 d1 c4 c4 df 5e a5 f0  =
|.B...........^..|

                      [         ]: setrunnable+0xa0
013ed5f0  df 5e a6 10 00 50 26 08  df 5e a6 00 00 cb 98 98  =
|.^...P&..^......|
013ed600  df 5e a6 40 00 d4 c4 6c  00 d1 d5 34 df 5e a6 10  =
|.^.@...l...4.^..|

                      [         ]: sleepq_resume_thread+0x180
013ed610  df 5e a6 40 00 56 43 2c  00 56 64 30 00 00 01 14  =
|.^.@.VC,.Vd0....|
013ed620  df 5e a6 40 00 00 00 00  00 00 00 01 00 00 11 11  =
|.^.@............|
013ed630  8a d3 94 2a 05 91 b0 00  00 d1 d5 34 df 5e a6 40  =
|...*.......4.^.@|

                      [         ]: sleepq_timeout+0xcc
013ed640  df 5e a6 80 00 56 64 fc  00 c9 66 bc 00 00 00 00  =
|.^...Vd...f.....|
013ed650  00 00 11 11 00 00 00 00  97 a0 fc 3d 80 96 c0 38  =
|...........=3D...8|
013ed660  df 5e a6 80 00 8e a5 04  00 d2 5b 10 05 91 b2 a0  =
|.^........[.....|
013ed670  00 e9 58 00 00 00 00 00  00 d1 c8 20 df 5e a6 80  |..X........ =
.^..|

                      [         ]: softclock_call_cc+0x1f4
013ed680  df 5e a6 f0 00 51 63 84  00 d2 5b 10 df 5e a6 90  =
|.^...Qc...[..^..|
013ed690  df 5e a6 f0 00 8a ca a8  df 5e a6 a0 00 00 00 0f  =
|.^.......^......|
013ed6a0  df 5e a7 10 00 4c e2 f4  68 fc 88 02 00 00 00 04  =
|.^...L..h.......|
013ed6b0  df 5e a6 d0 00 00 00 02  00 11 11 97 00 11 12 16  =
|.^..............|
013ed6c0  00 00 11 11 d7 a0 9d 9d  00 11 11 8a 00 00 11 11  =
|................|
013ed6d0  97 a0 9d 9d 00 00 11 12  17 00 00 00 00 00 11 12  =
|................|
013ed6e0  17 00 00 00 00 e9 58 00  00 d1 c8 20 df 5e a6 f0  |......X.... =
.^..|

                      [         ]: callout_process+0x280
013ed6f0  df 5e a7 50 00 51 77 c0  df 5e a8 78 01 47 d3 60  =
|.^.P.Qw..^.x.G.`|
013ed700  01 47 d4 58 00 00 00 00  00 d1 ab 24 00 00 00 04  =
|.G.X.......$....|
013ed710  00 c9 66 bc 00 c4 5e a8  00 c9 66 bc 00 d4 c5 4c  =
|..f...^...f....L|
013ed720  00 d0 53 00 00 eb a8 00  00 00 00 01 00 00 00 00  =
|..S.............|
013ed730  df 5e a9 8c 00 00 00 00  df 5e a8 78 00 00 11 11  =
|.^.......^.x....|
013ed740  97 a0 9d 9d df 5d 0d 00  00 d2 5b 10 df 5e a7 50  =
|.....]....[..^.P|

                      [         ]: handleevents+0x2ac
013ed750  df 5e a7 a0 00 8a b2 70  df 5e a7 60 df 5e a7 60  =
|.^.....p.^.`.^.`|
013ed760  df 5e a7 a0 00 53 49 dc  00 d2 5b 10 00 00 00 04  =
|.^...SI...[.....|
013ed770  df 5e a7 c0 05 9b d2 00  00 c9 66 bc 01 47 d3 60  =
|.^........f..G.`|
013ed780  df 5e a9 8c 00 f6 1d 90  00 00 11 11 97 a0 9d 9d  =
|.^..............|
013ed790  df 5d 0d 00 df 5d 0d 30  00 d2 5b 10 df 5e a7 a0  =
|.]...].0..[..^..|

                      [         ]: timercb+0x4c4
013ed7a0  df 5e a8 20 00 8a d1 10  00 d2 6e 70 df 5e a7 b0  |.^. =
......np.^..|
013ed7b0  df 5e a7 e0 00 4a 96 00  00 00 11 11 00 00 00 00  =
|.^...J..........|
013ed7c0  97 a0 9d 9d 53 27 aa d0  df 5e a8 78 05 86 37 00  =
|....S'...^.x..7.|
013ed7d0  df 5e a7 f0 05 86 37 80  00 d4 be 00 00 cb 98 98  =
|.^....7.........|
013ed7e0  00 c9 66 bc 00 c4 5e a8  00 c9 66 bc 00 d4 c5 4c  =
|..f...^...f....L|
013ed7f0  df 5e a9 e0 00 eb a8 00  00 c9 66 bc 01 47 d3 60  =
|.^........f..G.`|
013ed800  df 5e a9 8c df 5e a8 78  01 47 d3 60 00 00 00 00  =
|.^...^.x.G.`....|
013ed810  00 f6 1d 90 00 00 00 01  00 d2 6b dc df 5e a8 20  =
|..........k..^. |

                      [         ]: decr_intr+0xf4
013ed820  df 5e a8 40 00 8e 1f 08  00 00 00 00 00 00 00 04  =
|.^.@............|
013ed830  01 47 d4 34 00 00 00 01  00 d2 6e 60 df 5e a8 40  =
|.G.4......n`.^.@|

                      [         ]: powerpc_dispatch_intr+0xf8
013ed840  df 5e a8 70 00 8e 7d 5c  00 d1 ca ac df 5e a8 50  =
|.^.p..}\.....^.P|
013ed850  00 cd f0 74 00 00 00 03  00 00 00 03 00 eb af 00  =
|...t............|
013ed860  01 81 a4 7c 0a 00 00 00  00 00 00 00 00 00 90 32  =
|...|...........2|

                      [         ]: trapexit+0x0 (after trapagain+0x4)
013ed870  df 5e a9 30 00 10 08 f8  00 04 90 32 df 5e a9 30  =
|.^.0.......2.^.0|
013ed880  01 47 d3 60 00 00 00 00  0d 0a d2 89 00 00 00 00  =
|.G.`............|
013ed890  0d 0a d2 89 00 19 e9 a4  00 00 00 00 00 00 00 44  =
|...............D|
013ed8a0  01 fc a0 55 00 00 90 32  df 5d 0d 00 00 00 00 00  =
|...U...2.]......|
013ed8b0  00 d4 be 00 00 cb 98 98  00 c9 66 bc 00 c4 5e a8  =
|..........f...^.|
013ed8c0  00 c9 66 bc 00 d4 c5 4c  df 5e a9 e0 00 eb a8 00  =
|..f....L.^......|
013ed8d0  00 c9 66 bc 01 47 d3 60  df 5e a9 8c 00 00 00 03  =
|..f..G.`.^......|
013ed8e0  00 00 00 03 00 eb af 00  00 00 00 00 00 8e 3c b8  =
|..............<.|
013ed8f0  00 d2 6c 04 df 5e a9 30  00 8e 3c d4 40 00 00 42  =
|..l..^.0..<.@..B|

                                   [         ]: cpu_idle_60x+0x88
013ed900  20 00 00 00 00 8e 3c b8  00 8e 3d 40 00 00 90 32  | =
.....<...=3D@...2|
         [0x900 trap]
013ed910  00 00 09 00 01 81 a4 7c  0a 00 00 00 00 00 00 00  =
|.......|........|
013ed920  8a 95 8e 6d 80 4a 8c 8c  00 00 00 00 00 00 00 04  =
|...m.J..........|

                      [ignore?  ] (see above trap frame)
013ed930  df 5e a9 50 00 00 00 03  00 00 00 03 00 eb af 00  =
|.^.P............|
013ed940  00 00 00 00 00 d4 ca 44  00 d2 6c 04 df 5e a9 50  =
|.......D..l..^.P|

                      [         ]: cpu_idle+0x58
013ed950  df 5e a9 70 00 8e 32 5c  00 00 00 02 00 eb af 00  =
|.^.p..2\........|
013ed960  00 f2 d6 7c 00 00 00 03  00 d1 ca ac df 5e a9 70  =
|...|.........^.p|

                      [         ]: sched_idletd+0x4d4
013ed970  df 5e aa 50 00 53 6e 7c  df 5e a9 80 00 00 00 00  =
|.^.P.Sn|.^......|
013ed980  df 5e a9 b0 01 47 d3 60  00 d2 5b 10 ff ff ff fd  =
|.^...G.`..[.....|
013ed990  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9a0  ff ff ff ff ff ff ff ff  ff ff ff ff df 5e a9 b0  =
|.............^..|
013ed9b0  df 5e a9 d0 00 00 00 02  ff ff ff ff 00 00 01 e5  =
|.^..............|
013ed9c0  ff ff ff fd ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9e0  ff ff ff fd ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013ed9f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  =
|................|
013eda00  df 5e aa 50 00 f6 4a 00  00 00 00 00 00 00 00 00  =
|.^.P..J.........|
013eda10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|
*
013eda30  00 00 00 00 00 53 69 a8  df 5e aa 98 00 00 00 00  =
|.....Si..^......|
013eda40  01 47 96 e0 01 47 d3 60  00 d1 b3 70 df 5e aa 50  =
|.G...G.`...p.^.P|

                      [         ]: fork_exit+0xb4
013eda50  df 5e aa 80 00 4a 3c b4  df 5e aa 60 fa 50 05 af  =
|.^...J<..^.`.P..|
013eda60  df 5e aa 80 00 00 00 00  00 00 00 00 00 00 00 00  =
|.^..............|
013eda70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|

                      [         ]: fork_tramoline+0x10
013eda80  00 00 00 00 00 8f 19 90  00 53 69 a8 00 00 00 00  =
|.........Si.....|
013eda90  df 5e aa 98 00 00 00 00  00 00 00 00 00 00 00 00  =
|.^..............|
013edaa0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  =
|................|


FYI: The memory protection debugging hack in (and some
before):

void
moea64_kenter_attr(mmu_t mmu, vm_offset_t va, vm_paddr_t pa, =
vm_memattr_t ma)

is currently:

# svnlite diff /usr/src/sys/powerpc/aim/mmu_oea64.c                      =
                                                                         =
                                         Index: =
/usr/src/sys/powerpc/aim/mmu_oea64.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- /usr/src/sys/powerpc/aim/mmu_oea64.c	(revision 317820)
+++ /usr/src/sys/powerpc/aim/mmu_oea64.c	(working copy)
@@ -1752,6 +1752,18 @@
 	PV_PAGE_UNLOCK(m);
 }
=20
+#if defined(AIM) && !defined(__powerpc64__)
+//
+// Part of PowerMac G5 HACK FOR PROBLEM FINDING. . .
+// (G5 used via 32-bit FreeBSD.)
+//
+
+extern char _GOT_START_[]; // beginning of .got/.got.plt
+extern char _GOT_END_[];   // ending    of .got/.got.plt
+
+extern vm_offset_t       __startkernel, __endkernel;
+#endif
+
 /*
  * Map a wired page into kernel virtual address space.
  */
@@ -1762,6 +1774,52 @@
 	struct pvo_entry *pvo, *oldpvo;
=20
 	pvo =3D alloc_pvo_entry(0);
+#if defined(AIM) && !defined(__powerpc64__)
+	//
+	// PowerMac G5 HACK FOR PROBLEM FINDING. . .
+	// (G5 used via 32-bit FreeBSD.)
+	//
+	// As a problem-finding-aid try to catch some examples of
+	// jumping to non-code in the kernel before it tries to
+	// execute that that code. Hopefully this will show where
+	// the bad jump into the likes of the .hash section is
+	// happening. (dbb bt and vmcore.*'s have not lead to
+	// that information so far.)
+	//
+	if (cpu_features & PPC_FEATURE_64)
+	{
+		// First deal with pages that should have the original
+		// VM_PROT_EXECUTE status for something on the page
+		// (most pages in the kernel area). So pages with some
+		// byte(s) from .text, .got, or .got.plt, along with
+		// any requested from before where __startkernel
+		// indicates. Also any va requested from a page
+		// containing where __endkernel indicates or later
+		// gets VM_PROT_EXECUTE if such a va is requested.
+		//
+		// So: have just the rest of the kernel area not have
+		// VM_PROT_EXECUTE status in hopes that it will report
+		// where the code is that is making bad jumps to
+		// non-code, such as jumping into the .hash section
+		// instead of reporting on illegal instructions
+		// from the incorrect traget area.
+		//
+		if ( va < ((vm_offset_t)(etext+(PAGE_SIZE-1)) & =
~PAGE_MASK) )
+			pvo->pvo_pte.prot =3D VM_PROT_READ | =
VM_PROT_WRITE | VM_PROT_EXECUTE;
+
+		else if (  ((vm_offset_t)_GOT_START_ & ~PAGE_MASK) <=3D =
va
+			&& va < ((vm_offset_t)(_GOT_END_+(PAGE_SIZE-1)) =
& ~PAGE_MASK)
+			)
+			pvo->pvo_pte.prot =3D VM_PROT_READ | =
VM_PROT_WRITE | VM_PROT_EXECUTE;
+
+		else if ( va < (__endkernel & ~PAGE_MASK) )
+			pvo->pvo_pte.prot =3D VM_PROT_READ | =
VM_PROT_WRITE;
+
+		else // Otherwise do as before the HACK:
+			pvo->pvo_pte.prot =3D VM_PROT_READ | =
VM_PROT_WRITE | VM_PROT_EXECUTE;
+	}
+	else
+#endif
 	pvo->pvo_pte.prot =3D VM_PROT_READ | VM_PROT_WRITE | =
VM_PROT_EXECUTE;
 	pvo->pvo_pte.pa =3D (pa & ~ADDR_POFF) | moea64_calc_wimg(pa, =
ma);
 	pvo->pvo_vaddr |=3D PVO_WIRED;

Being va based for when to avoid VM_PROT_EXECUTE
this way means that the openfirmware related
virtual addresses that go through this code still
get VM_PROT_EXECUTE --even if some had pa's in the
loaded kernel's address range (if such were
possible).



Note: While 32-bit powerpc FreeBSD uses a relocatable
kernel format it seems to not actually change the
code addresses on the G5 from what objdump reports
when looking at /boot/kernel/kernel .

=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D56D7968-13F4-4917-86EF-38C252B5D0B3>