devel/electron19: Remove expired port

2023-06-30 devel/electron19: EOLed upstream, switch to newer version
This commit is contained in:
Rene Ladan 2023-06-30 23:18:42 +02:00
parent ffd9f5af44
commit f4efb4dcbe
1178 changed files with 1 additions and 48633 deletions

1
MOVED
View file

@ -7739,3 +7739,4 @@ audio/libgroove||2023-06-30|Has expired: Fails to build with FFmpeg 6 and very l
multimedia/py-mlt6||2023-06-30|Has expired: Deprecated and unsupported upstream, please consider using multimedia/mlt7 instead
multimedia/mlt6-qt5|multimedia/mlt7-qt|2023-06-30|Has expired: Deprecated and unsupported upstream, please consider using multimedia/mlt7 instead
multimedia/mlt6|multimedia/mlt7|2023-06-30|Has expired: Deprecated and unsupported upstream, please consider using multimedia/mlt7 instead
devel/electron19||2023-06-30|Has expired: EOLed upstream, switch to newer version

View file

@ -598,7 +598,6 @@
SUBDIR += efl
SUBDIR += egypt
SUBDIR += eiffelstudio
SUBDIR += electron19
SUBDIR += electron21
SUBDIR += electron22
SUBDIR += electron23

View file

@ -1,356 +0,0 @@
PORTNAME= electron
DISTVERSIONPREFIX= v
DISTVERSION= ${ELECTRON_VER:S/-beta./.b/}
PORTREVISION= 3
CATEGORIES= devel
MASTER_SITES= https://github.com/tagattie/FreeBSD-Electron/releases/download/v19.0.9/:chromium \
https://commondatastorage.googleapis.com/chromium-nodejs/:chromium_node \
https://commondatastorage.googleapis.com/chromium-fonts/:chromium_testfonts
PKGNAMESUFFIX= ${ELECTRON_VER_MAJOR}
DISTFILES= chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
${CHROMIUM_NODE_MODULES_HASH}:chromium_node \
${CHROMIUM_TEST_FONTS_HASH}:chromium_testfonts \
electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
DIST_SUBDIR= ${PORTNAME}
MAINTAINER= tagattie@FreeBSD.org
COMMENT= Build cross-platform desktop apps with JavaScript, HTML, and CSS
WWW= https://electronjs.org/
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/electron/LICENSE
DEPRECATED= EOLed upstream, switch to newer version
EXPIRATION_DATE= 2023-06-30
FETCH_DEPENDS= yarn-node16>0:www/yarn-node16
EXTRACT_DEPENDS= yarn-node16>0:www/yarn-node16
PATCH_DEPENDS= git:devel/git
BUILD_DEPENDS= gperf:devel/gperf \
yasm:devel/yasm \
${LOCALBASE}/libdata/pkgconfig/dri.pc:graphics/mesa-dri \
${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
node16>0:www/node16 \
npm-node16>0:www/npm-node16
LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-core \
libatspi.so:accessibility/at-spi2-core \
libsnappy.so:archivers/snappy \
libFLAC.so:audio/flac \
libopus.so:audio/opus \
libdbus-1.so:devel/dbus \
libevent.so:devel/libevent \
libnotify.so:devel/libnotify \
libpci.so:devel/libpci \
libnspr4.so:devel/nspr \
libre2.so:devel/re2 \
libdrm.so:graphics/libdrm \
libpng.so:graphics/png \
libwayland-client.so:graphics/wayland \
libwebp.so:graphics/webp \
libva.so:multimedia/libva \
libopenh264.so:multimedia/openh264 \
libfreetype.so:print/freetype2 \
libharfbuzz.so:print/harfbuzz \
libsecret-1.so:security/libsecret \
libnss3.so:security/nss \
libexpat.so:textproc/expat2 \
libxkbcommon.so:x11/libxkbcommon \
libxshmfence.so:x11/libxshmfence \
libfontconfig.so:x11-fonts/fontconfig
RUN_DEPENDS= xdg-open:devel/xdg-utils
TEST_DEPENDS= git:devel/git \
${PYTHON_PKGNAMEPREFIX}python-dbusmock>0:devel/py-python-dbusmock@${PY_FLAVOR} \
npm-node16>0:www/npm-node16
USES= bison compiler:c++17-lang cpe gettext-tools gl gnome iconv \
jpeg localbase:ldflags ninja pkgconfig python:build,test \
shebangfix tar:xz xorg
CPE_VENDOR= electronjs
USE_GITHUB= yes
GH_TAGNAME= ${DISTVERSIONPREFIX}${ELECTRON_VER}
GH_TUPLE= nodejs:node:v${NODE_VER}:node \
nodejs:nan:${NAN_VER}:nan \
Squirrel:Squirrel.Mac:${SQUIRREL_MAC_VER}:squirrel_mac \
ReactiveCocoa:ReactiveObjC:${REACTIVEOBJC_VER}:reactiveobjc \
Mantle:Mantle:${MANTLE_VER}:mantle
USE_GL= gbm gl glesv2
USE_GNOME= atk cairo gdkpixbuf2 gtk30 libxml2 libxslt pango
USE_LDCONFIG= ${DATADIR}
USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrandr \
xrender xscrnsaver xtst
SHEBANG_FILES= buildtools/linux64/clang-format
MAKE_ARGS= -C out/${BUILDTYPE}
MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
CPLUS_INCLUDE_PATH=${LOCALBASE}/include
ALL_TARGET= electron third_party/electron_node:headers
POST_BUILD_TARGETS= licenses version
POST_BUILD_DIST_TARGETS= electron_dist_zip electron_chromedriver_zip \
electron_mksnapshot_zip
DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
BINARY_ALIAS= python3=${PYTHON_CMD}
NO_WRKSUBDIR= yes
WRKSRC_SUBDIR= src
PLIST_SUB= ELECTRON_VER=${ELECTRON_VER} \
ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR}
OPTIONS_DEFINE= CUPS DEBUG DIST DRIVER KERBEROS LTO
OPTIONS_DEFAULT= CUPS DRIVER KERBEROS ALSA
OPTIONS_GROUP= AUDIO
OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO SNDIO
OPTIONS_SUB= yes
DIST_DESC= Build distribution zip files
DRIVER_DESC= Install chromedriver
ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
ALSA_VARS= GN_ARGS+=use_alsa=true
ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
CUPS_LIB_DEPENDS= libcups.so:print/cups
CUPS_VARS= GN_ARGS+=use_cups=true
CUPS_VARS_OFF= GN_ARGS+=use_cups=false
DEBUG_VARS= BUILDTYPE=Debug \
GN_FILE=testing.gn \
GN_ARGS+=is_debug=true \
GN_BOOTSTRAP_FLAGS+=--debug
DEBUG_VARS_OFF= BUILDTYPE=Release \
GN_FILE=release.gn \
GN_ARGS+=blink_symbol_level=0 \
GN_ARGS+=is_debug=false \
GN_ARGS+=symbol_level=0
DIST_IMPLIES= DRIVER
DRIVER_ALL_TARGET= chromedriver
KERBEROS_VARS= GN_ARGS+=use_kerberos=true
KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
LTO_VARS= GN_ARGS+=use_thin_lto=true \
GN_ARGS+=thin_lto_enable_optimizations=true
LTO_VARS_OFF= GN_ARGS+=use_thin_lto=false
PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
# With SNDIO=on we exclude audio_manager_linux from the build (see
# media/audio/BUILD.gn) and use audio_manager_openbsd which does not
# support falling back to ALSA or PulseAudio.
SNDIO_PREVENTS= ALSA PULSEAUDIO
SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
SNDIO_VARS= GN_ARGS+=use_sndio=true
SNDIO_VARS_OFF= GN_ARGS+=use_sndio=false
# See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
CHROMIUM_VER= 102.0.5005.167
# See ${WRKSRC}/third_party/node/node_modules.tar.gz.sha1 for CHROMIUM_NODE_MODULES_HASH
CHROMIUM_NODE_MODULES_HASH= df473d4b1ab26ce6b669007521f2ffb8ff99f9d7
# See ${WRKSRC}/third_party/test_fonts/test_fonts.tar.gz.sha1 for CHROMIUM_TEST_FONTS_HASH
CHROMIUM_TEST_FONTS_HASH= cd96fc55dc243f6c6f4cb63ad117cad6cd48dceb
# See ${WRKSRC}/electron/DEPS for NODE_VER
NODE_VER= 16.14.2
# See ${WRKSRC}/electron/DEPS for NAN_VER
NAN_VER= 65b32af46e9d7fab2e4ff657751205b3865f4920
# See ${WRKSRC}/electron/DEPS for SQUIRREL_MAC_VER
SQUIRREL_MAC_VER= 0e5d146ba13101a1302d59ea6e6e0b3cace4ae38
# See ${WRKSRC}/electron/DEPS for REACTIVEOBJC_VER
REACTIVEOBJC_VER= 74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76
# See ${WRKSRC}/electron/DEPS for MANTLE_VER
MANTLE_VER= 78d3966b3c331292ea29ec38661b25df0a245948
YARN_TIMESTAMP= 1673511086
GN_ARGS+= clang_use_chrome_plugins=false \
enable_hangout_services_extension=true \
enable_js_type_check=false \
enable_nacl=false \
enable_one_click_signin=true \
enable_remoting=false \
enable_wmax_tokens=false \
fatal_linker_warnings=false \
is_clang=true \
optimize_webui=true \
toolkit_views=true \
treat_warnings_as_errors=false \
use_allocator="none" \
use_allocator_shim=false \
use_aura=true \
use_custom_libcxx=false \
use_gnome_keyring=false \
use_lld=true \
use_sysroot=false \
use_system_freetype=false \
use_system_harfbuzz=true \
use_system_libjpeg=true \
use_system_wayland_scanner=true \
use_udev=false \
extra_cxxflags="${CXXFLAGS}" \
extra_ldflags="${LDFLAGS}"
GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
.include "Makefile.version"
.include <bsd.port.pre.mk>
.if ${COMPILER_VERSION} < 130
LLVM_DEFAULT= 13
BUILD_DEPENDS+= clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT}
BINARY_ALIAS+= cpp=${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT} \
cc=${LOCALBASE}/bin/clang${LLVM_DEFAULT} \
c++=${LOCALBASE}/bin/clang++${LLVM_DEFAULT} \
ar=${LOCALBASE}/bin/llvm-ar${LLVM_DEFAULT} \
nm=${LOCALBASE}/bin/llvm-nm${LLVM_DEFAULT} \
ld=${LOCALBASE}/bin/ld.lld${LLVM_DEFAULT}
.else
BINARY_ALIAS+= ar=/usr/bin/llvm-ar \
nm=/usr/bin/llvm-nm
.endif
.if ${ARCH} == "amd64"
PLIST_SUB+= AMD64=""
.else
PLIST_SUB+= AMD64="@comment "
.endif
.if ${ARCH} == "i386"
PLIST_SUB+= I386=""
.else
PLIST_SUB+= I386="@comment "
.endif
pre-fetch:
@${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} ]; \
then ${MKDIR} ${WRKDIR}; \
${ECHO_CMD} 'yarn-offline-mirror "./yarn-offline-cache"' >> \
${WRKDIR}/.yarnrc; \
${CP} ${FILESDIR}/package.json ${FILESDIR}/yarn.lock ${WRKDIR}; \
cd ${WRKDIR} && ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache \
yarn --frozen-lockfile --ignore-scripts; \
${MTREE_CMD} -cbnSp yarn-offline-cache | ${MTREE_CMD} -C | ${SED} \
-e 's:time=[0-9.]*:time=${YARN_TIMESTAMP}.000000000:' \
-e 's:\([gu]id\)=[0-9]*:\1=0:g' \
-e 's:flags=.*:flags=none:' \
-e 's:^\.:./yarn-offline-cache:' > yarn-offline-cache.mtree; \
${TAR} cJf ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} \
@yarn-offline-cache.mtree; \
${RM} -r ${WRKDIR}; \
fi
post-extract:
# Move extracted sources to appropriate locations
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${PORTNAME}-${ELECTRON_VER} ${WRKSRC}/electron
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_nan}-${NAN_VER} \
${WRKSRC}/third_party/nan
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_node}-${NODE_VER} \
${WRKSRC}/third_party/electron_node
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_squirrel_mac}-${SQUIRREL_MAC_VER} \
${WRKSRC}/third_party/squirrel.mac
${MKDIR} ${WRKSRC}/third_party/squirrel.mac/vendor
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_reactiveobjc}-${REACTIVEOBJC_VER} \
${WRKSRC}/third_party/squirrel.mac/vendor/ReactiveObjC
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_mantle}-${MANTLE_VER} \
${WRKSRC}/third_party/squirrel.mac/vendor/Mantle
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/node_modules ${WRKSRC}/third_party/node
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/test_fonts ${WRKSRC}/third_party/test_fonts
# Install node modules for electron
${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/yarn-offline-cache ${WRKDIR}
${ECHO_CMD} 'yarn-offline-mirror "../../../yarn-offline-cache"' >> ${WRKSRC}/electron/.yarnrc
${MV} ${WRKSRC}/electron/package.json ${WRKSRC}/electron/package.json.bak
${CP} ${FILESDIR}/package.json ${WRKSRC}/electron
cd ${WRKSRC}/electron && \
${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache yarn --frozen-lockfile --offline
pre-patch:
${SH} ${FILESDIR}/apply-electron-patches.sh ${WRKSRC}
# ${FIND} ${WRKSRC} -type f -name '*.orig' -print -delete
# ${FIND} ${WRKSRC} -type f -name '*~' -print -delete
pre-configure:
# We used to remove bundled libraries to be sure that chromium uses
# system libraries and not shipped ones.
# cd ${WRKSRC} && ${PYTHON_CMD} \
#./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
./build/linux/unbundle/replace_gn_files.py --system-libraries \
flac fontconfig freetype harfbuzz-ng libdrm libevent libpng \
libusb libwebp libxml libxslt openh264 opus snappy || ${FALSE}
# Chromium uses an unreleased version of FFmpeg, so configure it
.for brand in Chrome Chromium
${CP} -r \
${WRKSRC}/third_party/ffmpeg/chromium/config/${brand}/linux/ \
${WRKSRC}/third_party/ffmpeg/chromium/config/${brand}/freebsd
.endfor
do-configure:
# GN generator bootstrapping and generating ninja files
cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn gen out/${BUILDTYPE} \
--args='import("//electron/build/args/${GN_FILE}") ${GN_ARGS}'
# Setup nodejs dependency
${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd/bin
${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd/bin/node
# Setup buildtools/freebsd
${MKDIR} ${WRKSRC}/buildtools/freebsd
${LN} -sf ${WRKSRC}/buildtools/linux64/clang-format ${WRKSRC}/buildtools/freebsd
${LN} -sf ${WRKSRC}/out/${BUILDTYPE}/gn ${WRKSRC}/buildtools/freebsd
${LN} -sf /usr/bin/strip ${WRKSRC}/buildtools/freebsd/strip
post-build:
cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_TARGETS}
post-build-DIST-on:
cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_DIST_TARGETS}
cd ${WRKSRC}/out/${BUILDTYPE} && \
${CP} chromedriver.zip chromedriver-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
${CP} dist.zip electron-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
${CP} mksnapshot.zip mksnapshot-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | ${SED} -e 's/ / */' > SHASUMS256.txt
do-install:
${MKDIR} ${STAGEDIR}${DATADIR}
.for f in electron mksnapshot v8_context_snapshot_generator
${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
.endfor
.for f in libEGL.so libGLESv2.so libffmpeg.so libvk_swiftshader.so
${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
.endfor
${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/libvulkan.so.1 ${STAGEDIR}${DATADIR}/libvulkan.so
.for f in LICENSE LICENSES.chromium.html icudtl.dat snapshot_blob.bin v8_context_snapshot.bin version vk_swiftshader_icd.json
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
.endfor
.for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
.endfor
${MKDIR} ${STAGEDIR}${DATADIR}/locales
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/locales/*.pak ${STAGEDIR}${DATADIR}/locales
${MKDIR} ${STAGEDIR}${DATADIR}/resources
.for f in default_app.asar
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/resources/${f} ${STAGEDIR}${DATADIR}/resources
.endfor
cd ${WRKSRC}/out/${BUILDTYPE}/gen && ${COPYTREE_SHARE} node_headers ${STAGEDIR}${DATADIR}
cd ${WRKSRC}/out/${BUILDTYPE} && ${COPYTREE_SHARE} gen/electron/buildflags ${STAGEDIR}${DATADIR}
cd ${WRKSRC}/out/${BUILDTYPE} && ${COPYTREE_SHARE} gen/v8/embedded.S ${STAGEDIR}${DATADIR}
${RLN} ${STAGEDIR}${DATADIR}/electron ${STAGEDIR}${PREFIX}/bin/electron${PKGNAMESUFFIX}
post-install-DIST-on:
${MKDIR} ${STAGEDIR}${DATADIR}/releases
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/SHASUMS256.txt ${STAGEDIR}${DATADIR}/releases
${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*-v${ELECTRON_VER}-freebsd-*.zip ${STAGEDIR}${DATADIR}/releases
post-install-DRIVER-on:
${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chromedriver.unstripped \
${STAGEDIR}${DATADIR}/chromedriver
do-test:
# Note 1: "npm install" will run before actual tests are executed
# Note 2: Xvfb or something similar is necessary for headless testing
cd ${WRKSRC}/electron && \
${SETENV} ${TEST_ENV} ELECTRON_OUT_DIR=${BUILDTYPE} LOCAL_GIT_DIRECTORY=${LOCALBASE} \
npm run test -- --ci
.include <bsd.port.post.mk>

View file

@ -1,2 +0,0 @@
ELECTRON_VER= 19.1.9
ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//}

View file

@ -1,21 +0,0 @@
TIMESTAMP = 1673767597
SHA256 (electron/chromium-102.0.5005.167.tar.xz) = 0ef31269e4fd0fe5871e29bb16a3a7aaea1de7eee5d7b2c4c209eff4b196d00e
SIZE (electron/chromium-102.0.5005.167.tar.xz) = 1302429260
SHA256 (electron/df473d4b1ab26ce6b669007521f2ffb8ff99f9d7) = 38fa60c59a8398ae33f8d12c1234735a74dc3c8d0c6d4bc7a9c212c2b4b7fef8
SIZE (electron/df473d4b1ab26ce6b669007521f2ffb8ff99f9d7) = 12046529
SHA256 (electron/cd96fc55dc243f6c6f4cb63ad117cad6cd48dceb) = ec973eccd669d417fbf2d0a4dac730744a3174268ff062db5451b55c82bc3492
SIZE (electron/cd96fc55dc243f6c6f4cb63ad117cad6cd48dceb) = 26759650
SHA256 (electron/electron-yarn-cache-19.1.9.tar.xz) = aaf6879fc53c0b9aa8e9ab9589185d765a1d04e5829d48d3d0bf340a70d14f19
SIZE (electron/electron-yarn-cache-19.1.9.tar.xz) = 37894480
SHA256 (electron/electron-electron-v19.1.9_GH0.tar.gz) = 5ab0d40a1c6c0cd7b961724c4bb72c533a6a608c0f62bdb9eddcb9013dfcda98
SIZE (electron/electron-electron-v19.1.9_GH0.tar.gz) = 10583692
SHA256 (electron/nodejs-node-v16.14.2_GH0.tar.gz) = cc2331a5c35d3dda0035d9cba71c3b8e234bc68e18ffd955b385c1e97062528f
SIZE (electron/nodejs-node-v16.14.2_GH0.tar.gz) = 88432213
SHA256 (electron/nodejs-nan-65b32af46e9d7fab2e4ff657751205b3865f4920_GH0.tar.gz) = a649b75bfa9c1a0254c73d022c6e98924b9471f593bcc83832daaf68da4cae8d
SIZE (electron/nodejs-nan-65b32af46e9d7fab2e4ff657751205b3865f4920_GH0.tar.gz) = 178733
SHA256 (electron/Squirrel-Squirrel.Mac-0e5d146ba13101a1302d59ea6e6e0b3cace4ae38_GH0.tar.gz) = f4ebb40a8d85dbb7ef02aa0571b2f8e22182c6d73b6992484a53c90047779d01
SIZE (electron/Squirrel-Squirrel.Mac-0e5d146ba13101a1302d59ea6e6e0b3cace4ae38_GH0.tar.gz) = 2112918
SHA256 (electron/ReactiveCocoa-ReactiveObjC-74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76_GH0.tar.gz) = 88e65f116c7a06fccedb43970fba63080a57a4e5dc29147d2cdfe1ee58dd0546
SIZE (electron/ReactiveCocoa-ReactiveObjC-74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76_GH0.tar.gz) = 1136238
SHA256 (electron/Mantle-Mantle-78d3966b3c331292ea29ec38661b25df0a245948_GH0.tar.gz) = a365df6d83e0be3cc000b70bd39734d80c28f0d9983ebe44698337a2ca464bb1
SIZE (electron/Mantle-Mantle-78d3966b3c331292ea29ec38661b25df0a245948_GH0.tar.gz) = 62962

View file

@ -1,26 +0,0 @@
#! /bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
GIT_CMD="git"
PATCH_CMD="${GIT_CMD} apply"
#PATCH_FLAGS="--numstat --check" # for debugging
PATCH_FLAGS="--verbose --reject"
WRKSRC=$1
PATCH_CONF=${WRKSRC}/electron/patches/config.json
${GIT_CMD} status "${WRKSRC}" > /dev/null 2>&1 && IS_GIT_REPO=1
PATCHD_REPOD_PAIRS=$(sed -e '1d; $d; /^$/d; s/[",]//g; s/: */:/' "${PATCH_CONF}")
for prp in ${PATCHD_REPOD_PAIRS}; do
pd=$(echo "${prp}" | awk -F: '{print $1}' | sed -e 's/src/./')
rd=$(echo "${prp}" | awk -F: '{print $2}' | sed -e 's/src/./')
(cd "${WRKSRC}/${rd}" && \
if [ -n "${IS_GIT_REPO}" ]; then
PATCH_FLAGS="${PATCH_FLAGS} --directory=$(${GIT_CMD} rev-parse --show-prefix)"
fi && \
while read -r p; do
${PATCH_CMD} ${PATCH_FLAGS} "${WRKSRC}/${pd}/${p}"
done < "${WRKSRC}/${pd}/.patches")
done

View file

@ -1,145 +0,0 @@
{
"name": "electron",
"version": "0.0.0-development",
"repository": "https://github.com/electron/electron",
"description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
"devDependencies": {
"@azure/storage-blob": "^12.9.0",
"@electron/asar": "^3.2.1",
"@electron/docs-parser": "^1.0.0",
"@electron/typescript-definitions": "^8.10.0",
"@octokit/auth-app": "^2.10.0",
"@octokit/rest": "^18.0.3",
"@primer/octicons": "^10.0.0",
"@types/basic-auth": "^1.1.3",
"@types/busboy": "^0.2.3",
"@types/chai": "^4.2.12",
"@types/chai-as-promised": "^7.1.3",
"@types/dirty-chai": "^2.0.2",
"@types/express": "^4.17.13",
"@types/fs-extra": "^9.0.1",
"@types/klaw": "^3.0.1",
"@types/minimist": "^1.2.0",
"@types/mocha": "^7.0.2",
"@types/node": "^16.11.26",
"@types/semver": "^7.3.3",
"@types/send": "^0.14.5",
"@types/split": "^1.0.0",
"@types/stream-json": "^1.5.1",
"@types/temp": "^0.8.34",
"@types/uuid": "^3.4.6",
"@types/webpack": "^4.41.21",
"@types/webpack-env": "^1.16.3",
"@typescript-eslint/eslint-plugin": "^4.4.1",
"@typescript-eslint/parser": "^4.4.1",
"aws-sdk": "^2.814.0",
"check-for-leaks": "^1.2.1",
"colors": "1.4.0",
"dotenv-safe": "^4.0.4",
"dugite": "^1.103.0",
"eslint": "^7.4.0",
"eslint-config-standard": "^14.1.1",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-mocha": "^7.0.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-standard": "^4.0.1",
"eslint-plugin-typescript": "^0.14.0",
"express": "^4.16.4",
"folder-hash": "^2.1.1",
"fs-extra": "^9.0.1",
"got": "^6.3.0",
"husky": "^6.0.0",
"klaw": "^3.0.0",
"lint": "^1.1.2",
"lint-staged": "^10.2.11",
"markdownlint": "^0.21.1",
"markdownlint-cli": "^0.25.0",
"minimist": "^1.2.6",
"null-loader": "^4.0.0",
"pre-flight": "^1.1.0",
"remark-cli": "^10.0.0",
"remark-preset-lint-markdown-style-guide": "^4.0.0",
"semver": "^5.6.0",
"shx": "^0.3.2",
"standard-markdown": "^6.0.0",
"stream-json": "^1.7.1",
"tap-xunit": "^2.4.1",
"temp": "^0.8.3",
"timers-browserify": "1.4.2",
"ts-loader": "^8.0.2",
"ts-node": "6.2.0",
"typescript": "^4.5.5",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"wrapper-webpack-plugin": "^2.1.0"
},
"private": true,
"scripts": {
"asar": "asar",
"generate-version-json": "node script/generate-version-json.js",
"lint": "node ./script/lint.js && npm run lint:docs",
"lint:js": "node ./script/lint.js --js",
"lint:clang-format": "python3 script/run-clang-format.py -r -c shell/ || (echo \"\\nCode not formatted correctly.\" && exit 1)",
"lint:clang-tidy": "ts-node ./script/run-clang-tidy.ts",
"lint:cpp": "node ./script/lint.js --cc",
"lint:objc": "node ./script/lint.js --objc",
"lint:py": "node ./script/lint.js --py",
"lint:gn": "node ./script/lint.js --gn",
"lint:docs": "remark docs -qf && npm run lint:js-in-markdown && npm run create-typescript-definitions && npm run lint:docs-relative-links && npm run lint:markdownlint",
"lint:docs-relative-links": "python3 ./script/check-relative-doc-links.py",
"lint:markdownlint": "markdownlint \"*.md\" \"docs/**/*.md\"",
"lint:js-in-markdown": "standard-markdown docs",
"create-api-json": "node script/create-api-json.js",
"create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --api=electron-api.json && node spec/ts-smoke/runner.js",
"gn-typescript-definitions": "npm run create-typescript-definitions && shx cp electron.d.ts",
"pre-flight": "pre-flight",
"gn-check": "node ./script/gn-check.js",
"gn-format": "python3 script/run-gn-format.py",
"precommit": "lint-staged",
"preinstall": "node -e 'process.exit(0)'",
"prepack": "check-for-leaks",
"repl": "node ./script/start.js --interactive",
"start": "node ./script/start.js",
"test": "node ./script/spec-runner.js",
"tsc": "tsc",
"webpack": "webpack"
},
"license": "MIT",
"author": "Electron Community",
"keywords": [
"electron"
],
"lint-staged": {
"*.{js,ts}": [
"node script/lint.js --js --fix --only --"
],
"*.{js,ts,d.ts}": [
"ts-node script/gen-filenames.ts"
],
"*.{cc,mm,c,h}": [
"python3 script/run-clang-format.py -r -c --fix"
],
"*.md": [
"npm run lint:docs"
],
"*.{gn,gni}": [
"npm run gn-check",
"npm run gn-format"
],
"*.py": [
"node script/lint.js --py --fix --only --"
],
"docs/api/**/*.md": [
"ts-node script/gen-filenames.ts",
"markdownlint --config .markdownlint.autofix.json --fix",
"git add filenames.auto.gni"
],
"{*.patch,.patches}": [
"node script/lint.js --patches --only --",
"ts-node script/check-patch-diff.ts"
],
"DEPS": [
"node script/gen-hunspell-filenames.js"
]
}
}

View file

@ -1,80 +0,0 @@
--- BUILD.gn.orig 2022-07-22 06:18:29 UTC
+++ BUILD.gn
@@ -54,7 +54,7 @@ declare_args() {
root_extra_deps = []
}
-if (is_official_build) {
+if (is_official_build && !is_bsd) {
# An official (maximally optimized!) component (optimized for build times)
# build doesn't make sense and usually doesn't work.
assert(!is_component_build)
@@ -86,7 +86,6 @@ group("gn_all") {
"//codelabs",
"//components:components_unittests",
"//components/gwp_asan:gwp_asan_unittests",
- "//infra/orchestrator:orchestrator_all",
"//net:net_unittests",
"//services:services_unittests",
"//services/service_manager/public/cpp",
@@ -450,7 +449,7 @@ group("gn_all") {
]
}
- if (is_linux || is_chromeos || is_android) {
+ if ((is_linux && !is_bsd) || is_chromeos || is_android) {
deps += [
"//third_party/breakpad:breakpad_unittests",
"//third_party/breakpad:core-2-minidump",
@@ -635,6 +634,15 @@ group("gn_all") {
}
}
+ if (is_bsd) {
+ deps -= [
+ "//third_party/breakpad:dump_syms($host_toolchain)",
+ "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+ "//third_party/breakpad:minidump_dump($host_toolchain)",
+ "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+ }
+
if (is_mac) {
deps += [
"//third_party/breakpad:crash_inspector",
@@ -683,7 +691,7 @@ group("gn_all") {
host_os == "win") {
deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
}
- } else if (!is_android && !is_ios && !is_fuchsia) {
+ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
}
@@ -1159,7 +1167,7 @@ if (!is_ios) {
data_deps += [ "//content/web_test:web_test_common_mojom_js_data_deps" ]
}
- if (!is_win && !is_android) {
+ if (!is_win && !is_android && !is_bsd) {
data_deps +=
[ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
}
@@ -1168,7 +1176,7 @@ if (!is_ios) {
data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
}
- if (is_linux || is_chromeos) {
+ if ((is_linux && !is_bsd) || is_chromeos) {
data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
}
@@ -1567,7 +1575,7 @@ group("chromium_builder_perf") {
if (is_win) {
data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
- } else {
+ } else if (!is_bsd) {
data_deps +=
[ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
}

View file

@ -1,11 +0,0 @@
--- apps/ui/views/app_window_frame_view.cc.orig 2022-05-19 05:17:31 UTC
+++ apps/ui/views/app_window_frame_view.cc
@@ -138,7 +138,7 @@ gfx::Rect AppWindowFrameView::GetWindowBoundsForClient
gfx::Rect window_bounds = client_bounds;
// TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is
// complete.
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_BSD)
// Get the difference between the widget's client area bounds and window
// bounds, and grow |window_bounds| by that amount.
gfx::Insets native_frame_insets =

View file

@ -1,14 +0,0 @@
--- ash/display/mirror_window_controller.cc.orig 2022-05-19 05:17:32 UTC
+++ ash/display/mirror_window_controller.cc
@@ -296,7 +296,11 @@ void MirrorWindowController::UpdateWindow(
return info.id() == iter->first;
}) == display_info_list.end()) {
CloseAndDeleteHost(iter->second, true);
+#if defined(__llvm__)
+ mirroring_host_info_map_.erase(iter++);
+#else
iter = mirroring_host_info_map_.erase(iter);
+#endif
} else {
++iter;
}

View file

@ -1,146 +0,0 @@
--- base/BUILD.gn.orig 2022-05-25 04:00:42 UTC
+++ base/BUILD.gn
@@ -998,7 +998,7 @@ mixed_component("base") {
"timer/hi_res_timer_manager_posix.cc",
]
- if (!is_nacl && !is_apple) {
+ if (!is_nacl && !is_apple && !is_bsd) {
sources += [
"cpu_affinity_posix.cc",
"cpu_affinity_posix.h",
@@ -1009,6 +1009,12 @@ mixed_component("base") {
"profiler/thread_delegate_posix.h",
]
}
+
+ if (is_bsd) {
+ sources += [
+ "profiler/stack_sampler_posix.cc",
+ ]
+ }
}
if (is_win) {
@@ -1486,11 +1492,23 @@ mixed_component("base") {
# building inside the cros_sdk environment - use host_toolchain as a
# more robust check for this.
if (!use_sysroot &&
- (is_android || ((is_linux || is_chromeos) && !is_chromecast)) &&
+ (is_android || ((is_linux || is_chromeos) && !is_chromecast && !is_bsd)) &&
host_toolchain != "//build/toolchain/cros:host") {
libs += [ "atomic" ]
}
+ # *BSD needs libkvm
+ if (is_bsd) {
+ libs += [ "kvm" ]
+ }
+
+ if (is_freebsd) {
+ libs += [
+ "execinfo",
+ "util",
+ ]
+ }
+
if (use_allocator_shim) {
sources += [
"allocator/allocator_shim.cc",
@@ -1518,7 +1536,7 @@ mixed_component("base") {
]
configs += [ "//base/allocator:mac_no_default_new_delete_symbols" ]
}
- if (is_chromeos || is_linux) {
+ if (is_chromeos || (is_linux && !is_bsd)) {
sources += [
"allocator/allocator_shim_override_cpp_symbols.h",
"allocator/allocator_shim_override_glibc_weak_symbols.h",
@@ -1574,7 +1592,7 @@ mixed_component("base") {
# Allow more direct string conversions on platforms with native utf8
# strings
- if (is_apple || is_chromeos || is_chromecast || is_fuchsia) {
+ if (is_apple || is_chromeos || is_chromecast || is_fuchsia || is_bsd) {
defines += [ "SYSTEM_NATIVE_UTF8" ]
}
@@ -2147,6 +2165,42 @@ mixed_component("base") {
}
}
+ if (is_bsd) {
+ sources -= [
+ "files/file_path_watcher_inotify.cc",
+ "files/file_util_linux.cc",
+ "files/scoped_file_linux.cc",
+ "process/memory_linux.cc",
+ "process/process_linux.cc",
+ "system/sys_info_linux.cc",
+ "process/process_iterator_linux.cc",
+ "process/process_metrics_linux.cc",
+ "process/process_handle_linux.cc"
+ ]
+ sources += [
+ "process/memory_stubs.cc",
+ "files/file_path_watcher_kqueue.cc",
+ "files/file_path_watcher_kqueue.h",
+ "files/file_path_watcher_bsd.cc",
+ ]
+ }
+
+ if (is_openbsd) {
+ sources += [
+ "process/process_handle_openbsd.cc",
+ "process/process_iterator_openbsd.cc",
+ "process/process_metrics_openbsd.cc",
+ "system/sys_info_openbsd.cc",
+ ]
+ } else if (is_freebsd) {
+ sources += [
+ "process/process_handle_freebsd.cc",
+ "process/process_iterator_freebsd.cc",
+ "process/process_metrics_freebsd.cc",
+ "system/sys_info_freebsd.cc",
+ ]
+ }
+
# iOS
if (is_ios) {
sources -= [
@@ -3436,7 +3490,7 @@ test("base_unittests") {
}
}
- if (is_linux || is_chromeos) {
+ if ((is_linux || is_chromeos) && !is_bsd) {
sources += [
"debug/proc_maps_linux_unittest.cc",
"files/scoped_file_linux_unittest.cc",
@@ -3484,7 +3538,7 @@ test("base_unittests") {
"posix/unix_domain_socket_unittest.cc",
"task/thread_pool/task_tracker_posix_unittest.cc",
]
- if (!is_nacl && !is_apple) {
+ if (!is_nacl && !is_apple && !is_bsd) {
sources += [
"cpu_affinity_posix_unittest.cc",
"profiler/stack_copier_signal_unittest.cc",
@@ -3495,7 +3549,7 @@ test("base_unittests") {
# Allow more direct string conversions on platforms with native utf8
# strings
- if (is_apple || is_chromeos || is_chromecast || is_fuchsia) {
+ if (is_apple || is_chromeos || is_chromecast || is_fuchsia || is_bsd) {
defines += [ "SYSTEM_NATIVE_UTF8" ]
}
@@ -3657,7 +3711,7 @@ test("base_unittests") {
}
}
- if (is_fuchsia || is_linux || is_chromeos) {
+ if ((is_fuchsia || is_linux || is_chromeos) && !is_bsd) {
sources += [
"debug/elf_reader_unittest.cc",
"debug/test_elf_image_builder.cc",

View file

@ -1,20 +0,0 @@
--- base/allocator/partition_allocator/address_space_randomization.h.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/address_space_randomization.h
@@ -38,7 +38,7 @@ AslrMask(uintptr_t bits) {
#if defined(ARCH_CPU_64_BITS)
- #if defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+ #if defined(MEMORY_TOOL_REPLACES_ALLOCATOR) && !defined(OS_BSD)
// We shouldn't allocate system pages at all for sanitizer builds. However,
// we do, and if random hint addresses interfere with address ranges
@@ -121,7 +121,7 @@ AslrMask(uintptr_t bits) {
return AslrAddress(0x20000000ULL);
}
- #elif BUILDFLAG(IS_LINUX)
+ #elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)
// Linux on arm64 can use 39, 42, 48, or 52-bit user space, depending on
// page size and number of levels of translation pages used. We use

View file

@ -1,11 +0,0 @@
--- base/allocator/partition_allocator/page_allocator.h.orig 2022-05-19 03:45:15 UTC
+++ base/allocator/partition_allocator/page_allocator.h
@@ -194,7 +194,7 @@ BASE_EXPORT void DecommitAndZeroSystemPages(void* addr
// Whether decommitted memory is guaranteed to be zeroed when it is
// recommitted. Do not assume that this will not change over time.
constexpr BASE_EXPORT bool DecommittedMemoryIsAlwaysZeroed() {
-#if BUILDFLAG(IS_APPLE)
+#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD)
return false;
#else
return true;

View file

@ -1,29 +0,0 @@
--- base/allocator/partition_allocator/page_allocator_constants.h.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/page_allocator_constants.h
@@ -24,7 +24,7 @@
// elimination.
#define PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR __attribute__((const))
-#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
// This should work for all POSIX (if needed), but currently all other
// supported OS/architecture combinations use either hard-coded values
// (such as x86) or have means to determine these values without needing
@@ -79,7 +79,7 @@ PageAllocationGranularityShift() {
return 14; // 16kB
#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)
return vm_page_shift;
-#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
// arm64 supports 4kb (shift = 12), 16kb (shift = 14), and 64kb (shift = 16)
// page sizes. Retrieve from or initialize cache.
int shift = page_characteristics.shift.load(std::memory_order_relaxed);
@@ -99,7 +99,7 @@ PageAllocationGranularity() {
// This is literally equivalent to |1 << PageAllocationGranularityShift()|
// below, but was separated out for IS_APPLE to avoid << on a non-constexpr.
return vm_page_size;
-#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
// arm64 supports 4kb, 16kb, and 64kb page sizes. Retrieve from or
// initialize cache.
int size = page_characteristics.size.load(std::memory_order_relaxed);

View file

@ -1,16 +0,0 @@
--- base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2022-05-19 05:17:34 UTC
+++ base/allocator/partition_allocator/page_allocator_internals_posix.h
@@ -352,8 +352,12 @@ bool TryRecommitSystemPagesInternal(
void DiscardSystemPagesInternal(uintptr_t address, size_t length) {
void* ptr = reinterpret_cast<void*>(address);
-#if BUILDFLAG(IS_APPLE)
+#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD)
+#if BUILDFLAG(IS_BSD)
+ int ret = madvise(ptr, length, MADV_FREE);
+#else
int ret = madvise(ptr, length, MADV_FREE_REUSABLE);
+#endif
if (ret) {
// MADV_FREE_REUSABLE sometimes fails, so fall back to MADV_DONTNEED.
ret = madvise(ptr, length, MADV_DONTNEED);

View file

@ -1,11 +0,0 @@
--- base/allocator/partition_allocator/partition_address_space.cc.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_address_space.cc
@@ -184,7 +184,7 @@ void PartitionAddressSpace::UninitConfigurablePoolForT
setup_.configurable_pool_ = 0;
}
-#if BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
PageCharacteristics page_characteristics;

View file

@ -1,17 +0,0 @@
--- base/allocator/partition_allocator/partition_alloc.cc.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_alloc.cc
@@ -63,8 +63,14 @@ void PartitionAllocGlobalInit(OomFunction on_out_of_me
"maximum direct mapped allocation");
// Check that some of our zanier calculations worked out as expected.
+#if defined(__i386__) && defined(OS_FREEBSD)
+ // alignof(std::max_align_t) is only 4 on FreeBSD/i386
+ static_assert(internal::kSmallestBucket >= internal::kAlignment,
+ "generic smallest bucket");
+#else
static_assert(internal::kSmallestBucket == internal::kAlignment,
"generic smallest bucket");
+#endif
static_assert(internal::kMaxBucketed == 917504, "generic max bucketed");
STATIC_ASSERT_OR_PA_CHECK(
internal::MaxSystemPagesPerRegularSlotSpan() <= 16,

View file

@ -1,29 +0,0 @@
--- base/allocator/partition_allocator/partition_alloc_config.h.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_alloc_config.h
@@ -66,7 +66,7 @@ static_assert(sizeof(void*) != 8, "");
// POSIX is not only UNIX, e.g. macOS and other OSes. We do use Linux-specific
// features such as futex(2).
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
#define PA_HAS_LINUX_KERNEL
#endif
@@ -186,7 +186,7 @@ constexpr bool kUseLazyCommit = false;
// On these platforms, lock all the partitions before fork(), and unlock after.
// This may be required on more platforms in the future.
-#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
#define PA_HAS_ATFORK_HANDLER
#endif
@@ -225,7 +225,7 @@ constexpr bool kUseLazyCommit = false;
//
// Also enabled on ARM64 macOS, as the 16kiB pages on this platform lead to
// larger slot spans.
-#if BUILDFLAG(IS_LINUX) || (BUILDFLAG(IS_MAC) && defined(ARCH_CPU_ARM64))
+#if BUILDFLAG(IS_LINUX) || (BUILDFLAG(IS_MAC) && defined(ARCH_CPU_ARM64)) || BUILDFLAG(IS_BSD)
#define PA_PREFER_SMALLER_SLOT_SPANS
#endif // BUILDFLAG(IS_LINUX)

View file

@ -1,11 +0,0 @@
--- base/allocator/partition_allocator/partition_alloc_constants.h.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_alloc_constants.h
@@ -80,7 +80,7 @@ PartitionPageShift() {
return 18; // 256 KiB
}
#elif (BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)) || \
- (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64))
+ ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64))
PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR ALWAYS_INLINE size_t
PartitionPageShift() {
return PageAllocationGranularityShift() + 2;

View file

@ -1,29 +0,0 @@
--- base/allocator/partition_allocator/partition_page.h.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_page.h
@@ -129,13 +129,14 @@ struct __attribute__((packed)) SlotSpanMetadata {
PartitionBucket<thread_safe>* const bucket = nullptr;
// CHECK()ed in AllocNewSlotSpan().
-#if defined(PA_HAS_64_BITS_POINTERS) && BUILDFLAG(IS_APPLE)
+#if (defined(PA_HAS_64_BITS_POINTERS) && BUILDFLAG(IS_APPLE)) || \
+ (BUILDFLAG(IS_FREEBSD) && defined(__i386__))
// System page size is not a constant on Apple OSes, but is either 4 or 16kiB
// (1 << 12 or 1 << 14), as checked in PartitionRoot::Init(). And
// PartitionPageSize() is 4 times the OS page size.
static constexpr size_t kMaxSlotsPerSlotSpan =
4 * (1 << 14) / kSmallestBucket;
-#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
// System page size can be 4, 16, or 64 kiB on Linux on arm64. 64 kiB is
// currently (kMaxSlotsPerSlotSpanBits == 13) not supported by the code,
// so we use the 16 kiB maximum (64 kiB will crash).
@@ -149,7 +150,9 @@ struct __attribute__((packed)) SlotSpanMetadata {
#endif // defined(PA_HAS_64_BITS_POINTERS) && BUILDFLAG(IS_APPLE)
// The maximum number of bits needed to cover all currently supported OSes.
static constexpr size_t kMaxSlotsPerSlotSpanBits = 13;
+#if !BUILDFLAG(IS_FREEBSD) && defined(__i386__)
static_assert(kMaxSlotsPerSlotSpan < (1 << kMaxSlotsPerSlotSpanBits), "");
+#endif
// |marked_full| isn't equivalent to being full. Slot span is marked as full
// iff it isn't on the active slot span list (or any other list).

View file

@ -1,38 +0,0 @@
--- base/allocator/partition_allocator/partition_root.cc.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/partition_root.cc
@@ -29,7 +29,7 @@
#include "wow64apiset.h"
#endif
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
#include <pthread.h>
#endif
@@ -226,7 +226,7 @@ void PartitionAllocMallocInitOnce() {
if (!g_global_init_called.compare_exchange_strong(expected, true))
return;
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// When fork() is called, only the current thread continues to execute in the
// child process. If the lock is held, but *not* by this thread when fork() is
// called, we have a deadlock.
@@ -305,7 +305,7 @@ static size_t PartitionPurgeSlotSpan(
constexpr size_t kMaxSlotCount =
(PartitionPageSize() * kMaxPartitionPagesPerRegularSlotSpan) /
SystemPageSize();
-#elif BUILDFLAG(IS_APPLE) || (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64))
+#elif BUILDFLAG(IS_APPLE) || ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64))
// It's better for slot_usage to be stack-allocated and fixed-size, which
// demands that its size be constexpr. On IS_APPLE and Linux on arm64,
// PartitionPageSize() is always SystemPageSize() << 2, so regardless of
@@ -648,7 +648,7 @@ void PartitionRoot<thread_safe>::Init(PartitionOptions
// apple OSes.
PA_CHECK((internal::SystemPageSize() == (size_t{1} << 12)) ||
(internal::SystemPageSize() == (size_t{1} << 14)));
-#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)) && defined(ARCH_CPU_ARM64)
// Check runtime pagesize. Though the code is currently the same, it is
// not merged with the IS_APPLE case above as a 1 << 16 case needs to be
// added here in the future, to allow 64 kiB pagesize. That is only

View file

@ -1,47 +0,0 @@
--- base/allocator/partition_allocator/spinning_mutex.cc.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/spinning_mutex.cc
@@ -17,7 +17,15 @@
#if defined(PA_HAS_LINUX_KERNEL)
#include <errno.h>
+#if defined(OS_OPENBSD)
+#include <sys/futex.h>
+#elif defined(OS_FREEBSD)
+#include <sys/types.h>
+#include <sys/thr.h>
+#include <sys/umtx.h>
+#else
#include <linux/futex.h>
+#endif
#include <sys/syscall.h>
#include <unistd.h>
#endif // defined(PA_HAS_LINUX_KERNEL)
@@ -116,8 +124,13 @@ void SpinningMutex::FutexWait() {
// |kLockedContended| anymore. Note that even without spurious wakeups, the
// value of |state_| is not guaranteed when this returns, as another thread
// may get the lock before we get to run.
+#if defined(OS_FREEBSD)
+ int err = _umtx_op(&state_, UMTX_OP_WAIT_UINT_PRIVATE,
+ kLockedContended, nullptr, nullptr);
+#else
int err = syscall(SYS_futex, &state_, FUTEX_WAIT | FUTEX_PRIVATE_FLAG,
kLockedContended, nullptr, nullptr, 0);
+#endif
if (err) {
// These are programming error, check them.
@@ -129,8 +142,14 @@ void SpinningMutex::FutexWait() {
void SpinningMutex::FutexWake() {
int saved_errno = errno;
+#if defined(OS_FREEBSD)
+ long retval = _umtx_op(&state_, UMTX_OP_WAKE_PRIVATE,
+ 1 /* wake up a single waiter */, nullptr, nullptr);
+#else
long retval = syscall(SYS_futex, &state_, FUTEX_WAKE | FUTEX_PRIVATE_FLAG,
1 /* wake up a single waiter */, nullptr, nullptr, 0);
+#endif
+
PA_CHECK(retval != -1);
errno = saved_errno;
}

View file

@ -1,50 +0,0 @@
--- base/allocator/partition_allocator/starscan/stack/stack.cc.orig 2022-05-25 04:00:42 UTC
+++ base/allocator/partition_allocator/starscan/stack/stack.cc
@@ -17,6 +17,10 @@
#include <pthread.h>
#endif
+#if defined(OS_BSD)
+#include <pthread_np.h>
+#endif
+
#if defined(LIBC_GLIBC)
extern "C" void* __libc_stack_end;
#endif
@@ -47,6 +51,36 @@ void* GetStackTop() {
void* GetStackTop() {
return pthread_get_stackaddr_np(pthread_self());
+}
+
+#elif defined(OS_OPENBSD)
+
+void* GetStackTop() {
+ stack_t ss;
+ if (pthread_stackseg_np(pthread_self(), &ss) != 0)
+ return nullptr;
+ return reinterpret_cast<uint8_t*>(ss.ss_sp);
+}
+
+#elif defined(OS_FREEBSD)
+
+void* GetStackTop() {
+ pthread_attr_t attr;
+ int error = pthread_attr_init(&attr);
+ if (error) {
+ return nullptr;
+ }
+ error = pthread_attr_get_np(pthread_self(), &attr);
+ if (!error) {
+ void* base;
+ size_t size;
+ error = pthread_attr_getstack(&attr, &base, &size);
+ PA_CHECK(!error);
+ pthread_attr_destroy(&attr);
+ return reinterpret_cast<uint8_t*>(base) + size;
+ }
+ pthread_attr_destroy(&attr);
+ return nullptr;
}
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)

View file

@ -1,14 +0,0 @@
--- base/atomicops.h.orig 2022-05-25 04:00:43 UTC
+++ base/atomicops.h
@@ -56,7 +56,11 @@ typedef intptr_t Atomic64;
// Use AtomicWord for a machine-sized pointer. It will use the Atomic32 or
// Atomic64 routines below, depending on your architecture.
+#if !defined(OS_OPENBSD) && defined(__i386__)
+typedef Atomic32 AtomicWord;
+#else
typedef intptr_t AtomicWord;
+#endif
// Atomically execute:
// result = *ptr;

View file

@ -1,98 +0,0 @@
--- base/base_paths_posix.cc.orig 2022-05-19 03:45:15 UTC
+++ base/base_paths_posix.cc
@@ -15,6 +15,7 @@
#include <ostream>
#include <string>
+#include "base/command_line.h"
#include "base/environment.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
@@ -25,9 +26,13 @@
#include "base/process/process_metrics.h"
#include "build/build_config.h"
-#if BUILDFLAG(IS_FREEBSD)
+#if BUILDFLAG(IS_BSD)
#include <sys/param.h>
#include <sys/sysctl.h>
+#if BUILDFLAG(IS_OPENBSD)
+#include <kvm.h>
+#define MAXTOKENS 2
+#endif
#elif BUILDFLAG(IS_SOLARIS) || BUILDFLAG(IS_AIX)
#include <stdlib.h>
#endif
@@ -68,13 +73,65 @@ bool PathProviderPosix(int key, FilePath* result) {
*result = FilePath(bin_dir);
return true;
#elif BUILDFLAG(IS_OPENBSD) || BUILDFLAG(IS_AIX)
- // There is currently no way to get the executable path on OpenBSD
- char* cpath;
- if ((cpath = getenv("CHROME_EXE_PATH")) != NULL)
- *result = FilePath(cpath);
- else
- *result = FilePath("/usr/local/chrome/chrome");
- return true;
+ char *cpath;
+#if !BUILDFLAG(IS_AIX)
+ struct kinfo_file *files;
+ kvm_t *kd = NULL;
+ char errbuf[_POSIX2_LINE_MAX];
+ static char retval[PATH_MAX];
+ int cnt;
+ struct stat sb;
+ pid_t cpid = getpid();
+ bool ret = false;
+
+ const base::CommandLine* command_line =
+ base::CommandLine::ForCurrentProcess();
+
+ VLOG(1) << "PathProviderPosix argv: " << command_line->argv()[0];
+
+ if (realpath(command_line->argv()[0].c_str(), retval) == NULL)
+ goto out;
+
+ if (stat(command_line->argv()[0].c_str(), &sb) < 0)
+ goto out;
+
+ if (!command_line->HasSwitch("no-sandbox")) {
+ ret = true;
+ *result = FilePath(retval);
+ VLOG(1) << "PathProviderPosix (sandbox) result: " << retval;
+ goto out;
+ }
+
+ if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf)) == NULL)
+ goto out;
+
+ if ((files = kvm_getfiles(kd, KERN_FILE_BYPID, cpid,
+ sizeof(struct kinfo_file), &cnt)) == NULL)
+ goto out;
+
+ for (int i = 0; i < cnt; i++) {
+ if (files[i].fd_fd == KERN_FILE_TEXT &&
+ files[i].va_fsid == static_cast<uint32_t>(sb.st_dev) &&
+ files[i].va_fileid == sb.st_ino) {
+ ret = true;
+ *result = FilePath(retval);
+ VLOG(1) << "PathProviderPosix result: " << retval;
+ }
+ }
+out:
+ if (kd)
+ kvm_close(kd);
+ if (!ret) {
+#endif
+ if ((cpath = getenv("CHROME_EXE_PATH")) != NULL)
+ *result = FilePath(cpath);
+ else
+ *result = FilePath("/usr/local/chrome/chrome");
+ return true;
+#if !BUILDFLAG(IS_AIX)
+ }
+ return ret;
+#endif
#endif
}
case DIR_SRC_TEST_DATA_ROOT: {

View file

@ -1,11 +0,0 @@
--- base/base_switches.cc.orig 2022-05-19 05:17:34 UTC
+++ base/base_switches.cc
@@ -170,7 +170,7 @@ const char kForceFieldTrialParams[] = "force-fieldtria
#endif
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// Controls whether or not retired instruction counts are surfaced for threads
// in trace events on Linux.
//

View file

@ -1,11 +0,0 @@
--- base/base_switches.h.orig 2022-05-19 05:17:34 UTC
+++ base/base_switches.h
@@ -60,7 +60,7 @@ extern const char kEnableIdleTracing[];
extern const char kForceFieldTrialParams[];
#endif
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
extern const char kEnableThreadInstructionCount[];
// TODO(crbug.com/1176772): Remove kEnableCrashpad and IsCrashpadEnabled() when

View file

@ -1,11 +0,0 @@
--- base/cpu.h.orig 2022-05-19 03:45:15 UTC
+++ base/cpu.h
@@ -108,7 +108,7 @@ class BASE_EXPORT CPU final {
const std::string& cpu_brand() const { return cpu_brand_; }
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
enum class CoreType {
kUnknown = 0,
kOther,

View file

@ -1,68 +0,0 @@
--- base/debug/debugger_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/debug/debugger_posix.cc
@@ -35,6 +35,10 @@
#include <sys/sysctl.h>
#endif
+#if BUILDFLAG(IS_OPENBSD)
+#include <sys/proc.h>
+#endif
+
#if BUILDFLAG(IS_FREEBSD)
#include <sys/user.h>
#endif
@@ -95,32 +99,51 @@ bool BeingDebugged() {
// Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
// binary interfaces may change.
+#if BUILDFLAG(IS_OPENBSD)
+ struct kinfo_proc *info;
+ size_t info_size;
+#else
struct kinfo_proc info;
size_t info_size = sizeof(info);
+#endif
#if BUILDFLAG(IS_OPENBSD)
if (sysctl(mib, std::size(mib), NULL, &info_size, NULL, 0) < 0)
return -1;
mib[5] = (info_size / sizeof(struct kinfo_proc));
+ if ((info = reinterpret_cast<kinfo_proc*>(malloc(info_size))) == NULL) {
+ is_set = true;
+ being_debugged = false;
+ return being_debugged;
+ }
+
+ int sysctl_result = sysctl(mib, std::size(mib), info, &info_size, NULL, 0);
#endif
+#if !BUILDFLAG(IS_OPENBSD)
int sysctl_result = sysctl(mib, std::size(mib), &info, &info_size, NULL, 0);
+#endif
DCHECK_EQ(sysctl_result, 0);
if (sysctl_result != 0) {
is_set = true;
being_debugged = false;
- return being_debugged;
+ goto out;
}
// This process is being debugged if the P_TRACED flag is set.
is_set = true;
#if BUILDFLAG(IS_FREEBSD)
being_debugged = (info.ki_flag & P_TRACED) != 0;
-#elif BUILDFLAG(IS_BSD)
- being_debugged = (info.p_flag & P_TRACED) != 0;
+#elif BUILDFLAG(IS_OPENBSD)
+ being_debugged = (info->p_psflags & PS_TRACED) != 0;
#else
being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
+#endif
+
+out:
+#if BUILDFLAG(IS_OPENBSD)
+ free(info);
#endif
return being_debugged;
}

View file

@ -1,18 +0,0 @@
--- base/debug/elf_reader.cc.orig 2022-05-11 07:16:46 UTC
+++ base/debug/elf_reader.cc
@@ -76,6 +76,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
bool found = false;
while (current_section < section_end) {
current_note = reinterpret_cast<const Nhdr*>(current_section);
+#if !defined(OS_BSD)
if (current_note->n_type == NT_GNU_BUILD_ID) {
StringPiece note_name(current_section + sizeof(Nhdr),
current_note->n_namesz);
@@ -85,6 +86,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
break;
}
}
+#endif
size_t section_size = bits::AlignUp(current_note->n_namesz, 4) +
bits::AlignUp(current_note->n_descsz, 4) +

View file

@ -1,11 +0,0 @@
--- base/debug/proc_maps_linux.cc.orig 2022-05-19 03:45:15 UTC
+++ base/debug/proc_maps_linux.cc
@@ -13,7 +13,7 @@
#include "base/strings/string_split.h"
#include "build/build_config.h"
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
#include <inttypes.h>
#endif

View file

@ -1,38 +0,0 @@
--- base/debug/stack_trace_posix.cc.orig 2022-05-19 05:17:34 UTC
+++ base/debug/stack_trace_posix.cc
@@ -38,7 +38,7 @@
#include <AvailabilityMacros.h>
#endif
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
#include "base/debug/proc_maps_linux.h"
#endif
@@ -695,6 +695,9 @@ class SandboxSymbolizeHelper {
// for the modules that are loaded in the current process.
// Returns true on success.
bool CacheMemoryRegions() {
+#if BUILDFLAG(IS_BSD)
+ return false;
+#else
// Reads /proc/self/maps.
std::string contents;
if (!ReadProcMaps(&contents)) {
@@ -712,6 +715,7 @@ class SandboxSymbolizeHelper {
is_initialized_ = true;
return true;
+#endif
}
// Opens all object files and caches their file descriptors.
@@ -868,7 +872,7 @@ size_t CollectStackTrace(void** trace, size_t count) {
// If we do not have unwind tables, then try tracing using frame pointers.
return base::debug::TraceStackFramePointers(const_cast<const void**>(trace),
count, 0);
-#elif !defined(__UCLIBC__) && !defined(_AIX)
+#elif !defined(__UCLIBC__) && !defined(_AIX) && !BUILDFLAG(IS_BSD)
// Though the backtrace API man page does not list any possible negative
// return values, we take no chance.
return base::saturated_cast<size_t>(backtrace(trace, count));

View file

@ -1,57 +0,0 @@
--- base/files/file_path_watcher_bsd.cc.orig 2022-05-13 07:20:04 UTC
+++ base/files/file_path_watcher_bsd.cc
@@ -0,0 +1,54 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+
+#include "base/files/file_path_watcher.h"
+#include "base/files/file_path_watcher_kqueue.h"
+#include "base/memory/ptr_util.h"
+#include "build/build_config.h"
+
+namespace base {
+
+namespace {
+
+class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate {
+ public:
+ FilePathWatcherImpl() = default;
+ FilePathWatcherImpl(const FilePathWatcherImpl&) = delete;
+ FilePathWatcherImpl& operator=(const FilePathWatcherImpl&) = delete;
+ ~FilePathWatcherImpl() override = default;
+
+ bool Watch(const FilePath& path,
+ Type type,
+ const FilePathWatcher::Callback& callback) override {
+ DCHECK(!impl_.get());
+ if (type == Type::kRecursive) {
+ if (!FilePathWatcher::RecursiveWatchAvailable())
+ return false;
+ } else {
+ impl_ = std::make_unique<FilePathWatcherKQueue>();
+ }
+ DCHECK(impl_.get());
+ return impl_->Watch(path, type, callback);
+ }
+
+ void Cancel() override {
+ if (impl_.get())
+ impl_->Cancel();
+ set_cancelled();
+ }
+
+ private:
+ std::unique_ptr<PlatformDelegate> impl_;
+};
+
+} // namespace
+
+FilePathWatcher::FilePathWatcher() {
+ sequence_checker_.DetachFromSequence();
+ impl_ = std::make_unique<FilePathWatcherImpl>();
+}
+
+} // namespace base

View file

@ -1,10 +0,0 @@
--- base/files/file_path_watcher_kqueue.h.orig 2022-05-11 07:00:27 UTC
+++ base/files/file_path_watcher_kqueue.h
@@ -5,6 +5,7 @@
#ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
#define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+#include <sys/time.h>
#include <sys/event.h>
#include <memory>

View file

@ -1,29 +0,0 @@
--- base/files/file_path_watcher_unittest.cc.orig 2022-05-25 04:00:43 UTC
+++ base/files/file_path_watcher_unittest.cc
@@ -498,7 +498,7 @@ TEST_F(FilePathWatcherTest, MAYBE_WatchDirectory) {
VLOG(1) << "Waiting for file1 creation";
ASSERT_TRUE(WaitForEvents());
-#if !BUILDFLAG(IS_APPLE)
+#if !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)
// Mac implementation does not detect files modified in a directory.
ASSERT_TRUE(WriteFile(file1, "content v2"));
VLOG(1) << "Waiting for file1 modification";
@@ -1108,7 +1108,7 @@ enum Permission {
Execute
};
-#if BUILDFLAG(IS_APPLE)
+#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD)
bool ChangeFilePermissions(const FilePath& path, Permission perm, bool allow) {
struct stat stat_buf;
@@ -1139,7 +1139,7 @@ bool ChangeFilePermissions(const FilePath& path, Permi
}
#endif // BUILDFLAG(IS_APPLE)
-#if BUILDFLAG(IS_APPLE)
+#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD)
// Linux implementation of FilePathWatcher doesn't catch attribute changes.
// http://crbug.com/78043
// Windows implementation of FilePathWatcher catches attribute changes that

View file

@ -1,52 +0,0 @@
--- base/files/file_util_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/files/file_util_posix.cc
@@ -697,32 +697,34 @@ bool CreateDirectoryAndGetError(const FilePath& full_p
File::Error* error) {
ScopedBlockingCall scoped_blocking_call(
FROM_HERE, BlockingType::MAY_BLOCK); // For call to mkdir().
+ const FilePath kFileSystemRoot("/");
std::vector<FilePath> subpaths;
// Collect a list of all parent directories.
FilePath last_path = full_path;
- subpaths.push_back(full_path);
+ if (full_path != kFileSystemRoot)
+ subpaths.push_back(full_path);
for (FilePath path = full_path.DirName();
- path.value() != last_path.value(); path = path.DirName()) {
+ (path.value() != last_path.value() &&
+ (path != kFileSystemRoot)); path = path.DirName()) {
subpaths.push_back(path);
last_path = path;
}
// Iterate through the parents and create the missing ones.
for (const FilePath& subpath : base::Reversed(subpaths)) {
- if (DirectoryExists(subpath))
- continue;
- if (mkdir(subpath.value().c_str(), 0700) == 0)
- continue;
- // Mkdir failed, but it might have failed with EEXIST, or some other error
- // due to the directory appearing out of thin air. This can occur if
- // two processes are trying to create the same file system tree at the same
- // time. Check to see if it exists and make sure it is a directory.
- int saved_errno = errno;
- if (!DirectoryExists(subpath)) {
- if (error)
- *error = File::OSErrorToFileError(saved_errno);
- return false;
+ if (!PathExists(subpath)) {
+ if ((mkdir(subpath.value().c_str(), 0700) == -1) &&
+ ((full_path != subpath) ? (errno != ENOENT) : (-1))) {
+ int saved_errno = errno;
+ if (error)
+ *error = File::OSErrorToFileError(saved_errno);
+ return false;
+ }
+ } else if (!DirectoryExists(subpath)) {
+ if (error)
+ *error = File::OSErrorToFileError(ENOTDIR);
+ return false;
}
}
return true;

View file

@ -1,20 +0,0 @@
--- base/files/file_util_unittest.cc.orig 2022-05-25 04:00:43 UTC
+++ base/files/file_util_unittest.cc
@@ -3523,7 +3523,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithNamedPipe) {
}
#endif // BUILDFLAG(IS_WIN)
-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE)
+#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)
TEST_F(FileUtilTest, ReadFileToStringWithProcFileSystem) {
FilePath file_path("/proc/cpuinfo");
std::string data = "temp";
@@ -4239,7 +4239,7 @@ TEST(FileUtilMultiThreadedTest, MultiThreadedTempFiles
NULL);
#else
size_t bytes_written =
- ::write(::fileno(output_file.get()), content.c_str(), content.length());
+ ::write(fileno(output_file.get()), content.c_str(), content.length());
#endif
EXPECT_EQ(content.length(), bytes_written);
::fflush(output_file.get());

View file

@ -1,12 +0,0 @@
--- base/files/important_file_writer_cleaner.cc.orig 2022-05-19 03:45:15 UTC
+++ base/files/important_file_writer_cleaner.cc
@@ -25,7 +25,8 @@ namespace base {
namespace {
base::Time GetUpperBoundTime() {
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) || BUILDFLAG(IS_FUCHSIA)
+// needed because of .CreationTime() pledge
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS) || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
// If process creation time is not available then use instance creation
// time as the upper-bound for old files. Modification times may be
// rounded-down to coarse-grained increments, e.g. FAT has 2s granularity,

View file

@ -1,11 +0,0 @@
--- base/files/scoped_file.cc.orig 2022-05-19 03:45:15 UTC
+++ base/files/scoped_file.cc
@@ -31,7 +31,7 @@ void ScopedFDCloseTraits::Free(int fd) {
int ret = IGNORE_EINTR(close(fd));
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_APPLE) || \
- BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_ANDROID)
+ BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
// NB: Some file descriptors can return errors from close() e.g. network
// filesystems such as NFS and Linux input devices. On Linux, macOS, and
// Fuchsia's POSIX layer, errors from close other than EBADF do not indicate

View file

@ -1,20 +0,0 @@
--- base/i18n/icu_util.cc.orig 2022-05-25 04:00:43 UTC
+++ base/i18n/icu_util.cc
@@ -52,7 +52,7 @@
#endif
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) || \
- ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && \
+ ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)) && \
!BUILDFLAG(IS_CHROMECAST))
#include "third_party/icu/source/i18n/unicode/timezone.h"
#endif
@@ -324,7 +324,7 @@ void InitializeIcuTimeZone() {
FuchsiaIntlProfileWatcher::GetPrimaryTimeZoneIdForIcuInitialization();
icu::TimeZone::adoptDefault(
icu::TimeZone::createTimeZone(icu::UnicodeString::fromUTF8(zone_id)));
-#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && \
+#elif (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)) && \
!BUILDFLAG(IS_CHROMECAST)
// To respond to the time zone change properly, the default time zone
// cache in ICU has to be populated on starting up.

View file

@ -1,28 +0,0 @@
--- base/linux_util.cc.orig 2022-05-25 04:00:43 UTC
+++ base/linux_util.cc
@@ -15,6 +15,7 @@
#include <iomanip>
#include <memory>
+#include <sstream>
#include "base/base_export.h"
#include "base/files/dir_reader_posix.h"
@@ -135,6 +136,9 @@ void SetLinuxDistro(const std::string& distro) {
}
bool GetThreadsForProcess(pid_t pid, std::vector<pid_t>* tids) {
+#if defined(OS_BSD)
+ return false;
+#else
// 25 > strlen("/proc//task") + strlen(std::to_string(INT_MAX)) + 1 = 22
char buf[25];
strings::SafeSPrintf(buf, "/proc/%d/task", pid);
@@ -154,6 +158,7 @@ bool GetThreadsForProcess(pid_t pid, std::vector<pid_t
}
return true;
+#endif
}
pid_t FindThreadIDWithSyscall(pid_t pid, const std::string& expected_data,

View file

@ -1,31 +0,0 @@
--- base/logging_unittest.cc.orig 2022-05-19 05:17:34 UTC
+++ base/logging_unittest.cc
@@ -32,7 +32,7 @@
#include "base/posix/eintr_wrapper.h"
#endif // BUILDFLAG(IS_POSIX)
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FREEBSD)
#include <ucontext.h>
#endif
@@ -552,14 +552,18 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
// need the arch-specific boilerplate below, which is inspired by breakpad.
// At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
uintptr_t crash_addr = 0;
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_FREEBSD)
crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
#else // OS_*
ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
#if defined(ARCH_CPU_X86)
crash_addr = static_cast<uintptr_t>(context->uc_mcontext.gregs[REG_EIP]);
#elif defined(ARCH_CPU_X86_64)
+#if BUILDFLAG(IS_OPENBSD)
+ crash_addr = static_cast<uintptr_t>(context->sc_rip);
+#else
crash_addr = static_cast<uintptr_t>(context->uc_mcontext.gregs[REG_RIP]);
+#endif
#elif defined(ARCH_CPU_ARMEL)
crash_addr = static_cast<uintptr_t>(context->uc_mcontext.arm_pc);
#elif defined(ARCH_CPU_ARM64)

View file

@ -1,38 +0,0 @@
--- base/memory/discardable_memory.cc.orig 2022-05-25 04:00:43 UTC
+++ base/memory/discardable_memory.cc
@@ -25,7 +25,7 @@ const base::Feature kMadvFreeDiscardableMemory{
"MadvFreeDiscardableMemory", base::FEATURE_DISABLED_BY_DEFAULT};
#endif // BUILDFLAG(IS_POSIX)
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
const base::Feature kDiscardableMemoryBackingTrial{
"DiscardableMemoryBackingTrial", base::FEATURE_DISABLED_BY_DEFAULT};
@@ -50,7 +50,7 @@ const base::FeatureParam<DiscardableMemoryTrialGroup>
namespace {
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
DiscardableMemoryBacking GetBackingForFieldTrial() {
DiscardableMemoryTrialGroup trial_group =
@@ -69,7 +69,7 @@ DiscardableMemoryBacking GetBackingForFieldTrial() {
} // namespace
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// Probe capabilities of this device to determine whether we should participate
// in the discardable memory backing trial.
@@ -99,7 +99,7 @@ DiscardableMemory::DiscardableMemory() = default;
DiscardableMemory::~DiscardableMemory() = default;
DiscardableMemoryBacking GetDiscardableMemoryBacking() {
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
if (DiscardableMemoryBackingFieldTrialIsEnabled()) {
return GetBackingForFieldTrial();
}

View file

@ -1,11 +0,0 @@
--- base/memory/discardable_memory_internal.h.orig 2022-05-19 03:45:15 UTC
+++ base/memory/discardable_memory_internal.h
@@ -10,7 +10,7 @@
#include "base/metrics/field_trial_params.h"
#include "build/build_config.h"
-#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
namespace base {

View file

@ -1,21 +0,0 @@
--- base/memory/madv_free_discardable_memory_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/memory/madv_free_discardable_memory_posix.cc
@@ -295,6 +295,10 @@ void MadvFreeDiscardableMemoryPosix::SetKeepMemoryForT
bool MadvFreeDiscardableMemoryPosix::IsResident() const {
DFAKE_SCOPED_RECURSIVE_LOCK(thread_collision_warner_);
+// XXX mincore
+#if BUILDFLAG(IS_BSD)
+ return false;
+#else
#if BUILDFLAG(IS_APPLE)
std::vector<char> vec(allocated_pages_);
#else
@@ -310,6 +314,7 @@ bool MadvFreeDiscardableMemoryPosix::IsResident() cons
return false;
}
return true;
+#endif
}
bool MadvFreeDiscardableMemoryPosix::IsDiscarded() const {

View file

@ -1,29 +0,0 @@
--- base/memory/platform_shared_memory_region.h.orig 2022-05-25 04:00:43 UTC
+++ base/memory/platform_shared_memory_region.h
@@ -14,7 +14,7 @@
#include <stdint.h>
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
namespace content {
class SandboxIPCHandler;
}
@@ -81,7 +81,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
kMaxValue = GET_SHMEM_TEMP_DIR_FAILURE
};
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// Structure to limit access to executable region creation.
struct ExecutableRegion {
private:
@@ -211,7 +211,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
CheckPlatformHandlePermissionsCorrespondToMode);
static PlatformSharedMemoryRegion Create(Mode mode,
size_t size
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
,
bool executable = false
#endif

View file

@ -1,29 +0,0 @@
--- base/memory/platform_shared_memory_region_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/memory/platform_shared_memory_region_posix.cc
@@ -55,7 +55,7 @@ bool CheckFDAccessMode(int fd, int expected_mode) {
} // namespace
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// static
ScopedFD PlatformSharedMemoryRegion::ExecutableRegion::CreateFD(size_t size) {
PlatformSharedMemoryRegion region =
@@ -171,7 +171,7 @@ bool PlatformSharedMemoryRegion::ConvertToUnsafe() {
// static
PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Create(Mode mode,
size_t size
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
,
bool executable
#endif
@@ -200,7 +200,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion:
// flag.
FilePath directory;
if (!GetShmemTempDir(
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
executable,
#else
false /* executable */,

View file

@ -1,28 +0,0 @@
--- base/message_loop/message_pump_glib.cc.orig 2022-05-19 05:17:34 UTC
+++ base/message_loop/message_pump_glib.cc
@@ -8,6 +8,11 @@
#include <glib.h>
#include <math.h>
+#if BUILDFLAG(IS_BSD)
+#include <pthread.h>
+#include <pthread_np.h>
+#endif
+
#include "base/logging.h"
#include "base/notreached.h"
#include "base/numerics/safe_conversions.h"
@@ -50,9 +55,13 @@ int GetTimeIntervalMilliseconds(TimeTicks next_task_ti
}
bool RunningOnMainThread() {
+#if BUILDFLAG(IS_BSD)
+ return pthread_main_np();
+#else
auto pid = getpid();
auto tid = PlatformThread::CurrentId();
return pid > 0 && tid > 0 && pid == tid;
+#endif
}
// A brief refresher on GLib:

View file

@ -1,11 +0,0 @@
--- base/native_library_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/native_library_posix.cc
@@ -33,7 +33,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
// http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
// and http://crbug.com/40794.
int flags = RTLD_LAZY;
-#if BUILDFLAG(IS_ANDROID) || !defined(RTLD_DEEPBIND)
+#if BUILDFLAG(IS_ANDROID) || !defined(RTLD_DEEPBIND) || BUILDFLAG(IS_BSD)
// Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
// further investigation, as it might vary across versions. Crash here to
// warn developers that they're trying to rely on uncertain behavior.

View file

@ -1,11 +0,0 @@
--- base/native_library_unittest.cc.orig 2022-05-19 03:45:15 UTC
+++ base/native_library_unittest.cc
@@ -119,7 +119,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
// versions with respect to symbol resolution scope.
// TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
#if !BUILDFLAG(IS_ANDROID) && !defined(THREAD_SANITIZER) && \
- !defined(MEMORY_SANITIZER)
+ !defined(MEMORY_SANITIZER) && !BUILDFLAG(IS_BSD)
// Verifies that the |prefer_own_symbols| option satisfies its guarantee that
// a loaded library will always prefer local symbol resolution before

View file

@ -1,16 +0,0 @@
--- base/posix/can_lower_nice_to.cc.orig 2022-05-19 03:45:15 UTC
+++ base/posix/can_lower_nice_to.cc
@@ -11,8 +11,12 @@
#include "build/build_config.h"
+#if BUILDFLAG(IS_FREEBSD)
+#include <sys/param.h>
+#endif
+
// Not defined on AIX by default.
-#if BUILDFLAG(IS_AIX)
+#if BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
#if defined(RLIMIT_NICE)
#error Assumption about OS_AIX is incorrect
#endif

View file

@ -1,39 +0,0 @@
--- base/posix/unix_domain_socket.cc.orig 2022-05-19 03:45:15 UTC
+++ base/posix/unix_domain_socket.cc
@@ -50,7 +50,7 @@ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
// static
bool UnixDomainSocket::EnableReceiveProcessId(int fd) {
-#if !BUILDFLAG(IS_APPLE)
+#if !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)
const int enable = 1;
return setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable)) == 0;
#else
@@ -140,7 +140,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
const size_t kControlBufferSize =
CMSG_SPACE(sizeof(int) * kMaxFileDescriptors)
-#if !BUILDFLAG(IS_APPLE)
+#if !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)
// macOS does not support ucred.
// macOS supports xucred, but this structure is insufficient.
+ CMSG_SPACE(sizeof(struct ucred))
@@ -168,7 +168,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
wire_fds = reinterpret_cast<int*>(CMSG_DATA(cmsg));
wire_fds_len = payload_len / sizeof(int);
}
-#if !BUILDFLAG(IS_APPLE)
+#if !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)
// macOS does not support SCM_CREDENTIALS.
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_CREDENTIALS) {
@@ -202,6 +202,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
socklen_t pid_size = sizeof(pid);
if (getsockopt(fd, SOL_LOCAL, LOCAL_PEERPID, &pid, &pid_size) != 0)
pid = -1;
+#elif BUILDFLAG(IS_BSD)
+ NOTIMPLEMENTED();
+ pid = -1;
#else
// |pid| will legitimately be -1 if we read EOF, so only DCHECK if we
// actually received a message. Unfortunately, Linux allows sending zero

View file

@ -1,11 +0,0 @@
--- base/posix/unix_domain_socket_unittest.cc.orig 2022-05-19 03:45:15 UTC
+++ base/posix/unix_domain_socket_unittest.cc
@@ -10,6 +10,8 @@
#include <sys/types.h>
#include <unistd.h>
+#include <signal.h>
+
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/files/file_util.h"

View file

@ -1,11 +0,0 @@
--- base/process/kill.h.orig 2022-05-25 04:00:43 UTC
+++ base/process/kill.h
@@ -113,7 +113,7 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
ProcessHandle handle, int* exit_code);
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// Spawns a thread to wait asynchronously for the child |process| to exit
// and then reaps it.
BASE_EXPORT void EnsureProcessGetsReaped(Process process);

View file

@ -1,11 +0,0 @@
--- base/process/kill_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/kill_posix.cc
@@ -158,7 +158,7 @@ void EnsureProcessTerminated(Process process) {
0, new BackgroundReaper(std::move(process), Seconds(2)));
}
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
void EnsureProcessGetsReaped(Process process) {
DCHECK(!process.is_current());

View file

@ -1,11 +0,0 @@
--- base/process/launch.h.orig 2022-05-25 04:00:43 UTC
+++ base/process/launch.h
@@ -199,7 +199,7 @@ struct BASE_EXPORT LaunchOptions {
bool clear_environment = false;
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// If non-zero, start the process using clone(), using flags as provided.
// Unlike in clone, clone_flags may not contain a custom termination signal
// that is sent to the parent when the child dies. The termination signal will

View file

@ -1,12 +0,0 @@
--- base/process/launch_posix.cc.orig 2022-05-11 07:16:46 UTC
+++ base/process/launch_posix.cc
@@ -64,6 +64,9 @@
#error "macOS should use launch_mac.cc"
#endif
+#if defined(OS_FREEBSD)
+#pragma weak environ
+#endif
extern char** environ;
namespace base {

View file

@ -1,20 +0,0 @@
--- base/process/memory.cc.orig 2022-05-19 05:17:34 UTC
+++ base/process/memory.cc
@@ -65,14 +65,16 @@ NOINLINE void OnNoMemoryInternal(size_t size) {
} // namespace internal
+#if !BUILDFLAG(IS_BSD)
void TerminateBecauseOutOfMemory(size_t size) {
internal::OnNoMemoryInternal(size);
}
+#endif
// Defined in memory_mac.mm for macOS + use_allocator="none". In case of
// USE_PARTITION_ALLOC_AS_MALLOC, no need to route the call to the system
// default calloc of macOS.
-#if !BUILDFLAG(IS_APPLE) || BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
+#if (!BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_BSD)) || BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
const size_t alloc_size = num_items * size;

View file

@ -1,11 +0,0 @@
--- base/process/process_handle.cc.orig 2022-05-19 03:45:15 UTC
+++ base/process/process_handle.cc
@@ -30,7 +30,7 @@ UniqueProcId GetUniqueIdForProcess() {
: UniqueProcId(GetCurrentProcId());
}
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_AIX)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
DCHECK(pid_outside_of_namespace != kNullProcessId);

View file

@ -1,11 +0,0 @@
--- base/process/process_handle.h.orig 2022-05-19 03:45:15 UTC
+++ base/process/process_handle.h
@@ -106,7 +106,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
// processes may be reused.
BASE_EXPORT UniqueProcId GetUniqueIdForProcess();
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// When a process is started in a different PID namespace from the browser
// process, this function must be called with the process's PID in the browser's
// PID namespace in order to initialize its unique ID. Not thread safe.

View file

@ -1,25 +0,0 @@
--- base/process/process_handle_freebsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_handle_freebsd.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/process/process_handle.h"
+#include "base/files/file_util.h"
#include <limits.h>
#include <stddef.h>
@@ -15,10 +16,13 @@ namespace base {
ProcessId GetParentProcessId(ProcessHandle process) {
struct kinfo_proc info;
- size_t length;
+ size_t length = sizeof(struct kinfo_proc);
int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
if (sysctl(mib, std::size(mib), &info, &length, NULL, 0) < 0)
+ return -1;
+
+ if (length < sizeof(struct kinfo_proc))
return -1;
return info.ki_ppid;

View file

@ -1,89 +0,0 @@
--- base/process/process_handle_openbsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_handle_openbsd.cc
@@ -3,8 +3,11 @@
// found in the LICENSE file.
#include "base/process/process_handle.h"
+#include "base/files/file_util.h"
#include <stddef.h>
+#include <sys/param.h>
+#include <sys/proc.h>
#include <sys/sysctl.h>
#include <sys/types.h>
#include <unistd.h>
@@ -12,39 +15,59 @@
namespace base {
ProcessId GetParentProcessId(ProcessHandle process) {
- struct kinfo_proc info;
+ struct kinfo_proc *info;
size_t length;
+ pid_t ppid;
int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process,
sizeof(struct kinfo_proc), 0 };
if (sysctl(mib, std::size(mib), NULL, &length, NULL, 0) < 0)
return -1;
+ info = (struct kinfo_proc *)malloc(length);
+
mib[5] = (length / sizeof(struct kinfo_proc));
- if (sysctl(mib, std::size(mib), &info, &length, NULL, 0) < 0)
- return -1;
+ if (sysctl(mib, std::size(mib), info, &length, NULL, 0) < 0) {
+ ppid = -1;
+ goto out;
+ }
- return info.p_ppid;
+ ppid = info->p_ppid;
+
+out:
+ free(info);
+ return ppid;
}
FilePath GetProcessExecutablePath(ProcessHandle process) {
- struct kinfo_proc kp;
- size_t len;
+ struct kinfo_proc *info;
+ size_t length;
+ char *path = NULL;
int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process,
sizeof(struct kinfo_proc), 0 };
- if (sysctl(mib, std::size(mib), NULL, &len, NULL, 0) == -1)
+ if (sysctl(mib, std::size(mib), NULL, &length, NULL, 0) == -1)
return FilePath();
- mib[5] = (len / sizeof(struct kinfo_proc));
- if (sysctl(mib, std::size(mib), &kp, &len, NULL, 0) < 0)
- return FilePath();
- if ((kp.p_flag & P_SYSTEM) != 0)
- return FilePath();
- if (strcmp(kp.p_comm, "chrome") == 0)
- return FilePath(kp.p_comm);
- return FilePath();
+ info = (struct kinfo_proc *)malloc(length);
+
+ mib[5] = (length / sizeof(struct kinfo_proc));
+
+ if (sysctl(mib, std::size(mib), info, &length, NULL, 0) < 0)
+ goto out;
+
+ if ((info->p_flag & P_SYSTEM) != 0)
+ goto out;
+
+ if (strcmp(info->p_comm, "chrome") == 0) {
+ path = info->p_comm;
+ goto out;
+ }
+
+out:
+ free(info);
+ return FilePath(path);
}
} // namespace base

View file

@ -1,51 +0,0 @@
--- base/process/process_iterator_freebsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_iterator_freebsd.cc
@@ -20,7 +20,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
: index_of_kinfo_proc_(),
filter_(filter) {
- int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_UID, getuid() };
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_UID, (int) getuid() };
bool done = false;
int try_num = 1;
@@ -39,7 +39,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
num_of_kinfo_proc += 16;
kinfo_procs_.resize(num_of_kinfo_proc);
len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
- if (sysctl(mib, std::size(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
+ if (sysctl(mib, std::size(mib), kinfo_procs_.data(), &len, NULL, 0) < 0) {
// If we get a mem error, it just means we need a bigger buffer, so
// loop around again. Anything else is a real error and give up.
if (errno != ENOMEM) {
@@ -49,7 +49,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
}
} else {
// Got the list, just make sure we're sized exactly right
- size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
+ num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
kinfo_procs_.resize(num_of_kinfo_proc);
done = true;
}
@@ -71,18 +71,13 @@ bool ProcessIterator::CheckForNextProcess() {
for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
size_t length;
struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
continue;
- length = 0;
- if (sysctl(mib, std::size(mib), NULL, &length, NULL, 0) < 0) {
- LOG(ERROR) << "failed to figure out the buffer size for a command line";
- continue;
- }
-
- data.resize(length);
+ data.resize(ARG_MAX);
+ length = ARG_MAX;
if (sysctl(mib, std::size(mib), &data[0], &length, NULL, 0) < 0) {
LOG(ERROR) << "failed to fetch a commandline";

View file

@ -1,45 +0,0 @@
--- base/process/process_iterator_openbsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_iterator_openbsd.cc
@@ -6,6 +6,9 @@
#include <errno.h>
#include <stddef.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/proc.h>
#include <sys/sysctl.h>
#include "base/logging.h"
@@ -18,12 +21,13 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
: index_of_kinfo_proc_(),
filter_(filter) {
- int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_UID, getuid(),
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_UID, static_cast<int>(getuid()),
sizeof(struct kinfo_proc), 0 };
bool done = false;
int try_num = 1;
const int max_tries = 10;
+ size_t num_of_kinfo_proc;
do {
size_t len = 0;
@@ -32,7 +36,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
kinfo_procs_.resize(0);
done = true;
} else {
- size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
+ num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
// Leave some spare room for process table growth (more could show up
// between when we check and now)
num_of_kinfo_proc += 16;
@@ -48,7 +52,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
}
} else {
// Got the list, just make sure we're sized exactly right
- size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
+ num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
kinfo_procs_.resize(num_of_kinfo_proc);
done = true;
}

View file

@ -1,47 +0,0 @@
--- base/process/process_metrics.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_metrics.cc
@@ -18,7 +18,7 @@ namespace base {
namespace {
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
int CalculateEventsPerSecond(uint64_t event_count,
uint64_t* last_event_count,
base::TimeTicks* last_calculated) {
@@ -55,7 +55,7 @@ SystemMetrics SystemMetrics::Sample() {
SystemMetrics system_metrics;
system_metrics.committed_memory_ = GetSystemCommitCharge();
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
GetSystemMemoryInfo(&system_metrics.memory_info_);
GetVmStatInfo(&system_metrics.vmstat_info_);
GetSystemDiskInfo(&system_metrics.disk_info_);
@@ -74,7 +74,7 @@ Value SystemMetrics::ToValue() const {
Value res(Value::Type::DICTIONARY);
res.SetIntKey("committed_memory", static_cast<int>(committed_memory_));
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
Value meminfo = memory_info_.ToValue();
Value vmstat = vmstat_info_.ToValue();
meminfo.MergeDictionary(&vmstat);
@@ -100,7 +100,7 @@ std::unique_ptr<ProcessMetrics> ProcessMetrics::Create
#endif // !BUILDFLAG(IS_MAC)
}
-#if !BUILDFLAG(IS_FREEBSD) || !BUILDFLAG(IS_POSIX)
+#if !BUILDFLAG(IS_BSD) || !BUILDFLAG(IS_POSIX)
double ProcessMetrics::GetPlatformIndependentCPUUsage() {
TimeDelta cumulative_cpu = GetCumulativeCPUUsage();
TimeTicks time = TimeTicks::Now();
@@ -151,7 +151,7 @@ double ProcessMetrics::GetPreciseCPUUsage() {
#endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
int ProcessMetrics::CalculateIdleWakeupsPerSecond(
uint64_t absolute_idle_wakeups) {
return CalculateEventsPerSecond(absolute_idle_wakeups,

View file

@ -1,119 +0,0 @@
--- base/process/process_metrics.h.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_metrics.h
@@ -36,7 +36,7 @@
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
#include <string>
#include <utility>
#include <vector>
@@ -52,7 +52,7 @@ class Value;
// Full declaration is in process_metrics_iocounters.h.
struct IoCounters;
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
// Minor and major page fault counts since the process creation.
// Both counts are process-wide, and exclude child processes.
//
@@ -107,7 +107,7 @@ class BASE_EXPORT ProcessMetrics {
// convenience wrapper for CreateProcessMetrics().
static std::unique_ptr<ProcessMetrics> CreateCurrentProcessMetrics();
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
// Resident Set Size is a Linux/Android specific memory concept. Do not
// attempt to extend this to other platforms.
BASE_EXPORT size_t GetResidentSetSize() const;
@@ -155,7 +155,7 @@ class BASE_EXPORT ProcessMetrics {
#endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
// Emits the cumulative CPU usage for all currently active threads since they
// were started into the output parameter (replacing its current contents).
// Threads that have already terminated will not be reported. Thus, the sum of
@@ -238,7 +238,7 @@ class BASE_EXPORT ProcessMetrics {
int GetOpenFdSoftLimit() const;
#endif // BUILDFLAG(IS_POSIX)
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
// Bytes of swap as reported by /proc/[pid]/status.
uint64_t GetVmSwapBytes() const;
@@ -259,7 +259,7 @@ class BASE_EXPORT ProcessMetrics {
#endif // !BUILDFLAG(IS_MAC)
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
#endif
#if BUILDFLAG(IS_APPLE)
@@ -270,7 +270,7 @@ class BASE_EXPORT ProcessMetrics {
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
CPU::CoreType GetCoreType(int core_index);
#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ||
// BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_AIX)
@@ -294,7 +294,7 @@ class BASE_EXPORT ProcessMetrics {
#endif
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
// Same thing for idle wakeups.
TimeTicks last_idle_wakeups_time_;
uint64_t last_absolute_idle_wakeups_;
@@ -337,7 +337,7 @@ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_de
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_AIX) || \
- BUILDFLAG(IS_FUCHSIA)
+ BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
// Data about system-wide memory consumption. Values are in KB. Available on
// Windows, Mac, Linux, Android and Chrome OS.
//
@@ -372,7 +372,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
// This provides an estimate of available memory as described here:
// https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
// NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
@@ -387,7 +387,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
#endif
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
- BUILDFLAG(IS_AIX) || BUILDFLAG(IS_FUCHSIA)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
int buffers = 0;
int cached = 0;
int active_anon = 0;
@@ -424,7 +424,7 @@ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoK
// BUILDFLAG(IS_FUCHSIA)
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
// Parse the data found in /proc/<pid>/stat and return the sum of the
// CPU-related ticks. Returns -1 on parse error.
// Exposed for testing.
@@ -611,7 +611,7 @@ class BASE_EXPORT SystemMetrics {
FRIEND_TEST_ALL_PREFIXES(SystemMetricsTest, SystemMetrics);
size_t committed_memory_;
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_BSD)
SystemMemoryInfoKB memory_info_;
VmStatInfo vmstat_info_;
SystemDiskInfo disk_info_;

View file

@ -1,290 +0,0 @@
--- base/process/process_metrics_freebsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_metrics_freebsd.cc
@@ -3,20 +3,39 @@
// found in the LICENSE file.
#include "base/process/process_metrics.h"
+#include "base/notreached.h"
#include <stddef.h>
+#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/user.h>
#include <unistd.h>
+#include <fcntl.h> /* O_RDONLY */
+#include <kvm.h>
+#include <libutil.h>
+
#include "base/memory/ptr_util.h"
#include "base/process/process_metrics_iocounters.h"
+#include "base/values.h"
namespace base {
+namespace {
+int GetPageShift() {
+ int pagesize = getpagesize();
+ int pageshift = 0;
+ while (pagesize > 1) {
+ pageshift++;
+ pagesize >>= 1;
+ }
+
+ return pageshift;
+}
+}
+
ProcessMetrics::ProcessMetrics(ProcessHandle process)
- : process_(process),
- last_cpu_(0) {}
+ : process_(process) {}
// static
std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
@@ -26,17 +45,18 @@ std::unique_ptr<ProcessMetrics> ProcessMetrics::Create
double ProcessMetrics::GetPlatformIndependentCPUUsage() {
struct kinfo_proc info;
- int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, process_};
- size_t length = sizeof(info);
+ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process_ };
+
if (sysctl(mib, std::size(mib), &info, &length, NULL, 0) < 0)
- return 0;
+ return 0.0;
- return (info.ki_pctcpu / FSCALE) * 100.0;
+ return static_cast<double>((info.ki_pctcpu * 100.0) / FSCALE);
}
TimeDelta ProcessMetrics::GetCumulativeCPUUsage() {
- NOTREACHED();
+ NOTIMPLEMENTED();
return TimeDelta();
}
@@ -67,4 +87,221 @@ size_t GetSystemCommitCharge() {
return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
}
+int GetNumberOfThreads(ProcessHandle process) {
+ // Taken from FreeBSD top (usr.bin/top/machine.c)
+
+ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
+ if (kd == NULL)
+ return 0;
+
+ struct kinfo_proc* pbase;
+ int nproc;
+ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
+ if (pbase == NULL)
+ return 0;
+
+ if (kvm_close(kd) == -1)
+ return 0;
+
+ return nproc;
+}
+
+bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
+ unsigned int mem_total, mem_free, swap_total, swap_used;
+ size_t length;
+ int pagesizeKB;
+
+ pagesizeKB = getpagesize() / 1024;
+
+ length = sizeof(mem_total);
+ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
+ &length, NULL, 0) != 0 || length != sizeof(mem_total))
+ return false;
+
+ length = sizeof(mem_free);
+ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
+ != 0 || length != sizeof(mem_free))
+ return false;
+
+ length = sizeof(swap_total);
+ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
+ != 0 || length != sizeof(swap_total))
+ return false;
+
+ length = sizeof(swap_used);
+ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
+ != 0 || length != sizeof(swap_used))
+ return false;
+
+ meminfo->total = mem_total * pagesizeKB;
+ meminfo->free = mem_free * pagesizeKB;
+ meminfo->swap_total = swap_total * pagesizeKB;
+ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
+
+ return true;
+}
+
+int ProcessMetrics::GetOpenFdCount() const {
+ struct kinfo_file * kif;
+ int cnt;
+
+ if ((kif = kinfo_getfile(process_, &cnt)) == NULL)
+ return -1;
+
+ free(kif);
+
+ return cnt;
+}
+
+int ProcessMetrics::GetOpenFdSoftLimit() const {
+ size_t length;
+ int total_count = 0;
+ int mib[] = { CTL_KERN, KERN_MAXFILESPERPROC };
+
+ length = sizeof(total_count);
+
+ if (sysctl(mib, std::size(mib), &total_count, &length, NULL, 0) < 0) {
+ total_count = -1;
+ }
+
+ return total_count;
+}
+
+size_t ProcessMetrics::GetResidentSetSize() const {
+ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
+
+ if (kd == nullptr)
+ return 0;
+
+ struct kinfo_proc *pp;
+ int nproc;
+
+ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
+ kvm_close(kd);
+ return 0;
+ }
+
+ size_t rss;
+
+ if (nproc > 0) {
+ rss = pp->ki_rssize << GetPageShift();
+ } else {
+ rss = 0;
+ }
+
+ kvm_close(kd);
+ return rss;
+}
+
+uint64_t ProcessMetrics::GetVmSwapBytes() const {
+ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
+
+ if (kd == nullptr)
+ return 0;
+
+ struct kinfo_proc *pp;
+ int nproc;
+
+ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
+ kvm_close(kd);
+ return 0;
+ }
+
+ size_t swrss;
+
+ if (nproc > 0) {
+ swrss = pp->ki_swrss > pp->ki_rssize
+ ? (pp->ki_swrss - pp->ki_rssize) << GetPageShift()
+ : 0;
+ } else {
+ swrss = 0;
+ }
+
+ kvm_close(kd);
+ return swrss;
+}
+
+int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+bool GetSystemDiskInfo(SystemDiskInfo* diskinfo) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool GetVmStatInfo(VmStatInfo* vmstat) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+SystemDiskInfo::SystemDiskInfo() {
+ reads = 0;
+ reads_merged = 0;
+ sectors_read = 0;
+ read_time = 0;
+ writes = 0;
+ writes_merged = 0;
+ sectors_written = 0;
+ write_time = 0;
+ io = 0;
+ io_time = 0;
+ weighted_io_time = 0;
+}
+
+SystemDiskInfo::SystemDiskInfo(const SystemDiskInfo& other) = default;
+
+SystemDiskInfo& SystemDiskInfo::operator=(const SystemDiskInfo&) = default;
+
+Value SystemDiskInfo::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+
+ // Write out uint64_t variables as doubles.
+ // Note: this may discard some precision, but for JS there's no other option.
+ res.SetDoubleKey("reads", static_cast<double>(reads));
+ res.SetDoubleKey("reads_merged", static_cast<double>(reads_merged));
+ res.SetDoubleKey("sectors_read", static_cast<double>(sectors_read));
+ res.SetDoubleKey("read_time", static_cast<double>(read_time));
+ res.SetDoubleKey("writes", static_cast<double>(writes));
+ res.SetDoubleKey("writes_merged", static_cast<double>(writes_merged));
+ res.SetDoubleKey("sectors_written", static_cast<double>(sectors_written));
+ res.SetDoubleKey("write_time", static_cast<double>(write_time));
+ res.SetDoubleKey("io", static_cast<double>(io));
+ res.SetDoubleKey("io_time", static_cast<double>(io_time));
+ res.SetDoubleKey("weighted_io_time", static_cast<double>(weighted_io_time));
+
+ return res;
+}
+
+Value SystemMemoryInfoKB::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+
+ res.SetIntKey("total", total);
+ res.SetIntKey("free", free);
+ res.SetIntKey("available", available);
+ res.SetIntKey("buffers", buffers);
+ res.SetIntKey("cached", cached);
+ res.SetIntKey("active_anon", active_anon);
+ res.SetIntKey("inactive_anon", inactive_anon);
+ res.SetIntKey("active_file", active_file);
+ res.SetIntKey("inactive_file", inactive_file);
+ res.SetIntKey("swap_total", swap_total);
+ res.SetIntKey("swap_free", swap_free);
+ res.SetIntKey("swap_used", swap_total - swap_free);
+ res.SetIntKey("dirty", dirty);
+ res.SetIntKey("reclaimable", reclaimable);
+
+ return res;
+}
+
+Value VmStatInfo::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+
+ res.SetIntKey("pswpin", pswpin);
+ res.SetIntKey("pswpout", pswpout);
+ res.SetIntKey("pgmajfault", pgmajfault);
+
+ return res;
+}
} // namespace base

View file

@ -1,212 +0,0 @@
--- base/process/process_metrics_openbsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_metrics_openbsd.cc
@@ -6,14 +6,23 @@
#include <stddef.h>
#include <stdint.h>
+#include <fcntl.h>
#include <sys/param.h>
#include <sys/sysctl.h>
+#include <sys/vmmeter.h>
+#include <kvm.h>
+
#include "base/memory/ptr_util.h"
#include "base/process/process_metrics_iocounters.h"
+#include "base/values.h"
+#include "base/notreached.h"
namespace base {
+ProcessMetrics::ProcessMetrics(ProcessHandle process)
+ : process_(process) {}
+
// static
std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
ProcessHandle process) {
@@ -24,49 +33,24 @@ bool ProcessMetrics::GetIOCounters(IoCounters* io_coun
return false;
}
-static int GetProcessCPU(pid_t pid) {
+double ProcessMetrics::GetPlatformIndependentCPUUsage() {
struct kinfo_proc info;
- size_t length;
- int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid,
- sizeof(struct kinfo_proc), 0 };
+ size_t length = sizeof(struct kinfo_proc);
- if (sysctl(mib, std::size(mib), NULL, &length, NULL, 0) < 0)
- return -1;
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process_,
+ sizeof(struct kinfo_proc), 1 };
- mib[5] = (length / sizeof(struct kinfo_proc));
-
if (sysctl(mib, std::size(mib), &info, &length, NULL, 0) < 0)
- return 0;
+ return 0.0;
- return info.p_pctcpu;
+ return static_cast<double>((info.p_pctcpu * 100.0) / FSCALE);
}
-double ProcessMetrics::GetPlatformIndependentCPUUsage() {
- TimeTicks time = TimeTicks::Now();
-
- if (last_cpu_time_.is_zero()) {
- // First call, just set the last values.
- last_cpu_time_ = time;
- return 0;
- }
-
- int cpu = GetProcessCPU(process_);
-
- last_cpu_time_ = time;
- double percentage = static_cast<double>((cpu * 100.0) / FSCALE);
-
- return percentage;
-}
-
TimeDelta ProcessMetrics::GetCumulativeCPUUsage() {
NOTREACHED();
return TimeDelta();
}
-ProcessMetrics::ProcessMetrics(ProcessHandle process)
- : process_(process),
- last_cpu_(0) {}
-
size_t GetSystemCommitCharge() {
int mib[] = { CTL_VM, VM_METER };
int pagesize;
@@ -84,6 +68,129 @@ size_t GetSystemCommitCharge() {
pagesize = getpagesize();
return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
+}
+
+int ProcessMetrics::GetOpenFdCount() const {
+ struct kinfo_file *files;
+ kvm_t *kd = NULL;
+ int total_count = 0;
+ char errbuf[_POSIX2_LINE_MAX];
+
+ if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf)) == NULL)
+ goto out;
+
+ if ((files = kvm_getfiles(kd, KERN_FILE_BYPID, process_,
+ sizeof(struct kinfo_file), &total_count)) == NULL) {
+ total_count = 0;
+ goto out;
+ }
+
+ kvm_close(kd);
+
+out:
+ return total_count;
+}
+
+int ProcessMetrics::GetOpenFdSoftLimit() const {
+ return GetMaxFds();
+}
+
+uint64_t ProcessMetrics::GetVmSwapBytes() const {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo) {
+ NOTIMPLEMENTED_LOG_ONCE();
+ return false;
+}
+
+SystemDiskInfo::SystemDiskInfo() {
+ reads = 0;
+ reads_merged = 0;
+ sectors_read = 0;
+ read_time = 0;
+ writes = 0;
+ writes_merged = 0;
+ sectors_written = 0;
+ write_time = 0;
+ io = 0;
+ io_time = 0;
+ weighted_io_time = 0;
+}
+
+SystemDiskInfo::SystemDiskInfo(const SystemDiskInfo& other) = default;
+
+bool GetSystemDiskInfo(SystemDiskInfo* diskinfo) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool GetVmStatInfo(VmStatInfo* vmstat) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+Value SystemMemoryInfoKB::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+ res.SetIntKey("total", total);
+ res.SetIntKey("free", free);
+ res.SetIntKey("available", available);
+ res.SetIntKey("buffers", buffers);
+ res.SetIntKey("cached", cached);
+ res.SetIntKey("active_anon", active_anon);
+ res.SetIntKey("inactive_anon", inactive_anon);
+ res.SetIntKey("active_file", active_file);
+ res.SetIntKey("inactive_file", inactive_file);
+ res.SetIntKey("swap_total", swap_total);
+ res.SetIntKey("swap_free", swap_free);
+ res.SetIntKey("swap_used", swap_total - swap_free);
+ res.SetIntKey("dirty", dirty);
+ res.SetIntKey("reclaimable", reclaimable);
+
+ NOTIMPLEMENTED();
+
+ return res;
+}
+
+Value VmStatInfo::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+ res.SetIntKey("pswpin", pswpin);
+ res.SetIntKey("pswpout", pswpout);
+ res.SetIntKey("pgmajfault", pgmajfault);
+
+ NOTIMPLEMENTED();
+
+ return res;
+}
+
+SystemDiskInfo& SystemDiskInfo::operator=(const SystemDiskInfo&) = default;
+
+Value SystemDiskInfo::ToValue() const {
+ Value res(Value::Type::DICTIONARY);
+
+ // Write out uint64_t variables as doubles.
+ // Note: this may discard some precision, but for JS there's no other option.
+ res.SetDoubleKey("reads", static_cast<double>(reads));
+ res.SetDoubleKey("reads_merged", static_cast<double>(reads_merged));
+ res.SetDoubleKey("sectors_read", static_cast<double>(sectors_read));
+ res.SetDoubleKey("read_time", static_cast<double>(read_time));
+ res.SetDoubleKey("writes", static_cast<double>(writes));
+ res.SetDoubleKey("writes_merged", static_cast<double>(writes_merged));
+ res.SetDoubleKey("sectors_written", static_cast<double>(sectors_written));
+ res.SetDoubleKey("write_time", static_cast<double>(write_time));
+ res.SetDoubleKey("io", static_cast<double>(io));
+ res.SetDoubleKey("io_time", static_cast<double>(io_time));
+ res.SetDoubleKey("weighted_io_time", static_cast<double>(weighted_io_time));
+
+ NOTIMPLEMENTED();
+
+ return res;
}
} // namespace base

View file

@ -1,20 +0,0 @@
--- base/process/process_metrics_posix.cc.orig 2022-05-19 03:45:15 UTC
+++ base/process/process_metrics_posix.cc
@@ -20,6 +20,8 @@
#if BUILDFLAG(IS_APPLE)
#include <malloc/malloc.h>
+#elif BUILDFLAG(IS_OPENBSD)
+#include <stdlib.h>
#else
#include <malloc.h>
#endif
@@ -133,7 +135,7 @@ size_t ProcessMetrics::GetMallocUsage() {
return stats.size_in_use;
#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
return GetMallocUsageMallinfo();
-#elif BUILDFLAG(IS_FUCHSIA)
+#elif BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
// TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
return 0;
#endif

View file

@ -1,93 +0,0 @@
--- base/process/process_posix.cc.orig 2022-05-25 04:00:43 UTC
+++ base/process/process_posix.cc
@@ -25,10 +25,15 @@
#include "build/build_config.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_BSD)
#include <sys/event.h>
#endif
+#if defined(OS_BSD)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#endif
+
#if BUILDFLAG(CLANG_PROFILING)
#include "base/test/clang_profiling.h"
#endif
@@ -97,7 +102,7 @@ bool WaitpidWithTimeout(base::ProcessHandle handle,
return ret_pid > 0;
}
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_BSD)
// Using kqueue on Mac so that we can wait on non-child processes.
// We can't use kqueues on child processes because we need to reap
// our own children using wait.
@@ -202,7 +207,7 @@ bool WaitForExitWithTimeoutImpl(base::ProcessHandle ha
const bool exited = (parent_pid < 0);
if (!exited && parent_pid != our_pid) {
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_BSD)
// On Mac we can wait on non child processes.
return WaitForSingleNonChildProcess(handle, timeout);
#else
@@ -358,7 +363,55 @@ void Process::Exited(int exit_code) const {}
int Process::GetPriority() const {
DCHECK(IsValid());
+// avoid pledge(2) violation
+#if defined(OS_BSD)
+ return 0;
+#else
return getpriority(PRIO_PROCESS, process_);
+#endif
+}
+
+Time Process::CreationTime() const {
+// avoid ps pledge in the network process
+#if !defined(OS_BSD)
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid(),
+ sizeof(struct kinfo_proc), 0 };
+ struct kinfo_proc *info = nullptr;
+ size_t info_size;
+#endif
+ Time ct = Time();
+
+#if !defined(OS_BSD)
+ if (sysctl(mib, std::size(mib), NULL, &info_size, NULL, 0) < 0)
+ goto out;
+
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+ if ((info = reinterpret_cast<kinfo_proc*>(malloc(info_size))) == NULL)
+ goto out;
+
+ if (sysctl(mib, std::size(mib), info, &info_size, NULL, 0) < 0)
+ goto out;
+
+ ct = Time::FromTimeT(info->p_ustart_sec);
+
+out:
+ if (info)
+ free(info);
+#endif
+ return ct;
+}
+
+bool Process::IsProcessBackgrounded() const {
+ return false;
+}
+
+bool Process::SetProcessBackgrounded(bool value) {
+ return false;
+}
+
+// static
+bool Process::CanBackgroundProcesses() {
+ return false;
}
} // namespace base

View file

@ -1,11 +0,0 @@
--- base/process/process_unittest.cc.orig 2022-05-19 05:17:34 UTC
+++ base/process/process_unittest.cc
@@ -140,7 +140,7 @@ TEST_F(ProcessTest, CreationTimeOtherProcess) {
// was spawned and a time recorded after it was spawned. However, since the
// base::Time and process creation clocks don't match, tolerate some error.
constexpr base::TimeDelta kTolerance =
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// On Linux, process creation time is relative to boot time which has a
// 1-second resolution. Tolerate 1 second for the imprecise boot time and
// 100 ms for the imprecise clock.

View file

@ -1,11 +0,0 @@
--- base/profiler/stack_sampling_profiler_test_util.cc.orig 2022-05-25 04:00:43 UTC
+++ base/profiler/stack_sampling_profiler_test_util.cc
@@ -39,7 +39,7 @@
// Fortunately, it provides _alloca, which functions identically.
#include <malloc.h>
#define alloca _alloca
-#else
+#elif !BUILDFLAG(IS_BSD)
#include <alloca.h>
#endif

View file

@ -1,11 +0,0 @@
--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2022-05-19 05:17:34 UTC
+++ base/profiler/stack_sampling_profiler_unittest.cc
@@ -41,7 +41,7 @@
#include <intrin.h>
#include <malloc.h>
#include <windows.h>
-#else
+#elif !BUILDFLAG(IS_BSD)
#include <alloca.h>
#endif

View file

@ -1,11 +0,0 @@
--- base/rand_util.h.orig 2022-05-19 03:45:15 UTC
+++ base/rand_util.h
@@ -81,7 +81,7 @@ void RandomShuffle(Itr first, Itr last) {
std::shuffle(first, last, RandomBitGenerator());
}
-#if BUILDFLAG(IS_POSIX)
+#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_OPENBSD)
BASE_EXPORT int GetUrandomFD();
#endif

View file

@ -1,52 +0,0 @@
--- base/rand_util_posix.cc.orig 2022-05-19 05:17:34 UTC
+++ base/rand_util_posix.cc
@@ -17,7 +17,7 @@
#include "base/posix/eintr_wrapper.h"
#include "build/build_config.h"
-#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !BUILDFLAG(IS_NACL)
+#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
#include "third_party/lss/linux_syscall_support.h"
#elif BUILDFLAG(IS_MAC)
// TODO(crbug.com/995996): Waiting for this header to appear in the iOS SDK.
@@ -34,6 +34,7 @@ static constexpr int kOpenFlags = O_RDONLY;
static constexpr int kOpenFlags = O_RDONLY | O_CLOEXEC;
#endif
+#if !BUILDFLAG(IS_OPENBSD)
// We keep the file descriptor for /dev/urandom around so we don't need to
// reopen it (which is expensive), and since we may not even be able to reopen
// it if we are later put in a sandbox. This class wraps the file descriptor so
@@ -51,6 +52,7 @@ class URandomFd {
private:
const int fd_;
};
+#endif
} // namespace
@@ -62,6 +64,7 @@ namespace base {
// (https://chromium-review.googlesource.com/c/chromium/src/+/1545096) and land
// it or some form of it.
void RandBytes(void* output, size_t output_length) {
+#if !BUILDFLAG(IS_OPENBSD)
#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !BUILDFLAG(IS_NACL)
// We have to call `getrandom` via Linux Syscall Support, rather than through
// the libc wrapper, because we might not have an up-to-date libc (e.g. on
@@ -93,11 +96,16 @@ void RandBytes(void* output, size_t output_length) {
const bool success =
ReadFromFD(urandom_fd, static_cast<char*>(output), output_length);
CHECK(success);
+#else
+ arc4random_buf(static_cast<char*>(output), output_length);
+#endif
}
+#if !BUILDFLAG(IS_OPENBSD)
int GetUrandomFD() {
static NoDestructor<URandomFd> urandom_fd;
return urandom_fd->fd();
}
+#endif
} // namespace base

View file

@ -1,18 +0,0 @@
--- base/strings/safe_sprintf_unittest.cc.orig 2022-05-19 03:45:15 UTC
+++ base/strings/safe_sprintf_unittest.cc
@@ -731,6 +731,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
#endif
}
+#if !BUILDFLAG(IS_BSD)
TEST(SafeSPrintfTest, EmitNULL) {
char buf[40];
#if defined(__GNUC__)
@@ -747,6 +748,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
#pragma GCC diagnostic pop
#endif
}
+#endif
TEST(SafeSPrintfTest, PointerSize) {
// The internal data representation is a 64bit value, independent of the

View file

@ -1,23 +0,0 @@
--- base/synchronization/lock_impl.h.orig 2022-05-25 04:00:43 UTC
+++ base/synchronization/lock_impl.h
@@ -106,6 +106,10 @@ void LockImpl::Unlock() {
}
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
+#if BUILDFLAG(IS_FREEBSD)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wthread-safety-analysis"
+#endif
#if DCHECK_IS_ON()
BASE_EXPORT void dcheck_trylock_result(int rv);
@@ -126,6 +130,9 @@ void LockImpl::Unlock() {
dcheck_unlock_result(rv);
#endif
}
+#if BUILDFLAG(IS_FREEBSD)
+#pragma GCC diagnostic pop
+#endif
#endif
// This is an implementation used for AutoLock templated on the lock type.

View file

@ -1,20 +0,0 @@
--- base/syslog_logging.cc.orig 2022-05-19 03:45:15 UTC
+++ base/syslog_logging.cc
@@ -15,7 +15,7 @@
#include "base/strings/string_util.h"
#include "base/win/scoped_handle.h"
#include "base/win/win_util.h"
-#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// <syslog.h> defines LOG_INFO, LOG_WARNING macros that could conflict with
// base::LOG_INFO, base::LOG_WARNING.
#include <syslog.h>
@@ -147,7 +147,7 @@ EventLogMessage::~EventLogMessage() {
if (user_sid != nullptr)
::LocalFree(user_sid);
-#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
const char kEventSource[] = "chrome";
openlog(kEventSource, LOG_NOWAIT | LOG_PID, LOG_USER);
// We can't use the defined names for the logging severity from syslog.h

View file

@ -1,11 +0,0 @@
--- base/system/sys_info.cc.orig 2022-05-25 04:00:43 UTC
+++ base/system/sys_info.cc
@@ -104,7 +104,7 @@ void SysInfo::GetHardwareInfo(base::OnceCallback<void(
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE)
base::ThreadPool::PostTaskAndReplyWithResult(
FROM_HERE, {}, base::BindOnce(&GetHardwareInfoSync), std::move(callback));
-#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
base::ThreadPool::PostTaskAndReplyWithResult(
FROM_HERE, {base::MayBlock()}, base::BindOnce(&GetHardwareInfoSync),
std::move(callback));

View file

@ -1,20 +0,0 @@
--- base/system/sys_info.h.orig 2022-05-19 05:17:34 UTC
+++ base/system/sys_info.h
@@ -212,6 +212,8 @@ class BASE_EXPORT SysInfo {
// On Desktop this returns true when memory <= 2GB.
static bool IsLowEndDevice();
+ static uint64_t MaxSharedMemorySize();
+
private:
FRIEND_TEST_ALL_PREFIXES(SysInfoTest, AmountOfAvailablePhysicalMemory);
FRIEND_TEST_ALL_PREFIXES(debug::SystemMetricsTest, ParseMeminfo);
@@ -222,7 +224,7 @@ class BASE_EXPORT SysInfo {
static HardwareInfo GetHardwareInfoSync();
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_AIX)
+ BUILDFLAG(IS_AIX) || BUILDFLAG(IS_BSD)
static int64_t AmountOfAvailablePhysicalMemory(
const SystemMemoryInfoKB& meminfo);
#endif

View file

@ -1,113 +0,0 @@
--- base/system/sys_info_freebsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/system/sys_info_freebsd.cc
@@ -9,30 +9,106 @@
#include <sys/sysctl.h>
#include "base/notreached.h"
+#include "base/process/process_metrics.h"
+#include "base/strings/string_util.h"
namespace base {
+int SysInfo::NumberOfProcessors() {
+ int mib[] = {CTL_HW, HW_NCPU};
+ int ncpu;
+ size_t size = sizeof(ncpu);
+ if (sysctl(mib, std::size(mib), &ncpu, &size, NULL, 0) < 0) {
+ NOTREACHED();
+ return 1;
+ }
+ return ncpu;
+}
+
int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
- int pages, page_size;
+ int pages, page_size, r = 0;
size_t size = sizeof(pages);
- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
- if (pages == -1 || page_size == -1) {
+
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+
+ if (r == -1) {
NOTREACHED();
return 0;
}
+
return static_cast<int64_t>(pages) * page_size;
}
+int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
+ int page_size, r = 0;
+ unsigned int pgfree, pginact, pgcache;
+ size_t size = sizeof(page_size);
+ size_t szpg = sizeof(pgfree);
+
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
+ if (r == 0)
+ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
+
+ if (r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+
+ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
+}
+
// static
+int64_t SysInfo::AmountOfAvailablePhysicalMemory(const SystemMemoryInfoKB& info) {
+ int64_t res_kb = info.available != 0
+ ? info.available - info.active_file
+ : info.free + info.reclaimable + info.inactive_file;
+ return res_kb * 1024;
+}
+
+// static
+std::string SysInfo::CPUModelName() {
+ int mib[] = { CTL_HW, HW_MODEL };
+ char name[256];
+ size_t size = std::size(name);
+
+ if (sysctl(mib, std::size(mib), &name, &size, NULL, 0) == 0) {
+ return name;
+ }
+
+ return std::string();
+}
+
+// static
uint64_t SysInfo::MaxSharedMemorySize() {
size_t limit;
size_t size = sizeof(limit);
+
if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
NOTREACHED();
return 0;
}
+
return static_cast<uint64_t>(limit);
+}
+
+SysInfo::HardwareInfo SysInfo::GetHardwareInfoSync() {
+ HardwareInfo info;
+
+ info.manufacturer = "FreeBSD";
+ info.model = HardwareModelName();
+
+ DCHECK(IsStringUTF8(info.manufacturer));
+ DCHECK(IsStringUTF8(info.model));
+
+ return info;
}
} // namespace base

View file

@ -1,94 +0,0 @@
--- base/system/sys_info_openbsd.cc.orig 2022-05-25 04:00:43 UTC
+++ base/system/sys_info_openbsd.cc
@@ -11,6 +11,7 @@
#include <sys/sysctl.h>
#include "base/notreached.h"
+#include "base/strings/string_util.h"
namespace {
@@ -28,9 +29,15 @@ int64_t AmountOfMemory(int pages_name) {
namespace base {
+// pledge(2)
+int64_t aofpmem = 0;
+int64_t aofapmem = 0;
+int64_t shmmax = 0;
+char cpumodel[256];
+
// static
int SysInfo::NumberOfProcessors() {
- int mib[] = {CTL_HW, HW_NCPU};
+ int mib[] = {CTL_HW, HW_NCPUONLINE};
int ncpu;
size_t size = sizeof(ncpu);
if (sysctl(mib, std::size(mib), &ncpu, &size, NULL, 0) < 0) {
@@ -42,10 +49,26 @@ int SysInfo::NumberOfProcessors() {
// static
int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
- return AmountOfMemory(_SC_PHYS_PAGES);
+ // pledge(2)
+ if (!aofpmem)
+ aofpmem = AmountOfMemory(_SC_PHYS_PAGES);
+ return aofpmem;
}
// static
+std::string SysInfo::CPUModelName() {
+ int mib[] = {CTL_HW, HW_MODEL};
+ size_t len = std::size(cpumodel);
+
+ if (cpumodel[0] == '\0') {
+ if (sysctl(mib, std::size(mib), cpumodel, &len, NULL, 0) < 0)
+ return std::string();
+ }
+
+ return std::string(cpumodel, len - 1);
+}
+
+// static
int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
// We should add inactive file-backed memory also but there is no such
// information from OpenBSD unfortunately.
@@ -57,23 +80,28 @@ uint64_t SysInfo::MaxSharedMemorySize() {
int mib[] = {CTL_KERN, KERN_SHMINFO, KERN_SHMINFO_SHMMAX};
size_t limit;
size_t size = sizeof(limit);
+ // pledge(2)
+ if (shmmax)
+ goto out;
if (sysctl(mib, std::size(mib), &limit, &size, NULL, 0) < 0) {
NOTREACHED();
return 0;
}
- return static_cast<uint64_t>(limit);
+ shmmax = static_cast<uint64_t>(limit);
+out:
+ return shmmax;
}
// static
-std::string SysInfo::CPUModelName() {
- int mib[] = {CTL_HW, HW_MODEL};
- char name[256];
- size_t len = std::size(name);
- if (sysctl(mib, std::size(mib), name, &len, NULL, 0) < 0) {
- NOTREACHED();
- return std::string();
- }
- return name;
+SysInfo::HardwareInfo SysInfo::GetHardwareInfoSync() {
+ HardwareInfo info;
+ // Set the manufacturer to "OpenBSD" and the model to
+ // an empty string.
+ info.manufacturer = "OpenBSD";
+ info.model = HardwareModelName();
+ DCHECK(IsStringUTF8(info.manufacturer));
+ DCHECK(IsStringUTF8(info.model));
+ return info;
}
} // namespace base

View file

@ -1,43 +0,0 @@
--- base/system/sys_info_posix.cc.orig 2022-05-19 05:17:34 UTC
+++ base/system/sys_info_posix.cc
@@ -37,7 +37,7 @@
namespace {
-#if !BUILDFLAG(IS_OPENBSD)
+#if !BUILDFLAG(IS_BSD)
int NumberOfProcessors() {
// sysconf returns the number of "logical" (not "physical") processors on both
// Mac and Linux. So we get the number of max available "logical" processors.
@@ -77,7 +77,7 @@ int NumberOfProcessors() {
base::LazyInstance<base::internal::LazySysInfoValue<int, NumberOfProcessors>>::
Leaky g_lazy_number_of_processors = LAZY_INSTANCE_INITIALIZER;
-#endif // !BUILDFLAG(IS_OPENBSD)
+#endif // !BUILDFLAG(IS_BSD)
int64_t AmountOfVirtualMemory() {
struct rlimit limit;
@@ -143,11 +143,11 @@ bool GetDiskSpaceInfo(const base::FilePath& path,
namespace base {
-#if !BUILDFLAG(IS_OPENBSD)
+#if !BUILDFLAG(IS_BSD)
int SysInfo::NumberOfProcessors() {
return g_lazy_number_of_processors.Get().value();
}
-#endif // !BUILDFLAG(IS_OPENBSD)
+#endif // !BUILDFLAG(IS_BSD)
// static
int64_t SysInfo::AmountOfVirtualMemory() {
@@ -239,6 +239,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
arch = "x86";
} else if (arch == "amd64") {
arch = "x86_64";
+ } else if (arch == "arm64") {
+ arch = "aarch64";
} else if (std::string(info.sysname) == "AIX") {
arch = "ppc64";
}

View file

@ -1,19 +0,0 @@
--- base/system/sys_info_unittest.cc.orig 2022-05-19 05:17:34 UTC
+++ base/system/sys_info_unittest.cc
@@ -234,12 +234,15 @@ TEST_F(SysInfoTest, GetHardwareInfo) {
EXPECT_TRUE(IsStringUTF8(hardware_info->model));
bool empty_result_expected =
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN) || \
- BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+ BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
false;
#else
true;
#endif
EXPECT_EQ(hardware_info->manufacturer.empty(), empty_result_expected);
+#if BUILDFLAG(IS_BSD)
+ empty_result_expected = true;
+#endif
EXPECT_EQ(hardware_info->model.empty(), empty_result_expected);
}

View file

@ -1,11 +0,0 @@
--- base/task/thread_pool/environment_config_unittest.cc.orig 2022-05-19 03:45:15 UTC
+++ base/task/thread_pool/environment_config_unittest.cc
@@ -15,7 +15,7 @@ TEST(ThreadPoolEnvironmentConfig, CanUseBackgroundPrio
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
EXPECT_TRUE(CanUseBackgroundPriorityForWorkerThread());
#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) || \
- BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_NACL)
+ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_NACL) || BUILDFLAG(IS_BSD)
EXPECT_FALSE(CanUseBackgroundPriorityForWorkerThread());
#else
#error Platform doesn't match any block

View file

@ -1,10 +0,0 @@
--- base/test/launcher/test_launcher.cc.orig 2022-05-19 03:45:15 UTC
+++ base/test/launcher/test_launcher.cc
@@ -63,6 +63,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#if BUILDFLAG(IS_POSIX)
+#include <signal.h>
#include <fcntl.h>
#include "base/files/file_descriptor_watcher_posix.h"

View file

@ -1,13 +0,0 @@
--- base/test/test_file_util_linux.cc.orig 2022-05-19 03:45:15 UTC
+++ base/test/test_file_util_linux.cc
@@ -54,8 +54,10 @@ bool EvictFileFromSystemCache(const FilePath& file) {
return false;
if (fdatasync(fd.get()) != 0)
return false;
+#if !defined(OS_BSD)
if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
return false;
+#endif
return true;
}

View file

@ -1,11 +0,0 @@
--- base/test/test_file_util_posix.cc.orig 2022-05-19 03:45:15 UTC
+++ base/test/test_file_util_posix.cc
@@ -88,7 +88,7 @@ void SyncPageCacheToDisk() {
}
#if !BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_APPLE) && \
- !BUILDFLAG(IS_ANDROID)
+ !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_BSD)
bool EvictFileFromSystemCache(const FilePath& file) {
// There doesn't seem to be a POSIX way to cool the disk cache.
NOTIMPLEMENTED();

View file

@ -1,14 +0,0 @@
--- base/third_party/libevent/event.h.orig 2022-05-25 04:00:43 UTC
+++ base/third_party/libevent/event.h
@@ -1,3 +1,6 @@
+#if defined(USE_SYSTEM_LIBEVENT)
+#include <event.h>
+#else
/*
* Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
* All rights reserved.
@@ -1210,3 +1213,4 @@ int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev
#endif
#endif /* _EVENT_H_ */
+#endif

View file

@ -1,11 +0,0 @@
--- base/third_party/symbolize/symbolize.cc.orig 2022-05-19 03:45:15 UTC
+++ base/third_party/symbolize/symbolize.cc
@@ -114,7 +114,7 @@ _END_GOOGLE_NAMESPACE_
#if defined(HAVE_DLFCN_H)
#include <dlfcn.h>
#endif
-#if BUILDFLAG(IS_OPENBSD)
+#if defined(__OpenBSD__)
#include <sys/exec_elf.h>
#else
#include <elf.h>

View file

@ -1,11 +0,0 @@
--- base/threading/platform_thread.h.orig 2022-05-25 04:00:43 UTC
+++ base/threading/platform_thread.h
@@ -211,7 +211,7 @@ class BASE_EXPORT PlatformThread {
// Returns a realtime period provided by `delegate`.
static TimeDelta GetRealtimePeriod(Delegate* delegate);
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// Toggles a specific thread's priority at runtime. This can be used to
// change the priority of a thread in a different process and will fail
// if the calling process does not have proper permissions. The

View file

@ -1,77 +0,0 @@
--- base/threading/platform_thread_linux.cc.orig 2022-05-25 04:00:43 UTC
+++ base/threading/platform_thread_linux.cc
@@ -30,7 +30,9 @@
#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_AIX)
#include <pthread.h>
+#if !BUILDFLAG(IS_BSD)
#include <sys/prctl.h>
+#endif
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -133,7 +135,7 @@ int sched_setattr(pid_t pid,
#endif // !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_AIX)
#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
const FilePath::CharType kCgroupDirectory[] =
FILE_PATH_LITERAL("/sys/fs/cgroup");
@@ -287,7 +289,7 @@ void SetThreadCgroupsForThreadPriority(PlatformThreadI
namespace internal {
namespace {
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
const struct sched_param kRealTimePrio = {8};
#endif
} // namespace
@@ -300,7 +302,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToN
};
bool CanSetThreadPriorityToRealtimeAudio() {
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
// A non-zero soft-limit on RLIMIT_RTPRIO is required to be allowed to invoke
// pthread_setschedparam in SetCurrentThreadPriorityForPlatform().
struct rlimit rlim;
@@ -311,7 +313,7 @@ bool CanSetThreadPriorityToRealtimeAudio() {
}
bool SetCurrentThreadPriorityForPlatform(ThreadPriority priority) {
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
// For legacy schedtune interface
SetThreadCgroupsForThreadPriority(PlatformThread::CurrentId(), priority);
@@ -329,7 +331,7 @@ bool SetCurrentThreadPriorityForPlatform(ThreadPriorit
}
absl::optional<ThreadPriority> GetCurrentThreadPriorityForPlatform() {
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
int maybe_sched_rr = 0;
struct sched_param maybe_realtime_prio = {0};
if (pthread_getschedparam(pthread_self(), &maybe_sched_rr,
@@ -348,7 +350,7 @@ absl::optional<ThreadPriority> GetCurrentThreadPriorit
void PlatformThread::SetName(const std::string& name) {
ThreadIdNameManager::GetInstance()->SetName(name);
-#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_AIX)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_AIX) && !BUILDFLAG(IS_BSD)
// On linux we can get the thread names to show up in the debugger by setting
// the process name for the LWP. We don't want to do this for the main
// thread because that would rename the process, causing tools like killall
@@ -378,8 +380,10 @@ void PlatformThread::SetThreadPriority(ProcessId proce
// priority.
CHECK_NE(thread_id, process_id);
+#if !BUILDFLAG(IS_BSD)
// For legacy schedtune interface
SetThreadCgroupsForThreadPriority(thread_id, priority);
+#endif
#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)
// For upstream uclamp interface. We try both legacy (schedtune, as done

View file

@ -1,21 +0,0 @@
--- base/threading/platform_thread_posix.cc.orig 2022-06-19 00:44:36 UTC
+++ base/threading/platform_thread_posix.cc
@@ -77,7 +77,7 @@ void* ThreadFunc(void* params) {
if (!thread_params->joinable)
base::DisallowSingleton();
-#if !BUILDFLAG(IS_NACL)
+#if !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_BSD)
#if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && defined(PA_ALLOW_PCSCAN)
internal::PCScan::NotifyThreadCreated(internal::GetStackPointer());
#endif
@@ -366,6 +366,9 @@ bool PlatformThread::CanChangeThreadPriority(ThreadPri
// static
void PlatformThread::SetCurrentThreadPriorityImpl(ThreadPriority priority) {
#if BUILDFLAG(IS_NACL)
+ NOTIMPLEMENTED();
+// avoid pledge(2) violation
+#elif BUILDFLAG(IS_BSD)
NOTIMPLEMENTED();
#else
if (internal::SetCurrentThreadPriorityForPlatform(priority))

View file

@ -1,47 +0,0 @@
--- base/threading/platform_thread_unittest.cc.orig 2022-05-19 05:17:34 UTC
+++ base/threading/platform_thread_unittest.cc
@@ -30,7 +30,7 @@
#include "base/time/time.h"
#endif
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
#include <pthread.h>
#include <sys/syscall.h>
#include <sys/types.h>
@@ -319,7 +319,7 @@ TEST(PlatformThreadTest,
// and hardcodes what we know. Please inform scheduler-dev@chromium.org if this
// proprerty changes for a given platform.
TEST(PlatformThreadTest, CanChangeThreadPriority) {
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
// On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be
// able to increase priority to any level.
constexpr bool kCanIncreasePriority = false;
@@ -417,7 +417,7 @@ TEST(PlatformThreadTest, SetHugeThreadName) {
TEST(PlatformThreadTest, GetDefaultThreadStackSize) {
size_t stack_size = PlatformThread::GetDefaultThreadStackSize();
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_IOS) || BUILDFLAG(IS_FUCHSIA) || \
- ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && \
+ ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)) && \
!defined(THREAD_SANITIZER)) || \
(BUILDFLAG(IS_ANDROID) && !defined(ADDRESS_SANITIZER))
EXPECT_EQ(0u, stack_size);
@@ -578,12 +578,16 @@ INSTANTIATE_TEST_SUITE_P(
#endif // BUILDFLAG(IS_APPLE)
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD)
namespace {
bool IsTidCacheCorrect() {
+#if BUILDFLAG(IS_BSD)
+ return PlatformThread::CurrentId() == reinterpret_cast<int64_t>(pthread_self());
+#else
return PlatformThread::CurrentId() == syscall(__NR_gettid);
+#endif
}
void* CheckTidCacheCorrectWrapper(void*) {

View file

@ -1,11 +0,0 @@
--- base/time/time.cc.orig 2022-05-19 05:17:34 UTC
+++ base/time/time.cc
@@ -6,7 +6,7 @@
#include "build/build_config.h"
-#if BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)
// time.h is a widely included header and its size impacts build time.
// Try not to raise this limit unless necessary. See
// https://chromium.googlesource.com/chromium/src/+/HEAD/docs/wmax_tokens.md

View file

@ -1,31 +0,0 @@
--- base/trace_event/malloc_dump_provider.cc.orig 2022-05-25 04:00:43 UTC
+++ base/trace_event/malloc_dump_provider.cc
@@ -23,6 +23,8 @@
#if BUILDFLAG(IS_APPLE)
#include <malloc/malloc.h>
+#elif defined(OS_BSD)
+#include <stdlib.h>
#else
#include <malloc.h>
#endif
@@ -174,7 +176,8 @@ void ReportAppleAllocStats(size_t* total_virtual_size,
#if (BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && BUILDFLAG(IS_ANDROID)) || \
(!BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && !BUILDFLAG(IS_WIN) && \
- !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_FUCHSIA))
+ !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_FUCHSIA) && \
+ !BUILDFLAG(IS_BSD))
void ReportMallinfoStats(ProcessMemoryDump* pmd,
size_t* total_virtual_size,
size_t* resident_size,
@@ -339,6 +342,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
&allocated_objects_count);
#elif BUILDFLAG(IS_FUCHSIA)
// TODO(fuchsia): Port, see https://crbug.com/706592.
+#elif defined(OS_BSD)
+ total_virtual_size = 0;
+ allocated_objects_size = 0;
#else
ReportMallinfoStats(/*pmd=*/nullptr, &total_virtual_size, &resident_size,
&allocated_objects_size, &allocated_objects_count);

View file

@ -1,11 +0,0 @@
--- base/trace_event/memory_dump_manager.cc.orig 2022-05-19 05:17:34 UTC
+++ base/trace_event/memory_dump_manager.cc
@@ -82,7 +82,7 @@ const char* const MemoryDumpManager::kSystemAllocatorP
#if defined(MALLOC_MEMORY_TRACING_SUPPORTED)
MallocDumpProvider::kAllocatedObjects;
#else
- nullptr;
+ "";
#endif
// static

View file

@ -1,20 +0,0 @@
--- base/trace_event/process_memory_dump.cc.orig 2022-05-19 05:17:34 UTC
+++ base/trace_event/process_memory_dump.cc
@@ -105,7 +105,7 @@ absl::optional<size_t> ProcessMemoryDump::CountResiden
#if BUILDFLAG(IS_WIN)
std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
-#elif BUILDFLAG(IS_APPLE)
+#elif BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD)
std::unique_ptr<char[]> vec(new char[max_vec_size]);
#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
@@ -130,7 +130,7 @@ absl::optional<size_t> ProcessMemoryDump::CountResiden
for (size_t i = 0; i < page_count; i++)
resident_page_count += vec[i].VirtualAttributes.Valid;
-#elif BUILDFLAG(IS_FUCHSIA)
+#elif BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
// TODO(fuchsia): Port, see https://crbug.com/706592.
#elif BUILDFLAG(IS_APPLE)
// mincore in MAC does not fail with EAGAIN.

View file

@ -1,28 +0,0 @@
--- base/tracing/trace_time.cc.orig 2022-05-19 03:45:15 UTC
+++ base/tracing/trace_time.cc
@@ -8,13 +8,17 @@
#include "build/build_config.h"
#include "third_party/perfetto/include/perfetto/base/time.h"
+#if BUILDFLAG(IS_FREEBSD)
+#define CLOCK_BOOTTIME CLOCK_UPTIME
+#endif
+
namespace base {
namespace tracing {
int64_t TraceBootTicksNow() {
// On Windows and Mac, TRACE_TIME_TICKS_NOW() behaves like boottime already.
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_FUCHSIA)
+ BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
struct timespec ts;
int res = clock_gettime(CLOCK_BOOTTIME, &ts);
if (res != -1)
@@ -24,4 +28,4 @@ int64_t TraceBootTicksNow() {
}
} // namespace tracing
-} // namespace base
\ No newline at end of file
+} // namespace base

View file

@ -1,11 +0,0 @@
--- base/tracing/trace_time.h.orig 2022-05-19 03:45:15 UTC
+++ base/tracing/trace_time.h
@@ -12,7 +12,7 @@ namespace base {
namespace tracing {
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || \
- BUILDFLAG(IS_FUCHSIA)
+ BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_BSD)
// Linux, Android, and Fuchsia all use CLOCK_MONOTONIC. See crbug.com/166153
// about efforts to unify base::TimeTicks across all platforms.
constexpr perfetto::protos::pbzero::BuiltinClock kTraceClockId =

Some files were not shown because too many files have changed in this diff Show more