| From 31e655d2b5f66e772d9714422b7332bbaa60d2e6 Mon Sep 17 00:00:00 2001 |
| From: Peter Jones <pjones@redhat.com> |
| Date: Mon, 6 Feb 2017 14:41:58 -0500 |
| Subject: [PATCH 2/2] New gcc version, new way symbol versioning breaks. |
| |
| Apparently I get to redo this every time there's a compiler release. |
| Yaaaaaay. |
| |
| Anyway, the current method is to define the two compat things from the |
| land before time as @libefivar.so.0 symbols and list them there in the |
| link map. Then we have the real one defined with another name, and set |
| as efi_set_variable@@LIBEFIVAR_0.24. Then to make there actually be a |
| efi_set_variable symbol to link against, we create it as a weak alias. |
| |
| This is all completely absurd. |
| |
| Signed-off-by: Peter Jones <pjones@redhat.com> |
| --- |
| src/lib.c | 17 ++++++++++++----- |
| 1 file changed, 12 insertions(+), 5 deletions(-) |
| |
| diff --git a/src/lib.c b/src/lib.c |
| index 6a9b392..afa7d94 100644 |
| --- a/src/lib.c |
| +++ b/src/lib.c |
| @@ -49,7 +49,7 @@ _efi_set_variable(efi_guid_t guid, const char *name, uint8_t *data, |
| { |
| return ops->set_variable(guid, name, data, data_size, attributes, 0600); |
| } |
| -__asm__(".symver _efi_set_variable,_efi_set_variable@"); |
| +__asm__(".symver _efi_set_variable,_efi_set_variable@libefivar.so.0"); |
| |
| int |
| __attribute__((__nonnull__ (2, 3))) |
| @@ -59,17 +59,24 @@ _efi_set_variable_variadic(efi_guid_t guid, const char *name, uint8_t *data, |
| { |
| return ops->set_variable(guid, name, data, data_size, attributes, 0600); |
| } |
| -__asm__(".symver _efi_set_variable_variadic,efi_set_variable@"); |
| +__asm__(".symver _efi_set_variable_variadic,efi_set_variable@libefivar.so.0"); |
| |
| int |
| __attribute__((__nonnull__ (2, 3))) |
| __attribute__((__visibility__ ("default"))) |
| -efi_set_variable(efi_guid_t guid, const char *name, uint8_t *data, |
| - size_t data_size, uint32_t attributes, mode_t mode) |
| +_efi_set_variable_mode(efi_guid_t guid, const char *name, uint8_t *data, |
| + size_t data_size, uint32_t attributes, mode_t mode) |
| { |
| return ops->set_variable(guid, name, data, data_size, attributes, mode); |
| } |
| -__asm__(".symver efi_set_variable,efi_set_variable@@LIBEFIVAR_0.24"); |
| +__asm__(".symver _efi_set_variable_mode,efi_set_variable@@LIBEFIVAR_0.24"); |
| + |
| +int |
| +__attribute__((__nonnull__ (2, 3))) |
| +__attribute__((__visibility__ ("default"))) |
| +efi_set_variable(efi_guid_t guid, const char *name, uint8_t *data, |
| + size_t data_size, uint32_t attributes, mode_t mode) |
| + __attribute((weak, alias ("_efi_set_variable_mode"))); |
| |
| int |
| __attribute__((__nonnull__ (2, 3))) |
| -- |
| 2.12.2 |
| |