From nobody Tue Feb 10 00:59:17 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) client-ip=209.85.128.52; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f52.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1625418476; cv=none; d=zohomail.com; s=zohoarc; b=EMpQcSOFDgXzDx/siol3xUdBDfkkJrr1+DbV5O8yY0JnTo/X7ksk4I0daRCNpMkl+Pllw/NUdxYDz5oDF6Q+VPqSbAbqjwmG3M6tVhW7e1ertXlRFLgZczUoYeb02uoiwRhJWNFJ6g8JiQIX28aq1XY/7YMPyelwDA+HNAT//GM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1625418476; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dIjFa1vlzDxyh9HV658SDCUUQDgEESic8u1n2a+fuvo=; b=c/WEz55QY/6BzgAkGygO6mxEOJuKRQe8LqCEHbPVG8yCOAupxTXzL8H7a9rlOxlv5bBdJc1YHBKSVjlpNa0QLtw1uFvkj5lOUz2rWcDdrOkvxMju+jpZHxpcU3GSCc80fCqqBHl7lBEZzZwKDZnx63ABCwD6M1yGEvFD0nuiRhc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by mx.zohomail.com with SMTPS id 1625418476614647.5301414955111; Sun, 4 Jul 2021 10:07:56 -0700 (PDT) Received: by mail-wm1-f52.google.com with SMTP id b14-20020a1c1b0e0000b02901fc3a62af78so5848092wmb.3 for ; Sun, 04 Jul 2021 10:07:55 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (93.red-83-35-24.dynamicip.rima-tde.net. [83.35.24.93]) by smtp.gmail.com with ESMTPSA id q19sm19020101wmc.44.2021.07.04.10.07.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jul 2021 10:07:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dIjFa1vlzDxyh9HV658SDCUUQDgEESic8u1n2a+fuvo=; b=lQ8fuE9C6WTtL1iZEQKfqN7yvCHpNnJ4C/NgzS9hf5623KGO0iS23YYl1LSnNkEJ5s BxlR7Hotk1ZtqxNFp+Nq5FlwvmMDFkpxKpU63bzuMaos/umgrKDrwLE2TgJo//YHA8wq GQQx2LthAH2nYsD0/iaV/Si/g0PUDWBn8VM9cCe6CMIRLPJ1vs9dXFEDXrO0UmOKocBh 3SuZyVfDs9AWhjn40qv+j/ACbn68c3yM9p3KRBA8FvzJGDkMlMwVMWPkXmjJj2btMkmx PXsC96yViZkXTZP8jZJ+cnaatCTkmkBgC1sfYhBCPOo54XZIyoMxc/1LpgpIdn6IPpMZ AxRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=dIjFa1vlzDxyh9HV658SDCUUQDgEESic8u1n2a+fuvo=; b=s5PpYXrWzo+yOOw6cTnskJDHJH613KM6twNw1xW+QEUHa+Schpcpdh65eHKfRzRC6k 1OOCSoTdC6u+ktcFAtVdsGokdmAhJfnEz33+v3TrJamY4Xey1mJfXIAXs/Q5HHJaFL5Y 7RNGZkuzWk9iN1pMYsBZ4lWZMtYvx21lFIZRt1nHycW7P3i4Oy1K5jLYA8QHaJiaI1pS DSHQlohXiEGEqcRp0dK8tnYLxmepEFLzJwyKQONmm2kAeGnbfPCBsznTeYWL5VK8taN5 CAPpZ5lD3LEg/spwbqSowodK8jEHpKoH6kbeyl0u9SJzZFmh0yPWrX3PadsHBNUOm7LQ VX5g== X-Gm-Message-State: AOAM531BUYfqmFpZlnXuz3xLA7kE/dOOEd2kLqqkTuDqoTx0mDe/zoo7 4W5GEO7/icGZSEc4RVnnzJQ= X-Google-Smtp-Source: ABdhPJxcNUnO3Ech48RBTU1evbJC1wyzv9bkGpBSiq8doztIFoZDZMtYNiGKqzWDGmX8RstMRRjBJA== X-Received: by 2002:a7b:cb53:: with SMTP id v19mr10012997wmj.127.1625418473886; Sun, 04 Jul 2021 10:07:53 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Richard Zak , Aleksandar Rikalo , Thomas Huth , Aurelien Jarno , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Richard Henderson , Alexander von Gluck IV , Jiaxun Yang , Leon Alrae , Peter Maydell , =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH 3/4] target/mips: Rewrite UHI errno_mips() using GHashTable Date: Sun, 4 Jul 2021 19:07:35 +0200 Message-Id: <20210704170736.617895-4-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210704170736.617895-1-f4bug@amsat.org> References: <20210704170736.617895-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1625418478780100001 Linking on Haiku OS fails: /boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/8.3.0/../.= ./../../x86_64-unknown-haiku/bin/ld: error: libqemu-mips-softmmu.fa.p/target_mips_tcg_sysemu_mips-semi.c.o(.ro= data) is too large (0xffff405a bytes) /boot/system/develop/tools/bin/../lib/gcc/x86_64-unknown-haiku/8.3.0/../.= ./../../x86_64-unknown-haiku/bin/ld: final link failed: memory exhausted collect2: error: ld returned 1 exit status This is because the host_to_mips_errno[] uses errno as index, for example: static const uint16_t host_to_mips_errno[] =3D { [ENAMETOOLONG] =3D 91, ... and Haiku defines [*] ENAMETOOLONG as: 12 /* Error baselines */ 13 #define B_GENERAL_ERROR_BASE INT_MIN .. 22 #define B_STORAGE_ERROR_BASE (B_GENERAL_ERROR_BASE + 0x6= 000) ... 106 #define B_NAME_TOO_LONG (B_STORAGE_ERROR_BASE + 4) ... 211 #define ENAMETOOLONG B_TO_POSIX_ERROR(B_NAME_TOO= _LONG) so the array ends up beeing indeed too big. Since POSIX errno can't be use as indexes on Haiku, rewrite errno_mips() using a GHashTable. [*] https://github.com/haiku/haiku/blob/r1beta3/headers/os/support/Errors.h= #L130 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- target/mips/tcg/sysemu/mips-semi.c | 62 ++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mi= ps-semi.c index 4c924273c1b..3e91c9eb76c 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -4,6 +4,7 @@ * Specifications: MD01069 Reference Manual (rev 1.1.6, 06 Jul 2015) * * Copyright (c) 2015 Imagination Technologies + * Copyright (c) 2021 Philippe Mathieu-Daud=C3=A9 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -76,29 +77,56 @@ enum UHIOpenFlags { UHIOpen_EXCL =3D 0x800 }; =20 -/* - * Unified Hosting Interface (rev 1.1.6) - * Appendix A. "Error values" - */ -static const uint16_t host_to_mips_errno[] =3D { - [ENAMETOOLONG] =3D 91, -#ifdef EOVERFLOW - [EOVERFLOW] =3D 139, -#endif +static GHashTable *uhi_errno_hash_table; + +static void uhi_errno_insert(int host_errno, int uhi_errno) +{ + gboolean ret =3D TRUE; + + assert(uhi_errno_hash_table !=3D NULL); + ret =3D g_hash_table_insert(uhi_errno_hash_table, + GINT_TO_POINTER(host_errno), + GINT_TO_POINTER(uhi_errno)); + assert(ret =3D=3D TRUE); +} + +static void uhi_errno_init(void) +{ + gboolean ret =3D TRUE; + + uhi_errno_hash_table =3D g_hash_table_new(NULL, NULL); + + /* + * Unified Hosting Interface (rev 1.1.6) + * Appendix A. "Error values" + */ + uhi_errno_insert(ENAMETOOLONG, 91); #ifdef ELOOP - [ELOOP] =3D 92, + uhi_errno_insert(ELOOP, 92); #endif -}; +#ifdef EOVERFLOW + uhi_errno_insert(EOVERFLOW, 139); +#endif + assert(ret =3D=3D TRUE); +} =20 static int errno_mips(int host_errno) { - if (host_errno < 0 || host_errno >=3D ARRAY_SIZE(host_to_mips_errno)) { - return EINVAL; - } else if (host_to_mips_errno[host_errno]) { - return host_to_mips_errno[host_errno]; - } else { - return host_errno; + gpointer uhi_errno; + + if (uhi_errno_hash_table =3D=3D NULL) { + uhi_errno_init(); } + + if (host_errno =3D=3D 0) { + return 0; + } + if (g_hash_table_lookup_extended(uhi_errno_hash_table, + GINT_TO_POINTER(host_errno), + NULL, &uhi_errno)) { + return GPOINTER_TO_INT(uhi_errno); + } + return EINVAL; /* Not reachable per the specification */ } =20 static int copy_stat_to_target(CPUMIPSState *env, const struct stat *src, --=20 2.31.1