gold patch committed (Was: Re: Help needed to track down bug: linking Linux kernel with gold creates unbootable kernel)

H.J. Lu hjl.tools@gmail.com
Fri Apr 23 12:44:00 GMT 2010


On Thu, Apr 22, 2010 at 9:49 PM, Ian Lance Taylor <iant@google.com> wrote:
> John Reiser <jreiser@bitwagon.com> writes:
>
>>> Linux kernel linker scripts needs to align .rodata section to 2MB:
>>>
>>> . = ALIGN((1<<  21));
>>>
>>> Since gold can only align to 4K, gold can't be used on Linux
>>> kernel.
>>
>> The linker script statement ". = ALIGN((1<<  21));" requires alignment
>> to 2 MiB.  If gold "can only align to 4 KiB", then gold must emit an
>> error message upon processing input that requires a larger alignment.
>> It is a bug that current gold does not emit such a message for this case.
>
> The problem is that the alignment requested by the linker script is
> not reflected in the linker output.  That actually appears to be true
> of the GNU linker as well.  Logically, an alignment requested in the
> linker script should be reflected in the program segments.
>
> I committed this patch to make an alignment requested in the linker
> script be reflected in the p_align field of the generated program
> headers.  I don't know if this actually fixes the problem, but it
> seems like the right thing to do.
>

It can get quite complicated. What if there is an input with

---
	.text
	.p2align 23
foo:
	nop
---

I think the best linker can do is to issue an error.



-- 
H.J.



More information about the Binutils mailing list