From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 9E1A51F4B4 for ; Tue, 6 Oct 2020 20:37:56 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C25A0386EC18; Tue, 6 Oct 2020 20:37:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C25A0386EC18 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1602016675; bh=oyzy+w5wkxmyxUMfI11T2VT5YSiNnkd16C6Bk617IZ0=; h=Subject:Date:References:In-Reply-To:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=GqM41AJtbjthgFlPLwU3jgsQH6sSWGcEp042ACEZJ/ZLYFxKhUmQQBvW7+aDMR7pL MC+1xOF2aADNHFxBD89c3aAr9D5MnY6Om3L4OypKZm1HVIB6aMD+YMsAQdMSTksHxw mlTBFN/Va0RuSiYhYBH44l2evIFg3YA0nFla5O5M= Received: from mr85p00im-zteg06011501.me.com (mr85p00im-zteg06011501.me.com [17.58.23.182]) by sourceware.org (Postfix) with ESMTPS id 2344E384640E for ; Tue, 6 Oct 2020 20:37:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2344E384640E Received: from [192.168.17.4] (125-239-162-180-vdsl.sparkbb.co.nz [125.239.162.180]) by mr85p00im-zteg06011501.me.com (Postfix) with ESMTPSA id BC66F2A0389 for ; Tue, 6 Oct 2020 20:37:50 +0000 (UTC) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (1.0) Subject: Re: [PATCH] ldd trace left-justified relative addresses Date: Wed, 7 Oct 2020 09:37:48 +1300 Message-Id: <338B669B-FEFA-44E2-99CF-F3D8ADCFCC4A@mac.com> References: <20201006054255.1676065-1-michaeljclark@mac.com> In-Reply-To: <20201006054255.1676065-1-michaeljclark@mac.com> To: libc-alpha@sourceware.org X-Mailer: iPhone Mail (18A393) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235, 18.0.687 definitions=2020-10-06_12:2020-10-06, 2020-10-06 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-2006250000 definitions=main-2010060136 X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Michael Clark via Libc-alpha Reply-To: Michael Clark Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" > On 6/10/2020, at 6:43 PM, Michael Clark wrote: >=20 > =EF=BB=BFFolks, >=20 > Sharing a patch for ld.so for relative addresses and left-justified > output. The goal of this patch is to increase `ldd` readability: >=20 > - modify trace output to use relative addresses by default. > - add alternative trace output mode with left-justified addresses. >=20 > The relative addresses are composed by subtracting the ELF ehdr address > which makes the output constant under address space layout randomization. > This should be a safe change because the default format is preserved. >=20 > The intention is to make `ldd` easier to cross reference with objdump. > Also, log files including `ldd` output will contain less differences as > the vdso is the only address that changes when using relative addresses. >=20 > * Justified output * >=20 > The new trace format is enabled with `LD_TRACE_ADDR_JUSTIFY=3D1`, otherwis= e > the default `ldd` trace format is selected by default for compatibility. Justified is not precise for this parameter because if it were justified the= right edge would be aligned. TRACE_LEFT_ALIGN is possibly more correct. I also realise I mucked up git send-email by forgetting git just picks the f= irst line as the subject. =E2=80=A6and this mail will also probably get mung= ed because I=E2=80=99m sending it from Apple whitespace munger on my phone. It seems that I have to get used to making lots of mistakes on public mailin= g lists if I want to participate in open source. P.S. There is no postscript. Only Ghostscript. > * Relative addresses * >=20 > `ldd` load addresses are displayed relative to the ld.so executable header= > address. Relative addresses are enabled by default, given the output mimic= s > systems without ASLR, thus there should be minimal compatibility issues. > There is also an option to negate addresses as an aid in interpreting them= , > seeing library addresses relative to the loader with negative offsets. >=20 > The patch adds three new ld.so flags accessible via environment variables:= >=20 > - `LD_TRACE_ADDR_JUSTIFY=3D1` - Show addresses left-justified > - `LD_TRACE_ADDR_ABSOLUTE=3D1` - Show absolute addresses (backwards compat= ) > - `LD_TRACE_ADDR_NEGATE=3D1` - Show negated addresses (combination option)= >=20 > It would also be trivial to add a base addend, or make addresses relative > to the program instead of the loader, or add a program header virtual > address, essentially translating away signs of ASLR. There is also the > absolute address compatibility mode for checking that ASLR is still alive.= >=20 > Anyhow, feedbackup welcome... >=20 > Regards, > Michael >=20 > Signed-off-by: Michael Clark >=20 > $ LD_TRACE_ADDR_NEGATE=3D1 \ > LD_TRACE_ADDR_JUSTIFY=3D1 \ > LD_TRACE_LOADED_OBJECTS=3D1 \ > build-tree/amd64-libc/elf/ld.so /usr/bin/Xwayland > (-0xffffffc381cdd000) linux-vdso.so.1 > (-0x00000000002b7000) libselinux.so.1 =3D> /lib/x86_64-linux-gnu/libsel= inux.so.1 > (-0x00000000003d5000) libgcrypt.so.20 =3D> /usr/lib/x86_64-linux-gnu/li= bgcrypt.so.20 > (-0x00000000003db000) libdl.so.2 =3D> /lib/x86_64-linux-gnu/libdl.so.2 > (-0x00000000003f8000) libunwind.so.8 =3D> /usr/lib/x86_64-linux-gnu/lib= unwind.so.8 > (-0x0000000000409000) libwayland-client.so.0 =3D> /usr/lib/x86_64-linux= -gnu/libwayland-client.so.0 > (-0x000000000041d000) libdrm.so.2 =3D> /usr/lib/x86_64-linux-gnu/libdrm= .so.2 > (-0x00000000004c6000) libpixman-1.so.0 =3D> /usr/lib/x86_64-linux-gnu/l= ibpixman-1.so.0 > (-0x00000000006f4000) libXfont2.so.2 =3D> /usr/lib/x86_64-linux-gnu/lib= Xfont2.so.2 > (-0x00000000006fa000) libXau.so.6 =3D> /usr/lib/x86_64-linux-gnu/libXau= .so.6 > (-0x00000000007a7000) libsystemd.so.0 =3D> /lib/x86_64-linux-gnu/libsys= temd.so.0 > (-0x00000000009a9000) libxshmfence.so.1 =3D> /usr/lib/x86_64-linux-gnu/= libxshmfence.so.1 > (-0x00000000009b1000) libXdmcp.so.6 =3D> /usr/lib/x86_64-linux-gnu/libX= dmcp.so.6 > (-0x0000000000ae6000) libepoxy.so.0 =3D> /usr/lib/x86_64-linux-gnu/libe= poxy.so.0 > (-0x0000000000af7000) libgbm.so.1 =3D> /usr/lib/x86_64-linux-gnu/libgbm= .so.1 > (-0x0000000000b7f000) libGL.so.1 =3D> /usr/lib/x86_64-linux-gnu/libGL.s= o.1 > (-0x0000000000bab000) libaudit.so.1 =3D> /lib/x86_64-linux-gnu/libaudit= .so.1 > (-0x0000000000cfa000) libm.so.6 =3D> /lib/x86_64-linux-gnu/libm.so.6 > (-0x0000000000d14000) libbsd.so.0 =3D> /usr/lib/x86_64-linux-gnu/libbsd= .so.0 > (-0x0000000000d39000) libpthread.so.0 =3D> /lib/x86_64-linux-gnu/libpth= read.so.0 > (-0x0000000000f2b000) libc.so.6 =3D> /lib/x86_64-linux-gnu/libc.so.6 > (-0x0000000000fbb000) libpcre2-8.so.0 =3D> /usr/lib/x86_64-linux-gnu/li= bpcre2-8.so.0 > (-0x0000000000000000) /lib64/ld-linux-x86-64.so.2 =3D> build-tree/amd64= -libc/elf/ld.so > (-0x0000000000fde000) libgpg-error.so.0 =3D> /lib/x86_64-linux-gnu/libg= pg-error.so.0 > (-0x0000000001007000) liblzma.so.5 =3D> /lib/x86_64-linux-gnu/liblzma.s= o.5 > (-0x0000000001013000) libffi.so.7 =3D> /usr/lib/x86_64-linux-gnu/libffi= .so.7 > (-0x0000000001031000) libz.so.1 =3D> /lib/x86_64-linux-gnu/libz.so.1 > (-0x0000000001044000) libbz2.so.1.0 =3D> /lib/x86_64-linux-gnu/libbz2.s= o.1.0 > (-0x000000000104e000) libfontenc.so.1 =3D> /usr/lib/x86_64-linux-gnu/li= bfontenc.so.1 > (-0x000000000110d000) libfreetype.so.6 =3D> /usr/lib/x86_64-linux-gnu/l= ibfreetype.so.6 > (-0x0000000001118000) librt.so.1 =3D> /lib/x86_64-linux-gnu/librt.so.1 > (-0x0000000001139000) liblz4.so.1 =3D> /usr/lib/x86_64-linux-gnu/liblz4= .so.1 > (-0x0000000001151000) libwayland-server.so.0 =3D> /usr/lib/x86_64-linux= -gnu/libwayland-server.so.0 > (-0x000000000117f000) libexpat.so.1 =3D> /lib/x86_64-linux-gnu/libexpat= .so.1 > (-0x0000000001237000) libGLdispatch.so.0 =3D> /usr/lib/x86_64-linux-gnu= /libGLdispatch.so.0 > (-0x000000000126b000) libGLX.so.0 =3D> /usr/lib/x86_64-linux-gnu/libGLX= .so.0 > (-0x0000000001273000) libcap-ng.so.0 =3D> /lib/x86_64-linux-gnu/libcap-= ng.so.0 > (-0x00000000012ad000) libpng16.so.16 =3D> /usr/lib/x86_64-linux-gnu/lib= png16.so.16 > (-0x00000000013ea000) libX11.so.6 =3D> /usr/lib/x86_64-linux-gnu/libX11= .so.6 > (-0x0000000001414000) libxcb.so.1 =3D> /usr/lib/x86_64-linux-gnu/libxcb= .so.1 >=20 > $ LD_TRACE_ADDR_ABSOLUTE=3D1 \ > LD_TRACE_LOADED_OBJECTS=3D1 \ > build-tree/amd64-libc/elf/ld.so /usr/bin/Xwayland > linux-vdso.so.1 (0x00007fff12dee000) > libselinux.so.1 =3D> /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f310= f6f8000) > libgcrypt.so.20 =3D> /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007= f310f5da000) > libdl.so.2 =3D> /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f310f5d4000) > libunwind.so.8 =3D> /usr/lib/x86_64-linux-gnu/libunwind.so.8 (0x00007f3= 10f5b7000) > libwayland-client.so.0 =3D> /usr/lib/x86_64-linux-gnu/libwayland-client= .so.0 (0x00007f310f5a6000) > libdrm.so.2 =3D> /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f310f592= 000) > libpixman-1.so.0 =3D> /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x000= 07f310f4e9000) > libXfont2.so.2 =3D> /usr/lib/x86_64-linux-gnu/libXfont2.so.2 (0x00007f3= 10f2bb000) > libXau.so.6 =3D> /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f310f2b5= 000) > libsystemd.so.0 =3D> /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f310= f208000) > libxshmfence.so.1 =3D> /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x0= 0007f310f006000) > libXdmcp.so.6 =3D> /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f310= effe000) > libepoxy.so.0 =3D> /usr/lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007f310= eec9000) > libgbm.so.1 =3D> /usr/lib/x86_64-linux-gnu/libgbm.so.1 (0x00007f310eeb8= 000) > libGL.so.1 =3D> /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f310ee3000= 0) > libaudit.so.1 =3D> /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007f310ee04= 000) > libm.so.6 =3D> /lib/x86_64-linux-gnu/libm.so.6 (0x00007f310ecb5000) > libbsd.so.0 =3D> /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f310ec9b= 000) > libpthread.so.0 =3D> /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f310= ec76000) > libc.so.6 =3D> /lib/x86_64-linux-gnu/libc.so.6 (0x00007f310ea84000) > libpcre2-8.so.0 =3D> /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007= f310e9f4000) > /lib64/ld-linux-x86-64.so.2 =3D> build-tree/amd64-libc/elf/ld.so (0x000= 07f310f9af000) > libgpg-error.so.0 =3D> /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007= f310e9d1000) > liblzma.so.5 =3D> /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f310e9a800= 0) > libffi.so.7 =3D> /usr/lib/x86_64-linux-gnu/libffi.so.7 (0x00007f310e99c= 000) > libz.so.1 =3D> /lib/x86_64-linux-gnu/libz.so.1 (0x00007f310e97e000) > libbz2.so.1.0 =3D> /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f310e96b= 000) > libfontenc.so.1 =3D> /usr/lib/x86_64-linux-gnu/libfontenc.so.1 (0x00007= f310e961000) > libfreetype.so.6 =3D> /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x000= 07f310e8a2000) > librt.so.1 =3D> /lib/x86_64-linux-gnu/librt.so.1 (0x00007f310e897000) > liblz4.so.1 =3D> /usr/lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f310e876= 000) > libwayland-server.so.0 =3D> /usr/lib/x86_64-linux-gnu/libwayland-server= .so.0 (0x00007f310e85e000) > libexpat.so.1 =3D> /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f310e830= 000) > libGLdispatch.so.0 =3D> /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0= x00007f310e778000) > libGLX.so.0 =3D> /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f310e744= 000) > libcap-ng.so.0 =3D> /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007f310e7= 3c000) > libpng16.so.16 =3D> /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f3= 10e702000) > libX11.so.6 =3D> /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f310e5c5= 000) > libxcb.so.1 =3D> /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f310e59b= 000) > --- > elf/rtld.c | 133 +++++++++++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 113 insertions(+), 20 deletions(-) >=20 > diff --git a/elf/rtld.c b/elf/rtld.c > index 9918fda05e76..c514cc723b68 100644 > --- a/elf/rtld.c > +++ b/elf/rtld.c > @@ -175,6 +175,24 @@ enum mode { normal, list, verify, trace }; > all the entries. */ > static void process_envvars (enum mode *modep, struct audit_list *); >=20 > +/* Option to display relative load addresses, with display address > + * having executable base address subtracted, making output constant > + * in the presence of ASLR, as well as reducing output differences. > + * `LD_TRACE_ADDR_ABSOLUTE=3D1` restores prior behavior. */ > +static int trace_addr_relative =3D 1; > + > +/* Option to negate load addresses, otherwise the default shows > + * negative relative offsets beacuase ld.so loads libs downwards, > + * and brk space is just after the executable in memory. The > + * justified format has sign to show negated address offsets. > + * `LD_TRACE_ADDR_NEGATE=3D1` to show signed positive offsets. */ > +static int trace_addr_negate =3D 0; > + > +/* Option to display left-justified addresses, making the listing > + * easier to read because addresses are all lined up in one column. > + * `LD_TRACE_ADDR_JUSTIFY=3D1` will left-justify addresses. */ > +static int trace_addr_justify =3D 0; > + > #ifdef DL_ARGV_NOT_RELRO > int _dl_argc attribute_hidden; > char **_dl_argv =3D NULL; > @@ -1683,6 +1701,8 @@ of this helper program; chances are you did not inte= nd to run this program.\n\ > GL(dl_rtld_map).l_phdr =3D rtld_phdr; > GL(dl_rtld_map).l_phnum =3D rtld_ehdr->e_phnum; >=20 > + /* base address (ld.so ehdr) used for relative display addresses */ > + size_t disp_addr, base_addr =3D (size_t) rtld_ehdr; >=20 > /* PT_GNU_RELRO is usually the last phdr. */ > size_t cnt =3D rtld_ehdr->e_phnum; > @@ -1989,6 +2009,12 @@ of this helper program; chances are you did not int= end to run this program.\n\ > for (i =3D 0; i < scope->r_nlist; i++) > { > l =3D scope->r_list [i]; > + > + /* Subtract and negate base from load address if requested */ > + disp_addr =3D (size_t) l->l_map_start; > + if (trace_addr_relative) disp_addr -=3D base_addr; > + if (trace_addr_negate) disp_addr =3D -disp_addr; > + > if (l->l_faked) > { > _dl_printf ("\t%s =3D> not found\n", l->l_libname->name); > @@ -1996,20 +2022,42 @@ of this helper program; chances are you did not in= tend to run this program.\n\ > } > if (_dl_name_match_p (GLRO(dl_trace_prelink), l)) > GLRO(dl_trace_prelink_map) =3D l; > - _dl_printf ("\t%s =3D> %s (0x%0*Zx, 0x%0*Zx)", > - DSO_FILENAME (l->l_libname->name), > - DSO_FILENAME (l->l_name), > - (int) sizeof l->l_map_start * 2, > - (size_t) l->l_map_start, > - (int) sizeof l->l_addr * 2, > - (size_t) l->l_addr); > - > - if (l->l_tls_modid) > - _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid, > - (int) sizeof l->l_tls_offset * 2, > - (size_t) l->l_tls_offset); > + if (trace_addr_justify) > + { > + _dl_printf ("\t(%s0x%0*Zx, 0x%0*Zx)", > + trace_addr_negate ? "-" : "+", > + (int) sizeof l->l_map_start * 2, > + disp_addr, > + (int) sizeof l->l_addr * 2, > + (size_t) l->l_addr); > + > + if (l->l_tls_modid) > + _dl_printf (" TLS(0x%Zx, 0x%0*Zx)", l->l_tls_modid, > + (int) sizeof l->l_tls_offset * 2, > + (size_t) l->l_tls_offset); > + > + _dl_printf (" %s =3D> %s\n", > + DSO_FILENAME (l->l_libname->name), > + DSO_FILENAME (l->l_name)); > + > + } > else > - _dl_printf ("\n"); > + { > + _dl_printf ("\t%s =3D> %s (0x%0*Zx, 0x%0*Zx)", > + DSO_FILENAME (l->l_libname->name), > + DSO_FILENAME (l->l_name), > + (int) sizeof l->l_map_start * 2, > + disp_addr, > + (int) sizeof l->l_addr * 2, > + (size_t) l->l_addr); > + > + if (l->l_tls_modid) > + _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid, > + (int) sizeof l->l_tls_offset * 2, > + (size_t) l->l_tls_offset); > + else > + _dl_printf ("\n"); > + } > } > } > else if (GLRO(dl_debug_mask) & DL_DEBUG_UNUSED) > @@ -2063,17 +2111,41 @@ of this helper program; chances are you did not in= tend to run this program.\n\ > else > { > for (l =3D main_map->l_next; l; l =3D l->l_next) > + { > + /* Subtract and negate base from load address if requested */ > + disp_addr =3D (size_t) l->l_map_start; > + if (trace_addr_relative) disp_addr -=3D base_addr; > + if (trace_addr_negate) disp_addr =3D -disp_addr; > + > if (l->l_faked) > /* The library was not found. */ > _dl_printf ("\t%s =3D> not found\n", l->l_libname->name); > - else if (strcmp (l->l_libname->name, l->l_name) =3D=3D 0) > - _dl_printf ("\t%s (0x%0*Zx)\n", l->l_libname->name, > - (int) sizeof l->l_map_start * 2, > - (size_t) l->l_map_start); > else > - _dl_printf ("\t%s =3D> %s (0x%0*Zx)\n", l->l_libname->name, > - l->l_name, (int) sizeof l->l_map_start * 2, > - (size_t) l->l_map_start); > + if (trace_addr_justify) > + if (strcmp (l->l_libname->name, l->l_name) =3D=3D 0) > + _dl_printf ("\t(%s0x%0*Zx) %s\n", > + trace_addr_negate ? "-" : "+", > + (int) sizeof l->l_map_start * 2, > + disp_addr, > + l->l_libname->name); > + else > + _dl_printf ("\t(%s0x%0*Zx) %s =3D> %s\n", > + trace_addr_negate ? "-" : "+", > + (int) sizeof l->l_map_start * 2, > + disp_addr, > + l->l_libname->name, l->l_name); > + else > + if (strcmp (l->l_libname->name, l->l_name) =3D=3D 0) > + _dl_printf ("\t%s (0x%0*Zx)\n", > + l->l_libname->name, > + (int) sizeof l->l_map_start * 2, > + disp_addr); > + else > + _dl_printf ("\t%s =3D> %s (0x%0*Zx)\n", > + l->l_libname->name, > + l->l_name, (int) sizeof l->l_map_start * 2, > + disp_addr); > + } > } >=20 > if (__builtin_expect (mode, trace) !=3D trace) > @@ -2761,6 +2833,27 @@ process_envvars (enum mode *modep, struct audit_lis= t *audit_list) > } > break; >=20 > + case 17: > + /* Addresses can be negated. */ > + if (!__libc_enable_secure > + && memcmp (envline, "TRACE_ADDR_NEGATE", 17) =3D=3D 0) > + trace_addr_negate =3D envline[18] !=3D '\0'; > + break; > + > + case 18: > + /* Addresses can be left-justified. */ > + if (!__libc_enable_secure > + && memcmp (envline, "TRACE_ADDR_JUSTIFY", 18) =3D=3D 0) > + trace_addr_justify =3D envline[19] !=3D '\0'; > + break; > + > + case 19: > + /* Absolute addresses can be displayed. */ > + if (!__libc_enable_secure > + && memcmp (envline, "TRACE_ADDR_ABSOLUTE", 19) =3D=3D 0) > + trace_addr_relative =3D envline[20] =3D=3D '\0'; > + break; > + > case 20: > /* The mode of the dynamic linker can be set. */ > if (memcmp (envline, "TRACE_LOADED_OBJECTS", 20) =3D=3D 0) > --=20 > 2.25.1 >=20