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 maskray@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-leave@seabios.org