MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / get_symbol

Method get_symbol

cranelift/object/src/backend.rs:760–850  ·  view source on GitHub ↗

This should only be called during finish because it creates symbols for missing libcalls.

(&mut self, name: &ModuleRelocTarget)

Source from the content-addressed store, hash-verified

758 /// This should only be called during finish because it creates
759 /// symbols for missing libcalls.
760 fn get_symbol(&mut self, name: &ModuleRelocTarget) -> SymbolId {
761 match *name {
762 ModuleRelocTarget::User { .. } => {
763 if ModuleDeclarations::is_function(name) {
764 let id = FuncId::from_name(name);
765 self.functions[id].unwrap().0
766 } else {
767 let id = DataId::from_name(name);
768 self.data_objects[id].unwrap().0
769 }
770 }
771 ModuleRelocTarget::LibCall(ref libcall) => {
772 let name = (self.libcall_names)(*libcall);
773 if let Some(symbol) = self.object.symbol_id(name.as_bytes()) {
774 symbol
775 } else if let Some(symbol) = self.libcalls.get(libcall) {
776 *symbol
777 } else {
778 let symbol = self.object.add_symbol(Symbol {
779 name: name.as_bytes().to_vec(),
780 value: 0,
781 size: 0,
782 kind: SymbolKind::Text,
783 scope: SymbolScope::Unknown,
784 weak: false,
785 section: SymbolSection::Undefined,
786 flags: SymbolFlags::None,
787 });
788 self.libcalls.insert(*libcall, symbol);
789 symbol
790 }
791 }
792 // These are "magic" names well-known to the linker.
793 // They require special treatment.
794 ModuleRelocTarget::KnownSymbol(ref known_symbol) => {
795 if let Some(symbol) = self.known_symbols.get(known_symbol) {
796 *symbol
797 } else {
798 let symbol = self.object.add_symbol(match known_symbol {
799 ir::KnownSymbol::ElfGlobalOffsetTable => Symbol {
800 name: b"_GLOBAL_OFFSET_TABLE_".to_vec(),
801 value: 0,
802 size: 0,
803 kind: SymbolKind::Data,
804 scope: SymbolScope::Unknown,
805 weak: false,
806 section: SymbolSection::Undefined,
807 flags: SymbolFlags::None,
808 },
809 ir::KnownSymbol::CoffTlsIndex => Symbol {
810 name: b"_tls_index".to_vec(),
811 value: 0,
812 size: 32,
813 kind: SymbolKind::Tls,
814 scope: SymbolScope::Unknown,
815 weak: false,
816 section: SymbolSection::Undefined,
817 flags: SymbolFlags::None,

Callers 1

finishMethod · 0.80

Calls 9

symbol_idMethod · 0.80
as_bytesMethod · 0.80
symbolMethod · 0.80
unwrapMethod · 0.45
getMethod · 0.45
to_vecMethod · 0.45
insertMethod · 0.45
entryMethod · 0.45
idMethod · 0.45

Tested by

no test coverage detected