| ... | @@ -1255,31 +1255,25 @@ pub const DebugInfo = struct { | ... | @@ -1255,31 +1255,25 @@ pub const DebugInfo = struct { |
| 1255 | const seg_end = seg_start + info.SizeOfImage; | 1255 | const seg_end = seg_start + info.SizeOfImage; |
| 1256 | | 1256 | |
| 1257 | if (address >= seg_start and address < seg_end) { | 1257 | if (address >= seg_start and address < seg_end) { |
| 1258 | var name_buffer: [windows.PATH_MAX_WIDE]u16 = [_]u16{0} ** windows.PATH_MAX_WIDE; | 1258 | var name_buffer: [windows.MAX_PATH]u8 = undefined; |
| 1259 | // XXX Use W variant | 1259 | // XXX: Use W variant (#534) |
| 1260 | const len = windows.kernel32.K32GetModuleFileNameExW( | 1260 | const len = windows.kernel32.K32GetModuleFileNameExA( |
| 1261 | process_handle, | 1261 | process_handle, |
| 1262 | module, | 1262 | module, |
| 1263 | @ptrCast(windows.LPWSTR, &name_buffer), | 1263 | @ptrCast(windows.LPSTR, &name_buffer), |
| 1264 | @sizeOf(@TypeOf(name_buffer)) / @sizeOf(u16), | 1264 | @sizeOf(@TypeOf(name_buffer)) / @sizeOf(u8), |
| 1265 | ); | 1265 | ); |
| 1266 | assert(len > 0); | 1266 | assert(len > 0); |
| 1267 | const name_slice = mem.toSlice(u16, name_buffer[0..:0]); | | |
| 1268 | warn("slice len {}\n", .{name_slice.len}); | | |
| 1269 | | | |
| 1270 | const x = try std.unicode.utf16leToUtf8Alloc(self.allocator, name_buffer[0..]); | | |
| 1271 | warn("ask for {s} len {}\n", .{ x, name_slice.len }); | | |
| 1272 | self.allocator.free(x); | | |
| 1273 | | 1267 | |
| 1274 | if (self.address_map.getValue(seg_start)) |obj_di| { | 1268 | if (self.address_map.getValue(seg_start)) |obj_di| { |
| 1275 | warn("cache hit!\n", .{}); | | |
| 1276 | return obj_di; | 1269 | return obj_di; |
| 1277 | } | 1270 | } |
| 1278 | | 1271 | |
| 1279 | warn("loading?\n", .{}); | 1272 | // XXX: The compiler segfaults if the slicing is done as a |
| 1280 | const file_obj = try fs.openFileAbsoluteW(name_slice, .{}); | 1273 | // parameter |
| | 1274 | const tmp = name_buffer[0..:0]; |
| | 1275 | const file_obj = try fs.cwd().openFileC(tmp, .{}); |
| 1281 | errdefer file_obj.close(); | 1276 | errdefer file_obj.close(); |
| 1282 | warn("loaded!\n", .{}); | | |
| 1283 | | 1277 | |
| 1284 | const obj_di = try self.allocator.create(ObjectDebugInfo); | 1278 | const obj_di = try self.allocator.create(ObjectDebugInfo); |
| 1285 | errdefer self.allocator.destroy(obj_di); | 1279 | errdefer self.allocator.destroy(obj_di); |