Pull in r372513 from upstream lld trunk (by Simon Atanasyan):
[mips] Deduce MIPS specific ELF header flags from `emulation` In case of linking binary blobs which do not have any ELF headers, we can deduce MIPS ABI ELF header flags from an `emulation` option. Patch by Kyle Evans. Requested by: kevans :)
This commit is contained in:
parent
f05b9584fa
commit
6d3bb28257
@ -294,12 +294,30 @@ static uint32_t getArchFlags(ArrayRef<FileFlags> files) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// If we don't have any input files, we'll have to rely on the information we
|
||||
// can derive from emulation information, since this at least gets us ABI.
|
||||
static uint32_t getFlagsFromEmulation() {
|
||||
uint32_t ret = 0;
|
||||
|
||||
if (config->emulation.empty())
|
||||
return 0;
|
||||
|
||||
if (config->ekind == ELF32BEKind || config->ekind == ELF32LEKind) {
|
||||
if (config->mipsN32Abi)
|
||||
ret |= EF_MIPS_ABI2;
|
||||
else
|
||||
ret |= EF_MIPS_ABI_O32;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <class ELFT> uint32_t elf::calcMipsEFlags() {
|
||||
std::vector<FileFlags> v;
|
||||
for (InputFile *f : objectFiles)
|
||||
v.push_back({f, cast<ObjFile<ELFT>>(f)->getObj().getHeader()->e_flags});
|
||||
if (v.empty())
|
||||
return 0;
|
||||
return getFlagsFromEmulation();
|
||||
checkFlags(v);
|
||||
return getMiscFlags(v) | getPicFlags(v) | getArchFlags(v);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user