exercism / x86-64-assembly

Exercism exercises in x86-64 Assembly.
https://exercism.org/tracks/x86-64-assembly
MIT License
22 stars 18 forks source link

resistor-color: example solution crashes #171

Closed sudhackar closed 1 year ago

sudhackar commented 1 year ago

https://github.com/exercism/x86-64-assembly/blob/5720b20beeed5518d8637d66538cb096c3bed280/exercises/practice/resistor-color/.meta/example.asm#L15

For the color_array array you'll need to do_relocs - since the members are actually references to other places in the binary.

See musl ld source as the test runner is actually alpine

You'll get a crash when loading the test binary on alpine but maybe not on your machine. The crash looks like

0x7fb81021808c <do_relocs+739>  mov    QWORD PTR [r12], rcx

where r12 is the address for color_array

$r12   : 0x00555ace6500bb  →  <color_array+0>

and rcx is the relocated address of the first member of this array

$rcx   : 0x00555ace650080  →  0x7262006b63616c62 ("black"?)

Ideally the musl libc should change protections for this section(.rodata) or check if its writable - but it doesn't and hence crashes while writing to a readable section of memory

gef➤  vmmap 0x00555ace6500bb
[ Legend:  Code | Heap | Stack ]
Start              End                Offset             Perm Path
0x00555ace650000 0x00555ace651000 0x00000000004000 r-- /tmp/test/exercises/practice/resistor-color/tests

TLDR : Any variable that is actually a reference to another for our submissions should be in .data instead of .rodata due to a weird behaviour of the alpine linux's musl loader - maybe should be reported upstream?

To debug the crash I built the test-runner docker with this diff

diff --git a/Dockerfile b/Dockerfile
index 2eb47d7..5bc1f98 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,6 @@
 FROM alpine:3.10
-RUN apk add --no-cache coreutils gcc libc-dev make nasm python3
+RUN apk add --no-cache coreutils gcc libc-dev make nasm python3 gdb file musl-dbg
+RUN sh -c "$(wget https://gef.blah.cat/sh -O -)"
 WORKDIR /opt/test-runner
 COPY run.sh bin/
 COPY process_results.py ./

Crash with more context

