1
1
mirror of https://github.com/rui314/mold.git synced 2024-12-25 09:25:15 +03:00

temporary

This commit is contained in:
Rui Ueyama 2020-11-19 18:03:26 +09:00
parent 0c4c8a0a50
commit 6511d0965f
2 changed files with 58 additions and 2 deletions

24
main.cc
View File

@ -3,6 +3,7 @@
#include "llvm/BinaryFormat/Magic.h" #include "llvm/BinaryFormat/Magic.h"
#include "llvm/Option/ArgList.h" #include "llvm/Option/ArgList.h"
#include "llvm/Support/FileOutputBuffer.h" #include "llvm/Support/FileOutputBuffer.h"
#include "llvm/Support/FileSystem.h"
#include <fcntl.h> #include <fcntl.h>
#include <iostream> #include <iostream>
@ -14,6 +15,7 @@
using namespace llvm; using namespace llvm;
using namespace llvm::ELF; using namespace llvm::ELF;
using namespace llvm::sys;
using llvm::object::Archive; using llvm::object::Archive;
using llvm::opt::InputArgList; using llvm::opt::InputArgList;
@ -587,6 +589,17 @@ static int parse_filler(opt::InputArgList &args) {
return (u8)ret; return (u8)ret;
} }
static std::string find_library(StringRef name) {
for (StringRef dir : config.library_paths) {
if (std::string path = (dir + "/lib" + name + ".a").str(); fs::exists(path))
return path;
if (!config.is_static)
if (std::string path = (dir + "/lib" + name + ".so").str(); fs::exists(path))
return path;
}
error("library not found: " + name);
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
// Parse command line options // Parse command line options
MyOptTable opt_table; MyOptTable opt_table;
@ -613,9 +626,16 @@ int main(int argc, char **argv) {
// Open input files // Open input files
{ {
MyTimer t("open", parse_timer); MyTimer t("open", parse_timer);
for (auto *arg : args) for (auto *arg : args) {
if (arg->getOption().getID() == OPT_INPUT) switch (arg->getOption().getID()) {
case OPT_INPUT:
read_file(arg->getValue()); read_file(arg->getValue());
break;
case OPT_library:
read_file(find_library(arg->getValue()));
break;
}
}
} }
// Parse input files // Parse input files

View File

@ -0,0 +1,36 @@
// RUN: cc -o %t.o -c %s
// RUN: mold -static -o %t.exe \
// RUN: /usr/lib/x86_64-linux-gnu/crt1.o \
// RUN: /usr/lib/x86_64-linux-gnu/crti.o \
// RUN: /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o \
// RUN: -L/usr/lib/gcc/x86_64-linux-gnu/9 \
// RUN: -L/usr/lib/x86_64-linux-gnu \
// RUN: -L/usr/lib64 \
// RUN: -L/lib/x86_64-linux-gnu \
// RUN: -L/lib64 \
// RUN: -L/usr/lib/x86_64-linux-gnu \
// RUN: -L/usr/lib64 \
// RUN: -L/usr/lib64 \
// RUN: -L/usr/lib \
// RUN: -L/lib \
// RUN: -L/usr/lib \
// RUN: %t.o \
// RUN: -lgcc \
// RUN: -lgcc_eh \
// RUN: -lc \
// RUN: /usr/lib/gcc/x86_64-linux-gnu/9/crtend.o \
// RUN: /usr/lib/x86_64-linux-gnu/crtn.o
// RUN: %t.exe | grep 'Hello world'
.text
.globl main
main:
lea msg(%rip), %rdi
xor %rax, %rax
call printf
xor %rax, %rax
ret
.data
msg:
.string "Hello world\n"