public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705]
@ 2022-06-02  4:20 Fangrui Song
  2022-06-22 17:58 ` Fangrui Song
  2022-06-23  7:58 ` Szabolcs Nagy
  0 siblings, 2 replies; 3+ messages in thread
From: Fangrui Song @ 2022-06-02  4:20 UTC (permalink / raw)
  To: binutils, Szabolcs Nagy; +Cc: Fangrui Song

If an executable has copy relocations for extern protected data, that
can only work if the library containing the definition is built with
assumptions (a) the compiler emits GOT-generating relocations (b) the
linker produces R_*_GLOB_DAT instead of R_*_RELATIVE.  Otherwise the
library uses its own definition directly and the executable accesses a
stale copy.

Commit 32f573bcb3aaa1c9defcad79dbb5851fcc02ae2d changed ld to produce
R_AARCH64_GLOB_DAT but that defeated the purpose of protected visibility
as an optimization.  Restore the previous behavior (which matches
ld.lld) by defining elf_backend_extern_protected_data to 0.
---
 bfd/elfnn-aarch64.c                      | 2 +-
 ld/testsuite/ld-aarch64/protected-data.d | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 4926bab9cf2..cb316a928ef 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -10090,7 +10090,7 @@ const struct elf_size_info elfNN_aarch64_size_info =
 #define elf_backend_dtrel_excludes_plt 1
 #define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
 #define elf_backend_default_execstack  0
-#define elf_backend_extern_protected_data 1
+#define elf_backend_extern_protected_data 0
 #define elf_backend_hash_symbol elf_aarch64_hash_symbol
 
 #undef	elf_backend_obj_attrs_section
diff --git a/ld/testsuite/ld-aarch64/protected-data.d b/ld/testsuite/ld-aarch64/protected-data.d
index 5dabf04748c..ee9b4cfc6b5 100644
--- a/ld/testsuite/ld-aarch64/protected-data.d
+++ b/ld/testsuite/ld-aarch64/protected-data.d
@@ -2,4 +2,4 @@
 #ld: -shared
 #readelf: -r -W
 #...
-.* R_AARCH64_GLOB_DAT .* var.*
+.* R_AARCH64_RELATIVE .*
-- 
2.36.1.255.ge46751e96f-goog


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705]
  2022-06-02  4:20 [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705] Fangrui Song
@ 2022-06-22 17:58 ` Fangrui Song
  2022-06-23  7:58 ` Szabolcs Nagy
  1 sibling, 0 replies; 3+ messages in thread
From: Fangrui Song @ 2022-06-22 17:58 UTC (permalink / raw)
  To: binutils, Szabolcs Nagy, Nick Clifton

On Wed, Jun 1, 2022 at 9:21 PM Fangrui Song <maskray@google.com> wrote:
>
> If an executable has copy relocations for extern protected data, that
> can only work if the library containing the definition is built with
> assumptions (a) the compiler emits GOT-generating relocations (b) the
> linker produces R_*_GLOB_DAT instead of R_*_RELATIVE.  Otherwise the
> library uses its own definition directly and the executable accesses a
> stale copy.
>
> Commit 32f573bcb3aaa1c9defcad79dbb5851fcc02ae2d changed ld to produce
> R_AARCH64_GLOB_DAT but that defeated the purpose of protected visibility
> as an optimization.  Restore the previous behavior (which matches
> ld.lld) by defining elf_backend_extern_protected_data to 0.
> ---
>  bfd/elfnn-aarch64.c                      | 2 +-
>  ld/testsuite/ld-aarch64/protected-data.d | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
> index 4926bab9cf2..cb316a928ef 100644
> --- a/bfd/elfnn-aarch64.c
> +++ b/bfd/elfnn-aarch64.c
> @@ -10090,7 +10090,7 @@ const struct elf_size_info elfNN_aarch64_size_info =
>  #define elf_backend_dtrel_excludes_plt 1
>  #define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
>  #define elf_backend_default_execstack  0
> -#define elf_backend_extern_protected_data 1
> +#define elf_backend_extern_protected_data 0
>  #define elf_backend_hash_symbol elf_aarch64_hash_symbol
>
>  #undef elf_backend_obj_attrs_section
> diff --git a/ld/testsuite/ld-aarch64/protected-data.d b/ld/testsuite/ld-aarch64/protected-data.d
> index 5dabf04748c..ee9b4cfc6b5 100644
> --- a/ld/testsuite/ld-aarch64/protected-data.d
> +++ b/ld/testsuite/ld-aarch64/protected-data.d
> @@ -2,4 +2,4 @@
>  #ld: -shared
>  #readelf: -r -W
>  #...
> -.* R_AARCH64_GLOB_DAT .* var.*
> +.* R_AARCH64_RELATIVE .*
> --
> 2.36.1.255.ge46751e96f-goog
>

:)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705]
  2022-06-02  4:20 [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705] Fangrui Song
  2022-06-22 17:58 ` Fangrui Song
@ 2022-06-23  7:58 ` Szabolcs Nagy
  1 sibling, 0 replies; 3+ messages in thread
From: Szabolcs Nagy @ 2022-06-23  7:58 UTC (permalink / raw)
  To: Fangrui Song; +Cc: binutils

The 06/01/2022 21:20, Fangrui Song wrote:
> If an executable has copy relocations for extern protected data, that
> can only work if the library containing the definition is built with
> assumptions (a) the compiler emits GOT-generating relocations (b) the
> linker produces R_*_GLOB_DAT instead of R_*_RELATIVE.  Otherwise the
> library uses its own definition directly and the executable accesses a
> stale copy.
> 
> Commit 32f573bcb3aaa1c9defcad79dbb5851fcc02ae2d changed ld to produce
> R_AARCH64_GLOB_DAT but that defeated the purpose of protected visibility
> as an optimization.  Restore the previous behavior (which matches
> ld.lld) by defining elf_backend_extern_protected_data to 0.

This patch looks good to me.
Thanks.

> ---
>  bfd/elfnn-aarch64.c                      | 2 +-
>  ld/testsuite/ld-aarch64/protected-data.d | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
> index 4926bab9cf2..cb316a928ef 100644
> --- a/bfd/elfnn-aarch64.c
> +++ b/bfd/elfnn-aarch64.c
> @@ -10090,7 +10090,7 @@ const struct elf_size_info elfNN_aarch64_size_info =
>  #define elf_backend_dtrel_excludes_plt 1
>  #define elf_backend_got_header_size (GOT_ENTRY_SIZE * 3)
>  #define elf_backend_default_execstack  0
> -#define elf_backend_extern_protected_data 1
> +#define elf_backend_extern_protected_data 0
>  #define elf_backend_hash_symbol elf_aarch64_hash_symbol
>  
>  #undef	elf_backend_obj_attrs_section
> diff --git a/ld/testsuite/ld-aarch64/protected-data.d b/ld/testsuite/ld-aarch64/protected-data.d
> index 5dabf04748c..ee9b4cfc6b5 100644
> --- a/ld/testsuite/ld-aarch64/protected-data.d
> +++ b/ld/testsuite/ld-aarch64/protected-data.d
> @@ -2,4 +2,4 @@
>  #ld: -shared
>  #readelf: -r -W
>  #...
> -.* R_AARCH64_GLOB_DAT .* var.*
> +.* R_AARCH64_RELATIVE .*
> -- 
> 2.36.1.255.ge46751e96f-goog
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-06-23  7:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-02  4:20 [PATCH] aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705] Fangrui Song
2022-06-22 17:58 ` Fangrui Song
2022-06-23  7:58 ` Szabolcs Nagy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).