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