mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 00:11:00 +00:00
Object: BSS/virtual sections don't have contents
Users of getSectionContents shouldn't try to pass in BSS or virtual sections. In all instances, this is a bug in the code calling this routine. N.B. Some COFF implementations (like CL) will mark their BSS sections as taking space on disk. This would confuse COFFObjectFile into thinking the section is larger than the file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218549 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a51dbbd394
commit
01ea611601
@ -565,6 +565,15 @@ DWARFContextInMemory::DWARFContextInMemory(object::ObjectFile &Obj)
|
||||
for (const SectionRef &Section : Obj.sections()) {
|
||||
StringRef name;
|
||||
Section.getName(name);
|
||||
// Skip BSS and Virtual sections, they aren't interesting.
|
||||
bool IsBSS;
|
||||
Section.isBSS(IsBSS);
|
||||
if (IsBSS)
|
||||
continue;
|
||||
bool IsVirtual;
|
||||
Section.isVirtual(IsVirtual);
|
||||
if (IsVirtual)
|
||||
continue;
|
||||
StringRef data;
|
||||
Section.getContents(data);
|
||||
|
||||
|
@ -840,6 +840,10 @@ std::error_code COFFObjectFile::getSectionName(const coff_section *Sec,
|
||||
std::error_code
|
||||
COFFObjectFile::getSectionContents(const coff_section *Sec,
|
||||
ArrayRef<uint8_t> &Res) const {
|
||||
// PointerToRawData and SizeOfRawData won't make sense for BSS sections, don't
|
||||
// do anything interesting for them.
|
||||
assert((Sec->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) == 0 &&
|
||||
"BSS sections don't have contents!");
|
||||
// The only thing that we need to verify is that the contents is contained
|
||||
// within the file bounds. We don't need to make sure it doesn't cover other
|
||||
// data, as there's nothing that says that is not allowed.
|
||||
|
@ -19,4 +19,3 @@
|
||||
// CHECK-NEXT: Info: 0
|
||||
// CHECK-NEXT: AddressAlignment: 16
|
||||
// CHECK-NEXT: EntrySize: 0
|
||||
// CHECK-NEXT: SectionData (
|
||||
|
@ -635,7 +635,8 @@ void COFFDumper::printSections() {
|
||||
if (Name == ".debug$S" && opts::CodeViewLineTables)
|
||||
printCodeViewLineTables(Sec);
|
||||
|
||||
if (opts::SectionData) {
|
||||
if (opts::SectionData &&
|
||||
!(Section->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) {
|
||||
StringRef Data;
|
||||
if (error(Sec.getContents(Data)))
|
||||
break;
|
||||
|
@ -604,7 +604,7 @@ void ELFDumper<ELFT>::printSections() {
|
||||
}
|
||||
}
|
||||
|
||||
if (opts::SectionData) {
|
||||
if (opts::SectionData && Section->sh_type != ELF::SHT_NOBITS) {
|
||||
ArrayRef<uint8_t> Data = errorOrDefault(Obj->getSectionContents(Section));
|
||||
W.printBinaryBlock("SectionData",
|
||||
StringRef((const char *)Data.data(), Data.size()));
|
||||
|
@ -266,11 +266,16 @@ void MachODumper::printSections(const MachOObjectFile *Obj) {
|
||||
}
|
||||
|
||||
if (opts::SectionData) {
|
||||
StringRef Data;
|
||||
if (error(Section.getContents(Data)))
|
||||
bool IsBSS;
|
||||
if (error(Section.isBSS(IsBSS)))
|
||||
break;
|
||||
if (!IsBSS) {
|
||||
StringRef Data;
|
||||
if (error(Section.getContents(Data)))
|
||||
break;
|
||||
|
||||
W.printBinaryBlock("SectionData", Data);
|
||||
W.printBinaryBlock("SectionData", Data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user