| ... | @@ -481,13 +481,30 @@ pub const NativeTargetInfo = struct { | ... | @@ -481,13 +481,30 @@ pub const NativeTargetInfo = struct { |
| 481 | }; | 481 | }; |
| 482 | } | 482 | } |
| 483 | | 483 | |
| | 484 | pub const AbiAndDynamicLinkerFromFileError = error{ |
| | 485 | FileSystem, |
| | 486 | SystemResources, |
| | 487 | SymLinkLoop, |
| | 488 | ProcessFdQuotaExceeded, |
| | 489 | SystemFdQuotaExceeded, |
| | 490 | UnableToReadElfFile, |
| | 491 | InvalidElfClass, |
| | 492 | InvalidElfVersion, |
| | 493 | InvalidElfEndian, |
| | 494 | InvalidElfFile, |
| | 495 | InvalidElfMagic, |
| | 496 | Unexpected, |
| | 497 | UnexpectedEndOfFile, |
| | 498 | NameTooLong, |
| | 499 | }; |
| | 500 | |
| 484 | pub fn abiAndDynamicLinkerFromFile( | 501 | pub fn abiAndDynamicLinkerFromFile( |
| 485 | file: fs.File, | 502 | file: fs.File, |
| 486 | cpu: Target.Cpu, | 503 | cpu: Target.Cpu, |
| 487 | os: Target.Os, | 504 | os: Target.Os, |
| 488 | ld_info_list: []const LdInfo, | 505 | ld_info_list: []const LdInfo, |
| 489 | cross_target: CrossTarget, | 506 | cross_target: CrossTarget, |
| 490 | ) !NativeTargetInfo { | 507 | ) AbiAndDynamicLinkerFromFileError!NativeTargetInfo { |
| 491 | var hdr_buf: [@sizeOf(elf.Elf64_Ehdr)]u8 align(@alignOf(elf.Elf64_Ehdr)) = undefined; | 508 | var hdr_buf: [@sizeOf(elf.Elf64_Ehdr)]u8 align(@alignOf(elf.Elf64_Ehdr)) = undefined; |
| 492 | _ = try preadFull(file, &hdr_buf, 0, hdr_buf.len); | 509 | _ = try preadFull(file, &hdr_buf, 0, hdr_buf.len); |
| 493 | const hdr32 = @ptrCast(*elf.Elf32_Ehdr, &hdr_buf); | 510 | const hdr32 = @ptrCast(*elf.Elf32_Ehdr, &hdr_buf); |