RISC-V: Document the degree of position independence that medany affords

Message ID 20220118172056.9343-1-palmer@rivosinc.com
State Committed
Commit 8645370af18979123d9e94e3ed215d23dd740721
Headers
Series RISC-V: Document the degree of position independence that medany affords |

Commit Message

Palmer Dabbelt Jan. 18, 2022, 5:20 p.m. UTC
  The code generated by -mcmodel=medany is defined to be
position-independent, but is not guaranteed to function correctly when
linked into position-independent executables or libraries.  See the
recent discussion at the psABI specification [1] for more details.

It would be better to reject these invalid sequences when linking, but
as pointed out in a recent LD bug [2] there may be some compatibility
issues related to the PCREL_HI20 relocations used to initialize GP.
Given the complexity here it's unlikely we'll be able to reject these
sequences any time soon, so instead just document that these may not
work.

[1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/245
[2]: https://sourceware.org/bugzilla/show_bug.cgi?id=28789

gcc/ChangeLog:

	* doc/invoke.texi: Document the degree of position independence
	that -mcmodel=medany affords.

Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>

---

Changes since v1:

* Fix spelling of "guaranteed", twice.
* Reference the binutils bug on rejecting these sequences, for more
  context.
---
 gcc/doc/invoke.texi | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Kito Cheng Jan. 19, 2022, 2:58 a.m. UTC | #1
LGTM, thanks for adding those comments :)

On Wed, Jan 19, 2022 at 1:21 AM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> The code generated by -mcmodel=medany is defined to be
> position-independent, but is not guaranteed to function correctly when
> linked into position-independent executables or libraries.  See the
> recent discussion at the psABI specification [1] for more details.
>
> It would be better to reject these invalid sequences when linking, but
> as pointed out in a recent LD bug [2] there may be some compatibility
> issues related to the PCREL_HI20 relocations used to initialize GP.
> Given the complexity here it's unlikely we'll be able to reject these
> sequences any time soon, so instead just document that these may not
> work.
>
> [1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/245
> [2]: https://sourceware.org/bugzilla/show_bug.cgi?id=28789
>
> gcc/ChangeLog:
>
>         * doc/invoke.texi: Document the degree of position independence
>         that -mcmodel=medany affords.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
>
> ---
>
> Changes since v1:
>
> * Fix spelling of "guaranteed", twice.
> * Reference the binutils bug on rejecting these sequences, for more
>   context.
> ---
>  gcc/doc/invoke.texi | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 5504971ea81..7bca621535f 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -27568,6 +27568,10 @@ Generate code for the medium-any code model. The program and its statically
>  defined symbols must be within any single 2 GiB address range. Programs can be
>  statically or dynamically linked.
>
> +The code generated by the medium-any code model is position-independent, but is
> +not guaranteed to function correctly when linked into position-independent
> +executables or libraries.
> +
>  @item -mexplicit-relocs
>  @itemx -mno-exlicit-relocs
>  Use or do not use assembler relocation operators when dealing with symbolic
> --
> 2.32.0
>
  
Palmer Dabbelt Feb. 24, 2022, 7:33 p.m. UTC | #2
On Tue, 18 Jan 2022 18:58:00 PST (-0800), Kito Cheng wrote:
> LGTM, thanks for adding those comments :)

Committed

>
> On Wed, Jan 19, 2022 at 1:21 AM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>>
>> The code generated by -mcmodel=medany is defined to be
>> position-independent, but is not guaranteed to function correctly when
>> linked into position-independent executables or libraries.  See the
>> recent discussion at the psABI specification [1] for more details.
>>
>> It would be better to reject these invalid sequences when linking, but
>> as pointed out in a recent LD bug [2] there may be some compatibility
>> issues related to the PCREL_HI20 relocations used to initialize GP.
>> Given the complexity here it's unlikely we'll be able to reject these
>> sequences any time soon, so instead just document that these may not
>> work.
>>
>> [1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/245
>> [2]: https://sourceware.org/bugzilla/show_bug.cgi?id=28789
>>
>> gcc/ChangeLog:
>>
>>         * doc/invoke.texi: Document the degree of position independence
>>         that -mcmodel=medany affords.
>>
>> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
>>
>> ---
>>
>> Changes since v1:
>>
>> * Fix spelling of "guaranteed", twice.
>> * Reference the binutils bug on rejecting these sequences, for more
>>   context.
>> ---
>>  gcc/doc/invoke.texi | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
>> index 5504971ea81..7bca621535f 100644
>> --- a/gcc/doc/invoke.texi
>> +++ b/gcc/doc/invoke.texi
>> @@ -27568,6 +27568,10 @@ Generate code for the medium-any code model. The program and its statically
>>  defined symbols must be within any single 2 GiB address range. Programs can be
>>  statically or dynamically linked.
>>
>> +The code generated by the medium-any code model is position-independent, but is
>> +not guaranteed to function correctly when linked into position-independent
>> +executables or libraries.
>> +
>>  @item -mexplicit-relocs
>>  @itemx -mno-exlicit-relocs
>>  Use or do not use assembler relocation operators when dealing with symbolic
>> --
>> 2.32.0
>>
  

Patch

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 5504971ea81..7bca621535f 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -27568,6 +27568,10 @@  Generate code for the medium-any code model. The program and its statically
 defined symbols must be within any single 2 GiB address range. Programs can be
 statically or dynamically linked.
 
+The code generated by the medium-any code model is position-independent, but is
+not guaranteed to function correctly when linked into position-independent
+executables or libraries.
+
 @item -mexplicit-relocs
 @itemx -mno-exlicit-relocs
 Use or do not use assembler relocation operators when dealing with symbolic