aboutsummaryrefslogtreecommitdiff
path: root/linux-user/syscall.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-04-15 12:02:59 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-04-15 12:02:59 +0100
commit73995d15557a3cf2328cc6b7982264897c65cf65 (patch)
treedb2279e9a4eacdb7978aa32eccbfc95df52c57ed /linux-user/syscall.c
parent2f7cc1fbd6f6655d900ca7f45973b9bd5330c6dd (diff)
parent377f8f08bebea7cd44617b0ac0a2baf307f5f055 (diff)
Merge remote-tracking branch 'remotes/stsquad/tags/pull-more-fixes-150420-1' into staging
More small fixes for rc3 - tweak docker FEATURE flags for document building - include sphinx configure check in config.log - disable PIE for Windows builds - fix /proc/self/stat handling - a number of gdbstub fixups following GByteArray conversion # gpg: Signature made Wed 15 Apr 2020 11:38:56 BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-more-fixes-150420-1: gdbstub: Introduce gdb_get_float32() to get 32-bit float registers gdbstub: Do not use memset() on GByteArray gdbstub: i386: Fix gdb_get_reg16() parameter to unbreak gdb target/m68k/helper: Fix m68k_fpu_gdb_get_reg() use of GByteArray linux-user: fix /proc/self/stat handling configure: disable PIE for Windows builds configure: redirect sphinx-build check to config.log tests/docker: add docs FEATURE flag and use for test-misc Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'linux-user/syscall.c')
-rw-r--r--linux-user/syscall.c43
1 files changed, 19 insertions, 24 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 6495ddc4cd..674f70e70a 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7295,34 +7295,29 @@ static int open_self_stat(void *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
TaskState *ts = cpu->opaque;
- abi_ulong start_stack = ts->info->start_stack;
+ g_autoptr(GString) buf = g_string_new(NULL);
int i;
for (i = 0; i < 44; i++) {
- char buf[128];
- int len;
- uint64_t val = 0;
-
- if (i == 0) {
- /* pid */
- val = getpid();
- snprintf(buf, sizeof(buf), "%"PRId64 " ", val);
- } else if (i == 1) {
- /* app name */
- snprintf(buf, sizeof(buf), "(%s) ", ts->bprm->argv[0]);
- } else if (i == 27) {
- /* stack bottom */
- val = start_stack;
- snprintf(buf, sizeof(buf), "%"PRId64 " ", val);
- } else {
- /* for the rest, there is MasterCard */
- snprintf(buf, sizeof(buf), "0%c", i == 43 ? '\n' : ' ');
- }
+ if (i == 0) {
+ /* pid */
+ g_string_printf(buf, FMT_pid " ", getpid());
+ } else if (i == 1) {
+ /* app name */
+ gchar *bin = g_strrstr(ts->bprm->argv[0], "/");
+ bin = bin ? bin + 1 : ts->bprm->argv[0];
+ g_string_printf(buf, "(%.15s) ", bin);
+ } else if (i == 27) {
+ /* stack bottom */
+ g_string_printf(buf, TARGET_ABI_FMT_ld " ", ts->info->start_stack);
+ } else {
+ /* for the rest, there is MasterCard */
+ g_string_printf(buf, "0%c", i == 43 ? '\n' : ' ');
+ }
- len = strlen(buf);
- if (write(fd, buf, len) != len) {
- return -1;
- }
+ if (write(fd, buf->str, buf->len) != buf->len) {
+ return -1;
+ }
}
return 0;