2019-09-26 10:19:18

by Cao jin

[permalink] [raw]
Subject: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

The fields marked with (reloc) actually are not dedicated for writing,
but communicating info for relocatable kernel with boot loaders. For
example:

============ ============
Field name: pref_address
Type: read (reloc)
Offset/size: 0x258/8
Protocol: 2.10+
============ ============

============ ========================
Field name: code32_start
Type: modify (optional, reloc)
Offset/size: 0x214/4
Protocol: 2.00+
============ ========================

Signed-off-by: Cao jin <[email protected]>
---
Unless I have incorrect non-native understanding for "fill in", I think
this is inaccurate.

Documentation/x86/boot.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
index 08a2f100c0e6..a611bf04492d 100644
--- a/Documentation/x86/boot.rst
+++ b/Documentation/x86/boot.rst
@@ -243,7 +243,7 @@ bootloader ("modify").

All general purpose boot loaders should write the fields marked
(obligatory). Boot loaders who want to load the kernel at a
-nonstandard address should fill in the fields marked (reloc); other
+nonstandard address should consult with the fields marked (reloc); other
boot loaders can ignore those fields.

The byte order of all fields is littleendian (this is x86, after all.)
--
2.21.0




2019-09-26 10:21:22

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On September 25, 2019 11:01:39 PM PDT, Ingo Molnar <[email protected]> wrote:
>* Cao jin <[email protected]> wrote:
>
>> The fields marked with (reloc) actually are not dedicated for
>writing,
>> but communicating info for relocatable kernel with boot loaders. For
>> example:
>>
>> ============ ============
>> Field name: pref_address
>> Type: read (reloc)
>> Offset/size: 0x258/8
>> Protocol: 2.10+
>> ============ ============
>>
>> ============ ========================
>> Field name: code32_start
>> Type: modify (optional, reloc)
>> Offset/size: 0x214/4
>> Protocol: 2.00+
>> ============ ========================
>>
>> Signed-off-by: Cao jin <[email protected]>
>> ---
>> Unless I have incorrect non-native understanding for "fill in", I
>think
>> this is inaccurate.
>>
>> Documentation/x86/boot.rst | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
>> index 08a2f100c0e6..a611bf04492d 100644
>> --- a/Documentation/x86/boot.rst
>> +++ b/Documentation/x86/boot.rst
>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>
>> All general purpose boot loaders should write the fields marked
>> (obligatory). Boot loaders who want to load the kernel at a
>> -nonstandard address should fill in the fields marked (reloc); other
>> +nonstandard address should consult with the fields marked (reloc);
>other
>> boot loaders can ignore those fields.
>>
>> The byte order of all fields is littleendian (this is x86, after
>all.)
>
>Well, this documentation is written from the point of view of a
>*bootloader*, not the kernel. So the 'fill in' says that the bootloader
>
>should write those fields - which is correct, right?
>
>Thanks,
>
> Ingo

This is correct.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

2019-09-26 10:23:12

by Ingo Molnar

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

* Cao jin <[email protected]> wrote:

> The fields marked with (reloc) actually are not dedicated for writing,
> but communicating info for relocatable kernel with boot loaders. For
> example:
>
> ============ ============
> Field name: pref_address
> Type: read (reloc)
> Offset/size: 0x258/8
> Protocol: 2.10+
> ============ ============
>
> ============ ========================
> Field name: code32_start
> Type: modify (optional, reloc)
> Offset/size: 0x214/4
> Protocol: 2.00+
> ============ ========================
>
> Signed-off-by: Cao jin <[email protected]>
> ---
> Unless I have incorrect non-native understanding for "fill in", I think
> this is inaccurate.
>
> Documentation/x86/boot.rst | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
> index 08a2f100c0e6..a611bf04492d 100644
> --- a/Documentation/x86/boot.rst
> +++ b/Documentation/x86/boot.rst
> @@ -243,7 +243,7 @@ bootloader ("modify").
>
> All general purpose boot loaders should write the fields marked
> (obligatory). Boot loaders who want to load the kernel at a
> -nonstandard address should fill in the fields marked (reloc); other
> +nonstandard address should consult with the fields marked (reloc); other
> boot loaders can ignore those fields.
>
> The byte order of all fields is littleendian (this is x86, after all.)

Well, this documentation is written from the point of view of a
*bootloader*, not the kernel. So the 'fill in' says that the bootloader
should write those fields - which is correct, right?

Thanks,

Ingo

2019-09-26 10:26:12

