Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jun 2018 11:31:20 +0300
From:      Yanko Yankulov <yanko.yankulov@gmail.com>
To:        freebsd-emulation@freebsd.org
Subject:   two proposed linuxulator fixes + ptrace
Message-ID:  <CABTd0_pqdAtHMH9gSJdebstASuoomYw1XLbkbbsMCUvtE-=vDA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--0000000000008cb91f056e95ec70
Content-Type: text/plain; charset="UTF-8"

 Hi all,

I stumbled on two problems trying to run a proprietary java/native Linux
app on FreeBSD. I managed to get it working with two small changes to the
Linux compatibility code. Also in order to pinpoint the issues I got the
ptrace system working for Linux apps, enabling truss & gdb.

This is all on recent CURRENT.

The patches work for me, but I am absolutely sure there is better way to do
this, especially for the ptrace part.

The first issue was 100% CPU usage on start with no progress. Turned out
that the app was expecting TracerPid field in its /proc/pid/status, so just
adding  "sbuf_printf(sb, "TracerPid:\t%d\n",     0);" in
linprocfs_doprocstatus solved it.

The second was random segfaults in the Java code. Traced it to mangled r10
in the sigreturn path. Just preserving the r10 when returning from
sigreturn resolves it.

--- a/sys/amd64/linux/linux_sysvec.c
+++ b/sys/amd64/linux/linux_sysvec.c
@@ -228,8 +228,9 @@ linux_set_syscall_retval(struct thread *td, int error)
         * the syscall.  So, do not clobber %rdx and %r10.
         */
        td->td_retval[1] = frame->tf_rdx;
-       frame->tf_r10 = frame->tf_rcx;
-
+       if( td->td_sa.code != LINUX_SYS_linux_rt_sigreturn )
+               frame->tf_r10 = frame->tf_rcx;
+
        cpu_set_syscall_retval(td, error);

         /* Restore all registers. */


So this two fixes solved my issues and was able to run/use the problematic
application.

The ptrace code is lot more messy, and I am really not happy with it, but I
didn't have the time to figure out a cleaner  solution. Attaching it
though, as it at least might help someone to devise a better fix.

Best,
Yanko

--0000000000008cb91f056e95ec70
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-linprocfs-return-0-TracerPid.patch"
Content-Disposition: attachment; 
	filename="0001-linprocfs-return-0-TracerPid.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jie9qaa40

RnJvbSA4MDk1N2VhZmY5ZGYyNTY3ZTJkNWJiNWI5ZTczYWZjMzk3ZTRkNGFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZYW5rbyBZYW5rdWxvdiA8eWFua28ueWFua3Vsb3ZAZ21haWwu
Y29tPgpEYXRlOiBUaHUsIDE0IEp1biAyMDE4IDEwOjQ0OjIyICswMzAwClN1YmplY3Q6IFtQQVRD
SCAxLzNdIGxpbnByb2NmczogcmV0dXJuIDAgVHJhY2VyUGlkCgotLS0KIHN5cy9jb21wYXQvbGlu
cHJvY2ZzL2xpbnByb2Nmcy5jIHwgMSArCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykK
CmRpZmYgLS1naXQgYS9zeXMvY29tcGF0L2xpbnByb2Nmcy9saW5wcm9jZnMuYyBiL3N5cy9jb21w
YXQvbGlucHJvY2ZzL2xpbnByb2Nmcy5jCmluZGV4IDU4NjI1OWYyODMxNS4uMzFkYzRjNGFiMjUy
IDEwMDY0NAotLS0gYS9zeXMvY29tcGF0L2xpbnByb2Nmcy9saW5wcm9jZnMuYworKysgYi9zeXMv
Y29tcGF0L2xpbnByb2Nmcy9saW5wcm9jZnMuYwpAQCAtODA1LDYgKzgwNSw3IEBAIGxpbnByb2Nm
c19kb3Byb2NzdGF0dXMoUEZTX0ZJTExfQVJHUykKIAlzYnVmX3ByaW50ZihzYiwgIlBpZDpcdCVk
XG4iLAkJcC0+cF9waWQpOwogCXNidWZfcHJpbnRmKHNiLCAiUFBpZDpcdCVkXG4iLAkJcC0+cF9w
cHRyID8KIAkJCQkJCXAtPnBfcHB0ci0+cF9waWQgOiAwKTsKKwlzYnVmX3ByaW50ZihzYiwgIlRy
YWNlclBpZDpcdCVkXG4iLAkwKTsKIAlzYnVmX3ByaW50ZihzYiwgIlVpZDpcdCVkICVkICVkICVk
XG4iLAlwLT5wX3VjcmVkLT5jcl9ydWlkLAogCQkJCQkJcC0+cF91Y3JlZC0+Y3JfdWlkLAogCQkJ
CQkJcC0+cF91Y3JlZC0+Y3Jfc3Z1aWQsCi0tIAoyLjE3LjEKCg==
--0000000000008cb91f056e95ec70
Content-Type: text/x-patch; charset="US-ASCII"; name="0002-linuxlator-enable-ptrace.patch"
Content-Disposition: attachment; 
	filename="0002-linuxlator-enable-ptrace.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jie9qaar1

