1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-20 09:27:45 +03:00

[Mach-O] wip

This commit is contained in:
Rui Ueyama 2021-10-21 21:06:54 +09:00
parent baec02dc03
commit dbf3594146
3 changed files with 10 additions and 9 deletions

View File

@ -140,10 +140,10 @@ int main(int argc, char **argv) {
if (argc > 1 && std::string_view(argv[1]) == "-yamltest") {
std::string path = "/Applications/Xcode.app/Contents/Developer/Platforms/"
"MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd";
std::vector<TextBasedDylib> tbds =
std::vector<TextDylib> tbds =
parse_tbd(ctx, MappedFile<Context>::must_open(ctx, path));
for (TextBasedDylib &tbd : tbds) {
for (TextDylib &tbd : tbds) {
SyncOut(ctx) << "tbd: uuid=" << tbd.uuid
<< " install_name=" << tbd.install_name
<< " current_version=" << tbd.current_version

View File

@ -454,7 +454,7 @@ parse_yaml(std::string_view str);
// tapi.cc
//
struct TextBasedDylib {
struct TextDylib {
std::string_view uuid;
std::string_view install_name;
std::string_view current_version = "1.0";
@ -463,7 +463,7 @@ struct TextBasedDylib {
std::vector<std::string_view> exports;
};
std::vector<TextBasedDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf);
std::vector<TextDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf);
//
// cmdline.cc
@ -501,6 +501,7 @@ struct Context {
bool has_error = false;
tbb::concurrent_hash_map<std::string_view, Symbol> symbol_map;
std::unordered_map<std::string_view, TextDylib> tbd_map;
std::unique_ptr<OutputFile<Context>> output_file;
u8 *buf;

View File

@ -36,12 +36,12 @@ static bool contains(const Vector &vec, std::string_view key) {
return false;
}
static std::optional<TextBasedDylib> to_tbd(const YamlNode &node) {
static std::optional<TextDylib> to_tbd(const YamlNode &node) {
const Vector *targets = lookup<Vector>(node, "targets");
if (!targets || !contains(*targets, "x86_64-macos"))
return {};
TextBasedDylib tbd;
TextDylib tbd;
if (auto *vec = lookup<Vector>(node, "uuids"))
for (const YamlNode &mem : *vec)
@ -84,7 +84,7 @@ static std::optional<TextBasedDylib> to_tbd(const YamlNode &node) {
return tbd;
}
std::vector<TextBasedDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf) {
std::vector<TextDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf) {
std::string_view contents = mf->get_contents();
std::variant<Vector, YamlError> res = parse_yaml(contents);
@ -96,11 +96,11 @@ std::vector<TextBasedDylib> parse_tbd(Context &ctx, MappedFile<Context> *mf) {
}
Vector &nodes = std::get<Vector>(res);
std::vector<TextBasedDylib> vec;
std::vector<TextDylib> vec;
vec.reserve(nodes.size());
for (YamlNode &node : nodes)
if (std::optional<TextBasedDylib> dylib = to_tbd(node))
if (std::optional<TextDylib> dylib = to_tbd(node))
vec.push_back(*dylib);
return vec;
}