~gothicx/apport/ignore_obsolete_packages

« back to all changes in this revision

Viewing changes to data/general-hooks/parse_segv.py

  • Committer: Kees Cook
  • Date: 2009-09-13 01:14:15 UTC
  • Revision ID: kees@outflux.net-20090913011415-okr0u8eys436ho90
add test for 64bit modulo branch too

Show diffs side-by-side

added added

removed removed

Lines of Context:
250
250
 
251
251
def add_info(report):
252
252
    # Only interested in segmentation faults...
253
 
    if report.get('Signal') != '11':
 
253
    if report.get('Signal','0') != '11':
254
254
        return
255
255
 
256
256
    needed = ['Signal', 'Architecture', 'Disassembly', 'ProcMaps', 'Registers']
313
313
fs             0x4  4
314
314
gs             0x33 51
315
315
'''
 
316
        regs64 = '''rax            0xffffffffffffffff   -1
 
317
rbx            0x26eff4 2551796
 
318
rcx            0xffffffffffffffff   -1
 
319
rdx            0xffffffffff600180   -10485376
 
320
rsi            0x0  0
 
321
rdi            0x7fffffffe3b0   140737488348080
 
322
rbp            0x0  0x0
 
323
rsp            0x7fffffffe388   0x7fffffffe388
 
324
r8             0x0  0
 
325
r9             0x0  0
 
326
r10            0x7fffffffe140   140737488347456
 
327
r11            0x246    582
 
328
r12            0x7fffffffe400   140737488348160
 
329
r13            0x7fffffffe468   140737488348264
 
330
r14            0x1  1
 
331
r15            0x7fffffffe460   140737488348256
 
332
rip            0x7ffff790be10   0x7ffff790be10 <nanosleep+16>
 
333
eflags         0x246    [ PF ZF IF ]
 
334
cs             0x33 51
 
335
ss             0x2b 43
 
336
ds             0x0  0
 
337
es             0x0  0
 
338
fs             0x0  0
 
339
gs             0x0  0
 
340
fctrl          0x37f    895
 
341
fstat          0x0  0
 
342
ftag           0xffff   65535
 
343
fiseg          0x0  0
 
344
fioff          0x40303a 4206650
 
345
foseg          0x0  0
 
346
fooff          0x0  0
 
347
fop            0x5d8    1496
 
348
mxcsr          0x1f80   [ IM DM ZM OM UM PM ]
 
349
'''
316
350
        maps = '''00110000-0026c000 r-xp 00000000 08:06 375131     /lib/tls/i686/cmov/libc-2.9.so
317
351
0026c000-0026d000 ---p 0015c000 08:06 375131     /lib/tls/i686/cmov/libc-2.9.so
318
352
0026d000-0026f000 r--p 0015c000 08:06 375131     /lib/tls/i686/cmov/libc-2.9.so
561
595
                self.assertEqual(segv.calculate_arg('(%edx,%ebx,1)'), 0x26eff5, segv.regs['ebx'])
562
596
                self.assertEqual(segv.calculate_arg('(%eax,%ebx,1)'), 0x26eff3, segv.regs['ebx'])
563
597
 
 
598
                # Again, but 64bit
 
599
                disasm = '''0x08083540 <main+0>:    mov    $1,%rcx'''
 
600
                segv = ParseSegv(regs64, disasm, maps)
 
601
                understood, reason, details = segv.report()
 
602
                self.assertFalse(understood, details)
 
603
 
 
604
                self.assertEqual(segv.calculate_arg('(%rax,%rbx,1)'), 0x26eff3, segv.regs['rbx'])
 
605
 
564
606
            def test_segv_pc_missing(self):
565
607
                '''Handles PC in missing VMA'''
566
608