<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#467886;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Relevant bug report: <a href="https://sourceware.org/bugzilla/show_bug.cgi?id=31318">
https://sourceware.org/bugzilla/show_bug.cgi?id=31318</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">With high addresses, these relocations can be truncated. In these cases,<o:p></o:p></p>
<p class="MsoNormal">throw an error instead of silently truncating.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">bfd/<o:p></o:p></p>
<p class="MsoNormal"> * elfnn-riscv.c (perform_relocation): Check for overflow.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">ld/<o:p></o:p></p>
<p class="MsoNormal"> * ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.<o:p></o:p></p>
<p class="MsoNormal"> * ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d:<o:p></o:p></p>
<p class="MsoNormal"> New test case.<o:p></o:p></p>
<p class="MsoNormal">---<o:p></o:p></p>
<p class="MsoNormal">bfd/elfnn-riscv.c | 3 +++<o:p></o:p></p>
<p class="MsoNormal">ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d | 4 ++++<o:p></o:p></p>
<p class="MsoNormal">ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 1 +<o:p></o:p></p>
<p class="MsoNormal">3 files changed, 8 insertions(+)<o:p></o:p></p>
<p class="MsoNormal">create mode 100644 ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c<o:p></o:p></p>
<p class="MsoNormal">index 8b27e3b8d6a..975b40e5f53 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/bfd/elfnn-riscv.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/bfd/elfnn-riscv.c<o:p></o:p></p>
<p class="MsoNormal">@@ -1865,6 +1865,9 @@ perform_relocation (const reloc_howto_type *howto,<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> case R_RISCV_32:<o:p></o:p></p>
<p class="MsoNormal">+ if (value & ~howto->dst_mask)<o:p></o:p></p>
<p class="MsoNormal">+ return bfd_reloc_overflow;<o:p></o:p></p>
<p class="MsoNormal">+ break;<o:p></o:p></p>
<p class="MsoNormal"> case R_RISCV_64:<o:p></o:p></p>
<p class="MsoNormal"> case R_RISCV_ADD8:<o:p></o:p></p>
<p class="MsoNormal"> case R_RISCV_ADD16:<o:p></o:p></p>
<p class="MsoNormal">diff --git a/ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d b/ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d<o:p></o:p></p>
<p class="MsoNormal">new file mode 100644<o:p></o:p></p>
<p class="MsoNormal">index 00000000000..925d1cdb662<o:p></o:p></p>
<p class="MsoNormal">--- /dev/null<o:p></o:p></p>
<p class="MsoNormal">+++ b/ld/testsuite/ld-riscv-elf/data-reloc-rv64-abs32-truncation.d<o:p></o:p></p>
<p class="MsoNormal">@@ -0,0 +1,4 @@<o:p></o:p></p>
<p class="MsoNormal">+#source: data-reloc.s<o:p></o:p></p>
<p class="MsoNormal">+#as: -march=rv64i -mabi=lp64 -defsym __abs__=1<o:p></o:p></p>
<p class="MsoNormal">+#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0xc00000100 --defsym abs_local=0x200<o:p></o:p></p>
<p class="MsoNormal">+#error: .*relocation truncated to fit: R_RISCV_32<o:p></o:p></p>
<p class="MsoNormal">diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp<o:p></o:p></p>
<p class="MsoNormal">index 7e1281d826b..5a4d8728366 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp<o:p></o:p></p>
<p class="MsoNormal">+++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp<o:p></o:p></p>
<p class="MsoNormal">@@ -175,6 +175,7 @@ if [istarget "riscv*-*-*"] {<o:p></o:p></p>
<p class="MsoNormal"> run_dump_test "uleb128"<o:p></o:p></p>
<p class="MsoNormal"> run_dump_test "pr31179"<o:p></o:p></p>
<p class="MsoNormal"> run_dump_test "pr31179-r"<o:p></o:p></p>
<p class="MsoNormal">+ run_dump_test "data-reloc-rv64-abs32-truncation"<o:p></o:p></p>
<p class="MsoNormal"> run_ld_link_tests [list \<o:p></o:p></p>
<p class="MsoNormal"> [list "Weak reference 32" "-T weakref.ld -m[riscv_choose_ilp32_emul]" "" \<o:p></o:p></p>
<p class="MsoNormal"> "-march=rv32i -mabi=ilp32" {weakref32.s} \<o:p></o:p></p>
<p class="MsoNormal">--<o:p></o:p></p>
<p class="MsoNormal">2<o:p></o:p></p>
</div>
</body>
</html>