by Cao jin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On 9/26/19 2:01 PM, Ingo Molnar wrote:
> * Cao jin <[email protected]> wrote:
>
>> The fields marked with (reloc) actually are not dedicated for writing,
>> but communicating info for relocatable kernel with boot loaders. For
>> example:
>>
>> ============ ============
>> Field name: pref_address
>> Type: read (reloc)
>> Offset/size: 0x258/8
>> Protocol: 2.10+
>> ============ ============
>>
>> ============ ========================
>> Field name: code32_start
>> Type: modify (optional, reloc)
>> Offset/size: 0x214/4
>> Protocol: 2.00+
>> ============ ========================
>>
>> Signed-off-by: Cao jin <[email protected]>
>> ---
>> Unless I have incorrect non-native understanding for "fill in", I think
>> this is inaccurate.
>>
>> Documentation/x86/boot.rst | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
>> index 08a2f100c0e6..a611bf04492d 100644
>> --- a/Documentation/x86/boot.rst
>> +++ b/Documentation/x86/boot.rst
>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>
>> All general purpose boot loaders should write the fields marked
>> (obligatory). Boot loaders who want to load the kernel at a
>> -nonstandard address should fill in the fields marked (reloc); other
>> +nonstandard address should consult with the fields marked (reloc); other
>> boot loaders can ignore those fields.
>>
>> The byte order of all fields is littleendian (this is x86, after all.)
>
> Well, this documentation is written from the point of view of a
> *bootloader*, not the kernel. So the 'fill in' says that the bootloader
> should write those fields - which is correct, right?
>

Take pref_address or relocatable_kernel for example, they have type:
read (reloc), does boot loader need to write them? I don't see grub does
this at least.

--
Sincerely,
Cao jin


2019-09-26 10:58:55

by Cao jin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On 9/26/19 3:58 PM, [email protected] wrote:
> On September 26, 2019 12:55:51 AM PDT, Cao jin <[email protected]> wrote:
>> On 9/26/19 2:01 PM, Ingo Molnar wrote:
>>> * Cao jin <[email protected]> wrote:
>>>
>>>> The fields marked with (reloc) actually are not dedicated for
>> writing,
>>>> but communicating info for relocatable kernel with boot loaders. For
>>>> example:
>>>>
>>>> ============ ============
>>>> Field name: pref_address
>>>> Type: read (reloc)
>>>> Offset/size: 0x258/8
>>>> Protocol: 2.10+
>>>> ============ ============
>>>>
>>>> ============ ========================
>>>> Field name: code32_start
>>>> Type: modify (optional, reloc)
>>>> Offset/size: 0x214/4
>>>> Protocol: 2.00+
>>>> ============ ========================
>>>>
>>>> Signed-off-by: Cao jin <[email protected]>
>>>> ---
>>>> Unless I have incorrect non-native understanding for "fill in", I
>> think
>>>> this is inaccurate.
>>>>
>>>> Documentation/x86/boot.rst | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
>>>> index 08a2f100c0e6..a611bf04492d 100644
>>>> --- a/Documentation/x86/boot.rst
>>>> +++ b/Documentation/x86/boot.rst
>>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>>
>>>> All general purpose boot loaders should write the fields marked
>>>> (obligatory). Boot loaders who want to load the kernel at a
>>>> -nonstandard address should fill in the fields marked (reloc); other
>>>> +nonstandard address should consult with the fields marked (reloc);
>> other
>>>> boot loaders can ignore those fields.
>>>>
>>>> The byte order of all fields is littleendian (this is x86, after
>> all.)
>>>
>>> Well, this documentation is written from the point of view of a
>>> *bootloader*, not the kernel. So the 'fill in' says that the
>> bootloader
>>> should write those fields - which is correct, right?
>>>
>>
>> Take pref_address or relocatable_kernel for example, they have type:
>> read (reloc), does boot loader need to write them? I don't see grub
>> does
>> this at least.
>
> Read means the boot later reads them.
>

Sorry I don't know what is going wrong in my mind. For me, if
pref_address has "read (reloc)", base on the current document, it means
boot loader will read it and also write it, which is conflicting. And
the purpose of pref_address should just inform boot loader that kernel
whats itself to be loaded at certain address, it don't want to be written.

--
Sincerely,
Cao jin


