From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id MTwcMRLJaWr3+zIAWB0awg (envelope-from ) for ; Wed, 29 Jul 2026 05:34:10 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=sSXceBzk; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id C60711E099; Wed, 29 Jul 2026 05:34:10 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 414BA1E099 for ; Wed, 29 Jul 2026 05:34:10 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D53D34BB24EE for ; Wed, 29 Jul 2026 09:34:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D53D34BB24EE Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=sSXceBzk Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by sourceware.org (Postfix) with ESMTPS id 8C7494BB24CB for ; Wed, 29 Jul 2026 09:33:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C7494BB24CB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8C7494BB24CB Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::62a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785317624; cv=none; b=XrxXSFHlSJhk3qZi7+4nENT/5GR2zqjiCGcOkzkac75PRa72++Awg/tGXF/kPNn2P4eX8pKo6wR5dLzoOknQEHNKuBpTRnMGfHNKZK8T5+zMJTokqZfb2Ziyy51/eJOn9MKW3ePr0HWJRdNbHE5mE4UagTrOTHa0JQBXjGDNDFw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785317624; c=relaxed/simple; bh=eI776XiW05bhcMA8SFCz3cowDyI+lRp+KLnzPmNdP5Y=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=sb9rPp5ZlhBnj8lTbSRL6VPSztj2OuEFePo0BZSWJjD0HOvbHUuNCKXk9FlryH4ITdmuij6zJc7aWRVUoEVGhP9ja0Iqbim6fXeYwj6tCwYDIEbcSyZlBuhgdfkLGm/kGQWOOyoeZ2AK6dmaQMyGLBW2bs9lJLRaWJ1krlerydw= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=sSXceBzk DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8C7494BB24CB Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2caced6038eso8764305ad.0 for ; Wed, 29 Jul 2026 02:33:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785317623; x=1785922423; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=AyNcYp7LrCI947sKDsBulEE21Pdik98VXyoka/n/ya4=; b=sSXceBzkKCtQnwo4C+lOHbjEPd8+IgUaaFVzcdp6hDKRzE72eXCwvaQcoDY4rPs2vd vAZzpuGS/FDelLKxa/W6dpFTVz1KXBS2L7omlYXbUINA5s4JhKUOVxT7nPFbWihic+/V tiN5Z6vaASSrW5pwPArQqIBXiVdiIDTaNu6ptRehRQCzNIIhV6UGtpejMsVXOLqysQGM Y72XH+KatZh0pf90hFffdKhn8VcwLCUf3cfKJxk+RxMZ74bZRAMeddlMtuCWFNA+3Oxd Dp3nNu5I1RS9c/ikpUZ/DJnc6x3BpOLIkxGXqzmfHR0pgZkc/s3iILFTQHK/tj6Y4SpL vWvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785317623; x=1785922423; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=AyNcYp7LrCI947sKDsBulEE21Pdik98VXyoka/n/ya4=; b=JZbHzzJpCOEdRQc0nmIB3xPg6a0sqTTQeW7LvH3OLMkE/GsNglD5QbzCeOlXtrCfE9 TEvU47prWLvpK+rvQm7S7vH6ewPAYaotls2r5oeLIpPd/hwQQymlGZ1K+T2oU/N86tjb qXjnA8fTOytcdz0TyJcuG8UCFalmAEIR3hRX4bHb0wl2DvCQUF9aiG3A23UfkUPxM/5C evz3L7SjgiFqhzwxH7ig7NJ36KKxmbpvhWr6LMmxuINUhPJPfyTrRzJ/6E5XQ6FMhYYr oikwyrAn68C5nipq8LoEUjMHBB8tAwQihGVulisr9rVIWNBXH0oVTv0JzJKFxQlLa3So ys2w== X-Gm-Message-State: AOJu0YyiIGa0JB0LJzBZd3WCrXEPB2bVEjiVDkVVmQRxiY52wldX2QM5 m6Dpqbw85QP5MiZFxCX28ai/ozZvU2bAxHmLRySvB0FVgG+ZidJXice5 X-Gm-Gg: AR+sD11R6+/Sif/cigrsEsFWqtNVLIRHuboKUprsIQnCWemqXzsbON29vFJVEkrdAA6 Mwl7bFxALrHzW+bGemhnM01bP6EH2fRqh0ThaQVtijHAkJULrPfShmbd1ZVqwOSgTp2VFv9wHP6 Lazz/Z0zW/Mrfbz+pbD7I+WjjcXhA5Gf6fspQp1uwr5kBn3ksVlQStokFkvT+WYVIhx/O7yRkkX Gpn3jMPSEorc0BF2Ep8vYHFPxnc0o1i3yX/7ySTIPW18QSFaw2jHU4Gxbi5tlz6lcMyWgjhDj1U d9joTyIgkSdy9WDqGXSM35+SW1EYbKrbTHjPp19OnOFtgait4jOnNgX9+sHGSMDqFDqCmLZGv87 OFzV2ez+GJmf87EzBMZUR49X6jOzn2TxBScVxAFv+1pFqOB1FwoRfQGcXxmVdsRBELq6J9688Dw aCyEZentePHE6Iv+F7dXBSNlW8xh8LicmAkBZFSJ4v/LzHRGYFabWGwkDglEmGqg9GJzVYXZOLK MqhWtx50DAYzst5uY6xvkaynQ== X-Received: by 2002:a17:903:1905:b0:2ca:2390:ff13 with SMTP id d9443c01a7336-2d026688998mr14253065ad.5.1785317622695; Wed, 29 Jul 2026 02:33:42 -0700 (PDT) Received: from dhcp-9-123-6-89.bl1-in.ibm.com ([129.41.58.1]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d022a46270sm8484785ad.26.2026.07.29.02.33.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 29 Jul 2026 02:33:42 -0700 (PDT) From: Aditya Vidyadhar Kamath To: ulrich.weigand@de.ibm.com, simon.marchi@polymtl.ca, tom@tromey.com Cc: gdb-patches@sourceware.org, Aditya.Kamath1@ibm.com, sangamesh.swamy@in.ibm.com, PRAJWAL.B.MEHENDARKAR@ibm.com Subject: [PATCH v1] Add TLS variable debug support for AIX [ 64-bit XCOFF files only] Date: Wed, 29 Jul 2026 15:03:02 +0530 Message-ID: <20260729093301.16401-2-akamath996@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org From: Aditya Kamath This is a patch that adds TLS debug support for variables in AIX for 64 bit XCOFF binaries only. Currently in AIX, if we debug a TLS variable we get, (gdb) print tls_counter Cannot find thread-local variables on this target This patch uses thread pointer in R13 plus adds the offset to get the TLS variable address. Also adds the AIX specific gdbarch () methods. After this patch we get, gdb/gdb thread-local GNU gdb (GDB) 18.0.50.20260728-git Copyright (C) 2026 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "powerpc64-ibm-aix7.2.0.0". Type "show configuration" for configuration details. For bug reporting instructions, please see: . +------------------------------------------------------------------------------+ | Find the GDB manual online at: | | http://www.gnu.org/software/gdb/documentation/. | | For help, type "help". | | Type "apropos word" to search for commands related to "word". | +------------------------------------------------------------------------------+ Reading symbols from thread-local... (gdb) b 16 Breakpoint 1 at 0x10000894: file thread-local.c, line 16. (gdb) r Starting program: /home/aditya/binutils-gdb/thread-local [New Thread 258 (tid 118292825) (id 2)] [Switching to thread 2 (Thread 258 (tid 118292825))] Thread 2 hit Breakpoint 1, thread_function (arg=0x1) at thread-local.c:16 16 sleep(1); (gdb) p tls_counter $1 = 100 (gdb) q --- gdb/rs6000-aix-tdep.c | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c index d823fea5645..34af3dc0a7c 100644 --- a/gdb/rs6000-aix-tdep.c +++ b/gdb/rs6000-aix-tdep.c @@ -39,6 +39,7 @@ #include "gdbsupport/xml-utils.h" #include "trad-frame.h" #include "frame-unwind.h" +#include "inferior.h" /* If the kernel has to deliver a signal, it pushes a sigcontext structure on the stack and then calls the signal handler, passing @@ -1355,6 +1356,53 @@ rs6000_aix_core_xfer_shared_libraries_aix (struct gdbarch *gdbarch, offset, len, 0); } +/* For AIX, use the rs6000_aix_fetch_tls_load_module_address gdb_arch method. + TLS variable addresses on AIX using the Local Exec TLS architecture are + calculated directly from the thread pointer (R13) plus the signed + TP-relative offset of the symbol. In this function we just return 0 and + all calculations are done in rs6000_aix_get_thread_local_address (). */ + +static CORE_ADDR +rs6000_aix_fetch_tls_load_module_address (struct objfile *objfile) +{ + return 0; +} + +/* Use the AIX get_thread_local_address gdbarch function. + + The thread pointer in AIX (64-bit) is located at R13. + The value of the XCOFF symbol is a signed offset from the thread + pointer for the Local Exec TLS model, which is the only model that + the AIX toolchain presently emits for executables. The TLS variable's + per-thread address is as follows since GDB provides that raw symbol value as OFFSET: + + address = (int64_t) offset + thread_pointer */ + +static CORE_ADDR +rs6000_aix_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, + CORE_ADDR lm_addr, CORE_ADDR offset) +{ + ppc_gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + /* 64-bit AIX: the thread pointer is in R13. */ + if (tdep->wordsize != 8) + throw_error (TLS_GENERIC_ERROR, + _("TLS lookup not yet supported for 32-bit AIX")); + + int tp_regnum = PPC_R0_REGNUM + 13; + + regcache *regcache + = get_thread_arch_regcache (current_inferior (), ptid, gdbarch); + target_fetch_registers (regcache, tp_regnum); + + ULONGEST tp; + if (regcache->cooked_read (tp_regnum, &tp) != REG_VALID) + throw_error (TLS_GENERIC_ERROR, + _("Unable to fetch thread pointer for TLS lookup")); + + return tp + (CORE_ADDR)(int64_t) offset; +} + static void rs6000_aix_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -1411,6 +1459,14 @@ rs6000_aix_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_auto_wide_charset (gdbarch, rs6000_aix_auto_wide_charset); set_gdbarch_make_solib_ops (gdbarch, make_aix_solib_ops); + + + /* TLS support for AIX. */ + set_gdbarch_fetch_tls_load_module_address + (gdbarch, rs6000_aix_fetch_tls_load_module_address); + set_gdbarch_get_thread_local_address + (gdbarch, rs6000_aix_get_thread_local_address); + frame_unwind_append_unwinder (gdbarch, &aix_sighandle_frame_unwind); } -- 2.51.2