https://sourceware.org/bugzilla/show_bug.cgi?id=25202

Alex Underwood <alexander.underwood at okstate dot edu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |alexander.underwood@okstate
                   |                            |.edu

--- Comment #2 from Alex Underwood <alexander.underwood at okstate dot edu> ---
Hello,

I can also confirm this bug (still present in 2.37.50), and because the verilog
output functionality is relevant to my work I figured I would take a crack at
fixing it.

As Olof said, the issue does seem to be because the verilog bfd_target uses
BFD_ENDIAN_UNKNOWN, so the little-endianness check in the verilog_write_record
function always fails and falls through to big-endian.  That being said,
verilog_write_record does support big- and little-endian, it just never reaches
the little-endian section.

Seeing that bfd_targets are constants and passing the input bfd's endianness to
the verilog handler would be a huge code change for what only a single format
needs, would the best way to fix this be to create 2 verilog bfd formats?  For
example, a verilog-be and verilog-le format that use BFD_ENDIAN_BIG and
BFD_ENDIAN_LITTLE respectively.  This would leave it up to the user to specify
the correct endianness for their given input bfd but at the same time I feel
would help to alleviate an issue I've seen in several RISC-V projects in
particular that take advantage of this bug and use objcopy as a way of
switching endianness rather than just compiling the original files with the
correct endianness setting at the GCC level.

If that sounds like a reasonable approach, I'll get going on a patch to set
that up.  Though, that does leave the question of what to do with the current
"verilog" target if it ends up split into 2 separate targets.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to