2019-09-26 10:59:19

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On September 26, 2019 12:55:51 AM PDT, Cao jin <[email protected]> wrote:
>On 9/26/19 2:01 PM, Ingo Molnar wrote:
>> * Cao jin <[email protected]> wrote:
>>
>>> The fields marked with (reloc) actually are not dedicated for
>writing,
>>> but communicating info for relocatable kernel with boot loaders. For
>>> example:
>>>
>>> ============ ============
>>> Field name: pref_address
>>> Type: read (reloc)
>>> Offset/size: 0x258/8
>>> Protocol: 2.10+
>>> ============ ============
>>>
>>> ============ ========================
>>> Field name: code32_start
>>> Type: modify (optional, reloc)
>>> Offset/size: 0x214/4
>>> Protocol: 2.00+
>>> ============ ========================
>>>
>>> Signed-off-by: Cao jin <[email protected]>
>>> ---
>>> Unless I have incorrect non-native understanding for "fill in", I
>think
>>> this is inaccurate.
>>>
>>> Documentation/x86/boot.rst | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
>>> index 08a2f100c0e6..a611bf04492d 100644
>>> --- a/Documentation/x86/boot.rst
>>> +++ b/Documentation/x86/boot.rst
>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>
>>> All general purpose boot loaders should write the fields marked
>>> (obligatory). Boot loaders who want to load the kernel at a
>>> -nonstandard address should fill in the fields marked (reloc); other
>>> +nonstandard address should consult with the fields marked (reloc);
>other
>>> boot loaders can ignore those fields.
>>>
>>> The byte order of all fields is littleendian (this is x86, after
>all.)
>>
>> Well, this documentation is written from the point of view of a
>> *bootloader*, not the kernel. So the 'fill in' says that the
>bootloader
>> should write those fields - which is correct, right?
>>
>
>Take pref_address or relocatable_kernel for example, they have type:
>read (reloc), does boot loader need to write them? I don't see grub
>does
>this at least.

Read means the boot later reads them.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

2019-09-26 15:24:51

by Randy Dunlap

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On 9/26/19 12:58 AM, [email protected] wrote:
> On September 26, 2019 12:55:51 AM PDT, Cao jin <[email protected]> wrote:
>> On 9/26/19 2:01 PM, Ingo Molnar wrote:
>>> * Cao jin <[email protected]> wrote:
>>>
>>>> The fields marked with (reloc) actually are not dedicated for
>> writing,
>>>> but communicating info for relocatable kernel with boot loaders. For
>>>> example:
>>>>
>>>> ============ ============
>>>> Field name: pref_address
>>>> Type: read (reloc)
>>>> Offset/size: 0x258/8
>>>> Protocol: 2.10+
>>>> ============ ============
>>>>
>>>> ============ ========================
>>>> Field name: code32_start
>>>> Type: modify (optional, reloc)
>>>> Offset/size: 0x214/4
>>>> Protocol: 2.00+
>>>> ============ ========================
>>>>
>>>> Signed-off-by: Cao jin <[email protected]>
>>>> ---
>>>> Unless I have incorrect non-native understanding for "fill in", I
>> think
>>>> this is inaccurate.
>>>>
>>>> Documentation/x86/boot.rst | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/Documentation/x86/boot.rst b/Documentation/x86/boot.rst
>>>> index 08a2f100c0e6..a611bf04492d 100644
>>>> --- a/Documentation/x86/boot.rst
>>>> +++ b/Documentation/x86/boot.rst
>>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>>
>>>> All general purpose boot loaders should write the fields marked
>>>> (obligatory). Boot loaders who want to load the kernel at a
>>>> -nonstandard address should fill in the fields marked (reloc); other
>>>> +nonstandard address should consult with the fields marked (reloc);
>> other
>>>> boot loaders can ignore those fields.
>>>>
>>>> The byte order of all fields is littleendian (this is x86, after
>> all.)
>>>
>>> Well, this documentation is written from the point of view of a
>>> *bootloader*, not the kernel. So the 'fill in' says that the
>> bootloader
>>> should write those fields - which is correct, right?
>>>
>>
>> Take pref_address or relocatable_kernel for example, they have type:
>> read (reloc), does boot loader need to write them? I don't see grub
>> does
>> this at least.
>
> Read means the boot later reads them.

is that boot loader ??


--
~Randy

