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:
parent
baec02dc03
commit
dbf3594146
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user