int getGlobalVariableOffset() { int* symbolTableCursor; symbolTableCursor = getSymbolTableEntry(); if (symbolTableCursor != 0) { symbolTableCursor = symbolTableCursor + 2; return *symbolTableCursor; } else // variable not found but who cares, // just create entry in symbol table, // allocate space for global variable, // and return its offset return createSymbolTableEntry(allocateGlobalVariable()); }
char MachOObjectFile::getSymbolNMTypeChar(DataRefImpl DRI) const { InMemoryStruct<macho::SymbolTableEntry> Entry; getSymbolTableEntry(DRI, Entry); char Char; switch (Entry->Type & macho::STF_TypeMask) { case macho::STT_Undefined: Char = 'u'; break; case macho::STT_Absolute: case macho::STT_Section: Char = 's'; break; default: Char = '?'; break; } if (Entry->Flags & (macho::STF_External | macho::STF_PrivateExtern)) Char = toupper(Char); return Char; }
int setProcedureAddress() { int* symbolTableCursor; int savedAddress; symbolTableCursor = getSymbolTableEntry(); if (symbolTableCursor != 0) { symbolTableCursor = symbolTableCursor + 2; savedAddress = *symbolTableCursor; if (getOpcodeFromCode(savedAddress) == BSR) // save address of next instruction which may point to // the new head of an existing fixup chain // or the beginning of a procedure body *symbolTableCursor = codeLength; return savedAddress; } else // procedure not found but who cares, // just create entry in symbol table, // and save address of next instruction return createSymbolTableEntry(codeLength); }
bool MachOObjectFile::isSymbolInternal(DataRefImpl DRI) const { InMemoryStruct<macho::SymbolTableEntry> Entry; getSymbolTableEntry(DRI, Entry); return Entry->Flags & macho::STF_StabsEntryMask; }
uint64_t MachOObjectFile::getSymbolAddress(DataRefImpl DRI) const { InMemoryStruct<macho::SymbolTableEntry> Entry; getSymbolTableEntry(DRI, Entry); return Entry->Value; }
StringRef MachOObjectFile::getSymbolName(DataRefImpl DRI) const { InMemoryStruct<macho::SymbolTableEntry> Entry; getSymbolTableEntry(DRI, Entry); return MachOObj->getStringAtIndex(Entry->StringIndex); }