Name CODE resources, it's just cooler

This commit is contained in:
Wolfgang Thaller 2017-09-27 06:44:00 +02:00
parent 68c43b7a39
commit c757fb9520
3 changed files with 33 additions and 7 deletions

View File

@ -60,6 +60,8 @@ size_t mainStringTableIdx = (size_t)-1;
class Symtab; class Symtab;
class Section; class Section;
SegmentMap segmentMap;
Elf *elf; Elf *elf;
std::vector<int> relocs; std::vector<int> relocs;
unique_ptr<Symtab> symtab; unique_ptr<Symtab> symtab;
@ -747,8 +749,12 @@ void MultiSegmentApp(string output)
std::cout << "... empty. Skipping.\n"; std::cout << "... empty. Skipping.\n";
continue; continue;
} }
string segmentName = segmentMap.GetSegmentName(id);
rsrc.addResource(Resource(ResType("CODE"), id, rsrc.addResource(Resource(ResType("CODE"), id,
code.str())); code.str(),
segmentName));
rsrc.addResource(Resource(ResType("RELA"),id, sec->GetAbsRelocations(true))); rsrc.addResource(Resource(ResType("RELA"),id, sec->GetAbsRelocations(true)));
@ -874,12 +880,11 @@ int main(int argc, char *argv[])
ofstream out(tmpfile); ofstream out(tmpfile);
if(segments) if(segments)
{ {
SegmentMap map; segmentMap.CreateLdScript(out);
map.CreateLdScript(out); segmentMap.CreateLdScript(std::cout);
map.CreateLdScript(std::cout);
ofstream f("/tmp/foo.ld"); ofstream f("/tmp/foo.ld");
map.CreateLdScript(f); segmentMap.CreateLdScript(f);
} }
else else
{ {

View File

@ -18,6 +18,16 @@ SegmentMap::SegmentMap()
"*/libgcc.a:*", "*/libgcc.a:*",
"*/libc.a:*" "*/libc.a:*"
); );
segments.emplace_back(5, "libstdc++ locale",
"*/libstdc++.a:locale.o",
"*/libstdc++.a:locale_faces.o",
"*/libstdc++.a:locale_init.o");
segments.emplace_back(7, "libstdc++ locale-inst",
"*/libstdc++.a:locale-inst.o");
segments.emplace_back(8, "libstdc++ wlocale-inst",
"*/libstdc++.a:wlocale-inst.o");
segments.emplace_back(6, "libstdc++ cp-demangle",
"*/libstdc++.a:cp-demangle.o");
segments.emplace_back(3, "libstdc++", segments.emplace_back(3, "libstdc++",
"*/libstdc++.a:*"); "*/libstdc++.a:*");
segments.emplace_back(4, "RetroConsole", segments.emplace_back(4, "RetroConsole",
@ -26,3 +36,13 @@ SegmentMap::SegmentMap()
segments.emplace_back(2, "Main", segments.emplace_back(2, "Main",
"*"); "*");
} }
std::string SegmentMap::GetSegmentName(int id)
{
for(auto& seg : segments)
{
if(seg.id == id)
return seg.name;
}
return "";
}

View File

@ -8,13 +8,13 @@ class SegmentInfo
{ {
public: public:
int id; int id;
//std::string name; std::string name;
std::vector<std::string> filters; std::vector<std::string> filters;
SegmentInfo(); SegmentInfo();
template<typename... Args> template<typename... Args>
SegmentInfo(int id, std::string name, Args... args) SegmentInfo(int id, std::string name, Args... args)
: id(id), filters { args... } : id(id), name(name), filters { args... }
{ {
} }
@ -30,6 +30,7 @@ public:
SegmentMap(); SegmentMap();
void CreateLdScript(std::ostream& out); void CreateLdScript(std::ostream& out);
std::string GetSegmentName(int id);
}; };
#endif // SEGMENTMAP_H #endif // SEGMENTMAP_H