On Wed, Apr 01, 2020 at 10:29:13AM -0700, Fangrui Song wrote:
> Accepting ET_EXEC as an input file is an extremely rare GNU ld feature
> that lld does not intend to support, because this is error-prone.
> 
> See Linux kernel commit 90ceddcb495008ac8ba7a3dce297841efcd7d584 for
> another use of the dd trick.
> 
> --
> Changes v1 -> v2
> * Add status=none to the dd command line. This suppresses dd's stderr output.
> * Move dd command to a separate command
> 
> Signed-off-by: Fangrui Song <mask...@google.com>
> ---
>  Makefile | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/Makefile b/Makefile
> index 5f7d537..118dec0 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -177,10 +177,14 @@ $(OUT)romlayout32seg.lds $(OUT)romlayout32flat.lds 
> $(OUT)code32flat.o $(OUT)code
>  $(OUT)rom16.o: $(OUT)code16.o $(OUT)romlayout16.lds
>       @echo "  Linking $@"
>       $(Q)$(LD) -T $(OUT)romlayout16.lds $< -o $@
> +     # Change e_type to ET_REL so that it can be used to link rom.o.
> +     # Unlike GNU ld, lld does not allow an ET_EXEC input.
> +     printf '\1' | dd of=$@ conv=notrunc bs=1 seek=16 status=none
>  
>  $(OUT)rom32seg.o: $(OUT)code32seg.o $(OUT)romlayout32seg.lds
>       @echo "  Linking $@"
>       $(Q)$(LD) -T $(OUT)romlayout32seg.lds $< -o $@
> +     printf '\1' | dd of=$@ conv=notrunc bs=1 seek=16 status=none

My high-level feedback is that the above is very fragile.  I'd be
reluctant to adopt that hack.  What is the underlying issue that needs
to be addressed?

-Kevin


>  
>  $(OUT)rom.o: $(OUT)rom16.strip.o $(OUT)rom32seg.strip.o $(OUT)code32flat.o 
> $(OUT)romlayout32flat.lds
>       @echo "  Linking $@"
> -- 
> 2.26.0.rc2.310.g2932bb562d-goog
> _______________________________________________
> SeaBIOS mailing list -- seabios@seabios.org
> To unsubscribe send an email to seabios-le...@seabios.org
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to