2019-09-26 19:20:45

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On September 26, 2019 8:20:28 AM PDT, Randy Dunlap <[email protected]> wrote:
>On 9/26/19 12:58 AM, [email protected] wrote:
>> On September 26, 2019 12:55:51 AM PDT, Cao jin
><[email protected]> wrote:
>>> On 9/26/19 2:01 PM, Ingo Molnar wrote:
>>>> * Cao jin <[email protected]> wrote:
>>>>
>>>>> The fields marked with (reloc) actually are not dedicated for
>>> writing,
>>>>> but communicating info for relocatable kernel with boot loaders.
>For
>>>>> example:
>>>>>
>>>>> ============ ============
>>>>> Field name: pref_address
>>>>> Type: read (reloc)
>>>>> Offset/size: 0x258/8
>>>>> Protocol: 2.10+
>>>>> ============ ============
>>>>>
>>>>> ============ ========================
>>>>> Field name: code32_start
>>>>> Type: modify (optional, reloc)
>>>>> Offset/size: 0x214/4
>>>>> Protocol: 2.00+
>>>>> ============ ========================
>>>>>
>>>>> Signed-off-by: Cao jin <[email protected]>
>>>>> ---
>>>>> Unless I have incorrect non-native understanding for "fill in", I
>>> think
>>>>> this is inaccurate.
>>>>>
>>>>> Documentation/x86/boot.rst | 2 +-
>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/Documentation/x86/boot.rst
>b/Documentation/x86/boot.rst
>>>>> index 08a2f100c0e6..a611bf04492d 100644
>>>>> --- a/Documentation/x86/boot.rst
>>>>> +++ b/Documentation/x86/boot.rst
>>>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>>>
>>>>> All general purpose boot loaders should write the fields marked
>>>>> (obligatory). Boot loaders who want to load the kernel at a
>>>>> -nonstandard address should fill in the fields marked (reloc);
>other
>>>>> +nonstandard address should consult with the fields marked
>(reloc);
>>> other
>>>>> boot loaders can ignore those fields.
>>>>>
>>>>> The byte order of all fields is littleendian (this is x86, after
>>> all.)
>>>>
>>>> Well, this documentation is written from the point of view of a
>>>> *bootloader*, not the kernel. So the 'fill in' says that the
>>> bootloader
>>>> should write those fields - which is correct, right?
>>>>
>>>
>>> Take pref_address or relocatable_kernel for example, they have type:
>>> read (reloc), does boot loader need to write them? I don't see grub
>>> does
>>> this at least.
>>
>> Read means the boot later reads them.
>
>is that boot loader ??

Yes, stupid autocorrect.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

2019-09-26 19:21:17

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On September 26, 2019 1:20:02 AM PDT, Cao jin <[email protected]> wrote:
>On 9/26/19 3:58 PM, [email protected] wrote:
>> On September 26, 2019 12:55:51 AM PDT, Cao jin
><[email protected]> wrote:
>>> On 9/26/19 2:01 PM, Ingo Molnar wrote:
>>>> * Cao jin <[email protected]> wrote:
>>>>
>>>>> The fields marked with (reloc) actually are not dedicated for
>>> writing,
>>>>> but communicating info for relocatable kernel with boot loaders.
>For
>>>>> example:
>>>>>
>>>>> ============ ============
>>>>> Field name: pref_address
>>>>> Type: read (reloc)
>>>>> Offset/size: 0x258/8
>>>>> Protocol: 2.10+
>>>>> ============ ============
>>>>>
>>>>> ============ ========================
>>>>> Field name: code32_start
>>>>> Type: modify (optional, reloc)
>>>>> Offset/size: 0x214/4
>>>>> Protocol: 2.00+
>>>>> ============ ========================
>>>>>
>>>>> Signed-off-by: Cao jin <[email protected]>
>>>>> ---
>>>>> Unless I have incorrect non-native understanding for "fill in", I
>>> think
>>>>> this is inaccurate.
>>>>>
>>>>> Documentation/x86/boot.rst | 2 +-
>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/Documentation/x86/boot.rst
>b/Documentation/x86/boot.rst
>>>>> index 08a2f100c0e6..a611bf04492d 100644
>>>>> --- a/Documentation/x86/boot.rst
>>>>> +++ b/Documentation/x86/boot.rst
>>>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>>>
>>>>> All general purpose boot loaders should write the fields marked
>>>>> (obligatory). Boot loaders who want to load the kernel at a
>>>>> -nonstandard address should fill in the fields marked (reloc);
>other
>>>>> +nonstandard address should consult with the fields marked
>(reloc);
>>> other
>>>>> boot loaders can ignore those fields.
>>>>>
>>>>> The byte order of all fields is littleendian (this is x86, after
>>> all.)
>>>>
>>>> Well, this documentation is written from the point of view of a
>>>> *bootloader*, not the kernel. So the 'fill in' says that the
>>> bootloader
>>>> should write those fields - which is correct, right?
>>>>
>>>
>>> Take pref_address or relocatable_kernel for example, they have type:
>>> read (reloc), does boot loader need to write them? I don't see grub
>>> does
>>> this at least.
>>
>> Read means the boot later reads them.
>>
>
>Sorry I don't know what is going wrong in my mind. For me, if
>pref_address has "read (reloc)", base on the current document, it means
>boot loader will read it and also write it, which is conflicting. And
>the purpose of pref_address should just inform boot loader that kernel
>whats itself to be loaded at certain address, it don't want to be
>written.

