|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
From 3112397f3b7b59f8e9089143965d889165c16d13 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
From: Josh Poimboeuf <jpoimboe@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
Date: Mon, 6 Jun 2022 17:05:41 -0700
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
Subject: [PATCH] create-diff-object: Create missing section symbol
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
Recent toolchains only create a section symbol if it's needed, i.e. if
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
there's a reference to it. If there's a missing section symbol in
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
kpatch_create_intermediate_sections(), create one instead of erroring
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
out.
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
Fixes #1272.
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
---
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
kpatch-build/create-diff-object.c | 21 ++++++++++++++++-----
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
1 file changed, 16 insertions(+), 5 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
index 319ed68d..420d55d8 100644
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
--- a/kpatch-build/create-diff-object.c
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+++ b/kpatch-build/create-diff-object.c
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
@@ -3397,12 +3397,23 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
/* add rela to fill in krelas[index].dest field */
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
ALLOC_LINK(rela2, &krela_sec->rela->relas);
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
- if (sec->base->secsym)
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
- rela2->sym = sec->base->secsym;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
- else
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
- ERROR("can't create dynrela for section %s (symbol %s): no bundled or section symbol",
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
- sec->name, rela->sym->name);
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ if (!sec->base->secsym) {
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ struct symbol *sym;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ /*
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ * Newer toolchains are stingy with their
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ * section symbols, create one if it doesn't
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ * exist already.
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ ALLOC_LINK(sym, &kelf->symbols);
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sym->sec = sec->base;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sym->sym.st_info = GELF_ST_INFO(STB_LOCAL, STT_SECTION);
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sym->type = STT_SECTION;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sym->bind = STB_LOCAL;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sym->name = sec->base->name;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ sec->base->secsym = sym;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
+ rela2->sym = sec->base->secsym;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
rela2->type = absolute_rela_type(kelf);
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
rela2->addend = rela->offset;
|
|
![](https://seccdn.libravatar.org/avatar/fd810b62950cc276bea6dfd556fddb46f443946a2cb6243830c798dc8682dd7c?s=16&d=retro) |
d1c008 |
rela2->offset = (unsigned int)(index * sizeof(*krelas) + \
|