From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 62030 invoked by alias); 15 Jan 2018 13:58:52 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 61987 invoked by uid 89); 15 Jan 2018 13:58:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=2.12, _aceof, _ACEOF, UD:confdefs.h X-HELO: mail-lf0-f41.google.com Received: from mail-lf0-f41.google.com (HELO mail-lf0-f41.google.com) (209.85.215.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 15 Jan 2018 13:57:50 +0000 Received: by mail-lf0-f41.google.com with SMTP id f3so13478703lfe.4 for ; Mon, 15 Jan 2018 05:57:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=cccdZ6W8oYjQRttFtpGFITJ/JfyXx+ykePkS97o2Vaw=; b=jfyaDXIV2/TGG3vg+WglgCavD6aQu/7tj9PbS839jDuilOTdmlgBlYKIHCInIBl+/b nu3zdlQ2J5/w814kHYFpbpkE9jwP1PIONbgSZyVWDzcoQ/hVUQzlCsoj382SgoBcmdLj evYsOalNcMHSSMPWdEpgM8SuzwJ7kk6YCpdJ/r6wjIPAaiRjjGqEfmbdHEV2gd37EOm+ JHIko2oh46vQFko/YkbpsJvy+nhKIOAvC/nAeuiwuOXZeYtE9I+z7LjMs1eODahTotGQ GP/CBFQFSiZ6XjHtTEhIkKBywKZrhEJ0uHSqSwRPIKtilHtHibu5rICAv7dwTGQpiUs+ NdLA== X-Gm-Message-State: AKwxytcdGlZHDXr+aZm0Pn+grDtBKBw0xpiQb8dsrvvx+jdhdQo4LZrL dAmIJhsnp+2gGvb3DCpQtpqCaJEK40M= X-Google-Smtp-Source: ACJfBov0AjeJACoA3uiaxfVGu7g8jodAYzuRT84ePz7Ta77rv6cLEDrYZJUzGo10SvgctDZq7bsFBw== X-Received: by 10.25.42.197 with SMTP id q66mr10480881lfq.25.1516024665067; Mon, 15 Jan 2018 05:57:45 -0800 (PST) Received: from unit-923.Labs.IntelliJ.Net (gw.intellij.net. [81.3.129.2]) by smtp.gmail.com with ESMTPSA id f42sm1201345lfi.74.2018.01.15.05.57.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 05:57:44 -0800 (PST) From: Eldar Abusalimov To: gdb-patches@sourceware.org Cc: Eldar Abusalimov Subject: [PATCH] configure: Fix test for fs_base/gs_base in Date: Mon, 15 Jan 2018 13:58:00 -0000 Message-Id: <20180115135742.19768-1-eldar.abusalimov@jetbrains.com> X-IsSubscribed: yes X-SW-Source: 2018-01/txt/msg00268.txt.bz2 Make be included prior to including . glibc versions older than 2.14 use __uintNN_t types within certain structures defined in probably assuming these types are defined prior to including the header. This results in the following `configure` feature test compilation error that makes it think that `struct user_regs_struct` doesn't have `fs_base`/`gs_base` fields, althouh it does. configure:13617: checking for struct user_regs_struct.fs_base configure:13617: gcc -c -g -O2 -I/linux/include conftest.c >&5 In file included from conftest.c:158:0: /usr/include/sys/user.h:32:3: error: unknown type name '__uint16_t' __uint16_t cwd; ^ /usr/include/sys/user.h:33:3: error: unknown type name '__uint16_t' __uint16_t swd; ^ /usr/include/sys/user.h:34:3: error: unknown type name '__uint16_t' __uint16_t ftw; ^ /usr/include/sys/user.h:35:3: error: unknown type name '__uint16_t' __uint16_t fop; ^ /usr/include/sys/user.h:36:3: error: unknown type name '__uint64_t' __uint64_t rip; ^ /usr/include/sys/user.h:37:3: error: unknown type name '__uint64_t' __uint64_t rdp; ^ /usr/include/sys/user.h:38:3: error: unknown type name '__uint32_t' __uint32_t mxcsr; ^ /usr/include/sys/user.h:39:3: error: unknown type name '__uint32_t' __uint32_t mxcr_mask; ^ /usr/include/sys/user.h:40:3: error: unknown type name '__uint32_t' __uint32_t st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ ^ /usr/include/sys/user.h:41:3: error: unknown type name '__uint32_t' __uint32_t xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */ ^ /usr/include/sys/user.h:42:3: error: unknown type name '__uint32_t' __uint32_t padding[24]; ^ configure:13617: $? = 1 configure: failed program was: | /* confdefs.h */ ... | /* end confdefs.h. */ | #include | | int | main () | { | static struct user_regs_struct ac_aggr; | if (ac_aggr.fs_base) | return 0; | ; | return 0; | } Recent glibc versions don't use typedef'ed int types in , thus allowing it to be included as is (glibc commit d79a9c949c84e7f0ba33e87447c47af833e9f11a). However there're still some distros alive that use older glibc, for instance, RHEL/CentOS 6 package glibc 2.12. Also affects PR gdb/21559: ../../gdb/regcache.c:1087: internal-error: void regcache_raw_supply(regcache, int, const void): Assertion `regnum >= 0 && regnum < regcache->descr->nr_raw_registers' failed. As noted by Andrew Paprocki, who submitted the PR (https://sourceware.org/bugzilla/show_bug.cgi?id=21559#c3): > It should be noted that modifying `configure` to force on > `HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE` and > `HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE` fixes this issue. For some > reason the `configure` tests for `fs_base` and `gs_base` fail > even though `sys/user.h` on RHEL5 has the fields defined in > `user_regs_struct`. Note that this patch does NOT fix the root cause of PR gdb/21559, although now that `configure` properly detects the presence of the fields and sets HAVE_XXX accordingly, the execution takes another path, which doesn't lead to the assertion failure in question. gdb/ChangeLog: 2018-01-12 Eldar Abusalimov PR gdb/21559 * configure.ac: Include prior to when checking for fs_base/gs_base fields in struct user_regs_struct. * configure: Regenerate. gdb/gdbserver/ChangeLog: 2018-01-12 Eldar Abusalimov * configure.ac: Include prior to when checking for fs_base/gs_base fields in struct user_regs_struct. * configure: Regenerate. --- gdb/configure | 6 ++++-- gdb/configure.ac | 3 ++- gdb/gdbserver/configure | 6 ++++-- gdb/gdbserver/configure.ac | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/gdb/configure b/gdb/configure index 68b9aad02d..a61a73f6e2 100755 --- a/gdb/configure +++ b/gdb/configure @@ -14132,7 +14132,8 @@ fi # See if supports the %fs_base and %gs_bas amd64 segment registers. # Older amd64 Linux's don't have the fs_base and gs_base members of # `struct user_regs_struct'. -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include +ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include +#include " if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = x""yes; then : @@ -14142,7 +14143,8 @@ _ACEOF fi -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include +ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include +#include " if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = x""yes; then : diff --git a/gdb/configure.ac b/gdb/configure.ac index 551afc727e..e53dda00d2 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1464,7 +1464,8 @@ AC_CHECK_MEMBERS([struct reg.r_fs, struct reg.r_gs], [], [], # Older amd64 Linux's don't have the fs_base and gs_base members of # `struct user_regs_struct'. AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base], - [], [], [#include ]) + [], [], [#include +#include ]) # See if provides the PTRACE_GETREGS request. AC_MSG_CHECKING(for PTRACE_GETREGS) diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index ca51321c84..340ca7a19e 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -7525,7 +7525,8 @@ fi # See if supports the %fs_base and %gs_bas amd64 segment registers. # Older amd64 Linux's don't have the fs_base and gs_base members of # `struct user_regs_struct'. -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include +ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include +#include " if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = x""yes; then : @@ -7535,7 +7536,8 @@ _ACEOF fi -ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include +ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include +#include " if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = x""yes; then : diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 7ea3654f63..6727959e61 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -185,7 +185,8 @@ AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) # Older amd64 Linux's don't have the fs_base and gs_base members of # `struct user_regs_struct'. AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base], - [], [], [#include ]) + [], [], [#include +#include ]) AC_CHECK_TYPES(socklen_t, [], [], -- 2.15.1