summaryrefslogtreecommitdiff
path: root/hurd/running/debian/porting/gcc/libmudflap.mdwn
blob: 87d2061ffec8d5871eb2885011df905441e0fef0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[[!meta copyright="Copyright © 2008 Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU_Free_Documentation_License|/fdl]]."]]"""]]

Single-threaded use appears to work:

    $ echo 'int main(void) { int *a; a[10]=0; return a[5]; }' | ↩
      gcc -o a -fmudflap -x c - -lmudflap
    $ ./a
    *******
    mudflap violation 1 (check/write): time=1227208721.922064 ptr=0x1023de0 size=4
    pc=0x1037a33 location=`<stdin>:1:26 (main)'
          /usr/lib/libmudflap.so.0(__mf_check+0x33) [0x1037a33]
          ./a(main+0x7c) [0x80486c4]
          /usr/lib/libmudflap.so.0(__wrap_main+0x49) [0x1037239]
    Nearby object 1: checked region begins 68B before and ends 65B before
    mudflap object 0x80ca268: name=`argv[]'
    bounds=[0x1023e24,0x1023e2b] size=8 area=static check=0r/0w liveness=0
    alloc time=1227208721.922064 pc=0x10371d3
    Nearby object 2: checked region begins 76B before and ends 73B before
    mudflap object 0x80cb448: name=`environ[]'
    bounds=[0x1023e2c,0x1023ed7] size=172 area=static check=0r/0w liveness=0
    alloc time=1227208721.922064 pc=0x10371d3
    number of nearby objects: 2
    *******
    mudflap violation 2 (check/read): time=1227208721.942109 ptr=0x1023dcc size=4
    pc=0x1037a33 location=`<stdin>:1:35 (main)'
          /usr/lib/libmudflap.so.0(__mf_check+0x33) [0x1037a33]
          ./a(main+0xf3) [0x804873b]
          /usr/lib/libmudflap.so.0(__wrap_main+0x49) [0x1037239]
    Nearby object 1: checked region begins 88B before and ends 85B before
    mudflap object 0x80ca268: name=`argv[]'
    Nearby object 2: checked region begins 96B before and ends 93B before
    mudflap object 0x80cb448: name=`environ[]'
    number of nearby objects: 2

Multi-threaded use doesn't:

    $ echo 'int main(void) { int *a; a[10]=0; return a[5]; }' | ↩
      gcc -include pthread.h -o a -fmudflapth -x c - -lmudflapth -lpthread
    $ ./a 
    Killed
    $ gdb a
    [...]
    Starting program: /media/data/home/tschwinge/a 
    
    Program received signal EXC_BAD_ACCESS, Could not access memory.
    0x01180653 in getenv () from /lib/libc.so.0.3
    (gdb) bt
    #0  0x01180653 in getenv () from /lib/libc.so.0.3
    #1  0x01177a02 in __dcigettext () from /lib/libc.so.0.3
    #2  0x01176a57 in dcgettext () from /lib/libc.so.0.3
    #3  0x011c03b5 in strerror_r () from /lib/libc.so.0.3
    #4  0x01175b57 in __assert_perror_fail () from /lib/libc.so.0.3
    #5  0x0111f1ad in cthread_fork (func=0x114f630 <_hurd_msgport_receive>, arg=0x0)
        at /build/buildd/hurd-20080607/build-tree/hurd/libpthread/pthread/cthreads-compat.c:41
    #6  0x0115713e in _hurdsig_init () from /lib/libc.so.0.3
    #7  0x01140852 in _hurd_proc_init@@GLIBC_2.2.6 () from /lib/libc.so.0.3
    #8  0x01140e86 in _hurd_init () from /lib/libc.so.0.3
    #9  0x011690ce in init1 () from /lib/libc.so.0.3
    #10 0x00001e96 in _dl_start_user () from /lib/ld.so
    #11 0x00000001 in ?? ()
    #12 0x01024000 in ?? ()
    #13 0x00000000 in ?? ()

Also `libmudflap` is pthread-only.