RnJvbSBiYTAwMDExMGNmMTAxNGY1ODlmZTUyZjkzNmUxMmFkNWFjNDY0NTYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZYW5rbyBZYW5rdWxvdiA8eWFua28ueWFua3Vsb3ZAZ21haWwu
Y29tPgpEYXRlOiBUaHUsIDE0IEp1biAyMDE4IDEwOjQ5OjA2ICswMzAwClN1YmplY3Q6IFtQQVRD
SCAyLzNdIGxpbnV4bGF0b3I6IGVuYWJsZSBwdHJhY2UKCi0tLQogc3lzL2NvbXBhdC9saW51eC9s
aW51eF9mb3JrLmMgfCA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogc3lz
L2tlcm4va2Vybl9mb3JrLmMgICAgICAgICAgfCAyMiArKysrKysrKysrLS0tLS0tLS0tCiAyIGZp
bGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL3N5cy9jb21wYXQvbGludXgvbGludXhfZm9yay5jIGIvc3lzL2NvbXBhdC9saW51eC9saW51
eF9mb3JrLmMKaW5kZXggOWRkYTQ1N2U4NDgxLi5mM2QwNjc1OTQ1MDIgMTAwNjQ0Ci0tLSBhL3N5
cy9jb21wYXQvbGludXgvbGludXhfZm9yay5jCisrKyBiL3N5cy9jb21wYXQvbGludXgvbGludXhf
Zm9yay5jCkBAIC00MCw2ICs0MCw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRl
IDxzeXMvbG9jay5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgogI2luY2x1ZGUgPHN5cy9wcm9j
Lmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgogI2luY2x1ZGUgPHN5cy9yYWNjdC5oPgogI2lu
Y2x1ZGUgPHN5cy9zY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsc3Vici5oPgpAQCAtOTYs
NyArOTcsMTcgQEAgbGludXhfZm9yayhzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IGxpbnV4X2Zv
cmtfYXJncyAqYXJncykKIAlURF9TRVRfQ0FOX1JVTih0ZDIpOwogCXNjaGVkX2FkZCh0ZDIsIFNS
UV9CT1JJTkcpOwogCXRocmVhZF91bmxvY2sodGQyKTsKLQorCQorCVBST0NfTE9DSyhwMik7CisJ
LyoKKwkgKiBXYWl0IHVudGlsIGRlYnVnZ2VyIGlzIGF0dGFjaGVkIHRvIGNoaWxkLgorCSAqLwor
CXdoaWxlICh0ZDItPnRkX3Byb2MgPT0gcDIgJiYgKHRkMi0+dGRfZGJnZmxhZ3MgJiBUREJfU1RP
UEFURk9SSykgIT0gMCkKKwkJY3Zfd2FpdCgmcDItPnBfZGJnd2FpdCwgJnAyLT5wX210eCk7CisJ
X1BSRUxFKHAyKTsKKwlyYWNjdF9wcm9jX2ZvcmtfZG9uZShwMik7CisJUFJPQ19VTkxPQ0socDIp
OworCQogCXJldHVybiAoMCk7CiB9CiAKQEAgLTEzMiw3ICsxNDMsMTkgQEAgbGludXhfdmZvcmso
c3RydWN0IHRocmVhZCAqdGQsIHN0cnVjdCBsaW51eF92Zm9ya19hcmdzICphcmdzKQogCVREX1NF
VF9DQU5fUlVOKHRkMik7CiAJc2NoZWRfYWRkKHRkMiwgU1JRX0JPUklORyk7CiAJdGhyZWFkX3Vu
bG9jayh0ZDIpOworCQorCVBST0NfTE9DSyhwMik7CisJLyoKKwkgKiBXYWl0IHVudGlsIGRlYnVn
Z2VyIGlzIGF0dGFjaGVkIHRvIGNoaWxkLgorCSAqLworCXdoaWxlICh0ZDItPnRkX3Byb2MgPT0g
cDIgJiYgKHRkMi0+dGRfZGJnZmxhZ3MgJiBUREJfU1RPUEFURk9SSykgIT0gMCkKKwkJY3Zfd2Fp
dCgmcDItPnBfZGJnd2FpdCwgJnAyLT5wX210eCk7CisJX1BSRUxFKHAyKTsKKwlyYWNjdF9wcm9j
X2ZvcmtfZG9uZShwMik7CisJUFJPQ19VTkxPQ0socDIpOworCQogCisJCiAJcmV0dXJuICgwKTsK
IH0KIApAQCAtMjUxLDcgKzI3NCwxNyBAQCBsaW51eF9jbG9uZV9wcm9jKHN0cnVjdCB0aHJlYWQg
KnRkLCBzdHJ1Y3QgbGludXhfY2xvbmVfYXJncyAqYXJncykKIAlURF9TRVRfQ0FOX1JVTih0ZDIp
OwogCXNjaGVkX2FkZCh0ZDIsIFNSUV9CT1JJTkcpOwogCXRocmVhZF91bmxvY2sodGQyKTsKLQor
CQorCVBST0NfTE9DSyhwMik7CisJLyoKKwkgKiBXYWl0IHVudGlsIGRlYnVnZ2VyIGlzIGF0dGFj
aGVkIHRvIGNoaWxkLgorCSAqLworCXdoaWxlICh0ZDItPnRkX3Byb2MgPT0gcDIgJiYgKHRkMi0+
dGRfZGJnZmxhZ3MgJiBUREJfU1RPUEFURk9SSykgIT0gMCkKKwkJY3Zfd2FpdCgmcDItPnBfZGJn
d2FpdCwgJnAyLT5wX210eCk7CisJX1BSRUxFKHAyKTsKKwlyYWNjdF9wcm9jX2ZvcmtfZG9uZShw
Mik7CisJUFJPQ19VTkxPQ0socDIpOworCQogCXRkLT50ZF9yZXR2YWxbMF0gPSBwMi0+cF9waWQ7
CiAKIAlyZXR1cm4gKDApOwpAQCAtMzUwLDYgKzM4Myw5IEBAIGxpbnV4X2Nsb25lX3RocmVhZChz
dHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IGxpbnV4X2Nsb25lX2FyZ3MgKmFyZ3MpCiAJdGhyZWFk
X3VubG9jayh0ZCk7CiAJaWYgKFBfU0hPVUxEU1RPUChwKSkKIAkJbmV3dGQtPnRkX2ZsYWdzIHw9
IFRERl9BU1RQRU5ESU5HIHwgVERGX05FRURTVVNQQ0hLOworCQorCWlmIChwLT5wX3B0ZXZlbnRz
ICYgUFRSQUNFX0xXUCkKKwkJbmV3dGQtPnRkX2RiZ2ZsYWdzIHw9IFREQl9CT1JOOwogCVBST0Nf
VU5MT0NLKHApOwogCiAJdGlkaGFzaF9hZGQobmV3dGQpOwpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4v
a2Vybl9mb3JrLmMgYi9zeXMva2Vybi9rZXJuX2ZvcmsuYwppbmRleCBmOGViODRiMWI4ZTkuLmIx
ODgzYTVhZjc2YiAxMDA2NDQKLS0tIGEvc3lzL2tlcm4va2Vybl9mb3JrLmMKKysrIGIvc3lzL2tl
cm4va2Vybl9mb3JrLmMKQEAgLTc2OCwxOSArNzY4LDIxIEBAIGRvX2Zvcmsoc3RydWN0IHRocmVh
ZCAqdGQsIHN0cnVjdCBmb3JrX3JlcSAqZnIsIHN0cnVjdCBwcm9jICpwMiwgc3RydWN0IHRocmVh
ZCAqCiAJCXRocmVhZF91bmxvY2sodGQyKTsKIAkJaWYgKGZyLT5mcl9waWRwICE9IE5VTEwpCiAJ
CQkqZnItPmZyX3BpZHAgPSBwMi0+cF9waWQ7CisJCQorCQlQUk9DX0xPQ0socDIpOworCQkvKgor
CQkgKiBXYWl0IHVudGlsIGRlYnVnZ2VyIGlzIGF0dGFjaGVkIHRvIGNoaWxkLgorCQkgKi8KKwkJ
d2hpbGUgKHRkMi0+dGRfcHJvYyA9PSBwMiAmJiAodGQyLT50ZF9kYmdmbGFncyAmIFREQl9TVE9Q
QVRGT1JLKSAhPSAwKQorCQkJY3Zfd2FpdCgmcDItPnBfZGJnd2FpdCwgJnAyLT5wX210eCk7CisJ
CV9QUkVMRShwMik7CisJCXJhY2N0X3Byb2NfZm9ya19kb25lKHAyKTsKKwkJUFJPQ19VTkxPQ0so
cDIpOwogCX0gZWxzZSB7CiAJCSpmci0+ZnJfcHJvY3AgPSBwMjsKIAl9Ci0KLQlQUk9DX0xPQ0so
cDIpOwotCS8qCi0JICogV2FpdCB1bnRpbCBkZWJ1Z2dlciBpcyBhdHRhY2hlZCB0byBjaGlsZC4K
LQkgKi8KLQl3aGlsZSAodGQyLT50ZF9wcm9jID09IHAyICYmICh0ZDItPnRkX2RiZ2ZsYWdzICYg
VERCX1NUT1BBVEZPUkspICE9IDApCi0JCWN2X3dhaXQoJnAyLT5wX2RiZ3dhaXQsICZwMi0+cF9t
dHgpOwotCV9QUkVMRShwMik7Ci0JcmFjY3RfcHJvY19mb3JrX2RvbmUocDIpOwotCVBST0NfVU5M
T0NLKHAyKTsKKwkKKwkKIH0KIAogaW50Ci0tIAoyLjE3LjEKCg==
--0000000000008cb91f056e95ec70
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0003-linuxlator-amd64-don-t-mangle-r10-on-sigreturn.patch"
Content-Disposition: attachment; 
	filename="0003-linuxlator-amd64-don-t-mangle-r10-on-sigreturn.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_jie9qab02

