Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F150427420
D17426.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D17426.diff
View Options
Index: head/devel/gdb/Makefile
===================================================================
--- head/devel/gdb/Makefile
+++ head/devel/gdb/Makefile
@@ -3,6 +3,7 @@
PORTNAME= gdb
PORTVERSION= 8.2
+PORTREVISION= 1
CATEGORIES= devel
MASTER_SITES= GNU
@@ -38,7 +39,8 @@
CFLAGS+= -Wno-unknown-warning-option
EXCLUDE= dejagnu expect sim texinfo intl
EXTRACT_AFTER_ARGS= ${EXCLUDE:S/^/--exclude /}
-EXTRA_PATCHES= ${FILESDIR}/commit-8aa0243d54
+EXTRA_PATCHES= ${FILESDIR}/commit-8aa0243d54 \
+ ${FILESDIR}/commit-93579f6f90
LIB_DEPENDS+= libexpat.so:textproc/expat2
VER= ${PORTVERSION:S/.//g}
Index: head/devel/gdb/files/commit-93579f6f90
===================================================================
--- head/devel/gdb/files/commit-93579f6f90
+++ head/devel/gdb/files/commit-93579f6f90
@@ -0,0 +1,57 @@
+commit 93579f6f908fa6010b141fd5da2974d878869c80
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Fri Nov 30 15:14:18 2018 -0800
+
+ Use kinfo_getfile to implement fdwalk on FreeBSD.
+
+ kinfo_getfile() requires a couple of system calls to fetch the list of
+ open file descriptors. This can be much cheaper than invoking fstat
+ on all of the values from 0 to the open file resource limit maximum.
+
+ gdb/ChangeLog:
+
+ * common/filestuff.c [HAVE_KINFO_GETFILE]: Include headers.
+ (fdwalk) [HAVE_KINFO_GETFILE]: Use kinfo_getfile.
+
+diff --git gdb/common/filestuff.c gdb/common/filestuff.c
+index 0db5c6936b..f4d5e38f07 100644
+--- gdb/common/filestuff.c
++++ gdb/common/filestuff.c
+@@ -36,6 +36,11 @@
+ #define HAVE_SOCKETS 1
+ #endif
+
++#ifdef HAVE_KINFO_GETFILE
++#include <sys/user.h>
++#include <libutil.h>
++#endif
++
+ #ifdef HAVE_SYS_RESOURCE_H
+ #include <sys/resource.h>
+ #endif /* HAVE_SYS_RESOURCE_H */
+@@ -108,6 +113,25 @@ fdwalk (int (*func) (void *, int), void *arg)
+ }
+ /* We may fall through to the next case. */
+ #endif
++#ifdef HAVE_KINFO_GETFILE
++ int nfd;
++ gdb::unique_xmalloc_ptr<struct kinfo_file[]> fdtbl
++ (kinfo_getfile (getpid (), &nfd));
++ if (fdtbl != NULL)
++ {
++ for (int i = 0; i < nfd; i++)
++ {
++ if (fdtbl[i].kf_fd >= 0)
++ {
++ int result = func (arg, fdtbl[i].kf_fd);
++ if (result != 0)
++ return result;
++ }
++ }
++ return 0;
++ }
++ /* We may fall through to the next case. */
++#endif
+
+ {
+ int max, fd;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 2, 3:55 AM (14 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30702310
Default Alt Text
D17426.diff (2 KB)
Attached To
Mode
D17426: Speed up devel/gdb startup on FreeBSD
Attached
Detach File
Event Timeline
Log In to Comment