diff options
| author | Jack Nagel | 2014-10-11 01:45:41 -0500 |
|---|---|---|
| committer | Jack Nagel | 2014-10-11 01:45:41 -0500 |
| commit | e2b7c4c638cb05dbb64b9532c778455b9e97f62e (patch) | |
| tree | f56012ceebf6c99a96f2dccbce346150533a1d8e /Library | |
| parent | 6684269479a045c5cba2b1c544100a9193dcbbbb (diff) | |
| download | homebrew-e2b7c4c638cb05dbb64b9532c778455b9e97f62e.tar.bz2 | |
Revert "Don't raise in mach_data so the debugger doesn't catch it"
This reverts commit 4f8a3e2113c2e7b88600ff6371f9f70579c55509.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/mach.rb | 85 |
1 files changed, 42 insertions, 43 deletions
diff --git a/Library/Homebrew/mach.rb b/Library/Homebrew/mach.rb index de38d296b..8da667acd 100644 --- a/Library/Homebrew/mach.rb +++ b/Library/Homebrew/mach.rb @@ -53,52 +53,51 @@ module MachO # /usr/include/mach-o/fat.h def mach_data - @mach_data ||= _mach_data - end - - def _mach_data - offsets = [] - mach_data = [] - - header = read(8).unpack("N2") - case header[0] - when 0xcafebabe # universal - header[1].times do |i| - # header[1] is the number of struct fat_arch in the file. - # Each struct fat_arch is 20 bytes, and the 'offset' member - # begins 8 bytes into the struct, with an additional 8 byte - # offset due to the struct fat_header at the beginning of - # the file. - offsets << read(4, 20*i + 16).unpack("N")[0] + @mach_data ||= begin + offsets = [] + mach_data = [] + + header = read(8).unpack("N2") + case header[0] + when 0xcafebabe # universal + header[1].times do |i| + # header[1] is the number of struct fat_arch in the file. + # Each struct fat_arch is 20 bytes, and the 'offset' member + # begins 8 bytes into the struct, with an additional 8 byte + # offset due to the struct fat_header at the beginning of + # the file. + offsets << read(4, 20*i + 16).unpack("N")[0] + end + when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch + offsets << 0 + when 0x7f454c46 # ELF + mach_data << { :arch => :x86_64, :type => :executable } + else + raise "Not a Mach-O binary." end - when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch - offsets << 0 - when 0x7f454c46 # ELF - mach_data << { :arch => :x86_64, :type => :executable } - else - return [] - end - offsets.each do |offset| - arch = case read(8, offset).unpack("N2") - when [0xcefaedfe, 0x07000000] then :i386 - when [0xcffaedfe, 0x07000001] then :x86_64 - when [0xfeedface, 0x00000012] then :ppc7400 - when [0xfeedfacf, 0x01000012] then :ppc64 - else :dunno - end - - type = case read(4, offset + 12).unpack("N")[0] - when 0x00000002, 0x02000000 then :executable - when 0x00000006, 0x06000000 then :dylib - when 0x00000008, 0x08000000 then :bundle - else :dunno - end - - mach_data << { :arch => arch, :type => type } + offsets.each do |offset| + arch = case read(8, offset).unpack("N2") + when [0xcefaedfe, 0x07000000] then :i386 + when [0xcffaedfe, 0x07000001] then :x86_64 + when [0xfeedface, 0x00000012] then :ppc7400 + when [0xfeedfacf, 0x01000012] then :ppc64 + else :dunno + end + + type = case read(4, offset + 12).unpack("N")[0] + when 0x00000002, 0x02000000 then :executable + when 0x00000006, 0x06000000 then :dylib + when 0x00000008, 0x08000000 then :bundle + else :dunno + end + + mach_data << { :arch => arch, :type => type } + end + mach_data + rescue + [] end - - mach_data end def archs |
