On Wed, Apr 01, 2020 at 10:29:14AM -0700, Fangrui Song wrote:
> This improves the portability of the linker script and allows lld to link 
> rom.o
> 
> Dot assignment inside an output section has an inconsistent behavior
> which makes lld difficult to implement.
> See https://bugs.llvm.org/show_bug.cgi?id=43083
> 
> Dropping `. =` turns out to be beneficial to older GNU ld as well
> because we can delete an ld check detecting "cannot move location
> counter backwards".
> 
> Signed-off-by: Fangrui Song <mask...@google.com>
> ---
>  scripts/layoutrom.py | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py
> index 4c55390..94d4412 100755
> --- a/scripts/layoutrom.py
> +++ b/scripts/layoutrom.py
> @@ -339,14 +339,19 @@ def outRelSections(sections, startsym, useseg=0):
>                  if section.finalloc is not None]
>      sections.sort(key=operator.itemgetter(0))
>      out = ""
> +    location = "_reloc_init_end"
>      for addr, section in sections:
>          loc = section.finalloc
>          if useseg:
>              loc = section.finalsegloc
> -        out += ". = ( 0x%x - %s ) ;\n" % (loc, startsym)
> +        if location == "_reloc_init_end":
> +            out += ". += 0x%x - %s ;\n" % (loc, location)
> +        elif location < loc:
> +            out += ". += 0x%x ;\n" % (loc-location,)
>          if section.name in ('.rodata.str1.1', '.rodata'):
>              out += "_rodata%s = . ;\n" % (section.fileid,)
>          out += "*%s.*(%s)\n" % (section.fileid, section.name)
> +        location = loc + section.size

I'm finding this code confusing.  I would recommend "location" always
be a string or always be an integer - mixing them makes the code hard
to follow.  Also, this code removes the only reference to startsym,
but doesn't update the function signature.  Similarly, it hardcodes
"_reloc_init_end" when I think that should be passed to the function.

-Kevin


>      return out
>  
>  # Build linker script output for a list of relocations.
> -- 
> 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