|
11 | 11 | FileHeader32, FileHeader64, ET_DYN, ET_EXEC, STB_GLOBAL, STB_WEAK, STV_DEFAULT,
|
12 | 12 | STV_HIDDEN,
|
13 | 13 | },
|
14 |
| - macho::{MachHeader32, MachHeader64}, |
| 14 | + macho::{MachHeader32, MachHeader64, MH_OBJECT, MH_TWOLEVEL}, |
15 | 15 | read::{
|
16 | 16 | elf::{Dyn, FileHeader, SectionHeader, Sym},
|
17 | 17 | macho::{LoadCommandVariant, MachHeader, Nlist},
|
@@ -848,6 +848,13 @@ fn validate_macho<Mach: MachHeader<Endian = Endianness>>(
|
848 | 848 | ));
|
849 | 849 | }
|
850 | 850 |
|
| 851 | + if header.filetype(endian) != MH_OBJECT && header.flags(endian) & MH_TWOLEVEL == 0 { |
| 852 | + context.errors.push(format!( |
| 853 | + "{} does not use two-level symbol lookup", |
| 854 | + path.display() |
| 855 | + )); |
| 856 | + } |
| 857 | + |
851 | 858 | let mut load_commands = header.load_commands(endian, bytes, 0)?;
|
852 | 859 |
|
853 | 860 | let mut dylib_names = vec![];
|
@@ -909,7 +916,7 @@ fn validate_macho<Mach: MachHeader<Endian = Endianness>>(
|
909 | 916 |
|
910 | 917 | // Don't perform undefined symbol analysis for object files because the object file
|
911 | 918 | // in isolation lacks context.
|
912 |
| - if header.filetype(endian) != object::macho::MH_OBJECT { |
| 919 | + if header.filetype(endian) != MH_OBJECT { |
913 | 920 | for symbol in undefined_symbols {
|
914 | 921 | // Assume undefined symbols provided by current library will resolve.
|
915 | 922 | if symbol.library_ordinal == object::macho::SELF_LIBRARY_ORDINAL {
|
|
0 commit comments