aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2021-01-27 21:28:43 +0000
committerDimitry Andric <dim@FreeBSD.org>2021-01-27 21:28:43 +0000
commit6e26189be406a9a3799074b16925e6cd63cc703b (patch)
tree6cfa676d7b049496462717f92adf860622bfcdb4
parent2fccd4f9b6b96d75de87df4922eb2bf04fb0a67d (diff)
downloadsrc-6e26189be406a9a3799074b16925e6cd63cc703b.tar.gz
src-6e26189be406a9a3799074b16925e6cd63cc703b.zip
Fix loader detection of vbefb support on !amd64
On i386, after 6c7a932d0b8baaaee16eca0ba061bfa6e0e57bfd, the vbefb vt driver was no longer detected by the loader, if any kernel module was loaded after the kernel itself. This was caused by the parse_vt_drv_set() function being called multiple times, resetting the detection flag. (It was called multiple times, becuase i386 .ko files are shared objects like the kernel proper, while this is not the case on amd64.) Fix this by skipping the set_vt_drv_set lookup if vbefb was already detected. Reviewed by: tsoome
-rw-r--r--stand/common/load_elf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/stand/common/load_elf.c b/stand/common/load_elf.c
index 62fdb560ecff..8bb780ef34df 100644
--- a/stand/common/load_elf.c
+++ b/stand/common/load_elf.c
@@ -875,8 +875,8 @@ nosyms:
ef->buckets = ef->hashtab + 2;
ef->chains = ef->buckets + ef->nbuckets;
- gfx_state.tg_kernel_supported = false;
- if (__elfN(lookup_symbol)(ef, "__start_set_vt_drv_set", &sym,
+ if (!gfx_state.tg_kernel_supported &&
+ __elfN(lookup_symbol)(ef, "__start_set_vt_drv_set", &sym,
STT_NOTYPE) == 0) {
p_start = sym.st_value + ef->off;
if (__elfN(lookup_symbol)(ef, "__stop_set_vt_drv_set", &sym,