read (reloc) means it is information for the boot loader to read, but that it can ignore it completely if it does not want to relocate the kernel.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.

2019-09-27 02:11:21

by Cao jin

[permalink] [raw]
Subject: Re: [RFC PATCH] x86/doc/boot_protocol: Correct the description of "reloc"

On 9/27/19 3:18 AM, [email protected] wrote:
> On September 26, 2019 1:20:02 AM PDT, Cao jin <[email protected]> wrote:
>> On 9/26/19 3:58 PM, [email protected] wrote:
>>> On September 26, 2019 12:55:51 AM PDT, Cao jin
>> <[email protected]> wrote:
>>>> On 9/26/19 2:01 PM, Ingo Molnar wrote:
>>>>> * Cao jin <[email protected]> wrote:
>>>>>
>>>>>> The fields marked with (reloc) actually are not dedicated for
>>>> writing,
>>>>>> but communicating info for relocatable kernel with boot loaders.
>> For
>>>>>> example:
>>>>>>
>>>>>> ============ ============
>>>>>> Field name: pref_address
>>>>>> Type: read (reloc)
>>>>>> Offset/size: 0x258/8
>>>>>> Protocol: 2.10+
>>>>>> ============ ============
>>>>>>
>>>>>> ============ ========================
>>>>>> Field name: code32_start
>>>>>> Type: modify (optional, reloc)
>>>>>> Offset/size: 0x214/4
>>>>>> Protocol: 2.00+
>>>>>> ============ ========================
>>>>>>
>>>>>> Signed-off-by: Cao jin <[email protected]>
>>>>>> ---
>>>>>> Unless I have incorrect non-native understanding for "fill in", I
>>>> think
>>>>>> this is inaccurate.
>>>>>>
>>>>>> Documentation/x86/boot.rst | 2 +-
>>>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/Documentation/x86/boot.rst
>> b/Documentation/x86/boot.rst
>>>>>> index 08a2f100c0e6..a611bf04492d 100644
>>>>>> --- a/Documentation/x86/boot.rst
>>>>>> +++ b/Documentation/x86/boot.rst
>>>>>> @@ -243,7 +243,7 @@ bootloader ("modify").
>>>>>>
>>>>>> All general purpose boot loaders should write the fields marked
>>>>>> (obligatory). Boot loaders who want to load the kernel at a
>>>>>> -nonstandard address should fill in the fields marked (reloc);
>> other
>>>>>> +nonstandard address should consult with the fields marked
>> (reloc);
>>>> other
>>>>>> boot loaders can ignore those fields.
>>>>>>
>>>>>> The byte order of all fields is littleendian (this is x86, after
>>>> all.)
>>>>>
>>>>> Well, this documentation is written from the point of view of a
>>>>> *bootloader*, not the kernel. So the 'fill in' says that the
>>>> bootloader
>>>>> should write those fields - which is correct, right?
>>>>>
>>>>
>>>> Take pref_address or relocatable_kernel for example, they have type:
>>>> read (reloc), does boot loader need to write them? I don't see grub
>>>> does
>>>> this at least.
>>>
>>> Read means the boot later reads them.
>>>
>>
>> Sorry I don't know what is going wrong in my mind. For me, if
>> pref_address has "read (reloc)", base on the current document, it means
>> boot loader will read it and also write it, which is conflicting. And
>> the purpose of pref_address should just inform boot loader that kernel
>> whats itself to be loaded at certain address, it don't want to be
>> written.
>
> read (reloc) means it is information for the boot loader to read, but that it can ignore it completely if it does not want to relocate the kernel.
>

so, "read (reloc)" also means boot loader can't write it, right?

Please bear my verbiage, see protocol explanation for "(reloc)":

"Boot loaders who want to load the kernel at a nonstandard address
should fill in the fields marked (reloc);"

Doesn't the explanation means: if boot loaders want to relocate the
kernel, they should write pref_address?

And while pref_address actually just provide a suggestion to boot
loader, loader could take it or not as you said, but won't write it.
That is why I choose the word "consult with" instead of "fill in".
--
Sincerely,
Cao jin