<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=utf-8">
<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:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle24
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",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;}
/* List Definitions */
@list l0
        {mso-list-id:1728606829;
        mso-list-template-ids:1098533556;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Thanks for the reproducer.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">I think I’ve worked out where your GOT entry is coming from. There is a R_ARM_TARGET2 relocation which takes on a different value based on the target. For Linux targets this defaults to R_ARM_GOT_PREL.
 For embedded systems I think R_ARM_ABS32 is what an embedded build of GNU ld will use.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Can you add -Wl,--target2=abs  to your command line (option is supported by GNU ld and LLD; documented
<a href="https://sourceware.org/binutils/docs/ld/ARM.html">https://sourceware.org/binutils/docs/ld/ARM.html</a>). That should make the GOT unnecessary. Ideally we should add that flag to the bare-metal driver for Arm Targets.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">There is a chance that this will make everything magically work. If the unwinder is expecting R_ARM_TARGET2 to be resolved as R_ARM_ABS32 then even if lld correctly resolves R_ARM_GOT_PREL it won’t
 be what the unwinder is expecting.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">My apologies I don’t have a lot of spare time today to try and see if I can spot anything else.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Peter<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">P.S. I’ve removed the message text from before your previous reply as it exceeded the unmoderated message size limit and I don’t expect too many of them to be around today.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Kacper Kowalski <kacper.s.kowalski@gmail.com>
<br>
<b>Sent:</b> 26 November 2021 11:21<br>
<b>To:</b> Peter Smith <Peter.Smith@arm.com><br>
<b>Cc:</b> Eli Friedman <efriedma@quicinc.com>; llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] Exceptions not working when cross compiling for ARM Cortex M4 with clang and precompiled libraries from ARM GNU GCC Toolchain<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hello Peter, Eli,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I have linked the binary using the verbose option and could see I was missing "crti.o", "crtbegin.o", "crt0.o", "crtend.o" and "crtn.o" object files. GCC from the ARM GNU GCC Toolchain figures it out on its own for the specific architecture,
 even if the "-nostdlib" command line is used. "-nostartfiles" prevents it from linking those object files on its own.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">After linking "crt*" objects for the Clang build the error recurred. I get the "got" section with one entry and the exceptions are not working properly. I am able to use the same set of arguments for GCC, though, except the "--target" option.
 Linking the final executable with Clang:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">> /home/kacper/Workspace/Aura/device/../build/common_dependencies/llvm-src/bin/clang++ --target=armv7em-none-eabi -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi
 -fno-pic -fdata-sections -ffunction-sections -isystem /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1/ -isystem /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1//arm-none-eabi/thumb/v7e-m+fp/hard/
 -g -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic  -Wl,--sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi
 -Wl,--gc-sections -Wl,-Map=output.map -Wl,-nostdlib -L/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ -L/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/
 -o test_logs_uncaught_exception /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crti.o /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o
 /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtbegin.o CMakeFiles/test_logs_uncaught_exception.dir/test_logs_uncaught_exception.cpp.obj ../../../libdevice_specific.a
 ../../../cube/libcube.a ../setup/libdevice_test_setup.a ../../../_deps/unity_project-build/libunity.a libtest_logs_uncaught_exception_runner.a ../../../_deps/unity_project-build/libunity.a ../setup/libunity_putchar.a ../../../serial_logger/libserial_logger.a
 ../../../cube/libcube.a ../../../libfreertos.a ../../../_deps/printf_library-build/lib/libprintf.a -lstdc++ -lm -lc -Wl,--start-group -lgcc -lg -lc -Wl,--end-group -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtend.o
 /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtn.o -T/home/kacper/Workspace/Aura/device/cube/Aura/STM32L432KCUx_FLASH.ld<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">With GCC: <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">>  /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/bin/arm-none-eabi-g++ --target=armv7em-none-eabi -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi
 -fno-pic -fdata-sections -ffunction-sections -isystem /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1/ -isystem /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/include/c++/10.3.1//arm-none-eabi/thumb/v7e-m+fp/hard/
 -g -Wall -Wextra -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nodefaultlibs --sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi -fno-pic  -Wl,--sysroot=/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi
 -Wl,--gc-sections -Wl,-Map=output.map -Wl,-nostdlib -L/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ -L/home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/
 -o test_logs_uncaught_exception /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crti.o /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o
 /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtbegin.o CMakeFiles/test_logs_uncaught_exception.dir/test_logs_uncaught_exception.cpp.obj ../../../libdevice_specific.a
 ../../../cube/libcube.a ../setup/libdevice_test_setup.a ../../../_deps/unity_project-build/libunity.a libtest_logs_uncaught_exception_runner.a ../../../_deps/unity_project-build/libunity.a ../setup/libunity_putchar.a ../../../serial_logger/libserial_logger.a
 ../../../cube/libcube.a ../../../libfreertos.a ../../../_deps/printf_library-build/lib/libprintf.a -lstdc++ -lm -lc -Wl,--start-group -lgcc -lg -lc -Wl,--end-group -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtend.o
 /home/kacper/Workspace/Aura/device/../build/common_dependencies/armgnutoolchain-src/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard//crtn.o -T/home/kacper/Workspace/Aura/device/cube/Aura/STM32L432KCUx_FLASH.ld -nostartfiles<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For GCC everything works as expected, for Clang doesn't. Using "-Wl,--reproduce" generates "-Bstatic" file which can be found here:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://drive.google.com/file/d/1Wvx4JPXpPWefV1AZCp4czWOqCXV3Rukx/view?usp=sharing">https://drive.google.com/file/d/1Wvx4JPXpPWefV1AZCp4czWOqCXV3Rukx/view?usp=sharing</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I will try to compile libcxx and libcxxabi to be tinier according to Peter's tips and will try to figure out whether aligned allocation could be omitted somehow.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Kind regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Kacper<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</body>
</html>