diff --git a/Elf2Mac/Elf2Mac.cc b/Elf2Mac/Elf2Mac.cc index 3a2760f020..8f16b66798 100644 --- a/Elf2Mac/Elf2Mac.cc +++ b/Elf2Mac/Elf2Mac.cc @@ -60,6 +60,8 @@ size_t mainStringTableIdx = (size_t)-1; class Symtab; class Section; +SegmentMap segmentMap; + Elf *elf; std::vector relocs; unique_ptr symtab; @@ -747,8 +749,12 @@ void MultiSegmentApp(string output) std::cout << "... empty. Skipping.\n"; continue; } + + string segmentName = segmentMap.GetSegmentName(id); + rsrc.addResource(Resource(ResType("CODE"), id, - code.str())); + code.str(), + segmentName)); rsrc.addResource(Resource(ResType("RELA"),id, sec->GetAbsRelocations(true))); @@ -874,12 +880,11 @@ int main(int argc, char *argv[]) ofstream out(tmpfile); if(segments) { - SegmentMap map; - map.CreateLdScript(out); - map.CreateLdScript(std::cout); + segmentMap.CreateLdScript(out); + segmentMap.CreateLdScript(std::cout); ofstream f("/tmp/foo.ld"); - map.CreateLdScript(f); + segmentMap.CreateLdScript(f); } else { diff --git a/Elf2Mac/SegmentMap.cc b/Elf2Mac/SegmentMap.cc index 037a77ee2e..8abc28b322 100644 --- a/Elf2Mac/SegmentMap.cc +++ b/Elf2Mac/SegmentMap.cc @@ -18,6 +18,16 @@ SegmentMap::SegmentMap() "*/libgcc.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++", "*/libstdc++.a:*"); segments.emplace_back(4, "RetroConsole", @@ -26,3 +36,13 @@ SegmentMap::SegmentMap() segments.emplace_back(2, "Main", "*"); } + +std::string SegmentMap::GetSegmentName(int id) +{ + for(auto& seg : segments) + { + if(seg.id == id) + return seg.name; + } + return ""; +} diff --git a/Elf2Mac/SegmentMap.h b/Elf2Mac/SegmentMap.h index 3718175bb9..4146594ca6 100644 --- a/Elf2Mac/SegmentMap.h +++ b/Elf2Mac/SegmentMap.h @@ -8,13 +8,13 @@ class SegmentInfo { public: int id; - //std::string name; + std::string name; std::vector filters; SegmentInfo(); template SegmentInfo(int id, std::string name, Args... args) - : id(id), filters { args... } + : id(id), name(name), filters { args... } { } @@ -30,6 +30,7 @@ public: SegmentMap(); void CreateLdScript(std::ostream& out); + std::string GetSegmentName(int id); }; #endif // SEGMENTMAP_H