Files
Nelson Chu 9b9b1092f0 RISC-V: PR27916, Support mapping symbols.
Similar to ARM/AARCH64, we add mapping symbols in the symbol table,
to mark the start addresses of data and instructions.  The $d means
data, and the $x means instruction.  Then the disassembler uses these
symbols to decide whether we should dump data or instruction.

Consider the mapping-04 test case,
$ cat tmp.s
  .text
  .option norelax
  .option norvc
  .fill 2, 4, 0x1001
  .byte 1
  .word 0
  .balign 8
  add a0, a0, a0
  .fill 5, 2, 0x2002
  add a1, a1, a1
  .data
  .word 0x1             # No need to add mapping symbols.
  .word 0x2

$ riscv64-unknown-elf-as tmp.s -o tmp.o
$ riscv64-unknown-elf-objdump -d tmp.o

Disassembly of section .text:

0000000000000000 <.text>:
   0:   00001001         .word   0x00001001  # Marked $d, .fill directive.
   4:   00001001         .word   0x00001001
   8:   00000001         .word   0x00000001  # .byte + part of .word.
   c:   00               .byte   0x00        # remaining .word.
   d:   00               .byte   0x00        # Marked $d, odd byte of alignment.
   e:   0001             nop                 # Marked $x, nops for alignment.
  10:   00a50533         add     a0,a0,a0
  14:   20022002         .word   0x20022002  # Marked $d, .fill directive.
  18:   20022002         .word   0x20022002
  1c:   2002             .short  0x2002
  1e:   00b585b3         add     a1,a1,a1    # Marked $x.
  22:   0001             nop                 # Section tail alignment.
  24:   00000013         nop

* Use $d and $x to mark the distribution of data and instructions.
  Alignments of code are recognized as instructions, since we usually
  fill nops for them.

* If the alignment have odd bytes, then we cannot just fill the nops
  into the spaces.  We always fill an odd byte 0x00 at the start of
  the spaces.  Therefore, add a $d mapping symbol for the odd byte,
  to tell disassembler that it isn't an instruction.  The behavior
  is same as Arm and Aarch64.

The elf/linux toolchain regressions all passed.  Besides, I also
disable the mapping symbols internally, but use the new objudmp, the
regressions passed, too.  Therefore, the new objudmp should dump
the objects corretly, even if they don't have any mapping symbols.

bfd/
	pr 27916
	* cpu-riscv.c (riscv_elf_is_mapping_symbols): Define mapping symbols.
	* cpu-riscv.h: extern riscv_elf_is_mapping_symbols.
	* elfnn-riscv.c (riscv_maybe_function_sym): Do not choose mapping
	symbols as a function name.
	(riscv_elf_is_target_special_symbol): Add mapping symbols.
binutils/
	pr 27916
	* testsuite/binutils-all/readelf.s: Updated.
	* testsuite/binutils-all/readelf.s-64: Likewise.
	* testsuite/binutils-all/readelf.s-64-unused: Likewise.
	* testsuite/binutils-all/readelf.ss: Likewise.
	* testsuite/binutils-all/readelf.ss-64: Likewise.
	* testsuite/binutils-all/readelf.ss-64-unused: Likewise.
gas/
	pr 27916
	* config/tc-riscv.c (make_mapping_symbol): Create a new mapping symbol.
	(riscv_mapping_state): Decide whether to create mapping symbol for
	frag_now.  Only add the mapping symbols to text sections.
	(riscv_add_odd_padding_symbol): Add the mapping symbols for the
	riscv_handle_align, which have odd bytes spaces.
	(riscv_check_mapping_symbols): Remove any excess mapping symbols.
	(md_assemble): Marked as MAP_INSN.
	(riscv_frag_align_code): Marked as MAP_INSN.
	(riscv_init_frag): Add mapping symbols for frag, it usually called
	by frag_var.  Marked as MAP_DATA for rs_align and rs_fill, and
	marked as MAP_INSN for rs_align_code.
	(s_riscv_insn): Marked as MAP_INSN.
	(riscv_adjust_symtab): Call riscv_check_mapping_symbols.
	* config/tc-riscv.h (md_cons_align): Defined to riscv_mapping_state
	with MAP_DATA.
	(TC_SEGMENT_INFO_TYPE): Record mapping state for each segment.
	(TC_FRAG_TYPE): Record the first and last mapping symbols for the
	fragments.  The first mapping symbol must be placed at the start
	of the fragment.
	(TC_FRAG_INIT): Defined to riscv_init_frag.
	* testsuite/gas/riscv/mapping-01.s: New testcase.
	* testsuite/gas/riscv/mapping-01a.d: Likewise.
	* testsuite/gas/riscv/mapping-01b.d: Likewise.
	* testsuite/gas/riscv/mapping-02.s: Likewise.
	* testsuite/gas/riscv/mapping-02a.d: Likewise.
	* testsuite/gas/riscv/mapping-02b.d: Likewise.
	* testsuite/gas/riscv/mapping-03.s: Likewise.
	* testsuite/gas/riscv/mapping-03a.d: Likewise.
	* testsuite/gas/riscv/mapping-03b.d: Likewise.
	* testsuite/gas/riscv/mapping-04.s: Likewise.
	* testsuite/gas/riscv/mapping-04a.d: Likewise.
	* testsuite/gas/riscv/mapping-04b.d: Likewise.
	* testsuite/gas/riscv/mapping-norelax-04a.d: Likewise.
	* testsuite/gas/riscv/mapping-norelax-04b.d: Likewise.
	* testsuite/gas/riscv/no-relax-align.d: Updated.
	* testsuite/gas/riscv/no-relax-align-2.d: Likewise.
