mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
ELF symbol table field st_other support,
excluding visibility bits. Generic STO handling at the Target level. The st_other field of the ELF symbol table is one byte in size. The first 2 bytes are used for generic visibility and are currently handled by llvm. The other six bits are processor specific and need to be set at the target level. A couple of notes: The new static methods for accessing and setting the "other" flags in include/llvm/MC/MCELF.h match the style guide and not the other methods in the file. I don't like the inconsistency, but feel I should follow the prescribed lowerUpper() convention. STO_ value definitions are not specified in gnu land as consistently as the STT_ and STB_ fields. Probably because the latter were defined in a standards doc and the former defined partially in code. I have stuck with the full byte definition of the flags. Contributer: Zoran Jovanovic git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175561 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -546,12 +546,17 @@ void ELFObjectWriter::WriteSymbol(MCDataFragment *SymtabF,
|
||||
bool IsReserved = Data.isCommon() || Data.getSymbol().isAbsolute() ||
|
||||
Data.getSymbol().isVariable();
|
||||
|
||||
// Binding and Type share the same byte as upper and lower nibbles
|
||||
uint8_t Binding = MCELF::GetBinding(OrigData);
|
||||
uint8_t Visibility = MCELF::GetVisibility(OrigData);
|
||||
uint8_t Type = MCELF::GetType(Data);
|
||||
|
||||
uint8_t Info = (Binding << ELF_STB_Shift) | (Type << ELF_STT_Shift);
|
||||
uint8_t Other = Visibility;
|
||||
|
||||
// Other and Visibility share the same byte with Visability using the lower
|
||||
// 2 bits
|
||||
uint8_t Visibility = MCELF::GetVisibility(OrigData);
|
||||
uint8_t Other = MCELF::getOther(OrigData) <<
|
||||
(ELF_Other_Shift - ELF_STV_Shift);
|
||||
Other |= Visibility;
|
||||
|
||||
uint64_t Value = SymbolValue(Data, Layout);
|
||||
uint64_t Size = 0;
|
||||
|
Reference in New Issue
Block a user