Don't raise in mach_data so the debugger doesn't catch it
Closes Homebrew/homebrew#33088.
This commit is contained in:
		
							parent
							
								
									8cc5aabfcf
								
							
						
					
					
						commit
						01397d17f7
					
				| @ -53,51 +53,52 @@ module MachO | ||||
|   # /usr/include/mach-o/fat.h | ||||
| 
 | ||||
|   def mach_data | ||||
|     @mach_data ||= begin | ||||
|       offsets = [] | ||||
|       mach_data = [] | ||||
|     @mach_data ||= _mach_data | ||||
|   end | ||||
| 
 | ||||
|       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." | ||||
|   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] | ||||
|       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 } | ||||
|       end | ||||
|       mach_data | ||||
|     rescue | ||||
|       [] | ||||
|     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 } | ||||
|     end | ||||
| 
 | ||||
|     mach_data | ||||
|   end | ||||
| 
 | ||||
|   def archs | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jack Nagel
						Jack Nagel