aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/google-perftools.rb
blob: 0b782c1141ad9ede22c9184d9f5a699ebb0a88a0 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
require 'formula'

class GooglePerftools <Formula
  url 'http://google-perftools.googlecode.com/files/google-perftools-1.4.tar.gz'
  homepage 'http://code.google.com/p/google-perftools/'
  md5 'e9383c158dcb3f4a789564498ec3f046'

  def patches
    if Hardware.is_64_bit? and MACOS_VERSION == 10.6
      {"p0" => DATA}
    end
  end


  def install
    system "CFLAGS='-D_XOPEN_SOURCE' CXXFLAGS='-D_XOPEN_SOURCE' ./configure", "--prefix=#{prefix}", "--disable-debug", "--disable-dependency-tracking"
    system "make"
    system "make install"
  end
end

__END__
Index: src/pprof
===================================================================
--- src/pprof	(revision 76)
+++ src/pprof	(working copy)
@@ -3181,7 +3181,7 @@
       $sectname = $1;
     } elsif ($line =~ /segname (\w+)/) {
       $segname = $1;
-    } elsif (!($cmd eq "LC_SEGMENT" &&
+    } elsif (!(($cmd eq "LC_SEGMENT" || $cmd eq "LC_SEGMENT_64") &&
 	       $sectname eq "__text" &&
 	       $segname eq "__TEXT")) {
       next;
Index: src/base/sysinfo.cc
===================================================================
--- src/base/sysinfo.cc	(revision 76)
+++ src/base/sysinfo.cc	(working copy)
@@ -728,26 +728,59 @@
 
     // We start with the next load command (we've already looked at this one).
     for (current_load_cmd_--; current_load_cmd_ >= 0; current_load_cmd_--) {
-      const char* lc = ((const char *)hdr + sizeof(struct mach_header));
+      const char* lc;
+      uint32_t seg_marker;
+      #if defined(MH_MAGIC_64)
+      if (hdr->magic == MH_MAGIC_64) {
+        lc = ((const char *)hdr + sizeof(struct mach_header_64));
+        seg_marker = LC_SEGMENT_64;
+      } else {
+      #endif
+        lc  = ((const char *)hdr + sizeof(struct mach_header));
+        seg_marker = LC_SEGMENT;
+      #if defined(MH_MAGIC_64)
+      }
+      #endif
       // TODO(csilvers): make this not-quadradic (increment and hold state)
       for (int j = 0; j < current_load_cmd_; j++)  // advance to *our* load_cmd
         lc += ((const load_command *)lc)->cmdsize;
-      if (((const load_command *)lc)->cmd == LC_SEGMENT) {
+      if (((const load_command *)lc)->cmd == seg_marker) {
         const intptr_t dlloff = _dyld_get_image_vmaddr_slide(current_image_);
-        const segment_command* sc = (const segment_command *)lc;
-        if (start) *start = sc->vmaddr + dlloff;
-        if (end) *end = sc->vmaddr + sc->vmsize + dlloff;
-        if (flags) *flags = kDefaultPerms;  // can we do better?
-        if (offset) *offset = sc->fileoff;
-        if (inode) *inode = 0;
-        if (filename)
-          *filename = const_cast<char*>(_dyld_get_image_name(current_image_));
-        if (file_mapping) *file_mapping = 0;
-        if (file_pages) *file_pages = 0;   // could we use sc->filesize?
-        if (anon_mapping) *anon_mapping = 0;
-        if (anon_pages) *anon_pages = 0;
-        if (dev) *dev = 0;
-        return true;
+        #if defined(MH_MAGIC_64)
+        if (hdr->magic == MH_MAGIC_64) {
+          const segment_command_64* sc = (const segment_command_64 *)lc;
+          if (start) *start = sc->vmaddr + dlloff;
+          if (end) *end = sc->vmaddr + sc->vmsize + dlloff;
+          if (flags) *flags = kDefaultPerms;  // can we do better?
+          if (offset) *offset = sc->fileoff;
+          if (inode) *inode = 0;
+          if (filename)
+            *filename = const_cast<char*>(_dyld_get_image_name(current_image_));
+          if (file_mapping) *file_mapping = 0;
+          if (file_pages) *file_pages = 0;   // could we use sc->filesize?
+          if (anon_mapping) *anon_mapping = 0;
+          if (anon_pages) *anon_pages = 0;
+          if (dev) *dev = 0;
+          return true;
+        } else {
+        #endif
+          const segment_command* sc = (const segment_command *)lc;
+          if (start) *start = sc->vmaddr + dlloff;
+          if (end) *end = sc->vmaddr + sc->vmsize + dlloff;
+          if (flags) *flags = kDefaultPerms;  // can we do better?
+          if (offset) *offset = sc->fileoff;
+          if (inode) *inode = 0;
+          if (filename)
+            *filename = const_cast<char*>(_dyld_get_image_name(current_image_));
+          if (file_mapping) *file_mapping = 0;
+          if (file_pages) *file_pages = 0;   // could we use sc->filesize?
+          if (anon_mapping) *anon_mapping = 0;
+          if (anon_pages) *anon_pages = 0;
+          if (dev) *dev = 0;
+          return true;
+        #if defined(MH_MAGIC_64)
+        }
+        #endif
       }
     }
     // If we get here, no more load_cmd's in this image talk about