From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-17.7 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,ENV_AND_HDR_SPF_MATCH, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by gnuweeb.org (Postfix) with ESMTPS id 6BD437E309 for ; Tue, 22 Mar 2022 18:07:31 +0000 (UTC) Authentication-Results: gnuweeb.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20210112 header.b=CMulEQgO; dkim-atps=neutral Received: by mail-lj1-f175.google.com with SMTP id h11so25086110ljb.2 for ; Tue, 22 Mar 2022 11:07:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cfOuUBo85WR0ru+OZ9vCbVy6pqMJNH141NsoPZ9iuzU=; b=CMulEQgOmYp7vegEsV0YqllOAJc/0EN/MM1/NaiwpHzfLRazS7VZwqTu86PQodXmRH 27Dp+NKvW82SedQ0AiFEk8k6KtsoqvVc2Ktkj+vBPo+rOxpog7Czlfd42FkV+TEMZR2e lHh7eeAHJozDHcNvI2t7CbOouFS/QKkgnYpbkOVDm2etwVjH8vNvN3ijCwAPdCN9CgAL jKfBxWyx5pLq2PH9UBLyS9IQwObqQqi3auuQRZAirTmGwfdEym62AJmgmggBbtGePp1W vN/jmkjpAIEFytgWImTpPalrKwRYtRh1N2DiU+12PLGpjblMpU1ou/PerroTB7VlSXvZ 22rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cfOuUBo85WR0ru+OZ9vCbVy6pqMJNH141NsoPZ9iuzU=; b=wCl3viUnyRSzkXWBLH/UV8hA1WM1+67VPYwH1SoNDGy52uwEcj7FTRO0LpjxIbVUQD okEbzpbiq2ccmpqhGEm4KMy40YFGm3IkWsanvjHmf5Z4uOuaZprfGpRXS8sBgyRPfTBC h3QSJbWtsGWlu224zqVLY3+s+ljjC1cXR5OBqn/gdZdt0SWpRUSkKVQ3v+JwCJyiFkJ3 s+tNVAqW+syCxUnJnGEK+z0X16j7dfD3axsu8ZkqRlsdJ0zfwmFOUjTUM4L7oRA565J6 wrFpowyjgIbWtPu3dI2ne4VE6zzLwN2pKrCKecDYZ5MtTKdD38wqD99elGkHFPdyf1Cr aDaA== X-Gm-Message-State: AOAM530oVB1tUdED8eXp8k4z60iyTXa1ICLj1kh6IprJ16mxvTD32MKw DE5vosRFOt5x8x3z/SNG3ZQO6hm8qs4enbAS7U85KDybe2lDRQ== X-Google-Smtp-Source: ABdhPJzZtMmIKpcAsTy1AEu98Zzs8vVyBVsxshLo15ayhRFMzjm0Fhtnzr+4KvTUzMrwGoRbfL/7ds3WWEPCw+QAQmk= X-Received: by 2002:a2e:3004:0:b0:223:c126:5d1a with SMTP id w4-20020a2e3004000000b00223c1265d1amr19404530ljw.408.1647972449253; Tue, 22 Mar 2022 11:07:29 -0700 (PDT) MIME-Version: 1.0 References: <20220322102115.186179-1-ammarfaizi2@gnuweeb.org> <20220322102115.186179-3-ammarfaizi2@gnuweeb.org> <20220322172550.GL10306@1wt.eu> <20220322175816.GN10306@1wt.eu> In-Reply-To: <20220322175816.GN10306@1wt.eu> From: Nick Desaulniers Date: Tue, 22 Mar 2022 11:07:17 -0700 Message-ID: Subject: Re: [RFC PATCH v2 2/8] tools/nolibc: Remove .global _start from the entry point code To: Willy Tarreau Cc: Linux Kernel Mailing List , "GNU/Weeb Mailing List" , llvm@lists.linux.dev Content-Type: text/plain; charset="UTF-8" List-Id: On Tue, Mar 22, 2022 at 10:58 AM Willy Tarreau wrote: > > On Tue, Mar 22, 2022 at 10:30:53AM -0700, Nick Desaulniers wrote: > > On Tue, Mar 22, 2022 at 10:25 AM Willy Tarreau wrote: > > > The purpose is clearly *not* to implement a libc, but to have > > > something very lightweight that allows to compile trivial programs. A good > > > example of this is tools/testing/selftests/rcutorture/bin/mkinitrd.sh. I'm > > > personally using a tiny pre-init shell that I always package with my > > > kernels and that builds with them [1]. It will never do big things but > > > the balance between ease of use and coding effort is pretty good in my > > > experience. And I'm also careful not to make it complicated to use nor > > > to maintain, pragmatism is important and the effort should remain on the > > > program developer if some arbitration is needed. > > > > Neat, I bet that helps generate very small initrd! Got any quick size > > measurements? > > Yep: > > First, the usual static printf("hello world!\n"): > > $ ll hello-*libc > -rwxrwxr-x 1 willy dev 719232 Mar 22 18:50 hello-glibc* > -rwxrwxr-x 1 willy dev 1248 Mar 22 18:51 hello-nolibc* ! What! Are those both statically linked? > This one supports ~30-40 simple commands (mount/unmount, mknod, ls, ln), > a tar extractor, multi-level braces, and boolean expression evaluation, > variable expansion, and a config file parser to script all this. The code > is 20 years old and is really ugly (even uglier than you think). But that > gives an idea. 20 years ago the init was much simpler and 800 bytes (my > constraint was for single floppies containing kernel+rootfs) and strings > were manually merged by tails and put in .text to drop .rodata. Oh, so nolibc has been around for a while then? ld.lld will do string merging in that fashion at -O2 (the linker can accept and optimization level). I did have a kernel patch for that somewhere, need to update it for CC_OPTIMIZE_FOR_SIZE... I guess the tradeoff with strings in .text is that now the strings themselves are r+x and not just r? > > You'll also note that there's 0 data segment above. That used to be > convenient to further shrink programs, but these days given how linkers > arrange segments by permissions that doesn't save as much as it used to, > and it's likely that at some points I'll assume that there must be some > variables by default (errno, environ, etc) and that we'll accept to invest > a few extra tens of bytes by default for more convenience. Thanks for the measurements. -- Thanks, ~Nick Desaulniers