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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/projects/clang900-import/; revision=352600
@ -294,12 +294,30 @@ static uint32_t getArchFlags(ArrayRef<FileFlags> files) {
|
|||||||
return ret;
|
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() {
|
template <class ELFT> uint32_t elf::calcMipsEFlags() {
|
||||||
std::vector<FileFlags> v;
|
std::vector<FileFlags> v;
|
||||||
for (InputFile *f : objectFiles)
|
for (InputFile *f : objectFiles)
|
||||||
v.push_back({f, cast<ObjFile<ELFT>>(f)->getObj().getHeader()->e_flags});
|
v.push_back({f, cast<ObjFile<ELFT>>(f)->getObj().getHeader()->e_flags});
|
||||||
if (v.empty())
|
if (v.empty())
|
||||||
return 0;
|
return getFlagsFromEmulation();
|
||||||
checkFlags(v);
|
checkFlags(v);
|
||||||
return getMiscFlags(v) | getPicFlags(v) | getArchFlags(v);
|
return getMiscFlags(v) | getPicFlags(v) | getArchFlags(v);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user