Received: by 2002:a05:7412:3290:b0:fa:6e18:a558 with SMTP id ev16csp637127rdb; Fri, 26 Jan 2024 06:28:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IE+yldKKs7crJL5DzUjX4Nz05H7aDRlsyDzAU5lej8BmHH0GWV+0rRKusDynwLNC/Cg+coZ X-Received: by 2002:a05:6214:250e:b0:685:d856:4ed5 with SMTP id gf14-20020a056214250e00b00685d8564ed5mr1789683qvb.17.1706279315025; Fri, 26 Jan 2024 06:28:35 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706279315; cv=pass; d=google.com; s=arc-20160816; b=LEAzrjNzZ/8lGb8DYlqy+PjsnVETF/XcUkti+SXYTvsaCVeb43B5SQlV7iiX/RTQs1 qShaKYF1siZPCyMTDelPRG0QK7J6CRW1o3ff1LaFyQujkP4M+FV3Xahe1LcVMOlGsqoi XhrOJq3YpCWPjWmHO+LKPb1gwG2tb6zsfm6Wv5fDp6AJLgji5RkGgvllyv/8Pa5drzgw cobhTVisrxR9tcVnCl6HX5XFgZ7S+r413jUMcPHDUR5TcnK7315/nMqgYfYEVdK0h7DB JuLbQ9HMz1m8kIgEFv89/usuMYkm/qMHaVhjSOYoUKuSTE1YWnW5H1cUgFmbvqde+J8n t63w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from; bh=7HvROSqc5fcBXfVVWU0fzvUR39KEZvIEPW6fHIIy3OY=; fh=1pO/fnqlbA1DlSshLp2Kp23nBXobkeZ558bQEuNU3Z8=; b=X7OdO9xwtvUfw8rChTFgwVBr2bUpASAv/YYrrwxKjpb7EvtkHtZ3U6y6oMbp9BIEEH /3un7snpGhMAQafCx9+nCbqIxEWk/gnGdHQpDWNTCeAy0BvADfwm5SACcLSj4TzKc8zy QC3AHHZfL1bewp/yeDkzVV1h20FW7dsan0eGf7pNLJz6JPrFbMTA9Il/YuHdAAU0PFtz uAGOBoR/viOocjvQWNtoP4xuToCGtCk0cTT5D3kBsqi0M6zyXtCXSqvmd7vD0GavloHw ucTYQF6eSg2oMu7HyiYbGa1kuF6qUroAv+xVzOtQYIbRAC5iHN8P5d5jrJLS17F8vFmn A1/Q== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=sdfg.com.ar); spf=pass (google.com: domain of linux-kernel+bounces-40181-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-40181-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id jv13-20020a05621429ed00b0068183d75b20si1392826qvb.564.2024.01.26.06.28.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 06:28:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-40181-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=sdfg.com.ar); spf=pass (google.com: domain of linux-kernel+bounces-40181-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-40181-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id C3D3E1C2396D for ; Fri, 26 Jan 2024 14:28:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4D8C31D549; Fri, 26 Jan 2024 14:27:17 +0000 (UTC) Received: from alerce.blitiri.com.ar (alerce.blitiri.com.ar [49.12.208.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5B06F1D542 for ; Fri, 26 Jan 2024 14:27:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=49.12.208.134 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706279236; cv=none; b=TQtqnhkznFCWEvWLzudZuIK/I9bi8xTsWU5f3dPpgPacTGSmEI+qY0fyENatx4UD93zek5nWKtHrz+USHcfIlGiE+RU5bPdZr7eOlV6pKJCWBUtFea3Ujl7Dx5dO/5HzggGDxzE82oWK1arbPGZWKcDwvXKgXvdfAGGDynL61eY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706279236; c=relaxed/simple; bh=cZBJLKefiwIoCqsp24IQdNQsW6/wBIH4IUtTtYyyoSM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=TMV4OZvbpVIV0fA2g1qipNtzBKDaySdXKdt2qjtijPLAES1BaSiJUqrdHoWyGkPL6VawpXDGms9Qg0yy+wPHPfr2841XGgbPQB0UTC+k3zAKc2f1a8D/NqMUfEGXOyUeGNshCNnpEzpC8eaum9ReetHKx9jRs7zVNX2L/ZYcDEY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sdfg.com.ar; spf=pass smtp.mailfrom=sdfg.com.ar; arc=none smtp.client-ip=49.12.208.134 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=sdfg.com.ar Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sdfg.com.ar Received: from localhost.localdomain by sdfg.com.ar (chasquid) with ESMTPSA tls TLS_AES_128_GCM_SHA256 (over submission, TLS-1.3, envelope from "rodrigo@sdfg.com.ar") ; Fri, 26 Jan 2024 14:25:10 +0000 From: Rodrigo Campos To: Willy Tarreau , =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Cc: linux-kernel@vger.kernel.org, Rodrigo Campos Subject: [PATCH 0/1] tools/nolibc/string: export strlen() Date: Fri, 26 Jan 2024 15:24:10 +0100 Message-ID: <20240126142411.22972-1-rodrigo@sdfg.com.ar> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Hi, while using nolibc on debian testing, I found that compilation fails when using strlcat(). The compilation fails with: cc -fno-asynchronous-unwind-tables -fno-ident -s -Os -nostdlib -lgcc -static -o test test.c /usr/bin/ld: /tmp/cccIasKL.o: in function `main': test.c:(.text.startup+0x1e): undefined reference to `strlen' collect2: error: ld returned 1 exit status This is using debian testing, with gcc 13.2.0. A small repro case that fails with this error on debian is: int main(void) { char dst[6] = "12"; char *src = "abc"; strlcat(dst, src, 6); printf("dst is: %s\n", dst); return 0; } Please note that this code is not using strlen() and strlcat() doesn't seems to use it either. First I noted that removing the attribute unused in strlen(), the compilation worked fine. And then I noticied that other functions had the attribute weak, a custom section and export the function. In particular, what happens here seems to be the same as in commit "tools/nolibc/string: export memset() and memmove()" (8d304a374023), as removing the -Os or adding the -ffreestanding seem to fix the issue. So, I did the same as that commit, for strlen(). However, I'm not 100% confident on how to check that this is done by the compiler to later replace it and provide a builtin. I'm not sure how that was verified for commit 8d304a374023, but if you let me know, I can verify it too. What do you think? As a side note, it seems strlcat()/strlcpy() fail to set the terminating null byte on some cases, and the return code is not always the same as when using libbsd. It seems to be only on "error" cases, and not sure if it's worth fixing all/some of those cases. Let me know if you think it is worth adding some _simple_ patches (I don't think it is worth fixing all the cases, the code is to fix all of the cases is probably not nice and not worth it). Best, Rodrigo --- Rodrigo Campos (1): tools/nolibc/string: export strlen() tools/include/nolibc/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.43.0