mirror of
https://github.com/NVIDIA/nvidia-installer.git
synced 2025-07-23 02:13:00 +02:00
415.13
This commit is contained in:
78
Makefile
78
Makefile
@@ -56,13 +56,6 @@ NVIDIA_INSTALLER_PROGRAM_NAME = "nvidia-installer"
|
||||
|
||||
NVIDIA_INSTALLER_VERSION := $(NVIDIA_VERSION)
|
||||
|
||||
# We only need to run the TLS test on Linux-x86 and Linux-x86_64
|
||||
ifeq ($(findstring Linux-x86,$(TARGET_OS)-$(TARGET_ARCH)),)
|
||||
NEED_TLS_TEST =
|
||||
else
|
||||
NEED_TLS_TEST = 1
|
||||
endif
|
||||
|
||||
NCURSES_UI_C = ncurses-ui.c
|
||||
NCURSES_UI_O = $(call BUILD_OBJECT_LIST,$(NCURSES_UI_C))
|
||||
NCURSES_UI_SO = $(OUTPUTDIR)/nvidia-installer-ncurses-ui.so
|
||||
@@ -71,28 +64,6 @@ NCURSES6_UI_O = $(OUTPUTDIR)/ncurses6-ui.o
|
||||
NCURSES6_UI_SO = $(OUTPUTDIR)/nvidia-installer-ncurses6-ui.so
|
||||
NCURSES6_UI_SO_C = $(OUTPUTDIR)/g_$(notdir $(NCURSES6_UI_SO:.so=.c))
|
||||
|
||||
ifneq ($(NEED_TLS_TEST),)
|
||||
TLS_TEST_C = $(OUTPUTDIR)/g_tls_test.c
|
||||
TLS_TEST_DSO_C = $(OUTPUTDIR)/g_tls_test_dso.c
|
||||
TLS_TEST = tls_test_$(TARGET_OS)-$(TARGET_ARCH)
|
||||
TLS_TEST_DSO_SO = tls_test_dso_$(TARGET_OS)-$(TARGET_ARCH).so
|
||||
|
||||
TLS_TEST_32_C = $(OUTPUTDIR)/g_tls_test_32.c
|
||||
TLS_TEST_DSO_32_C = $(OUTPUTDIR)/g_tls_test_dso_32.c
|
||||
TLS_TEST_32 = tls_test_$(TARGET_OS)-x86
|
||||
TLS_TEST_DSO_SO_32 = tls_test_dso_$(TARGET_OS)-x86.so
|
||||
else
|
||||
TLS_TEST_C =
|
||||
TLS_TEST_DSO_C =
|
||||
TLS_TEST =
|
||||
TLS_TEST_DSO_SO =
|
||||
|
||||
TLS_TEST_32_C =
|
||||
TLS_TEST_DSO_32_C =
|
||||
TLS_TEST_32 =
|
||||
TLS_TEST_DSO_SO_32 =
|
||||
endif
|
||||
|
||||
RTLD_TEST_C = $(OUTPUTDIR)/g_rtld_test.c
|
||||
RTLD_TEST = $(OUTPUTDIR)/rtld_test
|
||||
|
||||
@@ -114,14 +85,13 @@ OPTIONS_1_INC = $(OUTPUTDIR)/options.1.inc
|
||||
ifeq ($(TARGET_OS)-$(TARGET_ARCH), Linux-x86_64)
|
||||
TLS_MODEL = initial-exec
|
||||
PIC = -fPIC
|
||||
# Only Linux-x86_64 needs the tls_test_32 files
|
||||
COMPAT_32_SRC = $(TLS_TEST_32_C) $(TLS_TEST_DSO_32_C) \
|
||||
$(RTLD_TEST_32_C)
|
||||
# Only Linux-x86_64 needs the rtld_test_32 file
|
||||
COMPAT_32_SRC = $(RTLD_TEST_32_C)
|
||||
else
|
||||
# So far all other platforms use local-exec
|
||||
TLS_MODEL = local-exec
|
||||
PIC =
|
||||
# Non-Linux-x86_64 platforms do not include the tls_test_32 files
|
||||
# Non-Linux-x86_64 platforms do not include the rtld_test_32 file
|
||||
COMPAT_32_SRC =
|
||||
endif
|
||||
|
||||
@@ -148,8 +118,7 @@ NCURSES_UI_SO_SRC = $(NCURSES_UI_SO_C)
|
||||
NCURSES_UI_SO_SRC += $(if $(BUILD_NCURSES6),$(NCURSES6_UI_SO_C),)
|
||||
CFLAGS += $(if $(BUILD_NCURSES6),-DNV_INSTALLER_NCURSES6,)
|
||||
|
||||
INSTALLER_SRC = $(SRC) $(NCURSES_UI_SO_SRC) $(TLS_TEST_C) $(TLS_TEST_DSO_C) \
|
||||
$(RTLD_TEST_C) $(COMPAT_32_SRC)
|
||||
INSTALLER_SRC = $(SRC) $(NCURSES_UI_SO_SRC) $(RTLD_TEST_C) $(COMPAT_32_SRC)
|
||||
|
||||
INSTALLER_OBJS = $(call BUILD_OBJECT_LIST,$(INSTALLER_SRC))
|
||||
|
||||
@@ -157,7 +126,6 @@ common_cflags = -I.
|
||||
common_cflags += -imacros $(CONFIG_H)
|
||||
common_cflags += -I $(OUTPUTDIR)
|
||||
common_cflags += -I $(COMMON_UTILS_DIR)
|
||||
common_cflags += $(if $(NEED_TLS_TEST),-DNV_TLS_TEST)
|
||||
|
||||
CFLAGS += $(common_cflags)
|
||||
|
||||
@@ -249,22 +217,6 @@ $(NCURSES_UI_SO_C): $(GEN_UI_ARRAY) $(NCURSES_UI_SO)
|
||||
$(NCURSES6_UI_SO_C): $(GEN_UI_ARRAY) $(NCURSES6_UI_SO)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) $(NCURSES6_UI_SO) ncurses6_ui_array > $@
|
||||
|
||||
ifneq ($(NEED_TLS_TEST),)
|
||||
$(TLS_TEST_C): $(GEN_UI_ARRAY) $(TLS_TEST)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) $(TLS_TEST) tls_test_array > $@
|
||||
|
||||
$(TLS_TEST_DSO_C): $(GEN_UI_ARRAY) $(TLS_TEST_DSO_SO)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) \
|
||||
$(TLS_TEST_DSO_SO) tls_test_dso_array > $@
|
||||
|
||||
$(TLS_TEST_32_C): $(GEN_UI_ARRAY) $(TLS_TEST_32)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) $(TLS_TEST_32) tls_test_array_32 > $@
|
||||
|
||||
$(TLS_TEST_DSO_32_C): $(GEN_UI_ARRAY) $(TLS_TEST_DSO_SO_32)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) \
|
||||
$(TLS_TEST_DSO_SO_32) tls_test_dso_array_32 > $@
|
||||
endif
|
||||
|
||||
$(RTLD_TEST_C): $(GEN_UI_ARRAY) $(RTLD_TEST)
|
||||
$(call quiet_cmd,GEN_UI_ARRAY) $(RTLD_TEST) rtld_test_array > $@
|
||||
|
||||
@@ -307,28 +259,6 @@ clean clobber:
|
||||
rm -rf $(OUTPUTDIR)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# rule to rebuild tls_test and tls_test_dso; a precompiled tls_test
|
||||
# and tls_test_dso is distributed with nvidia_installer because they
|
||||
# require a recent toolchain to build.
|
||||
##############################################################################
|
||||
|
||||
rebuild_tls_test: tls_test.c
|
||||
gcc -Wall -O2 -fomit-frame-pointer -o $(TLS_TEST) -ldl $<
|
||||
strip $(TLS_TEST)
|
||||
|
||||
rebuild_tls_test_dso: tls_test_dso.c
|
||||
gcc -Wall -O2 $(PIC) -fomit-frame-pointer -c $< \
|
||||
-ftls-model=$(TLS_MODEL)
|
||||
gcc -o $(TLS_TEST_DSO_SO) -shared tls_test_dso.o
|
||||
strip $(TLS_TEST_DSO_SO)
|
||||
|
||||
# dummy rule to override implicit rule that builds tls_test from
|
||||
# tls_test.c
|
||||
|
||||
tls_test: tls_test.c
|
||||
touch $@
|
||||
|
||||
# rule to build a native rtld_test; a precompiled Linux-x86 rtld_test is
|
||||
# distributed with nvidia-installer to simplify Linux-x86_64 builds.
|
||||
|
||||
|
2
README
2
README
@@ -115,8 +115,6 @@ is now:
|
||||
- search in the usr/src/nv/precompiled directory of the .run file,
|
||||
if no match found, then
|
||||
|
||||
- search on the ftp site, if no match found, then
|
||||
|
||||
- give up and just build the kernel module yourself
|
||||
|
||||
|
||||
|
@@ -64,15 +64,6 @@ DIST_FILES += README
|
||||
DIST_FILES += dist-files.mk
|
||||
|
||||
DIST_FILES += rtld_test_Linux-x86
|
||||
|
||||
DIST_FILES += tls_test_Linux-x86
|
||||
DIST_FILES += tls_test_Linux-x86_64
|
||||
|
||||
DIST_FILES += tls_test_dso_Linux-x86.so
|
||||
DIST_FILES += tls_test_dso_Linux-x86_64.so
|
||||
|
||||
DIST_FILES += tls_test.c
|
||||
DIST_FILES += tls_test_dso.c
|
||||
DIST_FILES += rtld_test.c
|
||||
|
||||
DIST_FILES += nvidia-installer.1.m4
|
||||
|
92
files.c
92
files.c
@@ -396,91 +396,6 @@ char *write_temp_file(Options *op, const int len,
|
||||
} /* write_temp_file() */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* select_tls_class() - determine which tls class should be installed
|
||||
* on the user's machine; if tls_test() fails, just install the
|
||||
* classic tls libraries. If tls_test() passes, install both OpenGL
|
||||
* sets, but only the new tls libglx.
|
||||
*/
|
||||
|
||||
void select_tls_class(Options *op, Package *p)
|
||||
{
|
||||
#if defined(NV_TLS_TEST)
|
||||
int i;
|
||||
|
||||
if (!tls_test(op, FALSE)) {
|
||||
op->which_tls = (op->which_tls & TLS_LIB_TYPE_FORCED);
|
||||
op->which_tls |= TLS_LIB_CLASSIC_TLS;
|
||||
|
||||
/*
|
||||
* tls libraries will not run on this system; just install the
|
||||
* classic OpenGL libraries: clear the FILE_TYPE of any
|
||||
* FILE_TLS_CLASS_NEW package entries.
|
||||
*/
|
||||
|
||||
ui_log(op, "Installing classic TLS OpenGL libraries.");
|
||||
|
||||
for (i = 0; i < p->num_entries; i++) {
|
||||
if ((p->entries[i].tls_class == FILE_TLS_CLASS_NEW) &&
|
||||
(p->entries[i].compat_arch == FILE_COMPAT_ARCH_NATIVE)) {
|
||||
invalidate_package_entry(&(p->entries[i]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
op->which_tls = (op->which_tls & TLS_LIB_TYPE_FORCED);
|
||||
op->which_tls |= TLS_LIB_NEW_TLS;
|
||||
|
||||
/*
|
||||
* tls libraries will run on this system: install both the
|
||||
* classic and new TLS libraries.
|
||||
*/
|
||||
|
||||
ui_log(op, "Installing both new and classic TLS OpenGL libraries.");
|
||||
}
|
||||
|
||||
#if defined(NV_X86_64)
|
||||
|
||||
/*
|
||||
* If we are installing on amd64, then we need to perform a
|
||||
* similar test for the 32bit compatibility libraries
|
||||
*/
|
||||
|
||||
if (!tls_test(op, TRUE)) {
|
||||
op->which_tls_compat32 = (op->which_tls_compat32 & TLS_LIB_TYPE_FORCED);
|
||||
op->which_tls_compat32 |= TLS_LIB_CLASSIC_TLS;
|
||||
|
||||
/*
|
||||
* 32bit tls libraries will not run on this system; just
|
||||
* install the classic OpenGL libraries: clear the FILE_TYPE
|
||||
* of any tls_class==NEW && compat_arch==COMPAT32 package entries.
|
||||
*/
|
||||
|
||||
ui_log(op, "Installing classic TLS 32bit OpenGL libraries.");
|
||||
|
||||
for (i = 0; i < p->num_entries; i++) {
|
||||
if ((p->entries[i].tls_class == FILE_TLS_CLASS_NEW) &&
|
||||
(p->entries[i].compat_arch == FILE_COMPAT_ARCH_COMPAT32)) {
|
||||
invalidate_package_entry(&(p->entries[i]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
op->which_tls_compat32 = (op->which_tls_compat32 & TLS_LIB_TYPE_FORCED);
|
||||
op->which_tls_compat32 |= TLS_LIB_NEW_TLS;
|
||||
|
||||
/*
|
||||
* 32bit tls libraries will run on this system: install both
|
||||
* the classic and new TLS libraries.
|
||||
*/
|
||||
|
||||
ui_log(op, "Installing both new and classic TLS 32bit "
|
||||
"OpenGL libraries.");
|
||||
}
|
||||
|
||||
#endif /* NV_X86_64 */
|
||||
#endif /* NV_TLS_TEST */
|
||||
} /* select_tls_class() */
|
||||
|
||||
/*
|
||||
* check_libGLX_indirect_target() - Helper function for
|
||||
* check_libGLX_indirect_links.
|
||||
@@ -699,7 +614,6 @@ int set_destinations(Options *op, Package *p)
|
||||
break;
|
||||
|
||||
case FILE_TYPE_TLS_LIB:
|
||||
case FILE_TYPE_TLS_SYMLINK:
|
||||
if (p->entries[i].compat_arch == FILE_COMPAT_ARCH_COMPAT32) {
|
||||
prefix = op->compat32_prefix;
|
||||
dir = op->compat32_libdir;
|
||||
@@ -1135,7 +1049,6 @@ static void add_kernel_module_helper(Options *op, Package *p,
|
||||
NULL, /* target */
|
||||
dst,
|
||||
FILE_TYPE_KERNEL_MODULE,
|
||||
FILE_TLS_CLASS_NONE,
|
||||
FILE_COMPAT_ARCH_NONE,
|
||||
FILE_GLVND_DONT_CARE,
|
||||
0644);
|
||||
@@ -2068,7 +1981,6 @@ void process_libGL_la_files(Options *op, Package *p)
|
||||
NULL, /* target */
|
||||
NULL, /* dst */
|
||||
FILE_TYPE_LIBGL_LA,
|
||||
p->entries[i].tls_class,
|
||||
p->entries[i].compat_arch,
|
||||
p->entries[i].glvnd,
|
||||
p->entries[i].mode);
|
||||
@@ -2145,7 +2057,6 @@ void process_dot_desktop_files(Options *op, Package *p)
|
||||
NULL, /* target */
|
||||
NULL, /* dst */
|
||||
FILE_TYPE_DOT_DESKTOP,
|
||||
p->entries[i].tls_class,
|
||||
p->entries[i].compat_arch,
|
||||
p->entries[i].glvnd,
|
||||
p->entries[i].mode);
|
||||
@@ -2226,7 +2137,6 @@ void process_dkms_conf(Options *op, Package *p)
|
||||
NULL, /* target */
|
||||
NULL, /* dst */
|
||||
FILE_TYPE_DKMS_CONF,
|
||||
p->entries[i].tls_class,
|
||||
p->entries[i].compat_arch,
|
||||
p->entries[i].glvnd,
|
||||
p->entries[i].mode);
|
||||
@@ -2277,7 +2187,6 @@ void process_vulkan_icd_file(Options *op, Package *p)
|
||||
NULL /* target */,
|
||||
NULL /* dst */,
|
||||
FILE_TYPE_VULKAN_ICD_JSON,
|
||||
vkIcdJsonEntry->tls_class,
|
||||
vkIcdJsonEntry->compat_arch,
|
||||
vkIcdJsonEntry->glvnd,
|
||||
vkIcdJsonEntry->mode);
|
||||
@@ -3160,7 +3069,6 @@ void add_libgl_abi_symlink(Options *op, Package *p)
|
||||
target,
|
||||
nvstrcat(usrlib, libgl, NULL),
|
||||
FILE_TYPE_OPENGL_SYMLINK,
|
||||
FILE_TLS_CLASS_NONE,
|
||||
FILE_COMPAT_ARCH_NATIVE,
|
||||
FILE_GLVND_DONT_CARE,
|
||||
0000);
|
||||
|
1
files.h
1
files.h
@@ -29,7 +29,6 @@ int copy_file(Options *op, const char *srcfile,
|
||||
const char *dstfile, mode_t mode);
|
||||
char *write_temp_file(Options *op, const int len,
|
||||
const unsigned char *data, mode_t perm);
|
||||
void select_tls_class(Options *op, Package *p); /* XXX move? */
|
||||
int set_destinations(Options *op, Package *p); /* XXX move? */
|
||||
int get_prefixes(Options *op); /* XXX move? */
|
||||
void add_kernel_modules_to_package(Options *op, Package *p);
|
||||
|
@@ -96,7 +96,7 @@ int install_from_cwd(Options *op)
|
||||
HookScriptStatus res;
|
||||
|
||||
static const char* edit_your_xf86config =
|
||||
"Please update your XF86Config or xorg.conf file as "
|
||||
"Please update your xorg.conf file as "
|
||||
"appropriate; see the file /usr/share/doc/"
|
||||
"NVIDIA_GLX-1.0/README.txt for details.";
|
||||
|
||||
@@ -229,13 +229,6 @@ int install_from_cwd(Options *op)
|
||||
|
||||
if (!get_prefixes(op)) goto failed;
|
||||
|
||||
/*
|
||||
* select the appropriate TLS class, modifying the package as
|
||||
* necessary.
|
||||
*/
|
||||
|
||||
select_tls_class(op, p);
|
||||
|
||||
/*
|
||||
* if the package contains any libGL.la or .desktop files,
|
||||
* process them (perform some search and replacing so
|
||||
@@ -923,24 +916,6 @@ static Package *parse_manifest (Options *op)
|
||||
op->compat32_files_packaged = TRUE;
|
||||
}
|
||||
|
||||
/* some libs/symlinks have a class field */
|
||||
|
||||
entry.tls_class = FILE_TLS_CLASS_NONE;
|
||||
|
||||
if (entry.caps.has_tls_class) {
|
||||
nvfree(flag);
|
||||
flag = read_next_word(c, &c);
|
||||
if (!flag) goto entry_done;
|
||||
|
||||
if (strcmp(flag, "CLASSIC") == 0)
|
||||
entry.tls_class = FILE_TLS_CLASS_CLASSIC;
|
||||
else if (strcmp(flag, "NEW") == 0)
|
||||
entry.tls_class = FILE_TLS_CLASS_NEW;
|
||||
else {
|
||||
goto entry_done;
|
||||
}
|
||||
}
|
||||
|
||||
/* some file types have a path field, or inherit their paths */
|
||||
|
||||
if (entry.caps.has_path) {
|
||||
@@ -1027,7 +1002,6 @@ static Package *parse_manifest (Options *op)
|
||||
entry.target,
|
||||
entry.dst,
|
||||
entry.type,
|
||||
entry.tls_class,
|
||||
entry.compat_arch,
|
||||
entry.glvnd,
|
||||
entry.mode);
|
||||
@@ -1089,7 +1063,6 @@ void add_package_entry(Package *p,
|
||||
char *target,
|
||||
char *dst,
|
||||
PackageEntryFileType type,
|
||||
PackageEntryFileTlsClass tls_class,
|
||||
PackageEntryFileCompatArch compat_arch,
|
||||
PackageEntryFileGLVND glvnd,
|
||||
mode_t mode)
|
||||
@@ -1110,7 +1083,6 @@ void add_package_entry(Package *p,
|
||||
p->entries[n].target = target;
|
||||
p->entries[n].dst = dst;
|
||||
p->entries[n].type = type;
|
||||
p->entries[n].tls_class = tls_class;
|
||||
p->entries[n].mode = mode;
|
||||
p->entries[n].caps = get_file_type_capabilities(type);
|
||||
p->entries[n].compat_arch = compat_arch;
|
||||
@@ -1476,7 +1448,6 @@ generate_done:
|
||||
NULL, /* target */
|
||||
NULL, /* dst */
|
||||
FILE_TYPE_MODULE_SIGNING_KEY,
|
||||
FILE_TLS_CLASS_NONE,
|
||||
FILE_COMPAT_ARCH_NONE,
|
||||
FILE_GLVND_DONT_CARE,
|
||||
0444);
|
||||
@@ -1509,7 +1480,6 @@ generate_done:
|
||||
NULL, /* target */
|
||||
NULL, /* dst */
|
||||
FILE_TYPE_MODULE_SIGNING_KEY,
|
||||
FILE_TLS_CLASS_NONE,
|
||||
FILE_COMPAT_ARCH_NONE,
|
||||
FILE_GLVND_DONT_CARE,
|
||||
0400);
|
||||
|
10
log.c
10
log.c
@@ -42,16 +42,6 @@ static FILE *log_file_stream;
|
||||
|
||||
#define STRSTR(x) ((x) ? (x) : "(not specified)")
|
||||
|
||||
#define TLSSTR(x) ({ \
|
||||
const char *__tls_str = NULL; \
|
||||
switch (x) { \
|
||||
case FORCE_CLASSIC_TLS: __tls_str = "classic"; break; \
|
||||
case FORCE_NEW_TLS: __tls_str = "elf-tls"; break; \
|
||||
default: __tls_str = "(not specified)"; \
|
||||
} \
|
||||
__tls_str; \
|
||||
})
|
||||
|
||||
#define SELINUXSTR(x) ({ \
|
||||
const char *__selinux_str = NULL; \
|
||||
switch (x) { \
|
||||
|
142
manifest.c
142
manifest.c
@@ -26,7 +26,6 @@
|
||||
|
||||
#define ENTRY(_name, \
|
||||
_has_arch, \
|
||||
_has_tls_class, \
|
||||
_installable, \
|
||||
_has_path, \
|
||||
_is_symlink, \
|
||||
@@ -40,7 +39,6 @@
|
||||
#_name , FILE_TYPE_ ## _name , \
|
||||
{ \
|
||||
.has_arch = _has_arch, \
|
||||
.has_tls_class = _has_tls_class, \
|
||||
.installable = _installable, \
|
||||
.has_path = _has_path, \
|
||||
.is_symlink = _is_symlink, \
|
||||
@@ -63,77 +61,75 @@ static const struct {
|
||||
} packageEntryFileTypeTable[] = {
|
||||
|
||||
/*
|
||||
* glvnd_select ------------------------------------------------+
|
||||
* inherit_path ---------------------------------------------+ |
|
||||
* is_conflicting ------------------------------------------+ | |
|
||||
* is_temporary ---------------------------------------+ | | |
|
||||
* is_opengl ------------------------------------+ | | | |
|
||||
* is_shared_lib ---------------------------------+ | | | | |
|
||||
* is_symlink ------------------------------+ | | | | | |
|
||||
* has_path ---------------------------+ | | | | | | |
|
||||
* installable ------------------------+ | | | | | | | |
|
||||
* has_tls_class ---------------------+ | | | | | | | | |
|
||||
* has_arch ------------------+ | | | | | | | | | |
|
||||
* | | | | | | | | | | |
|
||||
* glvnd_select ---------------------------------------------+
|
||||
* inherit_path ------------------------------------------+ |
|
||||
* is_conflicting ---------------------------------------+ | |
|
||||
* is_temporary ------------------------------------+ | | |
|
||||
* is_opengl ---------------------------------+ | | | |
|
||||
* is_shared_lib ------------------------------+ | | | | |
|
||||
* is_symlink ---------------------------+ | | | | | |
|
||||
* has_path ------------------------+ | | | | | | |
|
||||
* installable ---------------------+ | | | | | | | |
|
||||
* has_arch ------------------+ | | | | | | | | |
|
||||
* | | | | | | | | | |
|
||||
*/
|
||||
{ ENTRY(KERNEL_MODULE_SRC, F, F, T, F, F, F, F, F, T, T, F) },
|
||||
{ ENTRY(KERNEL_MODULE, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(CUDA_ICD, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENGL_LIB, T, F, T, F, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(CUDA_LIB, T, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_LIB, T, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_WRAPPER_LIB, T, F, T, T, F, T, F, F, F, F, F) },
|
||||
{ ENTRY(OPENCL_LIB_SYMLINK, T, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_WRAPPER_SYMLINK, T, F, F, T, T, F, F, F, F, F, F) },
|
||||
{ ENTRY(LIBGL_LA, T, F, T, F, F, F, T, T, T, F, F) },
|
||||
{ ENTRY(TLS_LIB, T, T, T, T, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_LIB, T, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(DOCUMENTATION, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(APPLICATION_PROFILE, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(MANPAGE, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(EXPLICIT_PATH, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENGL_SYMLINK, T, F, F, F, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(CUDA_SYMLINK, T, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(TLS_SYMLINK, T, T, F, T, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_LIB_SYMLINK, T, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(INSTALLER_BINARY, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_BINARY, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_BIN_SYMLINK, F, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(DOT_DESKTOP, F, F, T, T, F, F, F, T, T, F, F) },
|
||||
{ ENTRY(XMODULE_SHARED_LIB, F, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(XMODULE_SYMLINK, F, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(GLX_MODULE_SHARED_LIB, F, F, T, T, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(GLX_MODULE_SYMLINK, F, F, F, T, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(XMODULE_NEWSYM, F, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(VDPAU_LIB, T, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(VDPAU_SYMLINK, T, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVCUVID_LIB, T, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(NVCUVID_LIB_SYMLINK, T, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(ENCODEAPI_LIB, T, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(ENCODEAPI_LIB_SYMLINK, T, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(VGX_LIB, F, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(VGX_LIB_SYMLINK, F, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(GRID_LIB, F, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(GRID_LIB_SYMLINK, F, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVIDIA_MODPROBE, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVIDIA_MODPROBE_MANPAGE, F, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(MODULE_SIGNING_KEY, F, F, T, F, F, F, F, T, T, F, F) },
|
||||
{ ENTRY(NVIFR_LIB, T, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(NVIFR_LIB_SYMLINK, T, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(XORG_OUTPUTCLASS_CONFIG, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(DKMS_CONF , F, F, T, F, F, F, F, T, T, T, F) },
|
||||
{ ENTRY(GLVND_LIB, T, F, T, F, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(GLVND_SYMLINK, T, F, F, F, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(GLX_CLIENT_LIB, T, F, T, F, F, T, T, F, T, F, T) },
|
||||
{ ENTRY(GLX_CLIENT_SYMLINK, T, F, F, F, T, F, T, F, T, F, T) },
|
||||
{ ENTRY(VULKAN_ICD_JSON, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(GLVND_EGL_ICD_JSON, F, F, T, F, F, F, T, F, T, F, F) },
|
||||
{ ENTRY(EGL_CLIENT_LIB, T, F, T, F, F, T, T, F, T, F, T) },
|
||||
{ ENTRY(EGL_CLIENT_SYMLINK, T, F, F, F, T, F, T, F, T, F, T) },
|
||||
{ ENTRY(EGL_EXTERNAL_PLATFORM_JSON, F, F, T, F, F, F, T, F, T, F, F) },
|
||||
{ ENTRY(FLEXERA_LIB, F, F, T, T, F, T, F, F, F, F, F) },
|
||||
{ ENTRY(FLEXERA_LIB_SYMLINK, F, F, F, T, T, F, F, F, F, F, F) },
|
||||
{ ENTRY(ALLOCATOR_JSON, F, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(KERNEL_MODULE_SRC, F, T, F, F, F, F, F, T, T, F) },
|
||||
{ ENTRY(KERNEL_MODULE, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(CUDA_ICD, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENGL_LIB, T, T, F, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(CUDA_LIB, T, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_LIB, T, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_WRAPPER_LIB, T, T, T, F, T, F, F, F, F, F) },
|
||||
{ ENTRY(OPENCL_LIB_SYMLINK, T, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENCL_WRAPPER_SYMLINK, T, F, T, T, F, F, F, F, F, F) },
|
||||
{ ENTRY(LIBGL_LA, T, T, F, F, F, T, T, T, F, F) },
|
||||
{ ENTRY(TLS_LIB, T, T, T, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_LIB, T, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(DOCUMENTATION, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(APPLICATION_PROFILE, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(MANPAGE, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(EXPLICIT_PATH, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(OPENGL_SYMLINK, T, F, F, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(CUDA_SYMLINK, T, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_LIB_SYMLINK, T, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(INSTALLER_BINARY, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_BINARY, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(UTILITY_BIN_SYMLINK, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(DOT_DESKTOP, F, T, T, F, F, F, T, T, F, F) },
|
||||
{ ENTRY(XMODULE_SHARED_LIB, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(XMODULE_SYMLINK, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(GLX_MODULE_SHARED_LIB, F, T, T, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(GLX_MODULE_SYMLINK, F, F, T, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(XMODULE_NEWSYM, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(VDPAU_LIB, T, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(VDPAU_SYMLINK, T, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVCUVID_LIB, T, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(NVCUVID_LIB_SYMLINK, T, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(ENCODEAPI_LIB, T, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(ENCODEAPI_LIB_SYMLINK, T, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(VGX_LIB, F, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(VGX_LIB_SYMLINK, F, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(GRID_LIB, F, T, T, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(GRID_LIB_SYMLINK, F, F, T, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVIDIA_MODPROBE, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(NVIDIA_MODPROBE_MANPAGE, F, T, T, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(MODULE_SIGNING_KEY, F, T, F, F, F, F, T, T, F, F) },
|
||||
{ ENTRY(NVIFR_LIB, T, T, F, F, T, F, F, T, F, F) },
|
||||
{ ENTRY(NVIFR_LIB_SYMLINK, T, F, F, T, F, F, F, T, F, F) },
|
||||
{ ENTRY(XORG_OUTPUTCLASS_CONFIG, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(DKMS_CONF , F, T, F, F, F, F, T, T, T, F) },
|
||||
{ ENTRY(GLVND_LIB, T, T, F, F, T, T, F, T, F, F) },
|
||||
{ ENTRY(GLVND_SYMLINK, T, F, F, T, F, T, F, T, F, F) },
|
||||
{ ENTRY(GLX_CLIENT_LIB, T, T, F, F, T, T, F, T, F, T) },
|
||||
{ ENTRY(GLX_CLIENT_SYMLINK, T, F, F, T, F, T, F, T, F, T) },
|
||||
{ ENTRY(VULKAN_ICD_JSON, F, T, F, F, F, F, F, T, F, F) },
|
||||
{ ENTRY(GLVND_EGL_ICD_JSON, F, T, F, F, F, T, F, T, F, F) },
|
||||
{ ENTRY(EGL_CLIENT_LIB, T, T, F, F, T, T, F, T, F, T) },
|
||||
{ ENTRY(EGL_CLIENT_SYMLINK, T, F, F, T, F, T, F, T, F, T) },
|
||||
{ ENTRY(EGL_EXTERNAL_PLATFORM_JSON, F, T, F, F, F, T, F, T, F, F) },
|
||||
{ ENTRY(FLEXERA_LIB, F, T, T, F, T, F, F, F, F, F) },
|
||||
{ ENTRY(FLEXERA_LIB_SYMLINK, F, F, T, T, F, F, F, F, F, F) },
|
||||
{ ENTRY(ALLOCATOR_JSON, F, T, F, F, F, F, F, T, F, F) },
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -145,7 +141,7 @@ PackageEntryFileCapabilities get_file_type_capabilities(
|
||||
)
|
||||
{
|
||||
int i;
|
||||
PackageEntryFileCapabilities nullCaps = { F, F, F, F, F, F, F, F, F, F, F };
|
||||
PackageEntryFileCapabilities nullCaps = { F, F, F, F, F, F, F, F, F, F };
|
||||
|
||||
for (i = 0; i < ARRAY_LEN(packageEntryFileTypeTable); i++) {
|
||||
if (type == packageEntryFileTypeTable[i].type) {
|
||||
|
224
misc.c
224
misc.c
@@ -503,18 +503,12 @@ int find_system_utils(Options *op)
|
||||
}
|
||||
}
|
||||
|
||||
/* If no program called `X` is found; try searching for known X servers */
|
||||
/* If no program called `X` is found; try searching for Xorg */
|
||||
if (op->utils[XSERVER] == NULL) {
|
||||
static const char* xservers[] = { "Xorg", "XFree86" };
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_LEN(xservers); i++) {
|
||||
op->utils[XSERVER] = find_system_util(xservers[i]);
|
||||
if (op->utils[XSERVER]) {
|
||||
ui_expert(op, "found `%s` : `%s`",
|
||||
xservers[i], op->utils[XSERVER]);
|
||||
break;
|
||||
}
|
||||
op->utils[XSERVER] = find_system_util("Xorg");
|
||||
if (op->utils[XSERVER]) {
|
||||
ui_expert(op, "found `%s` : `%s`",
|
||||
"Xorg", op->utils[XSERVER]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1398,180 +1392,6 @@ int check_installed_file(Options *op, const char *filename,
|
||||
|
||||
|
||||
|
||||
#if defined(NV_TLS_TEST)
|
||||
/*
|
||||
* tls_test() - Starting with glibc 2.3, there is a new thread local
|
||||
* storage mechanism. To accomodate this, NVIDIA's OpenGL libraries
|
||||
* are built both the "classic" way, and the new way. To determine
|
||||
* which set of OpenGL libraries to install, execute the test program
|
||||
* stored in tls_test_array. If the program returns 0 we should
|
||||
* install the new tls libraries; if it returns anything else, we
|
||||
* should install the "classic" libraries.
|
||||
*
|
||||
* So as to avoid any risk of not being able to find the tls_test
|
||||
* binary at run time, the test program is stored as static data
|
||||
* inside the installer binary (in the same way that the user
|
||||
* interface shared libraries are)... see
|
||||
* user_interface.c:extract_user_interface() for details.
|
||||
*
|
||||
* Return TRUE if the new tls libraries should be installed; FALSE if
|
||||
* the old libraries should be used.
|
||||
*/
|
||||
|
||||
/* pull in the array and size from g_tls_test.c */
|
||||
|
||||
extern const unsigned char tls_test_array[];
|
||||
extern const int tls_test_array_size;
|
||||
|
||||
/* pull in the array and size from g_tls_test_dso.c */
|
||||
|
||||
extern const unsigned char tls_test_dso_array[];
|
||||
extern const int tls_test_dso_array_size;
|
||||
|
||||
|
||||
|
||||
#if defined(NV_X86_64)
|
||||
|
||||
/* pull in the array and size from g_tls_test_32.c */
|
||||
|
||||
extern const unsigned char tls_test_array_32[];
|
||||
extern const int tls_test_array_32_size;
|
||||
|
||||
/* pull in the array and size from g_tls_test_dso_32.c */
|
||||
|
||||
extern const unsigned char tls_test_dso_array_32[];
|
||||
extern const int tls_test_dso_array_32_size;
|
||||
|
||||
#endif /* NV_X86_64 */
|
||||
|
||||
|
||||
/* forward prototype */
|
||||
|
||||
static int tls_test_internal(Options *op, int which_tls,
|
||||
const unsigned char *test_array,
|
||||
const int test_array_size,
|
||||
const unsigned char *dso_test_array,
|
||||
const int dso_test_array_size);
|
||||
|
||||
|
||||
|
||||
int tls_test(Options *op, int compat_32_libs)
|
||||
{
|
||||
if (compat_32_libs) {
|
||||
|
||||
#if defined(NV_X86_64)
|
||||
return tls_test_internal(op, op->which_tls_compat32,
|
||||
tls_test_array_32,
|
||||
tls_test_array_32_size,
|
||||
tls_test_dso_array_32,
|
||||
tls_test_dso_array_32_size);
|
||||
#else
|
||||
return FALSE;
|
||||
#endif /* NV_X86_64 */
|
||||
|
||||
} else {
|
||||
return tls_test_internal(op, op->which_tls,
|
||||
tls_test_array,
|
||||
tls_test_array_size,
|
||||
tls_test_dso_array,
|
||||
tls_test_dso_array_size);
|
||||
}
|
||||
} /* tls_test */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* tls_test_internal() - this is the routine that does all the work to
|
||||
* write the tests to file and execute them; the caller (tls_test())
|
||||
* just selects which array data is used as the test.
|
||||
*/
|
||||
|
||||
static int tls_test_internal(Options *op, int which_tls,
|
||||
const unsigned char *test_array,
|
||||
const int test_array_size,
|
||||
const unsigned char *test_dso_array,
|
||||
const int test_dso_array_size)
|
||||
{
|
||||
int ret = FALSE;
|
||||
char *tmpfile = NULL, *dso_tmpfile = NULL, *cmd = NULL;
|
||||
|
||||
/* allow commandline options to bypass this test */
|
||||
|
||||
if (which_tls == FORCE_NEW_TLS) return TRUE;
|
||||
if (which_tls == FORCE_CLASSIC_TLS) return FALSE;
|
||||
|
||||
/* check that we have the test program */
|
||||
|
||||
if ((test_array == NULL) ||
|
||||
(test_array_size == 0) ||
|
||||
(test_dso_array == NULL) ||
|
||||
(test_dso_array_size == 0)) {
|
||||
ui_warn(op, "The thread local storage test program is not "
|
||||
"present; assuming classic tls.");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* write the tls_test data to tmp files */
|
||||
|
||||
tmpfile = write_temp_file(op, test_array_size, test_array,
|
||||
S_IRUSR|S_IWUSR|S_IXUSR);
|
||||
|
||||
if (!tmpfile) {
|
||||
ui_warn(op, "Unable to create temporary file for thread local "
|
||||
"storage test program (%s); assuming classic tls.",
|
||||
strerror(errno));
|
||||
goto done;
|
||||
}
|
||||
|
||||
dso_tmpfile = write_temp_file(op, test_dso_array_size,
|
||||
test_dso_array,
|
||||
S_IRUSR|S_IWUSR|S_IXUSR);
|
||||
if (!dso_tmpfile) {
|
||||
ui_warn(op, "Unable to create temporary file for thread local "
|
||||
"storage test program (%s); assuming classic tls.",
|
||||
strerror(errno));
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!set_security_context(op, dso_tmpfile, op->selinux_chcon_type)) {
|
||||
/* We are on a system with SELinux and the chcon command failed.
|
||||
* Assume that the system is recent enough to have the new TLS
|
||||
*/
|
||||
ui_warn(op, "Unable to set the security context on file %s; "
|
||||
"assuming new tls.",
|
||||
dso_tmpfile);
|
||||
ret = TRUE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* run the test */
|
||||
|
||||
cmd = nvstrcat(tmpfile, " ", dso_tmpfile, NULL);
|
||||
|
||||
ret = run_command(op, cmd, NULL, FALSE, 0, TRUE);
|
||||
|
||||
ret = ((ret == 0) ? TRUE : FALSE);
|
||||
|
||||
done:
|
||||
|
||||
if (tmpfile) {
|
||||
unlink(tmpfile);
|
||||
nvfree(tmpfile);
|
||||
}
|
||||
|
||||
if (dso_tmpfile) {
|
||||
unlink(dso_tmpfile);
|
||||
nvfree(dso_tmpfile);
|
||||
}
|
||||
|
||||
if (cmd) nvfree(cmd);
|
||||
|
||||
return ret;
|
||||
|
||||
} /* test_tls_internal() */
|
||||
#endif /* defined(NV_TLS_TEST) */
|
||||
|
||||
|
||||
/*
|
||||
* check_runtime_configuration() - In the past, nvidia-installer has
|
||||
* frequently failed to backup/move all conflicting files prior to
|
||||
@@ -1602,26 +1422,17 @@ extern const int rtld_test_array_32_size;
|
||||
/* forward prototype */
|
||||
|
||||
static int rtld_test_internal(Options *op, Package *p,
|
||||
int which_tls,
|
||||
const unsigned char *test_array,
|
||||
const int test_array_size,
|
||||
int compat_32_libs);
|
||||
|
||||
int check_runtime_configuration(Options *op, Package *p)
|
||||
{
|
||||
int ret = TRUE, which_tls, which_tls_compat32;
|
||||
int ret = TRUE;
|
||||
char *tmpdir = NULL;
|
||||
char old_cwd[PATH_MAX];
|
||||
int chdir_success = FALSE;
|
||||
|
||||
#if defined(NV_TLS_TEST)
|
||||
which_tls = op->which_tls;
|
||||
which_tls_compat32 = op->which_tls_compat32;
|
||||
#else
|
||||
/* Platforms that don't need the TLS test only support "new" ELF TLS. */
|
||||
which_tls = which_tls_compat32 = TLS_LIB_NEW_TLS;
|
||||
#endif /* NV_TLS_TEST */
|
||||
|
||||
ui_status_begin(op, "Running runtime sanity check:", "Checking");
|
||||
|
||||
/* chdir to an empty directory to avoid picking up DSOs from the CWD */
|
||||
@@ -1636,14 +1447,14 @@ int check_runtime_configuration(Options *op, Package *p)
|
||||
}
|
||||
|
||||
#if defined(NV_X86_64)
|
||||
ret = rtld_test_internal(op, p, which_tls_compat32,
|
||||
ret = rtld_test_internal(op, p,
|
||||
rtld_test_array_32,
|
||||
rtld_test_array_32_size,
|
||||
TRUE);
|
||||
#endif /* NV_X86_64 */
|
||||
|
||||
if (ret == TRUE) {
|
||||
ret = rtld_test_internal(op, p, which_tls,
|
||||
ret = rtld_test_internal(op, p,
|
||||
rtld_test_array,
|
||||
rtld_test_array_size,
|
||||
FALSE);
|
||||
@@ -1723,7 +1534,6 @@ int is_symbolic_link_to(const char *path, const char *dest)
|
||||
*/
|
||||
|
||||
static int rtld_test_internal(Options *op, Package *p,
|
||||
int which_tls,
|
||||
const unsigned char *test_array,
|
||||
const int test_array_size,
|
||||
int compat_32_libs)
|
||||
@@ -1771,9 +1581,6 @@ static int rtld_test_internal(Options *op, Package *p,
|
||||
if ((p->entries[i].type != FILE_TYPE_OPENGL_LIB) &&
|
||||
(p->entries[i].type != FILE_TYPE_TLS_LIB)) {
|
||||
continue;
|
||||
} else if ((which_tls & TLS_LIB_TYPE_FORCED) &&
|
||||
(p->entries[i].type == FILE_TYPE_TLS_LIB)) {
|
||||
continue;
|
||||
#if defined(NV_X86_64)
|
||||
} else if ((p->entries[i].compat_arch == FILE_COMPAT_ARCH_NATIVE)
|
||||
&& compat_32_libs) {
|
||||
@@ -1782,12 +1589,6 @@ static int rtld_test_internal(Options *op, Package *p,
|
||||
&& !compat_32_libs) {
|
||||
continue;
|
||||
#endif /* NV_X86_64 */
|
||||
} else if ((which_tls == TLS_LIB_NEW_TLS) &&
|
||||
(p->entries[i].tls_class == FILE_TLS_CLASS_CLASSIC)) {
|
||||
continue;
|
||||
} else if ((which_tls == TLS_LIB_CLASSIC_TLS) &&
|
||||
(p->entries[i].tls_class == FILE_TLS_CLASS_NEW)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
name = nvstrdup(p->entries[i].name);
|
||||
@@ -1934,7 +1735,8 @@ static int rtld_test_internal(Options *op, Package *p,
|
||||
* server version.
|
||||
*/
|
||||
|
||||
static int get_xserver_information(const char *versionString,
|
||||
static int get_xserver_information(Options *op,
|
||||
const char *versionString,
|
||||
int *isModular,
|
||||
int *supportsOutputClassSection)
|
||||
{
|
||||
@@ -1947,8 +1749,8 @@ static int get_xserver_information(const char *versionString,
|
||||
/* check if this is an XFree86 X server */
|
||||
|
||||
if (strstr(versionString, "XFree86 Version")) {
|
||||
*isModular = FALSE;
|
||||
return TRUE;
|
||||
ui_error(op, "XFree86 is not supported.");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -2035,7 +1837,7 @@ void query_xorg_version(Options *op)
|
||||
* modular
|
||||
*/
|
||||
|
||||
ret = get_xserver_information(data, &op->modular_xorg,
|
||||
ret = get_xserver_information(op, data, &op->modular_xorg,
|
||||
&op->xorg_supports_output_class);
|
||||
|
||||
/* fall through */
|
||||
|
1
misc.h
1
misc.h
@@ -75,7 +75,6 @@ void should_install_optional_modules(Options *op, Package *p,
|
||||
void check_installed_files_from_package(Options *op, Package *p);
|
||||
int check_installed_file(Options*, const char*, const mode_t, const uint32,
|
||||
ui_message_func *logwarn);
|
||||
int tls_test(Options *op, int compat_32_libs);
|
||||
int check_runtime_configuration(Options *op, Package *p);
|
||||
void collapse_multiple_slashes(char *s);
|
||||
int is_symbolic_link_to(const char *path, const char *dest);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
dnl This file is to be preprocessed by m4.
|
||||
changequote([[[, ]]])dnl
|
||||
define(__OPTIONS__, [[[include([[[options.1.inc]]])dnl]]])dnl
|
||||
.\" Copyright (C) 2005-2010 NVIDIA Corporation.
|
||||
.\" Copyright (C) 2005-2018 NVIDIA Corporation.
|
||||
.\"
|
||||
__HEADER__
|
||||
.\" Define the URL macro and then load the URL package if it exists.
|
||||
@@ -59,16 +59,6 @@ In the 'uninstall' mode of operation, all driver files that were installed on th
|
||||
The uninstall process should restore your filesystem to its state prior to installation.
|
||||
If you install one NVIDIA __INSTALLER_OS__ graphics driver while another is already installed, this uninstall step is automatically performed on the old driver at the beginning of installation of the new driver.
|
||||
.PP
|
||||
You can also use
|
||||
.B nvidia\-installer
|
||||
to automatically update to newer drivers.
|
||||
.PP
|
||||
You can query the latest driver available on NVIDIA's website with the
|
||||
.B \-\-latest
|
||||
option, or request that the latest driver, if newer than your current driver, be automatically downloaded and installed by specifying the
|
||||
.B \-\-update
|
||||
commandline option.
|
||||
.PP
|
||||
\fBnvidia\-installer\fR's backend is separate from its user interface; the installer will use an ncurses-based user interface if it can find the correct ncurses library, otherwise, it will fall back to a simple commandline user interface.
|
||||
To disable use of the ncurses user interface, use the option
|
||||
.B \-\-ui=none.
|
||||
@@ -80,7 +70,7 @@ The source code to
|
||||
is released under the GPL and available here:
|
||||
.sp
|
||||
.ti +5
|
||||
.URL "ftp://download.nvidia.com/XFree86/nvidia\-installer/"
|
||||
.URL "https://download.nvidia.com/XFree86/nvidia\-installer/"
|
||||
.sp
|
||||
Patches are welcome.
|
||||
dnl Call gen-manpage-opts to generate this section.
|
||||
@@ -134,18 +124,6 @@ or
|
||||
will be printed in a message informing the user of the presence/availability of the alternate driver installation, and asking the user whether to continue with the installation.
|
||||
.SH EXAMPLES
|
||||
.TP
|
||||
.B nvidia\-installer \-\-latest
|
||||
Connect to NVIDIA's FTP site, and report the latest driver version and the URL to the latest driver file.
|
||||
.TP
|
||||
.B nvidia\-installer \-\-update
|
||||
Connect to NVIDIA's FTP site.
|
||||
If a newer version of the driver is available, download and install it.
|
||||
Use
|
||||
.B \-\-force\-update
|
||||
to install the most recent driver even if
|
||||
.B \-\-nvidia\-installer
|
||||
detects that it is installed already.
|
||||
.TP
|
||||
.B nvidia\-installer \-\-uninstall
|
||||
Remove the NVIDIA driver and restore files that were overwritten during the install process.
|
||||
.\" .SH FILES
|
||||
@@ -159,4 +137,4 @@ NVIDIA Corporation
|
||||
.BR nvidia-settings (1),
|
||||
.I /usr/share/doc/NVIDIA_GLX-1.0/README.txt
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2005-2010 NVIDIA Corporation.
|
||||
Copyright \(co 2005-2018 NVIDIA Corporation.
|
||||
|
@@ -323,30 +323,16 @@ static void parse_commandline(int argc, char *argv[], Options *op)
|
||||
op->tmpdir = strval; break;
|
||||
case NO_NVIDIA_MODPROBE_OPTION:
|
||||
op->nvidia_modprobe = FALSE; break;
|
||||
#if defined(NV_TLS_TEST)
|
||||
case FORCE_TLS_OPTION:
|
||||
if (strcasecmp(strval, "new") == 0)
|
||||
op->which_tls = FORCE_NEW_TLS;
|
||||
else if (strcasecmp(strval, "classic") == 0)
|
||||
op->which_tls = FORCE_CLASSIC_TLS;
|
||||
else {
|
||||
nv_error_msg("Invalid parameter for '--force-tls'");
|
||||
goto fail;
|
||||
}
|
||||
/* This option is no longer used; ignore it. */
|
||||
nv_warning_msg("The '--force-tls' option is deprecated: "
|
||||
"nvidia-installer will ignore this option.");
|
||||
break;
|
||||
#if defined(NV_X86_64)
|
||||
case FORCE_TLS_COMPAT32_OPTION:
|
||||
if (strcasecmp(strval, "new") == 0)
|
||||
op->which_tls_compat32 = FORCE_NEW_TLS;
|
||||
else if (strcasecmp(strval, "classic") == 0)
|
||||
op->which_tls_compat32 = FORCE_CLASSIC_TLS;
|
||||
else {
|
||||
nv_error_msg("Invalid parameter for '--force-tls-compat32'");
|
||||
goto fail;
|
||||
}
|
||||
/* This option is no longer used; ignore it. */
|
||||
nv_warning_msg("The '--force-tls-compat32' option is deprecated: "
|
||||
"nvidia-installer will ignore this option.");
|
||||
break;
|
||||
#endif /* NV_X86_64 */
|
||||
#endif /* NV_TLS_TEST */
|
||||
case SANITY_OPTION:
|
||||
op->sanity = TRUE;
|
||||
break;
|
||||
|
@@ -107,7 +107,6 @@ typedef enum {
|
||||
FILE_TYPE_UTILITY_BINARY,
|
||||
FILE_TYPE_LIBGL_LA,
|
||||
FILE_TYPE_TLS_LIB,
|
||||
FILE_TYPE_TLS_SYMLINK,
|
||||
FILE_TYPE_UTILITY_LIB,
|
||||
FILE_TYPE_DOT_DESKTOP,
|
||||
FILE_TYPE_UTILITY_LIB_SYMLINK,
|
||||
@@ -186,10 +185,6 @@ typedef struct __options {
|
||||
int nvidia_modprobe;
|
||||
int no_questions;
|
||||
int silent;
|
||||
#if defined(NV_TLS_TEST)
|
||||
int which_tls;
|
||||
int which_tls_compat32;
|
||||
#endif /* NV_TLS_TEST */
|
||||
int sanity;
|
||||
int add_this_kernel;
|
||||
int no_backup;
|
||||
@@ -293,12 +288,6 @@ typedef struct __options {
|
||||
|
||||
} Options;
|
||||
|
||||
typedef enum {
|
||||
FILE_TLS_CLASS_NONE,
|
||||
FILE_TLS_CLASS_NEW,
|
||||
FILE_TLS_CLASS_CLASSIC,
|
||||
} PackageEntryFileTlsClass;
|
||||
|
||||
typedef enum {
|
||||
FILE_COMPAT_ARCH_NONE,
|
||||
FILE_COMPAT_ARCH_NATIVE,
|
||||
@@ -313,7 +302,6 @@ typedef enum {
|
||||
|
||||
typedef struct {
|
||||
unsigned int has_arch : 1;
|
||||
unsigned int has_tls_class : 1;
|
||||
unsigned int installable : 1;
|
||||
unsigned int has_path : 1;
|
||||
unsigned int is_symlink : 1;
|
||||
@@ -368,7 +356,6 @@ typedef struct __package_entry {
|
||||
|
||||
PackageEntryFileCapabilities caps;
|
||||
PackageEntryFileType type;
|
||||
PackageEntryFileTlsClass tls_class;
|
||||
PackageEntryFileCompatArch compat_arch;
|
||||
PackageEntryFileGLVND glvnd;
|
||||
int inherit_path_depth;
|
||||
@@ -449,17 +436,10 @@ typedef struct __package {
|
||||
#define NV_LINE_LEN 1024
|
||||
#define NV_MIN_LINE_LEN 256
|
||||
|
||||
#define TLS_LIB_TYPE_FORCED 0x0001
|
||||
#define TLS_LIB_NEW_TLS 0x0002
|
||||
#define TLS_LIB_CLASSIC_TLS 0x0004
|
||||
|
||||
#define SELINUX_DEFAULT 0x0000
|
||||
#define SELINUX_FORCE_YES 0x0001
|
||||
#define SELINUX_FORCE_NO 0x0002
|
||||
|
||||
#define FORCE_CLASSIC_TLS (TLS_LIB_CLASSIC_TLS | TLS_LIB_TYPE_FORCED)
|
||||
#define FORCE_NEW_TLS (TLS_LIB_NEW_TLS | TLS_LIB_TYPE_FORCED)
|
||||
|
||||
#define PERM_MASK (S_IRWXU|S_IRWXG|S_IRWXO)
|
||||
|
||||
#define PRECOMPILED_PACKAGE_FILENAME "nvidia-precompiled"
|
||||
@@ -561,7 +541,6 @@ void add_package_entry(Package *p,
|
||||
char *target,
|
||||
char *dst,
|
||||
PackageEntryFileType type,
|
||||
PackageEntryFileTlsClass tls_class,
|
||||
PackageEntryFileCompatArch compat_arch,
|
||||
PackageEntryFileGLVND glvnd,
|
||||
mode_t mode);
|
||||
|
@@ -360,26 +360,6 @@ static const NVGetoptOption __options[] = {
|
||||
"needed if other means of loading the NVIDIA kernel module and creating "
|
||||
"the NVIDIA device files are unavailable." },
|
||||
|
||||
#if defined(NV_TLS_TEST)
|
||||
{ "force-tls", FORCE_TLS_OPTION, NVGETOPT_STRING_ARGUMENT, NULL,
|
||||
"NVIDIA's OpenGL libraries are compiled with one of two "
|
||||
"different thread local storage (TLS) mechanisms: 'classic tls' "
|
||||
"which is used on systems with glibc 2.2 or older, and 'new tls' "
|
||||
"which is used on systems with tls-enabled glibc 2.3 or newer. "
|
||||
"nvidia-installer will select the OpenGL libraries appropriate "
|
||||
"for your system; however, you may use this option to force the "
|
||||
"installer to install one library type or another. Valid values "
|
||||
"for &FORCE-TLS& are 'new' and 'classic'." },
|
||||
|
||||
#if defined(NV_X86_64)
|
||||
{ "force-tls-compat32", FORCE_TLS_COMPAT32_OPTION,
|
||||
NVGETOPT_STRING_ARGUMENT, NULL,
|
||||
"This option forces the installer to install a specific "
|
||||
"32bit compatibility OpenGL TLS library; further details "
|
||||
"can be found in the description of the '--force-tls' option." },
|
||||
#endif /* NV_X86_64 */
|
||||
#endif
|
||||
|
||||
{ "kernel-name", 'k', NVGETOPT_STRING_ARGUMENT, NULL,
|
||||
"Build and install the NVIDIA kernel module for the "
|
||||
"non-running kernel specified by &KERNEL-NAME& (&KERNEL-NAME& "
|
||||
@@ -689,6 +669,9 @@ static const NVGetoptOption __options[] = {
|
||||
{ "no-runlevel-check", NO_RUNLEVEL_CHECK_OPTION, 0, NULL, NULL },
|
||||
{ "install-vdpau-wrapper", INSTALL_VDPAU_WRAPPER_OPTION, NVGETOPT_IS_BOOLEAN, NULL, NULL },
|
||||
{ "no-network", 'N', 0, NULL, NULL },
|
||||
{ "force-tls", FORCE_TLS_OPTION, NVGETOPT_STRING_ARGUMENT, NULL, NULL },
|
||||
{ "force-tls-compat32", FORCE_TLS_COMPAT32_OPTION, NVGETOPT_STRING_ARGUMENT,
|
||||
NULL, NULL },
|
||||
|
||||
{ NULL, 0, 0, NULL, NULL },
|
||||
};
|
||||
|
47
tls_test.c
47
tls_test.c
@@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Trivial __thread variable test.
|
||||
*
|
||||
* Gareth Hughes <gareth@nvidia.com>
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <dlfcn.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void seghandle(int bar);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
void *handle;
|
||||
int (*func)(void);
|
||||
|
||||
signal(SIGSEGV, seghandle);
|
||||
|
||||
if (argc != 2) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
handle = dlopen(argv[1], RTLD_NOW);
|
||||
if (!handle) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
func = dlsym(handle, "getTLSVar");
|
||||
if (!func) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
func();
|
||||
|
||||
if (dlclose(handle) != 0) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void seghandle(int bar)
|
||||
{
|
||||
exit(1);
|
||||
}
|
Binary file not shown.
Binary file not shown.
@@ -1,7 +0,0 @@
|
||||
static __thread int foo;
|
||||
|
||||
int getTLSVar(void)
|
||||
{
|
||||
foo = 0;
|
||||
return foo;
|
||||
}
|
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
NVIDIA_VERSION = 410.73
|
||||
NVIDIA_VERSION = 415.13
|
||||
|
Reference in New Issue
Block a user