include/
	pr 27916
	* opcode/riscv.h (enum riscv_seg_mstate): Added.

opcodes/
	pr 27916
	* riscv-dis.c (last_map_symbol, last_stop_offset, last_map_state):
	Added to dump sections with mapping symbols.
	(riscv_get_map_state): Get the mapping state from the symbol.
	(riscv_search_mapping_symbol): Check the sorted symbol table, and
	then find the suitable mapping symbol.
	(riscv_data_length): Decide which data size we should print.
	(riscv_disassemble_data): Dump the data contents.
	(print_insn_riscv): Handle the mapping symbols.
	(riscv_symbol_is_valid): Marked mapping symbols as invalid.
2021-08-30 17:36:11 +08:00
..
2021-08-06 23:06:53 +09:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2020-01-01 18:12:08 +10:30
2021-01-01 10:31:02 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-07-30 15:08:55 +09:30
2021-03-31 10:49:23 +10:30
2021-08-13 11:50:05 +09:30
2021-04-08 00:46:48 -04:00
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-07-10 13:29:04 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-05-03 15:34:17 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-05-13 10:18:44 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-07-08 18:14:31 -07:00
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-05-22 17:23:24 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-07-14 21:40:05 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-07-30 15:08:55 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-08-06 23:06:53 +09:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30
2021-08-30 00:00:06 +00:00
2021-03-31 10:49:23 +10:30
2021-03-31 10:49:23 +10:30
2021-05-22 17:23:24 +09:30
2021-03-31 10:49:23 +10:30
2021-04-05 15:27:37 +09:30
2021-03-31 10:49:23 +10:30

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

BFD is an object file library.  It permits applications to use the
same routines to process object files regardless of their format.

BFD is used by the GNU debugger, assembler, linker, and the binary
utilities.

The documentation on using BFD is scanty and may be occasionally
incorrect.  Pointers to documentation problems, or an entirely
rewritten manual, would be appreciated.

There is some BFD internals documentation in doc/bfdint.texi which may
help programmers who want to modify BFD.

BFD is normally built as part of another package.  See the build
instructions for that package, probably in a README file in the
appropriate directory.

BFD supports the following configure options:

  --target=TARGET
	The default target for which to build the library.  TARGET is
	a configuration target triplet, such as sparc-sun-solaris.
  --enable-targets=TARGET,TARGET,TARGET...
	Additional targets the library should support.  To include
	support for all known targets, use --enable-targets=all.
  --enable-64-bit-bfd
	Include support for 64 bit targets.  This is automatically
	turned on if you explicitly request a 64 bit target, but not
	for --enable-targets=all.  This requires a compiler with a 64
	bit integer type, such as gcc.
  --enable-shared
	Build BFD as a shared library.
  --with-mmap
	Use mmap when accessing files.  This is faster on some hosts,
	but slower on others.  It may not work on all hosts.

Report bugs with BFD to bug-binutils@gnu.org.

Patches are encouraged.  When sending patches, always send the output
of diff -u or diff -c from the original file to the new file.  Do not
send default diff output.  Do not make the diff from the new file to
the original file.  Remember that any patch must not break other
systems.  Remember that BFD must support cross compilation from any
host to any target, so patches which use ``#ifdef HOST'' are not
acceptable.  Please also read the ``Reporting Bugs'' section of the
gcc manual.

Bug reports without patches will be remembered, but they may never get
fixed until somebody volunteers to fix them.

Copyright (C) 2012-2021 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.