[cfe-dev] Clang x86-64 can't move segment registers

Tobias Hahn via cfe-dev cfe-dev at lists.llvm.org
Tue Jun 5 08:38:59 PDT 2018


Since clang 6, the following code produces `error: invalid operand for instruction`:

```c++
void f()
{
  asm("movq %cs, 160(%rsp);");
  asm("movq %fs, 168(%rsp);");
  asm("movq %gs, 176(%rsp);");
}
```
(see https://godbolt.org/g/CgPBb9)

Two questions: 1. Is this a bug or a feature? 2. Is this a clang bug/feature or an llvm one (a.k.a what is the right place to report this)?

(Background: I ran into this while trying to roll clang to a new version in a project containing PLCrashReporter, which uses these instructions while capturing a thread context, see [1]. I'm now trying to figure out if this is a compiler bug or if PLCrashReporter needs to be patched.)

Thanks!
Tobias

[1] https://github.com/plausiblelabs/plcrashreporter/blob/master/Source/PLCrashAsyncThread_current.S#L96

Ableton AG, Schoenhauser Allee 6-7, 10119 Berlin, Germany
Sitz (Registered Office) Berlin, Amtsgericht Berlin-Charlottenburg, HRB 72838
Vorstand (Management Board): Gerhard Behles, Jan Bohl
Vorsitzender des Aufsichtsrats (Chair of the Supervisory Board): Uwe Struck





More information about the cfe-dev mailing list