$rax   : 0x0
$rbx   : 0x8
$rcx   : 0x0055eea43d1080  →  0x7262006b63616c62 ("black"?)
$rdx   : 0x0
$rsp   : 0x007ffcf3236a00  →  0x0000000000000000
$rbp   : 0x007fe6bfdafb40  →  0x007fe6bfd1f000  →  0x00010102464c457f
$rsi   : 0x007fe6bfdaf8a0  →  0x0055eea43cd000  →   jg 0x55eea43cd047
$rdi   : 0x007fe6bfdaf8a0  →  0x0055eea43cd000  →   jg 0x55eea43cd047
$rip   : 0x007fe6bfd7608c  →  <do_relocs+739> mov QWORD PTR [r12], rcx
$r8    : 0x007fe6bfd2eaa0  →  0x0800120000094c ("L\t"?)
$r9    : 0x0055eea43d10bb  →  <color_array+0> add BYTE PTR [rax+0x0], 0x0
$r10   : 0x0055eea43cd452  →  "__libc_start_main"
$r11   : 0x0
$r12   : 0x0055eea43d10bb  →  <color_array+0> add BYTE PTR [rax+0x0], 0x0
$r13   : 0x0
$r14   : 0x007fe6bfdaf8a0  →  0x0055eea43cd000  →   jg 0x55eea43cd047
$r15   : 0x0055eea43cd4c8  →   mov ebx, 0x40
$eflags: [zero carry parity adjust sign trap INTERRUPT direction overflow RESUME virtualx86 identification]
$cs: 0x33 $ss: 0x2b $ds: 0x00 $es: 0x00 $fs: 0x00 $gs: 0x00
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ────
0x007ffcf3236a00│+0x0000: 0x0000000000000000     ← $rsp
0x007ffcf3236a08│+0x0008: 0x0000000000000003
0x007ffcf3236a10│+0x0010: 0x0000000000000018
0x007ffcf3236a18│+0x0018: 0x0000000000000000
0x007ffcf3236a20│+0x0020: 0x0000000000000000
0x007ffcf3236a28│+0x0028: 0x0000000000000180
0x007ffcf3236a30│+0x0030: 0x0055eea43cd000  →   jg 0x55eea43cd047
0x007ffcf3236a38│+0x0038: 0x0055eea43cd2c0  →   add BYTE PTR [rax], al
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:64 ────
   0x7fe6bfd76080 <do_relocs+727>  jmp    0x7fe6bfd7608c <do_relocs+739>
   0x7fe6bfd76082 <do_relocs+729>  add    rcx, rdx
   0x7fe6bfd76085 <do_relocs+732>  sub    rcx, QWORD PTR [rsi+0x110]
 → 0x7fe6bfd7608c <do_relocs+739>  mov    QWORD PTR [r12], rcx
   0x7fe6bfd76090 <do_relocs+743>  jmp    0x7fe6bfd7618a <do_relocs+993>
   0x7fe6bfd76095 <do_relocs+748>  cmp    QWORD PTR [rsp+0x8], 0x2
   0x7fe6bfd7609b <do_relocs+754>  jne    0x7fe6bfd760a2 <do_relocs+761>
   0x7fe6bfd7609d <do_relocs+756>  mov    rcx, QWORD PTR [r12+0x8]
   0x7fe6bfd760a2 <do_relocs+761>  cmp    DWORD PTR [rip+0x3a1ab], 0x0        # 0x7fe6bfdb0254 <runtime>
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── threads ────
[#0] Id 1, Name: "tests", stopped 0x7fe6bfd7608c in do_relocs (), reason: SIGSEGV
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ────
[#0] 0x7fe6bfd7608c → do_relocs(dso=0x7fe6bfdaf8a0 <app>, rel=0x55eea43cd4c8, rel_size=0x180, stride=0x3)
[#1] 0x7fe6bfd76bde → reloc_all(p=0x7fe6bfdaf8a0 <app>)
[#2] 0x7fe6bfd7838a → __dls3(sp=0x7ffcf3236e80)
[#3] 0x7fe6bfd77ba7 → __dls2b(sp=0x7ffcf3236e80)
[#4] 0x7fe6bfd77b4c → __dls2(base=<optimized out>, sp=0x7ffcf3236e80)
[#5] 0x7fe6bfd75750 → _dlstart()
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
gef➤

It is to note that the glibc's ld implementation does actually change(mprotect) the permissions to writable and then relocates here

if (__mprotect (newp->start, newp->len, newp->prot|PROT_WRITE) < 0)
          {
        errstring = N_("cannot make segment writable for relocation");
          call_error:
        _dl_signal_error (errno, l->l_name, NULL, errstring);
          }
github-actions[bot] commented 1 year ago

Hello. Thanks for opening an issue on Exercism. We are currently in a phase of our journey where we have paused community contributions to allow us to take a breather and redesign our community model. You can learn more in this blog post. As such, all issues and PRs in this repository are being automatically closed.

That doesn't mean we're not interested in your ideas, or that if you're stuck on something we don't want to help. The best place to discuss things is with our community on the Exercism Community Forum. You can use [this link](https://forum.exercism.org/new-topic?title=resistor-color:%20example%20solution%20crashes&body=https://github.com/exercism/x86-64-assembly/blob/5720b20beeed5518d8637d66538cb096c3bed280/exercises/practice/resistor-color/.meta/example.asm#L15%0D%0A%0D%0AFor%20the%20%60color_array%60%20array%20you'll%20need%20to%20%60do_relocs%60%20-%20since%20the%20members%20are%20actually%20references%20to%20other%20places%20in%20the%20binary.%0D%0A%0D%0ASee%20%5Bmusl%20ld%20source%5D(https://git.musl-libc.org/cgit/musl/tree/ldso/dynlink.c#n379)%20as%20the%20test%20runner%20is%20actually%20%5Balpine%5D(https://github.com/exercism/x86-64-assembly-test-runner/blob/main/Dockerfile#L1)%20%0D%0A%0D%0AYou'll%20get%20a%20crash%20when%20loading%20the%20test%20binary%20on%20alpine%20but%20maybe%20not%20on%20your%20machine.%20The%20crash%20looks%20like%0D%0A%60%60%60%0D%0A0x7fb81021808c%20%3Cdo_relocs+739%3E%20%20mov%20%20%20%20QWORD%20PTR%20%5Br12%5D,%20rcx%0D%0A%60%60%60%0D%0Awhere%20r12%20is%20the%20address%20for%20%60color_array%60%0D%0A%60%60%60%0D%0A$r12%20%20%20:%200x00555ace6500bb%20%20%E2%86%92%20%20%3Call+0%3E%0D%0A%60%60%60%0D%0Aand%20rcx%20is%20the%20relocated%20address%20of%20the%20first%20member%20of%20this%20array%0D%0A%60%60%60%0D%0A$rcx%20%20%20:%200x00555ace650080%20%20%E2%86%92%20%200x7262006b63616c62%20(%22black%22?)%0D%0A%60%60%60%0D%0A%0D%0AIdeally%20the%20musl%20libc%20should%20change%20protections%20for%20this%20section(.rodata)%20or%20check%20if%20its%20writable%20-%20but%20it%20doesn't%20and%20hence%20crashes%20while%20writing%20to%20a%20readable%20section%20of%20memory%0D%0A%60%60%60%0D%0Agef%E2%9E%A4%20%20vmmap%200x00555ace6500bb%0D%0A%5B%20Legend:%20%20Code%20%7C%20Heap%20%7C%20Stack%20%5D%0D%0AStart%20%20%20%20%20%20%20%20%20%20%20%20%20%20End%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Offset%20%20%20%20%20%20%20%20%20%20%20%20%20Perm%20Path%0D%0A0x00555ace650000%200x00555ace651000%200x00000000004000%20r--%20/tmp/test/exercises/practice/resistor-color/tests%0D%0A%60%60%60%0D%0A%0D%0ATLDR%20:%20Any%20variable%20that%20is%20actually%20a%20reference%20to%20another%20for%20our%20submissions%20should%20be%20in%20%60.data%60%20instead%20of%20%60.rodata%60%20due%20to%20a%20weird%20behaviour%20of%20the%20alpine%20linux's%20musl%20loader%20-%20maybe%20should%20be%20reported%20upstream?%0D%0A%0D%0ATo%20debug%20the%20crash%20I%20built%20the%20test-runner%20docker%20with%20this%20diff%0D%0A%60%60%60diff%0D%0Adiff%20--git%20a/Dockerfile%20b/Dockerfile%0D%0Aindex%202eb47d7..5bc1f98%20100644%0D%0A---%20a/Dockerfile%0D%0A+++%20b/Dockerfile%0D%0A@@%20-1,5%20+1,6%20@@%0D%0A%20FROM%20alpine:3.10%0D%0A-RUN%20apk%20add%20--no-cache%20coreutils%20gcc%20libc-dev%20make%20nasm%20python3%0D%0A+RUN%20apk%20add%20--no-cache%20coreutils%20gcc%20libc-dev%20make%20nasm%20python3%20gdb%20file%20musl-dbg%0D%0A+RUN%20sh%20-c%20%22$(wget%20https://gef.blah.cat/sh%20-O%20-)%22%0D%0A%20WORKDIR%20/opt/test-runner%0D%0A%20COPY%20run.sh%20bin/%0D%0A%20COPY%20process_results.py%20./%0D%0A%60%60%60%0D%0ACrash%20with%20more%20context%0D%0A%60%60%60%0D%0A$rax%20%20%20:%200x0%0D%0A$rbx%20%20%20:%200x8%0D%0A$rcx%20%20%20:%200x0055eea43d1080%20%20%E2%86%92%20%200x7262006b63616c62%20(%22black%22?)%0D%0A$rdx%20%20%20:%200x0%0D%0A$rsp%20%20%20:%200x007ffcf3236a00%20%20%E2%86%92%20%200x0000000000000000%0D%0A$rbp%20%20%20:%200x007fe6bfdafb40%20%20%E2%86%92%20%200x007fe6bfd1f000%20%20%E2%86%92%20%200x00010102464c457f%0D%0A$rsi%20%20%20:%200x007fe6bfdaf8a0%20%20%E2%86%92%20%200x0055eea43cd000%20%20%E2%86%92%20%20%20jg%200x55eea43cd047%0D%0A$rdi%20%20%20:%200x007fe6bfdaf8a0%20%20%E2%86%92%20%200x0055eea43cd000%20%20%E2%86%92%20%20%20jg%200x55eea43cd047%0D%0A$rip%20%20%20:%200x007fe6bfd7608c%20%20%E2%86%92%20%20%3Cdo_relocs+739%3E%20mov%20QWORD%20PTR%20%5Br12%5D,%20rcx%0D%0A$r8%20%20%20%20:%200x007fe6bfd2eaa0%20%20%E2%86%92%20%200x0800120000094c%20(%22L%5Ct%22?)%0D%0A$r9%20%20%20%20:%200x0055eea43d10bb%20%20%E2%86%92%20%20%3Ccolor_array+0%3E%20add%20BYTE%20PTR%20%5Brax+0x0%5D,%200x0%0D%0A$r10%20%20%20:%200x0055eea43cd452%20%20%E2%86%92%20%20%22__libc_start_main%22%0D%0A$r11%20%20%20:%200x0%0D%0A$r12%20%20%20:%200x0055eea43d10bb%20%20%E2%86%92%20%20%3Ccolor_array+0%3E%20add%20BYTE%20PTR%20%5Brax+0x0%5D,%200x0%0D%0A$r13%20%20%20:%200x0%0D%0A$r14%20%20%20:%200x007fe6bfdaf8a0%20%20%E2%86%92%20%200x0055eea43cd000%20%20%E2%86%92%20%20%20jg%200x55eea43cd047%0D%0A$r15%20%20%20:%200x0055eea43cd4c8%20%20%E2%86%92%20%20%20mov%20ebx,%200x40%0D%0A$eflags:%20%5Bzero%20carry%20parity%20adjust%20sign%20trap%20INTERRUPT%20direction%20overflow%20RESUME%20virtualx86%20identification%5D%0D%0A$cs:%200x33%20$ss:%200x2b%20$ds:%200x00%20$es:%200x00%20$fs:%200x00%20$gs:%200x00%0D%0A%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%20stack%20%E2%94%80%E2%94%80%E2%94%80%E2%94%80%0D%0A0x007ffcf3236a00%E2%94%82+0x0000:%200x0000000000000000%20%20%20%20%20%E2%86%90%20$rsp%0D%0A0x007ffcf3236a08%E2%94%82+0x0008:%200x0000000000000003%0D%0A0x007ffcf3236a10%E2%94%82+0x0010:%200x0000000000000018%0D%0A0x007ffcf3236a18%E2%94%82+0x0018:%200x0000000000000000%0D%0A0x007ffcf3236a20%E2%94%82+0x0020:%200x0000000000000000%0D%0A0x007ffcf3236a28%E2%94%82+0x0028:%200x0000000000000180%0D%0A0x007ffcf3236a30%E2%94%82+0x0030:%200x0055eea43cd000%20%20%E2%86%92%20%20%20jg%200x55eea43cd047%0D%0A0x007ffcf3236a38%E2%94%82+0x0038:%200x0055eea43cd2c0%20%20%E2%86%92%20%20%20add%20BYTE%20PTR%20%5Brax%5D,%20al%0D%0A%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%20code:x86:64%20%E2%94%80%E2%94%80%E2%94%80%E2%94%80%0D%0A%20%20%200x7fe6bfd76080%20%3Cdo_relocs+727%3E%20%20jmp%20%20%20%200x7fe6bfd7608c%20%3Cdo_relocs+739%3E%0D%0A%20%20%200x7fe6bfd76082%20%3Cdo_relocs+729%3E%20%20add%20%20%20%20rcx,%20rdx%0D%0A%20%20%200x7fe6bfd76085%20%3Cdo_relocs+732%3E%20%20sub%20%20%20%20rcx,%20QWORD%20PTR%20%5Brsi+0x110%5D%0D%0A%20%E2%86%92%200x7fe6bfd7608c%20%3Cdo_relocs+739%3E%20%20mov%20%20%20%20QWORD%20PTR%20%5Br12%5D,%20rcx%0D%0A%20%20%200x7fe6bfd76090%20%3Cdo_relocs+743%3E%20%20jmp%20%20%20%200x7fe6bfd7618a%20%3Cdo_relocs+993%3E%0D%0A%20%20%200x7fe6bfd76095%20%3Cdo_relocs+748%3E%20%20cmp%20%20%20%20QWORD%20PTR%20%5Brsp+0x8%5D,%200x2%0D%0A%20%20%200x7fe6bfd7609b%20%3Cdo_relocs+754%3E%20%20jne%20%20%20%200x7fe6bfd760a2%20%3Cdo_relocs+761%3E%0D%0A%20%20%200x7fe6bfd7609d%20%3Cdo_relocs+756%3E%20%20mov%20%20%20%20rcx,%20QWORD%20PTR%20%5Br12+0x8%5D%0D%0A%20%20%200x7fe6bfd760a2%20%3Cdo_relocs+761%3E%20%20cmp%20%20%20%20DWORD%20PTR%20%5Brip+0x3a1ab%5D,%200x0%20%20%20%20%20%20%20%20#%200x7fe6bfdb0254%20%3Cruntime%3E%0D%0A%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%20threads%20%E2%94%80%E2%94%80%E2%94%80%E2%94%80%0D%0A%5B#0%5D%20Id%201,%20Name:%20%22tests%22,%20stopped%200x7fe6bfd7608c%20in%20do_relocs%20(),%20reason:%20SIGSEGV%0D%0A%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%20trace%20%E2%94%80%E2%94%80%E2%94%80%E2%94%80%0D%0A%5B#0%5D%200x7fe6bfd7608c%20%E2%86%92%20do_relocs(dso=0x7fe6bfdaf8a0%20%3Capp%3E,%20rel=0x55eea43cd4c8,%20rel_size=0x180,%20stride=0x3)%0D%0A%5B#1%5D%200x7fe6bfd76bde%20%E2%86%92%20reloc_all(p=0x7fe6bfdaf8a0%20%3Capp%3E)%0D%0A%5B#2%5D%200x7fe6bfd7838a%20%E2%86%92%20__dls3(sp=0x7ffcf3236e80)%0D%0A%5B#3%5D%200x7fe6bfd77ba7%20%E2%86%92%20__dls2b(sp=0x7ffcf3236e80)%0D%0A%5B#4%5D%200x7fe6bfd77b4c%20%E2%86%92%20__dls2(base=%3Coptimized%20out%3E,%20sp=0x7ffcf3236e80)%0D%0A%5B#5%5D%200x7fe6bfd75750%20%E2%86%92%20_dlstart()%0D%0A%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%E2%94%80%0D%0Agef%E2%9E%A4%0D%0A%60%60%60%0D%0A&category=x86-64-assembly) to copy this into a new topic there.


Note: If this issue has been pre-approved, please link back to this issue on the forum thread and a maintainer or staff member will reopen it.