RnJvbSBjN2Y5YzUwNTgxMDFmM2M1M2Y1N2MzYzFhNTVkOGE4ODIzMWEyNDM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZYW5rbyBZYW5rdWxvdiA8eWFua28ueWFua3Vsb3ZAZ21haWwu
Y29tPgpEYXRlOiBUaHUsIDE0IEp1biAyMDE4IDExOjAyOjU2ICswMzAwClN1YmplY3Q6IFtQQVRD
SCAzLzNdIGxpbnV4bGF0b3IvYW1kNjQ7IGRvbid0IG1hbmdsZSByMTAgb24gc2lncmV0dXJuCgot
LS0KIHN5cy9hbWQ2NC9saW51eC9saW51eF9zeXN2ZWMuYyB8IDUgKysrLS0KIDEgZmlsZSBjaGFu
Z2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3lzL2Ft
ZDY0L2xpbnV4L2xpbnV4X3N5c3ZlYy5jIGIvc3lzL2FtZDY0L2xpbnV4L2xpbnV4X3N5c3ZlYy5j
CmluZGV4IGNkNWM4YmQzODJkYy4uMjA3N2I2MjM4NzZjIDEwMDY0NAotLS0gYS9zeXMvYW1kNjQv
bGludXgvbGludXhfc3lzdmVjLmMKKysrIGIvc3lzL2FtZDY0L2xpbnV4L2xpbnV4X3N5c3ZlYy5j
CkBAIC0yMjgsOCArMjI4LDkgQEAgbGludXhfc2V0X3N5c2NhbGxfcmV0dmFsKHN0cnVjdCB0aHJl
YWQgKnRkLCBpbnQgZXJyb3IpCiAJICogdGhlIHN5c2NhbGwuICBTbywgZG8gbm90IGNsb2JiZXIg
JXJkeCBhbmQgJXIxMC4KIAkgKi8KIAl0ZC0+dGRfcmV0dmFsWzFdID0gZnJhbWUtPnRmX3JkeDsK
LQlmcmFtZS0+dGZfcjEwID0gZnJhbWUtPnRmX3JjeDsKLQorCWlmKCB0ZC0+dGRfc2EuY29kZSAh
PSBMSU5VWF9TWVNfbGludXhfcnRfc2lncmV0dXJuICkKKwkJZnJhbWUtPnRmX3IxMCA9IGZyYW1l
LT50Zl9yY3g7CisJCiAJY3B1X3NldF9zeXNjYWxsX3JldHZhbCh0ZCwgZXJyb3IpOwogCiAJIC8q
IFJlc3RvcmUgYWxsIHJlZ2lzdGVycy4gKi8KLS0gCjIuMTcuMQoK
--0000000000008cb91f056e95ec70--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABTd0_pqdAtHMH9gSJdebstASuoomYw1XLbkbbsMCUvtE-=vDA>