diff --git a/src/filetype.h b/src/filetype.h index 6b0e40ab08..50b605da79 100644 --- a/src/filetype.h +++ b/src/filetype.h @@ -17,8 +17,7 @@ enum class FileType { LLVM_BITCODE, }; -template -bool is_text_file(MappedFile *mf) { +inline bool is_text_file(MappedFile *mf) { auto istext = [](char c) { return isprint(c) || c == '\n' || c == '\t'; }; @@ -28,8 +27,8 @@ bool is_text_file(MappedFile *mf) { istext(data[2]) && istext(data[3]); } -template -inline bool is_gcc_lto_obj(Context &ctx, MappedFile *mf) { +template +inline bool is_gcc_lto_obj(MappedFile *mf, bool has_plugin) { const char *data = mf->get_contents().data(); ElfEhdr &ehdr = *(ElfEhdr *)data; ElfShdr *sh_begin = (ElfShdr *)(data + ehdr.e_shoff); @@ -46,7 +45,7 @@ inline bool is_gcc_lto_obj(Context &ctx, MappedFile *mf) { // the LTO linker plugin is available and falls back as regular // objects otherwise. GCC FAT LTO object can be identified by the // presence of `.gcc.lto_.symtab` section. - if (!ctx.arg.plugin.empty()) { + if (has_plugin) { std::string_view name = data + shdrs[shstrtab_idx].sh_offset + sec.sh_name; if (name.starts_with(".gnu.lto_.symtab.")) return true; @@ -81,9 +80,10 @@ inline bool is_gcc_lto_obj(Context &ctx, MappedFile *mf) { return false; } -template -FileType get_file_type(Context &ctx, MappedFile *mf) { +template +FileType get_file_type(Context &ctx, MappedFile *mf) { std::string_view data = mf->get_contents(); + bool has_plugin = !ctx.arg.plugin.empty(); if (data.empty()) return FileType::EMPTY; @@ -96,10 +96,10 @@ FileType get_file_type(Context &ctx, MappedFile *mf) { if (ehdr.e_type == ET_REL) { if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) { - if (is_gcc_lto_obj(ctx, mf)) + if (is_gcc_lto_obj(mf, has_plugin)) return FileType::GCC_LTO_OBJ; } else { - if (is_gcc_lto_obj(ctx, mf)) + if (is_gcc_lto_obj(mf, has_plugin)) return FileType::GCC_LTO_OBJ; } return FileType::ELF_OBJ; @@ -112,10 +112,10 @@ FileType get_file_type(Context &ctx, MappedFile *mf) { if (ehdr.e_type == ET_REL) { if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) { - if (is_gcc_lto_obj(ctx, mf)) + if (is_gcc_lto_obj(mf, has_plugin)) return FileType::GCC_LTO_OBJ; } else { - if (is_gcc_lto_obj(ctx, mf)) + if (is_gcc_lto_obj(mf, has_plugin)) return FileType::GCC_LTO_OBJ; } return FileType::ELF_OBJ; diff --git a/src/tls.cc b/src/tls.cc index c264adf114..365fdb35b3 100644 --- a/src/tls.cc +++ b/src/tls.cc @@ -186,7 +186,7 @@ u64 get_dtp_addr(const ElfPhdr &phdr) { using E = MOLD_TARGET; -template u64 get_tp_addr(const ElfPhdr &); -template u64 get_dtp_addr(const ElfPhdr &); +template u64 get_tp_addr(const ElfPhdr &); +template u64 get_dtp_addr(const ElfPhdr &); } // namespace mold