From 579cc0f4be7222c30b3892f77623af1284fd44df Mon Sep 17 00:00:00 2001 From: "Node.js Jenkins CI" Date: Tue, 19 Dec 2017 06:55:27 +0000 Subject: [PATCH 1/9] doc: update README for node-v8 repository --- README.md | 602 +----------------------------------------------------- 1 file changed, 9 insertions(+), 593 deletions(-) diff --git a/README.md b/README.md index 504a9593d8d..de2023a01d6 100644 --- a/README.md +++ b/README.md @@ -1,596 +1,12 @@ -

- - Node.js - -

-

- -

+This is an automatically updated **experimental** +version of [Node.js](https://github.com/nodejs/node) +with the lkgr (last known good revision) of V8. -Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js -uses an event-driven, non-blocking I/O model that makes it lightweight and -efficient. The Node.js package ecosystem, [npm][], is the largest ecosystem of -open source libraries in the world. +The daily builds of this repo can be found at +[`v8-canary`](https://nodejs.org/download/v8-canary/). +**Do not use this in production!** -The Node.js project is supported by the -[Node.js Foundation](https://nodejs.org/en/foundation/). Contributions, -policies, and releases are managed under an -[open governance model](./GOVERNANCE.md). +This repository is not owned by `@nodejs/v8`, but they might be able to +help with issues. -**This project is bound by a [Code of Conduct][].** - - -# Table of Contents - -* [Support](#support) -* [Release Types](#release-types) - * [Download](#download) - * [Current and LTS Releases](#current-and-lts-releases) - * [Nightly Releases](#nightly-releases) - * [API Documentation](#api-documentation) - * [Verifying Binaries](#verifying-binaries) -* [Building Node.js](#building-nodejs) -* [Security](#security) -* [Current Project Team Members](#current-project-team-members) - * [TSC (Technical Steering Committee)](#tsc-technical-steering-committee) - * [Collaborators](#collaborators) - * [Release Team](#release-team) -* [Contributing to Node.js](#contributing-to-nodejs) - -## Support - -Node.js contributors have limited availability to address general support -questions. Please make sure you are using a [currently-supported version of -Node.js](https://github.com/nodejs/Release#release-schedule). - -When looking for support, please first search for your question in these venues: - -* [Node.js Website][] -* [Node.js Help][] -* [Open or closed issues in the Node.js GitHub organization](https://github.com/issues?utf8=%E2%9C%93&q=sort%3Aupdated-desc+org%3Anodejs+is%3Aissue) -* [Questions tagged 'node.js' on StackOverflow][] - -If you didn't find an answer in one of the venues above, you can: - -* Join the **unofficial** [#node.js channel on chat.freenode.net][]. See - for more information. - -GitHub issues are meant for tracking enhancements and bugs, not general support. - -Remember, libre != gratis; the open source license grants you the freedom to use -and modify, but not commitments of other people's time. Please be respectful, -and set your expectations accordingly. - -## Release Types - -The Node.js project maintains multiple types of releases: - -* **Current**: Released from active development branches of this repository, - versioned by [SemVer](https://semver.org) and signed by a member of the - [Release Team](#release-team). - Code for Current releases is organized in this repository by major version - number. For example: [v4.x](https://github.com/nodejs/node/tree/v4.x). - The major version number of Current releases will increment every 6 months - allowing for breaking changes to be introduced. This happens in April and - October every year. Current release lines beginning in October each year have - a maximum support life of 8 months. Current release lines beginning in April - each year will convert to LTS (see below) after 6 months and receive further - support for 30 months. -* **LTS**: Releases that receive Long-term Support, with a focus on stability - and security. Every second Current release line (major version) will become an - LTS line and receive 18 months of _Active LTS_ support and a further 12 - months of _Maintenance_. LTS release lines are given alphabetically - ordered codenames, beginning with v4 Argon. LTS releases are less frequent - and will attempt to maintain consistent major and minor version numbers, - only incrementing patch version numbers. There are no breaking changes or - feature additions, except in some special circumstances. -* **Nightly**: Versions of code in this repository on the current Current - branch, automatically built every 24-hours where changes exist. Use with - caution. - -More information can be found in the [LTS README](https://github.com/nodejs/LTS/). - -### Download - -Binaries, installers, and source tarballs are available at -. - -#### Current and LTS Releases -**Current** and **LTS** releases are available at -, listed under their version strings. -The [latest](https://nodejs.org/download/release/latest/) directory is an -alias for the latest Current release. The latest LTS release from an LTS -line is available in the form: latest-_codename_. For example: -. - -#### Nightly Releases -**Nightly** builds are available at -, listed under their version -string which includes their date (in UTC time) and the commit SHA at -the HEAD of the release. - -#### API Documentation -**API documentation** is available in each release and nightly -directory under _docs_. points to the API -documentation of the latest stable version. - -### Verifying Binaries - -Current, LTS, and Nightly download directories all contain a SHASUMS256.txt -file that lists the SHA checksums for each file available for -download. - -The SHASUMS256.txt can be downloaded using `curl`. - -```console -$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt -``` - -To check that a downloaded file matches the checksum, run -it through `sha256sum` with a command such as: - -```console -$ grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c - -``` - -Current and LTS releases (but not Nightlies) also have the GPG detached -signature of SHASUMS256.txt available as SHASUMS256.txt.sig. You can use `gpg` -to verify that SHASUMS256.txt has not been tampered with. - -To verify SHASUMS256.txt has not been altered, you will first need to import -all of the GPG keys of individuals authorized to create releases. They are -listed at the bottom of this README under [Release Team](#release-team). -Use a command such as this to import the keys: - -```console -$ gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D -``` - -See the bottom of this README for a full script to import active release keys. - -Next, download the SHASUMS256.txt.sig for the release: - -```console -$ curl -O https://nodejs.org/dist/vx.y.z/SHASUMS256.txt.sig -``` - -After downloading the appropriate SHASUMS256.txt and SHASUMS256.txt.sig files, -you can then use `gpg --verify SHASUMS256.txt.sig SHASUMS256.txt` to verify -that the file has been signed by an authorized member of the Node.js team. - -Once verified, use the SHASUMS256.txt file to get the checksum for -the binary verification command above. - -## Building Node.js - -See [BUILDING.md](BUILDING.md) for instructions on how to build -Node.js from source. The document also contains a list of -officially supported platforms. - -## Security - -All security bugs in Node.js are taken seriously and should be reported by -emailing security@nodejs.org. This will be delivered to a subset of the project -team who handle security issues. Please don't disclose security bugs -publicly until they have been handled by the security team. - -Your email will be acknowledged within 24 hours, and you’ll receive a more -detailed response to your email within 48 hours indicating the next steps in -handling your report. - -There are no hard and fast rules to determine if a bug is worth reporting as -a security issue. The general rule is any issue worth reporting -must allow an attacker to compromise the confidentiality, integrity -or availability of the Node.js application or its system for which the attacker -does not already have the capability. - -To illustrate the point, here are some examples of past issues and what the -Security Response Team thinks of them. When in doubt, however, please do send -us a report nonetheless. - - -### Public disclosure preferred - -- [#14519](https://github.com/nodejs/node/issues/14519): _Internal domain - function can be used to cause segfaults_. Causing program termination using - either the public JavaScript APIs or the private bindings layer APIs requires - the ability to execute arbitrary JavaScript code, which is already the highest - level of privilege possible. - -- [#12141](https://github.com/nodejs/node/pull/12141): _buffer: zero fill - Buffer(num) by default_. The buffer constructor behavior was documented, - but found to be prone to [mis-use](https://snyk.io/blog/exploiting-buffer/). - It has since been changed, but despite much debate, was not considered misuse - prone enough to justify fixing in older release lines and breaking our - API stability contract. - -### Private disclosure preferred - -- [CVE-2016-7099](https://nodejs.org/en/blog/vulnerability/september-2016-security-releases/): - _Fix invalid wildcard certificate validation check_. This is a high severity - defect that would allow a malicious TLS server to serve an invalid wildcard - certificate for its hostname and be improperly validated by a Node.js client. - -- [#5507](https://github.com/nodejs/node/pull/5507): _Fix a defect that makes - the CacheBleed Attack possible_. Many, though not all, OpenSSL vulnerabilities - in the TLS/SSL protocols also effect Node.js. - -- [CVE-2016-2216](https://nodejs.org/en/blog/vulnerability/february-2016-security-releases/): - _Fix defects in HTTP header parsing for requests and responses that can allow - response splitting_. While the impact of this vulnerability is application and - network dependent, it is remotely exploitable in the HTTP protocol. - -When in doubt, please do send us a report. - - -## Current Project Team Members - -The Node.js project team comprises a group of core collaborators and a sub-group -that forms the _Technical Steering Committee_ (TSC) which governs the project. -For more information about the governance of the Node.js project, see -[GOVERNANCE.md](./GOVERNANCE.md). - -### TSC (Technical Steering Committee) - -* [addaleax](https://github.com/addaleax) - -**Anna Henningsen** <anna@addaleax.net> (she/her) -* [ChALkeR](https://github.com/ChALkeR) - -**Сковорода Никита Андреевич** <chalkerx@gmail.com> (he/him) -* [cjihrig](https://github.com/cjihrig) - -**Colin Ihrig** <cjihrig@gmail.com> -* [danbev](https://github.com/danbev) - -**Daniel Bevenius** <daniel.bevenius@gmail.com> -* [evanlucas](https://github.com/evanlucas) - -**Evan Lucas** <evanlucas@me.com> (he/him) -* [fhinkel](https://github.com/fhinkel) - -**Franziska Hinkelmann** <franziska.hinkelmann@gmail.com> (she/her) -* [Fishrock123](https://github.com/Fishrock123) - -**Jeremiah Senkpiel** <fishrock123@rocketmail.com> -* [indutny](https://github.com/indutny) - -**Fedor Indutny** <fedor.indutny@gmail.com> -* [jasnell](https://github.com/jasnell) - -**James M Snell** <jasnell@gmail.com> (he/him) -* [joshgav](https://github.com/joshgav) - -**Josh Gavant** <josh.gavant@outlook.com> -* [joyeecheung](https://github.com/joyeecheung) - -**Joyee Cheung** <joyeec9h3@gmail.com> (she/her) -* [mcollina](https://github.com/mcollina) - -**Matteo Collina** <matteo.collina@gmail.com> (he/him) -* [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) -* [mscdex](https://github.com/mscdex) - -**Brian White** <mscdex@mscdex.net> -* [MylesBorins](https://github.com/MylesBorins) - -**Myles Borins** <myles.borins@gmail.com> (he/him) -* [ofrobots](https://github.com/ofrobots) - -**Ali Ijaz Sheikh** <ofrobots@google.com> -* [rvagg](https://github.com/rvagg) - -**Rod Vagg** <rod@vagg.org> -* [targos](https://github.com/targos) - -**Michaël Zasso** <targos@protonmail.com> (he/him) -* [thefourtheye](https://github.com/thefourtheye) - -**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) -* [trevnorris](https://github.com/trevnorris) - -**Trevor Norris** <trev.norris@gmail.com> -* [Trott](https://github.com/Trott) - -**Rich Trott** <rtrott@gmail.com> (he/him) - -### TSC Emeriti - -* [bnoordhuis](https://github.com/bnoordhuis) - -**Ben Noordhuis** <info@bnoordhuis.nl> -* [chrisdickinson](https://github.com/chrisdickinson) - -**Chris Dickinson** <christopher.s.dickinson@gmail.com> -* [isaacs](https://github.com/isaacs) - -**Isaac Z. Schlueter** <i@izs.me> -* [nebrius](https://github.com/nebrius) - -**Bryan Hughes** <bryan@nebri.us> -* [orangemocha](https://github.com/orangemocha) - -**Alexis Campailla** <orangemocha@nodejs.org> -* [piscisaureus](https://github.com/piscisaureus) - -**Bert Belder** <bertbelder@gmail.com> -* [shigeki](https://github.com/shigeki) - -**Shigeki Ohtsu** <ohtsu@ohtsu.org> (he/him) - -### Collaborators - -* [abouthiroppy](https://github.com/abouthiroppy) - -**Yuta Hiroto** <hello@about-hiroppy.com> (he/him) -* [addaleax](https://github.com/addaleax) - -**Anna Henningsen** <anna@addaleax.net> (she/her) -* [ak239](https://github.com/ak239) - -**Aleksei Koziatinskii** <ak239spb@gmail.com> -* [andrasq](https://github.com/andrasq) - -**Andras** <andras@kinvey.com> -* [AndreasMadsen](https://github.com/AndreasMadsen) - -**Andreas Madsen** <amwebdk@gmail.com> (he/him) -* [AnnaMag](https://github.com/AnnaMag) - -**Anna M. Kedzierska** <anna.m.kedzierska@gmail.com> -* [apapirovski](https://github.com/apapirovski) - -**Anatoli Papirovski** <apapirovski@mac.com> (he/him) -* [aqrln](https://github.com/aqrln) - -**Alexey Orlenko** <eaglexrlnk@gmail.com> (he/him) -* [bengl](https://github.com/bengl) - -**Bryan English** <bryan@bryanenglish.com> (he/him) -* [benjamingr](https://github.com/benjamingr) - -**Benjamin Gruenbaum** <benjamingr@gmail.com> -* [bmeck](https://github.com/bmeck) - -**Bradley Farias** <bradley.meck@gmail.com> -* [bmeurer](https://github.com/bmeurer) - -**Benedikt Meurer** <benedikt.meurer@gmail.com> -* [bnoordhuis](https://github.com/bnoordhuis) - -**Ben Noordhuis** <info@bnoordhuis.nl> -* [brendanashworth](https://github.com/brendanashworth) - -**Brendan Ashworth** <brendan.ashworth@me.com> -* [BridgeAR](https://github.com/BridgeAR) - -**Ruben Bridgewater** <ruben@bridgewater.de> -* [bzoz](https://github.com/bzoz) - -**Bartosz Sosnowski** <bartosz@janeasystems.com> -* [calvinmetcalf](https://github.com/calvinmetcalf) - -**Calvin Metcalf** <calvin.metcalf@gmail.com> -* [ChALkeR](https://github.com/ChALkeR) - -**Сковорода Никита Андреевич** <chalkerx@gmail.com> (he/him) -* [chrisdickinson](https://github.com/chrisdickinson) - -**Chris Dickinson** <christopher.s.dickinson@gmail.com> -* [cjihrig](https://github.com/cjihrig) - -**Colin Ihrig** <cjihrig@gmail.com> -* [claudiorodriguez](https://github.com/claudiorodriguez) - -**Claudio Rodriguez** <cjrodr@yahoo.com> -* [danbev](https://github.com/danbev) - -**Daniel Bevenius** <daniel.bevenius@gmail.com> -* [DavidCai1993](https://github.com/DavidCai1993) - -**David Cai** <davidcai1993@yahoo.com> (he/him) -* [edsadr](https://github.com/edsadr) - -**Adrian Estrada** <edsadr@gmail.com> (he/him) -* [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) - -**Robert Jefe Lindstaedt** <robert.lindstaedt@gmail.com> -* [estliberitas](https://github.com/estliberitas) - -**Alexander Makarenko** <estliberitas@gmail.com> -* [eugeneo](https://github.com/eugeneo) - -**Eugene Ostroukhov** <eostroukhov@google.com> -* [evanlucas](https://github.com/evanlucas) - -**Evan Lucas** <evanlucas@me.com> (he/him) -* [fhinkel](https://github.com/fhinkel) - -**Franziska Hinkelmann** <franziska.hinkelmann@gmail.com> (she/her) -* [firedfox](https://github.com/firedfox) - -**Daniel Wang** <wangyang0123@gmail.com> -* [Fishrock123](https://github.com/Fishrock123) - -**Jeremiah Senkpiel** <fishrock123@rocketmail.com> -* [gabrielschulhof](https://github.com/gabrielschulhof) - -**Gabriel Schulhof** <gabriel.schulhof@intel.com> -* [geek](https://github.com/geek) - -**Wyatt Preul** <wpreul@gmail.com> -* [gibfahn](https://github.com/gibfahn) - -**Gibson Fahnestock** <gibfahn@gmail.com> (he/him) -* [gireeshpunathil](https://github.com/gireeshpunathil) - -**Gireesh Punathil** <gpunathi@in.ibm.com> (he/him) -* [guybedford](https://github.com/guybedford) - -**Guy Bedford** <guybedford@gmail.com> (he/him) -* [hashseed](https://github.com/hashseed) - -**Yang Guo** <yangguo@chromium.org> (he/him) -* [iarna](https://github.com/iarna) - -**Rebecca Turner** <me@re-becca.org> -* [imran-iq](https://github.com/imran-iq) - -**Imran Iqbal** <imran@imraniqbal.org> -* [imyller](https://github.com/imyller) - -**Ilkka Myller** <ilkka.myller@nodefield.com> -* [indutny](https://github.com/indutny) - -**Fedor Indutny** <fedor.indutny@gmail.com> -* [italoacasas](https://github.com/italoacasas) - -**Italo A. Casas** <me@italoacasas.com> (he/him) -* [JacksonTian](https://github.com/JacksonTian) - -**Jackson Tian** <shyvo1987@gmail.com> -* [jasnell](https://github.com/jasnell) - -**James M Snell** <jasnell@gmail.com> (he/him) -* [jasongin](https://github.com/jasongin) - -**Jason Ginchereau** <jasongin@microsoft.com> -* [jbergstroem](https://github.com/jbergstroem) - -**Johan Bergström** <bugs@bergstroem.nu> -* [jhamhader](https://github.com/jhamhader) - -**Yuval Brik** <yuval@brik.org.il> -* [jkrems](https://github.com/jkrems) - -**Jan Krems** <jan.krems@gmail.com> (he/him) -* [joaocgreis](https://github.com/joaocgreis) - -**João Reis** <reis@janeasystems.com> -* [joshgav](https://github.com/joshgav) - -**Josh Gavant** <josh.gavant@outlook.com> -* [joyeecheung](https://github.com/joyeecheung) - -**Joyee Cheung** <joyeec9h3@gmail.com> (she/her) -* [julianduque](https://github.com/julianduque) - -**Julian Duque** <julianduquej@gmail.com> (he/him) -* [JungMinu](https://github.com/JungMinu) - -**Minwoo Jung** <minwoo@nodesource.com> (he/him) -* [kfarnung](https://github.com/kfarnung) - -**Kyle Farnung** <kfarnung@microsoft.com> (he/him) -* [kunalspathak](https://github.com/kunalspathak) - -**Kunal Pathak** <kunal.pathak@microsoft.com> -* [lance](https://github.com/lance) - -**Lance Ball** <lball@redhat.com> -* [lpinca](https://github.com/lpinca) - -**Luigi Pinca** <luigipinca@gmail.com> (he/him) -* [lucamaraschi](https://github.com/lucamaraschi) - -**Luca Maraschi** <luca.maraschi@gmail.com> (he/him) -* [maclover7](https://github.com/maclover7) - -**Jon Moss** <me@jonathanmoss.me> (he/him) -* [matthewloring](https://github.com/matthewloring) - -**Matthew Loring** <mattloring@google.com> -* [mcollina](https://github.com/mcollina) - -**Matteo Collina** <matteo.collina@gmail.com> (he/him) -* [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) -* [micnic](https://github.com/micnic) - -**Nicu Micleușanu** <micnic90@gmail.com> (he/him) -* [mikeal](https://github.com/mikeal) - -**Mikeal Rogers** <mikeal.rogers@gmail.com> -* [misterdjules](https://github.com/misterdjules) - -**Julien Gilli** <jgilli@nodejs.org> -* [mscdex](https://github.com/mscdex) - -**Brian White** <mscdex@mscdex.net> -* [MylesBorins](https://github.com/MylesBorins) - -**Myles Borins** <myles.borins@gmail.com> (he/him) -* [not-an-aardvark](https://github.com/not-an-aardvark) - -**Teddy Katz** <teddy.katz@gmail.com> -* [ofrobots](https://github.com/ofrobots) - -**Ali Ijaz Sheikh** <ofrobots@google.com> -* [orangemocha](https://github.com/orangemocha) - -**Alexis Campailla** <orangemocha@nodejs.org> -* [othiym23](https://github.com/othiym23) - -**Forrest L Norvell** <ogd@aoaioxxysz.net> (he/him) -* [phillipj](https://github.com/phillipj) - -**Phillip Johnsen** <johphi@gmail.com> -* [pmq20](https://github.com/pmq20) - -**Minqi Pan** <pmq2001@gmail.com> -* [princejwesley](https://github.com/princejwesley) - -**Prince John Wesley** <princejohnwesley@gmail.com> -* [Qard](https://github.com/Qard) - -**Stephen Belanger** <admin@stephenbelanger.com> (he/him) -* [refack](https://github.com/refack) - -**Refael Ackermann** <refack@gmail.com> (he/him) -* [richardlau](https://github.com/richardlau) - -**Richard Lau** <riclau@uk.ibm.com> -* [rmg](https://github.com/rmg) - -**Ryan Graham** <r.m.graham@gmail.com> -* [robertkowalski](https://github.com/robertkowalski) - -**Robert Kowalski** <rok@kowalski.gd> -* [romankl](https://github.com/romankl) - -**Roman Klauke** <romaaan.git@gmail.com> -* [ronkorving](https://github.com/ronkorving) - -**Ron Korving** <ron@ronkorving.nl> -* [RReverser](https://github.com/RReverser) - -**Ingvar Stepanyan** <me@rreverser.com> -* [rvagg](https://github.com/rvagg) - -**Rod Vagg** <rod@vagg.org> -* [saghul](https://github.com/saghul) - -**Saúl Ibarra Corretgé** <saghul@gmail.com> -* [sam-github](https://github.com/sam-github) - -**Sam Roberts** <vieuxtech@gmail.com> -* [santigimeno](https://github.com/santigimeno) - -**Santiago Gimeno** <santiago.gimeno@gmail.com> -* [sebdeckers](https://github.com/sebdeckers) - -**Sebastiaan Deckers** <sebdeckers83@gmail.com> -* [seishun](https://github.com/seishun) - -**Nikolai Vavilov** <vvnicholas@gmail.com> -* [shigeki](https://github.com/shigeki) - -**Shigeki Ohtsu** <ohtsu@ohtsu.org> (he/him) -* [silverwind](https://github.com/silverwind) - -**Roman Reiss** <me@silverwind.io> -* [srl295](https://github.com/srl295) - -**Steven R Loomis** <srloomis@us.ibm.com> -* [stefanmb](https://github.com/stefanmb) - -**Stefan Budeanu** <stefan@budeanu.com> -* [targos](https://github.com/targos) - -**Michaël Zasso** <targos@protonmail.com> (he/him) -* [thefourtheye](https://github.com/thefourtheye) - -**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) -* [thekemkid](https://github.com/thekemkid) - -**Glen Keane** <glenkeane.94@gmail.com> (he/him) -* [thlorenz](https://github.com/thlorenz) - -**Thorsten Lorenz** <thlorenz@gmx.de> -* [TimothyGu](https://github.com/TimothyGu) - -**Timothy Gu** <timothygu99@gmail.com> (he/him) -* [tniessen](https://github.com/tniessen) - -**Tobias Nießen** <tniessen@tnie.de> -* [trevnorris](https://github.com/trevnorris) - -**Trevor Norris** <trev.norris@gmail.com> -* [Trott](https://github.com/Trott) - -**Rich Trott** <rtrott@gmail.com> (he/him) -* [tunniclm](https://github.com/tunniclm) - -**Mike Tunnicliffe** <m.j.tunnicliffe@gmail.com> -* [vkurchatkin](https://github.com/vkurchatkin) - -**Vladimir Kurchatkin** <vladimir.kurchatkin@gmail.com> -* [vsemozhetbyt](https://github.com/vsemozhetbyt) - -**Vse Mozhet Byt** <vsemozhetbyt@gmail.com> (he/him) -* [watilde](https://github.com/watilde) - -**Daijiro Wachi** <daijiro.wachi@gmail.com> (he/him) -* [whitlockjc](https://github.com/whitlockjc) - -**Jeremy Whitlock** <jwhitlock@apache.org> -* [XadillaX](https://github.com/XadillaX) - -**Khaidi Chu** <i@2333.moe> (he/him) -* [yorkie](https://github.com/yorkie) - -**Yorkie Liu** <yorkiefixer@gmail.com> -* [yosuke-furukawa](https://github.com/yosuke-furukawa) - -**Yosuke Furukawa** <yosuke.furukawa@gmail.com> - -### Collaborator Emeriti - -* [isaacs](https://github.com/isaacs) - -**Isaac Z. Schlueter** <i@izs.me> -* [lxe](https://github.com/lxe) - -**Aleksey Smolenchuk** <lxe@lxe.co> -* [monsanto](https://github.com/monsanto) - -**Christopher Monsanto** <chris@monsan.to> -* [Olegas](https://github.com/Olegas) - -**Oleg Elifantiev** <oleg@elifantiev.ru> -* [petkaantonov](https://github.com/petkaantonov) - -**Petka Antonov** <petka_antonov@hotmail.com> -* [piscisaureus](https://github.com/piscisaureus) - -**Bert Belder** <bertbelder@gmail.com> -* [rlidwka](https://github.com/rlidwka) - -**Alex Kocharin** <alex@kocharin.ru> -* [tellnes](https://github.com/tellnes) - -**Christian Tellnes** <christian@tellnes.no> - -Collaborators follow the [COLLABORATOR_GUIDE.md](./COLLABORATOR_GUIDE.md) in -maintaining the Node.js project. - -### Release Team - -Node.js releases are signed with one of the following GPG keys: - -* **Colin Ihrig** <cjihrig@gmail.com> -`94AE36675C464D64BAFA68DD7434390BDBE9B9C5` -* **Evan Lucas** <evanlucas@me.com> -`B9AE9905FFD7803F25714661B63B535A4C206CA9` -* **Gibson Fahnestock** <gibfahn@gmail.com> -`77984A986EBC2AA786BC0F66B01FBB92821C587A` -* **Italo A. Casas** <me@italoacasas.com> -`56730D5401028683275BD23C23EFEFE93C4CFFFE` -* **James M Snell** <jasnell@keybase.io> -`71DCFD284A79C3B38668286BC97EC7A07EDE3FC1` -* **Jeremiah Senkpiel** <fishrock@keybase.io> -`FD3A5288F042B6850C66B31F09FE44734EB7990E` -* **Myles Borins** <myles.borins@gmail.com> -`C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8` -* **Rod Vagg** <rod@vagg.org> -`DD8F2338BAE7501E3DD5AC78C273792F7D83545D` - -The full set of trusted release keys can be imported by running: - -```shell -gpg --keyserver pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 -gpg --keyserver pool.sks-keyservers.net --recv-keys FD3A5288F042B6850C66B31F09FE44734EB7990E -gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 -gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D -gpg --keyserver pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 -gpg --keyserver pool.sks-keyservers.net --recv-keys B9AE9905FFD7803F25714661B63B535A4C206CA9 -gpg --keyserver pool.sks-keyservers.net --recv-keys 56730D5401028683275BD23C23EFEFE93C4CFFFE -gpg --keyserver pool.sks-keyservers.net --recv-keys 77984A986EBC2AA786BC0F66B01FBB92821C587A -``` - -See the section above on [Verifying Binaries](#verifying-binaries) for details -on what to do with these keys to verify that a downloaded file is official. - -Previous releases may also have been signed with one of the following GPG keys: - -* **Chris Dickinson** <christopher.s.dickinson@gmail.com> -`9554F04D7259F04124DE6B476D5A82AC7E37093B` -* **Isaac Z. Schlueter** <i@izs.me> -`93C7E9E91B49E432C2F75674B0A78B0A6C481CF6` -* **Julien Gilli** <jgilli@fastmail.fm> -`114F43EE0176B71C7BC219DD50A3051F888C628D` -* **Timothy J Fontaine** <tjfontaine@gmail.com> -`7937DFD2AB06298B2293C3187D33FF9D0246406D` - -## Contributing to Node.js - -* [Contributing to the project][] -* [Working Groups][] - -[npm]: https://www.npmjs.com -[Code of Conduct]: https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md -[Contributing to the project]: CONTRIBUTING.md -[Node.js Help]: https://github.com/nodejs/help -[Node.js Website]: https://nodejs.org/en/ -[Questions tagged 'node.js' on StackOverflow]: https://stackoverflow.com/questions/tagged/node.js -[Working Groups]: https://github.com/nodejs/TSC/blob/master/WORKING_GROUPS.md -[#node.js channel on chat.freenode.net]: https://webchat.freenode.net?channels=node.js&uio=d4 +This project is bound by a [Code of Conduct](https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md). From 6f21690812c355b289cd3f87a61781faefd7383c Mon Sep 17 00:00:00 2001 From: "Node.js Jenkins CI" Date: Tue, 19 Dec 2017 06:55:47 +0000 Subject: [PATCH 2/9] deps: update V8 to 6.5.75 --- deps/v8/.gitignore | 4 + deps/v8/.vpython | 32 + deps/v8/.ycm_extra_conf.py | 2 +- deps/v8/AUTHORS | 10 +- deps/v8/BUILD.gn | 345 +- deps/v8/ChangeLog | 2375 ++++++++ deps/v8/DEPS | 99 +- deps/v8/OWNERS | 3 +- deps/v8/PRESUBMIT.py | 2 + .../trace_event/common/trace_event_common.h | 2 + deps/v8/gni/isolate.gni | 7 + deps/v8/gni/v8.gni | 10 + deps/v8/gypfiles/all.gyp | 2 +- deps/v8/gypfiles/features.gypi | 4 +- deps/v8/gypfiles/isolate.gypi | 1 + deps/v8/gypfiles/standalone.gypi | 6 + deps/v8/include/libplatform/libplatform.h | 29 +- deps/v8/include/v8-inspector.h | 23 + deps/v8/include/v8-profiler.h | 10 +- deps/v8/include/v8-util.h | 7 +- deps/v8/include/v8-version-string.h | 7 +- deps/v8/include/v8-version.h | 6 +- deps/v8/include/v8.h | 340 +- deps/v8/infra/config/cq.cfg | 127 +- deps/v8/infra/mb/mb_config.pyl | 155 +- deps/v8/infra/testing/OWNERS | 4 + deps/v8/infra/testing/README.md | 70 + deps/v8/infra/testing/client.v8.pyl | 20 + deps/v8/infra/testing/tryserver.v8.pyl | 14 + deps/v8/samples/hello-world.cc | 5 +- deps/v8/samples/process.cc | 6 +- deps/v8/samples/shell.cc | 9 +- deps/v8/snapshot_toolchain.gni | 12 +- deps/v8/src/OWNERS | 3 + deps/v8/src/accessors.cc | 375 +- deps/v8/src/accessors.h | 109 +- deps/v8/src/address-map.cc | 2 +- deps/v8/src/allocation.cc | 259 +- deps/v8/src/allocation.h | 88 +- deps/v8/src/api-arguments-inl.h | 292 +- deps/v8/src/api-arguments.cc | 32 +- deps/v8/src/api-arguments.h | 91 +- deps/v8/src/api-natives.cc | 37 +- deps/v8/src/api.cc | 1027 ++-- deps/v8/src/api.h | 68 +- deps/v8/src/arguments.h | 2 +- deps/v8/src/arm/assembler-arm-inl.h | 17 +- deps/v8/src/arm/assembler-arm.cc | 230 +- deps/v8/src/arm/assembler-arm.h | 18 +- deps/v8/src/arm/code-stubs-arm.cc | 744 +-- deps/v8/src/arm/code-stubs-arm.h | 220 +- deps/v8/src/arm/codegen-arm.cc | 138 +- deps/v8/src/arm/codegen-arm.h | 33 - deps/v8/src/arm/constants-arm.cc | 19 +- deps/v8/src/arm/constants-arm.h | 5 +- deps/v8/src/arm/deoptimizer-arm.cc | 15 +- deps/v8/src/arm/disasm-arm.cc | 48 +- deps/v8/src/arm/frame-constants-arm.cc | 5 + deps/v8/src/arm/interface-descriptors-arm.cc | 22 +- deps/v8/src/arm/macro-assembler-arm.cc | 308 +- deps/v8/src/arm/macro-assembler-arm.h | 81 - deps/v8/src/arm/simulator-arm.cc | 466 +- deps/v8/src/arm/simulator-arm.h | 107 +- deps/v8/src/arm64/assembler-arm64-inl.h | 23 +- deps/v8/src/arm64/assembler-arm64.cc | 124 +- deps/v8/src/arm64/assembler-arm64.h | 63 +- deps/v8/src/arm64/code-stubs-arm64.cc | 793 +-- deps/v8/src/arm64/code-stubs-arm64.h | 232 +- deps/v8/src/arm64/codegen-arm64.cc | 96 - deps/v8/src/arm64/codegen-arm64.h | 32 - deps/v8/src/arm64/cpu-arm64.cc | 6 +- deps/v8/src/arm64/decoder-arm64-inl.h | 18 +- deps/v8/src/arm64/deoptimizer-arm64.cc | 252 +- deps/v8/src/arm64/disasm-arm64.cc | 113 +- deps/v8/src/arm64/frame-constants-arm64.cc | 8 + deps/v8/src/arm64/frame-constants-arm64.h | 25 +- .../src/arm64/instructions-arm64-constants.cc | 26 +- deps/v8/src/arm64/instructions-arm64.cc | 6 +- deps/v8/src/arm64/instructions-arm64.h | 6 +- deps/v8/src/arm64/instrument-arm64.cc | 15 +- deps/v8/src/arm64/instrument-arm64.h | 5 +- .../src/arm64/interface-descriptors-arm64.cc | 22 +- deps/v8/src/arm64/macro-assembler-arm64-inl.h | 52 +- deps/v8/src/arm64/macro-assembler-arm64.cc | 601 +- deps/v8/src/arm64/macro-assembler-arm64.h | 183 +- deps/v8/src/arm64/simulator-arm64.cc | 198 +- deps/v8/src/arm64/simulator-arm64.h | 95 +- deps/v8/src/arm64/simulator-logic-arm64.cc | 6 +- deps/v8/src/arm64/utils-arm64.cc | 8 +- deps/v8/src/asmjs/asm-js.cc | 125 +- deps/v8/src/asmjs/asm-js.h | 3 +- deps/v8/src/asmjs/asm-parser.cc | 33 +- deps/v8/src/asmjs/asm-scanner.cc | 8 +- deps/v8/src/asmjs/asm-types.cc | 6 +- deps/v8/src/asmjs/asm-types.h | 4 +- deps/v8/src/assembler.cc | 150 +- deps/v8/src/assembler.h | 96 +- deps/v8/src/assert-scope.cc | 6 +- deps/v8/src/ast/ast-expression-rewriter.cc | 410 -- deps/v8/src/ast/ast-expression-rewriter.h | 53 - deps/v8/src/ast/ast-numbering.cc | 178 +- deps/v8/src/ast/ast-numbering.h | 9 +- deps/v8/src/ast/ast-source-ranges.h | 42 +- deps/v8/src/ast/ast-traversal-visitor.h | 36 +- deps/v8/src/ast/ast-value-factory.cc | 167 +- deps/v8/src/ast/ast-value-factory.h | 256 +- deps/v8/src/ast/ast.cc | 491 +- deps/v8/src/ast/ast.h | 937 ++-- deps/v8/src/ast/context-slot-cache.h | 4 +- deps/v8/src/ast/modules.h | 17 +- deps/v8/src/ast/prettyprinter.cc | 311 +- deps/v8/src/ast/prettyprinter.h | 17 +- deps/v8/src/ast/scopes.cc | 96 +- deps/v8/src/ast/scopes.h | 37 +- deps/v8/src/ast/variables.h | 4 +- deps/v8/src/bailout-reason.cc | 2 +- deps/v8/src/bailout-reason.h | 4 - deps/v8/src/base.isolate | 4 +- deps/v8/src/base/bits.cc | 4 +- deps/v8/src/base/bits.h | 187 +- deps/v8/src/base/cpu.cc | 104 +- deps/v8/src/base/debug/stack_trace.cc | 2 +- deps/v8/src/base/debug/stack_trace_android.cc | 2 +- deps/v8/src/base/debug/stack_trace_posix.cc | 36 +- deps/v8/src/base/debug/stack_trace_win.cc | 16 +- deps/v8/src/base/division-by-constant.cc | 2 +- deps/v8/src/base/functional.cc | 8 +- deps/v8/src/base/ieee754.cc | 282 +- deps/v8/src/base/lazy-instance.h | 12 +- deps/v8/src/base/logging.h | 21 +- deps/v8/src/base/macros.h | 18 - deps/v8/src/base/once.cc | 4 +- deps/v8/src/base/once.h | 10 +- deps/v8/src/base/platform/OWNERS | 6 + .../src/base/platform/condition-variable.cc | 2 +- deps/v8/src/base/platform/elapsed-timer.h | 4 +- deps/v8/src/base/platform/mutex.cc | 2 +- deps/v8/src/base/platform/platform-aix.cc | 106 +- deps/v8/src/base/platform/platform-cygwin.cc | 170 +- deps/v8/src/base/platform/platform-freebsd.cc | 104 +- deps/v8/src/base/platform/platform-fuchsia.cc | 104 +- deps/v8/src/base/platform/platform-linux.cc | 116 +- deps/v8/src/base/platform/platform-macos.cc | 113 +- deps/v8/src/base/platform/platform-openbsd.cc | 111 +- .../src/base/platform/platform-posix-time.cc | 2 +- deps/v8/src/base/platform/platform-posix.cc | 350 +- deps/v8/src/base/platform/platform-posix.h | 2 - deps/v8/src/base/platform/platform-qnx.cc | 105 +- deps/v8/src/base/platform/platform-solaris.cc | 104 +- deps/v8/src/base/platform/platform-win32.cc | 356 +- deps/v8/src/base/platform/platform.h | 101 +- deps/v8/src/base/platform/semaphore.cc | 8 +- deps/v8/src/base/platform/time.cc | 21 +- deps/v8/src/base/platform/time.h | 2 +- deps/v8/src/base/sys-info.cc | 8 +- deps/v8/src/base/template-utils.h | 43 +- .../src/base/utils/random-number-generator.cc | 91 +- .../src/base/utils/random-number-generator.h | 24 +- deps/v8/src/bignum-dtoa.cc | 20 +- deps/v8/src/bignum.cc | 32 +- deps/v8/src/bootstrapper.cc | 776 +-- deps/v8/src/bootstrapper.h | 2 +- deps/v8/src/boxed-float.h | 60 +- deps/v8/src/builtins/arm/builtins-arm.cc | 186 +- deps/v8/src/builtins/arm64/builtins-arm64.cc | 1009 ++-- deps/v8/src/builtins/builtins-api.cc | 3 +- .../v8/src/builtins/builtins-arguments-gen.cc | 4 +- deps/v8/src/builtins/builtins-array-gen.cc | 1003 +++- deps/v8/src/builtins/builtins-array.cc | 79 +- .../builtins/builtins-async-function-gen.cc | 7 +- deps/v8/src/builtins/builtins-async-gen.cc | 57 +- .../builtins/builtins-async-generator-gen.cc | 13 +- deps/v8/src/builtins/builtins-bigint.cc | 63 +- deps/v8/src/builtins/builtins-call-gen.cc | 13 +- .../src/builtins/builtins-collections-gen.cc | 1249 +++-- deps/v8/src/builtins/builtins-console.cc | 66 +- .../src/builtins/builtins-constructor-gen.cc | 200 +- .../src/builtins/builtins-constructor-gen.h | 5 - .../src/builtins/builtins-conversion-gen.cc | 37 +- deps/v8/src/builtins/builtins-date-gen.cc | 4 +- deps/v8/src/builtins/builtins-date.cc | 2 +- deps/v8/src/builtins/builtins-definitions.h | 93 +- deps/v8/src/builtins/builtins-error.cc | 13 +- deps/v8/src/builtins/builtins-function-gen.cc | 11 +- deps/v8/src/builtins/builtins-function.cc | 2 +- .../v8/src/builtins/builtins-generator-gen.cc | 9 +- deps/v8/src/builtins/builtins-handler-gen.cc | 87 +- deps/v8/src/builtins/builtins-ic-gen.cc | 5 +- deps/v8/src/builtins/builtins-internal-gen.cc | 436 +- deps/v8/src/builtins/builtins-intl-gen.cc | 11 +- deps/v8/src/builtins/builtins-intl.cc | 2 +- deps/v8/src/builtins/builtins-iterator-gen.cc | 25 +- deps/v8/src/builtins/builtins-math-gen.cc | 44 +- deps/v8/src/builtins/builtins-math-gen.h | 36 + deps/v8/src/builtins/builtins-number-gen.cc | 316 +- deps/v8/src/builtins/builtins-object-gen.cc | 311 +- deps/v8/src/builtins/builtins-object.cc | 42 +- deps/v8/src/builtins/builtins-promise-gen.cc | 190 +- deps/v8/src/builtins/builtins-promise-gen.h | 14 +- deps/v8/src/builtins/builtins-proxy-gen.cc | 11 +- deps/v8/src/builtins/builtins-proxy-gen.h | 6 - deps/v8/src/builtins/builtins-reflect-gen.cc | 25 + deps/v8/src/builtins/builtins-reflect.cc | 37 +- deps/v8/src/builtins/builtins-regexp-gen.cc | 391 +- deps/v8/src/builtins/builtins-regexp-gen.h | 3 - .../builtins-sharedarraybuffer-gen.cc | 5 +- deps/v8/src/builtins/builtins-string-gen.cc | 802 ++- deps/v8/src/builtins/builtins-string-gen.h | 19 +- deps/v8/src/builtins/builtins-string.cc | 65 +- .../src/builtins/builtins-typedarray-gen.cc | 213 +- deps/v8/src/builtins/builtins-typedarray.cc | 6 - deps/v8/src/builtins/builtins-utils.h | 9 +- deps/v8/src/builtins/builtins-wasm-gen.cc | 2 +- deps/v8/src/builtins/builtins.cc | 54 +- deps/v8/src/builtins/builtins.h | 2 + deps/v8/src/builtins/ia32/builtins-ia32.cc | 223 +- deps/v8/src/builtins/mips/OWNERS | 5 +- deps/v8/src/builtins/mips/builtins-mips.cc | 153 +- deps/v8/src/builtins/mips64/OWNERS | 5 +- .../v8/src/builtins/mips64/builtins-mips64.cc | 161 +- deps/v8/src/builtins/ppc/OWNERS | 3 +- deps/v8/src/builtins/ppc/builtins-ppc.cc | 162 +- deps/v8/src/builtins/s390/OWNERS | 3 +- deps/v8/src/builtins/s390/builtins-s390.cc | 166 +- .../src/builtins/setup-builtins-internal.cc | 106 +- deps/v8/src/builtins/x64/builtins-x64.cc | 237 +- deps/v8/src/cached-powers.cc | 176 +- deps/v8/src/code-events.h | 6 - deps/v8/src/code-factory.cc | 99 +- deps/v8/src/code-factory.h | 15 +- deps/v8/src/code-stub-assembler.cc | 3620 ++++++------ deps/v8/src/code-stub-assembler.h | 454 +- deps/v8/src/code-stubs.cc | 80 +- deps/v8/src/code-stubs.h | 172 +- deps/v8/src/codegen.cc | 205 +- deps/v8/src/codegen.h | 75 - deps/v8/src/collector.h | 10 +- deps/v8/src/compilation-cache.cc | 8 +- deps/v8/src/compilation-cache.h | 2 +- deps/v8/src/compilation-dependencies.cc | 13 +- deps/v8/src/compilation-dependencies.h | 3 +- deps/v8/src/compilation-info.cc | 43 +- deps/v8/src/compilation-info.h | 68 +- .../compiler-dispatcher-job.cc | 2 +- .../compiler-dispatcher-job.h | 65 +- .../compiler-dispatcher-tracer.cc | 115 +- .../compiler-dispatcher-tracer.h | 42 +- .../compiler-dispatcher.cc | 37 +- .../optimizing-compile-dispatcher.cc | 17 +- .../unoptimized-compile-job.cc | 278 +- .../unoptimized-compile-job.h | 71 +- deps/v8/src/compiler.cc | 811 ++- deps/v8/src/compiler.h | 64 +- deps/v8/src/compiler/OWNERS | 5 +- deps/v8/src/compiler/access-builder.cc | 22 +- deps/v8/src/compiler/access-builder.h | 6 + deps/v8/src/compiler/access-info.cc | 18 +- deps/v8/src/compiler/all-nodes.h | 4 +- deps/v8/src/compiler/allocation-builder.h | 98 + .../v8/src/compiler/arm/code-generator-arm.cc | 263 +- .../compiler/arm/instruction-selector-arm.cc | 139 +- .../compiler/arm64/code-generator-arm64.cc | 234 +- .../arm64/instruction-scheduler-arm64.cc | 8 - .../arm64/instruction-selector-arm64.cc | 205 +- .../src/compiler/basic-block-instrumentor.cc | 5 +- .../src/compiler/basic-block-instrumentor.h | 3 +- deps/v8/src/compiler/branch-elimination.cc | 9 +- .../v8/src/compiler/bytecode-graph-builder.cc | 211 +- deps/v8/src/compiler/bytecode-graph-builder.h | 11 +- deps/v8/src/compiler/c-linkage.cc | 2 +- deps/v8/src/compiler/code-assembler.cc | 107 +- deps/v8/src/compiler/code-assembler.h | 506 +- deps/v8/src/compiler/code-generator.cc | 141 +- deps/v8/src/compiler/code-generator.h | 26 +- .../src/compiler/common-operator-reducer.cc | 12 +- deps/v8/src/compiler/common-operator.cc | 92 +- deps/v8/src/compiler/common-operator.h | 23 +- deps/v8/src/compiler/dead-code-elimination.cc | 172 +- deps/v8/src/compiler/dead-code-elimination.h | 26 +- .../src/compiler/effect-control-linearizer.cc | 919 ++- .../src/compiler/effect-control-linearizer.h | 19 +- deps/v8/src/compiler/escape-analysis.cc | 31 +- deps/v8/src/compiler/frame-states.cc | 6 - deps/v8/src/compiler/frame-states.h | 2 - deps/v8/src/compiler/frame.cc | 4 +- deps/v8/src/compiler/frame.h | 49 +- deps/v8/src/compiler/gap-resolver.cc | 14 +- deps/v8/src/compiler/graph-assembler.cc | 29 +- deps/v8/src/compiler/graph-assembler.h | 14 +- .../src/compiler/ia32/code-generator-ia32.cc | 1027 +++- .../compiler/ia32/instruction-codes-ia32.h | 103 +- .../ia32/instruction-scheduler-ia32.cc | 106 +- .../ia32/instruction-selector-ia32.cc | 259 +- deps/v8/src/compiler/instruction-codes.h | 8 +- deps/v8/src/compiler/instruction-scheduler.cc | 8 +- .../src/compiler/instruction-selector-impl.h | 12 +- deps/v8/src/compiler/instruction-selector.cc | 329 +- deps/v8/src/compiler/instruction-selector.h | 34 +- deps/v8/src/compiler/instruction.cc | 4 +- deps/v8/src/compiler/instruction.h | 15 +- deps/v8/src/compiler/int64-lowering.cc | 115 +- deps/v8/src/compiler/js-builtin-reducer.cc | 534 +- deps/v8/src/compiler/js-builtin-reducer.h | 5 +- deps/v8/src/compiler/js-call-reducer.cc | 1271 ++++- deps/v8/src/compiler/js-call-reducer.h | 39 +- .../src/compiler/js-context-specialization.cc | 7 +- deps/v8/src/compiler/js-create-lowering.cc | 138 +- deps/v8/src/compiler/js-create-lowering.h | 3 +- deps/v8/src/compiler/js-generic-lowering.cc | 75 +- deps/v8/src/compiler/js-generic-lowering.h | 1 - deps/v8/src/compiler/js-graph.cc | 3 + deps/v8/src/compiler/js-graph.h | 7 + deps/v8/src/compiler/js-inlining-heuristic.cc | 24 +- deps/v8/src/compiler/js-inlining-heuristic.h | 2 + deps/v8/src/compiler/js-inlining.cc | 62 +- deps/v8/src/compiler/js-intrinsic-lowering.cc | 32 +- deps/v8/src/compiler/js-intrinsic-lowering.h | 1 - .../js-native-context-specialization.cc | 583 +- .../js-native-context-specialization.h | 38 +- deps/v8/src/compiler/js-operator.cc | 139 +- deps/v8/src/compiler/js-operator.h | 94 +- deps/v8/src/compiler/js-type-hint-lowering.cc | 82 +- deps/v8/src/compiler/js-type-hint-lowering.h | 5 + deps/v8/src/compiler/js-typed-lowering.cc | 437 +- deps/v8/src/compiler/js-typed-lowering.h | 15 +- deps/v8/src/compiler/linkage.cc | 29 +- deps/v8/src/compiler/linkage.h | 31 +- deps/v8/src/compiler/load-elimination.cc | 102 +- deps/v8/src/compiler/load-elimination.h | 9 +- deps/v8/src/compiler/loop-analysis.cc | 11 +- deps/v8/src/compiler/loop-peeling.cc | 95 +- deps/v8/src/compiler/loop-peeling.h | 31 +- .../src/compiler/loop-variable-optimizer.cc | 9 +- .../v8/src/compiler/machine-graph-verifier.cc | 4 - .../src/compiler/machine-operator-reducer.cc | 35 +- deps/v8/src/compiler/machine-operator.cc | 31 - deps/v8/src/compiler/machine-operator.h | 12 +- deps/v8/src/compiler/memory-optimizer.cc | 24 +- deps/v8/src/compiler/memory-optimizer.h | 2 +- deps/v8/src/compiler/mips/OWNERS | 5 +- .../src/compiler/mips/code-generator-mips.cc | 130 +- .../mips/instruction-selector-mips.cc | 89 +- deps/v8/src/compiler/mips64/OWNERS | 5 +- .../compiler/mips64/code-generator-mips64.cc | 151 +- .../mips64/instruction-selector-mips64.cc | 117 +- deps/v8/src/compiler/node-properties.cc | 108 +- deps/v8/src/compiler/node-properties.h | 12 + deps/v8/src/compiler/opcodes.h | 76 +- deps/v8/src/compiler/operation-typer.cc | 220 +- deps/v8/src/compiler/operation-typer.h | 12 +- deps/v8/src/compiler/operator-properties.cc | 9 +- deps/v8/src/compiler/operator.cc | 4 +- deps/v8/src/compiler/operator.h | 4 +- deps/v8/src/compiler/pipeline-statistics.cc | 4 +- deps/v8/src/compiler/pipeline-statistics.h | 3 +- deps/v8/src/compiler/pipeline.cc | 517 +- deps/v8/src/compiler/pipeline.h | 26 +- deps/v8/src/compiler/ppc/OWNERS | 3 +- .../v8/src/compiler/ppc/code-generator-ppc.cc | 286 +- .../compiler/ppc/instruction-selector-ppc.cc | 268 +- .../src/compiler/property-access-builder.cc | 22 +- .../v8/src/compiler/property-access-builder.h | 2 + deps/v8/src/compiler/raw-machine-assembler.cc | 30 +- deps/v8/src/compiler/raw-machine-assembler.h | 4 + .../v8/src/compiler/redundancy-elimination.cc | 6 + deps/v8/src/compiler/representation-change.cc | 27 +- deps/v8/src/compiler/s390/OWNERS | 3 +- .../src/compiler/s390/code-generator-s390.cc | 271 +- .../compiler/s390/instruction-codes-s390.h | 1 + .../s390/instruction-scheduler-s390.cc | 1 + .../s390/instruction-selector-s390.cc | 287 +- deps/v8/src/compiler/simd-scalar-lowering.cc | 8 +- deps/v8/src/compiler/simplified-lowering.cc | 297 +- deps/v8/src/compiler/simplified-lowering.h | 13 +- deps/v8/src/compiler/simplified-operator.cc | 467 +- deps/v8/src/compiler/simplified-operator.h | 144 +- deps/v8/src/compiler/state-values-utils.cc | 2 +- .../src/compiler/store-store-elimination.cc | 10 - deps/v8/src/compiler/type-cache.h | 1 + deps/v8/src/compiler/typed-optimization.cc | 170 +- deps/v8/src/compiler/typed-optimization.h | 6 + deps/v8/src/compiler/typer.cc | 266 +- deps/v8/src/compiler/types.cc | 61 +- deps/v8/src/compiler/types.h | 23 +- deps/v8/src/compiler/verifier.cc | 177 +- deps/v8/src/compiler/verifier.h | 4 +- deps/v8/src/compiler/wasm-compiler.cc | 925 ++- deps/v8/src/compiler/wasm-compiler.h | 170 +- deps/v8/src/compiler/wasm-linkage.cc | 112 +- .../v8/src/compiler/x64/code-generator-x64.cc | 328 +- .../src/compiler/x64/instruction-codes-x64.h | 17 + .../compiler/x64/instruction-scheduler-x64.cc | 23 +- .../compiler/x64/instruction-selector-x64.cc | 156 +- deps/v8/src/contexts-inl.h | 3 +- deps/v8/src/contexts.cc | 7 +- deps/v8/src/contexts.h | 12 +- deps/v8/src/conversions.cc | 203 +- deps/v8/src/conversions.h | 14 +- deps/v8/src/counters-inl.h | 12 +- deps/v8/src/counters.cc | 123 +- deps/v8/src/counters.h | 354 +- deps/v8/src/d8-console.cc | 64 +- deps/v8/src/d8-console.h | 6 + deps/v8/src/d8-posix.cc | 63 +- deps/v8/src/d8.cc | 745 ++- deps/v8/src/d8.h | 89 +- deps/v8/src/date.cc | 26 +- deps/v8/src/date.h | 4 +- deps/v8/src/dateparser-inl.h | 2 +- deps/v8/src/dateparser.cc | 2 +- deps/v8/src/debug/OWNERS | 2 +- deps/v8/src/debug/arm/debug-arm.cc | 2 +- deps/v8/src/debug/arm64/debug-arm64.cc | 3 +- deps/v8/src/debug/debug-coverage.cc | 76 +- deps/v8/src/debug/debug-evaluate.cc | 234 +- deps/v8/src/debug/debug-evaluate.h | 6 + deps/v8/src/debug/debug-frames.cc | 45 +- deps/v8/src/debug/debug-frames.h | 4 - deps/v8/src/debug/debug-interface.h | 22 +- deps/v8/src/debug/debug-scopes.cc | 4 +- .../src/debug/debug-stack-trace-iterator.cc | 35 +- .../v8/src/debug/debug-stack-trace-iterator.h | 2 +- deps/v8/src/debug/debug-type-profile.cc | 64 +- deps/v8/src/debug/debug.cc | 126 +- deps/v8/src/debug/debug.h | 6 +- deps/v8/src/debug/ia32/debug-ia32.cc | 2 +- deps/v8/src/debug/interface-types.h | 8 +- deps/v8/src/debug/liveedit.cc | 67 +- deps/v8/src/debug/liveedit.h | 5 +- deps/v8/src/debug/mips/OWNERS | 5 +- deps/v8/src/debug/mips/debug-mips.cc | 2 +- deps/v8/src/debug/mips64/OWNERS | 5 +- deps/v8/src/debug/mips64/debug-mips64.cc | 2 +- deps/v8/src/debug/mirrors.js | 39 + deps/v8/src/debug/ppc/OWNERS | 3 +- deps/v8/src/debug/ppc/debug-ppc.cc | 2 +- deps/v8/src/debug/s390/OWNERS | 3 +- deps/v8/src/debug/s390/debug-s390.cc | 2 +- deps/v8/src/debug/x64/debug-x64.cc | 2 +- deps/v8/src/deoptimize-reason.h | 6 + deps/v8/src/deoptimizer.cc | 1577 +++--- deps/v8/src/deoptimizer.h | 131 +- deps/v8/src/disassembler.cc | 39 +- deps/v8/src/disassembler.h | 2 +- deps/v8/src/diy-fp.h | 2 +- deps/v8/src/double.h | 8 +- deps/v8/src/eh-frame.cc | 38 +- deps/v8/src/elements.cc | 270 +- deps/v8/src/elements.h | 6 +- deps/v8/src/execution.cc | 76 +- deps/v8/src/execution.h | 12 +- .../externalize-string-extension.cc | 4 +- .../v8/src/extensions/statistics-extension.cc | 2 +- deps/v8/src/external-reference-table.cc | 30 +- deps/v8/src/factory-inl.h | 18 + deps/v8/src/factory.cc | 777 +-- deps/v8/src/factory.h | 176 +- deps/v8/src/fast-dtoa.cc | 17 +- deps/v8/src/feedback-vector-inl.h | 18 +- deps/v8/src/feedback-vector.cc | 251 +- deps/v8/src/feedback-vector.h | 116 +- deps/v8/src/field-index-inl.h | 46 +- deps/v8/src/field-index.h | 75 +- deps/v8/src/fixed-dtoa.cc | 6 +- deps/v8/src/flag-definitions.h | 217 +- deps/v8/src/flags.cc | 45 +- deps/v8/src/frame-constants.h | 19 +- deps/v8/src/frames-inl.h | 17 +- deps/v8/src/frames.cc | 531 +- deps/v8/src/frames.h | 68 +- deps/v8/src/futex-emulation.cc | 2 +- deps/v8/src/gdb-jit.cc | 129 +- deps/v8/src/global-handles.cc | 181 +- deps/v8/src/global-handles.h | 17 +- deps/v8/src/globals.h | 193 +- deps/v8/src/handles-inl.h | 4 +- deps/v8/src/handles.cc | 6 +- deps/v8/src/handles.h | 42 +- deps/v8/src/heap-symbols.h | 413 +- deps/v8/src/heap/array-buffer-collector.cc | 61 + deps/v8/src/heap/array-buffer-collector.h | 51 + deps/v8/src/heap/array-buffer-tracker-inl.h | 23 +- deps/v8/src/heap/array-buffer-tracker.cc | 44 +- deps/v8/src/heap/array-buffer-tracker.h | 13 +- deps/v8/src/heap/code-stats.cc | 6 +- deps/v8/src/heap/concurrent-marking.cc | 80 +- deps/v8/src/heap/gc-tracer.cc | 185 +- deps/v8/src/heap/gc-tracer.h | 69 +- deps/v8/src/heap/heap-inl.h | 86 +- deps/v8/src/heap/heap.cc | 897 ++- deps/v8/src/heap/heap.h | 392 +- deps/v8/src/heap/incremental-marking-job.cc | 2 +- deps/v8/src/heap/incremental-marking.cc | 345 +- deps/v8/src/heap/incremental-marking.h | 60 +- deps/v8/src/heap/local-allocator.h | 11 - deps/v8/src/heap/mark-compact-inl.h | 324 +- deps/v8/src/heap/mark-compact.cc | 794 +-- deps/v8/src/heap/mark-compact.h | 211 +- deps/v8/src/heap/memory-reducer.cc | 2 +- deps/v8/src/heap/object-stats.cc | 67 +- deps/v8/src/heap/object-stats.h | 52 +- deps/v8/src/heap/objects-visiting-inl.h | 230 +- deps/v8/src/heap/objects-visiting.cc | 45 +- deps/v8/src/heap/objects-visiting.h | 41 +- deps/v8/src/heap/remembered-set.h | 4 +- deps/v8/src/heap/scavenge-job.cc | 2 +- deps/v8/src/heap/scavenger-inl.h | 4 +- deps/v8/src/heap/scavenger.cc | 28 + deps/v8/src/heap/scavenger.h | 28 +- deps/v8/src/heap/setup-heap-internal.cc | 105 +- deps/v8/src/heap/slot-set.h | 2 +- deps/v8/src/heap/spaces-inl.h | 24 +- deps/v8/src/heap/spaces.cc | 593 +- deps/v8/src/heap/spaces.h | 225 +- deps/v8/src/heap/store-buffer.cc | 8 +- deps/v8/src/heap/store-buffer.h | 8 +- deps/v8/src/heap/stress-marking-observer.cc | 21 + deps/v8/src/heap/stress-marking-observer.h | 26 + deps/v8/src/heap/stress-scavenge-observer.cc | 87 + deps/v8/src/heap/stress-scavenge-observer.h | 33 + deps/v8/src/heap/sweeper.cc | 581 ++ deps/v8/src/heap/sweeper.h | 196 + deps/v8/src/ia32/assembler-ia32-inl.h | 24 +- deps/v8/src/ia32/assembler-ia32.cc | 133 +- deps/v8/src/ia32/assembler-ia32.h | 86 +- deps/v8/src/ia32/code-stubs-ia32.cc | 793 +-- deps/v8/src/ia32/code-stubs-ia32.h | 306 - deps/v8/src/ia32/codegen-ia32.cc | 146 +- deps/v8/src/ia32/codegen-ia32.h | 34 - deps/v8/src/ia32/deoptimizer-ia32.cc | 1 - deps/v8/src/ia32/disasm-ia32.cc | 181 +- deps/v8/src/ia32/frame-constants-ia32.cc | 5 + .../v8/src/ia32/interface-descriptors-ia32.cc | 38 +- deps/v8/src/ia32/macro-assembler-ia32.cc | 288 +- deps/v8/src/ia32/macro-assembler-ia32.h | 158 +- deps/v8/src/ia32/simulator-ia32.h | 46 +- deps/v8/src/ic/access-compiler-data.h | 50 - deps/v8/src/ic/access-compiler.cc | 57 - deps/v8/src/ic/access-compiler.h | 62 - deps/v8/src/ic/accessor-assembler.cc | 1217 ++-- deps/v8/src/ic/accessor-assembler.h | 61 +- deps/v8/src/ic/arm/access-compiler-arm.cc | 43 - deps/v8/src/ic/arm/handler-compiler-arm.cc | 434 -- deps/v8/src/ic/arm64/access-compiler-arm64.cc | 50 - .../v8/src/ic/arm64/handler-compiler-arm64.cc | 431 -- deps/v8/src/ic/binary-op-assembler.cc | 94 +- deps/v8/src/ic/binary-op-assembler.h | 7 +- deps/v8/src/ic/call-optimization.cc | 15 + deps/v8/src/ic/call-optimization.h | 5 +- deps/v8/src/ic/handler-compiler.cc | 154 - deps/v8/src/ic/handler-compiler.h | 191 - deps/v8/src/ic/handler-configuration-inl.h | 155 +- deps/v8/src/ic/handler-configuration.cc | 424 +- deps/v8/src/ic/handler-configuration.h | 194 +- deps/v8/src/ic/ia32/access-compiler-ia32.cc | 40 - deps/v8/src/ic/ia32/handler-compiler-ia32.cc | 449 -- deps/v8/src/ic/ic-inl.h | 9 +- deps/v8/src/ic/ic.cc | 711 ++- deps/v8/src/ic/ic.h | 61 +- deps/v8/src/ic/keyed-store-generic.cc | 98 +- deps/v8/src/ic/mips/OWNERS | 3 - deps/v8/src/ic/mips/access-compiler-mips.cc | 41 - deps/v8/src/ic/mips/handler-compiler-mips.cc | 413 -- deps/v8/src/ic/mips64/OWNERS | 3 - .../src/ic/mips64/access-compiler-mips64.cc | 41 - .../src/ic/mips64/handler-compiler-mips64.cc | 413 -- deps/v8/src/ic/ppc/OWNERS | 6 - deps/v8/src/ic/ppc/access-compiler-ppc.cc | 41 - deps/v8/src/ic/ppc/handler-compiler-ppc.cc | 429 -- deps/v8/src/ic/s390/OWNERS | 6 - deps/v8/src/ic/s390/access-compiler-s390.cc | 42 - deps/v8/src/ic/s390/handler-compiler-s390.cc | 412 -- deps/v8/src/ic/stub-cache.cc | 2 +- deps/v8/src/ic/stub-cache.h | 3 +- deps/v8/src/ic/x64/access-compiler-x64.cc | 41 - deps/v8/src/ic/x64/handler-compiler-x64.cc | 421 -- deps/v8/src/icu_util.cc | 6 +- deps/v8/src/inspector/BUILD.gn | 11 - deps/v8/src/inspector/OWNERS | 3 + .../src/inspector/injected-script-source.js | 30 +- deps/v8/src/inspector/injected-script.cc | 52 +- deps/v8/src/inspector/injected-script.h | 9 - .../src/inspector/injected_script_externs.js | 7 + .../inspector/inspector_protocol_config.json | 2 +- deps/v8/src/inspector/js_protocol-1.3.json | 1205 ++++ deps/v8/src/inspector/js_protocol.json | 4111 ++++++++++---- deps/v8/src/inspector/js_protocol.pdl | 1370 +++++ deps/v8/src/inspector/string-16.cc | 56 +- deps/v8/src/inspector/string-16.h | 1 + deps/v8/src/inspector/string-util.cc | 28 + deps/v8/src/inspector/string-util.h | 4 + deps/v8/src/inspector/v8-console-message.cc | 15 +- deps/v8/src/inspector/v8-console-message.h | 1 + deps/v8/src/inspector/v8-console.cc | 40 +- deps/v8/src/inspector/v8-console.h | 4 +- .../src/inspector/v8-debugger-agent-impl.cc | 140 +- .../v8/src/inspector/v8-debugger-agent-impl.h | 17 +- deps/v8/src/inspector/v8-debugger.cc | 231 +- deps/v8/src/inspector/v8-debugger.h | 48 +- .../inspector/v8-heap-profiler-agent-impl.cc | 21 +- .../inspector/v8-heap-profiler-agent-impl.h | 2 + .../src/inspector/v8-injected-script-host.cc | 37 + .../src/inspector/v8-injected-script-host.h | 2 + deps/v8/src/inspector/v8-inspector-impl.cc | 13 + deps/v8/src/inspector/v8-inspector-impl.h | 4 + .../inspector/v8-inspector-session-impl.cc | 10 +- .../src/inspector/v8-inspector-session-impl.h | 3 + .../v8/src/inspector/v8-runtime-agent-impl.cc | 21 + deps/v8/src/inspector/v8-runtime-agent-impl.h | 3 + deps/v8/src/inspector/v8-stack-trace-impl.cc | 128 +- deps/v8/src/inspector/v8-stack-trace-impl.h | 24 +- deps/v8/src/inspector/v8-value-utils.cc | 3 +- deps/v8/src/interface-descriptors.cc | 66 +- deps/v8/src/interface-descriptors.h | 94 +- .../src/interpreter/block-coverage-builder.h | 13 + .../interpreter/bytecode-array-accessor.cc | 8 +- .../src/interpreter/bytecode-array-accessor.h | 3 + .../src/interpreter/bytecode-array-builder.cc | 178 +- .../src/interpreter/bytecode-array-builder.h | 40 +- .../interpreter/bytecode-array-iterator.cc | 1 + .../bytecode-array-random-iterator.cc | 1 + .../src/interpreter/bytecode-array-writer.cc | 10 +- .../src/interpreter/bytecode-array-writer.h | 7 +- deps/v8/src/interpreter/bytecode-flags.cc | 6 +- deps/v8/src/interpreter/bytecode-flags.h | 4 +- deps/v8/src/interpreter/bytecode-generator.cc | 1230 ++-- deps/v8/src/interpreter/bytecode-generator.h | 84 +- deps/v8/src/interpreter/bytecode-operands.h | 10 +- .../interpreter/bytecode-register-allocator.h | 5 + .../bytecode-register-optimizer.cc | 6 +- deps/v8/src/interpreter/bytecode-register.h | 26 +- deps/v8/src/interpreter/bytecodes.h | 61 +- .../src/interpreter/constant-array-builder.cc | 94 +- .../src/interpreter/constant-array-builder.h | 29 +- .../src/interpreter/control-flow-builders.cc | 27 +- .../src/interpreter/control-flow-builders.h | 22 +- .../src/interpreter/handler-table-builder.cc | 2 +- .../src/interpreter/interpreter-assembler.cc | 450 +- .../src/interpreter/interpreter-assembler.h | 31 +- .../src/interpreter/interpreter-generator.cc | 1170 ++-- .../src/interpreter/interpreter-generator.h | 3 + .../interpreter-intrinsics-generator.cc | 43 +- .../src/interpreter/interpreter-intrinsics.h | 2 +- deps/v8/src/interpreter/interpreter.cc | 146 +- deps/v8/src/interpreter/interpreter.h | 24 +- .../interpreter/setup-interpreter-internal.cc | 38 +- deps/v8/src/interpreter/setup-interpreter.h | 4 - deps/v8/src/isolate-inl.h | 2 +- deps/v8/src/isolate.cc | 883 +-- deps/v8/src/isolate.h | 169 +- deps/v8/src/js/array.js | 97 +- deps/v8/src/js/intl.js | 75 +- deps/v8/src/js/macros.py | 37 +- deps/v8/src/js/string.js | 151 - deps/v8/src/js/typedarray.js | 57 +- deps/v8/src/js/v8natives.js | 2 +- deps/v8/src/js/weak-collection.js | 127 - deps/v8/src/json-parser.cc | 81 +- deps/v8/src/json-parser.h | 9 +- deps/v8/src/json-stringifier.cc | 110 +- deps/v8/src/keys.cc | 31 +- deps/v8/src/label.h | 43 +- deps/v8/src/layout-descriptor-inl.h | 6 +- deps/v8/src/layout-descriptor.cc | 11 +- deps/v8/src/layout-descriptor.h | 2 +- .../default-background-task-runner.cc | 59 + .../default-background-task-runner.h | 45 + .../default-foreground-task-runner.cc | 115 + .../default-foreground-task-runner.h | 84 + deps/v8/src/libplatform/default-platform.cc | 250 +- deps/v8/src/libplatform/default-platform.h | 47 +- deps/v8/src/libplatform/task-queue.cc | 13 +- deps/v8/src/libplatform/task-queue.h | 8 +- .../src/libplatform/tracing/trace-buffer.cc | 4 +- .../src/libplatform/tracing/trace-config.cc | 2 +- .../src/libplatform/tracing/trace-object.cc | 4 +- .../src/libplatform/tracing/trace-writer.cc | 2 +- .../libplatform/tracing/tracing-controller.cc | 2 +- deps/v8/src/libplatform/worker-thread.cc | 3 +- deps/v8/src/libsampler/sampler.cc | 4 +- deps/v8/src/locked-queue-inl.h | 4 +- deps/v8/src/log-utils.cc | 322 +- deps/v8/src/log-utils.h | 88 +- deps/v8/src/log.cc | 814 ++- deps/v8/src/log.h | 81 +- deps/v8/src/lookup-cache-inl.h | 2 +- deps/v8/src/lookup-cache.cc | 2 +- deps/v8/src/lookup-cache.h | 4 +- deps/v8/src/lookup.cc | 43 +- deps/v8/src/machine-type.h | 95 +- deps/v8/src/map-updater.cc | 12 +- deps/v8/src/messages.cc | 50 +- deps/v8/src/messages.h | 25 +- deps/v8/src/mips/OWNERS | 5 +- deps/v8/src/mips/assembler-mips-inl.h | 20 +- deps/v8/src/mips/assembler-mips.cc | 71 +- deps/v8/src/mips/assembler-mips.h | 71 +- deps/v8/src/mips/code-stubs-mips.cc | 747 +-- deps/v8/src/mips/code-stubs-mips.h | 252 +- deps/v8/src/mips/codegen-mips.cc | 142 +- deps/v8/src/mips/codegen-mips.h | 33 - deps/v8/src/mips/constants-mips.cc | 18 +- deps/v8/src/mips/constants-mips.h | 40 +- deps/v8/src/mips/deoptimizer-mips.cc | 3 +- deps/v8/src/mips/disasm-mips.cc | 14 +- deps/v8/src/mips/frame-constants-mips.cc | 5 + .../v8/src/mips/interface-descriptors-mips.cc | 36 +- deps/v8/src/mips/macro-assembler-mips.cc | 318 +- deps/v8/src/mips/macro-assembler-mips.h | 119 +- deps/v8/src/mips/simulator-mips.cc | 1199 ++-- deps/v8/src/mips/simulator-mips.h | 94 +- deps/v8/src/mips64/OWNERS | 5 +- deps/v8/src/mips64/assembler-mips64-inl.h | 13 +- deps/v8/src/mips64/assembler-mips64.cc | 267 +- deps/v8/src/mips64/assembler-mips64.h | 74 +- deps/v8/src/mips64/code-stubs-mips64.cc | 748 +-- deps/v8/src/mips64/code-stubs-mips64.h | 257 +- deps/v8/src/mips64/codegen-mips64.cc | 141 +- deps/v8/src/mips64/codegen-mips64.h | 33 - deps/v8/src/mips64/constants-mips64.cc | 18 +- deps/v8/src/mips64/constants-mips64.h | 44 +- deps/v8/src/mips64/deoptimizer-mips64.cc | 5 +- deps/v8/src/mips64/disasm-mips64.cc | 14 +- deps/v8/src/mips64/frame-constants-mips64.cc | 5 + .../mips64/interface-descriptors-mips64.cc | 36 +- deps/v8/src/mips64/macro-assembler-mips64.cc | 332 +- deps/v8/src/mips64/macro-assembler-mips64.h | 133 +- deps/v8/src/mips64/simulator-mips64.cc | 1154 +++- deps/v8/src/mips64/simulator-mips64.h | 102 +- deps/v8/src/objects-body-descriptors-inl.h | 30 +- deps/v8/src/objects-debug.cc | 185 +- deps/v8/src/objects-inl.h | 3231 ++--------- deps/v8/src/objects-printer.cc | 342 +- deps/v8/src/objects.cc | 1576 +++--- deps/v8/src/objects.h | 2805 ++-------- deps/v8/src/objects/arguments-inl.h | 27 + deps/v8/src/objects/arguments.h | 4 + deps/v8/src/objects/bigint-inl.h | 56 - deps/v8/src/objects/bigint.cc | 1455 ++++- deps/v8/src/objects/bigint.h | 237 +- deps/v8/src/objects/code-inl.h | 726 +++ deps/v8/src/objects/code.h | 951 ++++ deps/v8/src/objects/compilation-cache-inl.h | 2 +- deps/v8/src/objects/compilation-cache.h | 1 + deps/v8/src/objects/data-handler-inl.h | 39 + deps/v8/src/objects/data-handler.h | 60 + deps/v8/src/objects/debug-objects.cc | 4 +- deps/v8/src/objects/debug-objects.h | 3 + deps/v8/src/objects/descriptor-array.h | 20 +- deps/v8/src/objects/dictionary.h | 70 +- deps/v8/src/objects/fixed-array-inl.h | 627 +++ deps/v8/src/objects/fixed-array.h | 600 ++ deps/v8/src/objects/frame-array.h | 5 +- deps/v8/src/objects/hash-table-inl.h | 118 + deps/v8/src/objects/hash-table.h | 67 +- deps/v8/src/objects/intl-objects.cc | 164 +- deps/v8/src/objects/js-array-inl.h | 243 + deps/v8/src/objects/js-array.h | 358 ++ deps/v8/src/objects/js-collection-inl.h | 49 + deps/v8/src/objects/js-collection.h | 162 + deps/v8/src/objects/js-regexp-inl.h | 84 + deps/v8/src/objects/js-regexp.h | 171 + deps/v8/src/objects/literal-objects-inl.h | 51 + deps/v8/src/objects/literal-objects.cc | 530 ++ deps/v8/src/objects/literal-objects.h | 76 + deps/v8/src/objects/map-inl.h | 645 ++- deps/v8/src/objects/map.h | 403 +- deps/v8/src/objects/module-inl.h | 1 + deps/v8/src/objects/module.cc | 65 +- deps/v8/src/objects/module.h | 19 +- deps/v8/src/objects/name-inl.h | 2 +- deps/v8/src/objects/name.h | 7 +- deps/v8/src/objects/object-macros-undef.h | 2 + deps/v8/src/objects/object-macros.h | 33 +- deps/v8/src/objects/scope-info.cc | 16 +- deps/v8/src/objects/scope-info.h | 5 +- deps/v8/src/objects/script-inl.h | 39 +- deps/v8/src/objects/script.h | 23 +- .../v8/src/objects/shared-function-info-inl.h | 51 +- deps/v8/src/objects/shared-function-info.h | 60 +- deps/v8/src/objects/string-inl.h | 60 +- deps/v8/src/objects/string-table.h | 5 +- deps/v8/src/objects/string.h | 27 +- deps/v8/src/objects/template-objects.cc | 7 +- deps/v8/src/ostreams.cc | 8 +- .../{ => parsing}/background-parsing-task.cc | 29 +- .../{ => parsing}/background-parsing-task.h | 16 +- deps/v8/src/parsing/expression-classifier.h | 25 +- .../parsing/expression-scope-reparenter.cc | 12 + deps/v8/src/parsing/func-name-inferrer.cc | 2 +- deps/v8/src/parsing/parse-info.cc | 36 +- deps/v8/src/parsing/parse-info.h | 35 +- deps/v8/src/parsing/parser-base.h | 555 +- deps/v8/src/parsing/parser.cc | 862 ++- deps/v8/src/parsing/parser.h | 195 +- deps/v8/src/parsing/parsing.cc | 6 +- deps/v8/src/parsing/pattern-rewriter.cc | 10 +- deps/v8/src/parsing/preparsed-scope-data.cc | 104 +- deps/v8/src/parsing/preparsed-scope-data.h | 18 +- deps/v8/src/parsing/preparser.cc | 58 +- deps/v8/src/parsing/preparser.h | 154 +- deps/v8/src/parsing/rewriter.cc | 11 +- .../src/parsing/scanner-character-streams.cc | 63 +- deps/v8/src/parsing/scanner.cc | 128 +- deps/v8/src/parsing/scanner.h | 34 +- deps/v8/src/parsing/token.h | 397 +- .../src/pending-compilation-error-handler.cc | 98 +- .../src/pending-compilation-error-handler.h | 91 +- deps/v8/src/perf-jit.cc | 13 +- deps/v8/src/ppc/OWNERS | 3 +- deps/v8/src/ppc/assembler-ppc-inl.h | 20 +- deps/v8/src/ppc/assembler-ppc.cc | 95 +- deps/v8/src/ppc/assembler-ppc.h | 20 +- deps/v8/src/ppc/code-stubs-ppc.cc | 723 +-- deps/v8/src/ppc/code-stubs-ppc.h | 242 +- deps/v8/src/ppc/codegen-ppc.cc | 117 +- deps/v8/src/ppc/codegen-ppc.h | 28 - deps/v8/src/ppc/deoptimizer-ppc.cc | 3 +- deps/v8/src/ppc/disasm-ppc.cc | 14 +- deps/v8/src/ppc/frame-constants-ppc.cc | 5 + deps/v8/src/ppc/interface-descriptors-ppc.cc | 20 +- deps/v8/src/ppc/macro-assembler-ppc.cc | 421 +- deps/v8/src/ppc/macro-assembler-ppc.h | 96 +- deps/v8/src/ppc/simulator-ppc.cc | 313 +- deps/v8/src/ppc/simulator-ppc.h | 85 +- deps/v8/src/profiler/allocation-tracker.cc | 8 +- deps/v8/src/profiler/circular-queue-inl.h | 4 +- deps/v8/src/profiler/circular-queue.h | 7 +- deps/v8/src/profiler/cpu-profiler-inl.h | 6 +- deps/v8/src/profiler/cpu-profiler.cc | 68 +- deps/v8/src/profiler/cpu-profiler.h | 2 + deps/v8/src/profiler/heap-profiler.cc | 18 +- .../profiler/heap-snapshot-generator-inl.h | 2 +- .../src/profiler/heap-snapshot-generator.cc | 243 +- .../v8/src/profiler/heap-snapshot-generator.h | 24 +- deps/v8/src/profiler/profile-generator.cc | 26 +- deps/v8/src/profiler/profile-generator.h | 4 +- deps/v8/src/profiler/profiler-listener.cc | 76 +- deps/v8/src/profiler/profiler-listener.h | 8 +- .../v8/src/profiler/sampling-heap-profiler.cc | 24 +- deps/v8/src/profiler/strings-storage.cc | 6 +- deps/v8/src/profiler/tick-sample.cc | 14 +- deps/v8/src/profiler/unbound-queue-inl.h | 8 +- deps/v8/src/property-details.h | 14 +- deps/v8/src/prototype.h | 6 +- .../regexp/arm/regexp-macro-assembler-arm.cc | 40 +- .../regexp/arm/regexp-macro-assembler-arm.h | 2 +- .../arm64/regexp-macro-assembler-arm64.cc | 38 +- .../arm64/regexp-macro-assembler-arm64.h | 2 +- .../ia32/regexp-macro-assembler-ia32.cc | 40 +- .../regexp/ia32/regexp-macro-assembler-ia32.h | 2 +- deps/v8/src/regexp/jsregexp-inl.h | 6 +- deps/v8/src/regexp/jsregexp.cc | 533 +- deps/v8/src/regexp/jsregexp.h | 153 +- deps/v8/src/regexp/mips/OWNERS | 5 +- .../mips/regexp-macro-assembler-mips.cc | 44 +- .../regexp/mips/regexp-macro-assembler-mips.h | 2 +- deps/v8/src/regexp/mips64/OWNERS | 5 +- .../mips64/regexp-macro-assembler-mips64.cc | 44 +- .../mips64/regexp-macro-assembler-mips64.h | 2 +- deps/v8/src/regexp/ppc/OWNERS | 3 +- .../regexp/ppc/regexp-macro-assembler-ppc.cc | 40 +- .../regexp/ppc/regexp-macro-assembler-ppc.h | 2 +- deps/v8/src/regexp/regexp-ast.cc | 30 +- deps/v8/src/regexp/regexp-ast.h | 61 +- .../regexp/regexp-macro-assembler-irregexp.cc | 2 +- .../regexp/regexp-macro-assembler-irregexp.h | 15 +- deps/v8/src/regexp/regexp-macro-assembler.cc | 32 +- deps/v8/src/regexp/regexp-macro-assembler.h | 8 +- deps/v8/src/regexp/regexp-parser.cc | 392 +- deps/v8/src/regexp/regexp-parser.h | 103 +- deps/v8/src/regexp/regexp-stack.cc | 8 +- deps/v8/src/regexp/regexp-stack.h | 4 +- deps/v8/src/regexp/regexp-utils.cc | 7 +- deps/v8/src/regexp/s390/OWNERS | 3 +- .../s390/regexp-macro-assembler-s390.cc | 42 +- .../regexp/s390/regexp-macro-assembler-s390.h | 2 +- .../regexp/x64/regexp-macro-assembler-x64.cc | 42 +- .../regexp/x64/regexp-macro-assembler-x64.h | 2 +- deps/v8/src/register-configuration.cc | 5 +- deps/v8/src/reglist.h | 25 +- deps/v8/src/runtime-profiler.cc | 5 - deps/v8/src/runtime/runtime-array.cc | 54 +- deps/v8/src/runtime/runtime-bigint.cc | 116 +- deps/v8/src/runtime/runtime-classes.cc | 561 +- deps/v8/src/runtime/runtime-collections.cc | 28 +- deps/v8/src/runtime/runtime-compiler.cc | 96 +- deps/v8/src/runtime/runtime-debug.cc | 69 +- deps/v8/src/runtime/runtime-function.cc | 21 - deps/v8/src/runtime/runtime-internal.cc | 29 +- deps/v8/src/runtime/runtime-interpreter.cc | 57 + deps/v8/src/runtime/runtime-intl.cc | 49 +- deps/v8/src/runtime/runtime-literals.cc | 5 +- deps/v8/src/runtime/runtime-maths.cc | 1 - deps/v8/src/runtime/runtime-module.cc | 15 +- deps/v8/src/runtime/runtime-numbers.cc | 31 +- deps/v8/src/runtime/runtime-object.cc | 73 +- deps/v8/src/runtime/runtime-operators.cc | 12 +- deps/v8/src/runtime/runtime-promise.cc | 5 +- deps/v8/src/runtime/runtime-regexp.cc | 114 +- deps/v8/src/runtime/runtime-scopes.cc | 37 +- deps/v8/src/runtime/runtime-strings.cc | 104 +- deps/v8/src/runtime/runtime-test.cc | 262 +- deps/v8/src/runtime/runtime-typedarray.cc | 10 +- deps/v8/src/runtime/runtime-utils.h | 6 +- deps/v8/src/runtime/runtime-wasm.cc | 128 +- deps/v8/src/runtime/runtime.cc | 4 +- deps/v8/src/runtime/runtime.h | 125 +- deps/v8/src/s390/OWNERS | 3 +- deps/v8/src/s390/assembler-s390-inl.h | 18 +- deps/v8/src/s390/assembler-s390.cc | 49 +- deps/v8/src/s390/assembler-s390.h | 20 +- deps/v8/src/s390/code-stubs-s390.cc | 697 +-- deps/v8/src/s390/code-stubs-s390.h | 367 +- deps/v8/src/s390/codegen-s390.cc | 119 +- deps/v8/src/s390/codegen-s390.h | 30 - deps/v8/src/s390/constants-s390.cc | 312 +- deps/v8/src/s390/deoptimizer-s390.cc | 5 +- deps/v8/src/s390/disasm-s390.cc | 10 +- deps/v8/src/s390/frame-constants-s390.cc | 5 + .../v8/src/s390/interface-descriptors-s390.cc | 20 +- deps/v8/src/s390/macro-assembler-s390.cc | 399 +- deps/v8/src/s390/macro-assembler-s390.h | 118 +- deps/v8/src/s390/simulator-s390.cc | 295 +- deps/v8/src/s390/simulator-s390.h | 86 +- deps/v8/src/safepoint-table.cc | 110 +- deps/v8/src/safepoint-table.h | 47 +- deps/v8/src/setup-isolate-deserialize.cc | 6 +- deps/v8/src/setup-isolate-full.cc | 6 +- deps/v8/src/simulator-base.cc | 84 + deps/v8/src/simulator-base.h | 113 + deps/v8/src/simulator.h | 72 + deps/v8/src/snapshot/OWNERS | 1 + .../builtin-deserializer-allocator.cc | 289 + .../snapshot/builtin-deserializer-allocator.h | 132 + deps/v8/src/snapshot/builtin-deserializer.cc | 254 +- deps/v8/src/snapshot/builtin-deserializer.h | 82 +- .../snapshot/builtin-serializer-allocator.cc | 67 + .../snapshot/builtin-serializer-allocator.h | 52 + deps/v8/src/snapshot/builtin-serializer.cc | 66 +- deps/v8/src/snapshot/builtin-serializer.h | 33 +- .../v8/src/snapshot/builtin-snapshot-utils.cc | 67 + deps/v8/src/snapshot/builtin-snapshot-utils.h | 56 + deps/v8/src/snapshot/code-serializer.cc | 54 +- deps/v8/src/snapshot/code-serializer.h | 2 +- .../default-deserializer-allocator.cc | 246 + .../snapshot/default-deserializer-allocator.h | 102 + .../snapshot/default-serializer-allocator.cc | 7 - .../snapshot/default-serializer-allocator.h | 1 - deps/v8/src/snapshot/deserializer.cc | 437 +- deps/v8/src/snapshot/deserializer.h | 94 +- deps/v8/src/snapshot/mksnapshot.cc | 22 +- deps/v8/src/snapshot/natives-common.cc | 2 +- deps/v8/src/snapshot/natives-external.cc | 14 +- deps/v8/src/snapshot/object-deserializer.cc | 10 +- deps/v8/src/snapshot/object-deserializer.h | 2 +- deps/v8/src/snapshot/partial-deserializer.cc | 20 +- deps/v8/src/snapshot/partial-deserializer.h | 5 +- deps/v8/src/snapshot/partial-serializer.cc | 20 +- deps/v8/src/snapshot/partial-serializer.h | 3 +- deps/v8/src/snapshot/serializer-common.cc | 10 +- deps/v8/src/snapshot/serializer-common.h | 12 +- deps/v8/src/snapshot/serializer.cc | 119 +- deps/v8/src/snapshot/serializer.h | 19 +- deps/v8/src/snapshot/snapshot-common.cc | 58 +- deps/v8/src/snapshot/snapshot-empty.cc | 3 +- deps/v8/src/snapshot/snapshot-external.cc | 4 +- deps/v8/src/snapshot/snapshot-source-sink.cc | 16 +- deps/v8/src/snapshot/snapshot.h | 8 +- deps/v8/src/snapshot/startup-deserializer.cc | 18 +- deps/v8/src/snapshot/startup-deserializer.h | 4 +- deps/v8/src/snapshot/startup-serializer.cc | 70 +- deps/v8/src/snapshot/startup-serializer.h | 11 +- deps/v8/src/source-position-table.cc | 21 +- deps/v8/src/source-position-table.h | 13 +- deps/v8/src/source-position.cc | 8 +- deps/v8/src/source-position.h | 9 +- deps/v8/src/splay-tree-inl.h | 30 +- deps/v8/src/splay-tree.h | 13 +- deps/v8/src/string-builder.h | 16 +- deps/v8/src/string-case.cc | 2 +- deps/v8/src/string-hasher-inl.h | 4 +- deps/v8/src/string-search.h | 8 +- deps/v8/src/string-stream.cc | 12 +- deps/v8/src/strtod.cc | 54 +- deps/v8/src/third_party/utf8-decoder/LICENSE | 19 + .../v8/src/third_party/utf8-decoder/README.v8 | 18 + .../third_party/utf8-decoder/utf8-decoder.h | 78 + deps/v8/src/tracing/trace-event.h | 4 +- deps/v8/src/tracing/traced-value.cc | 2 +- deps/v8/src/transitions-inl.h | 12 +- deps/v8/src/transitions.cc | 14 +- deps/v8/src/transitions.h | 27 +- deps/v8/src/trap-handler/handler-inside.cc | 14 +- deps/v8/src/trap-handler/handler-outside.cc | 13 +- deps/v8/src/trap-handler/handler-shared.cc | 17 +- .../src/trap-handler/trap-handler-internal.h | 7 + deps/v8/src/trap-handler/trap-handler.h | 11 +- deps/v8/src/type-hints.cc | 89 +- deps/v8/src/type-hints.h | 28 +- deps/v8/src/unicode-decoder.cc | 4 +- deps/v8/src/unicode-decoder.h | 10 +- deps/v8/src/unicode-inl.h | 4 +- deps/v8/src/unicode.cc | 325 +- deps/v8/src/unicode.h | 7 +- deps/v8/src/uri.cc | 16 +- deps/v8/src/utils.cc | 27 +- deps/v8/src/utils.h | 70 +- deps/v8/src/v8.cc | 14 +- deps/v8/src/v8.gyp | 163 +- deps/v8/src/v8threads.cc | 47 +- deps/v8/src/v8threads.h | 2 +- deps/v8/src/value-serializer.cc | 131 +- deps/v8/src/value-serializer.h | 6 +- deps/v8/src/vector-slot-pair.cc | 40 + deps/v8/src/vector-slot-pair.h | 47 + deps/v8/src/vector.h | 33 +- deps/v8/src/version.cc | 2 +- deps/v8/src/visitors.cc | 2 + deps/v8/src/visitors.h | 39 + deps/v8/src/wasm/baseline/DEPS | 5 + .../wasm/baseline/arm/liftoff-assembler-arm.h | 84 + .../baseline/arm64/liftoff-assembler-arm64.h | 84 + .../baseline/ia32/liftoff-assembler-ia32.h | 325 ++ .../wasm/baseline/liftoff-assembler-defs.h | 64 + .../v8/src/wasm/baseline/liftoff-assembler.cc | 399 ++ deps/v8/src/wasm/baseline/liftoff-assembler.h | 356 ++ deps/v8/src/wasm/baseline/liftoff-compiler.cc | 827 +++ deps/v8/src/wasm/baseline/liftoff-register.h | 198 + .../baseline/mips/liftoff-assembler-mips.h | 84 + .../mips64/liftoff-assembler-mips64.h | 84 + .../wasm/baseline/ppc/liftoff-assembler-ppc.h | 84 + .../baseline/s390/liftoff-assembler-s390.h | 84 + .../wasm/baseline/x64/liftoff-assembler-x64.h | 337 ++ deps/v8/src/wasm/decoder.h | 102 +- deps/v8/src/wasm/function-body-decoder-impl.h | 863 +-- deps/v8/src/wasm/function-body-decoder.cc | 316 +- deps/v8/src/wasm/function-body-decoder.h | 7 +- deps/v8/src/wasm/module-compiler.cc | 2341 +++++--- deps/v8/src/wasm/module-compiler.h | 49 +- deps/v8/src/wasm/module-decoder.cc | 44 +- deps/v8/src/wasm/module-decoder.h | 2 +- deps/v8/src/wasm/signature-map.cc | 5 +- deps/v8/src/wasm/signature-map.h | 11 +- deps/v8/src/wasm/streaming-decoder.cc | 120 +- deps/v8/src/wasm/streaming-decoder.h | 28 +- deps/v8/src/wasm/wasm-code-manager.cc | 1001 ++++ deps/v8/src/wasm/wasm-code-manager.h | 427 ++ deps/v8/src/wasm/wasm-code-specialization.cc | 132 +- deps/v8/src/wasm/wasm-code-specialization.h | 11 +- deps/v8/src/wasm/wasm-code-wrapper.cc | 38 + deps/v8/src/wasm/wasm-code-wrapper.h | 38 + deps/v8/src/wasm/wasm-debug.cc | 155 +- deps/v8/src/wasm/wasm-engine.h | 40 + deps/v8/src/wasm/wasm-external-refs.cc | 10 +- deps/v8/src/wasm/wasm-heap.cc | 101 - deps/v8/src/wasm/wasm-heap.h | 66 - deps/v8/src/wasm/wasm-interpreter.cc | 859 +-- deps/v8/src/wasm/wasm-interpreter.h | 9 +- deps/v8/src/wasm/wasm-js.cc | 45 +- deps/v8/src/wasm/wasm-limits.h | 5 +- deps/v8/src/wasm/wasm-memory.cc | 6 +- deps/v8/src/wasm/wasm-memory.h | 2 +- deps/v8/src/wasm/wasm-module-builder.cc | 2 +- deps/v8/src/wasm/wasm-module.cc | 164 +- deps/v8/src/wasm/wasm-module.h | 30 +- deps/v8/src/wasm/wasm-objects-inl.h | 34 +- deps/v8/src/wasm/wasm-objects.cc | 647 ++- deps/v8/src/wasm/wasm-objects.h | 141 +- deps/v8/src/wasm/wasm-opcodes.cc | 105 +- deps/v8/src/wasm/wasm-opcodes.h | 206 +- deps/v8/src/wasm/wasm-serialization.cc | 677 +++ deps/v8/src/wasm/wasm-serialization.h | 95 + deps/v8/src/wasm/wasm-text.cc | 32 +- deps/v8/src/wasm/wasm-value.h | 85 +- deps/v8/src/x64/assembler-x64-inl.h | 17 +- deps/v8/src/x64/assembler-x64.cc | 211 +- deps/v8/src/x64/assembler-x64.h | 57 +- deps/v8/src/x64/code-stubs-x64.cc | 701 +-- deps/v8/src/x64/code-stubs-x64.h | 300 - deps/v8/src/x64/codegen-x64.cc | 153 +- deps/v8/src/x64/codegen-x64.h | 99 - deps/v8/src/x64/deoptimizer-x64.cc | 29 +- deps/v8/src/x64/disasm-x64.cc | 138 +- deps/v8/src/x64/frame-constants-x64.cc | 5 + deps/v8/src/x64/interface-descriptors-x64.cc | 24 +- deps/v8/src/x64/macro-assembler-x64.cc | 618 +- deps/v8/src/x64/macro-assembler-x64.h | 260 +- deps/v8/src/x64/simulator-x64.cc | 2 + deps/v8/src/x64/simulator-x64.h | 42 +- deps/v8/src/zone/zone-containers.h | 5 + deps/v8/src/zone/zone-handle-set.h | 59 +- deps/v8/src/zone/zone-list-inl.h | 2 +- deps/v8/src/zone/zone.cc | 11 +- deps/v8/src/zone/zone.h | 24 +- deps/v8/test/benchmarks/testcfg.py | 102 +- deps/v8/test/cctest/BUILD.gn | 17 +- deps/v8/test/cctest/OWNERS | 5 +- deps/v8/test/cctest/assembler-helper-arm.cc | 33 + deps/v8/test/cctest/assembler-helper-arm.h | 28 + deps/v8/test/cctest/cctest.cc | 41 +- deps/v8/test/cctest/cctest.gyp | 18 +- deps/v8/test/cctest/cctest.h | 42 +- deps/v8/test/cctest/cctest.status | 33 + .../cctest/compiler/code-assembler-tester.h | 13 +- .../v8/test/cctest/compiler/codegen-tester.cc | 38 +- deps/v8/test/cctest/compiler/codegen-tester.h | 9 +- .../test/cctest/compiler/function-tester.cc | 8 +- .../cctest/compiler/graph-builder-tester.h | 16 +- .../cctest/compiler/test-code-generator.cc | 1012 +++- .../cctest/compiler/test-graph-visualizer.cc | 8 +- .../test/cctest/compiler/test-instruction.cc | 2 +- .../cctest/compiler/test-js-typed-lowering.cc | 16 +- .../cctest/compiler/test-jump-threading.cc | 14 +- deps/v8/test/cctest/compiler/test-linkage.cc | 5 +- .../cctest/compiler/test-loop-analysis.cc | 8 +- .../compiler/test-machine-operator-reducer.cc | 8 +- .../cctest/compiler/test-multiple-return.cc | 476 +- deps/v8/test/cctest/compiler/test-node.cc | 16 +- deps/v8/test/cctest/compiler/test-operator.cc | 2 +- .../test-run-bytecode-graph-builder.cc | 9 +- .../cctest/compiler/test-run-intrinsics.cc | 18 - .../v8/test/cctest/compiler/test-run-jsops.cc | 2 +- .../cctest/compiler/test-run-load-store.cc | 214 +- .../test/cctest/compiler/test-run-machops.cc | 626 +-- .../cctest/compiler/test-run-native-calls.cc | 7 +- .../v8/test/cctest/compiler/test-run-stubs.cc | 121 +- .../cctest/compiler/test-run-variables.cc | 66 +- .../cctest/compiler/test-run-wasm-machops.cc | 34 +- deps/v8/test/cctest/compiler/value-helper.cc | 21 + deps/v8/test/cctest/compiler/value-helper.h | 501 +- .../cctest/expression-type-collector-macros.h | 10 +- deps/v8/test/cctest/gay-fixed.cc | 2 +- deps/v8/test/cctest/gay-precision.cc | 2 +- deps/v8/test/cctest/gay-shortest.cc | 2 +- deps/v8/test/cctest/heap/heap-tester.h | 3 + deps/v8/test/cctest/heap/heap-utils.cc | 8 +- deps/v8/test/cctest/heap/test-alloc.cc | 14 +- deps/v8/test/cctest/heap/test-compaction.cc | 18 +- .../test/cctest/heap/test-embedder-tracing.cc | 197 + deps/v8/test/cctest/heap/test-heap.cc | 355 +- .../cctest/heap/test-incremental-marking.cc | 8 +- deps/v8/test/cctest/heap/test-mark-compact.cc | 11 +- .../test/cctest/heap/test-page-promotion.cc | 3 +- deps/v8/test/cctest/heap/test-spaces.cc | 142 +- .../bytecode-expectations-printer.h | 1 + .../ArrayLiterals.golden | 26 +- .../ArrayLiteralsWide.golden | 1050 ---- .../AssignmentsInBinaryExpression.golden | 10 +- .../AsyncGenerators.golden | 54 +- .../bytecode_expectations/BasicLoops.golden | 26 +- .../BreakableBlocks.golden | 12 +- .../CallAndSpread.golden | 16 +- .../bytecode_expectations/CallGlobal.golden | 8 +- .../CallLookupSlot.golden | 8 +- .../bytecode_expectations/CallNew.golden | 12 +- .../ClassAndSuperClass.golden | 20 +- .../ClassDeclarations.golden | 171 +- .../bytecode_expectations/ClassFields.golden | 338 ++ .../bytecode_expectations/CompareNil.golden | 2 +- .../ContextVariables.golden | 8 +- .../CountOperators.golden | 56 +- .../CreateRestParameter.golden | 6 +- .../DeclareGlobals.golden | 6 +- .../bytecode_expectations/Eval.golden | 4 +- .../bytecode_expectations/ForAwaitOf.golden | 76 +- .../bytecode_expectations/ForIn.golden | 34 +- .../bytecode_expectations/ForOf.golden | 40 +- .../bytecode_expectations/ForOfLoop.golden | 112 +- .../FunctionLiterals.golden | 8 +- .../bytecode_expectations/Generators.golden | 46 +- .../GlobalCompoundExpressions.golden | 4 +- .../GlobalCountOperators.golden | 20 +- .../HeapNumberConstants.golden | 1047 +--- .../bytecode_expectations/IfConditions.golden | 4 +- .../JumpsRequiringConstantWideOperands.golden | 1294 ----- .../bytecode_expectations/LookupSlot.golden | 20 +- .../LookupSlotWideInEval.golden | 4218 -------------- .../bytecode_expectations/Modules.golden | 712 ++- .../bytecode_expectations/NewAndSpread.golden | 84 +- .../ObjectLiterals.golden | 37 +- .../ObjectLiteralsWide.golden | 1051 ---- .../bytecode_expectations/PropertyCall.golden | 30 +- .../RegExpLiterals.golden | 6 +- .../RegExpLiteralsWide.golden | 1050 ---- .../StandardForLoop.golden | 30 +- .../bytecode_expectations/StoreGlobal.golden | 12 +- .../SuperCallAndSpread.golden | 16 +- .../bytecode_expectations/Switch.golden | 20 +- .../bytecode_expectations/ThisFunction.golden | 7 +- .../TopLevelObjectLiterals.golden | 6 +- .../UnaryOperators.golden | 4 +- .../WideRegisters.golden | 10 +- .../generate-bytecode-expectations.cc | 13 +- .../cctest/interpreter/interpreter-tester.h | 5 + .../interpreter/source-position-matcher.cc | 2 +- .../interpreter/test-bytecode-generator.cc | 163 +- .../test-interpreter-intrinsics.cc | 13 +- .../cctest/interpreter/test-interpreter.cc | 639 ++- .../test/cctest/libplatform/test-tracing.cc | 107 +- .../cctest/log-eq-of-logging-and-traversal.js | 22 +- deps/v8/test/cctest/parsing/test-preparser.cc | 329 +- .../cctest/parsing/test-scanner-streams.cc | 18 +- deps/v8/test/cctest/parsing/test-scanner.cc | 8 +- deps/v8/test/cctest/print-extension.cc | 2 +- deps/v8/test/cctest/profiler-extension.cc | 2 +- deps/v8/test/cctest/scope-test-helper.h | 18 +- deps/v8/test/cctest/test-accessors.cc | 40 +- deps/v8/test/cctest/test-allocation.cc | 12 +- deps/v8/test/cctest/test-api-accessors.cc | 2 +- deps/v8/test/cctest/test-api-interceptors.cc | 79 +- deps/v8/test/cctest/test-api.cc | 1286 ++--- deps/v8/test/cctest/test-assembler-arm.cc | 690 ++- deps/v8/test/cctest/test-assembler-arm64.cc | 4330 +++++++------- deps/v8/test/cctest/test-assembler-ia32.cc | 19 +- deps/v8/test/cctest/test-assembler-mips.cc | 3406 +++++++---- deps/v8/test/cctest/test-assembler-mips64.cc | 3741 ++++++++----- deps/v8/test/cctest/test-assembler-ppc.cc | 48 +- deps/v8/test/cctest/test-assembler-s390.cc | 24 +- deps/v8/test/cctest/test-assembler-x64.cc | 538 +- deps/v8/test/cctest/test-atomicops.cc | 5 +- deps/v8/test/cctest/test-bignum.cc | 2 +- deps/v8/test/cctest/test-code-layout.cc | 10 +- .../test/cctest/test-code-stub-assembler.cc | 352 +- deps/v8/test/cctest/test-code-stubs-arm.cc | 54 +- deps/v8/test/cctest/test-code-stubs-arm64.cc | 101 +- deps/v8/test/cctest/test-code-stubs-ia32.cc | 35 +- deps/v8/test/cctest/test-code-stubs-mips.cc | 53 +- deps/v8/test/cctest/test-code-stubs-mips64.cc | 53 +- deps/v8/test/cctest/test-code-stubs-x64.cc | 41 +- deps/v8/test/cctest/test-code-stubs.cc | 2 +- deps/v8/test/cctest/test-compiler.cc | 162 +- deps/v8/test/cctest/test-conversions.cc | 6 +- deps/v8/test/cctest/test-cpu-profiler.cc | 184 +- deps/v8/test/cctest/test-date.cc | 4 +- deps/v8/test/cctest/test-debug.cc | 556 +- deps/v8/test/cctest/test-decls.cc | 42 +- deps/v8/test/cctest/test-disasm-arm.cc | 52 +- deps/v8/test/cctest/test-disasm-arm64.cc | 12 +- deps/v8/test/cctest/test-disasm-ia32.cc | 13 +- deps/v8/test/cctest/test-disasm-mips.cc | 17 +- deps/v8/test/cctest/test-disasm-mips64.cc | 19 +- deps/v8/test/cctest/test-disasm-x64.cc | 4 +- deps/v8/test/cctest/test-diy-fp.cc | 20 +- deps/v8/test/cctest/test-double.cc | 16 +- deps/v8/test/cctest/test-elements-kind.cc | 9 +- deps/v8/test/cctest/test-feedback-vector.cc | 42 +- .../test/cctest/test-field-type-tracking.cc | 24 +- .../test/cctest/test-func-name-inference.cc | 28 + deps/v8/test/cctest/test-global-handles.cc | 338 +- deps/v8/test/cctest/test-hashmap.cc | 12 +- deps/v8/test/cctest/test-heap-profiler.cc | 64 +- .../cctest/test-inobject-slack-tracking.cc | 12 +- deps/v8/test/cctest/test-liveedit.cc | 18 +- deps/v8/test/cctest/test-log-stack-tracer.cc | 4 +- deps/v8/test/cctest/test-log.cc | 513 +- .../test/cctest/test-macro-assembler-arm.cc | 34 +- .../test/cctest/test-macro-assembler-mips.cc | 68 +- .../cctest/test-macro-assembler-mips64.cc | 130 +- .../test/cctest/test-macro-assembler-x64.cc | 591 +- deps/v8/test/cctest/test-object.cc | 3 + deps/v8/test/cctest/test-parsing.cc | 3865 ++++++------- deps/v8/test/cctest/test-platform-linux.cc | 53 - deps/v8/test/cctest/test-platform-win32.cc | 53 - deps/v8/test/cctest/test-platform.cc | 17 +- deps/v8/test/cctest/test-profile-generator.cc | 20 +- .../cctest/test-random-number-generator.cc | 2 +- deps/v8/test/cctest/test-regexp.cc | 138 +- .../cctest/test-run-wasm-relocation-arm.cc | 4 +- .../cctest/test-run-wasm-relocation-arm64.cc | 4 +- .../cctest/test-run-wasm-relocation-ia32.cc | 4 +- .../cctest/test-run-wasm-relocation-x64.cc | 4 +- deps/v8/test/cctest/test-sampler-api.cc | 14 +- deps/v8/test/cctest/test-serialize.cc | 444 +- deps/v8/test/cctest/test-strings.cc | 31 +- deps/v8/test/cctest/test-strtod.cc | 4 +- ...tor-arm.cc => test-sync-primitives-arm.cc} | 87 +- ...arm64.cc => test-sync-primitives-arm64.cc} | 56 +- .../v8/test/cctest/test-thread-termination.cc | 38 +- deps/v8/test/cctest/test-threads.cc | 4 +- deps/v8/test/cctest/test-traced-value.cc | 4 +- deps/v8/test/cctest/test-types.cc | 55 +- deps/v8/test/cctest/test-unboxed-doubles.cc | 20 +- deps/v8/test/cctest/test-usecounters.cc | 59 +- deps/v8/test/cctest/test-utils-arm64.cc | 10 +- deps/v8/test/cctest/test-utils-arm64.h | 10 +- deps/v8/test/cctest/test-utils.cc | 4 +- deps/v8/test/cctest/test-weakmaps.cc | 30 +- deps/v8/test/cctest/test-weaksets.cc | 8 +- deps/v8/test/cctest/testcfg.py | 44 +- deps/v8/test/cctest/unicode-helpers.h | 12 +- deps/v8/test/cctest/wasm/test-c-wasm-entry.cc | 45 +- deps/v8/test/cctest/wasm/test-run-wasm-64.cc | 512 +- .../test/cctest/wasm/test-run-wasm-atomics.cc | 123 +- .../cctest/wasm/test-run-wasm-interpreter.cc | 104 +- .../test/cctest/wasm/test-run-wasm-module.cc | 106 +- .../cctest/wasm/test-run-wasm-relocation.cc | 87 +- .../v8/test/cctest/wasm/test-run-wasm-simd.cc | 108 +- deps/v8/test/cctest/wasm/test-run-wasm.cc | 329 +- .../cctest/wasm/test-streaming-compilation.cc | 213 +- .../test/cctest/wasm/test-wasm-breakpoints.cc | 25 +- deps/v8/test/cctest/wasm/test-wasm-codegen.cc | 101 + .../wasm/test-wasm-interpreter-entry.cc | 55 +- deps/v8/test/cctest/wasm/test-wasm-stack.cc | 8 +- deps/v8/test/cctest/wasm/wasm-run-utils.cc | 244 +- deps/v8/test/cctest/wasm/wasm-run-utils.h | 131 +- deps/v8/test/common/wasm/test-signatures.h | 10 +- deps/v8/test/common/wasm/wasm-macro-gen.h | 51 +- .../v8/test/common/wasm/wasm-module-runner.cc | 52 +- deps/v8/test/common/wasm/wasm-module-runner.h | 13 +- .../debug/debug-evaluate-arguments.js | 60 + .../debug/debug-modules-set-variable-value.js | 4 +- deps/v8/test/debugger/debug/debug-script.js | 7 +- .../debug/harmony/modules-debug-scopes2.js | 10 +- .../debugger/debug/regress/regress-1853.js | 3 +- .../debug/regress/regress-crbug-481896.js | 4 +- .../debug/regress/regress-crbug-517592.js | 2 +- deps/v8/test/debugger/testcfg.py | 74 +- deps/v8/test/fuzzer/fuzzer-support.cc | 41 +- deps/v8/test/fuzzer/fuzzer-support.h | 11 +- deps/v8/test/fuzzer/regexp.cc | 2 - deps/v8/test/fuzzer/testcfg.py | 45 +- deps/v8/test/fuzzer/wasm-compile.cc | 470 +- deps/v8/test/fuzzer/wasm-fuzzer-common.cc | 91 +- deps/v8/test/fuzzer/wasm-fuzzer-common.h | 9 +- .../cpu-profiler/coverage-block-expected.txt | 2 +- .../debugger/async-chains-expected.txt | 152 + .../test/inspector/debugger/async-chains.js | 77 + .../async-instrumentation-expected.txt | 4 +- .../async-promise-late-then-expected.txt | 6 +- .../debugger/async-stack-await-expected.txt | 2 +- .../async-stack-created-frame-expected.txt | 24 +- .../async-stack-for-promise-expected.txt | 50 +- .../debugger/async-stack-for-promise.js | 27 +- .../async-stack-load-more-expected.txt | 42 + .../debugger/async-stack-load-more.js | 44 + .../debugger/change-return-value-expected.txt | 35 + .../inspector/debugger/change-return-value.js | 68 + .../collect-obsolete-async-tasks-expected.txt | 18 +- .../debugger/collect-obsolete-async-tasks.js | 2 +- ...collect-old-async-call-chains-expected.txt | 26 +- .../debugger/collect-old-async-call-chains.js | 13 +- ...luate-on-call-frame-in-module-expected.txt | 228 +- .../evaluate-on-call-frame-in-module.js | 30 + .../external-stack-trace-expected.txt | 42 + .../debugger/external-stack-trace.js | 169 + ...t-possible-breakpoints-master-expected.txt | 6 +- .../max-async-call-chain-depth-expected.txt | 2 +- .../debugger/pause-on-async-call-expected.txt | 208 + .../inspector/debugger/pause-on-async-call.js | 183 + .../promise-chain-when-limit-hit-expected.txt | 395 +- .../debugger/promise-chain-when-limit-hit.js | 13 +- .../return-break-locations-expected.txt | 6 + ...e-step-into-async-set-timeout-expected.txt | 3 +- .../set-breakpoint-at-last-line-expected.txt | 16 + .../debugger/set-breakpoint-at-last-line.js | 28 + ...-ignore-hint-when-no-location-expected.txt | 11 + ...breakpoint-ignore-hint-when-no-location.js | 27 + ...step-into-break-on-async-call-expected.txt | 13 + .../debugger/step-into-break-on-async-call.js | 61 + ...step-into-external-async-task-expected.txt | 14 + ...ernal-async-task-same-context-expected.txt | 14 + ...p-into-external-async-task-same-context.js | 81 + .../debugger/step-into-external-async-task.js | 107 + .../this-in-arrow-function-expected.txt | 107 + .../debugger/this-in-arrow-function.js | 54 + .../debugger/wasm-scripts-expected.txt | 7 +- .../sampling-heap-profiler-expected.txt | 7 + .../heap-profiler/sampling-heap-profiler.js | 48 + deps/v8/test/inspector/inspector-test.cc | 149 +- deps/v8/test/inspector/isolate-data.cc | 59 +- deps/v8/test/inspector/isolate-data.h | 18 +- deps/v8/test/inspector/protocol-test.js | 15 +- .../runtime/await-promise-expected.txt | 62 - .../runtime/console-methods-expected.txt | 100 +- .../test/inspector/runtime/console-methods.js | 3 + .../console-time-end-format-expected.txt | 8 + .../runtime/console-time-end-format.js | 52 +- .../runtime/console-time-repeat-expected.txt | 76 + .../inspector/runtime/console-time-repeat.js | 20 + .../runtime/create-context-expected.txt | 1 + .../runtime/evaluate-async-expected.txt | 16 +- .../runtime/regression-736302-expected.txt | 2 +- ...e-get-properties-and-accessor-expected.txt | 33 + .../runtime-get-properties-and-accessor.js | 29 + ...me-global-lexical-scope-names-expected.txt | 64 + .../runtime-global-lexical-scope-names.js | 59 + .../test/inspector/runtime/runtime-restore.js | 2 +- deps/v8/test/inspector/testcfg.py | 83 +- .../type-profile-start-stop-expected.txt | 2 + .../type-profiler/type-profile-start-stop.js | 10 +- deps/v8/test/intl/date-format/invalid-time.js | 20 + .../intl/number-format/format-currency.js | 2 +- deps/v8/test/intl/testcfg.py | 71 +- deps/v8/test/js-perf-test/Array/find-index.js | 108 + deps/v8/test/js-perf-test/Array/find.js | 108 + deps/v8/test/js-perf-test/Array/run.js | 2 + .../test/js-perf-test/Collections/common.js | 49 +- deps/v8/test/js-perf-test/Collections/map.js | 116 +- deps/v8/test/js-perf-test/Collections/run.js | 1 + deps/v8/test/js-perf-test/Collections/set.js | 76 + .../test/js-perf-test/Collections/weakmap.js | 36 + .../test/js-perf-test/Collections/weakset.js | 9 + .../test/js-perf-test/ExpressionDepth/run.js | 38 +- .../test/js-perf-test/Inspector/debugger.js | 19 + deps/v8/test/js-perf-test/JSTests.json | 42 +- deps/v8/test/js-perf-test/SixSpeed.json | 8 +- .../TypedArrays/slice-nospecies.js | 34 + .../TypedArrays/subarray-nospecies.js | 34 + deps/v8/test/message/console.out | 15 - .../fail/array-binding-pattern-await1.js} | 7 +- .../fail/array-binding-pattern-await1.out | 4 + .../{ => fail}/arrow-bare-rest-param.js | 0 .../{ => fail}/arrow-bare-rest-param.out | 0 .../{ => fail}/arrow-formal-parameters.js | 0 .../{ => fail}/arrow-formal-parameters.out | 0 .../{ => fail}/arrow-invalid-rest-2.js | 0 .../{ => fail}/arrow-invalid-rest-2.out | 0 .../message/{ => fail}/arrow-invalid-rest.js | 0 .../message/{ => fail}/arrow-invalid-rest.out | 0 .../test/message/{ => fail}/arrow-missing.js | 0 .../test/message/{ => fail}/arrow-missing.out | 0 .../{ => fail}/arrow-param-after-rest-2.js | 0 .../{ => fail}/arrow-param-after-rest-2.out | 0 .../{ => fail}/arrow-param-after-rest.js | 0 .../{ => fail}/arrow-param-after-rest.out | 0 .../arrow-strict-eval-bare-parameter.js | 0 .../arrow-strict-eval-bare-parameter.out | 0 .../{ => fail}/arrow-two-rest-params.js | 0 .../{ => fail}/arrow-two-rest-params.out | 0 .../{ => fail}/async-arrow-invalid-rest-2.js | 0 .../{ => fail}/async-arrow-invalid-rest-2.out | 0 .../{ => fail}/async-arrow-invalid-rest.js | 0 .../{ => fail}/async-arrow-invalid-rest.out | 0 .../async-arrow-param-after-rest.js | 0 .../async-arrow-param-after-rest.out | 0 .../message/{ => fail}/await-non-async.js | 0 .../message/{ => fail}/await-non-async.out | 0 .../{ => fail}/call-non-constructable.js | 0 .../{ => fail}/call-non-constructable.out | 0 .../{ => fail}/call-primitive-constructor.js | 0 .../{ => fail}/call-primitive-constructor.out | 0 .../{ => fail}/call-primitive-function.js | 0 .../{ => fail}/call-primitive-function.out | 0 .../{ => fail}/call-undeclared-constructor.js | 0 .../call-undeclared-constructor.out | 0 .../{ => fail}/call-undeclared-function.js | 0 .../{ => fail}/call-undeclared-function.out | 0 .../{ => fail}/class-constructor-accessor.js | 0 .../{ => fail}/class-constructor-accessor.out | 0 .../{ => fail}/class-constructor-generator.js | 0 .../class-constructor-generator.out | 0 .../message/fail/class-field-constructor.js | 9 + .../message/fail/class-field-constructor.out | 4 + .../fail/class-field-static-constructor.js | 9 + .../fail/class-field-static-constructor.out | 4 + .../fail/class-field-static-prototype.js | 9 + .../fail/class-field-static-prototype.out | 4 + .../{ => fail}/class-spread-property.js | 0 .../{ => fail}/class-spread-property.out | 0 deps/v8/test/message/{ => fail}/console.js | 1 - deps/v8/test/message/fail/console.out | 16 + .../{ => fail}/const-decl-no-init-sloppy.out | 0 .../message/{ => fail}/const-decl-no-init.js | 0 .../message/{ => fail}/const-decl-no-init.out | 0 .../message/{ => fail}/const-decl-no-init2.js | 0 .../{ => fail}/const-decl-no-init2.out | 0 .../{ => fail}/default-parameter-tdz-arrow.js | 0 .../default-parameter-tdz-arrow.out | 0 .../{ => fail}/default-parameter-tdz.js | 0 .../{ => fail}/default-parameter-tdz.out | 0 ...destructuring-array-non-iterable-number.js | 0 ...estructuring-array-non-iterable-number.out | 0 ...ray-non-iterable-object-literal-complex.js | 0 ...ay-non-iterable-object-literal-complex.out | 0 ...uring-array-non-iterable-object-literal.js | 0 ...ring-array-non-iterable-object-literal.out | 0 ...destructuring-array-non-iterable-object.js | 0 ...estructuring-array-non-iterable-object.out | 0 ...tructuring-array-non-iterable-undefined.js | 0 ...ructuring-array-non-iterable-undefined.out | 0 .../destructuring-decl-no-init-array.js | 0 .../destructuring-decl-no-init-array.out | 0 .../destructuring-decl-no-init-array2.js | 0 .../destructuring-decl-no-init-array2.out | 0 .../destructuring-decl-no-init-obj.js | 0 .../destructuring-decl-no-init-obj.out | 0 .../destructuring-decl-no-init-obj2.js | 0 .../destructuring-decl-no-init-obj2.out | 0 .../destructuring-function-non-iterable.js | 0 .../destructuring-function-non-iterable.out | 0 .../{ => fail}/destructuring-modify-const.js | 0 .../{ => fail}/destructuring-modify-const.out | 0 ...destructuring-new-callable-non-iterable.js | 0 ...estructuring-new-callable-non-iterable.out | 0 ...destructuring-non-function-non-iterable.js | 0 ...estructuring-non-function-non-iterable.out | 0 ...structuring-undefined-computed-property.js | 0 ...tructuring-undefined-computed-property.out | 0 ...destructuring-undefined-number-property.js | 0 ...estructuring-undefined-number-property.out | 0 ...destructuring-undefined-string-property.js | 0 ...estructuring-undefined-string-property.out | 0 .../dynamic-import-missing-specifier.js} | 8 +- .../fail/dynamic-import-missing-specifier.out | 4 + .../message/{ => fail}/export-duplicate-as.js | 0 .../{ => fail}/export-duplicate-as.out | 0 .../{ => fail}/export-duplicate-default.js | 0 .../{ => fail}/export-duplicate-default.out | 0 .../message/{ => fail}/export-duplicate.js | 0 .../message/{ => fail}/export-duplicate.out | 0 .../for-in-let-loop-initializers-strict.js | 0 .../for-in-let-loop-initializers-strict.out | 0 .../for-in-loop-initializers-destructuring.js | 0 ...for-in-loop-initializers-destructuring.out | 0 .../for-in-loop-initializers-strict.js | 0 .../for-in-loop-initializers-strict.out | 0 .../{ => fail}/for-loop-invalid-lhs.js | 0 .../{ => fail}/for-loop-invalid-lhs.out | 0 .../for-of-let-loop-initializers.js | 0 .../for-of-let-loop-initializers.out | 0 .../for-of-loop-initializers-sloppy.js | 0 .../for-of-loop-initializers-sloppy.out | 0 .../for-of-loop-initializers-strict.js | 0 .../for-of-loop-initializers-strict.out | 0 .../message/{ => fail}/for-of-non-iterable.js | 0 .../{ => fail}/for-of-non-iterable.out | 0 .../{ => fail}/for-of-throw-in-body.js | 0 .../{ => fail}/for-of-throw-in-body.out | 0 .../{ => fail}/formal-parameters-bad-rest.js | 0 .../{ => fail}/formal-parameters-bad-rest.out | 0 .../formal-parameters-strict-body.js | 0 .../formal-parameters-strict-body.out | 0 .../formal-parameters-trailing-comma.js | 0 .../formal-parameters-trailing-comma.out | 0 .../message/fail/func-name-inferrer-arg-1.js | 10 + .../message/fail/func-name-inferrer-arg-1.out | 8 + .../message/fail/func-name-inferrer-arg.js | 10 + .../message/fail/func-name-inferrer-arg.out | 7 + .../{ => fail}/function-param-after-rest.js | 0 .../{ => fail}/function-param-after-rest.out | 0 .../{ => fail}/function-sent-escaped.js | 0 .../{ => fail}/function-sent-escaped.out | 0 .../message/{ => fail}/generators-throw1.js | 0 .../message/{ => fail}/generators-throw1.out | 0 .../message/{ => fail}/generators-throw2.js | 0 .../message/{ => fail}/generators-throw2.out | 0 .../get-iterator-return-non-receiver.js | 0 .../get-iterator-return-non-receiver.out | 0 .../test/message/{ => fail}/get-iterator1.js | 0 .../test/message/{ => fail}/get-iterator1.out | 0 .../test/message/{ => fail}/import-as-eval.js | 0 .../message/{ => fail}/import-as-eval.out | 0 .../{ => fail}/import-as-redeclaration.js | 0 .../{ => fail}/import-as-redeclaration.out | 0 .../{ => fail}/import-as-reserved-word.js | 0 .../{ => fail}/import-as-reserved-word.out | 0 .../v8/test/message/{ => fail}/import-eval.js | 0 .../test/message/{ => fail}/import-eval.out | 0 .../{ => fail}/import-redeclaration.js | 0 .../{ => fail}/import-redeclaration.out | 0 .../{ => fail}/import-reserved-word.js | 0 .../{ => fail}/import-reserved-word.out | 0 .../{ => fail}/instanceof-noncallable.js | 0 .../{ => fail}/instanceof-noncallable.out | 0 .../{ => fail}/instanceof-nonobject.js | 0 .../{ => fail}/instanceof-nonobject.out | 0 .../message/{ => fail}/invalid-spread-2.js | 0 .../message/{ => fail}/invalid-spread-2.out | 0 .../test/message/{ => fail}/invalid-spread.js | 0 .../message/{ => fail}/invalid-spread.out | 0 deps/v8/test/message/{ => fail}/isvar.js | 0 deps/v8/test/message/{ => fail}/isvar.out | 0 ...destructuring-brace-in-single-statement.js | 0 ...estructuring-brace-in-single-statement.out | 0 ...ation-destructuring-in-single-statement.js | 0 ...tion-destructuring-in-single-statement.out | 0 ...lexical-declaration-in-single-statement.js | 0 ...exical-declaration-in-single-statement.out | 0 .../let-lexical-name-in-array-prohibited.js | 0 .../let-lexical-name-in-array-prohibited.out | 0 .../let-lexical-name-in-object-prohibited.js | 0 .../let-lexical-name-in-object-prohibited.out | 0 .../{ => fail}/let-lexical-name-prohibited.js | 0 .../let-lexical-name-prohibited.out | 0 .../test/message/{ => fail}/modules-cycle1.js | 0 .../message/{ => fail}/modules-cycle1.out | 4 +- .../test/message/{ => fail}/modules-cycle2.js | 0 .../message/{ => fail}/modules-cycle2.out | 4 +- .../test/message/{ => fail}/modules-cycle3.js | 0 .../message/{ => fail}/modules-cycle3.out | 4 +- .../test/message/{ => fail}/modules-cycle4.js | 0 .../message/{ => fail}/modules-cycle4.out | 4 +- .../test/message/{ => fail}/modules-cycle5.js | 0 .../message/{ => fail}/modules-cycle5.out | 4 +- .../test/message/{ => fail}/modules-cycle6.js | 0 deps/v8/test/message/fail/modules-cycle6.out | 5 + .../{ => fail}/modules-duplicate-export1.js | 0 .../{ => fail}/modules-duplicate-export1.out | 0 .../{ => fail}/modules-duplicate-export2.js | 0 .../{ => fail}/modules-duplicate-export2.out | 0 .../{ => fail}/modules-duplicate-export3.js | 0 .../{ => fail}/modules-duplicate-export3.out | 0 .../{ => fail}/modules-duplicate-export4.js | 0 .../{ => fail}/modules-duplicate-export4.out | 0 .../{ => fail}/modules-import-redeclare1.js | 0 .../{ => fail}/modules-import-redeclare1.out | 0 .../{ => fail}/modules-import-redeclare2.js | 0 .../{ => fail}/modules-import-redeclare2.out | 0 .../{ => fail}/modules-import-redeclare3.js | 0 .../{ => fail}/modules-import-redeclare3.out | 0 .../message/{ => fail}/modules-import1.js | 0 deps/v8/test/message/fail/modules-import1.out | 5 + .../message/{ => fail}/modules-import2.js | 0 deps/v8/test/message/fail/modules-import2.out | 5 + .../message/{ => fail}/modules-import3.js | 0 deps/v8/test/message/fail/modules-import3.out | 5 + .../message/{ => fail}/modules-import4.js | 0 deps/v8/test/message/fail/modules-import4.out | 5 + .../message/{ => fail}/modules-import5.js | 0 deps/v8/test/message/fail/modules-import5.out | 5 + .../message/{ => fail}/modules-import6.js | 0 deps/v8/test/message/fail/modules-import6.out | 5 + .../message/{ => fail}/modules-skip-cycle2.js | 0 .../message/{ => fail}/modules-skip-cycle3.js | 0 .../message/{ => fail}/modules-skip-cycle5.js | 0 .../message/{ => fail}/modules-skip-cycle6.js | 0 .../{ => fail}/modules-star-conflict1.js | 2 +- .../message/fail/modules-star-conflict1.out | 5 + .../{ => fail}/modules-star-conflict2.js | 4 +- .../message/fail/modules-star-conflict2.out | 5 + .../{ => fail}/modules-star-default.js | 0 .../message/fail/modules-star-default.out | 5 + .../{ => fail}/modules-undefined-export1.js | 0 .../{ => fail}/modules-undefined-export1.out | 0 .../{ => fail}/modules-undefined-export2.js | 0 .../{ => fail}/modules-undefined-export2.out | 0 .../{ => fail}/new-target-assignment.js | 0 .../{ => fail}/new-target-assignment.out | 0 .../message/{ => fail}/new-target-escaped.js | 0 .../message/{ => fail}/new-target-escaped.out | 0 .../message/{ => fail}/new-target-for-loop.js | 0 .../{ => fail}/new-target-for-loop.out | 0 .../{ => fail}/new-target-postfix-op.js | 0 .../{ => fail}/new-target-postfix-op.out | 0 .../{ => fail}/new-target-prefix-op.js | 0 .../{ => fail}/new-target-prefix-op.out | 0 .../{ => fail}/nf-yield-in-generator.js | 0 .../{ => fail}/nf-yield-in-generator.out | 0 .../nf-yield-strict-in-generator.js | 0 .../nf-yield-strict-in-generator.out | 0 .../message/{ => fail}/nf-yield-strict.js | 0 .../message/{ => fail}/nf-yield-strict.out | 0 .../message/{ => fail}/nfe-yield-generator.js | 0 .../{ => fail}/nfe-yield-generator.out | 0 .../message/{ => fail}/nfe-yield-strict.js | 0 .../message/{ => fail}/nfe-yield-strict.out | 0 .../test/message/{ => fail}/non-alphanum.js | 0 .../test/message/{ => fail}/non-alphanum.out | 4 +- .../fail/object-binding-pattern-await1.js | 9 + .../fail/object-binding-pattern-await1.out | 4 + .../object-rest-assignment-pattern.js | 0 .../object-rest-assignment-pattern.out | 0 .../{ => fail}/object-rest-binding-pattern.js | 0 .../object-rest-binding-pattern.out | 0 .../{ => fail}/overwritten-builtins.js | 0 .../{ => fail}/overwritten-builtins.out | 0 .../message/{ => fail}/paren_in_arg_string.js | 0 .../{ => fail}/paren_in_arg_string.out | 0 .../test/message/{ => fail}/redeclaration1.js | 0 .../message/{ => fail}/redeclaration1.out | 0 .../test/message/{ => fail}/redeclaration2.js | 0 .../message/{ => fail}/redeclaration2.out | 0 .../test/message/{ => fail}/redeclaration3.js | 0 .../message/{ => fail}/redeclaration3.out | 0 .../replacement-marker-as-argument.js | 0 .../replacement-marker-as-argument.out | 0 .../rest-param-class-setter-strict.js | 0 .../rest-param-class-setter-strict.out | 0 .../rest-param-object-setter-sloppy.js | 0 .../rest-param-object-setter-sloppy.out | 0 .../rest-param-object-setter-strict.js | 0 .../rest-param-object-setter-strict.out | 0 deps/v8/test/message/{ => fail}/settimeout.js | 0 .../v8/test/message/{ => fail}/settimeout.out | 0 .../test/message/{ => fail}/simple-throw.js | 0 .../test/message/{ => fail}/simple-throw.out | 0 .../{ => fail}/strict-formal-parameters.js | 0 .../{ => fail}/strict-formal-parameters.out | 0 .../message/{ => fail}/strict-octal-number.js | 0 .../{ => fail}/strict-octal-number.out | 0 .../message/{ => fail}/strict-octal-string.js | 0 .../{ => fail}/strict-octal-string.out | 0 .../strict-octal-use-strict-after.js | 0 .../strict-octal-use-strict-after.out | 0 .../strict-octal-use-strict-before.js | 0 .../strict-octal-use-strict-before.out | 0 .../v8/test/message/{ => fail}/strict-with.js | 0 .../test/message/{ => fail}/strict-with.out | 0 .../super-constructor-extra-statement.js | 0 .../super-constructor-extra-statement.out | 0 .../message/{ => fail}/super-constructor.js | 0 .../message/{ => fail}/super-constructor.out | 0 .../message/{ => fail}/super-in-function.js | 0 .../message/{ => fail}/super-in-function.out | 0 .../message/{ => fail}/tonumber-symbol.js | 0 .../message/{ => fail}/tonumber-symbol.out | 0 ...atch-finally-throw-in-catch-and-finally.js | 0 ...tch-finally-throw-in-catch-and-finally.out | 0 .../try-catch-finally-throw-in-catch.js | 0 .../try-catch-finally-throw-in-catch.out | 0 .../try-catch-finally-throw-in-finally.js | 0 .../try-catch-finally-throw-in-finally.out | 0 .../{ => fail}/try-catch-lexical-conflict.js | 0 .../{ => fail}/try-catch-lexical-conflict.out | 0 .../{ => fail}/try-catch-variable-conflict.js | 0 .../try-catch-variable-conflict.out | 0 .../try-finally-throw-in-finally.js | 0 .../try-finally-throw-in-finally.out | 0 .../try-finally-throw-in-try-and-finally.js | 0 .../try-finally-throw-in-try-and-finally.out | 0 .../{ => fail}/try-finally-throw-in-try.js | 0 .../{ => fail}/try-finally-throw-in-try.out | 0 deps/v8/test/message/{ => fail}/typedarray.js | 0 .../v8/test/message/{ => fail}/typedarray.out | 0 .../{ => fail}/undefined-keyed-property.js | 0 .../{ => fail}/undefined-keyed-property.out | 0 .../{ => fail}/unicode-escape-invalid-2.js | 0 .../{ => fail}/unicode-escape-invalid-2.out | 0 .../{ => fail}/unicode-escape-invalid.js | 0 .../{ => fail}/unicode-escape-invalid.out | 0 .../{ => fail}/unicode-escape-undefined.js | 0 .../{ => fail}/unicode-escape-undefined.out | 0 .../{ => fail}/unterminated-arg-list.js | 0 .../{ => fail}/unterminated-arg-list.out | 0 .../{ => fail}/var-conflict-in-with.js | 0 .../{ => fail}/var-conflict-in-with.out | 0 .../message/{ => fail}/wasm-function-name.js | 0 .../message/{ => fail}/wasm-function-name.out | 0 .../wasm-module-and-function-name.js | 0 .../wasm-module-and-function-name.out | 0 .../message/{ => fail}/wasm-module-name.js | 0 .../message/{ => fail}/wasm-module-name.out | 0 .../test/message/{ => fail}/wasm-no-name.js | 0 .../test/message/{ => fail}/wasm-no-name.out | 0 deps/v8/test/message/{ => fail}/wasm-trap.js | 0 deps/v8/test/message/{ => fail}/wasm-trap.out | 0 .../{ => fail}/yield-in-arrow-param.js | 0 .../{ => fail}/yield-in-arrow-param.out | 0 .../{ => fail}/yield-in-generator-param.js | 0 .../{ => fail}/yield-in-generator-param.out | 0 deps/v8/test/message/message.status | 7 +- deps/v8/test/message/modules-cycle6.out | 5 - deps/v8/test/message/modules-import1.out | 5 - deps/v8/test/message/modules-import2.out | 5 - deps/v8/test/message/modules-import3.out | 5 - deps/v8/test/message/modules-import4.out | 5 - deps/v8/test/message/modules-import5.out | 5 - deps/v8/test/message/modules-import6.out | 5 - .../test/message/modules-star-conflict1.out | 5 - .../test/message/modules-star-conflict2.out | 5 - deps/v8/test/message/modules-star-default.out | 5 - ...ect-binding-pattern-await-computed-name.js | 9 + ...t-binding-pattern-await-computed-name.out} | 0 .../regress/{ => fail}/regress-1527.js | 0 .../regress/{ => fail}/regress-1527.out | 0 .../regress/{ => fail}/regress-3995.js | 0 .../regress/{ => fail}/regress-3995.out | 0 .../regress/{ => fail}/regress-4266.js | 0 .../regress/{ => fail}/regress-4266.out | 0 .../regress/{ => fail}/regress-5727.js | 0 .../regress/{ => fail}/regress-5727.out | 0 .../message/regress/{ => fail}/regress-73.js | 0 .../message/regress/{ => fail}/regress-73.out | 0 .../message/regress/{ => fail}/regress-75.js | 0 .../message/regress/{ => fail}/regress-75.out | 0 .../{ => fail}/regress-crbug-661579.js | 0 .../{ => fail}/regress-crbug-661579.out | 0 .../{ => fail}/regress-crbug-669017.js | 0 .../{ => fail}/regress-crbug-669017.out | 0 .../{ => fail}/regress-crbug-691194.js | 0 .../{ => fail}/regress-crbug-691194.out | 0 .../test/message/regress/regress-4829-1.out | 8 - .../v8/test/message/regress/regress-4829-2.js | 9 - .../test/message/regress/regress-4829-2.out | 8 - deps/v8/test/message/testcfg.py | 107 +- deps/v8/test/mjsunit/array-iteration.js | 95 + deps/v8/test/mjsunit/array-lastindexof.js | 10 + deps/v8/test/mjsunit/array-sort.js | 4 + .../test/mjsunit/code-coverage-block-noopt.js | 4 +- .../test/mjsunit/code-coverage-block-opt.js | 5 +- deps/v8/test/mjsunit/code-coverage-block.js | 216 +- .../test/mjsunit/compiler-regress-787301.js | 26 + .../mjsunit/compiler/deopt-array-builtins.js | 148 + .../test/mjsunit/compiler/deopt-array-push.js | 74 + .../compiler/deopt-string-outofbounds.js | 24 + .../mjsunit/compiler/escape-analysis-13.js | 2 +- .../mjsunit/compiler/escape-analysis-15.js | 2 +- .../compiler/escape-analysis-phi-type.js | 2 +- .../v8/test/mjsunit/compiler/function-bind.js | 209 + deps/v8/test/mjsunit/compiler/instanceof.js | 18 + .../materialize-dictionary-properties.js | 18 + .../materialize-mutable-heap-number.js | 22 + deps/v8/test/mjsunit/compiler/math-ceil.js | 39 + deps/v8/test/mjsunit/compiler/math-round.js | 39 + deps/v8/test/mjsunit/compiler/math-trunc.js | 39 + .../test/mjsunit/compiler/nary-binary-ops.js | 150 + .../test/mjsunit/compiler/new-cons-string.js | 71 + deps/v8/test/mjsunit/compiler/object-is.js | 31 + .../v8/test/mjsunit/compiler/osr-arguments.js | 17 + deps/v8/test/mjsunit/compiler/reflect-get.js | 68 + deps/v8/test/mjsunit/compiler/reflect-has.js | 67 + deps/v8/test/mjsunit/compiler/regress-7121.js | 10 + .../test/mjsunit/compiler/regress-772420.js | 28 + .../test/mjsunit/compiler/regress-772872.js | 13 + .../test/mjsunit/compiler/regress-773954.js | 21 + .../test/mjsunit/compiler/regress-786521.js | 23 + .../test/mjsunit/compiler/regress-788539.js | 37 + .../test/mjsunit/compiler/regress-791245.js | 17 + .../test/mjsunit/compiler/regress-793863.js | 12 + deps/v8/test/mjsunit/compiler/string-slice.js | 33 + .../type-speculative-safe-integer-add.js | 51 + deps/v8/test/mjsunit/console.js | 28 + deps/v8/test/mjsunit/d8/.gitignore | 1 + deps/v8/test/mjsunit/{ => d8}/d8-os.js | 0 .../mjsunit/{ => d8}/d8-performance-now.js | 0 .../{ => d8}/d8-worker-sharedarraybuffer.js | 0 .../{ => d8}/d8-worker-spawn-worker.js | 0 deps/v8/test/mjsunit/{ => d8}/d8-worker.js | 0 deps/v8/test/mjsunit/d8/enable-tracing.js | 8 + deps/v8/test/mjsunit/deserialize-reference.js | 2 +- deps/v8/test/mjsunit/dictionary-prototypes.js | 409 ++ .../mjsunit/disallow-codegen-from-strings.js | 9 + deps/v8/test/mjsunit/es6/array-find.js | 34 + deps/v8/test/mjsunit/es6/array-findindex.js | 34 + .../test/mjsunit/es6/array-iterator-turbo.js | 2 +- .../class-computed-property-names-super.js | 92 + deps/v8/test/mjsunit/es6/classes.js | 39 + deps/v8/test/mjsunit/es6/completion.js | 7 + deps/v8/test/mjsunit/es6/regexp-sticky.js | 6 +- .../sloppy-no-duplicate-generators.js | 2 - deps/v8/test/mjsunit/es6/string-match.js | 5 +- deps/v8/test/mjsunit/es6/string-search.js | 5 +- deps/v8/test/mjsunit/es6/templates.js | 27 +- deps/v8/test/mjsunit/es6/typedarray.js | 11 + .../mjsunit/es6/unicode-character-ranges.js | 2 - .../mjsunit/es6/unicode-regexp-backrefs.js | 2 - .../mjsunit/es6/unicode-regexp-last-index.js | 2 - .../{harmony => es9}/object-rest-basic.js | 1 - .../{harmony => es9}/object-spread-basic.js | 2 - .../{harmony => es9}/regexp-lookbehind.js | 2 - .../{harmony => es9}/template-escapes.js | 2 - deps/v8/test/mjsunit/filter-element-kinds.js | 144 + deps/v8/test/mjsunit/function-call.js | 91 +- deps/v8/test/mjsunit/global-accessors.js | 10 +- deps/v8/test/mjsunit/global-prototypes.js | 354 ++ .../mjsunit/harmony/array-sort-comparefn.js | 10 + deps/v8/test/mjsunit/harmony/bigint/add.js | 109 + deps/v8/test/mjsunit/harmony/bigint/and.js | 109 + .../test/mjsunit/harmony/bigint/as-int-n.js | 300 + .../harmony/{bigint.js => bigint/basics.js} | 366 +- .../mjsunit/harmony/bigint/comparisons.js | 525 ++ deps/v8/test/mjsunit/harmony/bigint/dec.js | 86 + deps/v8/test/mjsunit/harmony/bigint/div.js | 109 + deps/v8/test/mjsunit/harmony/bigint/exp.js | 43 + deps/v8/test/mjsunit/harmony/bigint/inc.js | 86 + deps/v8/test/mjsunit/harmony/bigint/json.js | 81 + deps/v8/test/mjsunit/harmony/bigint/mod.js | 109 + deps/v8/test/mjsunit/harmony/bigint/mul.js | 109 + deps/v8/test/mjsunit/harmony/bigint/neg.js | 86 + deps/v8/test/mjsunit/harmony/bigint/not.js | 86 + deps/v8/test/mjsunit/harmony/bigint/or.js | 109 + .../mjsunit/harmony/bigint/regressions.js | 20 + deps/v8/test/mjsunit/harmony/bigint/sar.js | 113 + deps/v8/test/mjsunit/harmony/bigint/shl.js | 109 + deps/v8/test/mjsunit/harmony/bigint/sub.js | 109 + .../test/mjsunit/harmony/bigint/tonumber.js | 39 + .../mjsunit/harmony/bigint/too-big-literal.js | 14 + deps/v8/test/mjsunit/harmony/bigint/turbo.js | 193 + deps/v8/test/mjsunit/harmony/bigint/xor.js | 109 + .../mjsunit/harmony/harmony-string-pad-end.js | 11 + .../harmony/harmony-string-pad-start.js | 11 + .../test/mjsunit/harmony/modules-import-15.js | 3 +- .../mjsunit/harmony/modules-import-meta.js | 44 + .../modules-skip-export-import-meta.js | 7 + .../harmony/promise-prototype-finally.js | 10 + .../harmony/public-instance-class-fields.js | 676 +++ .../harmony/public-static-class-fields.js | 335 ++ .../mjsunit/harmony/regexp-named-captures.js | 123 +- .../mjsunit/harmony/regexp-property-binary.js | 7 +- .../mjsunit/harmony/regexp-property-lu-ui.js | 24 +- .../mjsunit/harmony/regexp-property-lu-ui0.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui1.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui2.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui3.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui4.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui5.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui6.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui7.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui8.js | 8 + .../mjsunit/harmony/regexp-property-lu-ui9.js | 8 + .../mjsunit/harmony/regress/regress-6100.js | 2 - .../sloppy-legacy-duplicate-generators.js | 60 - deps/v8/test/mjsunit/ic-lookup-on-receiver.js | 44 + .../ignition/dynamic-global-inside-block.js | 11 + deps/v8/test/mjsunit/ignition/print-ast.js | 2 +- deps/v8/test/mjsunit/messages.js | 118 +- deps/v8/test/mjsunit/migrations.js | 4 - deps/v8/test/mjsunit/mjsunit.isolate | 1 + deps/v8/test/mjsunit/mjsunit.js | 22 +- deps/v8/test/mjsunit/mjsunit.status | 114 +- ...bject-literal-modified-object-prototype.js | 25 + deps/v8/test/mjsunit/object-literal.js | 452 +- deps/v8/test/mjsunit/optimized-array-find.js | 442 ++ .../test/mjsunit/optimized-array-findindex.js | 442 ++ deps/v8/test/mjsunit/optimized-filter.js | 440 ++ deps/v8/test/mjsunit/optimized-map.js | 61 + .../regexp-modifiers-autogenerated-i18n.js | 81 + .../mjsunit/regexp-modifiers-autogenerated.js | 74 + .../test/mjsunit/regexp-modifiers-dotall.js | 27 + deps/v8/test/mjsunit/regexp-modifiers-i18n.js | 138 + deps/v8/test/mjsunit/regexp-modifiers.js | 146 + deps/v8/test/mjsunit/regress/regress-1257.js | 40 +- deps/v8/test/mjsunit/regress/regress-2618.js | 7 +- .../v8/test/mjsunit/regress/regress-353004.js | 27 +- deps/v8/test/mjsunit/regress/regress-5902.js | 11 +- .../v8/test/mjsunit/regress/regress-678917.js | 5 +- deps/v8/test/mjsunit/regress/regress-6941.js | 20 + deps/v8/test/mjsunit/regress/regress-6948.js | 20 + deps/v8/test/mjsunit/regress/regress-6970.js | 6 + deps/v8/test/mjsunit/regress/regress-6989.js | 85 + deps/v8/test/mjsunit/regress/regress-6991.js | 17 + .../v8/test/mjsunit/regress/regress-7014-1.js | 26 + .../v8/test/mjsunit/regress/regress-7014-2.js | 30 + deps/v8/test/mjsunit/regress/regress-7026.js | 17 + .../v8/test/mjsunit/regress/regress-707187.js | 2 +- deps/v8/test/mjsunit/regress/regress-7115.js | 33 + deps/v8/test/mjsunit/regress/regress-7135.js | 17 + .../v8/test/mjsunit/regress/regress-752764.js | 5 +- .../v8/test/mjsunit/regress/regress-774824.js | 17 + .../v8/test/mjsunit/regress/regress-775888.js | 21 + .../v8/test/mjsunit/regress/regress-776309.js | 27 + .../v8/test/mjsunit/regress/regress-778574.js | 8 + .../v8/test/mjsunit/regress/regress-778668.js | 20 + .../v8/test/mjsunit/regress/regress-779407.js | 13 + .../v8/test/mjsunit/regress/regress-781218.js | 12 +- .../v8/test/mjsunit/regress/regress-782754.js | 18 + .../v8/test/mjsunit/regress/regress-783051.js | 10 + .../v8/test/mjsunit/regress/regress-783119.js | 10 + .../v8/test/mjsunit/regress/regress-784080.js | 26 + .../v8/test/mjsunit/regress/regress-784862.js | 10 + .../v8/test/mjsunit/regress/regress-784863.js | 11 + .../v8/test/mjsunit/regress/regress-784990.js | 30 + .../v8/test/mjsunit/regress/regress-785804.js | 19 + .../v8/test/mjsunit/regress/regress-786573.js | 16 + .../v8/test/mjsunit/regress/regress-786784.js | 34 + .../v8/test/mjsunit/regress/regress-791334.js | 8 + .../v8/test/mjsunit/regress/regress-791345.js | 15 + .../v8/test/mjsunit/regress/regress-791958.js | 15 + .../v8/test/mjsunit/regress/regress-793588.js | 13 + .../v8/test/mjsunit/regress/regress-793793.js | 7 + .../v8/test/mjsunit/regress/regress-794822.js | 19 + .../regress-794825.js} | 53 +- .../mjsunit/regress/regress-crbug-465564.js | 2 +- .../mjsunit/regress/regress-crbug-570241.js | 2 - .../mjsunit/regress/regress-crbug-747062.js | 16 + .../mjsunit/regress/regress-crbug-766635.js | 32 + .../mjsunit/regress/regress-crbug-768875.js | 28 + .../mjsunit/regress/regress-crbug-774459.js | 20 + .../mjsunit/regress/regress-crbug-774860.js | 15 + .../mjsunit/regress/regress-crbug-776511.js | 35 + .../mjsunit/regress/regress-crbug-778952.js | 9 + .../mjsunit/regress/regress-crbug-779344.js | 10 + .../mjsunit/regress/regress-crbug-779367.js | 17 + .../mjsunit/regress/regress-crbug-779457.js | 27 + .../mjsunit/regress/regress-crbug-781116-1.js | 23 + .../mjsunit/regress/regress-crbug-781116-2.js | 23 + .../mjsunit/regress/regress-crbug-781506-1.js | 12 + .../mjsunit/regress/regress-crbug-781506-2.js | 13 + .../mjsunit/regress/regress-crbug-781506-3.js | 13 + .../mjsunit/regress/regress-crbug-781583.js | 25 + .../mjsunit/regress/regress-crbug-783902.js | 11 + .../mjsunit/regress/regress-crbug-784835.js | 13 + .../mjsunit/regress/regress-crbug-786020.js | 8 + .../mjsunit/regress/regress-crbug-786723.js | 19 + .../mjsunit/regress/regress-crbug-789764.js | 15 + .../mjsunit/regress/regress-crbug-791245-1.js | 18 + .../mjsunit/regress/regress-crbug-791245-2.js | 18 + .../mjsunit/regress/regress-crbug-791256.js | 12 + .../test/mjsunit/regress/regress-v8-6906.js | 15 + .../mjsunit/regress/string-compare-memcmp.js | 2 +- .../{regression-02256.js => regress-02256.js} | 0 ...regression-02256b.js => regress-02256b.js} | 0 .../{regression-02862.js => regress-02862.js} | 0 .../{regression-5531.js => regress-5531.js} | 0 .../{regression-5800.js => regress-5800.js} | 0 .../{regression-5884.js => regress-5884.js} | 0 .../{regression-6054.js => regress-6054.js} | 0 .../{regression-6164.js => regress-6164.js} | 0 ...regression-643595.js => regress-643595.js} | 0 ...regression-644682.js => regress-644682.js} | 0 ...regression-647649.js => regress-647649.js} | 0 ...regression-648079.js => regress-648079.js} | 0 ...regression-651961.js => regress-651961.js} | 0 ...regression-654377.js => regress-654377.js} | 0 ...regression-663994.js => regress-663994.js} | 0 ...regression-666741.js => regress-666741.js} | 0 ...regression-667745.js => regress-667745.js} | 0 ...regression-670683.js => regress-670683.js} | 0 ...regression-674447.js => regress-674447.js} | 0 ...regression-680938.js => regress-680938.js} | 0 ...regression-684858.js => regress-684858.js} | 0 ...regression-688876.js => regress-688876.js} | 0 ...regression-689450.js => regress-689450.js} | 0 .../test/mjsunit/regress/wasm/regress-6931.js | 30 + .../mjsunit/regress/wasm/regress-694433.js | 14 + ...regression-698587.js => regress-698587.js} | 0 ...regression-699485.js => regress-699485.js} | 0 ...regression-702460.js => regress-702460.js} | 0 ...regression-702839.js => regress-702839.js} | 0 .../test/mjsunit/regress/wasm/regress-7033.js | 20 + .../test/mjsunit/regress/wasm/regress-7035.js | 31 + ...regression-703568.js => regress-703568.js} | 0 .../test/mjsunit/regress/wasm/regress-7049.js | 54 + ...regression-708714.js => regress-708714.js} | 0 ...regression-710844.js => regress-710844.js} | 0 ...regression-711203.js => regress-711203.js} | 0 ...ression-715216-a.js => regress-715216a.js} | 0 ...ression-715216-b.js => regress-715216b.js} | 0 ...regression-717056.js => regress-717056.js} | 0 ...regression-717194.js => regress-717194.js} | 0 ...regression-719175.js => regress-719175.js} | 0 ...regression-722445.js => regress-722445.js} | 0 ...regression-724846.js => regress-724846.js} | 0 ...regression-724851.js => regress-724851.js} | 0 ...regression-724972.js => regress-724972.js} | 0 ...regression-727219.js => regress-727219.js} | 0 ...regression-727222.js => regress-727222.js} | 0 ...regression-727560.js => regress-727560.js} | 0 ...regression-729991.js => regress-729991.js} | 0 ...regression-731351.js => regress-731351.js} | 0 ...regression-734108.js => regress-734108.js} | 0 ...regression-734246.js => regress-734246.js} | 0 ...regression-734345.js => regress-734345.js} | 0 ...regression-736584.js => regress-736584.js} | 0 ...regression-737069.js => regress-737069.js} | 0 ...regression-739768.js => regress-739768.js} | 0 ...regression-753496.js => regress-753496.js} | 0 ...regression-757217.js => regress-757217.js} | 0 ...regression-763439.js => regress-763439.js} | 0 ...regression-763697.js => regress-763697.js} | 0 .../mjsunit/regress/wasm/regress-766003.js | 17 + ...regression-769846.js => regress-769846.js} | 0 .../mjsunit/regress/wasm/regress-771243.js | 39 + .../mjsunit/regress/wasm/regress-772332.js | 33 + .../mjsunit/regress/wasm/regress-775366.js | 29 + .../mjsunit/regress/wasm/regress-778917.js | 20 + .../mjsunit/regress/wasm/regress-782280.js | 33 + .../mjsunit/regress/wasm/regress-784050.js | 25 + .../mjsunit/regress/wasm/regress-789952.js | 40 + .../mjsunit/regress/wasm/regress-791810.js | 21 + .../mjsunit/regress/wasm/regress-793551.js | 20 + .../test/mjsunit/serialize-after-execute.js | 15 + .../test/mjsunit/serialize-embedded-error.js | 2 +- deps/v8/test/mjsunit/serialize-ic.js | 2 +- deps/v8/test/mjsunit/splice-proxy.js | 13 + deps/v8/test/mjsunit/string-equal.js | 17 + deps/v8/test/mjsunit/testcfg.py | 103 +- deps/v8/test/mjsunit/tools/csvparser.js | 27 +- deps/v8/test/mjsunit/tools/dumpcpp.js | 2 +- deps/v8/test/mjsunit/tools/profviz-test.log | 4966 ++++++++--------- deps/v8/test/mjsunit/tools/profviz.js | 2 +- .../tools/tickprocessor-test-func-info.log | 16 +- .../test/mjsunit/tools/tickprocessor-test.log | 22 +- deps/v8/test/mjsunit/tools/tickprocessor.js | 4 +- deps/v8/test/mjsunit/wasm/atomics.js | 16 +- .../mjsunit/wasm/default-liftoff-setting.js | 21 + deps/v8/test/mjsunit/wasm/disallow-codegen.js | 61 + deps/v8/test/mjsunit/wasm/errors.js | 18 +- deps/v8/test/mjsunit/wasm/ffi-error.js | 58 +- deps/v8/test/mjsunit/wasm/ffi.js | 15 + deps/v8/test/mjsunit/wasm/globals.js | 116 + deps/v8/test/mjsunit/wasm/indirect-tables.js | 40 + deps/v8/test/mjsunit/wasm/interpreter.js | 95 + deps/v8/test/mjsunit/wasm/js-api.js | 18 + deps/v8/test/mjsunit/wasm/lazy-compilation.js | 100 + deps/v8/test/mjsunit/wasm/liftoff.js | 36 + .../test/mjsunit/wasm/memory-external-call.js | 189 + deps/v8/test/mjsunit/wasm/multi-value.js | 322 ++ deps/v8/test/mjsunit/wasm/table-grow.js | 4 +- .../wasm/test-import-export-wrapper.js | 25 + .../mjsunit/wasm/test-wasm-module-builder.js | 2 +- deps/v8/test/mjsunit/wasm/trap-location.js | 2 +- .../mjsunit/wasm/user-properties-common.js | 52 + .../wasm/user-properties-constructed.js | 26 + .../mjsunit/wasm/user-properties-exported.js | 34 + .../mjsunit/wasm/user-properties-module.js | 54 + .../mjsunit/wasm/user-properties-reexport.js | 31 + deps/v8/test/mjsunit/wasm/user-properties.js | 169 - deps/v8/test/mjsunit/wasm/wasm-constants.js | 8 +- deps/v8/test/mjsunit/wasm/worker-memory.js | 69 + deps/v8/test/mjsunit/whitespaces.js | 40 +- deps/v8/test/mjsunit/whitespaces0.js | 7 + deps/v8/test/mjsunit/whitespaces1.js | 7 + deps/v8/test/mjsunit/whitespaces2.js | 7 + deps/v8/test/mjsunit/whitespaces3.js | 7 + deps/v8/test/mjsunit/whitespaces4.js | 7 + deps/v8/test/mjsunit/whitespaces5.js | 7 + deps/v8/test/mjsunit/whitespaces6.js | 7 + deps/v8/test/mjsunit/whitespaces7.js | 7 + deps/v8/test/mjsunit/whitespaces8.js | 7 + deps/v8/test/mjsunit/whitespaces9.js | 7 + deps/v8/test/mkgrokdump/mkgrokdump.cc | 9 +- deps/v8/test/mkgrokdump/testcfg.py | 33 +- deps/v8/test/mozilla/mozilla.status | 19 +- deps/v8/test/mozilla/testcfg.py | 53 +- deps/v8/test/perf.isolate | 2 +- deps/v8/test/preparser/testcfg.py | 64 +- deps/v8/test/promises-aplus/testcfg.py | 94 +- deps/v8/test/test262/test262.status | 115 +- deps/v8/test/test262/testcfg.py | 240 +- deps/v8/test/unittests/BUILD.gn | 7 +- deps/v8/test/unittests/allocation-unittest.cc | 164 + .../unittests/api/access-check-unittest.cc | 9 +- .../test/unittests/api/v8-object-unittest.cc | 5 +- .../unittests/asmjs/asm-scanner-unittest.cc | 12 +- .../unittests/asmjs/asm-types-unittest.cc | 4 +- deps/v8/test/unittests/base/bits-unittest.cc | 127 +- .../unittests/base/functional-unittest.cc | 21 +- .../test/unittests/base/logging-unittest.cc | 46 +- .../test/unittests/base/ostreams-unittest.cc | 4 +- .../base/platform/platform-unittest.cc | 117 - .../unittests/base/template-utils-unittest.cc | 57 + .../utils/random-number-generator-unittest.cc | 201 +- deps/v8/test/unittests/bigint-unittest.cc | 115 + .../compiler-dispatcher-tracer-unittest.cc | 34 +- .../compiler-dispatcher-unittest.cc | 278 +- .../optimizing-compile-dispatcher-unittest.cc | 15 +- .../unoptimized-compile-job-unittest.cc | 270 +- .../arm/instruction-selector-arm-unittest.cc | 45 +- .../instruction-selector-arm64-unittest.cc | 317 +- .../compiler/bytecode-analysis-unittest.cc | 21 +- .../compiler/code-assembler-unittest.cc | 14 + .../dead-code-elimination-unittest.cc | 2 +- .../test/unittests/compiler/graph-unittest.cc | 9 +- .../test/unittests/compiler/graph-unittest.h | 3 + .../instruction-selector-ia32-unittest.cc | 2 +- .../compiler/int64-lowering-unittest.cc | 8 +- .../js-intrinsic-lowering-unittest.cc | 4 +- .../compiler/js-operator-unittest.cc | 1 - .../compiler/js-typed-lowering-unittest.cc | 74 +- .../compiler/loop-peeling-unittest.cc | 21 +- .../machine-operator-reducer-unittest.cc | 180 +- .../compiler/machine-operator-unittest.cc | 16 +- deps/v8/test/unittests/compiler/mips/OWNERS | 5 +- .../instruction-selector-mips-unittest.cc | 12 +- deps/v8/test/unittests/compiler/mips64/OWNERS | 5 +- .../instruction-selector-mips64-unittest.cc | 28 +- .../unittests/compiler/node-test-utils.cc | 1 + .../test/unittests/compiler/node-test-utils.h | 1 + .../test/unittests/compiler/node-unittest.cc | 7 +- .../unittests/compiler/schedule-unittest.cc | 6 +- .../simplified-operator-reducer-unittest.cc | 5 +- .../compiler/simplified-operator-unittest.cc | 16 +- .../compiler/state-values-utils-unittest.cc | 4 +- .../compiler/typed-optimization-unittest.cc | 83 +- .../test/unittests/compiler/typer-unittest.cc | 25 +- .../value-numbering-reducer-unittest.cc | 2 + .../x64/instruction-selector-x64-unittest.cc | 14 +- deps/v8/test/unittests/counters-unittest.cc | 340 +- .../unittests/eh-frame-iterator-unittest.cc | 18 +- .../unittests/eh-frame-writer-unittest.cc | 8 +- .../test/unittests/heap/gc-tracer-unittest.cc | 121 + deps/v8/test/unittests/heap/heap-unittest.cc | 2 +- .../test/unittests/heap/marking-unittest.cc | 14 +- .../bytecode-array-builder-unittest.cc | 139 +- .../bytecode-array-iterator-unittest.cc | 43 +- ...bytecode-array-random-iterator-unittest.cc | 149 +- .../bytecode-array-writer-unittest.cc | 6 + .../interpreter/bytecode-decoder-unittest.cc | 4 + .../interpreter/bytecode-node-unittest.cc | 8 +- .../bytecode-register-optimizer-unittest.cc | 9 +- .../unittests/interpreter/bytecode-utils.h | 21 +- .../interpreter/bytecodes-unittest.cc | 106 +- .../constant-array-builder-unittest.cc | 93 +- .../interpreter-assembler-unittest.cc | 6 +- .../interpreter-assembler-unittest.h | 2 + .../libplatform/default-platform-unittest.cc | 162 +- .../libplatform/task-queue-unittest.cc | 7 +- .../libplatform/worker-thread-unittest.cc | 16 +- deps/v8/test/unittests/object-unittest.cc | 59 +- .../unittests/parser/ast-value-unittest.cc | 51 + .../unittests/parser/preparser-unittest.cc | 12 +- deps/v8/test/unittests/run-all-unittests.cc | 15 +- .../source-position-table-unittest.cc | 22 +- deps/v8/test/unittests/test-helpers.cc | 11 - deps/v8/test/unittests/test-helpers.h | 1 - deps/v8/test/unittests/test-utils.cc | 37 +- deps/v8/test/unittests/test-utils.h | 58 +- deps/v8/test/unittests/testcfg.py | 70 + deps/v8/test/unittests/unicode-unittest.cc | 476 +- deps/v8/test/unittests/unittests.gyp | 7 +- deps/v8/test/unittests/unittests.isolate | 3 +- deps/v8/test/unittests/unittests.status | 4 - deps/v8/test/unittests/utils-unittest.cc | 113 + .../unittests/value-serializer-unittest.cc | 629 ++- .../test/unittests/wasm/decoder-unittest.cc | 142 +- .../wasm/function-body-decoder-unittest.cc | 254 +- .../unittests/wasm/leb-helper-unittest.cc | 34 +- .../wasm/loop-assignment-analysis-unittest.cc | 6 +- .../unittests/wasm/module-decoder-unittest.cc | 99 +- .../wasm/streaming-decoder-unittest.cc | 79 +- .../unittests/wasm/trap-handler-unittest.cc | 69 + .../wasm/wasm-code-manager-unittest.cc | 392 ++ .../test/unittests/wasm/wasm-heap-unittest.cc | 157 - .../unittests/wasm/wasm-macro-gen-unittest.cc | 2 +- deps/v8/test/wasm-spec-tests/testcfg.py | 20 +- .../v8/test/wasm-spec-tests/tests.tar.gz.sha1 | 2 +- .../class-syntax-declaration-expected.txt | 6 +- .../test/webkit/class-syntax-declaration.js | 6 +- .../class-syntax-expression-expected.txt | 6 +- .../v8/test/webkit/class-syntax-expression.js | 6 +- .../array-prototype-properties-expected.txt | 18 +- .../fast/js/array-prototype-properties.js | 2 +- .../test/webkit/resources/JSON-stringify.js | 4 +- .../webkit/run-json-stringify-expected.txt | 4 +- deps/v8/test/webkit/testcfg.py | 125 +- deps/v8/test/webkit/webkit.status | 6 - .../binutils/Linux_ia32/binutils.tar.bz2.sha1 | 2 +- .../binutils/Linux_x64/binutils.tar.bz2.sha1 | 2 +- deps/v8/third_party/colorama/LICENSE | 28 + deps/v8/third_party/colorama/README.v8 | 14 + .../CheckProtocolCompatibility.py | 2 +- .../inspector_protocol/CodeGenerator.py | 62 + .../ConvertProtocolToJSON.py | 183 + .../third_party/inspector_protocol/README.v8 | 2 +- .../lib/DispatcherBase_cpp.template | 60 +- .../lib/DispatcherBase_h.template | 7 +- .../lib/ErrorSupport_cpp.template | 10 + .../lib/ErrorSupport_h.template | 2 + .../lib/Values_cpp.template | 46 +- .../inspector_protocol/lib/Values_h.template | 3 + .../templates/TypeBuilder_cpp.template | 16 +- .../templates/TypeBuilder_h.template | 17 +- deps/v8/tools/BUILD.gn | 6 +- deps/v8/tools/android-sync.sh | 1 + deps/v8/tools/arguments.js | 78 + deps/v8/tools/bigint-tester.py | 347 ++ deps/v8/tools/callstats.html | 2 + deps/v8/tools/callstats.py | 1 + deps/v8/tools/csvparser.js | 106 +- deps/v8/tools/dev/gm.py | 3 +- deps/v8/tools/dump-cpp.py | 4 +- .../tools/foozzie/testdata/failure_output.txt | 4 +- deps/v8/tools/foozzie/v8_foozzie.py | 10 +- deps/v8/tools/foozzie/v8_suppressions.py | 13 +- deps/v8/tools/gcmole/download_gcmole_tools.py | 2 - deps/v8/tools/gcov.sh | 2 +- deps/v8/tools/gdb-v8-support.py | 52 + deps/v8/tools/gdbinit | 2 +- deps/v8/tools/gen-postmortem-metadata.py | 26 +- deps/v8/tools/grokdump.py | 67 +- deps/v8/tools/ic-explorer.html | 18 +- deps/v8/tools/ic-processor | 4 +- deps/v8/tools/ic-processor-driver.js | 2 +- deps/v8/tools/ic-processor.js | 102 +- deps/v8/tools/js2c.py | 5 +- deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py | 2 - deps/v8/tools/linux-tick-processor | 4 +- deps/v8/tools/memory/asan/blacklist_win.txt | 4 + deps/v8/tools/parser-shell.cc | 5 +- deps/v8/tools/perf-compare.py | 1 - deps/v8/tools/perf-to-html.py | 1 - deps/v8/tools/perf/statistics-for-json.R | 4 +- deps/v8/tools/plot-timer-events | 5 +- deps/v8/tools/predictable_wrapper.py | 66 + deps/v8/tools/presubmit.py | 34 +- deps/v8/tools/profview/profile-utils.js | 20 +- deps/v8/tools/profview/profview.js | 34 +- deps/v8/tools/profviz/profviz.js | 1 + deps/v8/tools/release/auto_roll.py | 11 +- deps/v8/tools/release/backport_node.py | 119 - deps/v8/tools/release/check_clusterfuzz.py | 3 +- deps/v8/tools/release/git_recipes.py | 5 +- deps/v8/tools/release/test_backport_node.py | 71 - deps/v8/tools/release/test_scripts.py | 3 +- deps/v8/tools/release/test_update_node.py | 119 - deps/v8/tools/release/testdata/v8/.gitignore | 4 - deps/v8/tools/release/testdata/v8/baz/v8_foo | 1 - deps/v8/tools/release/testdata/v8/baz/v8_new | 1 - deps/v8/tools/release/testdata/v8/new/v8_new | 1 - deps/v8/tools/release/testdata/v8/v8_foo | 1 - deps/v8/tools/release/testdata/v8/v8_new | 1 - deps/v8/tools/release/update_node.py | 7 +- deps/v8/tools/run-deopt-fuzzer.py | 488 +- deps/v8/tools/run-gc-fuzzer.py | 14 + .../{run-valgrind.gyp => run-num-fuzzer.gyp} | 6 +- deps/v8/tools/run-num-fuzzer.isolate | 20 + deps/v8/tools/run-tests.py | 969 +--- deps/v8/tools/run-valgrind.isolate | 29 - deps/v8/tools/run-valgrind.py | 102 - deps/v8/tools/run_perf.py | 173 +- deps/v8/tools/test-server.py | 215 - deps/v8/tools/testrunner/README | 168 - deps/v8/tools/testrunner/base_runner.py | 438 ++ deps/v8/tools/testrunner/deopt_fuzzer.py | 381 ++ deps/v8/tools/testrunner/gc_fuzzer.py | 345 ++ deps/v8/tools/testrunner/local/command.py | 181 + deps/v8/tools/testrunner/local/commands.py | 132 - deps/v8/tools/testrunner/local/execution.py | 247 +- .../v8/tools/testrunner/local/junit_output.py | 9 +- deps/v8/tools/testrunner/local/perfdata.py | 17 +- deps/v8/tools/testrunner/local/pool.py | 7 +- deps/v8/tools/testrunner/local/progress.py | 154 +- deps/v8/tools/testrunner/local/statusfile.py | 152 +- .../testrunner/local/statusfile_unittest.py | 26 +- deps/v8/tools/testrunner/local/testsuite.py | 371 +- .../testrunner/local/testsuite_unittest.py | 70 +- deps/v8/tools/testrunner/local/utils.py | 2 +- deps/v8/tools/testrunner/local/variants.py | 29 +- deps/v8/tools/testrunner/local/verbose.py | 50 +- deps/v8/tools/testrunner/network/__init__.py | 26 - deps/v8/tools/testrunner/network/distro.py | 90 - deps/v8/tools/testrunner/network/endpoint.py | 125 - .../testrunner/network/network_execution.py | 253 - deps/v8/tools/testrunner/objects/context.py | 15 - deps/v8/tools/testrunner/objects/output.py | 11 +- deps/v8/tools/testrunner/objects/peer.py | 80 - deps/v8/tools/testrunner/objects/testcase.py | 229 +- .../v8/tools/testrunner/objects/workpacket.py | 90 - deps/v8/tools/testrunner/server/__init__.py | 26 - .../v8/tools/testrunner/server/compression.py | 111 - deps/v8/tools/testrunner/server/constants.py | 51 - deps/v8/tools/testrunner/server/daemon.py | 147 - .../tools/testrunner/server/local_handler.py | 119 - deps/v8/tools/testrunner/server/main.py | 245 - .../testrunner/server/presence_handler.py | 120 - deps/v8/tools/testrunner/server/signatures.py | 63 - .../tools/testrunner/server/status_handler.py | 112 - .../tools/testrunner/server/work_handler.py | 150 - deps/v8/tools/testrunner/standard_runner.py | 558 ++ deps/v8/tools/tick-processor.html | 14 +- deps/v8/tools/tickprocessor.js | 242 +- deps/v8/tools/try_perf.py | 1 - .../unittests/predictable_wrapper_test.py | 57 + deps/v8/tools/unittests/run_perf_test.py | 56 +- .../unittests/testdata/predictable_mocked.py | 28 + deps/v8/tools/v8heapconst.py | 465 +- deps/v8/tools/wasm/update-wasm-spec-tests.sh | 29 +- deps/v8/tools/whitespace.txt | 7 +- deps/v8/tools/windows-tick-processor.bat | 2 +- 2351 files changed, 125945 insertions(+), 101692 deletions(-) create mode 100644 deps/v8/.vpython create mode 100644 deps/v8/infra/testing/OWNERS create mode 100644 deps/v8/infra/testing/README.md create mode 100644 deps/v8/infra/testing/client.v8.pyl create mode 100644 deps/v8/infra/testing/tryserver.v8.pyl delete mode 100644 deps/v8/src/arm/codegen-arm.h delete mode 100644 deps/v8/src/arm64/codegen-arm64.h delete mode 100644 deps/v8/src/ast/ast-expression-rewriter.cc delete mode 100644 deps/v8/src/ast/ast-expression-rewriter.h create mode 100644 deps/v8/src/base/platform/OWNERS create mode 100644 deps/v8/src/builtins/builtins-math-gen.h create mode 100644 deps/v8/src/builtins/builtins-reflect-gen.cc create mode 100644 deps/v8/src/compiler/allocation-builder.h create mode 100644 deps/v8/src/heap/array-buffer-collector.cc create mode 100644 deps/v8/src/heap/array-buffer-collector.h create mode 100644 deps/v8/src/heap/stress-marking-observer.cc create mode 100644 deps/v8/src/heap/stress-marking-observer.h create mode 100644 deps/v8/src/heap/stress-scavenge-observer.cc create mode 100644 deps/v8/src/heap/stress-scavenge-observer.h create mode 100644 deps/v8/src/heap/sweeper.cc create mode 100644 deps/v8/src/heap/sweeper.h delete mode 100644 deps/v8/src/ia32/code-stubs-ia32.h delete mode 100644 deps/v8/src/ia32/codegen-ia32.h delete mode 100644 deps/v8/src/ic/access-compiler-data.h delete mode 100644 deps/v8/src/ic/access-compiler.cc delete mode 100644 deps/v8/src/ic/access-compiler.h delete mode 100644 deps/v8/src/ic/arm/access-compiler-arm.cc delete mode 100644 deps/v8/src/ic/arm/handler-compiler-arm.cc delete mode 100644 deps/v8/src/ic/arm64/access-compiler-arm64.cc delete mode 100644 deps/v8/src/ic/arm64/handler-compiler-arm64.cc delete mode 100644 deps/v8/src/ic/handler-compiler.cc delete mode 100644 deps/v8/src/ic/handler-compiler.h delete mode 100644 deps/v8/src/ic/ia32/access-compiler-ia32.cc delete mode 100644 deps/v8/src/ic/ia32/handler-compiler-ia32.cc delete mode 100644 deps/v8/src/ic/mips/OWNERS delete mode 100644 deps/v8/src/ic/mips/access-compiler-mips.cc delete mode 100644 deps/v8/src/ic/mips/handler-compiler-mips.cc delete mode 100644 deps/v8/src/ic/mips64/OWNERS delete mode 100644 deps/v8/src/ic/mips64/access-compiler-mips64.cc delete mode 100644 deps/v8/src/ic/mips64/handler-compiler-mips64.cc delete mode 100644 deps/v8/src/ic/ppc/OWNERS delete mode 100644 deps/v8/src/ic/ppc/access-compiler-ppc.cc delete mode 100644 deps/v8/src/ic/ppc/handler-compiler-ppc.cc delete mode 100644 deps/v8/src/ic/s390/OWNERS delete mode 100644 deps/v8/src/ic/s390/access-compiler-s390.cc delete mode 100644 deps/v8/src/ic/s390/handler-compiler-s390.cc delete mode 100644 deps/v8/src/ic/x64/access-compiler-x64.cc delete mode 100644 deps/v8/src/ic/x64/handler-compiler-x64.cc create mode 100644 deps/v8/src/inspector/js_protocol-1.3.json create mode 100644 deps/v8/src/inspector/js_protocol.pdl delete mode 100644 deps/v8/src/js/string.js delete mode 100644 deps/v8/src/js/weak-collection.js create mode 100644 deps/v8/src/libplatform/default-background-task-runner.cc create mode 100644 deps/v8/src/libplatform/default-background-task-runner.h create mode 100644 deps/v8/src/libplatform/default-foreground-task-runner.cc create mode 100644 deps/v8/src/libplatform/default-foreground-task-runner.h delete mode 100644 deps/v8/src/mips/codegen-mips.h delete mode 100644 deps/v8/src/mips64/codegen-mips64.h delete mode 100644 deps/v8/src/objects/bigint-inl.h create mode 100644 deps/v8/src/objects/code-inl.h create mode 100644 deps/v8/src/objects/code.h create mode 100644 deps/v8/src/objects/data-handler-inl.h create mode 100644 deps/v8/src/objects/data-handler.h create mode 100644 deps/v8/src/objects/fixed-array-inl.h create mode 100644 deps/v8/src/objects/fixed-array.h create mode 100644 deps/v8/src/objects/js-array-inl.h create mode 100644 deps/v8/src/objects/js-array.h create mode 100644 deps/v8/src/objects/js-collection-inl.h create mode 100644 deps/v8/src/objects/js-collection.h create mode 100644 deps/v8/src/objects/js-regexp-inl.h create mode 100644 deps/v8/src/objects/js-regexp.h create mode 100644 deps/v8/src/objects/literal-objects-inl.h rename deps/v8/src/{ => parsing}/background-parsing-task.cc (72%) rename deps/v8/src/{ => parsing}/background-parsing-task.h (82%) delete mode 100644 deps/v8/src/ppc/codegen-ppc.h delete mode 100644 deps/v8/src/s390/codegen-s390.h create mode 100644 deps/v8/src/simulator-base.cc create mode 100644 deps/v8/src/simulator-base.h create mode 100644 deps/v8/src/snapshot/builtin-deserializer-allocator.cc create mode 100644 deps/v8/src/snapshot/builtin-deserializer-allocator.h create mode 100644 deps/v8/src/snapshot/builtin-serializer-allocator.cc create mode 100644 deps/v8/src/snapshot/builtin-serializer-allocator.h create mode 100644 deps/v8/src/snapshot/builtin-snapshot-utils.cc create mode 100644 deps/v8/src/snapshot/builtin-snapshot-utils.h create mode 100644 deps/v8/src/snapshot/default-deserializer-allocator.cc create mode 100644 deps/v8/src/snapshot/default-deserializer-allocator.h create mode 100644 deps/v8/src/third_party/utf8-decoder/LICENSE create mode 100644 deps/v8/src/third_party/utf8-decoder/README.v8 create mode 100644 deps/v8/src/third_party/utf8-decoder/utf8-decoder.h create mode 100644 deps/v8/src/vector-slot-pair.cc create mode 100644 deps/v8/src/vector-slot-pair.h create mode 100644 deps/v8/src/wasm/baseline/DEPS create mode 100644 deps/v8/src/wasm/baseline/arm/liftoff-assembler-arm.h create mode 100644 deps/v8/src/wasm/baseline/arm64/liftoff-assembler-arm64.h create mode 100644 deps/v8/src/wasm/baseline/ia32/liftoff-assembler-ia32.h create mode 100644 deps/v8/src/wasm/baseline/liftoff-assembler-defs.h create mode 100644 deps/v8/src/wasm/baseline/liftoff-assembler.cc create mode 100644 deps/v8/src/wasm/baseline/liftoff-assembler.h create mode 100644 deps/v8/src/wasm/baseline/liftoff-compiler.cc create mode 100644 deps/v8/src/wasm/baseline/liftoff-register.h create mode 100644 deps/v8/src/wasm/baseline/mips/liftoff-assembler-mips.h create mode 100644 deps/v8/src/wasm/baseline/mips64/liftoff-assembler-mips64.h create mode 100644 deps/v8/src/wasm/baseline/ppc/liftoff-assembler-ppc.h create mode 100644 deps/v8/src/wasm/baseline/s390/liftoff-assembler-s390.h create mode 100644 deps/v8/src/wasm/baseline/x64/liftoff-assembler-x64.h create mode 100644 deps/v8/src/wasm/wasm-code-manager.cc create mode 100644 deps/v8/src/wasm/wasm-code-manager.h create mode 100644 deps/v8/src/wasm/wasm-code-wrapper.cc create mode 100644 deps/v8/src/wasm/wasm-code-wrapper.h create mode 100644 deps/v8/src/wasm/wasm-engine.h delete mode 100644 deps/v8/src/wasm/wasm-heap.cc delete mode 100644 deps/v8/src/wasm/wasm-heap.h create mode 100644 deps/v8/src/wasm/wasm-serialization.cc create mode 100644 deps/v8/src/wasm/wasm-serialization.h delete mode 100644 deps/v8/src/x64/code-stubs-x64.h delete mode 100644 deps/v8/src/x64/codegen-x64.h create mode 100644 deps/v8/test/cctest/assembler-helper-arm.cc create mode 100644 deps/v8/test/cctest/assembler-helper-arm.h create mode 100644 deps/v8/test/cctest/compiler/value-helper.cc create mode 100644 deps/v8/test/cctest/heap/test-embedder-tracing.cc delete mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/ArrayLiteralsWide.golden create mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/ClassFields.golden delete mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/JumpsRequiringConstantWideOperands.golden delete mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/LookupSlotWideInEval.golden delete mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/ObjectLiteralsWide.golden delete mode 100644 deps/v8/test/cctest/interpreter/bytecode_expectations/RegExpLiteralsWide.golden delete mode 100644 deps/v8/test/cctest/test-platform-linux.cc delete mode 100644 deps/v8/test/cctest/test-platform-win32.cc rename deps/v8/test/cctest/{test-simulator-arm.cc => test-sync-primitives-arm.cc} (82%) rename deps/v8/test/cctest/{test-simulator-arm64.cc => test-sync-primitives-arm64.cc} (85%) create mode 100644 deps/v8/test/cctest/wasm/test-wasm-codegen.cc create mode 100644 deps/v8/test/debugger/debug/debug-evaluate-arguments.js create mode 100644 deps/v8/test/inspector/debugger/async-chains-expected.txt create mode 100644 deps/v8/test/inspector/debugger/async-chains.js create mode 100644 deps/v8/test/inspector/debugger/async-stack-load-more-expected.txt create mode 100644 deps/v8/test/inspector/debugger/async-stack-load-more.js create mode 100644 deps/v8/test/inspector/debugger/change-return-value-expected.txt create mode 100644 deps/v8/test/inspector/debugger/change-return-value.js create mode 100644 deps/v8/test/inspector/debugger/external-stack-trace-expected.txt create mode 100644 deps/v8/test/inspector/debugger/external-stack-trace.js create mode 100644 deps/v8/test/inspector/debugger/pause-on-async-call-expected.txt create mode 100644 deps/v8/test/inspector/debugger/pause-on-async-call.js create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-at-last-line-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-at-last-line.js create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-ignore-hint-when-no-location-expected.txt create mode 100644 deps/v8/test/inspector/debugger/set-breakpoint-ignore-hint-when-no-location.js create mode 100644 deps/v8/test/inspector/debugger/step-into-break-on-async-call-expected.txt create mode 100644 deps/v8/test/inspector/debugger/step-into-break-on-async-call.js create mode 100644 deps/v8/test/inspector/debugger/step-into-external-async-task-expected.txt create mode 100644 deps/v8/test/inspector/debugger/step-into-external-async-task-same-context-expected.txt create mode 100644 deps/v8/test/inspector/debugger/step-into-external-async-task-same-context.js create mode 100644 deps/v8/test/inspector/debugger/step-into-external-async-task.js create mode 100644 deps/v8/test/inspector/debugger/this-in-arrow-function-expected.txt create mode 100644 deps/v8/test/inspector/debugger/this-in-arrow-function.js create mode 100644 deps/v8/test/inspector/heap-profiler/sampling-heap-profiler-expected.txt create mode 100644 deps/v8/test/inspector/heap-profiler/sampling-heap-profiler.js create mode 100644 deps/v8/test/inspector/runtime/console-time-repeat-expected.txt create mode 100644 deps/v8/test/inspector/runtime/console-time-repeat.js create mode 100644 deps/v8/test/inspector/runtime/runtime-get-properties-and-accessor-expected.txt create mode 100644 deps/v8/test/inspector/runtime/runtime-get-properties-and-accessor.js create mode 100644 deps/v8/test/inspector/runtime/runtime-global-lexical-scope-names-expected.txt create mode 100644 deps/v8/test/inspector/runtime/runtime-global-lexical-scope-names.js create mode 100644 deps/v8/test/intl/date-format/invalid-time.js create mode 100644 deps/v8/test/js-perf-test/Array/find-index.js create mode 100644 deps/v8/test/js-perf-test/Array/find.js create mode 100644 deps/v8/test/js-perf-test/TypedArrays/slice-nospecies.js create mode 100644 deps/v8/test/js-perf-test/TypedArrays/subarray-nospecies.js delete mode 100644 deps/v8/test/message/console.out rename deps/v8/test/{mjsunit/regress/wasm/regression-694433.js => message/fail/array-binding-pattern-await1.js} (62%) create mode 100644 deps/v8/test/message/fail/array-binding-pattern-await1.out rename deps/v8/test/message/{ => fail}/arrow-bare-rest-param.js (100%) rename deps/v8/test/message/{ => fail}/arrow-bare-rest-param.out (100%) rename deps/v8/test/message/{ => fail}/arrow-formal-parameters.js (100%) rename deps/v8/test/message/{ => fail}/arrow-formal-parameters.out (100%) rename deps/v8/test/message/{ => fail}/arrow-invalid-rest-2.js (100%) rename deps/v8/test/message/{ => fail}/arrow-invalid-rest-2.out (100%) rename deps/v8/test/message/{ => fail}/arrow-invalid-rest.js (100%) rename deps/v8/test/message/{ => fail}/arrow-invalid-rest.out (100%) rename deps/v8/test/message/{ => fail}/arrow-missing.js (100%) rename deps/v8/test/message/{ => fail}/arrow-missing.out (100%) rename deps/v8/test/message/{ => fail}/arrow-param-after-rest-2.js (100%) rename deps/v8/test/message/{ => fail}/arrow-param-after-rest-2.out (100%) rename deps/v8/test/message/{ => fail}/arrow-param-after-rest.js (100%) rename deps/v8/test/message/{ => fail}/arrow-param-after-rest.out (100%) rename deps/v8/test/message/{ => fail}/arrow-strict-eval-bare-parameter.js (100%) rename deps/v8/test/message/{ => fail}/arrow-strict-eval-bare-parameter.out (100%) rename deps/v8/test/message/{ => fail}/arrow-two-rest-params.js (100%) rename deps/v8/test/message/{ => fail}/arrow-two-rest-params.out (100%) rename deps/v8/test/message/{ => fail}/async-arrow-invalid-rest-2.js (100%) rename deps/v8/test/message/{ => fail}/async-arrow-invalid-rest-2.out (100%) rename deps/v8/test/message/{ => fail}/async-arrow-invalid-rest.js (100%) rename deps/v8/test/message/{ => fail}/async-arrow-invalid-rest.out (100%) rename deps/v8/test/message/{ => fail}/async-arrow-param-after-rest.js (100%) rename deps/v8/test/message/{ => fail}/async-arrow-param-after-rest.out (100%) rename deps/v8/test/message/{ => fail}/await-non-async.js (100%) rename deps/v8/test/message/{ => fail}/await-non-async.out (100%) rename deps/v8/test/message/{ => fail}/call-non-constructable.js (100%) rename deps/v8/test/message/{ => fail}/call-non-constructable.out (100%) rename deps/v8/test/message/{ => fail}/call-primitive-constructor.js (100%) rename deps/v8/test/message/{ => fail}/call-primitive-constructor.out (100%) rename deps/v8/test/message/{ => fail}/call-primitive-function.js (100%) rename deps/v8/test/message/{ => fail}/call-primitive-function.out (100%) rename deps/v8/test/message/{ => fail}/call-undeclared-constructor.js (100%) rename deps/v8/test/message/{ => fail}/call-undeclared-constructor.out (100%) rename deps/v8/test/message/{ => fail}/call-undeclared-function.js (100%) rename deps/v8/test/message/{ => fail}/call-undeclared-function.out (100%) rename deps/v8/test/message/{ => fail}/class-constructor-accessor.js (100%) rename deps/v8/test/message/{ => fail}/class-constructor-accessor.out (100%) rename deps/v8/test/message/{ => fail}/class-constructor-generator.js (100%) rename deps/v8/test/message/{ => fail}/class-constructor-generator.out (100%) create mode 100644 deps/v8/test/message/fail/class-field-constructor.js create mode 100644 deps/v8/test/message/fail/class-field-constructor.out create mode 100644 deps/v8/test/message/fail/class-field-static-constructor.js create mode 100644 deps/v8/test/message/fail/class-field-static-constructor.out create mode 100644 deps/v8/test/message/fail/class-field-static-prototype.js create mode 100644 deps/v8/test/message/fail/class-field-static-prototype.out rename deps/v8/test/message/{ => fail}/class-spread-property.js (100%) rename deps/v8/test/message/{ => fail}/class-spread-property.out (100%) rename deps/v8/test/message/{ => fail}/console.js (96%) create mode 100644 deps/v8/test/message/fail/console.out rename deps/v8/test/message/{ => fail}/const-decl-no-init-sloppy.out (100%) rename deps/v8/test/message/{ => fail}/const-decl-no-init.js (100%) rename deps/v8/test/message/{ => fail}/const-decl-no-init.out (100%) rename deps/v8/test/message/{ => fail}/const-decl-no-init2.js (100%) rename deps/v8/test/message/{ => fail}/const-decl-no-init2.out (100%) rename deps/v8/test/message/{ => fail}/default-parameter-tdz-arrow.js (100%) rename deps/v8/test/message/{ => fail}/default-parameter-tdz-arrow.out (100%) rename deps/v8/test/message/{ => fail}/default-parameter-tdz.js (100%) rename deps/v8/test/message/{ => fail}/default-parameter-tdz.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-number.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-number.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object-literal-complex.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object-literal-complex.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object-literal.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object-literal.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-object.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-undefined.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-array-non-iterable-undefined.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-array.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-array.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-array2.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-array2.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-obj.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-obj.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-obj2.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-decl-no-init-obj2.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-function-non-iterable.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-function-non-iterable.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-modify-const.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-modify-const.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-new-callable-non-iterable.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-new-callable-non-iterable.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-non-function-non-iterable.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-non-function-non-iterable.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-computed-property.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-computed-property.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-number-property.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-number-property.out (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-string-property.js (100%) rename deps/v8/test/message/{ => fail}/destructuring-undefined-string-property.out (100%) rename deps/v8/test/message/{regress/regress-4829-1.js => fail/dynamic-import-missing-specifier.js} (68%) create mode 100644 deps/v8/test/message/fail/dynamic-import-missing-specifier.out rename deps/v8/test/message/{ => fail}/export-duplicate-as.js (100%) rename deps/v8/test/message/{ => fail}/export-duplicate-as.out (100%) rename deps/v8/test/message/{ => fail}/export-duplicate-default.js (100%) rename deps/v8/test/message/{ => fail}/export-duplicate-default.out (100%) rename deps/v8/test/message/{ => fail}/export-duplicate.js (100%) rename deps/v8/test/message/{ => fail}/export-duplicate.out (100%) rename deps/v8/test/message/{ => fail}/for-in-let-loop-initializers-strict.js (100%) rename deps/v8/test/message/{ => fail}/for-in-let-loop-initializers-strict.out (100%) rename deps/v8/test/message/{ => fail}/for-in-loop-initializers-destructuring.js (100%) rename deps/v8/test/message/{ => fail}/for-in-loop-initializers-destructuring.out (100%) rename deps/v8/test/message/{ => fail}/for-in-loop-initializers-strict.js (100%) rename deps/v8/test/message/{ => fail}/for-in-loop-initializers-strict.out (100%) rename deps/v8/test/message/{ => fail}/for-loop-invalid-lhs.js (100%) rename deps/v8/test/message/{ => fail}/for-loop-invalid-lhs.out (100%) rename deps/v8/test/message/{ => fail}/for-of-let-loop-initializers.js (100%) rename deps/v8/test/message/{ => fail}/for-of-let-loop-initializers.out (100%) rename deps/v8/test/message/{ => fail}/for-of-loop-initializers-sloppy.js (100%) rename deps/v8/test/message/{ => fail}/for-of-loop-initializers-sloppy.out (100%) rename deps/v8/test/message/{ => fail}/for-of-loop-initializers-strict.js (100%) rename deps/v8/test/message/{ => fail}/for-of-loop-initializers-strict.out (100%) rename deps/v8/test/message/{ => fail}/for-of-non-iterable.js (100%) rename deps/v8/test/message/{ => fail}/for-of-non-iterable.out (100%) rename deps/v8/test/message/{ => fail}/for-of-throw-in-body.js (100%) rename deps/v8/test/message/{ => fail}/for-of-throw-in-body.out (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-bad-rest.js (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-bad-rest.out (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-strict-body.js (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-strict-body.out (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-trailing-comma.js (100%) rename deps/v8/test/message/{ => fail}/formal-parameters-trailing-comma.out (100%) create mode 100644 deps/v8/test/message/fail/func-name-inferrer-arg-1.js create mode 100644 deps/v8/test/message/fail/func-name-inferrer-arg-1.out create mode 100644 deps/v8/test/message/fail/func-name-inferrer-arg.js create mode 100644 deps/v8/test/message/fail/func-name-inferrer-arg.out rename deps/v8/test/message/{ => fail}/function-param-after-rest.js (100%) rename deps/v8/test/message/{ => fail}/function-param-after-rest.out (100%) rename deps/v8/test/message/{ => fail}/function-sent-escaped.js (100%) rename deps/v8/test/message/{ => fail}/function-sent-escaped.out (100%) rename deps/v8/test/message/{ => fail}/generators-throw1.js (100%) rename deps/v8/test/message/{ => fail}/generators-throw1.out (100%) rename deps/v8/test/message/{ => fail}/generators-throw2.js (100%) rename deps/v8/test/message/{ => fail}/generators-throw2.out (100%) rename deps/v8/test/message/{ => fail}/get-iterator-return-non-receiver.js (100%) rename deps/v8/test/message/{ => fail}/get-iterator-return-non-receiver.out (100%) rename deps/v8/test/message/{ => fail}/get-iterator1.js (100%) rename deps/v8/test/message/{ => fail}/get-iterator1.out (100%) rename deps/v8/test/message/{ => fail}/import-as-eval.js (100%) rename deps/v8/test/message/{ => fail}/import-as-eval.out (100%) rename deps/v8/test/message/{ => fail}/import-as-redeclaration.js (100%) rename deps/v8/test/message/{ => fail}/import-as-redeclaration.out (100%) rename deps/v8/test/message/{ => fail}/import-as-reserved-word.js (100%) rename deps/v8/test/message/{ => fail}/import-as-reserved-word.out (100%) rename deps/v8/test/message/{ => fail}/import-eval.js (100%) rename deps/v8/test/message/{ => fail}/import-eval.out (100%) rename deps/v8/test/message/{ => fail}/import-redeclaration.js (100%) rename deps/v8/test/message/{ => fail}/import-redeclaration.out (100%) rename deps/v8/test/message/{ => fail}/import-reserved-word.js (100%) rename deps/v8/test/message/{ => fail}/import-reserved-word.out (100%) rename deps/v8/test/message/{ => fail}/instanceof-noncallable.js (100%) rename deps/v8/test/message/{ => fail}/instanceof-noncallable.out (100%) rename deps/v8/test/message/{ => fail}/instanceof-nonobject.js (100%) rename deps/v8/test/message/{ => fail}/instanceof-nonobject.out (100%) rename deps/v8/test/message/{ => fail}/invalid-spread-2.js (100%) rename deps/v8/test/message/{ => fail}/invalid-spread-2.out (100%) rename deps/v8/test/message/{ => fail}/invalid-spread.js (100%) rename deps/v8/test/message/{ => fail}/invalid-spread.out (100%) rename deps/v8/test/message/{ => fail}/isvar.js (100%) rename deps/v8/test/message/{ => fail}/isvar.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-destructuring-brace-in-single-statement.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-destructuring-brace-in-single-statement.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-destructuring-in-single-statement.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-destructuring-in-single-statement.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-in-single-statement.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-declaration-in-single-statement.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-in-array-prohibited.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-in-array-prohibited.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-in-object-prohibited.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-in-object-prohibited.out (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-prohibited.js (100%) rename deps/v8/test/message/{ => fail}/let-lexical-name-prohibited.out (100%) rename deps/v8/test/message/{ => fail}/modules-cycle1.js (100%) rename deps/v8/test/message/{ => fail}/modules-cycle1.out (51%) rename deps/v8/test/message/{ => fail}/modules-cycle2.js (100%) rename deps/v8/test/message/{ => fail}/modules-cycle2.out (50%) rename deps/v8/test/message/{ => fail}/modules-cycle3.js (100%) rename deps/v8/test/message/{ => fail}/modules-cycle3.out (52%) rename deps/v8/test/message/{ => fail}/modules-cycle4.js (100%) rename deps/v8/test/message/{ => fail}/modules-cycle4.out (51%) rename deps/v8/test/message/{ => fail}/modules-cycle5.js (100%) rename deps/v8/test/message/{ => fail}/modules-cycle5.out (51%) rename deps/v8/test/message/{ => fail}/modules-cycle6.js (100%) create mode 100644 deps/v8/test/message/fail/modules-cycle6.out rename deps/v8/test/message/{ => fail}/modules-duplicate-export1.js (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export1.out (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export2.js (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export2.out (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export3.js (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export3.out (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export4.js (100%) rename deps/v8/test/message/{ => fail}/modules-duplicate-export4.out (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare1.js (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare1.out (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare2.js (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare2.out (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare3.js (100%) rename deps/v8/test/message/{ => fail}/modules-import-redeclare3.out (100%) rename deps/v8/test/message/{ => fail}/modules-import1.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import1.out rename deps/v8/test/message/{ => fail}/modules-import2.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import2.out rename deps/v8/test/message/{ => fail}/modules-import3.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import3.out rename deps/v8/test/message/{ => fail}/modules-import4.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import4.out rename deps/v8/test/message/{ => fail}/modules-import5.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import5.out rename deps/v8/test/message/{ => fail}/modules-import6.js (100%) create mode 100644 deps/v8/test/message/fail/modules-import6.out rename deps/v8/test/message/{ => fail}/modules-skip-cycle2.js (100%) rename deps/v8/test/message/{ => fail}/modules-skip-cycle3.js (100%) rename deps/v8/test/message/{ => fail}/modules-skip-cycle5.js (100%) rename deps/v8/test/message/{ => fail}/modules-skip-cycle6.js (100%) rename deps/v8/test/message/{ => fail}/modules-star-conflict1.js (78%) create mode 100644 deps/v8/test/message/fail/modules-star-conflict1.out rename deps/v8/test/message/{ => fail}/modules-star-conflict2.js (65%) create mode 100644 deps/v8/test/message/fail/modules-star-conflict2.out rename deps/v8/test/message/{ => fail}/modules-star-default.js (100%) create mode 100644 deps/v8/test/message/fail/modules-star-default.out rename deps/v8/test/message/{ => fail}/modules-undefined-export1.js (100%) rename deps/v8/test/message/{ => fail}/modules-undefined-export1.out (100%) rename deps/v8/test/message/{ => fail}/modules-undefined-export2.js (100%) rename deps/v8/test/message/{ => fail}/modules-undefined-export2.out (100%) rename deps/v8/test/message/{ => fail}/new-target-assignment.js (100%) rename deps/v8/test/message/{ => fail}/new-target-assignment.out (100%) rename deps/v8/test/message/{ => fail}/new-target-escaped.js (100%) rename deps/v8/test/message/{ => fail}/new-target-escaped.out (100%) rename deps/v8/test/message/{ => fail}/new-target-for-loop.js (100%) rename deps/v8/test/message/{ => fail}/new-target-for-loop.out (100%) rename deps/v8/test/message/{ => fail}/new-target-postfix-op.js (100%) rename deps/v8/test/message/{ => fail}/new-target-postfix-op.out (100%) rename deps/v8/test/message/{ => fail}/new-target-prefix-op.js (100%) rename deps/v8/test/message/{ => fail}/new-target-prefix-op.out (100%) rename deps/v8/test/message/{ => fail}/nf-yield-in-generator.js (100%) rename deps/v8/test/message/{ => fail}/nf-yield-in-generator.out (100%) rename deps/v8/test/message/{ => fail}/nf-yield-strict-in-generator.js (100%) rename deps/v8/test/message/{ => fail}/nf-yield-strict-in-generator.out (100%) rename deps/v8/test/message/{ => fail}/nf-yield-strict.js (100%) rename deps/v8/test/message/{ => fail}/nf-yield-strict.out (100%) rename deps/v8/test/message/{ => fail}/nfe-yield-generator.js (100%) rename deps/v8/test/message/{ => fail}/nfe-yield-generator.out (100%) rename deps/v8/test/message/{ => fail}/nfe-yield-strict.js (100%) rename deps/v8/test/message/{ => fail}/nfe-yield-strict.out (100%) rename deps/v8/test/message/{ => fail}/non-alphanum.js (100%) rename deps/v8/test/message/{ => fail}/non-alphanum.out (98%) create mode 100644 deps/v8/test/message/fail/object-binding-pattern-await1.js create mode 100644 deps/v8/test/message/fail/object-binding-pattern-await1.out rename deps/v8/test/message/{ => fail}/object-rest-assignment-pattern.js (100%) rename deps/v8/test/message/{ => fail}/object-rest-assignment-pattern.out (100%) rename deps/v8/test/message/{ => fail}/object-rest-binding-pattern.js (100%) rename deps/v8/test/message/{ => fail}/object-rest-binding-pattern.out (100%) rename deps/v8/test/message/{ => fail}/overwritten-builtins.js (100%) rename deps/v8/test/message/{ => fail}/overwritten-builtins.out (100%) rename deps/v8/test/message/{ => fail}/paren_in_arg_string.js (100%) rename deps/v8/test/message/{ => fail}/paren_in_arg_string.out (100%) rename deps/v8/test/message/{ => fail}/redeclaration1.js (100%) rename deps/v8/test/message/{ => fail}/redeclaration1.out (100%) rename deps/v8/test/message/{ => fail}/redeclaration2.js (100%) rename deps/v8/test/message/{ => fail}/redeclaration2.out (100%) rename deps/v8/test/message/{ => fail}/redeclaration3.js (100%) rename deps/v8/test/message/{ => fail}/redeclaration3.out (100%) rename deps/v8/test/message/{ => fail}/replacement-marker-as-argument.js (100%) rename deps/v8/test/message/{ => fail}/replacement-marker-as-argument.out (100%) rename deps/v8/test/message/{ => fail}/rest-param-class-setter-strict.js (100%) rename deps/v8/test/message/{ => fail}/rest-param-class-setter-strict.out (100%) rename deps/v8/test/message/{ => fail}/rest-param-object-setter-sloppy.js (100%) rename deps/v8/test/message/{ => fail}/rest-param-object-setter-sloppy.out (100%) rename deps/v8/test/message/{ => fail}/rest-param-object-setter-strict.js (100%) rename deps/v8/test/message/{ => fail}/rest-param-object-setter-strict.out (100%) rename deps/v8/test/message/{ => fail}/settimeout.js (100%) rename deps/v8/test/message/{ => fail}/settimeout.out (100%) rename deps/v8/test/message/{ => fail}/simple-throw.js (100%) rename deps/v8/test/message/{ => fail}/simple-throw.out (100%) rename deps/v8/test/message/{ => fail}/strict-formal-parameters.js (100%) rename deps/v8/test/message/{ => fail}/strict-formal-parameters.out (100%) rename deps/v8/test/message/{ => fail}/strict-octal-number.js (100%) rename deps/v8/test/message/{ => fail}/strict-octal-number.out (100%) rename deps/v8/test/message/{ => fail}/strict-octal-string.js (100%) rename deps/v8/test/message/{ => fail}/strict-octal-string.out (100%) rename deps/v8/test/message/{ => fail}/strict-octal-use-strict-after.js (100%) rename deps/v8/test/message/{ => fail}/strict-octal-use-strict-after.out (100%) rename deps/v8/test/message/{ => fail}/strict-octal-use-strict-before.js (100%) rename deps/v8/test/message/{ => fail}/strict-octal-use-strict-before.out (100%) rename deps/v8/test/message/{ => fail}/strict-with.js (100%) rename deps/v8/test/message/{ => fail}/strict-with.out (100%) rename deps/v8/test/message/{ => fail}/super-constructor-extra-statement.js (100%) rename deps/v8/test/message/{ => fail}/super-constructor-extra-statement.out (100%) rename deps/v8/test/message/{ => fail}/super-constructor.js (100%) rename deps/v8/test/message/{ => fail}/super-constructor.out (100%) rename deps/v8/test/message/{ => fail}/super-in-function.js (100%) rename deps/v8/test/message/{ => fail}/super-in-function.out (100%) rename deps/v8/test/message/{ => fail}/tonumber-symbol.js (100%) rename deps/v8/test/message/{ => fail}/tonumber-symbol.out (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-catch-and-finally.js (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-catch-and-finally.out (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-catch.js (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-catch.out (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-finally.js (100%) rename deps/v8/test/message/{ => fail}/try-catch-finally-throw-in-finally.out (100%) rename deps/v8/test/message/{ => fail}/try-catch-lexical-conflict.js (100%) rename deps/v8/test/message/{ => fail}/try-catch-lexical-conflict.out (100%) rename deps/v8/test/message/{ => fail}/try-catch-variable-conflict.js (100%) rename deps/v8/test/message/{ => fail}/try-catch-variable-conflict.out (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-finally.js (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-finally.out (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-try-and-finally.js (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-try-and-finally.out (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-try.js (100%) rename deps/v8/test/message/{ => fail}/try-finally-throw-in-try.out (100%) rename deps/v8/test/message/{ => fail}/typedarray.js (100%) rename deps/v8/test/message/{ => fail}/typedarray.out (100%) rename deps/v8/test/message/{ => fail}/undefined-keyed-property.js (100%) rename deps/v8/test/message/{ => fail}/undefined-keyed-property.out (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-invalid-2.js (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-invalid-2.out (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-invalid.js (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-invalid.out (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-undefined.js (100%) rename deps/v8/test/message/{ => fail}/unicode-escape-undefined.out (100%) rename deps/v8/test/message/{ => fail}/unterminated-arg-list.js (100%) rename deps/v8/test/message/{ => fail}/unterminated-arg-list.out (100%) rename deps/v8/test/message/{ => fail}/var-conflict-in-with.js (100%) rename deps/v8/test/message/{ => fail}/var-conflict-in-with.out (100%) rename deps/v8/test/message/{ => fail}/wasm-function-name.js (100%) rename deps/v8/test/message/{ => fail}/wasm-function-name.out (100%) rename deps/v8/test/message/{ => fail}/wasm-module-and-function-name.js (100%) rename deps/v8/test/message/{ => fail}/wasm-module-and-function-name.out (100%) rename deps/v8/test/message/{ => fail}/wasm-module-name.js (100%) rename deps/v8/test/message/{ => fail}/wasm-module-name.out (100%) rename deps/v8/test/message/{ => fail}/wasm-no-name.js (100%) rename deps/v8/test/message/{ => fail}/wasm-no-name.out (100%) rename deps/v8/test/message/{ => fail}/wasm-trap.js (100%) rename deps/v8/test/message/{ => fail}/wasm-trap.out (100%) rename deps/v8/test/message/{ => fail}/yield-in-arrow-param.js (100%) rename deps/v8/test/message/{ => fail}/yield-in-arrow-param.out (100%) rename deps/v8/test/message/{ => fail}/yield-in-generator-param.js (100%) rename deps/v8/test/message/{ => fail}/yield-in-generator-param.out (100%) delete mode 100644 deps/v8/test/message/modules-cycle6.out delete mode 100644 deps/v8/test/message/modules-import1.out delete mode 100644 deps/v8/test/message/modules-import2.out delete mode 100644 deps/v8/test/message/modules-import3.out delete mode 100644 deps/v8/test/message/modules-import4.out delete mode 100644 deps/v8/test/message/modules-import5.out delete mode 100644 deps/v8/test/message/modules-import6.out delete mode 100644 deps/v8/test/message/modules-star-conflict1.out delete mode 100644 deps/v8/test/message/modules-star-conflict2.out delete mode 100644 deps/v8/test/message/modules-star-default.out create mode 100644 deps/v8/test/message/object-binding-pattern-await-computed-name.js rename deps/v8/{tools/release/testdata/v8/base/trace_event/common/common => test/message/object-binding-pattern-await-computed-name.out} (100%) rename deps/v8/test/message/regress/{ => fail}/regress-1527.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-1527.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-3995.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-3995.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-4266.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-4266.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-5727.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-5727.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-73.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-73.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-75.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-75.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-661579.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-661579.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-669017.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-669017.out (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-691194.js (100%) rename deps/v8/test/message/regress/{ => fail}/regress-crbug-691194.out (100%) delete mode 100644 deps/v8/test/message/regress/regress-4829-1.out delete mode 100644 deps/v8/test/message/regress/regress-4829-2.js delete mode 100644 deps/v8/test/message/regress/regress-4829-2.out create mode 100644 deps/v8/test/mjsunit/array-lastindexof.js create mode 100644 deps/v8/test/mjsunit/compiler-regress-787301.js create mode 100644 deps/v8/test/mjsunit/compiler/deopt-array-builtins.js create mode 100644 deps/v8/test/mjsunit/compiler/deopt-array-push.js create mode 100644 deps/v8/test/mjsunit/compiler/materialize-dictionary-properties.js create mode 100644 deps/v8/test/mjsunit/compiler/materialize-mutable-heap-number.js create mode 100644 deps/v8/test/mjsunit/compiler/math-ceil.js create mode 100644 deps/v8/test/mjsunit/compiler/math-round.js create mode 100644 deps/v8/test/mjsunit/compiler/math-trunc.js create mode 100644 deps/v8/test/mjsunit/compiler/nary-binary-ops.js create mode 100644 deps/v8/test/mjsunit/compiler/new-cons-string.js create mode 100644 deps/v8/test/mjsunit/compiler/osr-arguments.js create mode 100644 deps/v8/test/mjsunit/compiler/reflect-get.js create mode 100644 deps/v8/test/mjsunit/compiler/reflect-has.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-7121.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-772420.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-772872.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-773954.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-786521.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-788539.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-791245.js create mode 100644 deps/v8/test/mjsunit/compiler/regress-793863.js create mode 100644 deps/v8/test/mjsunit/compiler/string-slice.js create mode 100644 deps/v8/test/mjsunit/compiler/type-speculative-safe-integer-add.js create mode 100644 deps/v8/test/mjsunit/console.js create mode 100644 deps/v8/test/mjsunit/d8/.gitignore rename deps/v8/test/mjsunit/{ => d8}/d8-os.js (100%) rename deps/v8/test/mjsunit/{ => d8}/d8-performance-now.js (100%) rename deps/v8/test/mjsunit/{ => d8}/d8-worker-sharedarraybuffer.js (100%) rename deps/v8/test/mjsunit/{ => d8}/d8-worker-spawn-worker.js (100%) rename deps/v8/test/mjsunit/{ => d8}/d8-worker.js (100%) create mode 100644 deps/v8/test/mjsunit/d8/enable-tracing.js create mode 100644 deps/v8/test/mjsunit/dictionary-prototypes.js create mode 100644 deps/v8/test/mjsunit/disallow-codegen-from-strings.js rename deps/v8/test/mjsunit/{harmony => es6}/sloppy-no-duplicate-generators.js (93%) rename deps/v8/test/mjsunit/{harmony => es9}/object-rest-basic.js (98%) rename deps/v8/test/mjsunit/{harmony => es9}/object-spread-basic.js (98%) rename deps/v8/test/mjsunit/{harmony => es9}/regexp-lookbehind.js (99%) rename deps/v8/test/mjsunit/{harmony => es9}/template-escapes.js (99%) create mode 100644 deps/v8/test/mjsunit/filter-element-kinds.js create mode 100644 deps/v8/test/mjsunit/global-prototypes.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/add.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/and.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/as-int-n.js rename deps/v8/test/mjsunit/harmony/{bigint.js => bigint/basics.js} (59%) create mode 100644 deps/v8/test/mjsunit/harmony/bigint/comparisons.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/dec.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/div.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/exp.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/inc.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/json.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/mod.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/mul.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/neg.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/not.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/or.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/regressions.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/sar.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/shl.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/sub.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/tonumber.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/too-big-literal.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/turbo.js create mode 100644 deps/v8/test/mjsunit/harmony/bigint/xor.js create mode 100644 deps/v8/test/mjsunit/harmony/modules-import-meta.js create mode 100644 deps/v8/test/mjsunit/harmony/modules-skip-export-import-meta.js create mode 100644 deps/v8/test/mjsunit/harmony/public-instance-class-fields.js create mode 100644 deps/v8/test/mjsunit/harmony/public-static-class-fields.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui0.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui1.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui2.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui3.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui4.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui5.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui6.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui7.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui8.js create mode 100644 deps/v8/test/mjsunit/harmony/regexp-property-lu-ui9.js delete mode 100644 deps/v8/test/mjsunit/harmony/sloppy-legacy-duplicate-generators.js create mode 100644 deps/v8/test/mjsunit/ic-lookup-on-receiver.js create mode 100644 deps/v8/test/mjsunit/ignition/dynamic-global-inside-block.js create mode 100644 deps/v8/test/mjsunit/object-literal-modified-object-prototype.js create mode 100644 deps/v8/test/mjsunit/optimized-array-find.js create mode 100644 deps/v8/test/mjsunit/optimized-array-findindex.js create mode 100644 deps/v8/test/mjsunit/optimized-filter.js create mode 100644 deps/v8/test/mjsunit/regexp-modifiers-autogenerated-i18n.js create mode 100644 deps/v8/test/mjsunit/regexp-modifiers-autogenerated.js create mode 100644 deps/v8/test/mjsunit/regexp-modifiers-dotall.js create mode 100644 deps/v8/test/mjsunit/regexp-modifiers-i18n.js create mode 100644 deps/v8/test/mjsunit/regexp-modifiers.js create mode 100644 deps/v8/test/mjsunit/regress/regress-6941.js create mode 100644 deps/v8/test/mjsunit/regress/regress-6948.js create mode 100644 deps/v8/test/mjsunit/regress/regress-6970.js create mode 100644 deps/v8/test/mjsunit/regress/regress-6989.js create mode 100644 deps/v8/test/mjsunit/regress/regress-6991.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7014-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7014-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7026.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7115.js create mode 100644 deps/v8/test/mjsunit/regress/regress-7135.js create mode 100644 deps/v8/test/mjsunit/regress/regress-774824.js create mode 100644 deps/v8/test/mjsunit/regress/regress-775888.js create mode 100644 deps/v8/test/mjsunit/regress/regress-776309.js create mode 100644 deps/v8/test/mjsunit/regress/regress-778574.js create mode 100644 deps/v8/test/mjsunit/regress/regress-778668.js create mode 100644 deps/v8/test/mjsunit/regress/regress-779407.js create mode 100644 deps/v8/test/mjsunit/regress/regress-782754.js create mode 100644 deps/v8/test/mjsunit/regress/regress-783051.js create mode 100644 deps/v8/test/mjsunit/regress/regress-783119.js create mode 100644 deps/v8/test/mjsunit/regress/regress-784080.js create mode 100644 deps/v8/test/mjsunit/regress/regress-784862.js create mode 100644 deps/v8/test/mjsunit/regress/regress-784863.js create mode 100644 deps/v8/test/mjsunit/regress/regress-784990.js create mode 100644 deps/v8/test/mjsunit/regress/regress-785804.js create mode 100644 deps/v8/test/mjsunit/regress/regress-786573.js create mode 100644 deps/v8/test/mjsunit/regress/regress-786784.js create mode 100644 deps/v8/test/mjsunit/regress/regress-791334.js create mode 100644 deps/v8/test/mjsunit/regress/regress-791345.js create mode 100644 deps/v8/test/mjsunit/regress/regress-791958.js create mode 100644 deps/v8/test/mjsunit/regress/regress-793588.js create mode 100644 deps/v8/test/mjsunit/regress/regress-793793.js create mode 100644 deps/v8/test/mjsunit/regress/regress-794822.js rename deps/v8/test/mjsunit/{harmony/global-accessors-strict.js => regress/regress-794825.js} (71%) create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-766635.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-768875.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-774459.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-774860.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-776511.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-778952.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-779344.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-779367.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-779457.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781116-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781116-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781506-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781506-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781506-3.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-781583.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-783902.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-784835.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-786020.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-786723.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-789764.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-791245-1.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-791245-2.js create mode 100644 deps/v8/test/mjsunit/regress/regress-crbug-791256.js create mode 100644 deps/v8/test/mjsunit/regress/regress-v8-6906.js rename deps/v8/test/mjsunit/regress/wasm/{regression-02256.js => regress-02256.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-02256b.js => regress-02256b.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-02862.js => regress-02862.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-5531.js => regress-5531.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-5800.js => regress-5800.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-5884.js => regress-5884.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-6054.js => regress-6054.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-6164.js => regress-6164.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-643595.js => regress-643595.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-644682.js => regress-644682.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-647649.js => regress-647649.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-648079.js => regress-648079.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-651961.js => regress-651961.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-654377.js => regress-654377.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-663994.js => regress-663994.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-666741.js => regress-666741.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-667745.js => regress-667745.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-670683.js => regress-670683.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-674447.js => regress-674447.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-680938.js => regress-680938.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-684858.js => regress-684858.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-688876.js => regress-688876.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-689450.js => regress-689450.js} (100%) create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-6931.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-694433.js rename deps/v8/test/mjsunit/regress/wasm/{regression-698587.js => regress-698587.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-699485.js => regress-699485.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-702460.js => regress-702460.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-702839.js => regress-702839.js} (100%) create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7033.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7035.js rename deps/v8/test/mjsunit/regress/wasm/{regression-703568.js => regress-703568.js} (100%) create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-7049.js rename deps/v8/test/mjsunit/regress/wasm/{regression-708714.js => regress-708714.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-710844.js => regress-710844.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-711203.js => regress-711203.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-715216-a.js => regress-715216a.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-715216-b.js => regress-715216b.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-717056.js => regress-717056.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-717194.js => regress-717194.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-719175.js => regress-719175.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-722445.js => regress-722445.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-724846.js => regress-724846.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-724851.js => regress-724851.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-724972.js => regress-724972.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-727219.js => regress-727219.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-727222.js => regress-727222.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-727560.js => regress-727560.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-729991.js => regress-729991.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-731351.js => regress-731351.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-734108.js => regress-734108.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-734246.js => regress-734246.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-734345.js => regress-734345.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-736584.js => regress-736584.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-737069.js => regress-737069.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-739768.js => regress-739768.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-753496.js => regress-753496.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-757217.js => regress-757217.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-763439.js => regress-763439.js} (100%) rename deps/v8/test/mjsunit/regress/wasm/{regression-763697.js => regress-763697.js} (100%) create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-766003.js rename deps/v8/test/mjsunit/regress/wasm/{regression-769846.js => regress-769846.js} (100%) create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-771243.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-772332.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-775366.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-778917.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-782280.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-784050.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-789952.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-791810.js create mode 100644 deps/v8/test/mjsunit/regress/wasm/regress-793551.js create mode 100644 deps/v8/test/mjsunit/serialize-after-execute.js create mode 100644 deps/v8/test/mjsunit/splice-proxy.js create mode 100644 deps/v8/test/mjsunit/string-equal.js create mode 100644 deps/v8/test/mjsunit/wasm/default-liftoff-setting.js create mode 100644 deps/v8/test/mjsunit/wasm/lazy-compilation.js create mode 100644 deps/v8/test/mjsunit/wasm/liftoff.js create mode 100644 deps/v8/test/mjsunit/wasm/multi-value.js create mode 100644 deps/v8/test/mjsunit/wasm/user-properties-common.js create mode 100644 deps/v8/test/mjsunit/wasm/user-properties-constructed.js create mode 100644 deps/v8/test/mjsunit/wasm/user-properties-exported.js create mode 100644 deps/v8/test/mjsunit/wasm/user-properties-module.js create mode 100644 deps/v8/test/mjsunit/wasm/user-properties-reexport.js delete mode 100644 deps/v8/test/mjsunit/wasm/user-properties.js create mode 100644 deps/v8/test/mjsunit/wasm/worker-memory.js create mode 100644 deps/v8/test/mjsunit/whitespaces0.js create mode 100644 deps/v8/test/mjsunit/whitespaces1.js create mode 100644 deps/v8/test/mjsunit/whitespaces2.js create mode 100644 deps/v8/test/mjsunit/whitespaces3.js create mode 100644 deps/v8/test/mjsunit/whitespaces4.js create mode 100644 deps/v8/test/mjsunit/whitespaces5.js create mode 100644 deps/v8/test/mjsunit/whitespaces6.js create mode 100644 deps/v8/test/mjsunit/whitespaces7.js create mode 100644 deps/v8/test/mjsunit/whitespaces8.js create mode 100644 deps/v8/test/mjsunit/whitespaces9.js create mode 100644 deps/v8/test/unittests/allocation-unittest.cc create mode 100644 deps/v8/test/unittests/bigint-unittest.cc create mode 100644 deps/v8/test/unittests/parser/ast-value-unittest.cc create mode 100644 deps/v8/test/unittests/testcfg.py create mode 100644 deps/v8/test/unittests/utils-unittest.cc create mode 100644 deps/v8/test/unittests/wasm/trap-handler-unittest.cc create mode 100644 deps/v8/test/unittests/wasm/wasm-code-manager-unittest.cc delete mode 100644 deps/v8/test/unittests/wasm/wasm-heap-unittest.cc create mode 100644 deps/v8/third_party/colorama/LICENSE create mode 100644 deps/v8/third_party/colorama/README.v8 create mode 100644 deps/v8/third_party/inspector_protocol/ConvertProtocolToJSON.py create mode 100644 deps/v8/tools/arguments.js create mode 100755 deps/v8/tools/bigint-tester.py create mode 100644 deps/v8/tools/memory/asan/blacklist_win.txt create mode 100644 deps/v8/tools/predictable_wrapper.py delete mode 100755 deps/v8/tools/release/backport_node.py delete mode 100755 deps/v8/tools/release/test_backport_node.py delete mode 100755 deps/v8/tools/release/test_update_node.py delete mode 100644 deps/v8/tools/release/testdata/v8/.gitignore delete mode 100644 deps/v8/tools/release/testdata/v8/baz/v8_foo delete mode 100644 deps/v8/tools/release/testdata/v8/baz/v8_new delete mode 100644 deps/v8/tools/release/testdata/v8/new/v8_new delete mode 100644 deps/v8/tools/release/testdata/v8/v8_foo delete mode 100644 deps/v8/tools/release/testdata/v8/v8_new create mode 100755 deps/v8/tools/run-gc-fuzzer.py rename deps/v8/tools/{run-valgrind.gyp => run-num-fuzzer.gyp} (76%) create mode 100644 deps/v8/tools/run-num-fuzzer.isolate delete mode 100644 deps/v8/tools/run-valgrind.isolate delete mode 100755 deps/v8/tools/run-valgrind.py delete mode 100755 deps/v8/tools/test-server.py delete mode 100644 deps/v8/tools/testrunner/README create mode 100644 deps/v8/tools/testrunner/base_runner.py create mode 100755 deps/v8/tools/testrunner/deopt_fuzzer.py create mode 100755 deps/v8/tools/testrunner/gc_fuzzer.py create mode 100644 deps/v8/tools/testrunner/local/command.py delete mode 100644 deps/v8/tools/testrunner/local/commands.py delete mode 100644 deps/v8/tools/testrunner/network/__init__.py delete mode 100644 deps/v8/tools/testrunner/network/distro.py delete mode 100644 deps/v8/tools/testrunner/network/endpoint.py delete mode 100644 deps/v8/tools/testrunner/network/network_execution.py delete mode 100644 deps/v8/tools/testrunner/objects/peer.py delete mode 100644 deps/v8/tools/testrunner/objects/workpacket.py delete mode 100644 deps/v8/tools/testrunner/server/__init__.py delete mode 100644 deps/v8/tools/testrunner/server/compression.py delete mode 100644 deps/v8/tools/testrunner/server/constants.py delete mode 100644 deps/v8/tools/testrunner/server/daemon.py delete mode 100644 deps/v8/tools/testrunner/server/local_handler.py delete mode 100644 deps/v8/tools/testrunner/server/main.py delete mode 100644 deps/v8/tools/testrunner/server/presence_handler.py delete mode 100644 deps/v8/tools/testrunner/server/signatures.py delete mode 100644 deps/v8/tools/testrunner/server/status_handler.py delete mode 100644 deps/v8/tools/testrunner/server/work_handler.py create mode 100755 deps/v8/tools/testrunner/standard_runner.py create mode 100755 deps/v8/tools/unittests/predictable_wrapper_test.py mode change 100644 => 100755 deps/v8/tools/unittests/run_perf_test.py create mode 100644 deps/v8/tools/unittests/testdata/predictable_mocked.py diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index 6861c70994b..b7c5334f492 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -70,6 +70,8 @@ !/third_party/binutils !/third_party/eu-strip !/third_party/inspector_protocol +!/third_party/colorama +/third_party/colorama/src /tools/clang /tools/gcmole/gcmole-tools /tools/gcmole/gcmole-tools.tar.gz @@ -92,6 +94,7 @@ TAGS bsuite compile_commands.json d8 +!/test/mjsunit/d8 d8_g gccauses gcsuspects @@ -103,5 +106,6 @@ turbo*.cfg turbo*.dot turbo*.json v8.ignition_dispatches_table.json +/Default/ !/third_party/jinja2 !/third_party/markupsafe diff --git a/deps/v8/.vpython b/deps/v8/.vpython new file mode 100644 index 00000000000..9ea0da7145b --- /dev/null +++ b/deps/v8/.vpython @@ -0,0 +1,32 @@ +# This is a vpython "spec" file. +# +# It describes patterns for python wheel dependencies of the python scripts in +# the chromium repo, particularly for dependencies that have compiled components +# (since pure-python dependencies can be easily vendored into third_party). +# +# When vpython is invoked, it finds this file and builds a python VirtualEnv, +# containing all of the dependencies described in this file, fetching them from +# CIPD (the "Chrome Infrastructure Package Deployer" service). Unlike `pip`, +# this never requires the end-user machine to have a working python extension +# compilation environment. All of these packages are built using: +# https://chromium.googlesource.com/infra/infra/+/master/infra/tools/dockerbuild/ +# +# All python scripts in the repo share this same spec, to avoid dependency +# fragmentation. +# +# If you have depot_tools installed in your $PATH, you can invoke python scripts +# in this repo by running them as you normally would run them, except +# substituting `vpython` instead of `python` on the command line, e.g.: +# vpython path/to/script.py some --arguments +# +# Read more about `vpython` and how to modify this file here: +# https://chromium.googlesource.com/infra/infra/+/master/doc/users/vpython.md + +python_version: "2.7" + +# Needed by third_party/catapult/devil/devil, which is imported by +# build/android/test_runner.py when running performance tests. +wheel: < + name: "infra/python/wheels/psutil/${vpython_platform}" + version: "version:5.2.2" +> diff --git a/deps/v8/.ycm_extra_conf.py b/deps/v8/.ycm_extra_conf.py index a451d9f31c3..74e605431a6 100644 --- a/deps/v8/.ycm_extra_conf.py +++ b/deps/v8/.ycm_extra_conf.py @@ -42,7 +42,7 @@ # Flags from YCM's default config. flags = [ '-DUSE_CLANG_COMPLETER', -'-std=gnu++11', +'-std=gnu++14', '-x', 'c++', ] diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index be50e6e4996..744d13be8d1 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -1,4 +1,4 @@ -# Below is a list of people and organizations that have contributed +# Below is a list of people and organizations that have contributed # to the V8 project. Names should be added to the list like so: # # Name/Organization @@ -31,6 +31,7 @@ StrongLoop, Inc. <*@strongloop.com> Facebook, Inc. <*@fb.com> Facebook, Inc. <*@oculus.com> Vewd Software AS <*@vewd.com> +Groupon <*@groupon.com> Aaron Bieber Abdulla Kamar @@ -45,6 +46,7 @@ Andrew Paprocki Andrei Kashcha Anna Henningsen Bangfu Tao +Ben Coe Ben Noordhuis Benjamin Tan Bert Belder @@ -54,6 +56,7 @@ Craig Schlenter Choongwoo Han Chris Nardi Christopher A. Taylor +Colin Ihrig Daniel Andersson Daniel Bevenius Daniel James @@ -75,6 +78,7 @@ Ioseb Dzmanashvili Isiah Meadows Jaime Bernardo Jan de Mooij +Jan Krems Jay Freeman James Pike Jianghua Yang @@ -86,6 +90,7 @@ JunHo Seo Kang-Hao (Kenny) Lu Karl Skomski Kevin Gibbons +Kris Selden Loo Rong Jie Luis Reis Luke Zarko @@ -101,6 +106,7 @@ Michael Smith Michaël Zasso Mike Gilbert Mike Pennisi +Mikhail Gusarov Milton Chiang Myeong-bo Shim Nicolas Antonius Ernst Leopold Maria Kaiser @@ -127,12 +133,14 @@ Sandro Santilli Sanjoy Das Seo Sanghyeon Stefan Penner +Sylvestre Ledru Tobias Burnus Victor Costan Vlad Burlik Vladimir Krivosheev Vladimir Shutoff Wiktor Garbacz +Yong Wang Yu Yin Zac Hansen Zhongping Wang diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index daed449c0a5..9e2c0291e55 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -56,7 +56,7 @@ declare_args() { v8_enable_vtunejit = false # Sets -dENABLE_HANDLE_ZAPPING. - v8_enable_handle_zapping = is_debug + v8_enable_handle_zapping = true # Enable slow dchecks. v8_enable_slow_dchecks = false @@ -83,11 +83,14 @@ declare_args() { # Sets -dV8_TRACE_IGNITION. v8_enable_trace_ignition = false + # Sets -dV8_TRACE_FEEDBACK_UPDATES. + v8_enable_trace_feedback_updates = false + # Sets -dV8_CONCURRENT_MARKING - v8_enable_concurrent_marking = false + v8_enable_concurrent_marking = true - # Sets -dV8_CSA_WRITE_BARRIER - v8_enable_csa_write_barrier = true + # Sets -dV8_ENABLE_FORCE_SLOW_PATH + v8_enable_force_slow_path = "" # Build the snapshot with unwinding information for perf. # Sets -dV8_USE_SNAPSHOT_WITH_UNWINDING_INFO. @@ -132,6 +135,8 @@ declare_args() { # Temporary flag to allow embedders to update their microtasks scopes # while rolling in a new version of V8. v8_check_microtasks_scopes_consistency = "" + + v8_monolithic = false } # Derived defaults. @@ -147,6 +152,9 @@ if (v8_enable_disassembler == "") { if (v8_enable_trace_maps == "") { v8_enable_trace_maps = is_debug } +if (v8_enable_force_slow_path == "") { + v8_enable_force_slow_path = is_debug +} if (v8_enable_v8_checks == "") { v8_enable_v8_checks = is_debug } @@ -270,6 +278,12 @@ config("features") { if (v8_enable_trace_ignition) { defines += [ "V8_TRACE_IGNITION" ] } + if (v8_enable_trace_feedback_updates) { + defines += [ "V8_TRACE_FEEDBACK_UPDATES" ] + } + if (v8_enable_force_slow_path) { + defines += [ "V8_ENABLE_FORCE_SLOW_PATH" ] + } if (v8_enable_v8_checks) { defines += [ "V8_ENABLE_CHECKS" ] } @@ -300,9 +314,6 @@ config("features") { if (v8_enable_concurrent_marking) { defines += [ "V8_CONCURRENT_MARKING" ] } - if (v8_enable_csa_write_barrier) { - defines += [ "V8_CSA_WRITE_BARRIER" ] - } if (v8_check_microtasks_scopes_consistency) { defines += [ "V8_CHECK_MICROTASKS_SCOPES_CONSISTENCY" ] } @@ -502,6 +513,12 @@ config("toolchain") { # TODO(hans): Remove once http://crbug.com/428099 is resolved. "-Winconsistent-missing-override", ] + + if (v8_current_cpu != "mips" && v8_current_cpu != "mipsel") { + # We exclude MIPS because the IsMipsArchVariant macro causes trouble. + cflags += [ "-Wunreachable-code" ] + } + if (v8_current_cpu == "x64" || v8_current_cpu == "arm64" || v8_current_cpu == "mips64el") { cflags += [ "-Wshorten-64-to-32" ] @@ -568,9 +585,7 @@ action("js2c") { "src/js/prologue.js", "src/js/v8natives.js", "src/js/array.js", - "src/js/string.js", "src/js/typedarray.js", - "src/js/weak-collection.js", "src/js/messages.js", "src/js/spread.js", "src/js/proxy.js", @@ -746,6 +761,16 @@ action("postmortem-metadata") { sources = [ "src/objects.h", "src/objects-inl.h", + "src/objects/code-inl.h", + "src/objects/code.h", + "src/objects/data-handler.h", + "src/objects/data-handler-inl.h", + "src/objects/fixed-array-inl.h", + "src/objects/fixed-array.h", + "src/objects/js-array-inl.h", + "src/objects/js-array.h", + "src/objects/js-regexp-inl.h", + "src/objects/js-regexp.h", "src/objects/map.h", "src/objects/map-inl.h", "src/objects/script.h", @@ -764,65 +789,68 @@ action("postmortem-metadata") { rebase_path(sources, root_build_dir) } -action("run_mksnapshot") { - visibility = [ ":*" ] # Only targets in this file can depend on this. - - deps = [ - ":mksnapshot($v8_snapshot_toolchain)", - ] - - script = "tools/run.py" +if (v8_use_snapshot) { + action("run_mksnapshot") { + visibility = [ ":*" ] # Only targets in this file can depend on this. - sources = [] + deps = [ + ":mksnapshot($v8_snapshot_toolchain)", + ] - outputs = [ - "$target_gen_dir/snapshot.cc", - ] + script = "tools/run.py" - args = [ - "./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)", - "root_out_dir") + "/mksnapshot", - root_build_dir), - "--startup_src", - rebase_path("$target_gen_dir/snapshot.cc", root_build_dir), - ] + sources = [] - if (v8_random_seed != "0") { - args += [ - "--random-seed", - v8_random_seed, + outputs = [ + "$target_gen_dir/snapshot.cc", ] - } - if (v8_os_page_size != "0") { - args += [ - "--v8_os_page_size", - v8_os_page_size, + args = [ + "./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)", + "root_out_dir") + "/mksnapshot", + root_build_dir), + "--turbo_instruction_scheduling", + "--startup_src", + rebase_path("$target_gen_dir/snapshot.cc", root_build_dir), ] - } - if (v8_perf_prof_unwinding_info) { - args += [ "--perf-prof-unwinding-info" ] - } + if (v8_random_seed != "0") { + args += [ + "--random-seed", + v8_random_seed, + ] + } - if (v8_use_external_startup_data) { - outputs += [ "$root_out_dir/snapshot_blob.bin" ] - args += [ - "--startup_blob", - rebase_path("$root_out_dir/snapshot_blob.bin", root_build_dir), - ] - } + if (v8_os_page_size != "0") { + args += [ + "--v8_os_page_size", + v8_os_page_size, + ] + } - if (v8_embed_script != "") { - sources += [ v8_embed_script ] - args += [ rebase_path(v8_embed_script, root_build_dir) ] - } + if (v8_perf_prof_unwinding_info) { + args += [ "--perf-prof-unwinding-info" ] + } - if (v8_enable_fast_mksnapshot) { - args += [ - "--no-turbo-rewrite-far-jumps", - "--no-turbo-verify-allocation", - ] + if (v8_use_external_startup_data) { + outputs += [ "$root_out_dir/snapshot_blob.bin" ] + args += [ + "--startup_blob", + rebase_path("$root_out_dir/snapshot_blob.bin", root_build_dir), + ] + } + + if (v8_embed_script != "") { + sources += [ v8_embed_script ] + args += [ rebase_path(v8_embed_script, root_build_dir) ] + } + + if (v8_enable_fast_mksnapshot) { + args += [ + "--no-turbo-rewrite-far-jumps", + "--no-turbo-verify-allocation", + ] + } } } @@ -834,6 +862,7 @@ action("v8_dump_build_config") { is_gcov_coverage = v8_code_coverage && !is_clang args = [ rebase_path("$root_out_dir/v8_build_config.json", root_build_dir), + "current_cpu=\"$current_cpu\"", "dcheck_always_on=$dcheck_always_on", "is_asan=$is_asan", "is_cfi=$is_cfi", @@ -844,7 +873,9 @@ action("v8_dump_build_config") { "is_tsan=$is_tsan", "is_ubsan_vptr=$is_ubsan_vptr", "target_cpu=\"$target_cpu\"", + "v8_current_cpu=\"$v8_current_cpu\"", "v8_enable_i18n_support=$v8_enable_i18n_support", + "v8_enable_verify_predictable=$v8_enable_verify_predictable", "v8_target_cpu=\"$v8_target_cpu\"", "v8_use_snapshot=$v8_use_snapshot", ] @@ -901,44 +932,46 @@ v8_source_set("v8_nosnapshot") { configs = [ ":internal_config" ] } -v8_source_set("v8_snapshot") { - # Only targets in this file and the top-level visibility target can - # depend on this. - visibility = [ - ":*", - "//:gn_visibility", - ] - - deps = [ - ":js2c", - ":js2c_experimental_extras", - ":js2c_extras", - ":v8_base", - ] - public_deps = [ - # This should be public so downstream targets can declare the snapshot - # output file as their inputs. - ":run_mksnapshot", - ] +if (v8_use_snapshot) { + v8_source_set("v8_snapshot") { + # Only targets in this file and the top-level visibility target can + # depend on this. + visibility = [ + ":*", + "//:gn_visibility", + ] - sources = [ - "$target_gen_dir/experimental-extras-libraries.cc", - "$target_gen_dir/extras-libraries.cc", - "$target_gen_dir/libraries.cc", - "$target_gen_dir/snapshot.cc", - "src/setup-isolate-deserialize.cc", - ] + deps = [ + ":js2c", + ":js2c_experimental_extras", + ":js2c_extras", + ":v8_base", + ] + public_deps = [ + # This should be public so downstream targets can declare the snapshot + # output file as their inputs. + ":run_mksnapshot", + ] - if (use_jumbo_build == true) { - jumbo_excluded_sources = [ - # TODO(mostynb@opera.com): don't exclude these http://crbug.com/752428 - # Generated source, contains same variable names as libraries.cc + sources = [ "$target_gen_dir/experimental-extras-libraries.cc", + "$target_gen_dir/extras-libraries.cc", "$target_gen_dir/libraries.cc", + "$target_gen_dir/snapshot.cc", + "src/setup-isolate-deserialize.cc", ] - } - configs = [ ":internal_config" ] + if (use_jumbo_build == true) { + jumbo_excluded_sources = [ + # TODO(mostynb@opera.com): don't exclude these http://crbug.com/752428 + # Generated source, contains same variable names as libraries.cc + "$target_gen_dir/experimental-extras-libraries.cc", + "$target_gen_dir/libraries.cc", + ] + } + + configs = [ ":internal_config" ] + } } if (v8_use_external_startup_data) { @@ -1008,12 +1041,14 @@ v8_source_set("v8_initializers") { "src/builtins/builtins-iterator-gen.cc", "src/builtins/builtins-iterator-gen.h", "src/builtins/builtins-math-gen.cc", + "src/builtins/builtins-math-gen.h", "src/builtins/builtins-number-gen.cc", "src/builtins/builtins-object-gen.cc", "src/builtins/builtins-promise-gen.cc", "src/builtins/builtins-promise-gen.h", "src/builtins/builtins-proxy-gen.cc", "src/builtins/builtins-proxy-gen.h", + "src/builtins/builtins-reflect-gen.cc", "src/builtins/builtins-regexp-gen.cc", "src/builtins/builtins-regexp-gen.h", "src/builtins/builtins-sharedarraybuffer-gen.cc", @@ -1195,8 +1230,6 @@ v8_source_set("v8_base") { "src/assembler.h", "src/assert-scope.cc", "src/assert-scope.h", - "src/ast/ast-expression-rewriter.cc", - "src/ast/ast-expression-rewriter.h", "src/ast/ast-function-literal-id-reindexer.cc", "src/ast/ast-function-literal-id-reindexer.h", "src/ast/ast-numbering.cc", @@ -1219,8 +1252,6 @@ v8_source_set("v8_base") { "src/ast/scopes.h", "src/ast/variables.cc", "src/ast/variables.h", - "src/background-parsing-task.cc", - "src/background-parsing-task.h", "src/bailout-reason.cc", "src/bailout-reason.h", "src/basic-block-profiler.cc", @@ -1315,6 +1346,7 @@ v8_source_set("v8_base") { "src/compiler/access-info.h", "src/compiler/all-nodes.cc", "src/compiler/all-nodes.h", + "src/compiler/allocation-builder.h", "src/compiler/basic-block-instrumentor.cc", "src/compiler/basic-block-instrumentor.h", "src/compiler/branch-elimination.cc", @@ -1607,6 +1639,8 @@ v8_source_set("v8_base") { "src/handles.cc", "src/handles.h", "src/heap-symbols.h", + "src/heap/array-buffer-collector.cc", + "src/heap/array-buffer-collector.h", "src/heap/array-buffer-tracker-inl.h", "src/heap/array-buffer-tracker.cc", "src/heap/array-buffer-tracker.h", @@ -1658,14 +1692,15 @@ v8_source_set("v8_base") { "src/heap/spaces.h", "src/heap/store-buffer.cc", "src/heap/store-buffer.h", + "src/heap/stress-marking-observer.cc", + "src/heap/stress-marking-observer.h", + "src/heap/stress-scavenge-observer.cc", + "src/heap/stress-scavenge-observer.h", + "src/heap/sweeper.cc", + "src/heap/sweeper.h", "src/heap/worklist.h", - "src/ic/access-compiler-data.h", - "src/ic/access-compiler.cc", - "src/ic/access-compiler.h", "src/ic/call-optimization.cc", "src/ic/call-optimization.h", - "src/ic/handler-compiler.cc", - "src/ic/handler-compiler.h", "src/ic/handler-configuration-inl.h", "src/ic/handler-configuration.cc", "src/ic/handler-configuration.h", @@ -1773,9 +1808,10 @@ v8_source_set("v8_base") { "src/objects.h", "src/objects/arguments-inl.h", "src/objects/arguments.h", - "src/objects/bigint-inl.h", "src/objects/bigint.cc", "src/objects/bigint.h", + "src/objects/code-inl.h", + "src/objects/code.h", "src/objects/compilation-cache-inl.h", "src/objects/compilation-cache.h", "src/objects/debug-objects-inl.h", @@ -1783,12 +1819,21 @@ v8_source_set("v8_base") { "src/objects/debug-objects.h", "src/objects/descriptor-array.h", "src/objects/dictionary.h", + "src/objects/fixed-array-inl.h", + "src/objects/fixed-array.h", "src/objects/frame-array-inl.h", "src/objects/frame-array.h", "src/objects/hash-table-inl.h", "src/objects/hash-table.h", "src/objects/intl-objects.cc", "src/objects/intl-objects.h", + "src/objects/js-array-inl.h", + "src/objects/js-array.h", + "src/objects/js-collection-inl.h", + "src/objects/js-collection.h", + "src/objects/js-regexp-inl.h", + "src/objects/js-regexp.h", + "src/objects/literal-objects-inl.h", "src/objects/literal-objects.cc", "src/objects/literal-objects.h", "src/objects/map-inl.h", @@ -1816,6 +1861,8 @@ v8_source_set("v8_base") { "src/objects/template-objects.h", "src/ostreams.cc", "src/ostreams.h", + "src/parsing/background-parsing-task.cc", + "src/parsing/background-parsing-task.h", "src/parsing/duplicate-finder.h", "src/parsing/expression-classifier.h", "src/parsing/expression-scope-reparenter.cc", @@ -1947,13 +1994,23 @@ v8_source_set("v8_base") { "src/safepoint-table.h", "src/setup-isolate.h", "src/signature.h", + "src/simulator-base.cc", + "src/simulator-base.h", "src/simulator.h", + "src/snapshot/builtin-deserializer-allocator.cc", + "src/snapshot/builtin-deserializer-allocator.h", "src/snapshot/builtin-deserializer.cc", "src/snapshot/builtin-deserializer.h", + "src/snapshot/builtin-serializer-allocator.cc", + "src/snapshot/builtin-serializer-allocator.h", "src/snapshot/builtin-serializer.cc", "src/snapshot/builtin-serializer.h", + "src/snapshot/builtin-snapshot-utils.cc", + "src/snapshot/builtin-snapshot-utils.h", "src/snapshot/code-serializer.cc", "src/snapshot/code-serializer.h", + "src/snapshot/default-deserializer-allocator.cc", + "src/snapshot/default-deserializer-allocator.h", "src/snapshot/default-serializer-allocator.cc", "src/snapshot/default-serializer-allocator.h", "src/snapshot/deserializer.cc", @@ -1997,6 +2054,7 @@ v8_source_set("v8_base") { "src/string-stream.h", "src/strtod.cc", "src/strtod.h", + "src/third_party/utf8-decoder/utf8-decoder.h", "src/tracing/trace-event.cc", "src/tracing/trace-event.h", "src/tracing/traced-value.cc", @@ -2031,6 +2089,8 @@ v8_source_set("v8_base") { "src/v8threads.h", "src/value-serializer.cc", "src/value-serializer.h", + "src/vector-slot-pair.cc", + "src/vector-slot-pair.h", "src/vector.h", "src/version.cc", "src/version.h", @@ -2038,6 +2098,11 @@ v8_source_set("v8_base") { "src/visitors.h", "src/vm-state-inl.h", "src/vm-state.h", + "src/wasm/baseline/liftoff-assembler-defs.h", + "src/wasm/baseline/liftoff-assembler.cc", + "src/wasm/baseline/liftoff-assembler.h", + "src/wasm/baseline/liftoff-compiler.cc", + "src/wasm/baseline/liftoff-register.h", "src/wasm/compilation-manager.cc", "src/wasm/compilation-manager.h", "src/wasm/decoder.h", @@ -2059,13 +2124,16 @@ v8_source_set("v8_base") { "src/wasm/streaming-decoder.h", "src/wasm/wasm-api.cc", "src/wasm/wasm-api.h", + "src/wasm/wasm-code-manager.cc", + "src/wasm/wasm-code-manager.h", "src/wasm/wasm-code-specialization.cc", "src/wasm/wasm-code-specialization.h", + "src/wasm/wasm-code-wrapper.cc", + "src/wasm/wasm-code-wrapper.h", "src/wasm/wasm-debug.cc", + "src/wasm/wasm-engine.h", "src/wasm/wasm-external-refs.cc", "src/wasm/wasm-external-refs.h", - "src/wasm/wasm-heap.cc", - "src/wasm/wasm-heap.h", "src/wasm/wasm-interpreter.cc", "src/wasm/wasm-interpreter.h", "src/wasm/wasm-js.cc", @@ -2084,6 +2152,8 @@ v8_source_set("v8_base") { "src/wasm/wasm-opcodes.h", "src/wasm/wasm-result.cc", "src/wasm/wasm-result.h", + "src/wasm/wasm-serialization.cc", + "src/wasm/wasm-serialization.h", "src/wasm/wasm-text.cc", "src/wasm/wasm-text.h", "src/wasm/wasm-value.h", @@ -2128,9 +2198,7 @@ v8_source_set("v8_base") { "src/ia32/assembler-ia32.cc", "src/ia32/assembler-ia32.h", "src/ia32/code-stubs-ia32.cc", - "src/ia32/code-stubs-ia32.h", "src/ia32/codegen-ia32.cc", - "src/ia32/codegen-ia32.h", "src/ia32/cpu-ia32.cc", "src/ia32/deoptimizer-ia32.cc", "src/ia32/disasm-ia32.cc", @@ -2142,10 +2210,9 @@ v8_source_set("v8_base") { "src/ia32/simulator-ia32.cc", "src/ia32/simulator-ia32.h", "src/ia32/sse-instr.h", - "src/ic/ia32/access-compiler-ia32.cc", - "src/ic/ia32/handler-compiler-ia32.cc", "src/regexp/ia32/regexp-macro-assembler-ia32.cc", "src/regexp/ia32/regexp-macro-assembler-ia32.h", + "src/wasm/baseline/ia32/liftoff-assembler-ia32.h", ] } else if (v8_current_cpu == "x64") { sources += [ ### gcmole(arch:x64) ### @@ -2156,18 +2223,15 @@ v8_source_set("v8_base") { "src/compiler/x64/unwinding-info-writer-x64.cc", "src/compiler/x64/unwinding-info-writer-x64.h", "src/debug/x64/debug-x64.cc", - "src/ic/x64/access-compiler-x64.cc", - "src/ic/x64/handler-compiler-x64.cc", "src/regexp/x64/regexp-macro-assembler-x64.cc", "src/regexp/x64/regexp-macro-assembler-x64.h", "src/third_party/valgrind/valgrind.h", + "src/wasm/baseline/x64/liftoff-assembler-x64.h", "src/x64/assembler-x64-inl.h", "src/x64/assembler-x64.cc", "src/x64/assembler-x64.h", "src/x64/code-stubs-x64.cc", - "src/x64/code-stubs-x64.h", "src/x64/codegen-x64.cc", - "src/x64/codegen-x64.h", "src/x64/cpu-x64.cc", "src/x64/deoptimizer-x64.cc", "src/x64/disasm-x64.cc", @@ -2192,7 +2256,6 @@ v8_source_set("v8_base") { "src/arm/code-stubs-arm.cc", "src/arm/code-stubs-arm.h", "src/arm/codegen-arm.cc", - "src/arm/codegen-arm.h", "src/arm/constants-arm.cc", "src/arm/constants-arm.h", "src/arm/cpu-arm.cc", @@ -2214,10 +2277,9 @@ v8_source_set("v8_base") { "src/compiler/arm/unwinding-info-writer-arm.cc", "src/compiler/arm/unwinding-info-writer-arm.h", "src/debug/arm/debug-arm.cc", - "src/ic/arm/access-compiler-arm.cc", - "src/ic/arm/handler-compiler-arm.cc", "src/regexp/arm/regexp-macro-assembler-arm.cc", "src/regexp/arm/regexp-macro-assembler-arm.h", + "src/wasm/baseline/arm/liftoff-assembler-arm.h", ] } else if (v8_current_cpu == "arm64") { sources += [ ### gcmole(arch:arm64) ### @@ -2227,7 +2289,6 @@ v8_source_set("v8_base") { "src/arm64/code-stubs-arm64.cc", "src/arm64/code-stubs-arm64.h", "src/arm64/codegen-arm64.cc", - "src/arm64/codegen-arm64.h", "src/arm64/constants-arm64.h", "src/arm64/cpu-arm64.cc", "src/arm64/decoder-arm64-inl.h", @@ -2261,10 +2322,9 @@ v8_source_set("v8_base") { "src/compiler/arm64/unwinding-info-writer-arm64.cc", "src/compiler/arm64/unwinding-info-writer-arm64.h", "src/debug/arm64/debug-arm64.cc", - "src/ic/arm64/access-compiler-arm64.cc", - "src/ic/arm64/handler-compiler-arm64.cc", "src/regexp/arm64/regexp-macro-assembler-arm64.cc", "src/regexp/arm64/regexp-macro-assembler-arm64.h", + "src/wasm/baseline/arm64/liftoff-assembler-arm64.h", ] if (use_jumbo_build) { jumbo_excluded_sources += [ @@ -2280,15 +2340,12 @@ v8_source_set("v8_base") { "src/compiler/mips/instruction-scheduler-mips.cc", "src/compiler/mips/instruction-selector-mips.cc", "src/debug/mips/debug-mips.cc", - "src/ic/mips/access-compiler-mips.cc", - "src/ic/mips/handler-compiler-mips.cc", "src/mips/assembler-mips-inl.h", "src/mips/assembler-mips.cc", "src/mips/assembler-mips.h", "src/mips/code-stubs-mips.cc", "src/mips/code-stubs-mips.h", "src/mips/codegen-mips.cc", - "src/mips/codegen-mips.h", "src/mips/constants-mips.cc", "src/mips/constants-mips.h", "src/mips/cpu-mips.cc", @@ -2303,6 +2360,7 @@ v8_source_set("v8_base") { "src/mips/simulator-mips.h", "src/regexp/mips/regexp-macro-assembler-mips.cc", "src/regexp/mips/regexp-macro-assembler-mips.h", + "src/wasm/baseline/mips/liftoff-assembler-mips.h", ] } else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") { sources += [ ### gcmole(arch:mips64el) ### @@ -2311,15 +2369,12 @@ v8_source_set("v8_base") { "src/compiler/mips64/instruction-scheduler-mips64.cc", "src/compiler/mips64/instruction-selector-mips64.cc", "src/debug/mips64/debug-mips64.cc", - "src/ic/mips64/access-compiler-mips64.cc", - "src/ic/mips64/handler-compiler-mips64.cc", "src/mips64/assembler-mips64-inl.h", "src/mips64/assembler-mips64.cc", "src/mips64/assembler-mips64.h", "src/mips64/code-stubs-mips64.cc", "src/mips64/code-stubs-mips64.h", "src/mips64/codegen-mips64.cc", - "src/mips64/codegen-mips64.h", "src/mips64/constants-mips64.cc", "src/mips64/constants-mips64.h", "src/mips64/cpu-mips64.cc", @@ -2334,6 +2389,7 @@ v8_source_set("v8_base") { "src/mips64/simulator-mips64.h", "src/regexp/mips64/regexp-macro-assembler-mips64.cc", "src/regexp/mips64/regexp-macro-assembler-mips64.h", + "src/wasm/baseline/mips64/liftoff-assembler-mips64.h", ] } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") { sources += [ ### gcmole(arch:ppc) ### @@ -2342,15 +2398,12 @@ v8_source_set("v8_base") { "src/compiler/ppc/instruction-scheduler-ppc.cc", "src/compiler/ppc/instruction-selector-ppc.cc", "src/debug/ppc/debug-ppc.cc", - "src/ic/ppc/access-compiler-ppc.cc", - "src/ic/ppc/handler-compiler-ppc.cc", "src/ppc/assembler-ppc-inl.h", "src/ppc/assembler-ppc.cc", "src/ppc/assembler-ppc.h", "src/ppc/code-stubs-ppc.cc", "src/ppc/code-stubs-ppc.h", "src/ppc/codegen-ppc.cc", - "src/ppc/codegen-ppc.h", "src/ppc/constants-ppc.cc", "src/ppc/constants-ppc.h", "src/ppc/cpu-ppc.cc", @@ -2365,6 +2418,7 @@ v8_source_set("v8_base") { "src/ppc/simulator-ppc.h", "src/regexp/ppc/regexp-macro-assembler-ppc.cc", "src/regexp/ppc/regexp-macro-assembler-ppc.h", + "src/wasm/baseline/ppc/liftoff-assembler-ppc.h", ] } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { sources += [ ### gcmole(arch:s390) ### @@ -2373,8 +2427,6 @@ v8_source_set("v8_base") { "src/compiler/s390/instruction-scheduler-s390.cc", "src/compiler/s390/instruction-selector-s390.cc", "src/debug/s390/debug-s390.cc", - "src/ic/s390/access-compiler-s390.cc", - "src/ic/s390/handler-compiler-s390.cc", "src/regexp/s390/regexp-macro-assembler-s390.cc", "src/regexp/s390/regexp-macro-assembler-s390.h", "src/s390/assembler-s390-inl.h", @@ -2383,7 +2435,6 @@ v8_source_set("v8_base") { "src/s390/code-stubs-s390.cc", "src/s390/code-stubs-s390.h", "src/s390/codegen-s390.cc", - "src/s390/codegen-s390.h", "src/s390/constants-s390.cc", "src/s390/constants-s390.h", "src/s390/cpu-s390.cc", @@ -2396,6 +2447,7 @@ v8_source_set("v8_base") { "src/s390/macro-assembler-s390.h", "src/s390/simulator-s390.cc", "src/s390/simulator-s390.h", + "src/wasm/baseline/s390/liftoff-assembler-s390.h", ] } @@ -2597,6 +2649,10 @@ v8_component("v8_libplatform") { "include/libplatform/libplatform-export.h", "include/libplatform/libplatform.h", "include/libplatform/v8-tracing.h", + "src/libplatform/default-background-task-runner.cc", + "src/libplatform/default-background-task-runner.h", + "src/libplatform/default-foreground-task-runner.cc", + "src/libplatform/default-foreground-task-runner.h", "src/libplatform/default-platform.cc", "src/libplatform/default-platform.h", "src/libplatform/task-queue.cc", @@ -2660,11 +2716,35 @@ v8_source_set("fuzzer_support") { ] } +############################################################################### +# Produce a single static library for embedders +# + +if (v8_monolithic) { + # A component build is not monolithic. + assert(!is_component_build) + + # Using external startup data would produce separate files. + assert(!v8_use_external_startup_data) + v8_static_library("v8_monolith") { + deps = [ + ":v8", + ":v8_libbase", + ":v8_libplatform", + ":v8_libsampler", + "//build/config:exe_and_shlib_deps", + "//build/win:default_exe_manifest", + ] + + configs = [ ":internal_config" ] + } +} + ############################################################################### # Executables # -if (current_toolchain == v8_snapshot_toolchain) { +if (v8_use_snapshot && current_toolchain == v8_snapshot_toolchain) { v8_executable("mksnapshot") { visibility = [ ":*" ] # Only targets in this file can depend on this. @@ -2719,6 +2799,8 @@ group("gn_all") { } group("v8_clusterfuzz") { + testonly = true + deps = [ ":d8", ] @@ -2731,6 +2813,13 @@ group("v8_clusterfuzz") { ":d8(//build/toolchain/linux:clang_x86_v8_arm)", ] } + + if (v8_test_isolation_mode != "noop") { + deps += [ + "tools:run-deopt-fuzzer_run", + "tools:run-num-fuzzer_run", + ] + } } group("v8_archive") { diff --git a/deps/v8/ChangeLog b/deps/v8/ChangeLog index bed8ed97705..98e701bc65a 100644 --- a/deps/v8/ChangeLog +++ b/deps/v8/ChangeLog @@ -1,3 +1,2378 @@ +2017-12-18: Version 6.5.75 + + Performance and stability improvements on all platforms. + + +2017-12-18: Version 6.5.74 + + Performance and stability improvements on all platforms. + + +2017-12-16: Version 6.5.73 + + Performance and stability improvements on all platforms. + + +2017-12-15: Version 6.5.72 + + Performance and stability improvements on all platforms. + + +2017-12-15: Version 6.5.71 + + Performance and stability improvements on all platforms. + + +2017-12-15: Version 6.5.70 + + Performance and stability improvements on all platforms. + + +2017-12-14: Version 6.5.69 + + Performance and stability improvements on all platforms. + + +2017-12-14: Version 6.5.68 + + Performance and stability improvements on all platforms. + + +2017-12-13: Version 6.5.67 + + Performance and stability improvements on all platforms. + + +2017-12-13: Version 6.5.66 + + Performance and stability improvements on all platforms. + + +2017-12-13: Version 6.5.65 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.64 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.63 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.62 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.61 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.60 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.59 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.58 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.57 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.56 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.55 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.54 + + Performance and stability improvements on all platforms. + + +2017-12-12: Version 6.5.53 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.52 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.51 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.50 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.49 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.48 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.47 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.46 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.45 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.44 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.43 + + Performance and stability improvements on all platforms. + + +2017-12-11: Version 6.5.42 + + Performance and stability improvements on all platforms. + + +2017-12-10: Version 6.5.41 + + Performance and stability improvements on all platforms. + + +2017-12-10: Version 6.5.40 + + Performance and stability improvements on all platforms. + + +2017-12-09: Version 6.5.39 + + Performance and stability improvements on all platforms. + + +2017-12-09: Version 6.5.38 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.37 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.36 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.35 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.34 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.33 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.32 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.31 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.30 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.29 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.28 + + Performance and stability improvements on all platforms. + + +2017-12-08: Version 6.5.27 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.26 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.25 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.24 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.23 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.22 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.21 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.20 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.19 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.18 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.17 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.16 + + Performance and stability improvements on all platforms. + + +2017-12-07: Version 6.5.15 + + Performance and stability improvements on all platforms. + + +2017-12-06: Version 6.5.14 + + Performance and stability improvements on all platforms. + + +2017-12-06: Version 6.5.13 + + Performance and stability improvements on all platforms. + + +2017-12-05: Version 6.5.12 + + Performance and stability improvements on all platforms. + + +2017-12-05: Version 6.5.11 + + Performance and stability improvements on all platforms. + + +2017-12-05: Version 6.5.10 + + Performance and stability improvements on all platforms. + + +2017-12-05: Version 6.5.9 + + Performance and stability improvements on all platforms. + + +2017-12-05: Version 6.5.8 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.7 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.6 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.5 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.4 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.3 + + Performance and stability improvements on all platforms. + + +2017-12-04: Version 6.5.2 + + Performance and stability improvements on all platforms. + + +2017-12-03: Version 6.5.1 + + Performance and stability improvements on all platforms. + + +2017-11-30: Version 6.4.394 + + Performance and stability improvements on all platforms. + + +2017-11-30: Version 6.4.393 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.392 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.391 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.390 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.389 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.388 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.387 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.386 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.385 + + Performance and stability improvements on all platforms. + + +2017-11-29: Version 6.4.384 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.383 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.382 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.381 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.380 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.379 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.378 + + Performance and stability improvements on all platforms. + + +2017-11-28: Version 6.4.377 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.376 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.375 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.374 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.373 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.372 + + Performance and stability improvements on all platforms. + + +2017-11-27: Version 6.4.371 + + Performance and stability improvements on all platforms. + + +2017-11-24: Version 6.4.370 + + Performance and stability improvements on all platforms. + + +2017-11-24: Version 6.4.369 + + Performance and stability improvements on all platforms. + + +2017-11-24: Version 6.4.368 + + Performance and stability improvements on all platforms. + + +2017-11-24: Version 6.4.367 + + Performance and stability improvements on all platforms. + + +2017-11-24: Version 6.4.366 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.365 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.364 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.363 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.362 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.361 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.360 + + Performance and stability improvements on all platforms. + + +2017-11-23: Version 6.4.359 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.358 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.357 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.356 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.355 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.354 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.353 + + Performance and stability improvements on all platforms. + + +2017-11-22: Version 6.4.352 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.351 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.350 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.349 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.348 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.347 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.346 + + Performance and stability improvements on all platforms. + + +2017-11-21: Version 6.4.345 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.344 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.343 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.342 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.341 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.340 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.339 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.338 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.337 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.336 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.335 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.334 + + Performance and stability improvements on all platforms. + + +2017-11-20: Version 6.4.333 + + Performance and stability improvements on all platforms. + + +2017-11-19: Version 6.4.332 + + Performance and stability improvements on all platforms. + + +2017-11-18: Version 6.4.331 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.330 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.329 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.328 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.327 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.326 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.325 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.324 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.323 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.322 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.321 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.320 + + Performance and stability improvements on all platforms. + + +2017-11-17: Version 6.4.319 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.318 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.317 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.316 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.315 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.314 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.313 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.312 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.311 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.310 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.309 + + Performance and stability improvements on all platforms. + + +2017-11-16: Version 6.4.308 + + Performance and stability improvements on all platforms. + + +2017-11-15: Version 6.4.307 + + Performance and stability improvements on all platforms. + + +2017-11-15: Version 6.4.306 + + Performance and stability improvements on all platforms. + + +2017-11-15: Version 6.4.305 + + Performance and stability improvements on all platforms. + + +2017-11-15: Version 6.4.304 + + Performance and stability improvements on all platforms. + + +2017-11-15: Version 6.4.303 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.302 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.301 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.300 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.299 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.298 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.297 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.296 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.295 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.294 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.293 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.292 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.291 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.290 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.289 + + Performance and stability improvements on all platforms. + + +2017-11-14: Version 6.4.288 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.287 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.286 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.285 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.284 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.283 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.282 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.281 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.280 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.279 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.278 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.277 + + Performance and stability improvements on all platforms. + + +2017-11-13: Version 6.4.276 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.275 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.274 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.273 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.272 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.271 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.270 + + Performance and stability improvements on all platforms. + + +2017-11-10: Version 6.4.269 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.268 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.267 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.266 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.265 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.264 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.263 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.262 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.261 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.260 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.259 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.258 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.257 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.256 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.255 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.254 + + Performance and stability improvements on all platforms. + + +2017-11-09: Version 6.4.253 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.252 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.251 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.250 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.249 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.248 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.247 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.246 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.245 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.244 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.243 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.242 + + Performance and stability improvements on all platforms. + + +2017-11-08: Version 6.4.241 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.240 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.239 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.238 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.237 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.236 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.235 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.234 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.233 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.232 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.231 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.230 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.229 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.228 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.227 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.226 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.225 + + Performance and stability improvements on all platforms. + + +2017-11-07: Version 6.4.224 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.223 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.222 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.221 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.220 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.219 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.218 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.217 + + Performance and stability improvements on all platforms. + + +2017-11-06: Version 6.4.216 + + Performance and stability improvements on all platforms. + + +2017-11-05: Version 6.4.215 + + Performance and stability improvements on all platforms. + + +2017-11-04: Version 6.4.214 + + Performance and stability improvements on all platforms. + + +2017-11-04: Version 6.4.213 + + Performance and stability improvements on all platforms. + + +2017-11-04: Version 6.4.212 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.211 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.210 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.209 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.208 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.207 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.206 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.205 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.204 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.203 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.202 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.201 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.200 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.199 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.198 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.197 + + Performance and stability improvements on all platforms. + + +2017-11-03: Version 6.4.196 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.195 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.194 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.193 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.192 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.191 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.190 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.189 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.188 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.187 + + Performance and stability improvements on all platforms. + + +2017-11-02: Version 6.4.186 + + Performance and stability improvements on all platforms. + + +2017-11-01: Version 6.4.185 + + Performance and stability improvements on all platforms. + + +2017-11-01: Version 6.4.184 + + Performance and stability improvements on all platforms. + + +2017-11-01: Version 6.4.183 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.182 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.181 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.180 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.179 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.178 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.177 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.176 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.175 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.174 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.173 + + Performance and stability improvements on all platforms. + + +2017-10-31: Version 6.4.172 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.171 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.170 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.169 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.168 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.167 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.166 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.165 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.164 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.163 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.162 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.161 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.160 + + Performance and stability improvements on all platforms. + + +2017-10-30: Version 6.4.159 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.158 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.157 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.156 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.155 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.154 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.153 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.152 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.151 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.150 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.149 + + Performance and stability improvements on all platforms. + + +2017-10-27: Version 6.4.148 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.147 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.146 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.145 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.144 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.143 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.142 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.141 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.140 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.139 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.138 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.137 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.136 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.135 + + Performance and stability improvements on all platforms. + + +2017-10-26: Version 6.4.134 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.133 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.132 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.131 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.130 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.129 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.128 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.127 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.126 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.125 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.124 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.123 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.122 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.121 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.120 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.119 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.118 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.117 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.116 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.115 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.114 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.113 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.112 + + Performance and stability improvements on all platforms. + + +2017-10-25: Version 6.4.111 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.110 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.109 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.108 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.107 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.106 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.105 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.104 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.103 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.102 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.101 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.100 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.99 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.98 + + Performance and stability improvements on all platforms. + + +2017-10-24: Version 6.4.97 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.96 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.95 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.94 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.93 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.92 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.91 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.90 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.89 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.88 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.87 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.86 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.85 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.84 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.83 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.82 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.81 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.80 + + Performance and stability improvements on all platforms. + + +2017-10-23: Version 6.4.79 + + Performance and stability improvements on all platforms. + + +2017-10-22: Version 6.4.78 + + Performance and stability improvements on all platforms. + + +2017-10-21: Version 6.4.77 + + Performance and stability improvements on all platforms. + + +2017-10-21: Version 6.4.76 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.75 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.74 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.73 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.72 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.71 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.70 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.69 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.68 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.67 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.66 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.65 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.64 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.63 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.62 + + Performance and stability improvements on all platforms. + + +2017-10-20: Version 6.4.61 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.60 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.59 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.58 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.57 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.56 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.55 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.54 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.53 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.52 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.51 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.50 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.49 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.48 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.47 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.46 + + Performance and stability improvements on all platforms. + + +2017-10-19: Version 6.4.45 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.44 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.43 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.42 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.41 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.40 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.39 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.38 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.37 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.36 + + Performance and stability improvements on all platforms. + + +2017-10-18: Version 6.4.35 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.34 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.33 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.32 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.31 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.30 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.29 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.28 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.27 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.26 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.25 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.24 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.23 + + Performance and stability improvements on all platforms. + + +2017-10-17: Version 6.4.22 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.21 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.20 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.19 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.18 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.17 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.16 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.15 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.14 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.13 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.12 + + Performance and stability improvements on all platforms. + + +2017-10-16: Version 6.4.11 + + Performance and stability improvements on all platforms. + + +2017-10-15: Version 6.4.10 + + Performance and stability improvements on all platforms. + + +2017-10-15: Version 6.4.9 + + Performance and stability improvements on all platforms. + + +2017-10-14: Version 6.4.8 + + Performance and stability improvements on all platforms. + + +2017-10-14: Version 6.4.7 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.6 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.5 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.4 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.3 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.2 + + Performance and stability improvements on all platforms. + + +2017-10-13: Version 6.4.1 + + Performance and stability improvements on all platforms. + + +2017-10-12: Version 6.3.298 + + Performance and stability improvements on all platforms. + + +2017-10-12: Version 6.3.297 + + Performance and stability improvements on all platforms. + + +2017-10-11: Version 6.3.296 + + Performance and stability improvements on all platforms. + + +2017-10-11: Version 6.3.295 + + Performance and stability improvements on all platforms. + + +2017-10-11: Version 6.3.294 + + Performance and stability improvements on all platforms. + + +2017-10-11: Version 6.3.293 + + Performance and stability improvements on all platforms. + + 2017-10-10: Version 6.3.292 Performance and stability improvements on all platforms. diff --git a/deps/v8/DEPS b/deps/v8/DEPS index b675dd830ef..d47306ccc5c 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -3,28 +3,34 @@ # all paths in here must match this assumption. vars = { + 'checkout_instrumented_libraries': False, 'chromium_url': 'https://chromium.googlesource.com', + 'build_for_node': False, } deps = { 'v8/build': - Var('chromium_url') + '/chromium/src/build.git' + '@' + 'adaf9e56105b814105e2d49bc4fa63e2cd4795f5', + Var('chromium_url') + '/chromium/src/build.git' + '@' + '9caf5bf8b5d0b9e3531031faad3e829bcc277176', 'v8/tools/gyp': Var('chromium_url') + '/external/gyp.git' + '@' + 'd61a9397e668fa9843c4aa7da9e79460fe590bfb', 'v8/third_party/icu': - Var('chromium_url') + '/chromium/deps/icu.git' + '@' + '21d33b1a09a77f033478ea4ffffb61e6970f83bd', + Var('chromium_url') + '/chromium/deps/icu.git' + '@' + 'e3b480d3be4446ea17011c0cdc9c4cd380a5c58f', 'v8/third_party/instrumented_libraries': - Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + '644afd349826cb68204226a16c38bde13abe9c3c', + Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + '28417458ac4dc79f68915079d0f283f682504cc0', 'v8/buildtools': - Var('chromium_url') + '/chromium/buildtools.git' + '@' + 'f6d165d9d842ddd29056c127a5f3a3c5d8e0d2e3', + Var('chromium_url') + '/chromium/buildtools.git' + '@' + '1be57dc4c2c68fa564ee258a3af0cf8003007edf', 'v8/base/trace_event/common': - Var('chromium_url') + '/chromium/src/base/trace_event/common.git' + '@' + 'abcc4153b783b5e2c2dafcfbf658017ecb56989a', + Var('chromium_url') + '/chromium/src/base/trace_event/common.git' + '@' + '0e9a47d74970bee1bbfc063c47215406f8918699', 'v8/third_party/android_tools': { - 'url': Var('chromium_url') + '/android_tools.git' + '@' + 'ca9dc7245b888c75307f0619e4a39fb46a82de66', + 'url': Var('chromium_url') + '/android_tools.git' + '@' + 'a2e9bc7c1b41d983577907df51d339fb1e0fd02f', 'condition': 'checkout_android', }, 'v8/third_party/catapult': { - 'url': Var('chromium_url') + '/catapult.git' + '@' + 'a48a6afde0ff7eeb1c847744192977e412107d6a', + 'url': Var('chromium_url') + '/catapult.git' + '@' + '9cfb34e845c8308d019a894be8c0926ee8cd3c91', + 'condition': 'checkout_android', + }, + 'v8/third_party/colorama/src': { + 'url': Var('chromium_url') + '/external/colorama.git' + '@' + '799604a1041e9b3bc5d2789ecbd7e8db2e18e6b8', 'condition': 'checkout_android', }, 'v8/third_party/jinja2': @@ -32,7 +38,7 @@ deps = { 'v8/third_party/markupsafe': Var('chromium_url') + '/chromium/src/third_party/markupsafe.git' + '@' + '8f45f5cfa0009d2a70589bcda0349b8cb2b72783', 'v8/tools/swarming_client': - Var('chromium_url') + '/infra/luci/client-py.git' + '@' + '5e8001d9a710121ce7a68efd0804430a34b4f9e4', + Var('chromium_url') + '/infra/luci/client-py.git' + '@' + '4bd9152f8a975d57c972c071dfb4ddf668e02200', 'v8/testing/gtest': Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '6f8a66431cb592dad629028a50b3dd418a408c87', 'v8/testing/gmock': @@ -42,15 +48,15 @@ deps = { 'v8/test/mozilla/data': Var('chromium_url') + '/v8/deps/third_party/mozilla-tests.git' + '@' + 'f6c578a10ea707b1a8ab0b88943fe5115ce2b9be', 'v8/test/test262/data': - Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + '290799bbeeba86245a355894b6ff2bb33d946d9e', + Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + '8311965251953d4745aeb68c98fb71fab2eac1d0', 'v8/test/test262/harness': Var('chromium_url') + '/external/github.com/test262-utils/test262-harness-py.git' + '@' + '0f2acdd882c84cff43b9d60df7574a1901e2cdcd', 'v8/tools/clang': - Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'b3169f97cc1a9daa1a9fbae15752588079792098', + Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'ec766dcbd3c35185026dfd6dd7218c280c1f4da4', 'v8/tools/luci-go': - Var('chromium_url') + '/chromium/src/tools/luci-go.git' + '@' + '9f54aa9fe06499b6bac378ae1f045be2158cf2cc', + Var('chromium_url') + '/chromium/src/tools/luci-go.git' + '@' + '45a8a51fda92e123619a69e7644d9c64a320b0c1', 'v8/test/wasm-js': - Var('chromium_url') + '/external/github.com/WebAssembly/spec.git' + '@' + '89573ee3eabc690637deeb1b8dadec13a963ec30', + Var('chromium_url') + '/external/github.com/WebAssembly/spec.git' + '@' + 'fb7e7e1e381ffc283c923a87fdfea5ebbd213737', } recursedeps = [ @@ -88,7 +94,7 @@ hooks = [ { 'name': 'clang_format_win', 'pattern': '.', - 'condition': 'host_os == "win"', + 'condition': 'host_os == "win" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=win32', @@ -100,7 +106,7 @@ hooks = [ { 'name': 'clang_format_mac', 'pattern': '.', - 'condition': 'host_os == "mac"', + 'condition': 'host_os == "mac" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=darwin', @@ -112,7 +118,7 @@ hooks = [ { 'name': 'clang_format_linux', 'pattern': '.', - 'condition': 'host_os == "linux"', + 'condition': 'host_os == "linux" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=linux*', @@ -124,6 +130,7 @@ hooks = [ { 'name': 'gcmole', 'pattern': '.', + 'condition': 'build_for_node != True', # TODO(machenbach): Insert condition and remove GYP_DEFINES dependency. 'action': [ 'python', @@ -133,6 +140,7 @@ hooks = [ { 'name': 'jsfunfuzz', 'pattern': '.', + 'condition': 'build_for_node != True', # TODO(machenbach): Insert condition and remove GYP_DEFINES dependency. 'action': [ 'python', @@ -143,7 +151,7 @@ hooks = [ { 'name': 'luci-go_win', 'pattern': '.', - 'condition': 'host_os == "win"', + 'condition': 'host_os == "win" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=win32', @@ -155,7 +163,7 @@ hooks = [ { 'name': 'luci-go_mac', 'pattern': '.', - 'condition': 'host_os == "mac"', + 'condition': 'host_os == "mac" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=darwin', @@ -167,7 +175,7 @@ hooks = [ { 'name': 'luci-go_linux', 'pattern': '.', - 'condition': 'host_os == "linux"', + 'condition': 'host_os == "linux" and build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--platform=linux*', @@ -216,6 +224,7 @@ hooks = [ { 'name': 'wasm_spec_tests', 'pattern': '.', + 'condition': 'build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--no_auth', @@ -227,6 +236,7 @@ hooks = [ { 'name': 'closure_compiler', 'pattern': '.', + 'condition': 'build_for_node != True', 'action': [ 'download_from_google_storage', '--no_resume', '--no_auth', @@ -241,6 +251,7 @@ hooks = [ # change. 'name': 'sysroot', 'pattern': '.', + 'condition': 'build_for_node != True', 'action': [ 'python', 'v8/build/linux/sysroot_scripts/install-sysroot.py', @@ -248,15 +259,26 @@ hooks = [ ], }, { - # Pull sanitizer-instrumented third-party libraries if requested via - # GYP_DEFINES. - 'name': 'instrumented_libraries', - 'pattern': '\\.sha1', - # TODO(machenbach): Insert condition and remove GYP_DEFINES dependency. - 'action': [ - 'python', - 'v8/third_party/instrumented_libraries/scripts/download_binaries.py', - ], + 'name': 'msan_chained_origins', + 'pattern': '.', + 'condition': 'checkout_instrumented_libraries', + 'action': [ 'download_from_google_storage', + '--no_resume', + '--no_auth', + '--bucket', 'chromium-instrumented-libraries', + '-s', 'v8/third_party/instrumented_libraries/binaries/msan-chained-origins-trusty.tgz.sha1', + ], + }, + { + 'name': 'msan_no_origins', + 'pattern': '.', + 'condition': 'checkout_instrumented_libraries', + 'action': [ 'download_from_google_storage', + '--no_resume', + '--no_auth', + '--bucket', 'chromium-instrumented-libraries', + '-s', 'v8/third_party/instrumented_libraries/binaries/msan-no-origins-trusty.tgz.sha1', + ], }, { # Update the Windows toolchain if necessary. @@ -271,7 +293,7 @@ hooks = [ { 'name': 'binutils', 'pattern': 'v8/third_party/binutils', - 'condition': 'host_os == "linux"', + 'condition': 'host_os == "linux" and build_for_node != True', 'action': [ 'python', 'v8/third_party/binutils/download.py', @@ -283,9 +305,30 @@ hooks = [ 'pattern': '.', 'action': ['python', 'v8/tools/clang/scripts/update.py'], }, + { + 'name': 'fuchsia_sdk', + 'pattern': '.', + 'condition': 'checkout_fuchsia', + 'action': [ + 'python', + 'v8/build/fuchsia/update_sdk.py', + '226f6dd0cad1d6be63a353ce2649423470729ae9', + ], + }, { # A change to a .gyp, .gypi, or to GYP itself should run the generator. + 'name': 'regyp_if_needed', 'pattern': '.', 'action': ['python', 'v8/gypfiles/gyp_v8', '--running-as-hook'], }, + # Download and initialize "vpython" VirtualEnv environment packages. + { + 'name': 'vpython_common', + 'pattern': '.', + 'condition': 'checkout_android', + 'action': [ 'vpython', + '-vpython-spec', 'v8/.vpython', + '-vpython-tool', 'install', + ], + }, ] diff --git a/deps/v8/OWNERS b/deps/v8/OWNERS index 621f375e336..2583a229b6c 100644 --- a/deps/v8/OWNERS +++ b/deps/v8/OWNERS @@ -27,10 +27,11 @@ mstarzinger@chromium.org mtrofin@chromium.org mvstanton@chromium.org mythria@chromium.org -petermarshall@chromium.org neis@chromium.org +petermarshall@chromium.org rmcilroy@chromium.org rossberg@chromium.org +sergiyb@chromium.org tebbi@chromium.org titzer@chromium.org ulan@chromium.org diff --git a/deps/v8/PRESUBMIT.py b/deps/v8/PRESUBMIT.py index 1ef291f6fa6..a595220a090 100644 --- a/deps/v8/PRESUBMIT.py +++ b/deps/v8/PRESUBMIT.py @@ -281,6 +281,8 @@ def _CommonChecks(input_api, output_api): results.extend(_CheckMissingFiles(input_api, output_api)) results.extend(_CheckJSONFiles(input_api, output_api)) results.extend(_CheckMacroUndefs(input_api, output_api)) + results.extend(input_api.RunTests( + input_api.canned_checks.CheckVPythonSpec(input_api, output_api))) return results diff --git a/deps/v8/base/trace_event/common/trace_event_common.h b/deps/v8/base/trace_event/common/trace_event_common.h index 132a4ea66fc..51869ee9525 100644 --- a/deps/v8/base/trace_event/common/trace_event_common.h +++ b/deps/v8/base/trace_event/common/trace_event_common.h @@ -189,6 +189,8 @@ // trace points would carry a significant performance cost of acquiring a lock // and resolving the category. +// Check that nobody includes this file directly. Clients are supposed to +// include the surrounding "trace_event.h" of their project instead. #if defined(TRACE_EVENT0) #error "Another copy of this file has already been included." #endif diff --git a/deps/v8/gni/isolate.gni b/deps/v8/gni/isolate.gni index 4bdf0c0fad2..6ad25c27749 100644 --- a/deps/v8/gni/isolate.gni +++ b/deps/v8/gni/isolate.gni @@ -106,6 +106,11 @@ template("v8_isolate_run") { } else { use_external_startup_data = "0" } + if (is_ubsan_vptr) { + ubsan_vptr = "1" + } else { + ubsan_vptr = "0" + } if (v8_use_snapshot) { use_snapshot = "true" } else { @@ -168,6 +173,8 @@ template("v8_isolate_run") { "--config-variable", "target_arch=$target_arch", "--config-variable", + "ubsan_vptr=$ubsan_vptr", + "--config-variable", "v8_use_external_startup_data=$use_external_startup_data", "--config-variable", "v8_use_snapshot=$use_snapshot", diff --git a/deps/v8/gni/v8.gni b/deps/v8/gni/v8.gni index 0467720f456..4b8292a2441 100644 --- a/deps/v8/gni/v8.gni +++ b/deps/v8/gni/v8.gni @@ -174,3 +174,13 @@ template("v8_component") { configs += v8_add_configs } } + +template("v8_static_library") { + static_library(target_name) { + complete_static_lib = true + forward_variables_from(invoker, "*", [ "configs" ]) + configs += invoker.configs + configs -= v8_remove_configs + configs += v8_add_configs + } +} diff --git a/deps/v8/gypfiles/all.gyp b/deps/v8/gypfiles/all.gyp index bc9d9650eb5..593ba2a7957 100644 --- a/deps/v8/gypfiles/all.gyp +++ b/deps/v8/gypfiles/all.gyp @@ -46,7 +46,7 @@ '../tools/gcmole/run_gcmole.gyp:*', '../tools/jsfunfuzz/jsfunfuzz.gyp:*', '../tools/run-deopt-fuzzer.gyp:*', - '../tools/run-valgrind.gyp:*', + '../tools/run-num-fuzzer.gyp:*', ], }], ] diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi index 1d3f67daee3..964e81f46cc 100644 --- a/deps/v8/gypfiles/features.gypi +++ b/deps/v8/gypfiles/features.gypi @@ -85,7 +85,7 @@ 'v8_check_microtasks_scopes_consistency%': 'false', # Enable concurrent marking. - 'v8_enable_concurrent_marking%': 0, + 'v8_enable_concurrent_marking%': 1, # Controls the threshold for on-heap/off-heap Typed Arrays. 'v8_typed_array_max_size_in_heap%': 64, @@ -158,7 +158,7 @@ }, # Debug 'Release': { 'variables': { - 'v8_enable_handle_zapping%': 0, + 'v8_enable_handle_zapping%': 1, }, 'conditions': [ ['v8_enable_handle_zapping==1', { diff --git a/deps/v8/gypfiles/isolate.gypi b/deps/v8/gypfiles/isolate.gypi index 149818c8d06..3e85b530e25 100644 --- a/deps/v8/gypfiles/isolate.gypi +++ b/deps/v8/gypfiles/isolate.gypi @@ -80,6 +80,7 @@ '--config-variable', 'sanitizer_coverage=<(sanitizer_coverage)', '--config-variable', 'component=<(component)', '--config-variable', 'target_arch=<(target_arch)', + '--config-variable', 'ubsan_vptr=0', '--config-variable', 'v8_use_external_startup_data=<(v8_use_external_startup_data)', '--config-variable', 'v8_use_snapshot=<(v8_use_snapshot)', ], diff --git a/deps/v8/gypfiles/standalone.gypi b/deps/v8/gypfiles/standalone.gypi index 63930d8aef1..7a45dc615f0 100644 --- a/deps/v8/gypfiles/standalone.gypi +++ b/deps/v8/gypfiles/standalone.gypi @@ -439,6 +439,7 @@ '-Wno-undefined-var-template', # TODO(yangguo): issue 5258 '-Wno-nonportable-include-path', + '-Wno-tautological-constant-compare', ], 'conditions':[ ['OS=="android"', { @@ -783,6 +784,11 @@ # over the place. '-fno-strict-aliasing', ], + }, { + 'cflags' : [ + # TODO(hans): https://crbug.com/767059 + '-Wno-tautological-constant-compare', + ], }], [ 'clang==1 and (v8_target_arch=="x64" or v8_target_arch=="arm64" \ or v8_target_arch=="mips64el")', { diff --git a/deps/v8/include/libplatform/libplatform.h b/deps/v8/include/libplatform/libplatform.h index b615088300e..04b47b8d2e1 100644 --- a/deps/v8/include/libplatform/libplatform.h +++ b/deps/v8/include/libplatform/libplatform.h @@ -8,6 +8,7 @@ #include "libplatform/libplatform-export.h" #include "libplatform/v8-tracing.h" #include "v8-platform.h" // NOLINT(build/include) +#include "v8config.h" // NOLINT(build/include) namespace v8 { namespace platform { @@ -33,12 +34,21 @@ enum class MessageLoopBehavior : bool { * If |tracing_controller| is nullptr, the default platform will create a * v8::platform::TracingController instance and use it. */ -V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform( +V8_PLATFORM_EXPORT std::unique_ptr NewDefaultPlatform( int thread_pool_size = 0, IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled, InProcessStackDumping in_process_stack_dumping = InProcessStackDumping::kEnabled, - v8::TracingController* tracing_controller = nullptr); + std::unique_ptr tracing_controller = {}); + +V8_PLATFORM_EXPORT V8_DEPRECATE_SOON( + "Use NewDefaultPlatform instead", + v8::Platform* CreateDefaultPlatform( + int thread_pool_size = 0, + IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled, + InProcessStackDumping in_process_stack_dumping = + InProcessStackDumping::kEnabled, + v8::TracingController* tracing_controller = nullptr)); /** * Pumps the message loop for the given isolate. @@ -46,7 +56,7 @@ V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform( * The caller has to make sure that this is called from the right thread. * Returns true if a task was executed, and false otherwise. Unless requested * through the |behavior| parameter, this call does not block if no task is - * pending. The |platform| has to be created using |CreateDefaultPlatform|. + * pending. The |platform| has to be created using |NewDefaultPlatform|. */ V8_PLATFORM_EXPORT bool PumpMessageLoop( v8::Platform* platform, v8::Isolate* isolate, @@ -60,7 +70,7 @@ V8_PLATFORM_EXPORT void EnsureEventLoopInitialized(v8::Platform* platform, * * The caller has to make sure that this is called from the right thread. * This call does not block if no task is pending. The |platform| has to be - * created using |CreateDefaultPlatform|. + * created using |NewDefaultPlatform|. */ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform, v8::Isolate* isolate, @@ -69,13 +79,14 @@ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform, /** * Attempts to set the tracing controller for the given platform. * - * The |platform| has to be created using |CreateDefaultPlatform|. + * The |platform| has to be created using |NewDefaultPlatform|. * - * DEPRECATED: Will be removed soon. */ -V8_PLATFORM_EXPORT void SetTracingController( - v8::Platform* platform, - v8::platform::tracing::TracingController* tracing_controller); +V8_PLATFORM_EXPORT V8_DEPRECATE_SOON( + "Access the DefaultPlatform directly", + void SetTracingController( + v8::Platform* platform, + v8::platform::tracing::TracingController* tracing_controller)); } // namespace platform } // namespace v8 diff --git a/deps/v8/include/v8-inspector.h b/deps/v8/include/v8-inspector.h index d0bb9b47fe4..1b5fbef0a86 100644 --- a/deps/v8/include/v8-inspector.h +++ b/deps/v8/include/v8-inspector.h @@ -151,6 +151,10 @@ class V8_EXPORT V8InspectorSession { virtual std::unique_ptr wrapObject( v8::Local, v8::Local, const StringView& groupName) = 0; + virtual std::unique_ptr wrapObject( + v8::Local, v8::Local, const StringView& groupName, + bool generatePreview) = 0; + virtual bool unwrapObject(std::unique_ptr* error, const StringView& objectId, v8::Local*, v8::Local*, @@ -215,6 +219,20 @@ class V8_EXPORT V8InspectorClient { virtual void maxAsyncCallStackDepthChanged(int depth) {} }; +// These stack trace ids are intended to be passed between debuggers and be +// resolved later. This allows to track cross-debugger calls and step between +// them if a single client connects to multiple debuggers. +struct V8_EXPORT V8StackTraceId { + uintptr_t id; + std::pair debugger_id; + + V8StackTraceId(); + V8StackTraceId(uintptr_t id, const std::pair debugger_id); + ~V8StackTraceId() = default; + + bool IsInvalid() const; +}; + class V8_EXPORT V8Inspector { public: static std::unique_ptr create(v8::Isolate*, V8InspectorClient*); @@ -237,6 +255,11 @@ class V8_EXPORT V8Inspector { virtual void asyncTaskFinished(void* task) = 0; virtual void allAsyncTasksCanceled() = 0; + virtual V8StackTraceId storeCurrentStackTrace( + const StringView& description) = 0; + virtual void externalAsyncTaskStarted(const V8StackTraceId& parent) = 0; + virtual void externalAsyncTaskFinished(const V8StackTraceId& parent) = 0; + // Exceptions instrumentation. virtual unsigned exceptionThrown( v8::Local, const StringView& message, diff --git a/deps/v8/include/v8-profiler.h b/deps/v8/include/v8-profiler.h index 621ca8b2157..a86402be924 100644 --- a/deps/v8/include/v8-profiler.h +++ b/deps/v8/include/v8-profiler.h @@ -286,6 +286,13 @@ class V8_EXPORT CpuProfiler { */ static CpuProfiler* New(Isolate* isolate); + /** + * Synchronously collect current stack sample in all profilers attached to + * the |isolate|. The call does not affect number of ticks recorded for + * the current top node. + */ + static void CollectSample(Isolate* isolate); + /** * Disposes the CPU profiler object. */ @@ -322,7 +329,8 @@ class V8_EXPORT CpuProfiler { * Recording the forced sample does not contribute to the aggregated * profile statistics. */ - void CollectSample(); + V8_DEPRECATED("Use static CollectSample(Isolate*) instead.", + void CollectSample()); /** * Tells the profiler whether the embedder is idle. diff --git a/deps/v8/include/v8-util.h b/deps/v8/include/v8-util.h index a04a5e84f80..15ea225dc12 100644 --- a/deps/v8/include/v8-util.h +++ b/deps/v8/include/v8-util.h @@ -393,9 +393,14 @@ class PersistentValueMap : public PersistentValueMapBase { */ Global SetUnique(const K& key, Global* persistent) { if (Traits::kCallbackType != kNotWeak) { + WeakCallbackType callback_type = + Traits::kCallbackType == kWeakWithInternalFields + ? WeakCallbackType::kInternalFields + : WeakCallbackType::kParameter; Local value(Local::New(this->isolate(), *persistent)); persistent->template SetWeak( - Traits::WeakCallbackParameter(this, key, value), WeakCallback); + Traits::WeakCallbackParameter(this, key, value), WeakCallback, + callback_type); } PersistentContainerValue old_value = Traits::Set(this->impl(), key, this->ClearAndLeak(persistent)); diff --git a/deps/v8/include/v8-version-string.h b/deps/v8/include/v8-version-string.h index eab0934804e..fb84144d544 100644 --- a/deps/v8/include/v8-version-string.h +++ b/deps/v8/include/v8-version-string.h @@ -29,9 +29,10 @@ "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) "." V8_S( \ V8_PATCH_LEVEL) V8_EMBEDDER_STRING V8_CANDIDATE_STRING #else -#define V8_VERSION_STRING \ - V8_S(V8_MAJOR_VERSION) \ - "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) V8_CANDIDATE_STRING +#define V8_VERSION_STRING \ + V8_S(V8_MAJOR_VERSION) \ + "." V8_S(V8_MINOR_VERSION) "." V8_S(V8_BUILD_NUMBER) \ + V8_EMBEDDER_STRING V8_CANDIDATE_STRING #endif #endif // V8_VERSION_STRING_H_ diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 46bb92f6506..a5253f6bd07 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -9,9 +9,9 @@ // NOTE these macros are used by some of the tool scripts and the build // system so their names cannot be changed without changing the scripts. #define V8_MAJOR_VERSION 6 -#define V8_MINOR_VERSION 3 -#define V8_BUILD_NUMBER 292 -#define V8_PATCH_LEVEL 46 +#define V8_MINOR_VERSION 5 +#define V8_BUILD_NUMBER 75 +#define V8_PATCH_LEVEL 0 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h index f1001533649..0dc862ae156 100644 --- a/deps/v8/include/v8.h +++ b/deps/v8/include/v8.h @@ -433,20 +433,6 @@ class WeakCallbackInfo { V8_INLINE T* GetParameter() const { return parameter_; } V8_INLINE void* GetInternalField(int index) const; - V8_INLINE V8_DEPRECATED("use indexed version", - void* GetInternalField1() const) { - return embedder_fields_[0]; - } - V8_INLINE V8_DEPRECATED("use indexed version", - void* GetInternalField2() const) { - return embedder_fields_[1]; - } - - V8_DEPRECATED("Not realiable once SetSecondPassCallback() was used.", - bool IsFirstPass() const) { - return callback_ != nullptr; - } - // When first called, the embedder MUST Reset() the Global which triggered the // callback. The Global itself is unusable for anything else. No v8 other api // calls may be called in the first callback. Should additional work be @@ -579,16 +565,22 @@ template class PersistentBase { * independent handle should not assume that it will be preceded by a global * GC prologue callback or followed by a global GC epilogue callback. */ - V8_INLINE void MarkIndependent(); + V8_DEPRECATE_SOON( + "Objects are always considered independent. " + "Use MarkActive to avoid collecting otherwise dead weak handles.", + V8_INLINE void MarkIndependent()); /** * Marks the reference to this object as active. The scavenge garbage - * collection should not reclaim the objects marked as active. + * collection should not reclaim the objects marked as active, even if the + * object held by the handle is otherwise unreachable. + * * This bit is cleared after the each garbage collection pass. */ V8_INLINE void MarkActive(); - V8_INLINE bool IsIndependent() const; + V8_DEPRECATE_SOON("See MarkIndependent.", + V8_INLINE bool IsIndependent() const); /** Checks if the handle holds the only reference to an object. */ V8_INLINE bool IsNearDeath() const; @@ -984,9 +976,6 @@ class V8_EXPORT Data { }; /** - * This is an unfinished experimental feature, and is only exposed - * here for internal testing purposes. DO NOT USE. - * * A container type that holds relevant metadata for module loading. * * This is passed back to the embedder as part of @@ -1008,9 +997,6 @@ class V8_EXPORT ScriptOrModule { }; /** - * This is an unfinished experimental feature, and is only exposed - * here for internal testing purposes. DO NOT USE. - * * An array to hold Primitive values. This is used by the embedder to * pass host defined options to the ScriptOptions during compilation. * @@ -1440,6 +1426,26 @@ class V8_EXPORT ScriptCompiler { kConsumeCodeCache }; + /** + * The reason for which we are not requesting or providing a code cache. + */ + enum NoCacheReason { + kNoCacheNoReason = 0, + kNoCacheBecauseCachingDisabled, + kNoCacheBecauseNoResource, + kNoCacheBecauseInlineScript, + kNoCacheBecauseModule, + kNoCacheBecauseStreamingSource, + kNoCacheBecauseInspector, + kNoCacheBecauseScriptTooSmall, + kNoCacheBecauseCacheTooCold, + kNoCacheBecauseV8Extension, + kNoCacheBecauseExtensionModule, + kNoCacheBecausePacScript, + kNoCacheBecauseInDocumentWrite, + kNoCacheBecauseResourceWithNoCacheHandler + }; + /** * Compiles the specified script (context-independent). * Cached data as part of the source object can be optionally produced to be @@ -1456,10 +1462,12 @@ class V8_EXPORT ScriptCompiler { static V8_DEPRECATED("Use maybe version", Local CompileUnbound( Isolate* isolate, Source* source, - CompileOptions options = kNoCompileOptions)); + CompileOptions options = kNoCompileOptions, + NoCacheReason no_cache_reason = kNoCacheNoReason)); static V8_WARN_UNUSED_RESULT MaybeLocal CompileUnboundScript( Isolate* isolate, Source* source, - CompileOptions options = kNoCompileOptions); + CompileOptions options = kNoCompileOptions, + NoCacheReason no_cache_reason = kNoCacheNoReason); /** * Compiles the specified script (bound to current context). @@ -1475,10 +1483,12 @@ class V8_EXPORT ScriptCompiler { static V8_DEPRECATED( "Use maybe version", Local + @@ -254,16 +255,17 @@ let fragment = document.createDocumentFragment(); function td(tr, content, className) { - let td = document.createElement("td"); + let node = document.createElement("td"); if (typeof content == "object") { - td.appendChild(content); + node.appendChild(content); } else { - td.innerHTML = content; + node.innerHTML = content; } - td.className = className - tr.appendChild(td); - return td + node.className = className + tr.appendChild(node); + return node } + let max = Math.min(1000, entries.length) for (let i = 0; i < max; i++) { let entry = entries[i]; @@ -278,8 +280,8 @@ let omitted = entries.length - max; if (omitted > 0) { let tr = document.createElement("tr"); - let td = td(tr, 'Omitted ' + omitted + " entries."); - td.colSpan = 4; + let tdNode = td(tr, 'Omitted ' + omitted + " entries."); + tdNode.colSpan = 4; fragment.appendChild(tr); } parent.appendChild(fragment); diff --git a/deps/v8/tools/ic-processor b/deps/v8/tools/ic-processor index f41b4471742..c33052cdf6a 100755 --- a/deps/v8/tools/ic-processor +++ b/deps/v8/tools/ic-processor @@ -36,6 +36,6 @@ fi cat $log_file | $d8_exec $tools_path/splaytree.js $tools_path/codemap.js \ $tools_path/csvparser.js $tools_path/consarray.js \ $tools_path/profile.js $tools_path/profile_view.js \ - $tools_path/logreader.js $tools_path/ic-processor.js \ - $tools_path/SourceMap.js \ + $tools_path/logreader.js $tools_path/arguments.js \ + $tools_path/ic-processor.js $tools_path/SourceMap.js \ $tools_path/ic-processor-driver.js -- $@ 2>/dev/null diff --git a/deps/v8/tools/ic-processor-driver.js b/deps/v8/tools/ic-processor-driver.js index 58c608d0209..2aa52006c73 100644 --- a/deps/v8/tools/ic-processor-driver.js +++ b/deps/v8/tools/ic-processor-driver.js @@ -12,7 +12,7 @@ function processArguments(args) { } function initSourceMapSupport() { - // Pull dev tools source maps into our name space. + // Pull dev tools source maps into our name space. SourceMap = WebInspector.SourceMap; // Overwrite the load function to load scripts synchronously. diff --git a/deps/v8/tools/ic-processor.js b/deps/v8/tools/ic-processor.js index 9897de2c6cb..93f40b38a08 100644 --- a/deps/v8/tools/ic-processor.js +++ b/deps/v8/tools/ic-processor.js @@ -156,94 +156,24 @@ IcProcessor.prototype.processPropertyIC = function ( var entry = this.profile_.findEntry(pc); print(type + " (" + old_state + "->" + new_state + modifier + ") at " + this.formatName(entry) + ":" + line + ":" + column + " " + name + - " (map 0x" + map.toString(16) + ")"); + " (map 0x" + map.toString(16) + ")" + + (slow_reason ? " " + slow_reason : "")); } -function padLeft(s, len) { - s = s.toString(); - if (s.length < len) { - var padLength = len - s.length; - if (!(padLength in padLeft)) { - padLeft[padLength] = new Array(padLength + 1).join(' '); - } - s = padLeft[padLength] + s; - } - return s; -}; - - -function ArgumentsProcessor(args) { - this.args_ = args; - this.result_ = ArgumentsProcessor.DEFAULTS; - - this.argsDispatch_ = { - '--range': ['range', 'auto,auto', - 'Specify the range limit as [start],[end]'], - '--source-map': ['sourceMap', null, - 'Specify the source map that should be used for output'] - }; -}; - -ArgumentsProcessor.DEFAULTS = { - logFileName: 'v8.log', - range: 'auto,auto', -}; - - -ArgumentsProcessor.prototype.parse = function() { - while (this.args_.length) { - var arg = this.args_.shift(); - if (arg.charAt(0) != '-') { - this.result_.logFileName = arg; - continue; - } - var userValue = null; - var eqPos = arg.indexOf('='); - if (eqPos != -1) { - userValue = arg.substr(eqPos + 1); - arg = arg.substr(0, eqPos); - } - if (arg in this.argsDispatch_) { - var dispatch = this.argsDispatch_[arg]; - this.result_[dispatch[0]] = userValue == null ? dispatch[1] : userValue; - } else { - return false; - } +class ArgumentsProcessor extends BaseArgumentsProcessor { + getArgsDispatch() { + return { + '--range': ['range', 'auto,auto', + 'Specify the range limit as [start],[end]'], + '--source-map': ['sourceMap', null, + 'Specify the source map that should be used for output'] + }; } - return true; -}; - - -ArgumentsProcessor.prototype.result = function() { - return this.result_; -}; - - -ArgumentsProcessor.prototype.printUsageAndExit = function() { - - function padRight(s, len) { - s = s.toString(); - if (s.length < len) { - s = s + (new Array(len - s.length + 1).join(' ')); - } - return s; - } - - print('Cmdline args: [options] [log-file-name]\n' + - 'Default log file name is "' + - ArgumentsProcessor.DEFAULTS.logFileName + '".\n'); - print('Options:'); - for (var arg in this.argsDispatch_) { - var synonyms = [arg]; - var dispatch = this.argsDispatch_[arg]; - for (var synArg in this.argsDispatch_) { - if (arg !== synArg && dispatch === this.argsDispatch_[synArg]) { - synonyms.push(synArg); - delete this.argsDispatch_[synArg]; - } - } - print(' ' + padRight(synonyms.join(', '), 20) + " " + dispatch[2]); + getDefaultResults() { + return { + logFileName: 'v8.log', + range: 'auto,auto', + }; } - quit(2); -}; +} diff --git a/deps/v8/tools/js2c.py b/deps/v8/tools/js2c.py index 7c92a4ef6ed..0fe5fbad6d1 100755 --- a/deps/v8/tools/js2c.py +++ b/deps/v8/tools/js2c.py @@ -125,6 +125,9 @@ def add_arg(str): end = end + 1 # Remember to add the last match. add_arg(lines[last_match:end-1]) + if arg_index[0] < len(macro.args) -1: + lineno = lines.count(os.linesep, 0, start) + 1 + raise Error('line %s: Too few arguments for macro "%s"' % (lineno, name_pattern.pattern)) result = macro.expand(mapping) # Replace the occurrence of the macro with the expansion lines = lines[:start] + result + lines[end:] @@ -362,7 +365,7 @@ def __init__(self): def IsDebuggerFile(filename): - return "debug" in filename + return os.path.basename(os.path.dirname(filename)) == "debug" def IsMacroFile(filename): return filename.endswith("macros.py") diff --git a/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py index 19eff02438f..2925213ced5 100644 --- a/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py +++ b/deps/v8/tools/jsfunfuzz/download_jsfunfuzz.py @@ -18,5 +18,3 @@ '-s', SHA1_PATH, '--platform=linux*' ]) -else: - print 'Skipping jsfunfuzz download as jsfunfuzz is not set in gyp flags.' diff --git a/deps/v8/tools/linux-tick-processor b/deps/v8/tools/linux-tick-processor index 0b491c3633f..705e07d514d 100755 --- a/deps/v8/tools/linux-tick-processor +++ b/deps/v8/tools/linux-tick-processor @@ -37,6 +37,6 @@ cat $log_file | $d8_exec --enable-os-system \ $tools_path/splaytree.js $tools_path/codemap.js \ $tools_path/csvparser.js $tools_path/consarray.js \ $tools_path/profile.js $tools_path/profile_view.js \ - $tools_path/logreader.js $tools_path/tickprocessor.js \ - $tools_path/SourceMap.js \ + $tools_path/logreader.js $tools_path/arguments.js \ + $tools_path/tickprocessor.js $tools_path/SourceMap.js \ $tools_path/tickprocessor-driver.js -- $@ 2>/dev/null diff --git a/deps/v8/tools/memory/asan/blacklist_win.txt b/deps/v8/tools/memory/asan/blacklist_win.txt new file mode 100644 index 00000000000..2bb1aa9714f --- /dev/null +++ b/deps/v8/tools/memory/asan/blacklist_win.txt @@ -0,0 +1,4 @@ +# The rules in this file are only applied at compile time. If you can modify the +# source in question, consider function attributes to disable instrumentation. +# +# Please think twice before you add or remove these rules. \ No newline at end of file diff --git a/deps/v8/tools/parser-shell.cc b/deps/v8/tools/parser-shell.cc index 7c7da243b5e..1a492239969 100644 --- a/deps/v8/tools/parser-shell.cc +++ b/deps/v8/tools/parser-shell.cc @@ -129,8 +129,8 @@ std::pair RunBaselineParser( int main(int argc, char* argv[]) { v8::V8::SetFlagsFromCommandLine(&argc, argv, true); v8::V8::InitializeICUDefaultLocation(argv[0]); - v8::Platform* platform = v8::platform::CreateDefaultPlatform(); - v8::V8::InitializePlatform(platform); + std::unique_ptr platform = v8::platform::NewDefaultPlatform(); + v8::V8::InitializePlatform(platform.get()); v8::V8::Initialize(); v8::V8::InitializeExternalStartupData(argv[0]); @@ -184,7 +184,6 @@ int main(int argc, char* argv[]) { } v8::V8::Dispose(); v8::V8::ShutdownPlatform(); - delete platform; delete create_params.array_buffer_allocator; return 0; } diff --git a/deps/v8/tools/perf-compare.py b/deps/v8/tools/perf-compare.py index b7a795b4530..75f3c73c6a2 100755 --- a/deps/v8/tools/perf-compare.py +++ b/deps/v8/tools/perf-compare.py @@ -12,7 +12,6 @@ ''' from collections import OrderedDict -import commands import json import math from argparse import ArgumentParser diff --git a/deps/v8/tools/perf-to-html.py b/deps/v8/tools/perf-to-html.py index ac9f53f6179..e3979360a7f 100755 --- a/deps/v8/tools/perf-to-html.py +++ b/deps/v8/tools/perf-to-html.py @@ -12,7 +12,6 @@ %prog -f results.json -t "ia32 results" -o results.html ''' -import commands import json import math from optparse import OptionParser diff --git a/deps/v8/tools/perf/statistics-for-json.R b/deps/v8/tools/perf/statistics-for-json.R index fde2cd75db1..b731ccc5d3d 100644 --- a/deps/v8/tools/perf/statistics-for-json.R +++ b/deps/v8/tools/perf/statistics-for-json.R @@ -8,9 +8,9 @@ # To use the script, first get some benchmark results, for example via # tools/run_perf.py ../v8-perf/benchmarks/Octane2.1/Octane2.1-TF.json -# --outdir=out/x64.release-on --outdir-no-patch=out/x64.release-off +# --outdir=out/x64.release-on --outdir-secondary=out/x64.release-off # --json-test-results=results-on.json -# --json-test-results-no-patch=results-off.json +# --json-test-results-secondary=results-off.json # then run this script # Rscript statistics-for-json.R results-on.json results-off.json ~/SVG # to produce graphs (and get stdio output of statistical tests). diff --git a/deps/v8/tools/plot-timer-events b/deps/v8/tools/plot-timer-events index b65937cfe6d..3294e858620 100755 --- a/deps/v8/tools/plot-timer-events +++ b/deps/v8/tools/plot-timer-events @@ -78,8 +78,9 @@ fi cat $log_file | $d8_exec $tools_path/csvparser.js $tools_path/splaytree.js \ $tools_path/codemap.js $tools_path/profile.js $tools_path/profile_view.js \ - $tools_path/logreader.js $tools_path/tickprocessor.js \ - $tools_path/profviz/composer.js $tools_path/profviz/stdio.js \ + $tools_path/logreader.js $tools_path/arguments.js \ + $tools_path/tickprocessor.js$tools_path/profviz/composer.js \ + $tools_path/profviz/stdio.js \ -- $@ $options 2>/dev/null > timer-events.plot success=$? diff --git a/deps/v8/tools/predictable_wrapper.py b/deps/v8/tools/predictable_wrapper.py new file mode 100644 index 00000000000..cf7bf00b3f6 --- /dev/null +++ b/deps/v8/tools/predictable_wrapper.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +Wrapper script for verify-predictable mode. D8 is expected to be compiled with +v8_enable_verify_predictable. + +The actual test command is expected to be passed to this wraper as is. E.g.: +predictable_wrapper.py path/to/d8 --test --predictable --flag1 --flag2 + +The command is run up to three times and the printed allocation hash is +compared. Differences are reported as errors. +""" + +import sys + +from testrunner.local import command + +MAX_TRIES = 3 + +def main(args): + def allocation_str(stdout): + for line in reversed((stdout or '').splitlines()): + if line.startswith('### Allocations = '): + return line + return None + + cmd = command.Command(args[0], args[1:]) + + previous_allocations = None + for run in range(1, MAX_TRIES + 1): + print '### Predictable run #%d' % run + output = cmd.execute() + if output.stdout: + print '### Stdout:' + print output.stdout + if output.stderr: + print '### Stderr:' + print output.stderr + print '### Return code: %s' % output.exit_code + if output.HasTimedOut(): + # If we get a timeout in any run, we are in an unpredictable state. Just + # report it as a failure and don't rerun. + print '### Test timed out' + return 1 + allocations = allocation_str(output.stdout) + if not allocations: + print ('### Test had no allocation output. Ensure this is built ' + 'with v8_enable_verify_predictable and that ' + '--verify-predictable is passed at the cmd line.') + return 2 + if previous_allocations and previous_allocations != allocations: + print '### Allocations differ' + return 3 + if run >= MAX_TRIES: + # No difference on the last run -> report a success. + return 0 + previous_allocations = allocations + # Unreachable. + assert False + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/deps/v8/tools/presubmit.py b/deps/v8/tools/presubmit.py index c4ee310ce93..22904224594 100755 --- a/deps/v8/tools/presubmit.py +++ b/deps/v8/tools/presubmit.py @@ -54,15 +54,11 @@ # build/header_guard: Our guards have the form "V8_FOO_H_", not "SRC_FOO_H_". # build/include_what_you_use: Started giving false positives for variables # named "string" and "map" assuming that you needed to include STL headers. -# TODO(bmeurer): Fix and re-enable readability/check -# http://crrev.com/2199323003 relands. LINT_RULES = """ -build/header_guard -build/include_what_you_use --readability/check -readability/fn_size -+readability/streams -runtime/references """.split() @@ -512,11 +508,30 @@ def IsRelevant(self, name): return True def GetPathsToSearch(self): - return ['test'] + return ['test', 'tools/testrunner'] def ProcessFiles(self, files): + success = True + for status_file_path in sorted(self._GetStatusFiles(files)): + success &= statusfile.PresubmitCheck(status_file_path) + success &= _CheckStatusFileForDuplicateKeys(status_file_path) + return success + + def _GetStatusFiles(self, files): test_path = join(dirname(TOOLS_PATH), 'test') - status_files = set([]) + testrunner_path = join(TOOLS_PATH, 'testrunner') + status_files = set() + + for file_path in files: + if file_path.startswith(testrunner_path): + for suitepath in os.listdir(test_path): + suitename = os.path.basename(suitepath) + status_file = os.path.join( + test_path, suitename, suitename + ".status") + if os.path.exists(status_file): + status_files.add(status_file) + return status_files + for file_path in files: if file_path.startswith(test_path): # Strip off absolute path prefix pointing to test suites. @@ -530,12 +545,7 @@ def ProcessFiles(self, files): if not os.path.exists(status_file): continue status_files.add(status_file) - - success = True - for status_file_path in sorted(status_files): - success &= statusfile.PresubmitCheck(status_file_path) - success &= _CheckStatusFileForDuplicateKeys(status_file_path) - return success + return status_files def CheckDeps(workspace): diff --git a/deps/v8/tools/profview/profile-utils.js b/deps/v8/tools/profview/profile-utils.js index 3ccf13ab7fb..f5a85bed8d2 100644 --- a/deps/v8/tools/profview/profile-utils.js +++ b/deps/v8/tools/profview/profile-utils.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -"use strict" +"use strict"; let codeKinds = [ "UNKNOWN", @@ -80,13 +80,13 @@ function resolveCodeKindAndVmState(code, vmState) { function codeEquals(code1, code2, allowDifferentKinds = false) { if (!code1 || !code2) return false; - if (code1.name != code2.name || code1.type != code2.type) return false; + if (code1.name !== code2.name || code1.type !== code2.type) return false; - if (code1.type == 'CODE') { - if (!allowDifferentKinds && code1.kind != code2.kind) return false; - } else if (code1.type == 'JS') { - if (!allowDifferentKinds && code1.kind != code2.kind) return false; - if (code1.func != code2.func) return false; + if (code1.type === 'CODE') { + if (!allowDifferentKinds && code1.kind !== code2.kind) return false; + } else if (code1.type === 'JS') { + if (!allowDifferentKinds && code1.kind !== code2.kind) return false; + if (code1.func !== code2.func) return false; } return true; } @@ -409,7 +409,7 @@ class CategorySampler { let { tm : timestamp, vm : vmState, s : stack } = file.ticks[tickIndex]; let i = Math.floor((timestamp - this.firstTime) / this.step); - if (i == this.buckets.length) i--; + if (i === this.buckets.length) i--; console.assert(i >= 0 && i < this.buckets.length); let bucket = this.buckets[i]; @@ -440,7 +440,7 @@ class FunctionTimelineProcessor { // ignoring any filtered entries. let stackCode = undefined; let functionPosInStack = -1; - let filteredI = 0 + let filteredI = 0; for (let i = 0; i < stack.length - 1; i += 2) { let codeId = stack[i]; let code = codeId >= 0 ? file.code[codeId] : undefined; @@ -461,7 +461,7 @@ class FunctionTimelineProcessor { if (functionPosInStack >= 0) { let stackKind = resolveCodeKindAndVmState(stackCode, vmState); - let codeIsTopOfStack = (functionPosInStack == 0); + let codeIsTopOfStack = (functionPosInStack === 0); if (this.currentBlock !== null) { this.currentBlock.end = timestamp; diff --git a/deps/v8/tools/profview/profview.js b/deps/v8/tools/profview/profview.js index 96a6a683282..d480cd4a771 100644 --- a/deps/v8/tools/profview/profview.js +++ b/deps/v8/tools/profview/profview.js @@ -49,7 +49,7 @@ let main = { currentState : emptyState(), setMode(mode) { - if (mode != main.currentState.mode) { + if (mode !== main.currentState.mode) { function setCallTreeModifiers(attribution, categories, sort) { let callTreeState = Object.assign({}, main.currentState.callTree); @@ -84,7 +84,7 @@ let main = { }, setCallTreeAttribution(attribution) { - if (attribution != main.currentState.attribution) { + if (attribution !== main.currentState.attribution) { let callTreeState = Object.assign({}, main.currentState.callTree); callTreeState.attribution = attribution; main.currentState = setCallTreeState(main.currentState, callTreeState); @@ -93,7 +93,7 @@ let main = { }, setCallTreeSort(sort) { - if (sort != main.currentState.sort) { + if (sort !== main.currentState.sort) { let callTreeState = Object.assign({}, main.currentState.callTree); callTreeState.sort = sort; main.currentState = setCallTreeState(main.currentState, callTreeState); @@ -102,7 +102,7 @@ let main = { }, setCallTreeCategories(categories) { - if (categories != main.currentState.categories) { + if (categories !== main.currentState.categories) { let callTreeState = Object.assign({}, main.currentState.callTree); callTreeState.categories = categories; main.currentState = setCallTreeState(main.currentState, callTreeState); @@ -111,8 +111,8 @@ let main = { }, setViewInterval(start, end) { - if (start != main.currentState.start || - end != main.currentState.end) { + if (start !== main.currentState.start || + end !== main.currentState.end) { main.currentState = Object.assign({}, main.currentState); main.currentState.start = start; main.currentState.end = end; @@ -121,8 +121,8 @@ let main = { }, setTimeLineDimensions(width, height) { - if (width != main.currentState.timeLine.width || - height != main.currentState.timeLine.height) { + if (width !== main.currentState.timeLine.width || + height !== main.currentState.timeLine.height) { let timeLine = Object.assign({}, main.currentState.timeLine); timeLine.width = width; timeLine.height = height; @@ -133,7 +133,7 @@ let main = { }, setFile(file) { - if (file != main.currentState.file) { + if (file !== main.currentState.file) { main.currentState = Object.assign({}, main.currentState); main.currentState.file = file; main.delayRender(); @@ -141,7 +141,7 @@ let main = { }, setCurrentCode(codeId) { - if (codeId != main.currentState.currentCodeId) { + if (codeId !== main.currentState.currentCodeId) { main.currentState = Object.assign({}, main.currentState); main.currentState.currentCodeId = codeId; main.delayRender(); @@ -235,7 +235,7 @@ let bucketDescriptors = text : "Unknown" } ]; -let kindToBucketDescriptor = {} +let kindToBucketDescriptor = {}; for (let i = 0; i < bucketDescriptors.length; i++) { let bucket = bucketDescriptors[i]; for (let j = 0; j < bucket.kinds.length; j++) { @@ -335,11 +335,11 @@ function createTableExpander(indent) { } function createFunctionNode(name, codeId) { - if (codeId == -1) { + if (codeId === -1) { return document.createTextNode(name); } let nameElement = document.createElement("span"); - nameElement.classList.add("codeid-link") + nameElement.classList.add("codeid-link"); nameElement.onclick = function() { main.setCurrentCode(codeId); }; @@ -377,13 +377,13 @@ class CallTreeView { if (c1.ticks < c2.ticks) return 1; else if (c1.ticks > c2.ticks) return -1; return c2.ownTicks - c1.ownTicks; - } + }; case "own-time": return (c1, c2) => { if (c1.ownTicks < c2.ownTicks) return 1; else if (c1.ownTicks > c2.ownTicks) return -1; return c2.ticks - c1.ticks; - } + }; case "category-time": return (c1, c2) => { if (c1.type === c2.type) return c2.ticks - c1.ticks; @@ -439,7 +439,7 @@ class CallTreeView { let row = this.rows.insertRow(index); row.id = id + i + "/"; - if (node.type != "CAT") { + if (node.type !== "CAT") { row.style.backgroundColor = bucketFromKind(node.type).backgroundColor; } @@ -631,7 +631,7 @@ class CallTreeView { } else { console.assert(mode === "bottom-up"); - if (this.currentState.callTree.categories == "none") { + if (this.currentState.callTree.categories === "none") { stackProcessor = new PlainCallTreeProcessor(filter, true); } else { diff --git a/deps/v8/tools/profviz/profviz.js b/deps/v8/tools/profviz/profviz.js index 8ac0881eb6f..a7593a6f65f 100644 --- a/deps/v8/tools/profviz/profviz.js +++ b/deps/v8/tools/profviz/profviz.js @@ -33,6 +33,7 @@ var worker_scripts = [ "../profile.js", "../profile_view.js", "../logreader.js", + "../arguments.js", "../tickprocessor.js", "composer.js", "gnuplot-4.6.3-emscripten.js" diff --git a/deps/v8/tools/release/auto_roll.py b/deps/v8/tools/release/auto_roll.py index da4cc7efea4..b27675e60c8 100755 --- a/deps/v8/tools/release/auto_roll.py +++ b/deps/v8/tools/release/auto_roll.py @@ -159,6 +159,7 @@ def RunStep(self): force=True, bypass_hooks=True, cq=self._options.use_commit_queue, + cq_dry_run=self._options.use_dry_run, cwd=cwd) print "CL uploaded." else: @@ -195,9 +196,13 @@ def _PrepareOptions(self, parser): "specified."), parser.add_argument("--roll", help="Deprecated.", default=True, action="store_true") - parser.add_argument("--use-commit-queue", - help="Check the CQ bit on upload.", - default=True, action="store_true") + group = parser.add_mutually_exclusive_group() + group.add_argument("--use-commit-queue", + help="Trigger the CQ full run on upload.", + default=False, action="store_true") + group.add_argument("--use-dry-run", + help="Trigger the CQ dry run on upload.", + default=True, action="store_true") def _ProcessOptions(self, options): # pragma: no cover if not options.author or not options.reviewer: diff --git a/deps/v8/tools/release/backport_node.py b/deps/v8/tools/release/backport_node.py deleted file mode 100755 index 55235256713..00000000000 --- a/deps/v8/tools/release/backport_node.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python -# Copyright 2017 the V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -""" -Use this script to cherry-pick a V8 commit to backport to a Node.js checkout. - -Requirements: - - Node.js checkout to backport to. - - V8 checkout that contains the commit to cherry-pick. - -Usage: - $ backport_node.py - - This will apply the commit to /deps/v8 and create a commit in - the Node.js checkout, increment patch level, and copy over the original - commit message. - -Optional flags: - --no-review Run `gclient sync` on the V8 checkout before updating. -""" - -import argparse -import os -import subprocess -import re -import sys - -from common_includes import * - -TARGET_SUBDIR = os.path.join("deps", "v8") -VERSION_FILE = os.path.join("include", "v8-version.h") -VERSION_PATTERN = r'(?<=#define V8_PATCH_LEVEL )\d+' - -def Clean(options): - print ">> Cleaning target directory." - subprocess.check_call(["git", "clean", "-fd"], - cwd = os.path.join(options.node_path, TARGET_SUBDIR)) - -def CherryPick(options): - print ">> Apply patch." - patch = subprocess.Popen(["git", "diff-tree", "-p", options.commit], - stdout=subprocess.PIPE, cwd=options.v8_path) - patch.wait() - try: - subprocess.check_output(["git", "apply", "-3", "--directory=%s" % TARGET_SUBDIR], - stdin=patch.stdout, cwd=options.node_path) - except: - print ">> In another shell, please resolve patch conflicts" - print ">> and `git add` affected files." - print ">> Finally continue by entering RESOLVED." - while raw_input("[RESOLVED]") != "RESOLVED": - print ">> You need to type RESOLVED" - -def UpdateVersion(options): - print ">> Increment patch level." - version_file = os.path.join(options.node_path, TARGET_SUBDIR, VERSION_FILE) - text = FileToText(version_file) - def increment(match): - patch = int(match.group(0)) - return str(patch + 1) - text = re.sub(VERSION_PATTERN, increment, text, flags=re.MULTILINE) - TextToFile(text, version_file) - -def CreateCommit(options): - print ">> Creating commit." - # Find short hash from source. - shorthash = subprocess.check_output( - ["git", "rev-parse", "--short", options.commit], - cwd=options.v8_path).strip() - - # Commit message - title = "deps: backport %s from upstream V8" % shorthash - body = subprocess.check_output( - ["git", "log", options.commit, "-1", "--format=%B"], - cwd=options.v8_path).strip() - body = '\n'.join(" " + line for line in body.splitlines()) - - message = title + "\n\nOriginal commit message:\n\n" + body - - # Create commit at target. - review_message = "--no-edit" if options.no_review else "--edit" - git_commands = [ - ["git", "checkout", "-b", "backport_%s" % shorthash], # new branch - ["git", "add", TARGET_SUBDIR], # add files - ["git", "commit", "-m", message, review_message] # new commit - ] - for command in git_commands: - subprocess.check_call(command, cwd=options.node_path) - -def ParseOptions(args): - parser = argparse.ArgumentParser(description="Backport V8 commit to Node.js") - parser.add_argument("v8_path", help="Path to V8 checkout") - parser.add_argument("node_path", help="Path to Node.js checkout") - parser.add_argument("commit", help="Commit to backport") - parser.add_argument("--no-review", action="store_true", - help="Skip editing commit message") - options = parser.parse_args(args) - options.v8_path = os.path.abspath(options.v8_path) - assert os.path.isdir(options.v8_path) - options.node_path = os.path.abspath(options.node_path) - assert os.path.isdir(options.node_path) - return options - -def Main(args): - options = ParseOptions(args) - Clean(options) - try: - CherryPick(options) - UpdateVersion(options) - CreateCommit(options) - except: - print ">> Failed. Resetting." - subprocess.check_output(["git", "reset", "--hard"], cwd=options.node_path) - raise - -if __name__ == "__main__": - Main(sys.argv[1:]) diff --git a/deps/v8/tools/release/check_clusterfuzz.py b/deps/v8/tools/release/check_clusterfuzz.py index 0fdffd93ac2..8af835136b7 100755 --- a/deps/v8/tools/release/check_clusterfuzz.py +++ b/deps/v8/tools/release/check_clusterfuzz.py @@ -214,7 +214,8 @@ def Main(): issues = APIRequest(key, **args) assert issues is not None for issue in issues: - if re.match(spec["crash_state"], issue["crash_state"]): + if (re.match(spec["crash_state"], issue["crash_state"]) and + not issue.get('has_bug_flag')): results.append(issue["id"]) if options.results_file: diff --git a/deps/v8/tools/release/git_recipes.py b/deps/v8/tools/release/git_recipes.py index d831aa3a200..9dedae8a939 100644 --- a/deps/v8/tools/release/git_recipes.py +++ b/deps/v8/tools/release/git_recipes.py @@ -206,7 +206,8 @@ def GitApplyPatch(self, patch_file, reverse=False, **kwargs): self.Git(MakeArgs(args), **kwargs) def GitUpload(self, reviewer="", author="", force=False, cq=False, - bypass_hooks=False, cc="", private=False, **kwargs): + cq_dry_run=False, bypass_hooks=False, cc="", private=False, + **kwargs): args = ["cl upload --send-mail"] if author: args += ["--email", Quoted(author)] @@ -216,6 +217,8 @@ def GitUpload(self, reviewer="", author="", force=False, cq=False, args.append("-f") if cq: args.append("--use-commit-queue") + if cq_dry_run: + args.append("--cq-dry-run") if bypass_hooks: args.append("--bypass-hooks") if cc: diff --git a/deps/v8/tools/release/test_backport_node.py b/deps/v8/tools/release/test_backport_node.py deleted file mode 100755 index f9c015baf1f..00000000000 --- a/deps/v8/tools/release/test_backport_node.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -# Copyright 2017 the V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import os -import shutil -import subprocess -import sys -import tempfile -import unittest - -from common_includes import FileToText -import backport_node - -# Base paths. -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -TEST_DATA = os.path.join(BASE_DIR, 'testdata') - -def gitify(path): - files = os.listdir(path) - subprocess.check_call(['git', 'init'], cwd=path) - subprocess.check_call(['git', 'add'] + files, cwd=path) - subprocess.check_call(['git', 'commit', '-m', 'Initial'], cwd=path) - -class TestUpdateNode(unittest.TestCase): - def setUp(self): - self.workdir = tempfile.mkdtemp(prefix='tmp_test_node_') - - def tearDown(self): - shutil.rmtree(self.workdir) - - def testUpdate(self): - v8_cwd = os.path.join(self.workdir, 'v8') - node_cwd = os.path.join(self.workdir, 'node') - - # Set up V8 test fixture. - shutil.copytree(src=os.path.join(TEST_DATA, 'v8'), dst=v8_cwd) - gitify(v8_cwd) - - # Set up node test fixture. - shutil.copytree(src=os.path.join(TEST_DATA, 'node'), dst=node_cwd) - gitify(os.path.join(node_cwd)) - - # Add a patch. - with open(os.path.join(v8_cwd, 'v8_foo'), 'w') as f: - f.write('zonk') - subprocess.check_call(['git', 'add', 'v8_foo'], cwd=v8_cwd) - subprocess.check_call(['git', 'commit', '-m', "Title\n\nBody"], cwd=v8_cwd) - commit = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=v8_cwd).strip() - - # Run update script. - backport_node.Main([v8_cwd, node_cwd, commit, "--no-review"]) - - # Check message. - message = subprocess.check_output(['git', 'log', '-1', '--format=%B'], cwd=node_cwd) - self.assertIn('Original commit message:\n\n Title\n\n Body', message) - - # Check patch. - gitlog = subprocess.check_output( - ['git', 'diff', 'master', '--cached', '--', 'deps/v8/v8_foo'], - cwd=node_cwd, - ) - self.assertIn('+zonk', gitlog.strip()) - - # Check version. - version_file = os.path.join(node_cwd, "deps", "v8", "include", "v8-version.h") - self.assertIn('#define V8_PATCH_LEVEL 4322', FileToText(version_file)) - -if __name__ == "__main__": - unittest.main() diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py index 42bbd5a0a1f..759012d8334 100755 --- a/deps/v8/tools/release/test_scripts.py +++ b/deps/v8/tools/release/test_scripts.py @@ -1119,7 +1119,8 @@ def WriteDeps(): self.ROLL_COMMIT_MSG), "", cwd=chrome_dir), Cmd("git cl upload --send-mail --email \"author@chromium.org\" -f " - "--use-commit-queue --bypass-hooks --gerrit", "", cwd=chrome_dir), + "--cq-dry-run --bypass-hooks --gerrit", "", + cwd=chrome_dir), Cmd("git checkout -f master", "", cwd=chrome_dir), Cmd("git branch -D work-branch", "", cwd=chrome_dir), ] diff --git a/deps/v8/tools/release/test_update_node.py b/deps/v8/tools/release/test_update_node.py deleted file mode 100755 index bff3d08c2f0..00000000000 --- a/deps/v8/tools/release/test_update_node.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python -# Copyright 2017 the V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import os -import shutil -import subprocess -import sys -import tempfile -import unittest - -import update_node - -# Base paths. -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -TEST_DATA = os.path.join(BASE_DIR, 'testdata') - -# Expectations. -EXPECTED_GITIGNORE = """ -/testing/gtest/* -!/testing/gtest/include -/testing/gtest/include/* -!/testing/gtest/include/gtest -/testing/gtest/include/gtest/* -!/testing/gtest/include/gtest/gtest_prod.h -!/third_party/jinja2 -!/third_party/markupsafe -/unrelated -""" - -EXPECTED_GIT_DIFF = """ - create mode 100644 deps/v8/base/trace_event/common/common - rename deps/v8/baz/{delete_me => v8_new} (100%) - rename deps/v8/{delete_me => new/v8_new} (100%) - create mode 100644 deps/v8/third_party/jinja2/jinja2 - create mode 100644 deps/v8/third_party/markupsafe/markupsafe - create mode 100644 deps/v8/v8_new -""" - -ADDED_FILES = [ - 'v8_new', - 'new/v8_new', - 'baz/v8_new', - 'testing/gtest/gtest_new', - 'testing/gtest/new/gtest_new', - 'testing/gtest/baz/gtest_new', - 'third_party/jinja2/jinja2', - 'third_party/markupsafe/markupsafe' -] - -REMOVED_FILES = [ - 'delete_me', - 'baz/delete_me', - 'testing/gtest/delete_me', - 'testing/gtest/baz/delete_me', -] - -def gitify(path): - files = os.listdir(path) - subprocess.check_call(['git', 'init'], cwd=path) - subprocess.check_call(['git', 'add'] + files, cwd=path) - subprocess.check_call(['git', 'commit', '-m', 'Initial'], cwd=path) - - -class TestUpdateNode(unittest.TestCase): - def setUp(self): - self.workdir = tempfile.mkdtemp(prefix='tmp_test_node_') - - def tearDown(self): - shutil.rmtree(self.workdir) - - def testUpdate(self): - v8_cwd = os.path.join(self.workdir, 'v8') - node_cwd = os.path.join(self.workdir, 'node') - - # Set up V8 test fixture. - shutil.copytree(src=os.path.join(TEST_DATA, 'v8'), dst=v8_cwd) - gitify(v8_cwd) - for repository in update_node.SUB_REPOSITORIES: - gitify(os.path.join(v8_cwd, *repository)) - - # Set up node test fixture. - shutil.copytree(src=os.path.join(TEST_DATA, 'node'), dst=node_cwd) - gitify(os.path.join(node_cwd)) - - # Add a patch. - with open(os.path.join(v8_cwd, 'v8_foo'), 'w') as f: - f.write('zonk') - subprocess.check_call(['git', 'add', 'v8_foo'], cwd=v8_cwd) - - # Run update script. - update_node.Main([v8_cwd, node_cwd, "--commit", "--with-patch"]) - - # Check expectations. - with open(os.path.join(node_cwd, 'deps', 'v8', '.gitignore')) as f: - actual_gitignore = f.read() - self.assertEquals(EXPECTED_GITIGNORE.strip(), actual_gitignore.strip()) - for f in ADDED_FILES: - added_file = os.path.join(node_cwd, 'deps', 'v8', *f.split('/')) - self.assertTrue(os.path.exists(added_file)) - for f in REMOVED_FILES: - removed_file = os.path.join(node_cwd, 'deps', 'v8', *f.split('/')) - self.assertFalse(os.path.exists(removed_file)) - gitlog = subprocess.check_output( - ['git', 'diff', 'master', '--summary'], - cwd=node_cwd, - ) - self.assertEquals(EXPECTED_GIT_DIFF.strip(), gitlog.strip()) - - # Check patch. - gitlog = subprocess.check_output( - ['git', 'diff', 'master', '--cached', '--', 'deps/v8/v8_foo'], - cwd=node_cwd, - ) - self.assertIn('+zonk', gitlog.strip()) - -if __name__ == "__main__": - unittest.main() diff --git a/deps/v8/tools/release/testdata/v8/.gitignore b/deps/v8/tools/release/testdata/v8/.gitignore deleted file mode 100644 index 855286229f8..00000000000 --- a/deps/v8/tools/release/testdata/v8/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/unrelated -/testing/gtest -/third_party/jinja2 -/third_party/markupsafe \ No newline at end of file diff --git a/deps/v8/tools/release/testdata/v8/baz/v8_foo b/deps/v8/tools/release/testdata/v8/baz/v8_foo deleted file mode 100644 index eb1ae458f8e..00000000000 --- a/deps/v8/tools/release/testdata/v8/baz/v8_foo +++ /dev/null @@ -1 +0,0 @@ -... diff --git a/deps/v8/tools/release/testdata/v8/baz/v8_new b/deps/v8/tools/release/testdata/v8/baz/v8_new deleted file mode 100644 index eb1ae458f8e..00000000000 --- a/deps/v8/tools/release/testdata/v8/baz/v8_new +++ /dev/null @@ -1 +0,0 @@ -... diff --git a/deps/v8/tools/release/testdata/v8/new/v8_new b/deps/v8/tools/release/testdata/v8/new/v8_new deleted file mode 100644 index eb1ae458f8e..00000000000 --- a/deps/v8/tools/release/testdata/v8/new/v8_new +++ /dev/null @@ -1 +0,0 @@ -... diff --git a/deps/v8/tools/release/testdata/v8/v8_foo b/deps/v8/tools/release/testdata/v8/v8_foo deleted file mode 100644 index eb1ae458f8e..00000000000 --- a/deps/v8/tools/release/testdata/v8/v8_foo +++ /dev/null @@ -1 +0,0 @@ -... diff --git a/deps/v8/tools/release/testdata/v8/v8_new b/deps/v8/tools/release/testdata/v8/v8_new deleted file mode 100644 index eb1ae458f8e..00000000000 --- a/deps/v8/tools/release/testdata/v8/v8_new +++ /dev/null @@ -1 +0,0 @@ -... diff --git a/deps/v8/tools/release/update_node.py b/deps/v8/tools/release/update_node.py index 5ce32e4ec24..d060e5c6157 100755 --- a/deps/v8/tools/release/update_node.py +++ b/deps/v8/tools/release/update_node.py @@ -28,6 +28,7 @@ import shutil import subprocess import sys +import stat TARGET_SUBDIR = os.path.join("deps", "v8") @@ -61,7 +62,11 @@ def UninitGit(path): target = os.path.join(path, ".git") if os.path.isdir(target): print ">> Cleaning up %s" % path - shutil.rmtree(target) + def OnRmError(func, path, exec_info): + # This might happen on Windows + os.chmod(path, stat.S_IWRITE) + os.unlink(path) + shutil.rmtree(target, onerror=OnRmError) def CommitPatch(options): """Makes a dummy commit for the changes in the index. diff --git a/deps/v8/tools/run-deopt-fuzzer.py b/deps/v8/tools/run-deopt-fuzzer.py index 1f50e026024..ac2344b530f 100755 --- a/deps/v8/tools/run-deopt-fuzzer.py +++ b/deps/v8/tools/run-deopt-fuzzer.py @@ -1,492 +1,14 @@ #!/usr/bin/env python # -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. -import json -import math -import multiprocessing -import optparse -import os -from os.path import join -import random -import shlex -import subprocess import sys -import time - -from testrunner.local import execution -from testrunner.local import progress -from testrunner.local import testsuite -from testrunner.local import utils -from testrunner.local import verbose -from testrunner.objects import context - - -# Base dir of the v8 checkout to be used as cwd. -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -ARCH_GUESS = utils.DefaultArch() -DEFAULT_TESTS = ["mjsunit", "webkit"] -TIMEOUT_DEFAULT = 60 -TIMEOUT_SCALEFACTOR = {"debug" : 4, - "release" : 1 } - -MODE_FLAGS = { - "debug" : ["--nohard-abort", "--enable-slow-asserts", - "--verify-heap", "--noconcurrent-recompilation"], - "release" : ["--nohard-abort", "--noconcurrent-recompilation"]} - -SUPPORTED_ARCHS = ["android_arm", - "android_ia32", - "arm", - "ia32", - "ppc", - "ppc64", - "s390", - "s390x", - "mipsel", - "x64"] -# Double the timeout for these: -SLOW_ARCHS = ["android_arm", - "android_ia32", - "arm", - "mipsel"] -MAX_DEOPT = 1000000000 -DISTRIBUTION_MODES = ["smooth", "random"] - - -class RandomDistribution: - def __init__(self, seed=None): - seed = seed or random.randint(1, sys.maxint) - print "Using random distribution with seed %d" % seed - self._random = random.Random(seed) - - def Distribute(self, n, m): - if n > m: - n = m - return self._random.sample(xrange(1, m + 1), n) - - -class SmoothDistribution: - """Distribute n numbers into the interval [1:m]. - F1: Factor of the first derivation of the distribution function. - F2: Factor of the second derivation of the distribution function. - With F1 and F2 set to 0, the distribution will be equal. - """ - def __init__(self, factor1=2.0, factor2=0.2): - self._factor1 = factor1 - self._factor2 = factor2 - - def Distribute(self, n, m): - if n > m: - n = m - if n <= 1: - return [ 1 ] - - result = [] - x = 0.0 - dx = 1.0 - ddx = self._factor1 - dddx = self._factor2 - for i in range(0, n): - result += [ x ] - x += dx - dx += ddx - ddx += dddx - - # Project the distribution into the interval [0:M]. - result = [ x * m / result[-1] for x in result ] - - # Equalize by n. The closer n is to m, the more equal will be the - # distribution. - for (i, x) in enumerate(result): - # The value of x if it was equally distributed. - equal_x = i / float(n - 1) * float(m - 1) + 1 - - # Difference factor between actual and equal distribution. - diff = 1 - (x / equal_x) - - # Equalize x dependent on the number of values to distribute. - result[i] = int(x + (i + 1) * diff) - return result - - -def Distribution(options): - if options.distribution_mode == "random": - return RandomDistribution(options.seed) - if options.distribution_mode == "smooth": - return SmoothDistribution(options.distribution_factor1, - options.distribution_factor2) - - -def BuildOptions(): - result = optparse.OptionParser() - result.add_option("--arch", - help=("The architecture to run tests for, " - "'auto' or 'native' for auto-detect"), - default="ia32,x64,arm") - result.add_option("--arch-and-mode", - help="Architecture and mode in the format 'arch.mode'", - default=None) - result.add_option("--asan", - help="Regard test expectations for ASAN", - default=False, action="store_true") - result.add_option("--buildbot", - help="Adapt to path structure used on buildbots", - default=False, action="store_true") - result.add_option("--dcheck-always-on", - help="Indicates that V8 was compiled with DCHECKs enabled", - default=False, action="store_true") - result.add_option("--command-prefix", - help="Prepended to each shell command used to run a test", - default="") - result.add_option("--coverage", help=("Exponential test coverage " - "(range 0.0, 1.0) -- 0.0: one test, 1.0 all tests (slow)"), - default=0.4, type="float") - result.add_option("--coverage-lift", help=("Lifts test coverage for tests " - "with a small number of deopt points (range 0, inf)"), - default=20, type="int") - result.add_option("--download-data", help="Download missing test suite data", - default=False, action="store_true") - result.add_option("--distribution-factor1", help=("Factor of the first " - "derivation of the distribution function"), default=2.0, - type="float") - result.add_option("--distribution-factor2", help=("Factor of the second " - "derivation of the distribution function"), default=0.7, - type="float") - result.add_option("--distribution-mode", help=("How to select deopt points " - "for a given test (smooth|random)"), - default="smooth") - result.add_option("--dump-results-file", help=("Dump maximum number of " - "deopt points per test to a file")) - result.add_option("--extra-flags", - help="Additional flags to pass to each test command", - default="") - result.add_option("--isolates", help="Whether to test isolates", - default=False, action="store_true") - result.add_option("-j", help="The number of parallel tasks to run", - default=0, type="int") - result.add_option("-m", "--mode", - help="The test modes in which to run (comma-separated)", - default="release,debug") - result.add_option("--outdir", help="Base directory with compile output", - default="out") - result.add_option("-p", "--progress", - help=("The style of progress indicator" - " (verbose, dots, color, mono)"), - choices=progress.PROGRESS_INDICATORS.keys(), - default="mono") - result.add_option("--shard-count", - help="Split testsuites into this number of shards", - default=1, type="int") - result.add_option("--shard-run", - help="Run this shard from the split up tests.", - default=1, type="int") - result.add_option("--shell-dir", help="Directory containing executables", - default="") - result.add_option("--seed", help="The seed for the random distribution", - type="int") - result.add_option("-t", "--timeout", help="Timeout in seconds", - default= -1, type="int") - result.add_option("-v", "--verbose", help="Verbose output", - default=False, action="store_true") - result.add_option("--random-seed", default=0, dest="random_seed", - help="Default seed for initializing random generator") - return result - - -def ProcessOptions(options): - global VARIANT_FLAGS - - # Architecture and mode related stuff. - if options.arch_and_mode: - tokens = options.arch_and_mode.split(".") - options.arch = tokens[0] - options.mode = tokens[1] - options.mode = options.mode.split(",") - for mode in options.mode: - if not mode.lower() in ["debug", "release"]: - print "Unknown mode %s" % mode - return False - if options.arch in ["auto", "native"]: - options.arch = ARCH_GUESS - options.arch = options.arch.split(",") - for arch in options.arch: - if not arch in SUPPORTED_ARCHS: - print "Unknown architecture %s" % arch - return False - - # Special processing of other options, sorted alphabetically. - options.command_prefix = shlex.split(options.command_prefix) - options.extra_flags = shlex.split(options.extra_flags) - if options.j == 0: - options.j = multiprocessing.cpu_count() - while options.random_seed == 0: - options.random_seed = random.SystemRandom().randint(-2147483648, 2147483647) - if not options.distribution_mode in DISTRIBUTION_MODES: - print "Unknown distribution mode %s" % options.distribution_mode - return False - if options.distribution_factor1 < 0.0: - print ("Distribution factor1 %s is out of range. Defaulting to 0.0" - % options.distribution_factor1) - options.distribution_factor1 = 0.0 - if options.distribution_factor2 < 0.0: - print ("Distribution factor2 %s is out of range. Defaulting to 0.0" - % options.distribution_factor2) - options.distribution_factor2 = 0.0 - if options.coverage < 0.0 or options.coverage > 1.0: - print ("Coverage %s is out of range. Defaulting to 0.4" - % options.coverage) - options.coverage = 0.4 - if options.coverage_lift < 0: - print ("Coverage lift %s is out of range. Defaulting to 0" - % options.coverage_lift) - options.coverage_lift = 0 - return True - - -def ShardTests(tests, shard_count, shard_run): - if shard_count < 2: - return tests - if shard_run < 1 or shard_run > shard_count: - print "shard-run not a valid number, should be in [1:shard-count]" - print "defaulting back to running all tests" - return tests - count = 0 - shard = [] - for test in tests: - if count % shard_count == shard_run - 1: - shard.append(test) - count += 1 - return shard - - -def Main(): - # Use the v8 root as cwd as some test cases use "load" with relative paths. - os.chdir(BASE_DIR) - - parser = BuildOptions() - (options, args) = parser.parse_args() - if not ProcessOptions(options): - parser.print_help() - return 1 - - exit_code = 0 - - suite_paths = utils.GetSuitePaths(join(BASE_DIR, "test")) - - if len(args) == 0: - suite_paths = [ s for s in suite_paths if s in DEFAULT_TESTS ] - else: - args_suites = set() - for arg in args: - suite = arg.split(os.path.sep)[0] - if not suite in args_suites: - args_suites.add(suite) - suite_paths = [ s for s in suite_paths if s in args_suites ] - - suites = [] - for root in suite_paths: - suite = testsuite.TestSuite.LoadTestSuite( - os.path.join(BASE_DIR, "test", root)) - if suite: - suites.append(suite) - - if options.download_data: - for s in suites: - s.DownloadData() - - for mode in options.mode: - for arch in options.arch: - try: - code = Execute(arch, mode, args, options, suites, BASE_DIR) - exit_code = exit_code or code - except KeyboardInterrupt: - return 2 - return exit_code - - -def CalculateNTests(m, options): - """Calculates the number of tests from m deopt points with exponential - coverage. - The coverage is expected to be between 0.0 and 1.0. - The 'coverage lift' lifts the coverage for tests with smaller m values. - """ - c = float(options.coverage) - l = float(options.coverage_lift) - return int(math.pow(m, (m * c + l) / (m + l))) - - -def Execute(arch, mode, args, options, suites, workspace): - print(">>> Running tests for %s.%s" % (arch, mode)) - - dist = Distribution(options) - - shell_dir = options.shell_dir - if not shell_dir: - if options.buildbot: - shell_dir = os.path.join(workspace, options.outdir, mode) - mode = mode.lower() - else: - shell_dir = os.path.join(workspace, options.outdir, - "%s.%s" % (arch, mode)) - shell_dir = os.path.relpath(shell_dir) - - # Populate context object. - mode_flags = MODE_FLAGS[mode] - timeout = options.timeout - if timeout == -1: - # Simulators are slow, therefore allow a longer default timeout. - if arch in SLOW_ARCHS: - timeout = 2 * TIMEOUT_DEFAULT; - else: - timeout = TIMEOUT_DEFAULT; - - timeout *= TIMEOUT_SCALEFACTOR[mode] - ctx = context.Context(arch, mode, shell_dir, - mode_flags, options.verbose, - timeout, options.isolates, - options.command_prefix, - options.extra_flags, - False, # Keep i18n on by default. - options.random_seed, - True, # No sorting of test cases. - 0, # Don't rerun failing tests. - 0, # No use of a rerun-failing-tests maximum. - False, # No predictable mode. - False, # No no_harness mode. - False, # Don't use perf data. - False) # Coverage not supported. - - # Find available test suites and read test cases from them. - variables = { - "arch": arch, - "asan": options.asan, - "deopt_fuzzer": True, - "gc_stress": False, - "gcov_coverage": False, - "isolates": options.isolates, - "mode": mode, - "no_i18n": False, - "no_snap": False, - "simulator": utils.UseSimulator(arch), - "system": utils.GuessOS(), - "tsan": False, - "msan": False, - "dcheck_always_on": options.dcheck_always_on, - "novfp3": False, - "predictable": False, - "byteorder": sys.byteorder, - "no_harness": False, - "ubsan_vptr": False, - } - all_tests = [] - num_tests = 0 - test_id = 0 - - # Remember test case prototypes for the fuzzing phase. - test_backup = dict((s, []) for s in suites) - - for s in suites: - s.ReadStatusFile(variables) - s.ReadTestCases(ctx) - if len(args) > 0: - s.FilterTestCasesByArgs(args) - all_tests += s.tests - s.FilterTestCasesByStatus(False) - test_backup[s] = s.tests - analysis_flags = ["--deopt-every-n-times", "%d" % MAX_DEOPT, - "--print-deopt-stress"] - s.tests = [ t.CopyAddingFlags(t.variant, analysis_flags) for t in s.tests ] - num_tests += len(s.tests) - for t in s.tests: - t.id = test_id - test_id += 1 - - if num_tests == 0: - print "No tests to run." - return 0 - - print(">>> Collection phase") - progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() - runner = execution.Runner(suites, progress_indicator, ctx) - - exit_code = runner.Run(options.j) - - print(">>> Analysis phase") - num_tests = 0 - test_id = 0 - for s in suites: - test_results = {} - for t in s.tests: - for line in t.output.stdout.splitlines(): - if line.startswith("=== Stress deopt counter: "): - test_results[t.path] = MAX_DEOPT - int(line.split(" ")[-1]) - for t in s.tests: - if t.path not in test_results: - print "Missing results for %s" % t.path - if options.dump_results_file: - results_dict = dict((t.path, n) for (t, n) in test_results.iteritems()) - with file("%s.%d.txt" % (dump_results_file, time.time()), "w") as f: - f.write(json.dumps(results_dict)) - - # Reset tests and redistribute the prototypes from the collection phase. - s.tests = [] - if options.verbose: - print "Test distributions:" - for t in test_backup[s]: - max_deopt = test_results.get(t.path, 0) - if max_deopt == 0: - continue - n_deopt = CalculateNTests(max_deopt, options) - distribution = dist.Distribute(n_deopt, max_deopt) - if options.verbose: - print "%s %s" % (t.path, distribution) - for i in distribution: - fuzzing_flags = ["--deopt-every-n-times", "%d" % i] - s.tests.append(t.CopyAddingFlags(t.variant, fuzzing_flags)) - num_tests += len(s.tests) - for t in s.tests: - t.id = test_id - test_id += 1 - - if num_tests == 0: - print "No tests to run." - return 0 - - print(">>> Deopt fuzzing phase (%d test cases)" % num_tests) - progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() - runner = execution.Runner(suites, progress_indicator, ctx) - code = runner.Run(options.j) - return exit_code or code +from testrunner import deopt_fuzzer if __name__ == "__main__": - sys.exit(Main()) + sys.exit(deopt_fuzzer.DeoptFuzzer().execute()) diff --git a/deps/v8/tools/run-gc-fuzzer.py b/deps/v8/tools/run-gc-fuzzer.py new file mode 100755 index 00000000000..6311d4fd295 --- /dev/null +++ b/deps/v8/tools/run-gc-fuzzer.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import sys + +from testrunner import gc_fuzzer + + +if __name__ == "__main__": + sys.exit(gc_fuzzer.GCFuzzer().execute()) diff --git a/deps/v8/tools/run-valgrind.gyp b/deps/v8/tools/run-num-fuzzer.gyp similarity index 76% rename from deps/v8/tools/run-valgrind.gyp rename to deps/v8/tools/run-num-fuzzer.gyp index 02dd26d22ca..bd3b9d6423d 100644 --- a/deps/v8/tools/run-valgrind.gyp +++ b/deps/v8/tools/run-num-fuzzer.gyp @@ -1,4 +1,4 @@ -# Copyright 2016 the V8 project authors. All rights reserved. +# Copyright 2017 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -7,7 +7,7 @@ ['test_isolation_mode != "noop"', { 'targets': [ { - 'target_name': 'run_valgrind_run', + 'target_name': 'run_num_fuzzer_run', 'type': 'none', 'dependencies': [ '../src/d8.gyp:d8_run', @@ -17,7 +17,7 @@ '../gypfiles/isolate.gypi', ], 'sources': [ - 'run-valgrind.isolate', + 'run-num-fuzzer.isolate', ], }, ], diff --git a/deps/v8/tools/run-num-fuzzer.isolate b/deps/v8/tools/run-num-fuzzer.isolate new file mode 100644 index 00000000000..4bd3d8b6c0b --- /dev/null +++ b/deps/v8/tools/run-num-fuzzer.isolate @@ -0,0 +1,20 @@ +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +{ + 'variables': { + 'command': [ + 'run-deopt-fuzzer.py', + ], + 'files': [ + 'run-deopt-fuzzer.py', + 'run-gc-fuzzer.py', + ], + }, + 'includes': [ + 'testrunner/testrunner.isolate', + '../src/d8.isolate', + '../test/mjsunit/mjsunit.isolate', + '../test/webkit/webkit.isolate', + ], +} diff --git a/deps/v8/tools/run-tests.py b/deps/v8/tools/run-tests.py index 2dd3782ae57..2ca93855485 100755 --- a/deps/v8/tools/run-tests.py +++ b/deps/v8/tools/run-tests.py @@ -1,973 +1,14 @@ #!/usr/bin/env python # -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. -from collections import OrderedDict -import itertools -import json -import multiprocessing -import optparse -import os -from os.path import getmtime, isdir, join -import platform -import random -import shlex -import subprocess import sys -import time - -from testrunner.local import execution -from testrunner.local import progress -from testrunner.local import testsuite -from testrunner.local.variants import ALL_VARIANTS -from testrunner.local import utils -from testrunner.local import verbose -from testrunner.network import network_execution -from testrunner.objects import context - - -# Base dir of the v8 checkout to be used as cwd. -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -DEFAULT_OUT_GN = "out.gn" - -ARCH_GUESS = utils.DefaultArch() - -# Map of test name synonyms to lists of test suites. Should be ordered by -# expected runtimes (suites with slow test cases first). These groups are -# invoked in separate steps on the bots. -TEST_MAP = { - # This needs to stay in sync with test/bot_default.isolate. - "bot_default": [ - "debugger", - "mjsunit", - "cctest", - "wasm-spec-tests", - "inspector", - "webkit", - "mkgrokdump", - "fuzzer", - "message", - "preparser", - "intl", - "unittests", - ], - # This needs to stay in sync with test/default.isolate. - "default": [ - "debugger", - "mjsunit", - "cctest", - "wasm-spec-tests", - "inspector", - "mkgrokdump", - "fuzzer", - "message", - "preparser", - "intl", - "unittests", - ], - # This needs to stay in sync with test/optimize_for_size.isolate. - "optimize_for_size": [ - "debugger", - "mjsunit", - "cctest", - "inspector", - "webkit", - "intl", - ], - "unittests": [ - "unittests", - ], -} - -TIMEOUT_DEFAULT = 60 - -# Variants ordered by expected runtime (slowest first). -VARIANTS = ["default"] - -MORE_VARIANTS = [ - "stress", - "stress_incremental_marking", - "nooptimization", - "stress_asm_wasm", - "wasm_traps", -] - -EXHAUSTIVE_VARIANTS = MORE_VARIANTS + VARIANTS - -VARIANT_ALIASES = { - # The default for developer workstations. - "dev": VARIANTS, - # Additional variants, run on all bots. - "more": MORE_VARIANTS, - # TODO(machenbach): Deprecate this after the step is removed on infra side. - # Additional variants, run on a subset of bots. - "extra": [], -} - -DEBUG_FLAGS = ["--nohard-abort", "--enable-slow-asserts", "--verify-heap"] -RELEASE_FLAGS = ["--nohard-abort"] - -MODES = { - "debug": { - "flags": DEBUG_FLAGS, - "timeout_scalefactor": 4, - "status_mode": "debug", - "execution_mode": "debug", - "output_folder": "debug", - }, - "optdebug": { - "flags": DEBUG_FLAGS, - "timeout_scalefactor": 4, - "status_mode": "debug", - "execution_mode": "debug", - "output_folder": "optdebug", - }, - "release": { - "flags": RELEASE_FLAGS, - "timeout_scalefactor": 1, - "status_mode": "release", - "execution_mode": "release", - "output_folder": "release", - }, - # Normal trybot release configuration. There, dchecks are always on which - # implies debug is set. Hence, the status file needs to assume debug-like - # behavior/timeouts. - "tryrelease": { - "flags": RELEASE_FLAGS, - "timeout_scalefactor": 1, - "status_mode": "debug", - "execution_mode": "release", - "output_folder": "release", - }, - # This mode requires v8 to be compiled with dchecks and slow dchecks. - "slowrelease": { - "flags": RELEASE_FLAGS + ["--enable-slow-asserts"], - "timeout_scalefactor": 2, - "status_mode": "debug", - "execution_mode": "release", - "output_folder": "release", - }, -} - -GC_STRESS_FLAGS = ["--gc-interval=500", "--stress-compaction", - "--concurrent-recompilation-queue-length=64", - "--concurrent-recompilation-delay=500", - "--concurrent-recompilation"] - -SUPPORTED_ARCHS = ["android_arm", - "android_arm64", - "android_ia32", - "android_x64", - "arm", - "ia32", - "mips", - "mipsel", - "mips64", - "mips64el", - "s390", - "s390x", - "ppc", - "ppc64", - "x64", - "x32", - "arm64"] -# Double the timeout for these: -SLOW_ARCHS = ["android_arm", - "android_arm64", - "android_ia32", - "android_x64", - "arm", - "mips", - "mipsel", - "mips64", - "mips64el", - "s390", - "s390x", - "arm64"] - - -def BuildOptions(): - result = optparse.OptionParser() - result.usage = '%prog [options] [tests]' - result.description = """TESTS: %s""" % (TEST_MAP["default"]) - result.add_option("--arch", - help=("The architecture to run tests for, " - "'auto' or 'native' for auto-detect: %s" % SUPPORTED_ARCHS)) - result.add_option("--arch-and-mode", - help="Architecture and mode in the format 'arch.mode'") - result.add_option("--asan", - help="Regard test expectations for ASAN", - default=False, action="store_true") - result.add_option("--sancov-dir", - help="Directory where to collect coverage data") - result.add_option("--cfi-vptr", - help="Run tests with UBSAN cfi_vptr option.", - default=False, action="store_true") - result.add_option("--buildbot", - help="Adapt to path structure used on buildbots", - default=False, action="store_true") - result.add_option("--dcheck-always-on", - help="Indicates that V8 was compiled with DCHECKs enabled", - default=False, action="store_true") - result.add_option("--novfp3", - help="Indicates that V8 was compiled without VFP3 support", - default=False, action="store_true") - result.add_option("--cat", help="Print the source of the tests", - default=False, action="store_true") - result.add_option("--slow-tests", - help="Regard slow tests (run|skip|dontcare)", - default="dontcare") - result.add_option("--pass-fail-tests", - help="Regard pass|fail tests (run|skip|dontcare)", - default="dontcare") - result.add_option("--gc-stress", - help="Switch on GC stress mode", - default=False, action="store_true") - result.add_option("--gcov-coverage", - help="Uses executables instrumented for gcov coverage", - default=False, action="store_true") - result.add_option("--command-prefix", - help="Prepended to each shell command used to run a test", - default="") - result.add_option("--download-data", help="Download missing test suite data", - default=False, action="store_true") - result.add_option("--download-data-only", - help="Deprecated", - default=False, action="store_true") - result.add_option("--extra-flags", - help="Additional flags to pass to each test command", - action="append", default=[]) - result.add_option("--isolates", help="Whether to test isolates", - default=False, action="store_true") - result.add_option("-j", help="The number of parallel tasks to run", - default=0, type="int") - result.add_option("-m", "--mode", - help="The test modes in which to run (comma-separated," - " uppercase for ninja and buildbot builds): %s" % MODES.keys()) - result.add_option("--no-harness", "--noharness", - help="Run without test harness of a given suite", - default=False, action="store_true") - result.add_option("--no-i18n", "--noi18n", - help="Skip internationalization tests", - default=False, action="store_true") - result.add_option("--network", help="Distribute tests on the network", - default=False, dest="network", action="store_true") - result.add_option("--no-network", "--nonetwork", - help="Don't distribute tests on the network", - dest="network", action="store_false") - result.add_option("--no-presubmit", "--nopresubmit", - help='Skip presubmit checks (deprecated)', - default=False, dest="no_presubmit", action="store_true") - result.add_option("--no-snap", "--nosnap", - help='Test a build compiled without snapshot.', - default=False, dest="no_snap", action="store_true") - result.add_option("--no-sorting", "--nosorting", - help="Don't sort tests according to duration of last run.", - default=False, dest="no_sorting", action="store_true") - result.add_option("--no-variants", "--novariants", - help="Don't run any testing variants", - default=False, dest="no_variants", action="store_true") - result.add_option("--variants", - help="Comma-separated list of testing variants;" - " default: \"%s\"" % ",".join(VARIANTS)) - result.add_option("--exhaustive-variants", - default=False, action="store_true", - help="Use exhaustive set of default variants:" - " \"%s\"" % ",".join(EXHAUSTIVE_VARIANTS)) - result.add_option("--outdir", help="Base directory with compile output", - default="out") - result.add_option("--gn", help="Scan out.gn for the last built configuration", - default=False, action="store_true") - result.add_option("--predictable", - help="Compare output of several reruns of each test", - default=False, action="store_true") - result.add_option("-p", "--progress", - help=("The style of progress indicator" - " (verbose, dots, color, mono)"), - choices=progress.PROGRESS_INDICATORS.keys(), default="mono") - result.add_option("--quickcheck", default=False, action="store_true", - help=("Quick check mode (skip slow tests)")) - result.add_option("--report", help="Print a summary of the tests to be run", - default=False, action="store_true") - result.add_option("--json-test-results", - help="Path to a file for storing json results.") - result.add_option("--flakiness-results", - help="Path to a file for storing flakiness json.") - result.add_option("--rerun-failures-count", - help=("Number of times to rerun each failing test case. " - "Very slow tests will be rerun only once."), - default=0, type="int") - result.add_option("--rerun-failures-max", - help="Maximum number of failing test cases to rerun.", - default=100, type="int") - result.add_option("--shard-count", - help="Split testsuites into this number of shards", - default=1, type="int") - result.add_option("--shard-run", - help="Run this shard from the split up tests.", - default=1, type="int") - result.add_option("--shell", help="DEPRECATED! use --shell-dir", default="") - result.add_option("--shell-dir", help="Directory containing executables", - default="") - result.add_option("--dont-skip-slow-simulator-tests", - help="Don't skip more slow tests when using a simulator.", - default=False, action="store_true", - dest="dont_skip_simulator_slow_tests") - result.add_option("--swarming", - help="Indicates running test driver on swarming.", - default=False, action="store_true") - result.add_option("--time", help="Print timing information after running", - default=False, action="store_true") - result.add_option("-t", "--timeout", help="Timeout in seconds", - default=TIMEOUT_DEFAULT, type="int") - result.add_option("--tsan", - help="Regard test expectations for TSAN", - default=False, action="store_true") - result.add_option("-v", "--verbose", help="Verbose output", - default=False, action="store_true") - result.add_option("--valgrind", help="Run tests through valgrind", - default=False, action="store_true") - result.add_option("--warn-unused", help="Report unused rules", - default=False, action="store_true") - result.add_option("--junitout", help="File name of the JUnit output") - result.add_option("--junittestsuite", - help="The testsuite name in the JUnit output file", - default="v8tests") - result.add_option("--random-seed", default=0, dest="random_seed", type="int", - help="Default seed for initializing random generator") - result.add_option("--random-seed-stress-count", default=1, type="int", - dest="random_seed_stress_count", - help="Number of runs with different random seeds") - result.add_option("--ubsan-vptr", - help="Regard test expectations for UBSanVptr", - default=False, action="store_true") - result.add_option("--msan", - help="Regard test expectations for UBSanVptr", - default=False, action="store_true") - return result - - -def RandomSeed(): - seed = 0 - while not seed: - seed = random.SystemRandom().randint(-2147483648, 2147483647) - return seed - - -def BuildbotToV8Mode(config): - """Convert buildbot build configs to configs understood by the v8 runner. - - V8 configs are always lower case and without the additional _x64 suffix for - 64 bit builds on windows with ninja. - """ - mode = config[:-4] if config.endswith('_x64') else config - return mode.lower() - -def SetupEnvironment(options): - """Setup additional environment variables.""" - - # Many tests assume an English interface. - os.environ['LANG'] = 'en_US.UTF-8' - - symbolizer = 'external_symbolizer_path=%s' % ( - os.path.join( - BASE_DIR, 'third_party', 'llvm-build', 'Release+Asserts', 'bin', - 'llvm-symbolizer', - ) - ) - - if options.asan: - asan_options = [symbolizer, "allow_user_segv_handler=1"] - if not utils.GuessOS() == 'macos': - # LSAN is not available on mac. - asan_options.append('detect_leaks=1') - os.environ['ASAN_OPTIONS'] = ":".join(asan_options) - - if options.sancov_dir: - assert os.path.exists(options.sancov_dir) - os.environ['ASAN_OPTIONS'] = ":".join([ - 'coverage=1', - 'coverage_dir=%s' % options.sancov_dir, - symbolizer, - "allow_user_segv_handler=1", - ]) - - if options.cfi_vptr: - os.environ['UBSAN_OPTIONS'] = ":".join([ - 'print_stacktrace=1', - 'print_summary=1', - 'symbolize=1', - symbolizer, - ]) - - if options.ubsan_vptr: - os.environ['UBSAN_OPTIONS'] = ":".join([ - 'print_stacktrace=1', - symbolizer, - ]) - - if options.msan: - os.environ['MSAN_OPTIONS'] = symbolizer - - if options.tsan: - suppressions_file = os.path.join( - BASE_DIR, 'tools', 'sanitizers', 'tsan_suppressions.txt') - os.environ['TSAN_OPTIONS'] = " ".join([ - symbolizer, - 'suppressions=%s' % suppressions_file, - 'exit_code=0', - 'report_thread_leaks=0', - 'history_size=7', - 'report_destroy_locked=0', - ]) - -def ProcessOptions(options): - global VARIANTS - - # First try to auto-detect configurations based on the build if GN was - # used. This can't be overridden by cmd-line arguments. - options.auto_detect = False - if options.gn: - gn_out_dir = os.path.join(BASE_DIR, DEFAULT_OUT_GN) - latest_timestamp = -1 - latest_config = None - for gn_config in os.listdir(gn_out_dir): - gn_config_dir = os.path.join(gn_out_dir, gn_config) - if not isdir(gn_config_dir): - continue - if os.path.getmtime(gn_config_dir) > latest_timestamp: - latest_timestamp = os.path.getmtime(gn_config_dir) - latest_config = gn_config - if latest_config: - print(">>> Latest GN build found is %s" % latest_config) - options.outdir = os.path.join(DEFAULT_OUT_GN, latest_config) - - if options.buildbot: - build_config_path = os.path.join( - BASE_DIR, options.outdir, options.mode, "v8_build_config.json") - else: - build_config_path = os.path.join( - BASE_DIR, options.outdir, "v8_build_config.json") - - # Auto-detect test configurations based on the build (GN only). - if os.path.exists(build_config_path): - try: - with open(build_config_path) as f: - build_config = json.load(f) - except Exception: - print ("%s exists but contains invalid json. Is your build up-to-date?" % - build_config_path) - return False - options.auto_detect = True - - # In auto-detect mode the outdir is always where we found the build config. - # This ensures that we'll also take the build products from there. - options.outdir = os.path.dirname(build_config_path) - options.arch_and_mode = None - if options.mode: - # In auto-detect mode we don't use the mode for more path-magic. - # Therefore transform the buildbot mode here to fit to the GN build - # config. - options.mode = BuildbotToV8Mode(options.mode) - - # In V8 land, GN's x86 is called ia32. - if build_config["v8_target_cpu"] == "x86": - build_config["v8_target_cpu"] = "ia32" - - # Update options based on the build config. Sanity check that we're not - # trying to use inconsistent options. - for param, value in ( - ('arch', build_config["v8_target_cpu"]), - ('asan', build_config["is_asan"]), - ('dcheck_always_on', build_config["dcheck_always_on"]), - ('gcov_coverage', build_config["is_gcov_coverage"]), - ('mode', 'debug' if build_config["is_debug"] else 'release'), - ('msan', build_config["is_msan"]), - ('no_i18n', not build_config["v8_enable_i18n_support"]), - ('no_snap', not build_config["v8_use_snapshot"]), - ('tsan', build_config["is_tsan"]), - ('ubsan_vptr', build_config["is_ubsan_vptr"])): - cmd_line_value = getattr(options, param) - if cmd_line_value not in [None, True, False] and cmd_line_value != value: - # TODO(machenbach): This is for string options only. Requires options - # to not have default values. We should make this more modular and - # implement it in our own version of the option parser. - print "Attempted to set %s to %s, while build is %s." % ( - param, cmd_line_value, value) - return False - if cmd_line_value == True and value == False: - print "Attempted to turn on %s, but it's not available." % ( - param) - return False - if cmd_line_value != value: - print ">>> Auto-detected %s=%s" % (param, value) - setattr(options, param, value) - - else: - # Non-GN build without auto-detect. Set default values for missing - # parameters. - if not options.mode: - options.mode = "release,debug" - if not options.arch: - options.arch = "ia32,x64,arm" - - # Architecture and mode related stuff. - if options.arch_and_mode: - options.arch_and_mode = [arch_and_mode.split(".") - for arch_and_mode in options.arch_and_mode.split(",")] - options.arch = ",".join([tokens[0] for tokens in options.arch_and_mode]) - options.mode = ",".join([tokens[1] for tokens in options.arch_and_mode]) - options.mode = options.mode.split(",") - for mode in options.mode: - if not BuildbotToV8Mode(mode) in MODES: - print "Unknown mode %s" % mode - return False - if options.arch in ["auto", "native"]: - options.arch = ARCH_GUESS - options.arch = options.arch.split(",") - for arch in options.arch: - if not arch in SUPPORTED_ARCHS: - print "Unknown architecture %s" % arch - return False - - # Store the final configuration in arch_and_mode list. Don't overwrite - # predefined arch_and_mode since it is more expressive than arch and mode. - if not options.arch_and_mode: - options.arch_and_mode = itertools.product(options.arch, options.mode) - - # Special processing of other options, sorted alphabetically. - - if options.buildbot: - options.network = False - if options.command_prefix and options.network: - print("Specifying --command-prefix disables network distribution, " - "running tests locally.") - options.network = False - options.command_prefix = shlex.split(options.command_prefix) - options.extra_flags = sum(map(shlex.split, options.extra_flags), []) - - if options.gc_stress: - options.extra_flags += GC_STRESS_FLAGS - - if options.asan: - options.extra_flags.append("--invoke-weak-callbacks") - options.extra_flags.append("--omit-quit") - - if options.novfp3: - options.extra_flags.append("--noenable-vfp3") - - if options.exhaustive_variants: - # This is used on many bots. It includes a larger set of default variants. - # Other options for manipulating variants still apply afterwards. - VARIANTS = EXHAUSTIVE_VARIANTS - - # TODO(machenbach): Figure out how to test a bigger subset of variants on - # msan and tsan. - if options.msan: - VARIANTS = ["default"] - - if options.tsan: - VARIANTS = ["default"] - - if options.j == 0: - options.j = multiprocessing.cpu_count() - - if options.random_seed_stress_count <= 1 and options.random_seed == 0: - options.random_seed = RandomSeed() - - def excl(*args): - """Returns true if zero or one of multiple arguments are true.""" - return reduce(lambda x, y: x + y, args) <= 1 - - if not excl(options.no_variants, bool(options.variants)): - print("Use only one of --no-variants or --variants.") - return False - if options.quickcheck: - VARIANTS = ["default", "stress"] - options.slow_tests = "skip" - options.pass_fail_tests = "skip" - if options.no_variants: - VARIANTS = ["default"] - if options.variants: - VARIANTS = options.variants.split(",") - - # Resolve variant aliases. - VARIANTS = reduce( - list.__add__, - (VARIANT_ALIASES.get(v, [v]) for v in VARIANTS), - [], - ) - - if not set(VARIANTS).issubset(ALL_VARIANTS): - print "All variants must be in %s" % str(ALL_VARIANTS) - return False - if options.predictable: - VARIANTS = ["default"] - options.extra_flags.append("--predictable") - options.extra_flags.append("--verify_predictable") - options.extra_flags.append("--no-inline-new") - - # Dedupe. - VARIANTS = list(set(VARIANTS)) - - if not options.shell_dir: - if options.shell: - print "Warning: --shell is deprecated, use --shell-dir instead." - options.shell_dir = os.path.dirname(options.shell) - if options.valgrind: - run_valgrind = os.path.join("tools", "run-valgrind.py") - # This is OK for distributed running, so we don't need to disable network. - options.command_prefix = (["python", "-u", run_valgrind] + - options.command_prefix) - def CheckTestMode(name, option): - if not option in ["run", "skip", "dontcare"]: - print "Unknown %s mode %s" % (name, option) - return False - return True - if not CheckTestMode("slow test", options.slow_tests): - return False - if not CheckTestMode("pass|fail test", options.pass_fail_tests): - return False - if options.no_i18n: - TEST_MAP["bot_default"].remove("intl") - TEST_MAP["default"].remove("intl") - return True - - -def ShardTests(tests, options): - # Read gtest shard configuration from environment (e.g. set by swarming). - # If none is present, use values passed on the command line. - shard_count = int(os.environ.get('GTEST_TOTAL_SHARDS', options.shard_count)) - shard_run = os.environ.get('GTEST_SHARD_INDEX') - if shard_run is not None: - # The v8 shard_run starts at 1, while GTEST_SHARD_INDEX starts at 0. - shard_run = int(shard_run) + 1 - else: - shard_run = options.shard_run - - if options.shard_count > 1: - # Log if a value was passed on the cmd line and it differs from the - # environment variables. - if options.shard_count != shard_count: - print("shard_count from cmd line differs from environment variable " - "GTEST_TOTAL_SHARDS") - if options.shard_run > 1 and options.shard_run != shard_run: - print("shard_run from cmd line differs from environment variable " - "GTEST_SHARD_INDEX") - - if shard_count < 2: - return tests - if shard_run < 1 or shard_run > shard_count: - print "shard-run not a valid number, should be in [1:shard-count]" - print "defaulting back to running all tests" - return tests - count = 0 - shard = [] - for test in tests: - if count % shard_count == shard_run - 1: - shard.append(test) - count += 1 - return shard - - -def Main(): - # Use the v8 root as cwd as some test cases use "load" with relative paths. - os.chdir(BASE_DIR) - - parser = BuildOptions() - (options, args) = parser.parse_args() - if not ProcessOptions(options): - parser.print_help() - return 1 - SetupEnvironment(options) - - if options.swarming: - # Swarming doesn't print how isolated commands are called. Lets make this - # less cryptic by printing it ourselves. - print ' '.join(sys.argv) - - exit_code = 0 - - suite_paths = utils.GetSuitePaths(join(BASE_DIR, "test")) - - # Use default tests if no test configuration was provided at the cmd line. - if len(args) == 0: - args = ["default"] - - # Expand arguments with grouped tests. The args should reflect the list of - # suites as otherwise filters would break. - def ExpandTestGroups(name): - if name in TEST_MAP: - return [suite for suite in TEST_MAP[name]] - else: - return [name] - args = reduce(lambda x, y: x + y, - [ExpandTestGroups(arg) for arg in args], - []) - - args_suites = OrderedDict() # Used as set - for arg in args: - args_suites[arg.split('/')[0]] = True - suite_paths = [ s for s in args_suites if s in suite_paths ] - - suites = [] - for root in suite_paths: - suite = testsuite.TestSuite.LoadTestSuite( - os.path.join(BASE_DIR, "test", root)) - if suite: - suites.append(suite) - - if options.download_data or options.download_data_only: - for s in suites: - s.DownloadData() - - if options.download_data_only: - return exit_code - - for s in suites: - s.PrepareSources() - - for (arch, mode) in options.arch_and_mode: - try: - code = Execute(arch, mode, args, options, suites) - except KeyboardInterrupt: - return 2 - exit_code = exit_code or code - return exit_code - - -def Execute(arch, mode, args, options, suites): - print(">>> Running tests for %s.%s" % (arch, mode)) - - shell_dir = options.shell_dir - if not shell_dir: - if options.auto_detect: - # If an output dir with a build was passed, test directly in that - # directory. - shell_dir = os.path.join(BASE_DIR, options.outdir) - elif options.buildbot: - # TODO(machenbach): Get rid of different output folder location on - # buildbot. Currently this is capitalized Release and Debug. - shell_dir = os.path.join(BASE_DIR, options.outdir, mode) - mode = BuildbotToV8Mode(mode) - else: - shell_dir = os.path.join( - BASE_DIR, - options.outdir, - "%s.%s" % (arch, MODES[mode]["output_folder"]), - ) - if not os.path.exists(shell_dir): - raise Exception('Could not find shell_dir: "%s"' % shell_dir) - - # Populate context object. - mode_flags = MODES[mode]["flags"] - - # Simulators are slow, therefore allow a longer timeout. - if arch in SLOW_ARCHS: - options.timeout *= 2 - - options.timeout *= MODES[mode]["timeout_scalefactor"] - - if options.predictable: - # Predictable mode is slower. - options.timeout *= 2 - - ctx = context.Context(arch, MODES[mode]["execution_mode"], shell_dir, - mode_flags, options.verbose, - options.timeout, - options.isolates, - options.command_prefix, - options.extra_flags, - options.no_i18n, - options.random_seed, - options.no_sorting, - options.rerun_failures_count, - options.rerun_failures_max, - options.predictable, - options.no_harness, - use_perf_data=not options.swarming, - sancov_dir=options.sancov_dir) - - # TODO(all): Combine "simulator" and "simulator_run". - # TODO(machenbach): In GN we can derive simulator run from - # target_arch != v8_target_arch in the dumped build config. - simulator_run = not options.dont_skip_simulator_slow_tests and \ - arch in ['arm64', 'arm', 'mipsel', 'mips', 'mips64', 'mips64el', \ - 'ppc', 'ppc64', 's390', 's390x'] and \ - bool(ARCH_GUESS) and arch != ARCH_GUESS - # Find available test suites and read test cases from them. - variables = { - "arch": arch, - "asan": options.asan, - "deopt_fuzzer": False, - "gc_stress": options.gc_stress, - "gcov_coverage": options.gcov_coverage, - "isolates": options.isolates, - "mode": MODES[mode]["status_mode"], - "no_i18n": options.no_i18n, - "no_snap": options.no_snap, - "simulator_run": simulator_run, - "simulator": utils.UseSimulator(arch), - "system": utils.GuessOS(), - "tsan": options.tsan, - "msan": options.msan, - "dcheck_always_on": options.dcheck_always_on, - "novfp3": options.novfp3, - "predictable": options.predictable, - "byteorder": sys.byteorder, - "no_harness": options.no_harness, - "ubsan_vptr": options.ubsan_vptr, - } - all_tests = [] - num_tests = 0 - for s in suites: - s.ReadStatusFile(variables) - s.ReadTestCases(ctx) - if len(args) > 0: - s.FilterTestCasesByArgs(args) - all_tests += s.tests - - # First filtering by status applying the generic rules (independent of - # variants). - s.FilterTestCasesByStatus(options.warn_unused, options.slow_tests, - options.pass_fail_tests) - - if options.cat: - verbose.PrintTestSource(s.tests) - continue - variant_gen = s.CreateVariantGenerator(VARIANTS) - variant_tests = [ t.CopyAddingFlags(v, flags) - for t in s.tests - for v in variant_gen.FilterVariantsByTest(t) - for flags in variant_gen.GetFlagSets(t, v) ] - - if options.random_seed_stress_count > 1: - # Duplicate test for random seed stress mode. - def iter_seed_flags(): - for i in range(0, options.random_seed_stress_count): - # Use given random seed for all runs (set by default in execution.py) - # or a new random seed if none is specified. - if options.random_seed: - yield [] - else: - yield ["--random-seed=%d" % RandomSeed()] - s.tests = [ - t.CopyAddingFlags(t.variant, flags) - for t in variant_tests - for flags in iter_seed_flags() - ] - else: - s.tests = variant_tests - - # Second filtering by status applying the variant-dependent rules. - s.FilterTestCasesByStatus(options.warn_unused, options.slow_tests, - options.pass_fail_tests, variants=True) - - s.tests = ShardTests(s.tests, options) - num_tests += len(s.tests) - - if options.cat: - return 0 # We're done here. - - if options.report: - verbose.PrintReport(all_tests) - - # Run the tests, either locally or distributed on the network. - start_time = time.time() - progress_indicator = progress.IndicatorNotifier() - progress_indicator.Register(progress.PROGRESS_INDICATORS[options.progress]()) - if options.junitout: - progress_indicator.Register(progress.JUnitTestProgressIndicator( - options.junitout, options.junittestsuite)) - if options.json_test_results: - progress_indicator.Register(progress.JsonTestProgressIndicator( - options.json_test_results, arch, MODES[mode]["execution_mode"], - ctx.random_seed)) - if options.flakiness_results: - progress_indicator.Register(progress.FlakinessTestProgressIndicator( - options.flakiness_results)) - - run_networked = options.network - if not run_networked: - if options.verbose: - print("Network distribution disabled, running tests locally.") - elif utils.GuessOS() != "linux": - print("Network distribution is only supported on Linux, sorry!") - run_networked = False - peers = [] - if run_networked: - peers = network_execution.GetPeers() - if not peers: - print("No connection to distribution server; running tests locally.") - run_networked = False - elif len(peers) == 1: - print("No other peers on the network; running tests locally.") - run_networked = False - elif num_tests <= 100: - print("Less than 100 tests, running them locally.") - run_networked = False - - if run_networked: - runner = network_execution.NetworkedRunner(suites, progress_indicator, - ctx, peers, BASE_DIR) - else: - runner = execution.Runner(suites, progress_indicator, ctx) - - exit_code = runner.Run(options.j) - overall_duration = time.time() - start_time - - if options.time: - verbose.PrintTestDurations(suites, overall_duration) - - if num_tests == 0: - print("Warning: no tests were run!") - - if exit_code == 1 and options.json_test_results: - print("Force exit code 0 after failures. Json test results file generated " - "with failure information.") - exit_code = 0 - - if options.sancov_dir: - # If tests ran with sanitizer coverage, merge coverage files in the end. - try: - print "Merging sancov files." - subprocess.check_call([ - sys.executable, - join(BASE_DIR, "tools", "sanitizers", "sancov_merger.py"), - "--coverage-dir=%s" % options.sancov_dir]) - except: - print >> sys.stderr, "Error: Merging sancov files failed." - exit_code = 1 - return exit_code +from testrunner import standard_runner if __name__ == "__main__": - sys.exit(Main()) + sys.exit(standard_runner.StandardTestRunner().execute()) diff --git a/deps/v8/tools/run-valgrind.isolate b/deps/v8/tools/run-valgrind.isolate deleted file mode 100644 index 5947409e175..00000000000 --- a/deps/v8/tools/run-valgrind.isolate +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2016 the V8 project authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -{ - 'variables': { - 'command': [ - 'run-valgrind.py', - ], - 'files': [ - 'run-valgrind.py', - ], - }, - 'conditions': [ - ['has_valgrind==1', { - 'variables': { - 'files': [ - # This assumes vagrind binaries have been fetched as a custom deps - # into v8/third_party/valgrind. It is not clear on which target - # machine this will run, but grabbing both is cheap. - '../third_party/valgrind/linux_x86/', - '../third_party/valgrind/linux_x64/', - ], - }, - }], - ], - 'includes': [ - '../src/d8.isolate', - ], -} diff --git a/deps/v8/tools/run-valgrind.py b/deps/v8/tools/run-valgrind.py deleted file mode 100755 index e3f84f58fed..00000000000 --- a/deps/v8/tools/run-valgrind.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2009 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Simple wrapper for running valgrind and checking the output on -# stderr for memory leaks. -# Uses valgrind from third_party/valgrind. Assumes the executable is passed -# with a path relative to the v8 root. - - -from os import path -import platform -import re -import subprocess -import sys - -V8_ROOT = path.dirname(path.dirname(path.abspath(__file__))) -MACHINE = 'linux_x64' if platform.machine() == 'x86_64' else 'linux_x86' -VALGRIND_ROOT = path.join(V8_ROOT, 'third_party', 'valgrind', MACHINE) -VALGRIND_BIN = path.join(VALGRIND_ROOT, 'bin', 'valgrind') -VALGRIND_LIB = path.join(VALGRIND_ROOT, 'lib', 'valgrind') - -VALGRIND_ARGUMENTS = [ - VALGRIND_BIN, - '--error-exitcode=1', - '--leak-check=full', - '--smc-check=all', -] - -if len(sys.argv) < 2: - print 'Please provide an executable to analyze.' - sys.exit(1) - -executable = path.join(V8_ROOT, sys.argv[1]) -if not path.exists(executable): - print 'Cannot find the file specified: %s' % executable - sys.exit(1) - -# Compute the command line. -command = VALGRIND_ARGUMENTS + [executable] + sys.argv[2:] - -# Run valgrind. -process = subprocess.Popen( - command, - stderr=subprocess.PIPE, - env={'VALGRIND_LIB': VALGRIND_LIB} -) -code = process.wait(); -errors = process.stderr.readlines(); - -# If valgrind produced an error, we report that to the user. -if code != 0: - sys.stderr.writelines(errors) - sys.exit(code) - -# Look through the leak details and make sure that we don't -# have any definitely, indirectly, and possibly lost bytes. -LEAK_RE = r"(?:definitely|indirectly|possibly) lost: " -LEAK_LINE_MATCHER = re.compile(LEAK_RE) -LEAK_OKAY_MATCHER = re.compile(r"lost: 0 bytes in 0 blocks") -leaks = [] -for line in errors: - if LEAK_LINE_MATCHER.search(line): - leaks.append(line) - if not LEAK_OKAY_MATCHER.search(line): - sys.stderr.writelines(errors) - sys.exit(1) - -# Make sure we found between 2 and 3 leak lines. -if len(leaks) < 2 or len(leaks) > 3: - sys.stderr.writelines(errors) - sys.stderr.write('\n\n#### Malformed valgrind output.\n#### Exiting.\n') - sys.exit(1) - -# No leaks found. -sys.stderr.writelines(errors) -sys.exit(0) diff --git a/deps/v8/tools/run_perf.py b/deps/v8/tools/run_perf.py index b22a4f11eaa..3823eb510c3 100755 --- a/deps/v8/tools/run_perf.py +++ b/deps/v8/tools/run_perf.py @@ -106,7 +106,7 @@ import subprocess import sys -from testrunner.local import commands +from testrunner.local import command from testrunner.local import utils ARCH_GUESS = utils.DefaultArch() @@ -221,8 +221,8 @@ def GetResults(self): class NullMeasurement(object): - """Null object to avoid having extra logic for configurations that didn't - run like running without patch on trybots. + """Null object to avoid having extra logic for configurations that don't + require secondary run, e.g. CI bots. """ def ConsumeOutput(self, stdout): pass @@ -260,7 +260,7 @@ def RunResultsProcessor(results_processor, stdout, count): def AccumulateResults( - graph_names, trace_configs, iter_output, trybot, no_patch, calc_total): + graph_names, trace_configs, iter_output, perform_measurement, calc_total): """Iterates over the output of multiple benchmark reruns and accumulates results for a configured list of traces. @@ -270,14 +270,15 @@ def AccumulateResults( trace_configs: List of "TraceConfig" instances. Each trace config defines how to perform a measurement. iter_output: Iterator over the standard output of each test run. - trybot: Indicates that this is run in trybot mode, i.e. run twice, once - with once without patch. - no_patch: Indicates weather this is a trybot run without patch. + perform_measurement: Whether to actually run tests and perform measurements. + This is needed so that we reuse this script for both CI + and trybot, but want to ignore second run on CI without + having to spread this logic throughout the script. calc_total: Boolean flag to speficy the calculation of a summary trace. Returns: A "Results" object. """ measurements = [ - trace.CreateMeasurement(trybot, no_patch) for trace in trace_configs] + trace.CreateMeasurement(perform_measurement) for trace in trace_configs] for stdout in iter_output(): for measurement in measurements: measurement.ConsumeOutput(stdout) @@ -451,9 +452,8 @@ def __init__(self, suite, parent, arch): super(TraceConfig, self).__init__(suite, parent, arch) assert self.results_regexp - def CreateMeasurement(self, trybot, no_patch): - if not trybot and no_patch: - # Use null object for no-patch logic if this is not a trybot run. + def CreateMeasurement(self, perform_measurement): + if not perform_measurement: return NullMeasurement() return Measurement( @@ -493,34 +493,40 @@ def GetCommandFlags(self, extra_flags=None): suffix = ["--"] + self.test_flags if self.test_flags else [] return self.flags + (extra_flags or []) + [self.main] + suffix - def GetCommand(self, shell_dir, extra_flags=None): + def GetCommand(self, cmd_prefix, shell_dir, extra_flags=None): # TODO(machenbach): This requires +.exe if run on windows. extra_flags = extra_flags or [] - cmd = [os.path.join(shell_dir, self.binary)] - if self.binary.endswith(".py"): - cmd = [sys.executable] + cmd if self.binary != 'd8' and '--prof' in extra_flags: print "Profiler supported only on a benchmark run with d8" - return cmd + self.GetCommandFlags(extra_flags=extra_flags) + + if self.process_size: + cmd_prefix = ["/usr/bin/time", "--format=MaxMemory: %MKB"] + cmd_prefix + if self.binary.endswith('.py'): + # Copy cmd_prefix instead of update (+=). + cmd_prefix = cmd_prefix + [sys.executable] + + return command.Command( + cmd_prefix=cmd_prefix, + shell=os.path.join(shell_dir, self.binary), + args=self.GetCommandFlags(extra_flags=extra_flags), + timeout=self.timeout or 60) def Run(self, runner, trybot): """Iterates over several runs and handles the output for all traces.""" - stdout_with_patch, stdout_no_patch = Unzip(runner()) + stdout, stdout_secondary = Unzip(runner()) return ( AccumulateResults( self.graphs, self._children, - iter_output=self.PostProcess(stdout_with_patch), - trybot=trybot, - no_patch=False, + iter_output=self.PostProcess(stdout), + perform_measurement=True, calc_total=self.total, ), AccumulateResults( self.graphs, self._children, - iter_output=self.PostProcess(stdout_no_patch), - trybot=trybot, - no_patch=True, + iter_output=self.PostProcess(stdout_secondary), + perform_measurement=trybot, # only run second time on trybots calc_total=self.total, ), ) @@ -533,14 +539,14 @@ def __init__(self, suite, parent, arch): def Run(self, runner, trybot): """Iterates over several runs and handles the output.""" - measurement_with_patch = self.CreateMeasurement(trybot, False) - measurement_no_patch = self.CreateMeasurement(trybot, True) - for stdout_with_patch, stdout_no_patch in runner(): - measurement_with_patch.ConsumeOutput(stdout_with_patch) - measurement_no_patch.ConsumeOutput(stdout_no_patch) + measurement = self.CreateMeasurement(perform_measurement=True) + measurement_secondary = self.CreateMeasurement(perform_measurement=trybot) + for stdout, stdout_secondary in runner(): + measurement.ConsumeOutput(stdout) + measurement_secondary.ConsumeOutput(stdout_secondary) return ( - measurement_with_patch.GetResults(), - measurement_no_patch.GetResults(), + measurement.GetResults(), + measurement_secondary.GetResults(), ) @@ -550,10 +556,10 @@ def __init__(self, suite, parent, arch): super(RunnableGenericConfig, self).__init__(suite, parent, arch) def Run(self, runner, trybot): - stdout_with_patch, stdout_no_patch = Unzip(runner()) + stdout, stdout_secondary = Unzip(runner()) return ( - AccumulateGenericResults(self.graphs, self.units, stdout_with_patch), - AccumulateGenericResults(self.graphs, self.units, stdout_no_patch), + AccumulateGenericResults(self.graphs, self.units, stdout), + AccumulateGenericResults(self.graphs, self.units, stdout_secondary), ) @@ -615,7 +621,7 @@ def FlattenRunnables(node, node_cb): class Platform(object): def __init__(self, options): self.shell_dir = options.shell_dir - self.shell_dir_no_patch = options.shell_dir_no_patch + self.shell_dir_secondary = options.shell_dir_secondary self.extra_flags = options.extra_flags.split() @staticmethod @@ -625,24 +631,23 @@ def GetPlatform(options): else: return DesktopPlatform(options) - def _Run(self, runnable, count, no_patch=False): + def _Run(self, runnable, count, secondary=False): raise NotImplementedError() # pragma: no cover def Run(self, runnable, count): """Execute the benchmark's main file. - If options.shell_dir_no_patch is specified, the benchmark is run once with - and once without patch. + If options.shell_dir_secondary is specified, the benchmark is run twice, + e.g. with and without patch. Args: runnable: A Runnable benchmark instance. count: The number of this (repeated) run. - Returns: A tuple with the benchmark outputs with and without patch. The - latter will be None if options.shell_dir_no_patch was not - specified. + Returns: A tuple with the two benchmark outputs. The latter will be None if + options.shell_dir_secondary was not specified. """ - stdout = self._Run(runnable, count, no_patch=False) - if self.shell_dir_no_patch: - return stdout, self._Run(runnable, count, no_patch=True) + stdout = self._Run(runnable, count, secondary=False) + if self.shell_dir_secondary: + return stdout, self._Run(runnable, count, secondary=True) else: return stdout, None @@ -676,22 +681,13 @@ def PreTests(self, node, path): if isinstance(node, RunnableConfig): node.ChangeCWD(path) - def _Run(self, runnable, count, no_patch=False): - suffix = ' - without patch' if no_patch else '' - shell_dir = self.shell_dir_no_patch if no_patch else self.shell_dir + def _Run(self, runnable, count, secondary=False): + suffix = ' - secondary' if secondary else '' + shell_dir = self.shell_dir_secondary if secondary else self.shell_dir title = ">>> %%s (#%d)%s:" % ((count + 1), suffix) - if runnable.process_size: - command = ["/usr/bin/time", "--format=MaxMemory: %MKB"] - else: - command = [] - - command += self.command_prefix + runnable.GetCommand(shell_dir, - self.extra_flags) + cmd = runnable.GetCommand(self.command_prefix, shell_dir, self.extra_flags) try: - output = commands.Execute( - command, - timeout=runnable.timeout, - ) + output = cmd.execute() except OSError as e: # pragma: no cover print title % "OSError" print e @@ -816,18 +812,18 @@ def PreTests(self, node, path): bench_abs = suite_dir self._PushExecutable(self.shell_dir, "bin", node.binary) - if self.shell_dir_no_patch: + if self.shell_dir_secondary: self._PushExecutable( - self.shell_dir_no_patch, "bin_no_patch", node.binary) + self.shell_dir_secondary, "bin_secondary", node.binary) if isinstance(node, RunnableConfig): self._PushFile(bench_abs, node.main, bench_rel) for resource in node.resources: self._PushFile(bench_abs, resource, bench_rel) - def _Run(self, runnable, count, no_patch=False): - suffix = ' - without patch' if no_patch else '' - target_dir = "bin_no_patch" if no_patch else "bin" + def _Run(self, runnable, count, secondary=False): + suffix = ' - secondary' if secondary else '' + target_dir = "bin_secondary" if secondary else "bin" title = ">>> %%s (#%d)%s:" % ((count + 1), suffix) cache = cache_control.CacheControl(self.device) cache.DropRamCaches() @@ -984,17 +980,20 @@ def Main(args): default="") parser.add_option("--json-test-results", help="Path to a file for storing json results.") - parser.add_option("--json-test-results-no-patch", + parser.add_option("--json-test-results-secondary", + "--json-test-results-no-patch", # TODO(sergiyb): Deprecate. help="Path to a file for storing json results from run " - "without patch.") + "without patch or for reference build run.") parser.add_option("--outdir", help="Base directory with compile output", default="out") - parser.add_option("--outdir-no-patch", - help="Base directory with compile output without patch") + parser.add_option("--outdir-secondary", + "--outdir-no-patch", # TODO(sergiyb): Deprecate. + help="Base directory with compile output without patch or " + "for reference build") parser.add_option("--binary-override-path", help="JavaScript engine binary. By default, d8 under " "architecture-specific build dir. " - "Not supported in conjunction with outdir-no-patch.") + "Not supported in conjunction with outdir-secondary.") parser.add_option("--prioritize", help="Raise the priority to nice -20 for the benchmarking " "process.Requires Linux, schedtool, and sudo privileges.", @@ -1040,10 +1039,10 @@ def Main(args): print "Specifying a device requires Android build tools." return 1 - if (options.json_test_results_no_patch and - not options.outdir_no_patch): # pragma: no cover - print("For writing json test results without patch, an outdir without " - "patch must be specified.") + if (options.json_test_results_secondary and + not options.outdir_secondary): # pragma: no cover + print("For writing secondary json test results, a secondary outdir patch " + "must be specified.") return 1 workspace = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) @@ -1060,25 +1059,25 @@ def Main(args): if not os.path.isfile(options.binary_override_path): print "binary-override-path must be a file name" return 1 - if options.outdir_no_patch: - print "specify either binary-override-path or outdir-no-patch" + if options.outdir_secondary: + print "specify either binary-override-path or outdir-secondary" return 1 options.shell_dir = os.path.abspath( os.path.dirname(options.binary_override_path)) default_binary_name = os.path.basename(options.binary_override_path) - if options.outdir_no_patch: - options.shell_dir_no_patch = os.path.join( - workspace, options.outdir_no_patch, build_config) + if options.outdir_secondary: + options.shell_dir_secondary = os.path.join( + workspace, options.outdir_secondary, build_config) else: - options.shell_dir_no_patch = None + options.shell_dir_secondary = None if options.json_test_results: options.json_test_results = os.path.abspath(options.json_test_results) - if options.json_test_results_no_patch: - options.json_test_results_no_patch = os.path.abspath( - options.json_test_results_no_patch) + if options.json_test_results_secondary: + options.json_test_results_secondary = os.path.abspath( + options.json_test_results_secondary) # Ensure all arguments have absolute path before we start changing current # directory. @@ -1089,7 +1088,7 @@ def Main(args): platform = Platform.GetPlatform(options) results = Results() - results_no_patch = Results() + results_secondary = Results() with CustomMachineConfiguration(governor = options.cpu_governor, disable_aslr = options.noaslr) as conf: for path in args: @@ -1129,10 +1128,10 @@ def Runner(): yield platform.Run(runnable, i) # Let runnable iterate over all runs and handle output. - result, result_no_patch = runnable.Run( - Runner, trybot=options.shell_dir_no_patch) + result, result_secondary = runnable.Run( + Runner, trybot=options.shell_dir_secondary) results += result - results_no_patch += result_no_patch + results_secondary += result_secondary platform.PostExecution() if options.json_test_results: @@ -1140,10 +1139,10 @@ def Runner(): else: # pragma: no cover print results - if options.json_test_results_no_patch: - results_no_patch.WriteToFile(options.json_test_results_no_patch) + if options.json_test_results_secondary: + results_secondary.WriteToFile(options.json_test_results_secondary) else: # pragma: no cover - print results_no_patch + print results_secondary return min(1, len(results.errors)) diff --git a/deps/v8/tools/test-server.py b/deps/v8/tools/test-server.py deleted file mode 100755 index ab927de75f4..00000000000 --- a/deps/v8/tools/test-server.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import os -import subprocess -import sys - - -PIDFILE = "/tmp/v8-distributed-testing-server.pid" -ROOT = os.path.abspath(os.path.dirname(sys.argv[0])) - - -def _PrintUsage(): - print("""Usage: python %s COMMAND - -Where COMMAND can be any of: - start Starts the server. Forks to the background. - stop Stops the server. - restart Stops, then restarts the server. - setup Creates or updates the environment for the server to run. - update Alias for "setup". - trust Adds the given public key to the list of trusted keys. - help Displays this help text. - """ % sys.argv[0]) - - -def _IsDaemonRunning(): - return os.path.exists(PIDFILE) - - -def _Cmd(cmd): - code = subprocess.call(cmd, shell=True) - if code != 0: - print("Command '%s' returned error code %d" % (cmd, code)) - sys.exit(code) - - -def Update(): - # Create directory for private data storage. - data_dir = os.path.join(ROOT, "data") - if not os.path.exists(data_dir): - os.makedirs(data_dir) - - # Create directory for trusted public keys of peers (and self). - trusted_dir = os.path.join(ROOT, "trusted") - if not os.path.exists(trusted_dir): - os.makedirs(trusted_dir) - - # Install UltraJSON. It is much faster than Python's builtin json. - try: - import ujson #@UnusedImport - except ImportError: - # Install pip if it doesn't exist. - code = subprocess.call("which pip > /dev/null", shell=True) - if code != 0: - apt_get_code = subprocess.call("which apt-get > /dev/null", shell=True) - if apt_get_code == 0: - print("Installing pip...") - _Cmd("sudo apt-get install python-pip") - else: - print("Please install pip on your machine. You can get it at: " - "http://www.pip-installer.org/en/latest/installing.html " - "or via your distro's package manager.") - sys.exit(1) - print("Using pip to install UltraJSON...") - _Cmd("sudo pip install ujson") - - # Make sure we have a key pair for signing binaries. - privkeyfile = os.path.expanduser("~/.ssh/v8_dtest") - if not os.path.exists(privkeyfile): - _Cmd("ssh-keygen -t rsa -f %s -N '' -q" % privkeyfile) - fingerprint = subprocess.check_output("ssh-keygen -lf %s" % privkeyfile, - shell=True) - fingerprint = fingerprint.split(" ")[1].replace(":", "")[:16] - pubkeyfile = os.path.join(trusted_dir, "%s.pem" % fingerprint) - if (not os.path.exists(pubkeyfile) or - os.path.getmtime(pubkeyfile) < os.path.getmtime(privkeyfile)): - _Cmd("openssl rsa -in %s -out %s -pubout" % (privkeyfile, pubkeyfile)) - with open(pubkeyfile, "a") as f: - f.write(fingerprint + "\n") - datafile = os.path.join(data_dir, "mypubkey") - with open(datafile, "w") as f: - f.write(fingerprint + "\n") - - # Check out or update the server implementation in the current directory. - testrunner_dir = os.path.join(ROOT, "testrunner") - if os.path.exists(os.path.join(testrunner_dir, "server/daemon.py")): - _Cmd("cd %s; svn up" % testrunner_dir) - else: - path = ("http://v8.googlecode.com/svn/branches/bleeding_edge/" - "tools/testrunner") - _Cmd("svn checkout --force %s %s" % (path, testrunner_dir)) - - # Update this very script. - path = ("http://v8.googlecode.com/svn/branches/bleeding_edge/" - "tools/test-server.py") - scriptname = os.path.abspath(sys.argv[0]) - _Cmd("svn cat %s > %s" % (path, scriptname)) - - # Check out or update V8. - v8_dir = os.path.join(ROOT, "v8") - if os.path.exists(v8_dir): - _Cmd("cd %s; git fetch" % v8_dir) - else: - _Cmd("git clone git://github.com/v8/v8.git %s" % v8_dir) - - print("Finished.") - - -# Handle "setup" here, because when executing that we can't import anything -# else yet. -if __name__ == "__main__" and len(sys.argv) == 2: - if sys.argv[1] in ("setup", "update"): - if _IsDaemonRunning(): - print("Please stop the server before updating. Exiting.") - sys.exit(1) - Update() - sys.exit(0) - # Other parameters are handled below. - - -#========================================================== -# At this point we can assume that the implementation is available, -# so we can import it. -try: - from testrunner.server import constants - from testrunner.server import local_handler - from testrunner.server import main -except Exception, e: - print(e) - print("Failed to import implementation. Have you run 'setup'?") - sys.exit(1) - - -def _StartDaemon(daemon): - if not os.path.isdir(os.path.join(ROOT, "v8")): - print("No 'v8' working directory found. Have you run 'setup'?") - sys.exit(1) - daemon.start() - - -if __name__ == "__main__": - if len(sys.argv) == 2: - arg = sys.argv[1] - if arg == "start": - daemon = main.Server(PIDFILE, ROOT) - _StartDaemon(daemon) - elif arg == "stop": - daemon = main.Server(PIDFILE, ROOT) - daemon.stop() - elif arg == "restart": - daemon = main.Server(PIDFILE, ROOT) - daemon.stop() - _StartDaemon(daemon) - elif arg in ("help", "-h", "--help"): - _PrintUsage() - elif arg == "status": - if not _IsDaemonRunning(): - print("Server not running.") - else: - print(local_handler.LocalQuery([constants.REQUEST_STATUS])) - else: - print("Unknown command") - _PrintUsage() - sys.exit(2) - elif len(sys.argv) == 3: - arg = sys.argv[1] - if arg == "approve": - filename = sys.argv[2] - if not os.path.exists(filename): - print("%s does not exist.") - sys.exit(1) - filename = os.path.abspath(filename) - if _IsDaemonRunning(): - response = local_handler.LocalQuery([constants.ADD_TRUSTED, filename]) - else: - daemon = main.Server(PIDFILE, ROOT) - response = daemon.CopyToTrusted(filename) - print("Added certificate %s to trusted certificates." % response) - else: - print("Unknown command") - _PrintUsage() - sys.exit(2) - else: - print("Unknown command") - _PrintUsage() - sys.exit(2) - sys.exit(0) diff --git a/deps/v8/tools/testrunner/README b/deps/v8/tools/testrunner/README deleted file mode 100644 index 0771ef9dc27..00000000000 --- a/deps/v8/tools/testrunner/README +++ /dev/null @@ -1,168 +0,0 @@ -Test suite runner for V8, including support for distributed running. -==================================================================== - - -Local usage instructions: -========================= - -Run the main script with --help to get detailed usage instructions: - -$ tools/run-tests.py --help - -The interface is mostly the same as it was for the old test runner. -You'll likely want something like this: - -$ tools/run-tests.py --nonetwork --arch ia32 --mode release - ---nonetwork is the default on Mac and Windows. If you don't specify --arch -and/or --mode, all available values will be used and run in turn (e.g., -omitting --mode from the above example will run ia32 in both Release and Debug -modes). - - -Networked usage instructions: -============================= - -Networked running is only supported on Linux currently. Make sure that all -machines participating in the cluster are binary-compatible (e.g. mixing -Ubuntu Lucid and Precise doesn't work). - -Setup: ------- - -1.) Copy tools/test-server.py to a new empty directory anywhere on your hard - drive (preferably not inside your V8 checkout just to keep things clean). - Please do create a copy, not just a symlink. - -2.) Navigate to the new directory and let the server setup itself: - -$ ./test-server.py setup - - This will install PIP and UltraJSON, create a V8 working directory, and - generate a keypair. - -3.) Swap public keys with someone who's already part of the networked cluster. - -$ cp trusted/`cat data/mypubkey`.pem /where/peers/can/see/it/myname.pem -$ ./test-server.py approve /wherever/they/put/it/yourname.pem - - -Usage: ------- - -1.) Start your server: - -$ ./test-server.py start - -2.) (Optionally) inspect the server's status: - -$ ./test-server.py status - -3.) From your regular V8 working directory, run tests: - -$ tool/run-tests.py --arch ia32 --mode debug - -4.) (Optionally) enjoy the speeeeeeeeeeeeeeeed - - -Architecture overview: -====================== - -Code organization: ------------------- - -This section is written from the point of view of the tools/ directory. - -./run-tests.py: - Main script. Parses command-line options and drives the test execution - procedure from a high level. Imports the actual implementation of all - steps from the testrunner/ directory. - -./test-server.py: - Interface to interact with the server. Contains code to setup the server's - working environment and can start and stop server daemon processes. - Imports some stuff from the testrunner/server/ directory. - -./testrunner/local/*: - Implementation needed to run tests locally. Used by run-tests.py. Inspired by - (and partly copied verbatim from) the original test.py script. - -./testrunner/objects/*: - A bunch of data container classes, used by the scripts in the various other - directories; serializable for transmission over the network. - -./testrunner/network/*: - Equivalents and extensions of some of the functionality in ./testrunner/local/ - as required when dispatching tests to peers on the network. - -./testrunner/network/network_execution.py: - Drop-in replacement for ./testrunner/local/execution that distributes - test jobs to network peers instead of running them locally. - -./testrunner/network/endpoint.py: - Receiving end of a network distributed job, uses the implementation - in ./testrunner/local/execution.py for actually running the tests. - -./testrunner/server/*: - Implementation of the daemon that accepts and runs test execution jobs from - peers on the network. Should ideally have no dependencies on any of the other - directories, but that turned out to be impractical, so there are a few - exceptions. - -./testrunner/server/compression.py: - Defines a wrapper around Python TCP sockets that provides JSON based - serialization, gzip based compression, and ensures message completeness. - - -Networking architecture: ------------------------- - -The distribution stuff is designed to be a layer between deciding which tests -to run on the one side, and actually running them on the other. The frontend -that the user interacts with is the same for local and networked execution, -and the actual test execution and result gathering code is the same too. - -The server daemon starts four separate servers, each listening on another port: -- "Local": Communication with a run-tests.py script running on the same host. - The test driving script e.g. needs to ask for available peers. It then talks - to those peers directly (one of them will be the locally running server). -- "Work": Listens for test job requests from run-tests.py scripts on the network - (including localhost). Accepts an arbitrary number of connections at the - same time, but only works on them in a serialized fashion. -- "Status": Used for communication with other servers on the network, e.g. for - exchanging trusted public keys to create the transitive trust closure. -- "Discovery": Used to detect presence of other peers on the network. - In contrast to the other three, this uses UDP (as opposed to TCP). - - -Give us a diagram! We love diagrams! ------------------------------------- - . - Machine A . Machine B - . -+------------------------------+ . -| run-tests.py | . -| with flag: | . -|--nonetwork --network | . -| | / | | . -| | / | | . -| v / v | . -|BACKEND / distribution | . -+--------- / --------| \ ------+ . - / | \_____________________ - / | . \ - / | . \ -+----- v ----------- v --------+ . +---- v -----------------------+ -| LocalHandler | WorkHandler | . | WorkHandler | LocalHandler | -| | | | . | | | | -| | v | . | v | | -| | BACKEND | . | BACKEND | | -|------------- +---------------| . |---------------+--------------| -| Discovery | StatusHandler <----------> StatusHandler | Discovery | -+---- ^ -----------------------+ . +-------------------- ^ -------+ - | . | - +---------------------------------------------------------+ - -Note that the three occurrences of "BACKEND" are the same code -(testrunner/local/execution.py and its imports), but running from three -distinct directories (and on two different machines). diff --git a/deps/v8/tools/testrunner/base_runner.py b/deps/v8/tools/testrunner/base_runner.py new file mode 100644 index 00000000000..b6ef6fb5cd5 --- /dev/null +++ b/deps/v8/tools/testrunner/base_runner.py @@ -0,0 +1,438 @@ +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import json +import optparse +import os +import sys + + +# Add testrunner to the path. +sys.path.insert( + 0, + os.path.dirname( + os.path.dirname(os.path.abspath(__file__)))) + + +from local import utils + + +BASE_DIR = ( + os.path.dirname( + os.path.dirname( + os.path.dirname( + os.path.abspath(__file__))))) + +DEFAULT_OUT_GN = 'out.gn' + +ARCH_GUESS = utils.DefaultArch() + +# Map of test name synonyms to lists of test suites. Should be ordered by +# expected runtimes (suites with slow test cases first). These groups are +# invoked in separate steps on the bots. +TEST_MAP = { + # This needs to stay in sync with test/bot_default.isolate. + "bot_default": [ + "debugger", + "mjsunit", + "cctest", + "wasm-spec-tests", + "inspector", + "webkit", + "mkgrokdump", + "fuzzer", + "message", + "preparser", + "intl", + "unittests", + ], + # This needs to stay in sync with test/default.isolate. + "default": [ + "debugger", + "mjsunit", + "cctest", + "wasm-spec-tests", + "inspector", + "mkgrokdump", + "fuzzer", + "message", + "preparser", + "intl", + "unittests", + ], + # This needs to stay in sync with test/optimize_for_size.isolate. + "optimize_for_size": [ + "debugger", + "mjsunit", + "cctest", + "inspector", + "webkit", + "intl", + ], + "unittests": [ + "unittests", + ], +} + + +class ModeConfig(object): + def __init__(self, flags, timeout_scalefactor, status_mode, execution_mode): + self.flags = flags + self.timeout_scalefactor = timeout_scalefactor + self.status_mode = status_mode + self.execution_mode = execution_mode + + +DEBUG_FLAGS = ["--nohard-abort", "--enable-slow-asserts", "--verify-heap"] +RELEASE_FLAGS = ["--nohard-abort"] +MODES = { + "debug": ModeConfig( + flags=DEBUG_FLAGS, + timeout_scalefactor=4, + status_mode="debug", + execution_mode="debug", + ), + "optdebug": ModeConfig( + flags=DEBUG_FLAGS, + timeout_scalefactor=4, + status_mode="debug", + execution_mode="debug", + ), + "release": ModeConfig( + flags=RELEASE_FLAGS, + timeout_scalefactor=1, + status_mode="release", + execution_mode="release", + ), + # Normal trybot release configuration. There, dchecks are always on which + # implies debug is set. Hence, the status file needs to assume debug-like + # behavior/timeouts. + "tryrelease": ModeConfig( + flags=RELEASE_FLAGS, + timeout_scalefactor=1, + status_mode="debug", + execution_mode="release", + ), + # This mode requires v8 to be compiled with dchecks and slow dchecks. + "slowrelease": ModeConfig( + flags=RELEASE_FLAGS + ["--enable-slow-asserts"], + timeout_scalefactor=2, + status_mode="debug", + execution_mode="release", + ), +} + + +class TestRunnerError(Exception): + pass + + +class BuildConfig(object): + def __init__(self, build_config): + # In V8 land, GN's x86 is called ia32. + if build_config['v8_target_cpu'] == 'x86': + self.arch = 'ia32' + else: + self.arch = build_config['v8_target_cpu'] + + self.is_debug = build_config['is_debug'] + self.asan = build_config['is_asan'] + self.cfi_vptr = build_config['is_cfi'] + self.dcheck_always_on = build_config['dcheck_always_on'] + self.gcov_coverage = build_config['is_gcov_coverage'] + self.msan = build_config['is_msan'] + self.no_i18n = not build_config['v8_enable_i18n_support'] + self.no_snap = not build_config['v8_use_snapshot'] + self.predictable = build_config['v8_enable_verify_predictable'] + self.tsan = build_config['is_tsan'] + self.ubsan_vptr = build_config['is_ubsan_vptr'] + + def __str__(self): + detected_options = [] + + if self.asan: + detected_options.append('asan') + if self.cfi_vptr: + detected_options.append('cfi_vptr') + if self.dcheck_always_on: + detected_options.append('dcheck_always_on') + if self.gcov_coverage: + detected_options.append('gcov_coverage') + if self.msan: + detected_options.append('msan') + if self.no_i18n: + detected_options.append('no_i18n') + if self.no_snap: + detected_options.append('no_snap') + if self.predictable: + detected_options.append('predictable') + if self.tsan: + detected_options.append('tsan') + if self.ubsan_vptr: + detected_options.append('ubsan_vptr') + + return '\n'.join(detected_options) + + +class BaseTestRunner(object): + def __init__(self): + self.outdir = None + self.build_config = None + self.mode_name = None + self.mode_options = None + + def execute(self): + try: + parser = self._create_parser() + options, args = self._parse_args(parser) + + self._load_build_config(options) + + try: + self._process_default_options(options) + self._process_options(options) + except TestRunnerError: + parser.print_help() + raise + + self._setup_env() + return self._do_execute(options, args) + except TestRunnerError: + return 1 + + def _create_parser(self): + parser = optparse.OptionParser() + parser.usage = '%prog [options] [tests]' + parser.description = """TESTS: %s""" % (TEST_MAP["default"]) + self._add_parser_default_options(parser) + self._add_parser_options(parser) + return parser + + def _add_parser_default_options(self, parser): + parser.add_option("--gn", help="Scan out.gn for the last built" + " configuration", + default=False, action="store_true") + parser.add_option("--outdir", help="Base directory with compile output", + default="out") + parser.add_option("--buildbot", help="DEPRECATED!", + default=False, action="store_true") + parser.add_option("--arch", + help="The architecture to run tests for") + parser.add_option("-m", "--mode", + help="The test mode in which to run (uppercase for ninja" + " and buildbot builds): %s" % MODES.keys()) + parser.add_option("--shell-dir", help="DEPRECATED! Executables from build " + "directory will be used") + parser.add_option("-v", "--verbose", help="Verbose output", + default=False, action="store_true") + + def _add_parser_options(self, parser): + pass + + def _parse_args(self, parser): + options, args = parser.parse_args() + + if any(map(lambda v: v and ',' in v, + [options.arch, options.mode])): + print 'Multiple arch/mode are deprecated' + raise TestRunnerError() + + return options, args + + def _load_build_config(self, options): + for outdir in self._possible_outdirs(options): + try: + self.build_config = self._do_load_build_config(outdir, options.verbose) + except TestRunnerError: + pass + + if not self.build_config: + print 'Failed to load build config' + raise TestRunnerError + + print 'Build found: %s' % self.outdir + if str(self.build_config): + print '>>> Autodetected:' + print self.build_config + + # Returns possible build paths in order: + # gn + # outdir + # outdir/arch.mode + # Each path is provided in two versions: and /mode for buildbot. + def _possible_outdirs(self, options): + def outdirs(): + if options.gn: + yield self._get_gn_outdir() + return + + yield options.outdir + if options.arch and options.mode: + yield os.path.join(options.outdir, + '%s.%s' % (options.arch, options.mode)) + + for outdir in outdirs(): + yield os.path.join(BASE_DIR, outdir) + + # buildbot option + if options.mode: + yield os.path.join(BASE_DIR, outdir, options.mode) + + def _get_gn_outdir(self): + gn_out_dir = os.path.join(BASE_DIR, DEFAULT_OUT_GN) + latest_timestamp = -1 + latest_config = None + for gn_config in os.listdir(gn_out_dir): + gn_config_dir = os.path.join(gn_out_dir, gn_config) + if not os.path.isdir(gn_config_dir): + continue + if os.path.getmtime(gn_config_dir) > latest_timestamp: + latest_timestamp = os.path.getmtime(gn_config_dir) + latest_config = gn_config + if latest_config: + print(">>> Latest GN build found: %s" % latest_config) + return os.path.join(DEFAULT_OUT_GN, latest_config) + + def _do_load_build_config(self, outdir, verbose=False): + build_config_path = os.path.join(outdir, "v8_build_config.json") + if not os.path.exists(build_config_path): + if verbose: + print("Didn't find build config: %s" % build_config_path) + raise TestRunnerError() + + with open(build_config_path) as f: + try: + build_config_json = json.load(f) + except Exception: + print("%s exists but contains invalid json. Is your build up-to-date?" + % build_config_path) + raise TestRunnerError() + + # In auto-detect mode the outdir is always where we found the build config. + # This ensures that we'll also take the build products from there. + self.outdir = os.path.dirname(build_config_path) + + return BuildConfig(build_config_json) + + def _process_default_options(self, options): + # We don't use the mode for more path-magic. + # Therefore transform the buildbot mode here to fix build_config value. + if options.mode: + options.mode = self._buildbot_to_v8_mode(options.mode) + + build_config_mode = 'debug' if self.build_config.is_debug else 'release' + if options.mode: + if options.mode not in MODES: + print '%s mode is invalid' % options.mode + raise TestRunnerError() + if MODES[options.mode].execution_mode != build_config_mode: + print ('execution mode (%s) for %s is inconsistent with build config ' + '(%s)' % ( + MODES[options.mode].execution_mode, + options.mode, + build_config_mode)) + raise TestRunnerError() + + self.mode_name = options.mode + else: + self.mode_name = build_config_mode + + self.mode_options = MODES[self.mode_name] + + if options.arch and options.arch != self.build_config.arch: + print('--arch value (%s) inconsistent with build config (%s).' % ( + options.arch, self.build_config.arch)) + raise TestRunnerError() + + if options.shell_dir: + print('Warning: --shell-dir is deprecated. Searching for executables in ' + 'build directory (%s) instead.' % self.outdir) + + def _buildbot_to_v8_mode(self, config): + """Convert buildbot build configs to configs understood by the v8 runner. + + V8 configs are always lower case and without the additional _x64 suffix + for 64 bit builds on windows with ninja. + """ + mode = config[:-4] if config.endswith('_x64') else config + return mode.lower() + + def _process_options(self, options): + pass + + def _setup_env(self): + # Use the v8 root as cwd as some test cases use "load" with relative paths. + os.chdir(BASE_DIR) + + # Many tests assume an English interface. + os.environ['LANG'] = 'en_US.UTF-8' + + symbolizer_option = self._get_external_symbolizer_option() + + if self.build_config.asan: + asan_options = [ + symbolizer_option, + 'allow_user_segv_handler=1', + 'allocator_may_return_null=1', + ] + if not utils.GuessOS() in ['macos', 'windows']: + # LSAN is not available on mac and windows. + asan_options.append('detect_leaks=1') + else: + asan_options.append('detect_leaks=0') + os.environ['ASAN_OPTIONS'] = ":".join(asan_options) + + if self.build_config.cfi_vptr: + os.environ['UBSAN_OPTIONS'] = ":".join([ + 'print_stacktrace=1', + 'print_summary=1', + 'symbolize=1', + symbolizer_option, + ]) + + if self.build_config.ubsan_vptr: + os.environ['UBSAN_OPTIONS'] = ":".join([ + 'print_stacktrace=1', + symbolizer_option, + ]) + + if self.build_config.msan: + os.environ['MSAN_OPTIONS'] = symbolizer_option + + if self.build_config.tsan: + suppressions_file = os.path.join( + BASE_DIR, + 'tools', + 'sanitizers', + 'tsan_suppressions.txt') + os.environ['TSAN_OPTIONS'] = " ".join([ + symbolizer_option, + 'suppressions=%s' % suppressions_file, + 'exit_code=0', + 'report_thread_leaks=0', + 'history_size=7', + 'report_destroy_locked=0', + ]) + + def _get_external_symbolizer_option(self): + external_symbolizer_path = os.path.join( + BASE_DIR, + 'third_party', + 'llvm-build', + 'Release+Asserts', + 'bin', + 'llvm-symbolizer', + ) + + if utils.IsWindows(): + # Quote, because sanitizers might confuse colon as option separator. + external_symbolizer_path = '"%s.exe"' % external_symbolizer_path + + return 'external_symbolizer_path=%s' % external_symbolizer_path + + + # TODO(majeski): remove options & args parameters + def _do_execute(self, options, args): + raise NotImplementedError() diff --git a/deps/v8/tools/testrunner/deopt_fuzzer.py b/deps/v8/tools/testrunner/deopt_fuzzer.py new file mode 100755 index 00000000000..5fa741ba66e --- /dev/null +++ b/deps/v8/tools/testrunner/deopt_fuzzer.py @@ -0,0 +1,381 @@ +#!/usr/bin/env python +# +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +from os.path import join +import json +import math +import multiprocessing +import os +import random +import shlex +import sys +import time + +# Adds testrunner to the path hence it has to be imported at the beggining. +import base_runner + +from testrunner.local import execution +from testrunner.local import progress +from testrunner.local import testsuite +from testrunner.local import utils +from testrunner.local import verbose +from testrunner.objects import context + + +DEFAULT_TESTS = ["mjsunit", "webkit"] +TIMEOUT_DEFAULT = 60 + +# Double the timeout for these: +SLOW_ARCHS = ["arm", + "mipsel"] +MAX_DEOPT = 1000000000 +DISTRIBUTION_MODES = ["smooth", "random"] + + +class DeoptFuzzer(base_runner.BaseTestRunner): + def __init__(self): + super(DeoptFuzzer, self).__init__() + + class RandomDistribution: + def __init__(self, seed=None): + seed = seed or random.randint(1, sys.maxint) + print "Using random distribution with seed %d" % seed + self._random = random.Random(seed) + + def Distribute(self, n, m): + if n > m: + n = m + return self._random.sample(xrange(1, m + 1), n) + + class SmoothDistribution: + """Distribute n numbers into the interval [1:m]. + F1: Factor of the first derivation of the distribution function. + F2: Factor of the second derivation of the distribution function. + With F1 and F2 set to 0, the distribution will be equal. + """ + def __init__(self, factor1=2.0, factor2=0.2): + self._factor1 = factor1 + self._factor2 = factor2 + + def Distribute(self, n, m): + if n > m: + n = m + if n <= 1: + return [ 1 ] + + result = [] + x = 0.0 + dx = 1.0 + ddx = self._factor1 + dddx = self._factor2 + for i in range(0, n): + result += [ x ] + x += dx + dx += ddx + ddx += dddx + + # Project the distribution into the interval [0:M]. + result = [ x * m / result[-1] for x in result ] + + # Equalize by n. The closer n is to m, the more equal will be the + # distribution. + for (i, x) in enumerate(result): + # The value of x if it was equally distributed. + equal_x = i / float(n - 1) * float(m - 1) + 1 + + # Difference factor between actual and equal distribution. + diff = 1 - (x / equal_x) + + # Equalize x dependent on the number of values to distribute. + result[i] = int(x + (i + 1) * diff) + return result + + + def _distribution(self, options): + if options.distribution_mode == "random": + return self.RandomDistribution(options.seed) + if options.distribution_mode == "smooth": + return self.SmoothDistribution(options.distribution_factor1, + options.distribution_factor2) + + + def _add_parser_options(self, parser): + parser.add_option("--command-prefix", + help="Prepended to each shell command used to run a test", + default="") + parser.add_option("--coverage", help=("Exponential test coverage " + "(range 0.0, 1.0) - 0.0: one test, 1.0 all tests (slow)"), + default=0.4, type="float") + parser.add_option("--coverage-lift", help=("Lifts test coverage for tests " + "with a small number of deopt points (range 0, inf)"), + default=20, type="int") + parser.add_option("--distribution-factor1", help=("Factor of the first " + "derivation of the distribution function"), default=2.0, + type="float") + parser.add_option("--distribution-factor2", help=("Factor of the second " + "derivation of the distribution function"), default=0.7, + type="float") + parser.add_option("--distribution-mode", help=("How to select deopt points " + "for a given test (smooth|random)"), + default="smooth") + parser.add_option("--dump-results-file", help=("Dump maximum number of " + "deopt points per test to a file")) + parser.add_option("--extra-flags", + help="Additional flags to pass to each test command", + default="") + parser.add_option("--isolates", help="Whether to test isolates", + default=False, action="store_true") + parser.add_option("-j", help="The number of parallel tasks to run", + default=0, type="int") + parser.add_option("-p", "--progress", + help=("The style of progress indicator" + " (verbose, dots, color, mono)"), + choices=progress.PROGRESS_INDICATORS.keys(), + default="mono") + parser.add_option("--shard-count", + help="Split testsuites into this number of shards", + default=1, type="int") + parser.add_option("--shard-run", + help="Run this shard from the split up tests.", + default=1, type="int") + parser.add_option("--seed", help="The seed for the random distribution", + type="int") + parser.add_option("-t", "--timeout", help="Timeout in seconds", + default= -1, type="int") + parser.add_option("--random-seed", default=0, dest="random_seed", + help="Default seed for initializing random generator") + parser.add_option("--fuzzer-random-seed", default=0, + help="Default seed for initializing fuzzer random " + "generator") + return parser + + + def _process_options(self, options): + # Special processing of other options, sorted alphabetically. + options.command_prefix = shlex.split(options.command_prefix) + options.extra_flags = shlex.split(options.extra_flags) + if options.j == 0: + options.j = multiprocessing.cpu_count() + while options.random_seed == 0: + options.random_seed = random.SystemRandom().randint(-2147483648, + 2147483647) + if not options.distribution_mode in DISTRIBUTION_MODES: + print "Unknown distribution mode %s" % options.distribution_mode + return False + if options.distribution_factor1 < 0.0: + print ("Distribution factor1 %s is out of range. Defaulting to 0.0" + % options.distribution_factor1) + options.distribution_factor1 = 0.0 + if options.distribution_factor2 < 0.0: + print ("Distribution factor2 %s is out of range. Defaulting to 0.0" + % options.distribution_factor2) + options.distribution_factor2 = 0.0 + if options.coverage < 0.0 or options.coverage > 1.0: + print ("Coverage %s is out of range. Defaulting to 0.4" + % options.coverage) + options.coverage = 0.4 + if options.coverage_lift < 0: + print ("Coverage lift %s is out of range. Defaulting to 0" + % options.coverage_lift) + options.coverage_lift = 0 + return True + + def _shard_tests(self, tests, shard_count, shard_run): + if shard_count < 2: + return tests + if shard_run < 1 or shard_run > shard_count: + print "shard-run not a valid number, should be in [1:shard-count]" + print "defaulting back to running all tests" + return tests + count = 0 + shard = [] + for test in tests: + if count % shard_count == shard_run - 1: + shard.append(test) + count += 1 + return shard + + def _do_execute(self, options, args): + suite_paths = utils.GetSuitePaths(join(base_runner.BASE_DIR, "test")) + + if len(args) == 0: + suite_paths = [ s for s in suite_paths if s in DEFAULT_TESTS ] + else: + args_suites = set() + for arg in args: + suite = arg.split(os.path.sep)[0] + if not suite in args_suites: + args_suites.add(suite) + suite_paths = [ s for s in suite_paths if s in args_suites ] + + suites = [] + for root in suite_paths: + suite = testsuite.TestSuite.LoadTestSuite( + os.path.join(base_runner.BASE_DIR, "test", root)) + if suite: + suites.append(suite) + + try: + return self._execute(args, options, suites) + except KeyboardInterrupt: + return 2 + + + def _calculate_n_tests(self, m, options): + """Calculates the number of tests from m deopt points with exponential + coverage. + The coverage is expected to be between 0.0 and 1.0. + The 'coverage lift' lifts the coverage for tests with smaller m values. + """ + c = float(options.coverage) + l = float(options.coverage_lift) + return int(math.pow(m, (m * c + l) / (m + l))) + + + def _execute(self, args, options, suites): + print(">>> Running tests for %s.%s" % (self.build_config.arch, + self.mode_name)) + + dist = self._distribution(options) + + # Populate context object. + timeout = options.timeout + if timeout == -1: + # Simulators are slow, therefore allow a longer default timeout. + if self.build_config.arch in SLOW_ARCHS: + timeout = 2 * TIMEOUT_DEFAULT; + else: + timeout = TIMEOUT_DEFAULT; + + timeout *= self.mode_options.timeout_scalefactor + ctx = context.Context(self.build_config.arch, + self.mode_options.execution_mode, + self.outdir, + self.mode_options.flags, options.verbose, + timeout, options.isolates, + options.command_prefix, + options.extra_flags, + False, # Keep i18n on by default. + options.random_seed, + True, # No sorting of test cases. + 0, # Don't rerun failing tests. + 0, # No use of a rerun-failing-tests maximum. + False, # No predictable mode. + False, # No no_harness mode. + False, # Don't use perf data. + False) # Coverage not supported. + + # Find available test suites and read test cases from them. + variables = { + "arch": self.build_config.arch, + "asan": self.build_config.asan, + "byteorder": sys.byteorder, + "dcheck_always_on": self.build_config.dcheck_always_on, + "deopt_fuzzer": True, + "gc_fuzzer": False, + "gc_stress": False, + "gcov_coverage": self.build_config.gcov_coverage, + "isolates": options.isolates, + "mode": self.mode_options.status_mode, + "msan": self.build_config.msan, + "no_harness": False, + "no_i18n": self.build_config.no_i18n, + "no_snap": self.build_config.no_snap, + "novfp3": False, + "predictable": self.build_config.predictable, + "simulator": utils.UseSimulator(self.build_config.arch), + "simulator_run": False, + "system": utils.GuessOS(), + "tsan": self.build_config.tsan, + "ubsan_vptr": self.build_config.ubsan_vptr, + } + num_tests = 0 + test_id = 0 + + # Remember test case prototypes for the fuzzing phase. + test_backup = dict((s, []) for s in suites) + + for s in suites: + s.ReadStatusFile(variables) + s.ReadTestCases(ctx) + if len(args) > 0: + s.FilterTestCasesByArgs(args) + s.FilterTestCasesByStatus(False) + + test_backup[s] = s.tests + analysis_flags = ["--deopt-every-n-times", "%d" % MAX_DEOPT, + "--print-deopt-stress"] + s.tests = [t.create_variant(t.variant, analysis_flags) for t in s.tests] + num_tests += len(s.tests) + for t in s.tests: + t.id = test_id + t.cmd = t.get_command(ctx) + test_id += 1 + + if num_tests == 0: + print "No tests to run." + return 0 + + print(">>> Collection phase") + progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() + runner = execution.Runner(suites, progress_indicator, ctx) + + exit_code = runner.Run(options.j) + + print(">>> Analysis phase") + num_tests = 0 + test_id = 0 + for s in suites: + test_results = {} + for t in s.tests: + for line in runner.outputs[t].stdout.splitlines(): + if line.startswith("=== Stress deopt counter: "): + test_results[t.path] = MAX_DEOPT - int(line.split(" ")[-1]) + for t in s.tests: + if t.path not in test_results: + print "Missing results for %s" % t.path + if options.dump_results_file: + results_dict = dict((t.path, n) for (t, n) in test_results.iteritems()) + with file("%s.%d.txt" % (options.dump_results_file, time.time()), + "w") as f: + f.write(json.dumps(results_dict)) + + # Reset tests and redistribute the prototypes from the collection phase. + s.tests = [] + if options.verbose: + print "Test distributions:" + for t in test_backup[s]: + max_deopt = test_results.get(t.path, 0) + if max_deopt == 0: + continue + n_deopt = self._calculate_n_tests(max_deopt, options) + distribution = dist.Distribute(n_deopt, max_deopt) + if options.verbose: + print "%s %s" % (t.path, distribution) + for i in distribution: + fuzzing_flags = ["--deopt-every-n-times", "%d" % i] + s.tests.append(t.create_variant(t.variant, fuzzing_flags)) + num_tests += len(s.tests) + for t in s.tests: + t.id = test_id + t.cmd = t.get_command(ctx) + test_id += 1 + + if num_tests == 0: + print "No tests to run." + return exit_code + + print(">>> Deopt fuzzing phase (%d test cases)" % num_tests) + progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() + runner = execution.Runner(suites, progress_indicator, ctx) + + code = runner.Run(options.j) + return exit_code or code + + +if __name__ == '__main__': + sys.exit(DeoptFuzzer().execute()) diff --git a/deps/v8/tools/testrunner/gc_fuzzer.py b/deps/v8/tools/testrunner/gc_fuzzer.py new file mode 100755 index 00000000000..eaf71600286 --- /dev/null +++ b/deps/v8/tools/testrunner/gc_fuzzer.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python +# +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +from os.path import join +import itertools +import json +import math +import multiprocessing +import os +import random +import shlex +import sys +import time + +# Adds testrunner to the path hence it has to be imported at the beggining. +import base_runner + +from testrunner.local import execution +from testrunner.local import progress +from testrunner.local import testsuite +from testrunner.local import utils +from testrunner.local import verbose +from testrunner.objects import context + + +DEFAULT_TESTS = ["mjsunit", "webkit"] +TIMEOUT_DEFAULT = 60 + +# Double the timeout for these: +SLOW_ARCHS = ["arm", + "mipsel"] + + +class GCFuzzer(base_runner.BaseTestRunner): + def __init__(self): + super(GCFuzzer, self).__init__() + + self.fuzzer_rng = None + + def _add_parser_options(self, parser): + parser.add_option("--command-prefix", + help="Prepended to each shell command used to run a test", + default="") + parser.add_option("--coverage", help=("Exponential test coverage " + "(range 0.0, 1.0) - 0.0: one test, 1.0 all tests (slow)"), + default=0.4, type="float") + parser.add_option("--coverage-lift", help=("Lifts test coverage for tests " + "with a low memory size reached (range 0, inf)"), + default=20, type="int") + parser.add_option("--dump-results-file", help="Dump maximum limit reached") + parser.add_option("--extra-flags", + help="Additional flags to pass to each test command", + default="") + parser.add_option("--isolates", help="Whether to test isolates", + default=False, action="store_true") + parser.add_option("-j", help="The number of parallel tasks to run", + default=0, type="int") + parser.add_option("-p", "--progress", + help=("The style of progress indicator" + " (verbose, dots, color, mono)"), + choices=progress.PROGRESS_INDICATORS.keys(), + default="mono") + parser.add_option("--shard-count", + help="Split testsuites into this number of shards", + default=1, type="int") + parser.add_option("--shard-run", + help="Run this shard from the split up tests.", + default=1, type="int") + parser.add_option("-t", "--timeout", help="Timeout in seconds", + default= -1, type="int") + parser.add_option("--random-seed", default=0, + help="Default seed for initializing random generator") + parser.add_option("--fuzzer-random-seed", default=0, + help="Default seed for initializing fuzzer random " + "generator") + parser.add_option("--stress-compaction", default=False, action="store_true", + help="Enable stress_compaction_percentage flag") + + parser.add_option("--distribution-factor1", help="DEPRECATED") + parser.add_option("--distribution-factor2", help="DEPRECATED") + parser.add_option("--distribution-mode", help="DEPRECATED") + parser.add_option("--seed", help="DEPRECATED") + return parser + + + def _process_options(self, options): + # Special processing of other options, sorted alphabetically. + options.command_prefix = shlex.split(options.command_prefix) + options.extra_flags = shlex.split(options.extra_flags) + if options.j == 0: + options.j = multiprocessing.cpu_count() + while options.random_seed == 0: + options.random_seed = random.SystemRandom().randint(-2147483648, + 2147483647) + while options.fuzzer_random_seed == 0: + options.fuzzer_random_seed = random.SystemRandom().randint(-2147483648, + 2147483647) + self.fuzzer_rng = random.Random(options.fuzzer_random_seed) + return True + + def _shard_tests(self, tests, shard_count, shard_run): + if shard_count < 2: + return tests + if shard_run < 1 or shard_run > shard_count: + print "shard-run not a valid number, should be in [1:shard-count]" + print "defaulting back to running all tests" + return tests + count = 0 + shard = [] + for test in tests: + if count % shard_count == shard_run - 1: + shard.append(test) + count += 1 + return shard + + def _do_execute(self, options, args): + suite_paths = utils.GetSuitePaths(join(base_runner.BASE_DIR, "test")) + + if len(args) == 0: + suite_paths = [ s for s in suite_paths if s in DEFAULT_TESTS ] + else: + args_suites = set() + for arg in args: + suite = arg.split(os.path.sep)[0] + if not suite in args_suites: + args_suites.add(suite) + suite_paths = [ s for s in suite_paths if s in args_suites ] + + suites = [] + for root in suite_paths: + suite = testsuite.TestSuite.LoadTestSuite( + os.path.join(base_runner.BASE_DIR, "test", root)) + if suite: + suites.append(suite) + + try: + return self._execute(args, options, suites) + except KeyboardInterrupt: + return 2 + + + def _calculate_n_tests(self, m, options): + """Calculates the number of tests from m points with exponential coverage. + The coverage is expected to be between 0.0 and 1.0. + The 'coverage lift' lifts the coverage for tests with smaller m values. + """ + c = float(options.coverage) + l = float(options.coverage_lift) + return int(math.pow(m, (m * c + l) / (m + l))) + + + def _execute(self, args, options, suites): + print(">>> Running tests for %s.%s" % (self.build_config.arch, + self.mode_name)) + + # Populate context object. + timeout = options.timeout + if timeout == -1: + # Simulators are slow, therefore allow a longer default timeout. + if self.build_config.arch in SLOW_ARCHS: + timeout = 2 * TIMEOUT_DEFAULT; + else: + timeout = TIMEOUT_DEFAULT; + + timeout *= self.mode_options.timeout_scalefactor + ctx = context.Context(self.build_config.arch, + self.mode_options.execution_mode, + self.outdir, + self.mode_options.flags, options.verbose, + timeout, options.isolates, + options.command_prefix, + options.extra_flags, + False, # Keep i18n on by default. + options.random_seed, + True, # No sorting of test cases. + 0, # Don't rerun failing tests. + 0, # No use of a rerun-failing-tests maximum. + False, # No predictable mode. + False, # No no_harness mode. + False, # Don't use perf data. + False) # Coverage not supported. + + num_tests = self._load_tests(args, options, suites, ctx) + if num_tests == 0: + print "No tests to run." + return 0 + + test_backup = dict(map(lambda s: (s, s.tests), suites)) + + print('>>> Collection phase') + for s in suites: + analysis_flags = [ + # > 100% to not influence default incremental marking, but we need this + # flag to print reached incremental marking limit. + '--stress_marking', '1000', + '--trace_incremental_marking', + ] + s.tests = map(lambda t: t.create_variant(t.variant, analysis_flags), + s.tests) + for t in s.tests: + t.cmd = t.get_command(ctx) + + progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() + runner = execution.Runner(suites, progress_indicator, ctx) + exit_code = runner.Run(options.j) + + print('>>> Analysis phase') + test_results = dict() + for s in suites: + for t in s.tests: + # Skip failed tests. + if s.HasUnexpectedOutput(t, runner.outputs[t]): + print '%s failed, skipping' % t.path + continue + max_limit = self._get_max_limit_reached(runner.outputs[t]) + if max_limit: + test_results[t.path] = max_limit + + runner = None + + if options.dump_results_file: + with file("%s.%d.txt" % (options.dump_results_file, time.time()), + "w") as f: + f.write(json.dumps(test_results)) + + num_tests = 0 + for s in suites: + s.tests = [] + for t in test_backup[s]: + max_percent = test_results.get(t.path, 0) + if not max_percent or max_percent < 1.0: + continue + max_percent = int(max_percent) + + subtests_count = self._calculate_n_tests(max_percent, options) + + if options.verbose: + print ('%s [x%d] (max marking limit=%.02f)' % + (t.path, subtests_count, max_percent)) + for _ in xrange(0, subtests_count): + fuzzer_seed = self._next_fuzzer_seed() + fuzzing_flags = [ + '--stress_marking', str(max_percent), + '--fuzzer_random_seed', str(fuzzer_seed), + ] + if options.stress_compaction: + fuzzing_flags.append('--stress_compaction_random') + s.tests.append(t.create_variant(t.variant, fuzzing_flags)) + for t in s.tests: + t.cmd = t.get_command(ctx) + num_tests += len(s.tests) + + if num_tests == 0: + print "No tests to run." + return exit_code + + print(">>> Fuzzing phase (%d test cases)" % num_tests) + progress_indicator = progress.PROGRESS_INDICATORS[options.progress]() + runner = execution.Runner(suites, progress_indicator, ctx) + + return runner.Run(options.j) or exit_code + + def _load_tests(self, args, options, suites, ctx): + # Find available test suites and read test cases from them. + variables = { + "arch": self.build_config.arch, + "asan": self.build_config.asan, + "byteorder": sys.byteorder, + "dcheck_always_on": self.build_config.dcheck_always_on, + "deopt_fuzzer": False, + "gc_fuzzer": True, + "gc_stress": False, + "gcov_coverage": self.build_config.gcov_coverage, + "isolates": options.isolates, + "mode": self.mode_options.status_mode, + "msan": self.build_config.msan, + "no_harness": False, + "no_i18n": self.build_config.no_i18n, + "no_snap": self.build_config.no_snap, + "novfp3": False, + "predictable": self.build_config.predictable, + "simulator": utils.UseSimulator(self.build_config.arch), + "simulator_run": False, + "system": utils.GuessOS(), + "tsan": self.build_config.tsan, + "ubsan_vptr": self.build_config.ubsan_vptr, + } + + num_tests = 0 + test_id = 0 + for s in suites: + s.ReadStatusFile(variables) + s.ReadTestCases(ctx) + if len(args) > 0: + s.FilterTestCasesByArgs(args) + s.FilterTestCasesByStatus(False) + + num_tests += len(s.tests) + for t in s.tests: + t.id = test_id + test_id += 1 + + return num_tests + + # Parses test stdout and returns what was the highest reached percent of the + # incremental marking limit (0-100). + # Skips values >=100% since they already trigger incremental marking. + @staticmethod + def _get_max_limit_reached(output): + def is_im_line(l): + return 'IncrementalMarking' in l and '% of the memory limit reached' in l + + def line_to_percent(l): + return filter(lambda part: '%' in part, l.split(' '))[0] + + def percent_str_to_float(s): + return float(s[:-1]) + + if not (output and output.stdout): + return None + + im_lines = filter(is_im_line, output.stdout.splitlines()) + percents_str = map(line_to_percent, im_lines) + percents = map(percent_str_to_float, percents_str) + + # Skip >= 100%. + percents = filter(lambda p: p < 100, percents) + + if not percents: + return None + return max(percents) + + def _next_fuzzer_seed(self): + fuzzer_seed = None + while not fuzzer_seed: + fuzzer_seed = self.fuzzer_rng.randint(-2147483648, 2147483647) + return fuzzer_seed + + +if __name__ == '__main__': + sys.exit(GCFuzzer().execute()) diff --git a/deps/v8/tools/testrunner/local/command.py b/deps/v8/tools/testrunner/local/command.py new file mode 100644 index 00000000000..0602f5e640b --- /dev/null +++ b/deps/v8/tools/testrunner/local/command.py @@ -0,0 +1,181 @@ +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +from contextlib import contextmanager +import os +import subprocess +import sys +import threading +import time + +from ..local import utils +from ..objects import output + + +@contextmanager +def win_error_mode(): + """ Try to change the error mode to avoid dialogs on fatal errors. Don't + touch any existing error mode flags by merging the existing error mode. + See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. + """ + + def set_error_mode(mode): + prev_error_mode = SEM_INVALID_VALUE + try: + import ctypes + prev_error_mode = ( + ctypes.windll.kernel32.SetErrorMode(mode)) #@UndefinedVariable + except ImportError: + pass + return prev_error_mode + + SEM_INVALID_VALUE = -1 + SEM_NOGPFAULTERRORBOX = 0x0002 # Microsoft Platform SDK WinBase.h + + if utils.IsWindows(): + error_mode = SEM_NOGPFAULTERRORBOX + prev_error_mode = set_error_mode(error_mode) + set_error_mode(error_mode | prev_error_mode) + + yield + + if utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE: + set_error_mode(prev_error_mode) + + +class Command(object): + def __init__(self, shell, args=None, cmd_prefix=None, timeout=60, env=None, + verbose=False): + assert(timeout > 0) + + self.shell = shell + self.args = args or [] + self.cmd_prefix = cmd_prefix or [] + self.timeout = timeout + self.env = env or {} + self.verbose = verbose + + def execute(self, **additional_popen_kwargs): + if self.verbose: + print '# %s' % self + + with win_error_mode(): + try: + process = subprocess.Popen( + args=self._get_popen_args(), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=self._get_env(), + **additional_popen_kwargs + ) + except Exception as e: + sys.stderr.write('Error executing: %s\n' % self) + raise e + + # Variable to communicate with the timer. + timeout_occured = [False] + timer = threading.Timer( + self.timeout, self._kill_process, [process, timeout_occured]) + timer.start() + + start_time = time.time() + stdout, stderr = process.communicate() + duration = time.time() - start_time + + timer.cancel() + + return output.Output( + process.returncode, + timeout_occured[0], + stdout.decode('utf-8', 'replace').encode('utf-8'), + stderr.decode('utf-8', 'replace').encode('utf-8'), + process.pid, + duration + ) + + def _get_popen_args(self): + args = self._to_args_list() + if utils.IsWindows(): + return subprocess.list2cmdline(args) + return args + + def _get_env(self): + env = os.environ.copy() + env.update(self.env) + # GTest shard information is read by the V8 tests runner. Make sure it + # doesn't leak into the execution of gtests we're wrapping. Those might + # otherwise apply a second level of sharding and as a result skip tests. + env.pop('GTEST_TOTAL_SHARDS', None) + env.pop('GTEST_SHARD_INDEX', None) + return env + + def _kill_process(self, process, timeout_occured): + timeout_occured[0] = True + try: + if utils.IsWindows(): + self._kill_process_windows(process) + else: + self._kill_process_posix(process) + + except OSError: + sys.stderr.write('Error: Process %s already ended.\n' % process.pid) + + def _kill_process_windows(self, process): + if self.verbose: + print 'Attempting to kill process %d' % process.pid + sys.stdout.flush() + tk = subprocess.Popen( + 'taskkill /T /F /PID %d' % process.pid, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + stdout, stderr = tk.communicate() + if self.verbose: + print 'Taskkill results for %d' % process.pid + print stdout + print stderr + print 'Return code: %d' % tk.returncode + sys.stdout.flush() + + def _kill_process_posix(self, process): + if utils.GuessOS() == 'macos': + # TODO(machenbach): Temporary output for investigating hanging test + # driver on mac. + print 'Attempting to kill process %d - cmd %s' % (process.pid, self) + try: + print subprocess.check_output( + 'ps -e | egrep "d8|cctest|unittests"', shell=True) + except Exception: + pass + sys.stdout.flush() + + process.kill() + + if utils.GuessOS() == 'macos': + # TODO(machenbach): Temporary output for investigating hanging test + # driver on mac. This will probably not print much, since kill only + # sends the signal. + print 'Return code after signalling the kill: %s' % process.returncode + sys.stdout.flush() + + def __str__(self): + return self.to_string() + + def to_string(self, relative=False): + def escape(part): + # Escape spaces. We may need to escape more characters for this to work + # properly. + if ' ' in part: + return '"%s"' % part + return part + + parts = map(escape, self._to_args_list()) + cmd = ' '.join(parts) + if relative: + cmd = cmd.replace(os.getcwd() + os.sep, '') + return cmd + + def _to_args_list(self): + return self.cmd_prefix + [self.shell] + self.args diff --git a/deps/v8/tools/testrunner/local/commands.py b/deps/v8/tools/testrunner/local/commands.py deleted file mode 100644 index b2dc74e4d49..00000000000 --- a/deps/v8/tools/testrunner/local/commands.py +++ /dev/null @@ -1,132 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import os -import subprocess -import sys -from threading import Timer - -from ..local import utils -from ..objects import output - - -SEM_INVALID_VALUE = -1 -SEM_NOGPFAULTERRORBOX = 0x0002 # Microsoft Platform SDK WinBase.h - - -def Win32SetErrorMode(mode): - prev_error_mode = SEM_INVALID_VALUE - try: - import ctypes - prev_error_mode = \ - ctypes.windll.kernel32.SetErrorMode(mode) #@UndefinedVariable - except ImportError: - pass - return prev_error_mode - - -def RunProcess(verbose, timeout, args, additional_env, **rest): - if verbose: print "#", " ".join(args) - popen_args = args - prev_error_mode = SEM_INVALID_VALUE - if utils.IsWindows(): - popen_args = subprocess.list2cmdline(args) - # Try to change the error mode to avoid dialogs on fatal errors. Don't - # touch any existing error mode flags by merging the existing error mode. - # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. - error_mode = SEM_NOGPFAULTERRORBOX - prev_error_mode = Win32SetErrorMode(error_mode) - Win32SetErrorMode(error_mode | prev_error_mode) - - env = os.environ.copy() - env.update(additional_env) - # GTest shard information is read by the V8 tests runner. Make sure it - # doesn't leak into the execution of gtests we're wrapping. Those might - # otherwise apply a second level of sharding and as a result skip tests. - env.pop('GTEST_TOTAL_SHARDS', None) - env.pop('GTEST_SHARD_INDEX', None) - - try: - process = subprocess.Popen( - args=popen_args, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - env=env, - **rest - ) - except Exception as e: - sys.stderr.write("Error executing: %s\n" % popen_args) - raise e - - if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE): - Win32SetErrorMode(prev_error_mode) - - def kill_process(process, timeout_result): - timeout_result[0] = True - try: - if utils.IsWindows(): - if verbose: - print "Attempting to kill process %d" % process.pid - sys.stdout.flush() - tk = subprocess.Popen( - 'taskkill /T /F /PID %d' % process.pid, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - stdout, stderr = tk.communicate() - if verbose: - print "Taskkill results for %d" % process.pid - print stdout - print stderr - print "Return code: %d" % tk.returncode - sys.stdout.flush() - else: - process.kill() - except OSError: - sys.stderr.write('Error: Process %s already ended.\n' % process.pid) - - # Pseudo object to communicate with timer thread. - timeout_result = [False] - - timer = Timer(timeout, kill_process, [process, timeout_result]) - timer.start() - stdout, stderr = process.communicate() - timer.cancel() - - return output.Output( - process.returncode, - timeout_result[0], - stdout.decode('utf-8', 'replace').encode('utf-8'), - stderr.decode('utf-8', 'replace').encode('utf-8'), - process.pid, - ) - - -def Execute(args, verbose=False, timeout=None, env=None): - args = [ c for c in args if c != "" ] - return RunProcess(verbose, timeout, args, env or {}) diff --git a/deps/v8/tools/testrunner/local/execution.py b/deps/v8/tools/testrunner/local/execution.py index dc55129a147..13cdfa84b94 100644 --- a/deps/v8/tools/testrunner/local/execution.py +++ b/deps/v8/tools/testrunner/local/execution.py @@ -31,15 +31,12 @@ import re import shutil import sys -import time -from pool import Pool -from . import commands +from . import command from . import perfdata from . import statusfile -from . import testsuite from . import utils -from ..objects import output +from pool import Pool # Base dir of the v8 checkout. @@ -48,72 +45,22 @@ TEST_DIR = os.path.join(BASE_DIR, "test") -class Instructions(object): - def __init__(self, command, test_id, timeout, verbose, env): - self.command = command - self.id = test_id - self.timeout = timeout - self.verbose = verbose - self.env = env - - # Structure that keeps global information per worker process. ProcessContext = collections.namedtuple( - "process_context", ["suites", "context"]) + 'process_context', ['sancov_dir']) -def MakeProcessContext(context, suite_names): - """Generate a process-local context. +TestJobResult = collections.namedtuple( + 'TestJobResult', ['id', 'output']) - This reloads all suites per process and stores the global context. +def MakeProcessContext(sancov_dir): + return ProcessContext(sancov_dir) - Args: - context: The global context from the test runner. - suite_names (list of str): Suite names as loaded by the parent process. - Load the same suites in each subprocess. - """ - suites = {} - for root in suite_names: - # Don't reinitialize global state as this is concurrently called from - # different processes. - suite = testsuite.TestSuite.LoadTestSuite( - os.path.join(TEST_DIR, root), global_init=False) - if suite: - suites[suite.name] = suite - return ProcessContext(suites, context) - - -def GetCommand(test, context): - d8testflag = [] - shell = test.shell() - if shell == "d8": - d8testflag = ["--test"] - if utils.IsWindows(): - shell += ".exe" - if context.random_seed: - d8testflag += ["--random-seed=%s" % context.random_seed] - cmd = (context.command_prefix + - [os.path.abspath(os.path.join(context.shell_dir, shell))] + - d8testflag + - test.suite.GetFlagsForTestCase(test, context) + - context.extra_flags) - return cmd - - -def _GetInstructions(test, context): - command = GetCommand(test, context) - timeout = context.timeout - if ("--stress-opt" in test.flags or - "--stress-opt" in context.mode_flags or - "--stress-opt" in context.extra_flags): - timeout *= 4 - if "--noenable-vfp3" in context.extra_flags: - timeout *= 2 - # FIXME(machenbach): Make this more OO. Don't expose default outcomes or - # the like. - if statusfile.IsSlow(test.outcomes or [statusfile.PASS]): - timeout *= 2 - return Instructions(command, test.id, timeout, context.verbose, test.env) + +# Global function for multiprocessing, because pickling a static method doesn't +# work on Windows. +def run_job(job, process_context): + return job.run(process_context) class Job(object): @@ -122,31 +69,17 @@ class Job(object): All contained fields will be pickled/unpickled. """ - def Run(self, process_context): - """Executes the job. - - Args: - process_context: Process-local information that is initialized by the - executing worker. - """ + def run(self, process_context): raise NotImplementedError() -def SetupProblem(exception, test): - stderr = ">>> EXCEPTION: %s\n" % exception - match = re.match(r"^.*No such file or directory: '(.*)'$", str(exception)) - if match: - # Extra debuging information when files are claimed missing. - f = match.group(1) - stderr += ">>> File %s exists? -> %s\n" % (f, os.path.exists(f)) - return test.id, output.Output(1, False, "", stderr, None), 0 - - class TestJob(Job): - def __init__(self, test): - self.test = test + def __init__(self, test_id, cmd, run_num): + self.test_id = test_id + self.cmd = cmd + self.run_num = run_num - def _rename_coverage_data(self, output, context): + def _rename_coverage_data(self, out, sancov_dir): """Rename coverage data. Rename files with PIDs to files with unique test IDs, because the number @@ -155,39 +88,26 @@ def _rename_coverage_data(self, output, context): 42 is the test ID and 1 is the attempt (the same test might be rerun on failures). """ - if context.sancov_dir and output.pid is not None: - sancov_file = os.path.join( - context.sancov_dir, "%s.%d.sancov" % (self.test.shell(), output.pid)) + if sancov_dir and out.pid is not None: + # Doesn't work on windows so basename is sufficient to get the shell name. + shell = os.path.basename(self.cmd.shell) + sancov_file = os.path.join(sancov_dir, "%s.%d.sancov" % (shell, out.pid)) # Some tests are expected to fail and don't produce coverage data. if os.path.exists(sancov_file): parts = sancov_file.split(".") new_sancov_file = ".".join( parts[:-2] + - ["test", str(self.test.id), str(self.test.run)] + + ["test", str(self.test_id), str(self.run_num)] + parts[-1:] ) assert not os.path.exists(new_sancov_file) os.rename(sancov_file, new_sancov_file) - def Run(self, process_context): - try: - # Retrieve a new suite object on the worker-process side. The original - # suite object isn't pickled. - self.test.SetSuiteObject(process_context.suites) - instr = _GetInstructions(self.test, process_context.context) - except Exception, e: - return SetupProblem(e, self.test) - - start_time = time.time() - output = commands.Execute(instr.command, instr.verbose, instr.timeout, - instr.env) - self._rename_coverage_data(output, process_context.context) - return (instr.id, output, time.time() - start_time) - - -def RunTest(job, process_context): - return job.Run(process_context) + def run(self, context): + out = self.cmd.execute() + self._rename_coverage_data(out, context.sancov_dir) + return TestJobResult(self.test_id, out) class Runner(object): @@ -200,17 +120,22 @@ def __init__(self, suites, progress_indicator, context): self.perf_failures = False self.printed_allocations = False self.tests = [t for s in suites for t in s.tests] + + # TODO(majeski): Pass dynamically instead of keeping them in the runner. + # Maybe some observer? + self.outputs = {t: None for t in self.tests} + self.suite_names = [s.name for s in suites] # Always pre-sort by status file, slowest tests first. - slow_key = lambda t: statusfile.IsSlow(t.outcomes) + slow_key = lambda t: statusfile.IsSlow( + t.suite.GetStatusFileOutcomes(t.name, t.variant)) self.tests.sort(key=slow_key, reverse=True) - # Sort by stored duration of not opted out. + # Sort by stored duration if not opted out. if not context.no_sorting: - for t in self.tests: - t.duration = self.perfdata.FetchPerfData(t) or 1.0 - self.tests.sort(key=lambda t: t.duration, reverse=True) + self.tests.sort(key=lambda t: self.perfdata.FetchPerfData(t) or 1.0, + reverse=True) self._CommonInit(suites, progress_indicator, context) @@ -236,7 +161,7 @@ def _RunPerfSafe(self, fun): print("PerfData exception: %s" % e) self.perf_failures = True - def _MaybeRerun(self, pool, test): + def _MaybeRerun(self, pool, test, job_result): if test.run <= self.context.rerun_failures_count: # Possibly rerun this test if its run count is below the maximum per # test. <= as the flag controls reruns not including the first run. @@ -248,25 +173,24 @@ def _MaybeRerun(self, pool, test): # Don't rerun this if the overall number of rerun tests has been # reached. return - if test.run >= 2 and test.duration > self.context.timeout / 20.0: + if (test.run >= 2 and + job_result.output.duration > self.context.timeout / 20.0): # Rerun slow tests at most once. return # Rerun this test. - test.duration = None - test.output = None test.run += 1 - pool.add([TestJob(test)]) + pool.add([TestJob(test.id, test.cmd, test.run)]) self.remaining += 1 self.total += 1 - def _ProcessTestNormal(self, test, result, pool): - test.output = result[1] - test.duration = result[2] - has_unexpected_output = test.suite.HasUnexpectedOutput(test) + def _ProcessTest(self, test, job_result, pool): + self.outputs[test] = job_result.output + has_unexpected_output = test.suite.HasUnexpectedOutput( + test, job_result.output, self.context) if has_unexpected_output: self.failed.append(test) - if test.output.HasCrashed(): + if job_result.output.HasCrashed(): self.crashed += 1 else: self.succeeded += 1 @@ -274,57 +198,15 @@ def _ProcessTestNormal(self, test, result, pool): # For the indicator, everything that happens after the first run is treated # as unexpected even if it flakily passes in order to include it in the # output. - self.indicator.HasRun(test, has_unexpected_output or test.run > 1) + self.indicator.HasRun(test, job_result.output, + has_unexpected_output or test.run > 1) if has_unexpected_output: # Rerun test failures after the indicator has processed the results. self._VerbosePrint("Attempting to rerun test after failure.") - self._MaybeRerun(pool, test) + self._MaybeRerun(pool, test, job_result) # Update the perf database if the test succeeded. return not has_unexpected_output - def _ProcessTestPredictable(self, test, result, pool): - def HasDifferentAllocations(output1, output2): - def AllocationStr(stdout): - for line in reversed((stdout or "").splitlines()): - if line.startswith("### Allocations = "): - self.printed_allocations = True - return line - return "" - return (AllocationStr(output1.stdout) != AllocationStr(output2.stdout)) - - # Always pass the test duration for the database update. - test.duration = result[2] - if test.run == 1 and result[1].HasTimedOut(): - # If we get a timeout in the first run, we are already in an - # unpredictable state. Just report it as a failure and don't rerun. - test.output = result[1] - self.remaining -= 1 - self.failed.append(test) - self.indicator.HasRun(test, True) - if test.run > 1 and HasDifferentAllocations(test.output, result[1]): - # From the second run on, check for different allocations. If a - # difference is found, call the indicator twice to report both tests. - # All runs of each test are counted as one for the statistic. - self.remaining -= 1 - self.failed.append(test) - self.indicator.HasRun(test, True) - test.output = result[1] - self.indicator.HasRun(test, True) - elif test.run >= 3: - # No difference on the third run -> report a success. - self.remaining -= 1 - self.succeeded += 1 - test.output = result[1] - self.indicator.HasRun(test, False) - else: - # No difference yet and less than three runs -> add another run and - # remember the output for comparison. - test.run += 1 - test.output = result[1] - pool.add([TestJob(test)]) - # Always update the perf database. - return True - def Run(self, jobs): self.indicator.Starting() self._RunInternal(jobs) @@ -344,7 +226,7 @@ def gen_tests(): assert test.id >= 0 test_map[test.id] = test try: - yield [TestJob(test)] + yield [TestJob(test.id, test.cmd, test.run)] except Exception, e: # If this failed, save the exception and re-raise it later (after # all other tests have had a chance to run). @@ -352,27 +234,28 @@ def gen_tests(): continue try: it = pool.imap_unordered( - fn=RunTest, + fn=run_job, gen=gen_tests(), process_context_fn=MakeProcessContext, - process_context_args=[self.context, self.suite_names], + process_context_args=[self.context.sancov_dir], ) for result in it: if result.heartbeat: self.indicator.Heartbeat() continue - test = test_map[result.value[0]] - if self.context.predictable: - update_perf = self._ProcessTestPredictable(test, result.value, pool) - else: - update_perf = self._ProcessTestNormal(test, result.value, pool) + + job_result = result.value + + test = test_map[job_result.id] + update_perf = self._ProcessTest(test, job_result, pool) if update_perf: - self._RunPerfSafe(lambda: self.perfdata.UpdatePerfData(test)) + self._RunPerfSafe(lambda: self.perfdata.UpdatePerfData( + test, job_result.output.duration)) finally: self._VerbosePrint("Closing process pool.") pool.terminate() self._VerbosePrint("Closing database connection.") - self._RunPerfSafe(lambda: self.perf_data_manager.close()) + self._RunPerfSafe(self.perf_data_manager.close) if self.perf_failures: # Nuke perf data in case of failures. This might not work on windows as # some files might still be open. @@ -381,14 +264,6 @@ def gen_tests(): if queued_exception[0]: raise queued_exception[0] - # Make sure that any allocations were printed in predictable mode (if we - # ran any tests). - assert ( - not self.total or - not self.context.predictable or - self.printed_allocations - ) - def _VerbosePrint(self, text): if self.context.verbose: print text @@ -397,6 +272,8 @@ def _VerbosePrint(self, text): class BreakNowException(Exception): def __init__(self, value): + super(BreakNowException, self).__init__() self.value = value + def __str__(self): return repr(self.value) diff --git a/deps/v8/tools/testrunner/local/junit_output.py b/deps/v8/tools/testrunner/local/junit_output.py index d2748febd98..52f31ec422a 100644 --- a/deps/v8/tools/testrunner/local/junit_output.py +++ b/deps/v8/tools/testrunner/local/junit_output.py @@ -34,9 +34,10 @@ def __init__(self, test_suite_name): self.root = xml.Element("testsuite") self.root.attrib["name"] = test_suite_name - def HasRunTest(self, test_name, test_duration, test_failure): + def HasRunTest(self, test_name, test_cmd, test_duration, test_failure): testCaseElement = xml.Element("testcase") - testCaseElement.attrib["name"] = " ".join(test_name) + testCaseElement.attrib["name"] = test_name + testCaseElement.attrib["cmd"] = test_cmd testCaseElement.attrib["time"] = str(round(test_duration, 3)) if len(test_failure): failureElement = xml.Element("failure") @@ -44,5 +45,5 @@ def HasRunTest(self, test_name, test_duration, test_failure): testCaseElement.append(failureElement) self.root.append(testCaseElement) - def FinishAndWrite(self, file): - xml.ElementTree(self.root).write(file, "UTF-8") + def FinishAndWrite(self, f): + xml.ElementTree(self.root).write(f, "UTF-8") diff --git a/deps/v8/tools/testrunner/local/perfdata.py b/deps/v8/tools/testrunner/local/perfdata.py index 29ebff773a5..4cb618b0bec 100644 --- a/deps/v8/tools/testrunner/local/perfdata.py +++ b/deps/v8/tools/testrunner/local/perfdata.py @@ -62,22 +62,17 @@ def close(self): self.database.close() self.closed = True - def GetKey(self, test): - """Computes the key used to access data for the given testcase.""" - flags = "".join(test.flags) - return str("%s.%s.%s" % (test.suitename(), test.path, flags)) - def FetchPerfData(self, test): """Returns the observed duration for |test| as read from the store.""" - key = self.GetKey(test) + key = test.get_id() if key in self.database: return self.database[key].avg return None - def UpdatePerfData(self, test): - """Updates the persisted value in the store with test.duration.""" - testkey = self.GetKey(test) - self.RawUpdatePerfData(testkey, test.duration) + def UpdatePerfData(self, test, duration): + """Updates the persisted value in the store with duration.""" + testkey = test.get_id() + self.RawUpdatePerfData(testkey, duration) def RawUpdatePerfData(self, testkey, duration): with self.lock: @@ -121,7 +116,7 @@ def GetStore(self, arch, mode): class NullPerfDataStore(object): - def UpdatePerfData(self, test): + def UpdatePerfData(self, test, duration): pass def FetchPerfData(self, test): diff --git a/deps/v8/tools/testrunner/local/pool.py b/deps/v8/tools/testrunner/local/pool.py index 99996ee3ce4..18e921f6539 100644 --- a/deps/v8/tools/testrunner/local/pool.py +++ b/deps/v8/tools/testrunner/local/pool.py @@ -120,8 +120,8 @@ def imap_unordered(self, fn, gen, self.done, process_context_fn, process_context_args)) - self.processes.append(p) p.start() + self.processes.append(p) self.advance(gen) while self.count > 0: @@ -145,6 +145,11 @@ def imap_unordered(self, fn, gen, else: yield MaybeResult.create_result(result.result) self.advance(gen) + except KeyboardInterrupt: + raise + except Exception as e: + traceback.print_exc() + print(">>> EXCEPTION: %s" % e) finally: self.terminate() if internal_error: diff --git a/deps/v8/tools/testrunner/local/progress.py b/deps/v8/tools/testrunner/local/progress.py index 6321cadece8..01119ffdebe 100644 --- a/deps/v8/tools/testrunner/local/progress.py +++ b/deps/v8/tools/testrunner/local/progress.py @@ -32,14 +32,10 @@ import sys import time -from . import execution from . import junit_output from . import statusfile -ABS_PATH_PREFIX = os.getcwd() + os.sep - - class ProgressIndicator(object): def __init__(self): @@ -54,7 +50,7 @@ def Starting(self): def Done(self): pass - def HasRun(self, test, has_unexpected_output): + def HasRun(self, test, output, has_unexpected_output): pass def Heartbeat(self): @@ -66,22 +62,10 @@ def PrintFailureHeader(self, test): else: negative_marker = '' print "=== %(label)s %(negative)s===" % { - 'label': test.GetLabel(), - 'negative': negative_marker + 'label': test, + 'negative': negative_marker, } - def _EscapeCommand(self, test): - command = execution.GetCommand(test, self.runner.context) - parts = [] - for part in command: - if ' ' in part: - # Escape spaces. We may need to escape more characters for this - # to work properly. - parts.append('"%s"' % part) - else: - parts.append(part) - return " ".join(parts) - class IndicatorNotifier(object): """Holds a list of progress indicators and notifies them all on events.""" @@ -116,18 +100,19 @@ def Starting(self): def Done(self): print for failed in self.runner.failed: + output = self.runner.outputs[failed] self.PrintFailureHeader(failed) - if failed.output.stderr: + if output.stderr: print "--- stderr ---" - print failed.output.stderr.strip() - if failed.output.stdout: + print output.stderr.strip() + if output.stdout: print "--- stdout ---" - print failed.output.stdout.strip() - print "Command: %s" % self._EscapeCommand(failed) - if failed.output.HasCrashed(): - print "exit code: %d" % failed.output.exit_code + print output.stdout.strip() + print "Command: %s" % failed.cmd.to_string() + if output.HasCrashed(): + print "exit code: %d" % output.exit_code print "--- CRASHED ---" - if failed.output.HasTimedOut(): + if output.HasTimedOut(): print "--- TIMEOUT ---" if len(self.runner.failed) == 0: print "===" @@ -144,15 +129,15 @@ def Done(self): class VerboseProgressIndicator(SimpleProgressIndicator): - def HasRun(self, test, has_unexpected_output): + def HasRun(self, test, output, has_unexpected_output): if has_unexpected_output: - if test.output.HasCrashed(): + if output.HasCrashed(): outcome = 'CRASH' else: outcome = 'FAIL' else: outcome = 'pass' - print 'Done running %s: %s' % (test.GetLabel(), outcome) + print 'Done running %s: %s' % (test, outcome) sys.stdout.flush() def Heartbeat(self): @@ -162,15 +147,15 @@ def Heartbeat(self): class DotsProgressIndicator(SimpleProgressIndicator): - def HasRun(self, test, has_unexpected_output): + def HasRun(self, test, output, has_unexpected_output): total = self.runner.succeeded + len(self.runner.failed) if (total > 1) and (total % 50 == 1): sys.stdout.write('\n') if has_unexpected_output: - if test.output.HasCrashed(): + if output.HasCrashed(): sys.stdout.write('C') sys.stdout.flush() - elif test.output.HasTimedOut(): + elif output.HasTimedOut(): sys.stdout.write('T') sys.stdout.flush() else: @@ -194,22 +179,22 @@ def Done(self): self.PrintProgress('Done') print "" # Line break. - def HasRun(self, test, has_unexpected_output): - self.PrintProgress(test.GetLabel()) + def HasRun(self, test, output, has_unexpected_output): + self.PrintProgress(str(test)) if has_unexpected_output: self.ClearLine(self.last_status_length) self.PrintFailureHeader(test) - stdout = test.output.stdout.strip() + stdout = output.stdout.strip() if len(stdout): print self.templates['stdout'] % stdout - stderr = test.output.stderr.strip() + stderr = output.stderr.strip() if len(stderr): print self.templates['stderr'] % stderr - print "Command: %s" % self._EscapeCommand(test) - if test.output.HasCrashed(): - print "exit code: %d" % test.output.exit_code + print "Command: %s" % test.cmd.to_string() + if output.HasCrashed(): + print "exit code: %d" % output.exit_code print "--- CRASHED ---" - if test.output.HasTimedOut(): + if output.HasTimedOut(): print "--- TIMEOUT ---" def Truncate(self, string, length): @@ -273,6 +258,7 @@ def ClearLine(self, last_line_length): class JUnitTestProgressIndicator(ProgressIndicator): def __init__(self, junitout, junittestsuite): + super(JUnitTestProgressIndicator, self).__init__() self.outputter = junit_output.JUnitTestOutput(junittestsuite) if junitout: self.outfile = open(junitout, "w") @@ -284,29 +270,31 @@ def Done(self): if self.outfile != sys.stdout: self.outfile.close() - def HasRun(self, test, has_unexpected_output): + def HasRun(self, test, output, has_unexpected_output): fail_text = "" if has_unexpected_output: - stdout = test.output.stdout.strip() + stdout = output.stdout.strip() if len(stdout): fail_text += "stdout:\n%s\n" % stdout - stderr = test.output.stderr.strip() + stderr = output.stderr.strip() if len(stderr): fail_text += "stderr:\n%s\n" % stderr - fail_text += "Command: %s" % self._EscapeCommand(test) - if test.output.HasCrashed(): - fail_text += "exit code: %d\n--- CRASHED ---" % test.output.exit_code - if test.output.HasTimedOut(): + fail_text += "Command: %s" % self.test.cmd.to_string() + if output.HasCrashed(): + fail_text += "exit code: %d\n--- CRASHED ---" % output.exit_code + if output.HasTimedOut(): fail_text += "--- TIMEOUT ---" self.outputter.HasRunTest( - [test.GetLabel()] + self.runner.context.mode_flags + test.flags, - test.duration, - fail_text) + test_name=str(test), + test_cmd=test.cmd.to_string(relative=True), + test_duration=output.duration, + test_failure=fail_text) class JsonTestProgressIndicator(ProgressIndicator): def __init__(self, json_test_results, arch, mode, random_seed): + super(JsonTestProgressIndicator, self).__init__() self.json_test_results = json_test_results self.arch = arch self.mode = mode @@ -325,19 +313,20 @@ def Done(self): if self.tests: # Get duration mean. duration_mean = ( - sum(t.duration for t in self.tests) / float(len(self.tests))) + sum(duration for (_, duration) in self.tests) / + float(len(self.tests))) # Sort tests by duration. - timed_tests = [t for t in self.tests if t.duration is not None] - timed_tests.sort(lambda a, b: cmp(b.duration, a.duration)) + self.tests.sort(key=lambda (_, duration): duration, reverse=True) slowest_tests = [ { - "name": test.GetLabel(), - "flags": test.flags, - "command": self._EscapeCommand(test).replace(ABS_PATH_PREFIX, ""), - "duration": test.duration, - "marked_slow": statusfile.IsSlow(test.outcomes), - } for test in timed_tests[:20] + "name": str(test), + "flags": test.cmd.args, + "command": test.cmd.to_string(relative=True), + "duration": duration, + "marked_slow": statusfile.IsSlow( + test.suite.GetStatusFileOutcomes(test.name, test.variant)), + } for (test, duration) in self.tests[:20] ] complete_results.append({ @@ -352,30 +341,30 @@ def Done(self): with open(self.json_test_results, "w") as f: f.write(json.dumps(complete_results)) - def HasRun(self, test, has_unexpected_output): + def HasRun(self, test, output, has_unexpected_output): # Buffer all tests for sorting the durations in the end. - self.tests.append(test) + self.tests.append((test, output.duration)) if not has_unexpected_output: # Omit tests that run as expected. Passing tests of reruns after failures # will have unexpected_output to be reported here has well. return self.results.append({ - "name": test.GetLabel(), - "flags": test.flags, - "command": self._EscapeCommand(test).replace(ABS_PATH_PREFIX, ""), + "name": str(test), + "flags": test.cmd.args, + "command": test.cmd.to_string(relative=True), "run": test.run, - "stdout": test.output.stdout, - "stderr": test.output.stderr, - "exit_code": test.output.exit_code, - "result": test.suite.GetOutcome(test), - "expected": list(test.outcomes or ["PASS"]), - "duration": test.duration, + "stdout": output.stdout, + "stderr": output.stderr, + "exit_code": output.exit_code, + "result": test.suite.GetOutcome(test, output), + "expected": test.suite.GetExpectedOutcomes(test), + "duration": output.duration, # TODO(machenbach): This stores only the global random seed from the # context and not possible overrides when using random-seed stress. "random_seed": self.random_seed, - "target_name": test.suite.shell(), + "target_name": test.cmd.shell, "variant": test.variant, }) @@ -383,6 +372,7 @@ def HasRun(self, test, has_unexpected_output): class FlakinessTestProgressIndicator(ProgressIndicator): def __init__(self, json_test_results): + super(FlakinessTestProgressIndicator, self).__init__() self.json_test_results = json_test_results self.results = {} self.summary = { @@ -404,32 +394,24 @@ def Done(self): "version": 3, }, f) - def HasRun(self, test, has_unexpected_output): - key = "/".join( - sorted(flag.lstrip("-") - for flag in self.runner.context.extra_flags + test.flags) + - ["test", test.GetLabel()], - ) - outcome = test.suite.GetOutcome(test) + def HasRun(self, test, output, has_unexpected_output): + key = test.get_id() + outcome = test.suite.GetOutcome(test, output) assert outcome in ["PASS", "FAIL", "CRASH", "TIMEOUT"] if test.run == 1: # First run of this test. - expected_outcomes = ([ - expected - for expected in (test.outcomes or ["PASS"]) - if expected in ["PASS", "FAIL", "CRASH", "TIMEOUT"] - ] or ["PASS"]) + expected_outcomes = test.suite.GetExpectedOutcomes(test) self.results[key] = { "actual": outcome, "expected": " ".join(expected_outcomes), - "times": [test.duration], + "times": [output.duration], } self.summary[outcome] = self.summary[outcome] + 1 else: # This is a rerun and a previous result exists. result = self.results[key] result["actual"] = "%s %s" % (result["actual"], outcome) - result["times"].append(test.duration) + result["times"].append(output.duration) PROGRESS_INDICATORS = { diff --git a/deps/v8/tools/testrunner/local/statusfile.py b/deps/v8/tools/testrunner/local/statusfile.py index 880837b8a72..7caf0711cac 100644 --- a/deps/v8/tools/testrunner/local/statusfile.py +++ b/deps/v8/tools/testrunner/local/statusfile.py @@ -31,31 +31,29 @@ from variants import ALL_VARIANTS from utils import Freeze -# These outcomes can occur in a TestCase's outcomes list: -SKIP = "SKIP" +# Possible outcomes FAIL = "FAIL" PASS = "PASS" -OKAY = "OKAY" -TIMEOUT = "TIMEOUT" -CRASH = "CRASH" +TIMEOUT = "TIMEOUT" # TODO(majeski): unused in status files +CRASH = "CRASH" # TODO(majeski): unused in status files + +# Outcomes only for status file, need special handling +FAIL_OK = "FAIL_OK" +FAIL_SLOPPY = "FAIL_SLOPPY" + +# Modifiers +SKIP = "SKIP" SLOW = "SLOW" FAST_VARIANTS = "FAST_VARIANTS" NO_VARIANTS = "NO_VARIANTS" -# These are just for the status files and are mapped below in DEFS: -FAIL_OK = "FAIL_OK" -PASS_OR_FAIL = "PASS_OR_FAIL" -FAIL_SLOPPY = "FAIL_SLOPPY" ALWAYS = "ALWAYS" KEYWORDS = {} -for key in [SKIP, FAIL, PASS, OKAY, CRASH, SLOW, FAIL_OK, - FAST_VARIANTS, NO_VARIANTS, PASS_OR_FAIL, FAIL_SLOPPY, ALWAYS]: +for key in [SKIP, FAIL, PASS, CRASH, SLOW, FAIL_OK, FAST_VARIANTS, NO_VARIANTS, + FAIL_SLOPPY, ALWAYS]: KEYWORDS[key] = key -DEFS = {FAIL_OK: [FAIL, OKAY], - PASS_OR_FAIL: [PASS, FAIL]} - # Support arches, modes to be written as keywords instead of strings. VARIABLES = {ALWAYS: True} for var in ["debug", "release", "big", "little", @@ -87,25 +85,13 @@ def OnlyFastVariants(outcomes): def IsPassOrFail(outcomes): - return ((PASS in outcomes) and (FAIL in outcomes) and - (not CRASH in outcomes) and (not OKAY in outcomes)) + return (PASS in outcomes and + FAIL in outcomes and + CRASH not in outcomes) def IsFailOk(outcomes): - return (FAIL in outcomes) and (OKAY in outcomes) - - -def _AddOutcome(result, new): - global DEFS - if new in DEFS: - mapped = DEFS[new] - if type(mapped) == list: - for m in mapped: - _AddOutcome(result, m) - elif type(mapped) == str: - _AddOutcome(result, mapped) - else: - result.add(new) + return FAIL_OK in outcomes def _JoinsPassAndFail(outcomes1, outcomes2): @@ -114,13 +100,17 @@ def _JoinsPassAndFail(outcomes1, outcomes2): """ return ( PASS in outcomes1 and - not FAIL in outcomes1 and - FAIL in outcomes2 + not (FAIL in outcomes1 or FAIL_OK in outcomes1) and + (FAIL in outcomes2 or FAIL_OK in outcomes2) ) VARIANT_EXPRESSION = object() def _EvalExpression(exp, variables): + """Evaluates expression and returns its result. In case of NameError caused by + undefined "variant" identifier returns VARIANT_EXPRESSION marker. + """ + try: return eval(exp, variables) except NameError as e: @@ -129,32 +119,35 @@ def _EvalExpression(exp, variables): return VARIANT_EXPRESSION -def _EvalVariantExpression(section, rules, wildcards, variant, variables): - variables_with_variant = {} - variables_with_variant.update(variables) +def _EvalVariantExpression( + condition, section, variables, variant, rules, prefix_rules): + variables_with_variant = dict(variables) variables_with_variant["variant"] = variant - result = _EvalExpression(section[0], variables_with_variant) + result = _EvalExpression(condition, variables_with_variant) assert result != VARIANT_EXPRESSION if result is True: _ReadSection( - section[1], - rules[variant], - wildcards[variant], + section, variables_with_variant, + rules[variant], + prefix_rules[variant], ) else: assert result is False, "Make sure expressions evaluate to boolean values" -def _ParseOutcomeList(rule, outcomes, target_dict, variables): +def _ParseOutcomeList(rule, outcomes, variables, target_dict): + """Outcome list format: [condition, outcome, outcome, ...]""" + result = set([]) if type(outcomes) == str: outcomes = [outcomes] for item in outcomes: if type(item) == str: - _AddOutcome(result, item) + result.add(item) elif type(item) == list: - exp = _EvalExpression(item[0], variables) + condition = item[0] + exp = _EvalExpression(condition, variables) assert exp != VARIANT_EXPRESSION, ( "Nested variant expressions are not supported") if exp is False: @@ -166,10 +159,11 @@ def _ParseOutcomeList(rule, outcomes, target_dict, variables): for outcome in item[1:]: assert type(outcome) == str - _AddOutcome(result, outcome) + result.add(outcome) else: assert False - if len(result) == 0: return + if len(result) == 0: + return if rule in target_dict: # A FAIL without PASS in one rule has always precedence over a single # PASS (without FAIL) in another. Otherwise the default PASS expectation @@ -186,51 +180,69 @@ def _ParseOutcomeList(rule, outcomes, target_dict, variables): def ReadContent(content): - global KEYWORDS return eval(content, KEYWORDS) def ReadStatusFile(content, variables): - # Empty defaults for rules and wildcards. Variant-independent + """Status file format + Status file := [section] + section = [CONDITION, section_rules] + section_rules := {path: outcomes} + outcomes := outcome | [outcome, ...] + outcome := SINGLE_OUTCOME | [CONDITION, SINGLE_OUTCOME, SINGLE_OUTCOME, ...] + """ + + # Empty defaults for rules and prefix_rules. Variant-independent # rules are mapped by "", others by the variant name. rules = {variant: {} for variant in ALL_VARIANTS} rules[""] = {} - wildcards = {variant: {} for variant in ALL_VARIANTS} - wildcards[""] = {} + prefix_rules = {variant: {} for variant in ALL_VARIANTS} + prefix_rules[""] = {} variables.update(VARIABLES) - for section in ReadContent(content): - assert type(section) == list - assert len(section) == 2 - exp = _EvalExpression(section[0], variables) + for conditional_section in ReadContent(content): + assert type(conditional_section) == list + assert len(conditional_section) == 2 + condition, section = conditional_section + exp = _EvalExpression(condition, variables) + + # The expression is variant-independent and evaluates to False. if exp is False: - # The expression is variant-independent and evaluates to False. continue - elif exp == VARIANT_EXPRESSION: - # If the expression contains one or more "variant" keywords, we evaluate - # it for all possible variants and create rules for those that apply. - for variant in ALL_VARIANTS: - _EvalVariantExpression(section, rules, wildcards, variant, variables) - else: - # The expression is variant-independent and evaluates to True. - assert exp is True, "Make sure expressions evaluate to boolean values" + + # The expression is variant-independent and evaluates to True. + if exp is True: _ReadSection( - section[1], - rules[""], - wildcards[""], + section, variables, + rules[''], + prefix_rules[''], ) - return Freeze(rules), Freeze(wildcards) + continue + # The expression is variant-dependent (contains "variant" keyword) + if exp == VARIANT_EXPRESSION: + # If the expression contains one or more "variant" keywords, we evaluate + # it for all possible variants and create rules for those that apply. + for variant in ALL_VARIANTS: + _EvalVariantExpression( + condition, section, variables, variant, rules, prefix_rules) + continue -def _ReadSection(section, rules, wildcards, variables): + assert False, "Make sure expressions evaluate to boolean values" + + return Freeze(rules), Freeze(prefix_rules) + + +def _ReadSection(section, variables, rules, prefix_rules): assert type(section) == dict - for rule in section: + for rule, outcome_list in section.iteritems(): assert type(rule) == str + if rule[-1] == '*': - _ParseOutcomeList(rule, section[rule], wildcards, variables) + _ParseOutcomeList(rule[:-1], outcome_list, variables, prefix_rules) else: - _ParseOutcomeList(rule, section[rule], rules, variables) + _ParseOutcomeList(rule, outcome_list, variables, rules) JS_TEST_PATHS = { 'debugger': [[]], @@ -266,6 +278,8 @@ def _assert(check, message): # Like "assert", but doesn't throw. "Suite name prefix must not be used in rule keys") _assert(not rule.endswith('.js'), ".js extension must not be used in rule keys.") + _assert('*' not in rule or (rule.count('*') == 1 and rule[-1] == '*'), + "Only the last character of a rule key can be a wildcard") if basename in JS_TEST_PATHS and '*' not in rule: _assert(any(os.path.exists(os.path.join(os.path.dirname(path), *(paths + [rule + ".js"]))) diff --git a/deps/v8/tools/testrunner/local/statusfile_unittest.py b/deps/v8/tools/testrunner/local/statusfile_unittest.py index f64ab3425ef..299e332c1c8 100755 --- a/deps/v8/tools/testrunner/local/statusfile_unittest.py +++ b/deps/v8/tools/testrunner/local/statusfile_unittest.py @@ -87,7 +87,7 @@ def test_eval_expression(self): ) def test_read_statusfile_section_true(self): - rules, wildcards = statusfile.ReadStatusFile( + rules, prefix_rules = statusfile.ReadStatusFile( TEST_STATUS_FILE % 'system==linux', make_variables()) self.assertEquals( @@ -99,15 +99,15 @@ def test_read_statusfile_section_true(self): ) self.assertEquals( { - 'foo/*': set(['SLOW', 'FAIL']), + 'foo/': set(['SLOW', 'FAIL']), }, - wildcards[''], + prefix_rules[''], ) self.assertEquals({}, rules['default']) - self.assertEquals({}, wildcards['default']) + self.assertEquals({}, prefix_rules['default']) def test_read_statusfile_section_false(self): - rules, wildcards = statusfile.ReadStatusFile( + rules, prefix_rules = statusfile.ReadStatusFile( TEST_STATUS_FILE % 'system==windows', make_variables()) self.assertEquals( @@ -119,15 +119,15 @@ def test_read_statusfile_section_false(self): ) self.assertEquals( { - 'foo/*': set(['PASS', 'SLOW']), + 'foo/': set(['PASS', 'SLOW']), }, - wildcards[''], + prefix_rules[''], ) self.assertEquals({}, rules['default']) - self.assertEquals({}, wildcards['default']) + self.assertEquals({}, prefix_rules['default']) def test_read_statusfile_section_variant(self): - rules, wildcards = statusfile.ReadStatusFile( + rules, prefix_rules = statusfile.ReadStatusFile( TEST_STATUS_FILE % 'system==linux and variant==default', make_variables(), ) @@ -141,9 +141,9 @@ def test_read_statusfile_section_variant(self): ) self.assertEquals( { - 'foo/*': set(['PASS', 'SLOW']), + 'foo/': set(['PASS', 'SLOW']), }, - wildcards[''], + prefix_rules[''], ) self.assertEquals( { @@ -153,9 +153,9 @@ def test_read_statusfile_section_variant(self): ) self.assertEquals( { - 'foo/*': set(['FAIL']), + 'foo/': set(['FAIL']), }, - wildcards['default'], + prefix_rules['default'], ) diff --git a/deps/v8/tools/testrunner/local/testsuite.py b/deps/v8/tools/testrunner/local/testsuite.py index 3b8f956a7ff..c6357b31377 100644 --- a/deps/v8/tools/testrunner/local/testsuite.py +++ b/deps/v8/tools/testrunner/local/testsuite.py @@ -30,10 +30,10 @@ import imp import os -from . import commands +from . import command from . import statusfile from . import utils -from ..objects import testcase +from ..objects.testcase import TestCase from variants import ALL_VARIANTS, ALL_VARIANT_FLAGS, FAST_VARIANT_FLAGS @@ -48,35 +48,33 @@ def __init__(self, suite, variants): self.fast_variants = FAST_VARIANTS & variants self.standard_variant = STANDARD_VARIANT & variants - def FilterVariantsByTest(self, testcase): + def FilterVariantsByTest(self, test): result = self.all_variants - if testcase.outcomes: - if statusfile.OnlyStandardVariant(testcase.outcomes): + outcomes = test.suite.GetStatusFileOutcomes(test.name, test.variant) + if outcomes: + if statusfile.OnlyStandardVariant(outcomes): return self.standard_variant - if statusfile.OnlyFastVariants(testcase.outcomes): + if statusfile.OnlyFastVariants(outcomes): result = self.fast_variants return result - def GetFlagSets(self, testcase, variant): - if testcase.outcomes and statusfile.OnlyFastVariants(testcase.outcomes): + def GetFlagSets(self, test, variant): + outcomes = test.suite.GetStatusFileOutcomes(test.name, test.variant) + if outcomes and statusfile.OnlyFastVariants(outcomes): return FAST_VARIANT_FLAGS[variant] else: return ALL_VARIANT_FLAGS[variant] class TestSuite(object): - @staticmethod - def LoadTestSuite(root, global_init=True): + def LoadTestSuite(root): name = root.split(os.path.sep)[-1] f = None try: (f, pathname, description) = imp.find_module("testcfg", [root]) module = imp.load_module(name + "_testcfg", f, pathname, description) return module.GetSuite(name, root) - except ImportError: - # Use default if no testcfg is present. - return GoogleTestSuite(name, root) finally: if f: f.close() @@ -86,26 +84,14 @@ def __init__(self, name, root): self.name = name # string self.root = root # string containing path self.tests = None # list of TestCase objects - self.rules = None # dictionary mapping test path to list of outcomes - self.wildcards = None # dictionary mapping test paths to list of outcomes - self.total_duration = None # float, assigned on demand + self.rules = None # {variant: {test name: [rule]}} + self.prefix_rules = None # {variant: {test name prefix: [rule]}} - def shell(self): - return "d8" - - def suffix(self): - return ".js" + self._outcomes_cache = dict() def status_file(self): return "%s/%s.status" % (self.root, self.name) - # Used in the status file and for stdout printing. - def CommonTestName(self, testcase): - if utils.IsWindows(): - return testcase.path.replace("\\", "/") - else: - return testcase.path - def ListTests(self, context): raise NotImplementedError @@ -123,117 +109,92 @@ def CreateVariantGenerator(self, variants): """ return self._VariantGeneratorFactory()(self, set(variants)) - def PrepareSources(self): - """Called once before multiprocessing for doing file-system operations. - - This should not access the network. For network access use the method - below. - """ - pass - - def DownloadData(self): - pass - def ReadStatusFile(self, variables): with open(self.status_file()) as f: - self.rules, self.wildcards = ( + self.rules, self.prefix_rules = ( statusfile.ReadStatusFile(f.read(), variables)) def ReadTestCases(self, context): self.tests = self.ListTests(context) - @staticmethod - def _FilterSlow(slow, mode): - return (mode == "run" and not slow) or (mode == "skip" and slow) - @staticmethod - def _FilterPassFail(pass_fail, mode): - return (mode == "run" and not pass_fail) or (mode == "skip" and pass_fail) - - def FilterTestCasesByStatus(self, warn_unused_rules, - slow_tests="dontcare", - pass_fail_tests="dontcare", - variants=False): - - # Use only variants-dependent rules and wildcards when filtering - # respective test cases and generic rules when filtering generic test - # cases. - if not variants: - rules = self.rules[""] - wildcards = self.wildcards[""] - else: - # We set rules and wildcards to a variant-specific version for each test - # below. - rules = {} - wildcards = {} + def FilterTestCasesByStatus(self, + slow_tests_mode=None, + pass_fail_tests_mode=None): + """Filters tests by outcomes from status file. - filtered = [] + Status file has to be loaded before using this function. - # Remember used rules as tuples of (rule, variant), where variant is "" for - # variant-independent rules. - used_rules = set() + Args: + slow_tests_mode: What to do with slow tests. + pass_fail_tests_mode: What to do with pass or fail tests. - for t in self.tests: - slow = False - pass_fail = False - testname = self.CommonTestName(t) - variant = t.variant or "" - if variants: - rules = self.rules[variant] - wildcards = self.wildcards[variant] - if testname in rules: - used_rules.add((testname, variant)) - # Even for skipped tests, as the TestCase object stays around and - # PrintReport() uses it. - t.outcomes = t.outcomes | rules[testname] - if statusfile.DoSkip(t.outcomes): - continue # Don't add skipped tests to |filtered|. - for outcome in t.outcomes: - if outcome.startswith('Flags: '): - t.flags += outcome[7:].split() - slow = statusfile.IsSlow(t.outcomes) - pass_fail = statusfile.IsPassOrFail(t.outcomes) - skip = False - for rule in wildcards: - assert rule[-1] == '*' - if testname.startswith(rule[:-1]): - used_rules.add((rule, variant)) - t.outcomes = t.outcomes | wildcards[rule] - if statusfile.DoSkip(t.outcomes): - skip = True - break # "for rule in wildcards" - slow = slow or statusfile.IsSlow(t.outcomes) - pass_fail = pass_fail or statusfile.IsPassOrFail(t.outcomes) - if (skip - or self._FilterSlow(slow, slow_tests) - or self._FilterPassFail(pass_fail, pass_fail_tests)): - continue # "for t in self.tests" - filtered.append(t) - self.tests = filtered + Mode options: + None (default) - don't skip + "skip" - skip if slow/pass_fail + "run" - skip if not slow/pass_fail + """ + def _skip_slow(is_slow, mode): + return ( + (mode == 'run' and not is_slow) or + (mode == 'skip' and is_slow)) + + def _skip_pass_fail(pass_fail, mode): + return ( + (mode == 'run' and not pass_fail) or + (mode == 'skip' and pass_fail)) + + def _compliant(test): + outcomes = self.GetStatusFileOutcomes(test.name, test.variant) + if statusfile.DoSkip(outcomes): + return False + if _skip_slow(statusfile.IsSlow(outcomes), slow_tests_mode): + return False + if _skip_pass_fail(statusfile.IsPassOrFail(outcomes), + pass_fail_tests_mode): + return False + return True + + self.tests = filter(_compliant, self.tests) + + def WarnUnusedRules(self, check_variant_rules=False): + """Finds and prints unused rules in status file. + + Rule X is unused when it doesn't apply to any tests, which can also mean + that all matching tests were skipped by another rule before evaluating X. + + Status file has to be loaded before using this function. + """ - if not warn_unused_rules: - return - - if not variants: - for rule in self.rules[""]: - if (rule, "") not in used_rules: - print("Unused rule: %s -> %s (variant independent)" % ( - rule, self.rules[""][rule])) - for rule in self.wildcards[""]: - if (rule, "") not in used_rules: - print("Unused rule: %s -> %s (variant independent)" % ( - rule, self.wildcards[""][rule])) + if check_variant_rules: + variants = list(ALL_VARIANTS) else: - for variant in ALL_VARIANTS: - for rule in self.rules[variant]: - if (rule, variant) not in used_rules: - print("Unused rule: %s -> %s (variant: %s)" % ( - rule, self.rules[variant][rule], variant)) - for rule in self.wildcards[variant]: - if (rule, variant) not in used_rules: - print("Unused rule: %s -> %s (variant: %s)" % ( - rule, self.wildcards[variant][rule], variant)) + variants = [''] + used_rules = set() + for test in self.tests: + variant = test.variant or "" + + if test.name in self.rules.get(variant, {}): + used_rules.add((test.name, variant)) + if statusfile.DoSkip(self.rules[variant][test.name]): + continue + + for prefix in self.prefix_rules.get(variant, {}): + if test.name.startswith(prefix): + used_rules.add((prefix, variant)) + if statusfile.DoSkip(self.prefix_rules[variant][prefix]): + break + + for variant in variants: + for rule, value in (list(self.rules.get(variant, {}).iteritems()) + + list(self.prefix_rules.get(variant, {}).iteritems())): + if (rule, variant) not in used_rules: + if variant == '': + variant_desc = 'variant independent' + else: + variant_desc = 'variant: %s' % variant + print('Unused rule: %s -> %s (%s)' % (rule, value, variant_desc)) def FilterTestCasesByArgs(self, args): """Filter test cases based on command-line arguments. @@ -260,100 +221,112 @@ def FilterTestCasesByArgs(self, args): break self.tests = filtered - def GetFlagsForTestCase(self, testcase, context): - raise NotImplementedError + def GetExpectedOutcomes(self, test): + """Gets expected outcomes from status file. + + It differs from GetStatusFileOutcomes by selecting only outcomes that can + be result of test execution. + Status file has to be loaded before using this function. + """ + outcomes = self.GetStatusFileOutcomes(test.name, test.variant) + + expected = [] + if (statusfile.FAIL in outcomes or + statusfile.FAIL_OK in outcomes): + expected.append(statusfile.FAIL) + + if statusfile.CRASH in outcomes: + expected.append(statusfile.CRASH) - def GetSourceForTest(self, testcase): - return "(no source available)" + if statusfile.PASS in outcomes: + expected.append(statusfile.PASS) - def IsFailureOutput(self, testcase): - return testcase.output.exit_code != 0 + return expected or [statusfile.PASS] + + def GetStatusFileOutcomes(self, testname, variant=None): + """Gets outcomes from status file. + + Merges variant dependent and independent rules. Status file has to be loaded + before using this function. + """ + + variant = variant or '' + cache_key = '%s$%s' % (testname, variant) + + if cache_key not in self._outcomes_cache: + # Load statusfile to get outcomes for the first time. + assert(self.rules is not None) + assert(self.prefix_rules is not None) + + outcomes = frozenset() + + for key in set([variant, '']): + rules = self.rules.get(key, {}) + prefix_rules = self.prefix_rules.get(key, {}) + + if testname in rules: + outcomes |= rules[testname] + + for prefix in prefix_rules: + if testname.startswith(prefix): + outcomes |= prefix_rules[prefix] + + self._outcomes_cache[cache_key] = outcomes + + return self._outcomes_cache[cache_key] + + def IsFailureOutput(self, testcase, output): + return output.exit_code != 0 def IsNegativeTest(self, testcase): return False - def HasFailed(self, testcase): - execution_failed = self.IsFailureOutput(testcase) + def HasFailed(self, testcase, output): + execution_failed = self.IsFailureOutput(testcase, output) if self.IsNegativeTest(testcase): return not execution_failed else: return execution_failed - def GetOutcome(self, testcase): - if testcase.output.HasCrashed(): + def GetOutcome(self, testcase, output): + if output.HasCrashed(): return statusfile.CRASH - elif testcase.output.HasTimedOut(): + elif output.HasTimedOut(): return statusfile.TIMEOUT - elif self.HasFailed(testcase): + elif self.HasFailed(testcase, output): return statusfile.FAIL else: return statusfile.PASS - def HasUnexpectedOutput(self, testcase): - outcome = self.GetOutcome(testcase) - return not outcome in (testcase.outcomes or [statusfile.PASS]) - - def StripOutputForTransmit(self, testcase): - if not self.HasUnexpectedOutput(testcase): - testcase.output.stdout = "" - testcase.output.stderr = "" + def HasUnexpectedOutput(self, testcase, output, ctx=None): + if ctx and ctx.predictable: + # Only check the exit code of the predictable_wrapper in + # verify-predictable mode. Negative tests are not supported as they + # usually also don't print allocation hashes. There are two versions of + # negative tests: one specified by the test, the other specified through + # the status file (e.g. known bugs). + return ( + output.exit_code != 0 and + not self.IsNegativeTest(testcase) and + statusfile.FAIL not in self.GetExpectedOutcomes(testcase) + ) + return (self.GetOutcome(testcase, output) + not in self.GetExpectedOutcomes(testcase)) + + def _create_test(self, path, **kwargs): + test = self._test_class()(self, path, self._path_to_name(path), **kwargs) + test.precompute() + return test + + def _test_class(self): + raise NotImplementedError - def CalculateTotalDuration(self): - self.total_duration = 0.0 - for t in self.tests: - self.total_duration += t.duration - return self.total_duration + def _path_to_name(self, path): + if utils.IsWindows(): + return path.replace("\\", "/") + return path class StandardVariantGenerator(VariantGenerator): def FilterVariantsByTest(self, testcase): return self.standard_variant - - -class GoogleTestSuite(TestSuite): - def __init__(self, name, root): - super(GoogleTestSuite, self).__init__(name, root) - - def ListTests(self, context): - shell = os.path.abspath(os.path.join(context.shell_dir, self.shell())) - if utils.IsWindows(): - shell += ".exe" - - output = None - for i in xrange(3): # Try 3 times in case of errors. - output = commands.Execute(context.command_prefix + - [shell, "--gtest_list_tests"] + - context.extra_flags) - if output.exit_code == 0: - break - print "Test executable failed to list the tests (try %d).\n\nStdout:" % i - print output.stdout - print "\nStderr:" - print output.stderr - print "\nExit code: %d" % output.exit_code - else: - raise Exception("Test executable failed to list the tests.") - - tests = [] - test_case = '' - for line in output.stdout.splitlines(): - test_desc = line.strip().split()[0] - if test_desc.endswith('.'): - test_case = test_desc - elif test_case and test_desc: - test = testcase.TestCase(self, test_case + test_desc) - tests.append(test) - tests.sort(key=lambda t: t.path) - return tests - - def GetFlagsForTestCase(self, testcase, context): - return (testcase.flags + ["--gtest_filter=" + testcase.path] + - ["--gtest_random_seed=%s" % context.random_seed] + - ["--gtest_print_time=0"] + - context.mode_flags) - - def _VariantGeneratorFactory(self): - return StandardVariantGenerator - - def shell(self): - return self.name diff --git a/deps/v8/tools/testrunner/local/testsuite_unittest.py b/deps/v8/tools/testrunner/local/testsuite_unittest.py index 1e10ef5564e..888c4f283b9 100755 --- a/deps/v8/tools/testrunner/local/testsuite_unittest.py +++ b/deps/v8/tools/testrunner/local/testsuite_unittest.py @@ -20,8 +20,8 @@ class TestSuiteTest(unittest.TestCase): def test_filter_testcases_by_status_first_pass(self): suite = TestSuite('foo', 'bar') suite.tests = [ - TestCase(suite, 'foo/bar'), - TestCase(suite, 'baz/bar'), + TestCase(suite, 'foo/bar', 'foo/bar'), + TestCase(suite, 'baz/bar', 'baz/bar'), ] suite.rules = { '': { @@ -29,27 +29,25 @@ def test_filter_testcases_by_status_first_pass(self): 'baz/bar': set(['PASS', 'FAIL']), }, } - suite.wildcards = { + suite.prefix_rules = { '': { - 'baz/*': set(['PASS', 'SLOW']), + 'baz/': set(['PASS', 'SLOW']), }, } - suite.FilterTestCasesByStatus(warn_unused_rules=False) + suite.FilterTestCasesByStatus() self.assertEquals( - [TestCase(suite, 'baz/bar')], + [TestCase(suite, 'baz/bar', 'baz/bar')], suite.tests, ) - self.assertEquals(set(['PASS', 'FAIL', 'SLOW']), suite.tests[0].outcomes) + outcomes = suite.GetStatusFileOutcomes(suite.tests[0].name, + suite.tests[0].variant) + self.assertEquals(set(['PASS', 'FAIL', 'SLOW']), outcomes) def test_filter_testcases_by_status_second_pass(self): suite = TestSuite('foo', 'bar') - test1 = TestCase(suite, 'foo/bar') - test2 = TestCase(suite, 'baz/bar') - - # Contrived outcomes from filtering by variant-independent rules. - test1.outcomes = set(['PREV']) - test2.outcomes = set(['PREV']) + test1 = TestCase(suite, 'foo/bar', 'foo/bar') + test2 = TestCase(suite, 'baz/bar', 'baz/bar') suite.tests = [ test1.CopyAddingFlags(variant='default', flags=[]), @@ -59,6 +57,9 @@ def test_filter_testcases_by_status_second_pass(self): ] suite.rules = { + '': { + 'foo/bar': set(['PREV']), + }, 'default': { 'foo/bar': set(['PASS', 'SKIP']), 'baz/bar': set(['PASS', 'FAIL']), @@ -67,32 +68,55 @@ def test_filter_testcases_by_status_second_pass(self): 'baz/bar': set(['SKIP']), }, } - suite.wildcards = { + suite.prefix_rules = { + '': { + 'baz/': set(['PREV']), + }, 'default': { - 'baz/*': set(['PASS', 'SLOW']), + 'baz/': set(['PASS', 'SLOW']), }, 'stress': { - 'foo/*': set(['PASS', 'SLOW']), + 'foo/': set(['PASS', 'SLOW']), }, } - suite.FilterTestCasesByStatus(warn_unused_rules=False, variants=True) + suite.FilterTestCasesByStatus() self.assertEquals( [ - TestCase(suite, 'foo/bar', flags=['-v']), - TestCase(suite, 'baz/bar'), + TestCase(suite, 'foo/bar', 'foo/bar', flags=['-v']), + TestCase(suite, 'baz/bar', 'baz/bar'), ], suite.tests, ) self.assertEquals( - set(['PASS', 'SLOW', 'PREV']), - suite.tests[0].outcomes, + set(['PREV', 'PASS', 'SLOW']), + suite.GetStatusFileOutcomes(suite.tests[0].name, + suite.tests[0].variant), ) self.assertEquals( - set(['PASS', 'FAIL', 'SLOW', 'PREV']), - suite.tests[1].outcomes, + set(['PREV', 'PASS', 'FAIL', 'SLOW']), + suite.GetStatusFileOutcomes(suite.tests[1].name, + suite.tests[1].variant), ) + def test_fail_ok_outcome(self): + suite = TestSuite('foo', 'bar') + suite.tests = [ + TestCase(suite, 'foo/bar', 'foo/bar'), + TestCase(suite, 'baz/bar', 'baz/bar'), + ] + suite.rules = { + '': { + 'foo/bar': set(['FAIL_OK']), + 'baz/bar': set(['FAIL']), + }, + } + suite.prefix_rules = {} + + for t in suite.tests: + expected_outcomes = suite.GetExpectedOutcomes(t) + self.assertEquals(['FAIL'], expected_outcomes) + if __name__ == '__main__': unittest.main() diff --git a/deps/v8/tools/testrunner/local/utils.py b/deps/v8/tools/testrunner/local/utils.py index 3e79e44afa2..bf8c3d9f7e8 100644 --- a/deps/v8/tools/testrunner/local/utils.py +++ b/deps/v8/tools/testrunner/local/utils.py @@ -26,10 +26,10 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import os from os.path import exists from os.path import isdir from os.path import join +import os import platform import re import subprocess diff --git a/deps/v8/tools/testrunner/local/variants.py b/deps/v8/tools/testrunner/local/variants.py index 9efa060bba5..574da2d4a37 100644 --- a/deps/v8/tools/testrunner/local/variants.py +++ b/deps/v8/tools/testrunner/local/variants.py @@ -5,28 +5,25 @@ # Use this to run several variants of the tests. ALL_VARIANT_FLAGS = { "default": [[]], + "future": [["--future"]], + "liftoff": [["--liftoff"]], + "minor_mc": [["--minor-mc"]], "stress": [["--stress-opt", "--always-opt"]], - "stress_incremental_marking": [["--stress-incremental-marking"]], + # TODO(6792): Write protected code has been temporary added to the below + # variant until the feature has been enabled (or staged) by default. + "stress_incremental_marking": [["--stress-incremental-marking", "--write-protect-code-memory"]], # No optimization means disable all optimizations. OptimizeFunctionOnNextCall # would not force optimization too. It turns into a Nop. Please see # https://chromium-review.googlesource.com/c/452620/ for more discussion. "nooptimization": [["--noopt"]], - "stress_asm_wasm": [["--validate-asm", "--stress-validate-asm", "--suppress-asm-messages"]], - "wasm_traps": [["--wasm_trap_handler", "--invoke-weak-callbacks"]], + "stress_background_compile": [["--background-compile", "--stress-background-compile"]], + "wasm_traps": [["--wasm_trap_handler", "--invoke-weak-callbacks", "--wasm-jit-to-native"]], } # FAST_VARIANTS implies no --always-opt. -FAST_VARIANT_FLAGS = { - "default": [[]], - "stress": [["--stress-opt"]], - "stress_incremental_marking": [["--stress-incremental-marking"]], - # No optimization means disable all optimizations. OptimizeFunctionOnNextCall - # would not force optimization too. It turns into a Nop. Please see - # https://chromium-review.googlesource.com/c/452620/ for more discussion. - "nooptimization": [["--noopt"]], - "stress_asm_wasm": [["--validate-asm", "--stress-validate-asm", "--suppress-asm-messages"]], - "wasm_traps": [["--wasm_trap_handler", "--invoke-weak-callbacks"]], -} +FAST_VARIANT_FLAGS = dict( + (k, [[f for f in v[0] if f != "--always-opt"]]) + for k, v in ALL_VARIANT_FLAGS.iteritems() +) -ALL_VARIANTS = set(["default", "stress", "stress_incremental_marking", - "nooptimization", "stress_asm_wasm", "wasm_traps"]) +ALL_VARIANTS = set(ALL_VARIANT_FLAGS.keys()) diff --git a/deps/v8/tools/testrunner/local/verbose.py b/deps/v8/tools/testrunner/local/verbose.py index 00c330d2d9c..c063f41bd46 100644 --- a/deps/v8/tools/testrunner/local/verbose.py +++ b/deps/v8/tools/testrunner/local/verbose.py @@ -35,7 +35,6 @@ REPORT_TEMPLATE = ( """Total: %(total)i tests * %(skipped)4d tests will be skipped - * %(timeout)4d tests are expected to timeout sometimes * %(nocrash)4d tests are expected to be flaky but not crash * %(pass)4d tests are expected to pass * %(fail_ok)4d tests are expected to fail that we won't fix @@ -44,24 +43,27 @@ def PrintReport(tests): total = len(tests) - skipped = timeout = nocrash = passes = fail_ok = fail = 0 + skipped = nocrash = passes = fail_ok = fail = 0 for t in tests: - if "outcomes" not in dir(t) or not t.outcomes: + outcomes = t.suite.GetStatusFileOutcomes(t.name, t.variant) + if not outcomes: passes += 1 continue - o = t.outcomes - if statusfile.DoSkip(o): + if statusfile.DoSkip(outcomes): skipped += 1 continue - if statusfile.TIMEOUT in o: timeout += 1 - if statusfile.IsPassOrFail(o): nocrash += 1 - if list(o) == [statusfile.PASS]: passes += 1 - if statusfile.IsFailOk(o): fail_ok += 1 - if list(o) == [statusfile.FAIL]: fail += 1 + if statusfile.IsPassOrFail(outcomes): + nocrash += 1 + if list(outcomes) == [statusfile.PASS]: + passes += 1 + if statusfile.IsFailOk(outcomes): + fail_ok += 1 + if list(outcomes) == [statusfile.FAIL]: + fail += 1 + print REPORT_TEMPLATE % { "total": total, "skipped": skipped, - "timeout": timeout, "nocrash": nocrash, "pass": passes, "fail_ok": fail_ok, @@ -71,12 +73,12 @@ def PrintReport(tests): def PrintTestSource(tests): for test in tests: - suite = test.suite - source = suite.GetSourceForTest(test).strip() - if len(source) > 0: - print "--- begin source: %s/%s ---" % (suite.name, test.path) - print source - print "--- end source: %s/%s ---" % (suite.name, test.path) + print "--- begin source: %s ---" % test + if test.is_source_available(): + print test.get_source() + else: + print '(no source available)' + print "--- end source: %s ---" % test def FormatTime(d): @@ -84,16 +86,16 @@ def FormatTime(d): return time.strftime("%M:%S.", time.gmtime(d)) + ("%03i" % millis) -def PrintTestDurations(suites, overall_time): +def PrintTestDurations(suites, outputs, overall_time): # Write the times to stderr to make it easy to separate from the # test output. print sys.stderr.write("--- Total time: %s ---\n" % FormatTime(overall_time)) - timed_tests = [ t for s in suites for t in s.tests - if t.duration is not None ] - timed_tests.sort(lambda a, b: cmp(b.duration, a.duration)) + timed_tests = [(t, outputs[t].duration) for s in suites for t in s.tests + if t in outputs] + timed_tests.sort(key=lambda (_, duration): duration, reverse=True) index = 1 - for entry in timed_tests[:20]: - t = FormatTime(entry.duration) - sys.stderr.write("%4i (%s) %s\n" % (index, t, entry.GetLabel())) + for test, duration in timed_tests[:20]: + t = FormatTime(duration) + sys.stderr.write("%4i (%s) %s\n" % (index, t, test)) index += 1 diff --git a/deps/v8/tools/testrunner/network/__init__.py b/deps/v8/tools/testrunner/network/__init__.py deleted file mode 100644 index 202a262709c..00000000000 --- a/deps/v8/tools/testrunner/network/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/v8/tools/testrunner/network/distro.py b/deps/v8/tools/testrunner/network/distro.py deleted file mode 100644 index 9d5a471d444..00000000000 --- a/deps/v8/tools/testrunner/network/distro.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -class Shell(object): - def __init__(self, shell): - self.shell = shell - self.tests = [] - self.total_duration = 0.0 - - def AddSuite(self, suite): - self.tests += suite.tests - self.total_duration += suite.total_duration - - def SortTests(self): - self.tests.sort(cmp=lambda x, y: cmp(x.duration, y.duration)) - - -def Assign(suites, peers): - total_work = 0.0 - for s in suites: - total_work += s.CalculateTotalDuration() - - total_power = 0.0 - for p in peers: - p.assigned_work = 0.0 - total_power += p.jobs * p.relative_performance - for p in peers: - p.needed_work = total_work * p.jobs * p.relative_performance / total_power - - shells = {} - for s in suites: - shell = s.shell() - if not shell in shells: - shells[shell] = Shell(shell) - shells[shell].AddSuite(s) - # Convert |shells| to list and sort it, shortest total_duration first. - shells = [ shells[s] for s in shells ] - shells.sort(cmp=lambda x, y: cmp(x.total_duration, y.total_duration)) - # Sort tests within each shell, longest duration last (so it's - # pop()'ed first). - for s in shells: s.SortTests() - # Sort peers, least needed_work first. - peers.sort(cmp=lambda x, y: cmp(x.needed_work, y.needed_work)) - index = 0 - for shell in shells: - while len(shell.tests) > 0: - while peers[index].needed_work <= 0: - index += 1 - if index == len(peers): - print("BIG FAT WARNING: Assigning tests to peers failed. " - "Remaining tests: %d. Going to slow mode." % len(shell.tests)) - # Pick the least-busy peer. Sorting the list for each test - # is terribly slow, but this is just an emergency fallback anyway. - peers.sort(cmp=lambda x, y: cmp(x.needed_work, y.needed_work)) - peers[0].ForceAddOneTest(shell.tests.pop(), shell) - # If the peer already has a shell assigned and would need this one - # and then yet another, try to avoid it. - peer = peers[index] - if (shell.total_duration < peer.needed_work and - len(peer.shells) > 0 and - index < len(peers) - 1 and - shell.total_duration <= peers[index + 1].needed_work): - peers[index + 1].AddTests(shell) - else: - peer.AddTests(shell) diff --git a/deps/v8/tools/testrunner/network/endpoint.py b/deps/v8/tools/testrunner/network/endpoint.py deleted file mode 100644 index 516578ace49..00000000000 --- a/deps/v8/tools/testrunner/network/endpoint.py +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import multiprocessing -import os -import Queue -import threading -import time - -from ..local import execution -from ..local import progress -from ..local import testsuite -from ..local import utils -from ..server import compression - - -class EndpointProgress(progress.ProgressIndicator): - def __init__(self, sock, server, ctx): - super(EndpointProgress, self).__init__() - self.sock = sock - self.server = server - self.context = ctx - self.results_queue = [] # Accessors must synchronize themselves. - self.sender_lock = threading.Lock() - self.senderthread = threading.Thread(target=self._SenderThread) - self.senderthread.start() - - def HasRun(self, test, has_unexpected_output): - # The runners that call this have a lock anyway, so this is safe. - self.results_queue.append(test) - - def _SenderThread(self): - keep_running = True - tests = [] - self.sender_lock.acquire() - while keep_running: - time.sleep(0.1) - # This should be "atomic enough" without locking :-) - # (We don't care which list any new elements get appended to, as long - # as we don't lose any and the last one comes last.) - current = self.results_queue - self.results_queue = [] - for c in current: - if c is None: - keep_running = False - else: - tests.append(c) - if keep_running and len(tests) < 1: - continue # Wait for more results. - if len(tests) < 1: break # We're done here. - result = [] - for t in tests: - result.append(t.PackResult()) - try: - compression.Send(result, self.sock) - except: - self.runner.terminate = True - for t in tests: - self.server.CompareOwnPerf(t, self.context.arch, self.context.mode) - tests = [] - self.sender_lock.release() - - -def Execute(workspace, ctx, tests, sock, server): - suite_paths = utils.GetSuitePaths(os.path.join(workspace, "test")) - suites = [] - for root in suite_paths: - suite = testsuite.TestSuite.LoadTestSuite( - os.path.join(workspace, "test", root)) - if suite: - suite.SetupWorkingDirectory() - suites.append(suite) - - suites_dict = {} - for s in suites: - suites_dict[s.name] = s - s.tests = [] - for t in tests: - suite = suites_dict[t.suite] - t.suite = suite - suite.tests.append(t) - - suites = [ s for s in suites if len(s.tests) > 0 ] - for s in suites: - s.DownloadData() - - progress_indicator = EndpointProgress(sock, server, ctx) - runner = execution.Runner(suites, progress_indicator, ctx) - try: - runner.Run(server.jobs) - except IOError, e: - if e.errno == 2: - message = ("File not found: %s, maybe you forgot to 'git add' it?" % - e.filename) - else: - message = "%s" % e - compression.Send([[-1, message]], sock) - progress_indicator.HasRun(None, None) # Sentinel to signal the end. - progress_indicator.sender_lock.acquire() # Released when sending is done. - progress_indicator.sender_lock.release() diff --git a/deps/v8/tools/testrunner/network/network_execution.py b/deps/v8/tools/testrunner/network/network_execution.py deleted file mode 100644 index a95440178b4..00000000000 --- a/deps/v8/tools/testrunner/network/network_execution.py +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import os -import socket -import subprocess -import threading -import time - -from . import distro -from ..local import execution -from ..local import perfdata -from ..objects import peer -from ..objects import workpacket -from ..server import compression -from ..server import constants -from ..server import local_handler -from ..server import signatures - - -def GetPeers(): - data = local_handler.LocalQuery([constants.REQUEST_PEERS]) - if not data: return [] - return [ peer.Peer.Unpack(p) for p in data ] - - -class NetworkedRunner(execution.Runner): - def __init__(self, suites, progress_indicator, context, peers, workspace): - self.suites = suites - datapath = os.path.join("out", "testrunner_data") - # TODO(machenbach): These fields should exist now in the superclass. - # But there is no super constructor call. Check if this is a problem. - self.perf_data_manager = perfdata.PerfDataManager(datapath) - self.perfdata = self.perf_data_manager.GetStore(context.arch, context.mode) - for s in suites: - for t in s.tests: - t.duration = self.perfdata.FetchPerfData(t) or 1.0 - self._CommonInit(suites, progress_indicator, context) - self.tests = [] # Only used if we need to fall back to local execution. - self.tests_lock = threading.Lock() - self.peers = peers - self.pubkey_fingerprint = None # Fetched later. - self.base_rev = subprocess.check_output( - "cd %s; git log -1 --format=%%H --grep=git-svn-id" % workspace, - shell=True).strip() - self.base_svn_rev = subprocess.check_output( - "cd %s; git log -1 %s" # Get commit description. - " | grep -e '^\s*git-svn-id:'" # Extract "git-svn-id" line. - " | awk '{print $2}'" # Extract "repository@revision" part. - " | sed -e 's/.*@//'" % # Strip away "repository@". - (workspace, self.base_rev), shell=True).strip() - self.patch = subprocess.check_output( - "cd %s; git diff %s" % (workspace, self.base_rev), shell=True) - self.binaries = {} - self.initialization_lock = threading.Lock() - self.initialization_lock.acquire() # Released when init is done. - self._OpenLocalConnection() - self.local_receiver_thread = threading.Thread( - target=self._ListenLocalConnection) - self.local_receiver_thread.daemon = True - self.local_receiver_thread.start() - self.initialization_lock.acquire() - self.initialization_lock.release() - - def _OpenLocalConnection(self): - self.local_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - code = self.local_socket.connect_ex(("localhost", constants.CLIENT_PORT)) - if code != 0: - raise RuntimeError("Failed to connect to local server") - compression.Send([constants.REQUEST_PUBKEY_FINGERPRINT], self.local_socket) - - def _ListenLocalConnection(self): - release_lock_countdown = 1 # Pubkey. - self.local_receiver = compression.Receiver(self.local_socket) - while not self.local_receiver.IsDone(): - data = self.local_receiver.Current() - if data[0] == constants.REQUEST_PUBKEY_FINGERPRINT: - pubkey = data[1] - if not pubkey: raise RuntimeError("Received empty public key") - self.pubkey_fingerprint = pubkey - release_lock_countdown -= 1 - if release_lock_countdown == 0: - self.initialization_lock.release() - release_lock_countdown -= 1 # Prevent repeated triggering. - self.local_receiver.Advance() - - def Run(self, jobs): - self.indicator.Starting() - need_libv8 = False - for s in self.suites: - shell = s.shell() - if shell not in self.binaries: - path = os.path.join(self.context.shell_dir, shell) - # Check if this is a shared library build. - try: - ldd = subprocess.check_output("ldd %s | grep libv8\\.so" % (path), - shell=True) - ldd = ldd.strip().split(" ") - assert ldd[0] == "libv8.so" - assert ldd[1] == "=>" - need_libv8 = True - binary_needs_libv8 = True - libv8 = signatures.ReadFileAndSignature(ldd[2]) - except: - binary_needs_libv8 = False - binary = signatures.ReadFileAndSignature(path) - if binary[0] is None: - print("Error: Failed to create signature.") - assert binary[1] != 0 - return binary[1] - binary.append(binary_needs_libv8) - self.binaries[shell] = binary - if need_libv8: - self.binaries["libv8.so"] = libv8 - distro.Assign(self.suites, self.peers) - # Spawn one thread for each peer. - threads = [] - for p in self.peers: - thread = threading.Thread(target=self._TalkToPeer, args=[p]) - threads.append(thread) - thread.start() - try: - for thread in threads: - # Use a timeout so that signals (Ctrl+C) will be processed. - thread.join(timeout=10000000) - self._AnalyzePeerRuntimes() - except KeyboardInterrupt: - self.terminate = True - raise - except Exception, _e: - # If there's an exception we schedule an interruption for any - # remaining threads... - self.terminate = True - # ...and then reraise the exception to bail out. - raise - compression.Send(constants.END_OF_STREAM, self.local_socket) - self.local_socket.close() - if self.tests: - self._RunInternal(jobs) - self.indicator.Done() - return not self.failed - - def _TalkToPeer(self, peer): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.settimeout(self.context.timeout + 10) - code = sock.connect_ex((peer.address, constants.PEER_PORT)) - if code == 0: - try: - peer.runtime = None - start_time = time.time() - packet = workpacket.WorkPacket(peer=peer, context=self.context, - base_revision=self.base_svn_rev, - patch=self.patch, - pubkey=self.pubkey_fingerprint) - data, test_map = packet.Pack(self.binaries) - compression.Send(data, sock) - compression.Send(constants.END_OF_STREAM, sock) - rec = compression.Receiver(sock) - while not rec.IsDone() and not self.terminate: - data_list = rec.Current() - for data in data_list: - test_id = data[0] - if test_id < 0: - # The peer is reporting an error. - with self.lock: - print("\nPeer %s reports error: %s" % (peer.address, data[1])) - continue - test = test_map.pop(test_id) - test.MergeResult(data) - try: - self.perfdata.UpdatePerfData(test) - except Exception, e: - print("UpdatePerfData exception: %s" % e) - pass # Just keep working. - with self.lock: - perf_key = self.perfdata.GetKey(test) - compression.Send( - [constants.INFORM_DURATION, perf_key, test.duration, - self.context.arch, self.context.mode], - self.local_socket) - has_unexpected_output = test.suite.HasUnexpectedOutput(test) - if has_unexpected_output: - self.failed.append(test) - if test.output.HasCrashed(): - self.crashed += 1 - else: - self.succeeded += 1 - self.remaining -= 1 - self.indicator.HasRun(test, has_unexpected_output) - rec.Advance() - peer.runtime = time.time() - start_time - except KeyboardInterrupt: - sock.close() - raise - except Exception, e: - print("Got exception: %s" % e) - pass # Fall back to local execution. - else: - compression.Send([constants.UNRESPONSIVE_PEER, peer.address], - self.local_socket) - sock.close() - if len(test_map) > 0: - # Some tests have not received any results. Run them locally. - print("\nNo results for %d tests, running them locally." % len(test_map)) - self._EnqueueLocally(test_map) - - def _EnqueueLocally(self, test_map): - with self.tests_lock: - for test in test_map: - self.tests.append(test_map[test]) - - def _AnalyzePeerRuntimes(self): - total_runtime = 0.0 - total_work = 0.0 - for p in self.peers: - if p.runtime is None: - return - total_runtime += p.runtime - total_work += p.assigned_work - for p in self.peers: - p.assigned_work /= total_work - p.runtime /= total_runtime - perf_correction = p.assigned_work / p.runtime - old_perf = p.relative_performance - p.relative_performance = (old_perf + perf_correction) / 2.0 - compression.Send([constants.UPDATE_PERF, p.address, - p.relative_performance], - self.local_socket) diff --git a/deps/v8/tools/testrunner/objects/context.py b/deps/v8/tools/testrunner/objects/context.py index 6bcbfb67aa4..fb5d717728e 100644 --- a/deps/v8/tools/testrunner/objects/context.py +++ b/deps/v8/tools/testrunner/objects/context.py @@ -49,18 +49,3 @@ def __init__(self, arch, mode, shell_dir, mode_flags, verbose, timeout, self.no_harness = no_harness self.use_perf_data = use_perf_data self.sancov_dir = sancov_dir - - def Pack(self): - return [self.arch, self.mode, self.mode_flags, self.timeout, self.isolates, - self.command_prefix, self.extra_flags, self.noi18n, - self.random_seed, self.no_sorting, self.rerun_failures_count, - self.rerun_failures_max, self.predictable, self.no_harness, - self.use_perf_data, self.sancov_dir] - - @staticmethod - def Unpack(packed): - # For the order of the fields, refer to Pack() above. - return Context(packed[0], packed[1], None, packed[2], False, - packed[3], packed[4], packed[5], packed[6], packed[7], - packed[8], packed[9], packed[10], packed[11], packed[12], - packed[13], packed[14], packed[15]) diff --git a/deps/v8/tools/testrunner/objects/output.py b/deps/v8/tools/testrunner/objects/output.py index b4bb01f797a..adc33c9f12d 100644 --- a/deps/v8/tools/testrunner/objects/output.py +++ b/deps/v8/tools/testrunner/objects/output.py @@ -32,12 +32,13 @@ class Output(object): - def __init__(self, exit_code, timed_out, stdout, stderr, pid): + def __init__(self, exit_code, timed_out, stdout, stderr, pid, duration): self.exit_code = exit_code self.timed_out = timed_out self.stdout = stdout self.stderr = stderr self.pid = pid + self.duration = duration def HasCrashed(self): if utils.IsWindows(): @@ -51,11 +52,3 @@ def HasCrashed(self): def HasTimedOut(self): return self.timed_out - - def Pack(self): - return [self.exit_code, self.timed_out, self.stdout, self.stderr, self.pid] - - @staticmethod - def Unpack(packed): - # For the order of the fields, refer to Pack() above. - return Output(packed[0], packed[1], packed[2], packed[3], packed[4]) diff --git a/deps/v8/tools/testrunner/objects/peer.py b/deps/v8/tools/testrunner/objects/peer.py deleted file mode 100644 index 18a6bec7a8a..00000000000 --- a/deps/v8/tools/testrunner/objects/peer.py +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -class Peer(object): - def __init__(self, address, jobs, rel_perf, pubkey): - self.address = address # string: IP address - self.jobs = jobs # integer: number of CPUs - self.relative_performance = rel_perf - self.pubkey = pubkey # string: pubkey's fingerprint - self.shells = set() # set of strings - self.needed_work = 0 - self.assigned_work = 0 - self.tests = [] # list of TestCase objects - self.trusting_me = False # This peer trusts my public key. - self.trusted = False # I trust this peer's public key. - - def __str__(self): - return ("Peer at %s, jobs: %d, performance: %.2f, trust I/O: %s/%s" % - (self.address, self.jobs, self.relative_performance, - self.trusting_me, self.trusted)) - - def AddTests(self, shell): - """Adds tests from |shell| to this peer. - - Stops when self.needed_work reaches zero, or when all of shell's tests - are assigned.""" - assert self.needed_work > 0 - if shell.shell not in self.shells: - self.shells.add(shell.shell) - while len(shell.tests) > 0 and self.needed_work > 0: - t = shell.tests.pop() - self.needed_work -= t.duration - self.assigned_work += t.duration - shell.total_duration -= t.duration - self.tests.append(t) - - def ForceAddOneTest(self, test, shell): - """Forcibly adds another test to this peer, disregarding needed_work.""" - if shell.shell not in self.shells: - self.shells.add(shell.shell) - self.needed_work -= test.duration - self.assigned_work += test.duration - shell.total_duration -= test.duration - self.tests.append(test) - - - def Pack(self): - """Creates a JSON serializable representation of this Peer.""" - return [self.address, self.jobs, self.relative_performance] - - @staticmethod - def Unpack(packed): - """Creates a Peer object built from a packed representation.""" - pubkey_dummy = "" # Callers of this don't care (only the server does). - return Peer(packed[0], packed[1], packed[2], pubkey_dummy) diff --git a/deps/v8/tools/testrunner/objects/testcase.py b/deps/v8/tools/testrunner/objects/testcase.py index 37e3cb4ec2b..98d3d4cd21a 100644 --- a/deps/v8/tools/testrunner/objects/testcase.py +++ b/deps/v8/tools/testrunner/objects/testcase.py @@ -25,92 +25,185 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import os +import re +import shlex + +from ..local import command +from ..local import utils + +FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") -from . import output class TestCase(object): - def __init__(self, suite, path, variant=None, flags=None, - override_shell=None): + def __init__(self, suite, path, name): self.suite = suite # TestSuite object + self.path = path # string, e.g. 'div-mod', 'test-api/foo' - self.flags = flags or [] # list of strings, flags specific to this test - self.variant = variant # name of the used testing variant - self.override_shell = override_shell - self.outcomes = frozenset([]) - self.output = None + self.name = name # string that identifies test in the status file + + self.variant = None # name of the used testing variant + self.variant_flags = [] # list of strings, flags specific to this test + self.id = None # int, used to map result back to TestCase instance - self.duration = None # assigned during execution self.run = 1 # The nth time this test is executed. - self.env = {} + self.cmd = None - def CopyAddingFlags(self, variant, flags): - copy = TestCase(self.suite, self.path, variant, self.flags + flags, - self.override_shell) - copy.outcomes = self.outcomes - copy.env = self.env + def precompute(self): + """It precomputes all things that can be shared among all variants of this + object (like flags from source file). Values calculated here should be + immutable and shared among all copies (in _copy implementation). + """ + pass + + def create_variant(self, variant, flags): + copy = self._copy() + if not self.variant_flags: + copy.variant_flags = flags + else: + copy.variant_flags = self.variant_flags + flags + copy.variant = variant return copy - def PackTask(self): + def _copy(self): + """Makes a copy of the object. It should be overriden in case of any + additional constructor parameters or precomputed fields. """ - Extracts those parts of this object that are required to run the test - and returns them as a JSON serializable object. + return self.__class__(self.suite, self.path, self.name) + + def get_command(self, context): + params = self._get_cmd_params(context) + env = self._get_cmd_env() + shell, shell_flags = self._get_shell_with_flags(context) + timeout = self._get_timeout(params, context.timeout) + return self._create_cmd(shell, shell_flags + params, env, timeout, context) + + def _get_cmd_params(self, ctx): + """Gets command parameters and combines them in the following order: + - files [empty by default] + - extra flags (from command line) + - user flags (variant/fuzzer flags) + - statusfile flags + - mode flags (based on chosen mode) + - source flags (from source code) [empty by default] + + The best way to modify how parameters are created is to only override + methods for getting partial parameters. """ - assert self.id is not None - return [self.suitename(), self.path, self.variant, self.flags, - self.override_shell, list(self.outcomes or []), - self.id, self.env] - - @staticmethod - def UnpackTask(task): - """Creates a new TestCase object based on packed task data.""" - # For the order of the fields, refer to PackTask() above. - test = TestCase(str(task[0]), task[1], task[2], task[3], task[4]) - test.outcomes = frozenset(task[5]) - test.id = task[6] - test.run = 1 - test.env = task[7] - return test - - def SetSuiteObject(self, suites): - self.suite = suites[self.suite] - - def PackResult(self): - """Serializes the output of the TestCase after it has run.""" - self.suite.StripOutputForTransmit(self) - return [self.id, self.output.Pack(), self.duration] - - def MergeResult(self, result): - """Applies the contents of a Result to this object.""" - assert result[0] == self.id - self.output = output.Output.Unpack(result[1]) - self.duration = result[2] - - def suitename(self): - return self.suite.name - - def GetLabel(self): - return self.suitename() + "/" + self.suite.CommonTestName(self) - - def shell(self): - if self.override_shell: - return self.override_shell - return self.suite.shell() - - def __getstate__(self): - """Representation to pickle test cases. - - The original suite won't be sent beyond process boundaries. Instead - send the name only and retrieve a process-local suite later. + return ( + self._get_files_params(ctx) + + self._get_extra_flags(ctx) + + self._get_variant_flags() + + self._get_statusfile_flags() + + self._get_mode_flags(ctx) + + self._get_source_flags() + + self._get_suite_flags(ctx) + ) + + def _get_cmd_env(self): + return {} + + def _get_files_params(self, ctx): + return [] + + def _get_extra_flags(self, ctx): + return ctx.extra_flags + + def _get_variant_flags(self): + return self.variant_flags + + def _get_statusfile_flags(self): + """Gets runtime flags from a status file. + + Every outcome that starts with "--" is a flag. Status file has to be loaded + before using this function. """ - return dict(self.__dict__, suite=self.suite.name) + + flags = [] + for outcome in self.suite.GetStatusFileOutcomes(self.name, self.variant): + if outcome.startswith('--'): + flags.append(outcome) + return flags + + def _get_mode_flags(self, ctx): + return ctx.mode_flags + + def _get_source_flags(self): + return [] + + def _get_suite_flags(self, ctx): + return [] + + def _get_shell_with_flags(self, ctx): + shell = self._get_shell() + shell_flags = [] + if shell == 'd8': + shell_flags.append('--test') + if utils.IsWindows(): + shell += '.exe' + if ctx.random_seed: + shell_flags.append('--random-seed=%s' % ctx.random_seed) + return shell, shell_flags + + def _get_timeout(self, params, timeout): + if "--stress-opt" in params: + timeout *= 4 + if "--noenable-vfp3" in params: + timeout *= 2 + + # TODO(majeski): make it slow outcome dependent. + timeout *= 2 + return timeout + + def _get_shell(self): + return 'd8' + + def _get_suffix(self): + return '.js' + + def _create_cmd(self, shell, params, env, timeout, ctx): + return command.Command( + cmd_prefix=ctx.command_prefix, + shell=os.path.abspath(os.path.join(ctx.shell_dir, shell)), + args=params, + env=env, + timeout=timeout, + verbose=ctx.verbose + ) + + def _parse_source_flags(self, source=None): + source = source or self.get_source() + flags = [] + for match in re.findall(FLAGS_PATTERN, source): + flags += shlex.split(match.strip()) + return flags + + def is_source_available(self): + return self._get_source_path() is not None + + def get_source(self): + with open(self._get_source_path()) as f: + return f.read() + + def _get_source_path(self): + return None def __cmp__(self, other): # Make sure that test cases are sorted correctly if sorted without # key function. But using a key function is preferred for speed. return cmp( - (self.suite.name, self.path, self.flags), - (other.suite.name, other.path, other.flags), + (self.suite.name, self.name, self.variant_flags), + (other.suite.name, other.name, other.variant_flags) ) + def __hash__(self): + return hash((self.suite.name, self.name, ''.join(self.variant_flags))) + def __str__(self): - return "[%s/%s %s]" % (self.suite.name, self.path, self.flags) + return self.suite.name + '/' + self.name + + # TODO(majeski): Rename `id` field or `get_id` function since they're + # unrelated. + def get_id(self): + return '%s/%s %s' % ( + self.suite.name, self.name, ' '.join(self.variant_flags)) diff --git a/deps/v8/tools/testrunner/objects/workpacket.py b/deps/v8/tools/testrunner/objects/workpacket.py deleted file mode 100644 index d07efe76ec5..00000000000 --- a/deps/v8/tools/testrunner/objects/workpacket.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -from . import context -from . import testcase - -class WorkPacket(object): - def __init__(self, peer=None, context=None, tests=None, binaries=None, - base_revision=None, patch=None, pubkey=None): - self.peer = peer - self.context = context - self.tests = tests - self.binaries = binaries - self.base_revision = base_revision - self.patch = patch - self.pubkey_fingerprint = pubkey - - def Pack(self, binaries_dict): - """ - Creates a JSON serializable object containing the data of this - work packet. - """ - need_libv8 = False - binaries = [] - for shell in self.peer.shells: - prefetched_binary = binaries_dict[shell] - binaries.append({"name": shell, - "blob": prefetched_binary[0], - "sign": prefetched_binary[1]}) - if prefetched_binary[2]: - need_libv8 = True - if need_libv8: - libv8 = binaries_dict["libv8.so"] - binaries.append({"name": "libv8.so", - "blob": libv8[0], - "sign": libv8[1]}) - tests = [] - test_map = {} - for t in self.peer.tests: - test_map[t.id] = t - tests.append(t.PackTask()) - result = { - "binaries": binaries, - "pubkey": self.pubkey_fingerprint, - "context": self.context.Pack(), - "base_revision": self.base_revision, - "patch": self.patch, - "tests": tests - } - return result, test_map - - @staticmethod - def Unpack(packed): - """ - Creates a WorkPacket object from the given packed representation. - """ - binaries = packed["binaries"] - pubkey_fingerprint = packed["pubkey"] - ctx = context.Context.Unpack(packed["context"]) - base_revision = packed["base_revision"] - patch = packed["patch"] - tests = [ testcase.TestCase.UnpackTask(t) for t in packed["tests"] ] - return WorkPacket(context=ctx, tests=tests, binaries=binaries, - base_revision=base_revision, patch=patch, - pubkey=pubkey_fingerprint) diff --git a/deps/v8/tools/testrunner/server/__init__.py b/deps/v8/tools/testrunner/server/__init__.py deleted file mode 100644 index 202a262709c..00000000000 --- a/deps/v8/tools/testrunner/server/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/v8/tools/testrunner/server/compression.py b/deps/v8/tools/testrunner/server/compression.py deleted file mode 100644 index d5ed4159766..00000000000 --- a/deps/v8/tools/testrunner/server/compression.py +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import cStringIO as StringIO -try: - import ujson as json -except ImportError: - import json -import os -import struct -import zlib - -from . import constants - -def Send(obj, sock): - """ - Sends a JSON encodable object over the specified socket (zlib-compressed). - """ - obj = json.dumps(obj) - compression_level = 2 # 1 = fastest, 9 = best compression - compressed = zlib.compress(obj, compression_level) - payload = struct.pack('>i', len(compressed)) + compressed - sock.sendall(payload) - - -class Receiver(object): - def __init__(self, sock): - self.sock = sock - self.data = StringIO.StringIO() - self.datalength = 0 - self._next = self._GetNext() - - def IsDone(self): - return self._next == None - - def Current(self): - return self._next - - def Advance(self): - try: - self._next = self._GetNext() - except: - raise - - def _GetNext(self): - try: - while self.datalength < constants.SIZE_T: - try: - chunk = self.sock.recv(8192) - except: - raise - if not chunk: return None - self._AppendData(chunk) - size = self._PopData(constants.SIZE_T) - size = struct.unpack(">i", size)[0] - while self.datalength < size: - try: - chunk = self.sock.recv(8192) - except: - raise - if not chunk: return None - self._AppendData(chunk) - result = self._PopData(size) - result = zlib.decompress(result) - result = json.loads(result) - if result == constants.END_OF_STREAM: - return None - return result - except: - raise - - def _AppendData(self, new): - self.data.seek(0, os.SEEK_END) - self.data.write(new) - self.datalength += len(new) - - def _PopData(self, length): - self.data.seek(0) - chunk = self.data.read(length) - remaining = self.data.read() - self.data.close() - self.data = StringIO.StringIO() - self.data.write(remaining) - assert self.datalength - length == len(remaining) - self.datalength = len(remaining) - return chunk diff --git a/deps/v8/tools/testrunner/server/constants.py b/deps/v8/tools/testrunner/server/constants.py deleted file mode 100644 index 5aefcbad0d3..00000000000 --- a/deps/v8/tools/testrunner/server/constants.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -CLIENT_PORT = 9991 # Port for the local client to connect to. -PEER_PORT = 9992 # Port for peers on the network to connect to. -PRESENCE_PORT = 9993 # Port for presence daemon. -STATUS_PORT = 9994 # Port for network requests not related to workpackets. - -END_OF_STREAM = "end of dtest stream" # Marker for end of network requests. -SIZE_T = 4 # Number of bytes used for network request size header. - -# Messages understood by the local request handler. -ADD_TRUSTED = "add trusted" -INFORM_DURATION = "inform about duration" -REQUEST_PEERS = "get peers" -UNRESPONSIVE_PEER = "unresponsive peer" -REQUEST_PUBKEY_FINGERPRINT = "get pubkey fingerprint" -REQUEST_STATUS = "get status" -UPDATE_PERF = "update performance" - -# Messages understood by the status request handler. -LIST_TRUSTED_PUBKEYS = "list trusted pubkeys" -GET_SIGNED_PUBKEY = "pass on signed pubkey" -NOTIFY_NEW_TRUSTED = "new trusted peer" -TRUST_YOU_NOW = "trust you now" -DO_YOU_TRUST = "do you trust" diff --git a/deps/v8/tools/testrunner/server/daemon.py b/deps/v8/tools/testrunner/server/daemon.py deleted file mode 100644 index baa66fbea91..00000000000 --- a/deps/v8/tools/testrunner/server/daemon.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python - -# This code has been written by Sander Marechal and published at: -# http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ -# where the author has placed it in the public domain (see comment #6 at -# http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/#c6 -# ). -# Some minor modifications have been made by the V8 authors. The work remains -# in the public domain. - -import atexit -import os -from signal import SIGTERM -from signal import SIGINT -import sys -import time - - -class Daemon(object): - """ - A generic daemon class. - - Usage: subclass the Daemon class and override the run() method - """ - def __init__(self, pidfile, stdin='/dev/null', - stdout='/dev/null', stderr='/dev/null'): - self.stdin = stdin - self.stdout = stdout - self.stderr = stderr - self.pidfile = pidfile - - def daemonize(self): - """ - do the UNIX double-fork magic, see Stevens' "Advanced - Programming in the UNIX Environment" for details (ISBN 0201563177) - http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16 - """ - try: - pid = os.fork() - if pid > 0: - # exit first parent - sys.exit(0) - except OSError, e: - sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) - sys.exit(1) - - # decouple from parent environment - os.chdir("/") - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent - sys.exit(0) - except OSError, e: - sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) - sys.exit(1) - - # redirect standard file descriptors - sys.stdout.flush() - sys.stderr.flush() - si = file(self.stdin, 'r') - so = file(self.stdout, 'a+') - se = file(self.stderr, 'a+', 0) - # TODO: (debug) re-enable this! - #os.dup2(si.fileno(), sys.stdin.fileno()) - #os.dup2(so.fileno(), sys.stdout.fileno()) - #os.dup2(se.fileno(), sys.stderr.fileno()) - - # write pidfile - atexit.register(self.delpid) - pid = str(os.getpid()) - file(self.pidfile, 'w+').write("%s\n" % pid) - - def delpid(self): - os.remove(self.pidfile) - - def start(self): - """ - Start the daemon - """ - # Check for a pidfile to see if the daemon already runs - try: - pf = file(self.pidfile, 'r') - pid = int(pf.read().strip()) - pf.close() - except IOError: - pid = None - - if pid: - message = "pidfile %s already exist. Daemon already running?\n" - sys.stderr.write(message % self.pidfile) - sys.exit(1) - - # Start the daemon - self.daemonize() - self.run() - - def stop(self): - """ - Stop the daemon - """ - # Get the pid from the pidfile - try: - pf = file(self.pidfile, 'r') - pid = int(pf.read().strip()) - pf.close() - except IOError: - pid = None - - if not pid: - message = "pidfile %s does not exist. Daemon not running?\n" - sys.stderr.write(message % self.pidfile) - return # not an error in a restart - - # Try killing the daemon process - try: - # Give the process a one-second chance to exit gracefully. - os.kill(pid, SIGINT) - time.sleep(1) - while 1: - os.kill(pid, SIGTERM) - time.sleep(0.1) - except OSError, err: - err = str(err) - if err.find("No such process") > 0: - if os.path.exists(self.pidfile): - os.remove(self.pidfile) - else: - print str(err) - sys.exit(1) - - def restart(self): - """ - Restart the daemon - """ - self.stop() - self.start() - - def run(self): - """ - You should override this method when you subclass Daemon. It will be - called after the process has been daemonized by start() or restart(). - """ diff --git a/deps/v8/tools/testrunner/server/local_handler.py b/deps/v8/tools/testrunner/server/local_handler.py deleted file mode 100644 index 3b3ac495d0c..00000000000 --- a/deps/v8/tools/testrunner/server/local_handler.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import socket -import SocketServer -import StringIO - -from . import compression -from . import constants - - -def LocalQuery(query): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - code = sock.connect_ex(("localhost", constants.CLIENT_PORT)) - if code != 0: return None - compression.Send(query, sock) - compression.Send(constants.END_OF_STREAM, sock) - rec = compression.Receiver(sock) - data = None - while not rec.IsDone(): - data = rec.Current() - assert data[0] == query[0] - data = data[1] - rec.Advance() - sock.close() - return data - - -class LocalHandler(SocketServer.BaseRequestHandler): - def handle(self): - rec = compression.Receiver(self.request) - while not rec.IsDone(): - data = rec.Current() - action = data[0] - - if action == constants.REQUEST_PEERS: - with self.server.daemon.peer_list_lock: - response = [ p.Pack() for p in self.server.daemon.peers - if p.trusting_me ] - compression.Send([action, response], self.request) - - elif action == constants.UNRESPONSIVE_PEER: - self.server.daemon.DeletePeer(data[1]) - - elif action == constants.REQUEST_PUBKEY_FINGERPRINT: - compression.Send([action, self.server.daemon.pubkey_fingerprint], - self.request) - - elif action == constants.REQUEST_STATUS: - compression.Send([action, self._GetStatusMessage()], self.request) - - elif action == constants.ADD_TRUSTED: - fingerprint = self.server.daemon.CopyToTrusted(data[1]) - compression.Send([action, fingerprint], self.request) - - elif action == constants.INFORM_DURATION: - test_key = data[1] - test_duration = data[2] - arch = data[3] - mode = data[4] - self.server.daemon.AddPerfData(test_key, test_duration, arch, mode) - - elif action == constants.UPDATE_PERF: - address = data[1] - perf = data[2] - self.server.daemon.UpdatePeerPerformance(data[1], data[2]) - - rec.Advance() - compression.Send(constants.END_OF_STREAM, self.request) - - def _GetStatusMessage(self): - sio = StringIO.StringIO() - sio.write("Peers:\n") - with self.server.daemon.peer_list_lock: - for p in self.server.daemon.peers: - sio.write("%s\n" % p) - sio.write("My own jobs: %d, relative performance: %.2f\n" % - (self.server.daemon.jobs, self.server.daemon.relative_perf)) - # Low-priority TODO: Return more information. Ideas: - # - currently running anything, - # - time since last job, - # - time since last repository fetch - # - number of workpackets/testcases handled since startup - # - slowest test(s) - result = sio.getvalue() - sio.close() - return result - - -class LocalSocketServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): - def __init__(self, daemon): - SocketServer.TCPServer.__init__(self, ("localhost", constants.CLIENT_PORT), - LocalHandler) - self.daemon = daemon diff --git a/deps/v8/tools/testrunner/server/main.py b/deps/v8/tools/testrunner/server/main.py deleted file mode 100644 index c237e1adb4c..00000000000 --- a/deps/v8/tools/testrunner/server/main.py +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import multiprocessing -import os -import shutil -import subprocess -import threading -import time - -from . import daemon -from . import local_handler -from . import presence_handler -from . import signatures -from . import status_handler -from . import work_handler -from ..network import perfdata - - -class Server(daemon.Daemon): - - def __init__(self, pidfile, root, stdin="/dev/null", - stdout="/dev/null", stderr="/dev/null"): - super(Server, self).__init__(pidfile, stdin, stdout, stderr) - self.root = root - self.local_handler = None - self.local_handler_thread = None - self.work_handler = None - self.work_handler_thread = None - self.status_handler = None - self.status_handler_thread = None - self.presence_daemon = None - self.presence_daemon_thread = None - self.peers = [] - self.jobs = multiprocessing.cpu_count() - self.peer_list_lock = threading.Lock() - self.perf_data_lock = None - self.presence_daemon_lock = None - self.datadir = os.path.join(self.root, "data") - pubkey_fingerprint_filename = os.path.join(self.datadir, "mypubkey") - with open(pubkey_fingerprint_filename) as f: - self.pubkey_fingerprint = f.read().strip() - self.relative_perf_filename = os.path.join(self.datadir, "myperf") - if os.path.exists(self.relative_perf_filename): - with open(self.relative_perf_filename) as f: - try: - self.relative_perf = float(f.read()) - except: - self.relative_perf = 1.0 - else: - self.relative_perf = 1.0 - - def run(self): - os.nice(20) - self.ip = presence_handler.GetOwnIP() - self.perf_data_manager = perfdata.PerfDataManager(self.datadir) - self.perf_data_lock = threading.Lock() - - self.local_handler = local_handler.LocalSocketServer(self) - self.local_handler_thread = threading.Thread( - target=self.local_handler.serve_forever) - self.local_handler_thread.start() - - self.work_handler = work_handler.WorkSocketServer(self) - self.work_handler_thread = threading.Thread( - target=self.work_handler.serve_forever) - self.work_handler_thread.start() - - self.status_handler = status_handler.StatusSocketServer(self) - self.status_handler_thread = threading.Thread( - target=self.status_handler.serve_forever) - self.status_handler_thread.start() - - self.presence_daemon = presence_handler.PresenceDaemon(self) - self.presence_daemon_thread = threading.Thread( - target=self.presence_daemon.serve_forever) - self.presence_daemon_thread.start() - - self.presence_daemon.FindPeers() - time.sleep(0.5) # Give those peers some time to reply. - - with self.peer_list_lock: - for p in self.peers: - if p.address == self.ip: continue - status_handler.RequestTrustedPubkeys(p, self) - - while True: - try: - self.PeriodicTasks() - time.sleep(60) - except Exception, e: - print("MAIN LOOP EXCEPTION: %s" % e) - self.Shutdown() - break - except KeyboardInterrupt: - self.Shutdown() - break - - def Shutdown(self): - with open(self.relative_perf_filename, "w") as f: - f.write("%s" % self.relative_perf) - self.presence_daemon.shutdown() - self.presence_daemon.server_close() - self.local_handler.shutdown() - self.local_handler.server_close() - self.work_handler.shutdown() - self.work_handler.server_close() - self.status_handler.shutdown() - self.status_handler.server_close() - - def PeriodicTasks(self): - # If we know peers we don't trust, see if someone else trusts them. - with self.peer_list_lock: - for p in self.peers: - if p.trusted: continue - if self.IsTrusted(p.pubkey): - p.trusted = True - status_handler.ITrustYouNow(p) - continue - for p2 in self.peers: - if not p2.trusted: continue - status_handler.TryTransitiveTrust(p2, p.pubkey, self) - # TODO: Ping for more peers waiting to be discovered. - # TODO: Update the checkout (if currently idle). - - def AddPeer(self, peer): - with self.peer_list_lock: - for p in self.peers: - if p.address == peer.address: - return - self.peers.append(peer) - if peer.trusted: - status_handler.ITrustYouNow(peer) - - def DeletePeer(self, peer_address): - with self.peer_list_lock: - for i in xrange(len(self.peers)): - if self.peers[i].address == peer_address: - del self.peers[i] - return - - def MarkPeerAsTrusting(self, peer_address): - with self.peer_list_lock: - for p in self.peers: - if p.address == peer_address: - p.trusting_me = True - break - - def UpdatePeerPerformance(self, peer_address, performance): - with self.peer_list_lock: - for p in self.peers: - if p.address == peer_address: - p.relative_performance = performance - - def CopyToTrusted(self, pubkey_filename): - with open(pubkey_filename, "r") as f: - lines = f.readlines() - fingerprint = lines[-1].strip() - target_filename = self._PubkeyFilename(fingerprint) - shutil.copy(pubkey_filename, target_filename) - with self.peer_list_lock: - for peer in self.peers: - if peer.address == self.ip: continue - if peer.pubkey == fingerprint: - status_handler.ITrustYouNow(peer) - else: - result = self.SignTrusted(fingerprint) - status_handler.NotifyNewTrusted(peer, result) - return fingerprint - - def _PubkeyFilename(self, pubkey_fingerprint): - return os.path.join(self.root, "trusted", "%s.pem" % pubkey_fingerprint) - - def IsTrusted(self, pubkey_fingerprint): - return os.path.exists(self._PubkeyFilename(pubkey_fingerprint)) - - def ListTrusted(self): - path = os.path.join(self.root, "trusted") - if not os.path.exists(path): return [] - return [ f[:-4] for f in os.listdir(path) if f.endswith(".pem") ] - - def SignTrusted(self, pubkey_fingerprint): - if not self.IsTrusted(pubkey_fingerprint): - return [] - filename = self._PubkeyFilename(pubkey_fingerprint) - result = signatures.ReadFileAndSignature(filename) # Format: [key, sig]. - return [pubkey_fingerprint, result[0], result[1], self.pubkey_fingerprint] - - def AcceptNewTrusted(self, data): - # The format of |data| matches the return value of |SignTrusted()|. - if not data: return - fingerprint = data[0] - pubkey = data[1] - signature = data[2] - signer = data[3] - if not self.IsTrusted(signer): - return - if self.IsTrusted(fingerprint): - return # Already trusted. - filename = self._PubkeyFilename(fingerprint) - signer_pubkeyfile = self._PubkeyFilename(signer) - if not signatures.VerifySignature(filename, pubkey, signature, - signer_pubkeyfile): - return - return # Nothing more to do. - - def AddPerfData(self, test_key, duration, arch, mode): - data_store = self.perf_data_manager.GetStore(arch, mode) - data_store.RawUpdatePerfData(str(test_key), duration) - - def CompareOwnPerf(self, test, arch, mode): - data_store = self.perf_data_manager.GetStore(arch, mode) - observed = data_store.FetchPerfData(test) - if not observed: return - own_perf_estimate = observed / test.duration - with self.perf_data_lock: - kLearnRateLimiter = 9999 - self.relative_perf *= kLearnRateLimiter - self.relative_perf += own_perf_estimate - self.relative_perf /= (kLearnRateLimiter + 1) diff --git a/deps/v8/tools/testrunner/server/presence_handler.py b/deps/v8/tools/testrunner/server/presence_handler.py deleted file mode 100644 index 1dc2ef163ab..00000000000 --- a/deps/v8/tools/testrunner/server/presence_handler.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import socket -import SocketServer -import threading -try: - import ujson as json -except: - import json - -from . import constants -from ..objects import peer - - -STARTUP_REQUEST = "V8 test peer starting up" -STARTUP_RESPONSE = "Let's rock some tests!" -EXIT_REQUEST = "V8 testing peer going down" - - -def GetOwnIP(): - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - s.connect(("8.8.8.8", 80)) - ip = s.getsockname()[0] - s.close() - return ip - - -class PresenceHandler(SocketServer.BaseRequestHandler): - - def handle(self): - data = json.loads(self.request[0].strip()) - - if data[0] == STARTUP_REQUEST: - jobs = data[1] - relative_perf = data[2] - pubkey_fingerprint = data[3] - trusted = self.server.daemon.IsTrusted(pubkey_fingerprint) - response = [STARTUP_RESPONSE, self.server.daemon.jobs, - self.server.daemon.relative_perf, - self.server.daemon.pubkey_fingerprint, trusted] - response = json.dumps(response) - self.server.SendTo(self.client_address[0], response) - p = peer.Peer(self.client_address[0], jobs, relative_perf, - pubkey_fingerprint) - p.trusted = trusted - self.server.daemon.AddPeer(p) - - elif data[0] == STARTUP_RESPONSE: - jobs = data[1] - perf = data[2] - pubkey_fingerprint = data[3] - p = peer.Peer(self.client_address[0], jobs, perf, pubkey_fingerprint) - p.trusted = self.server.daemon.IsTrusted(pubkey_fingerprint) - p.trusting_me = data[4] - self.server.daemon.AddPeer(p) - - elif data[0] == EXIT_REQUEST: - self.server.daemon.DeletePeer(self.client_address[0]) - if self.client_address[0] == self.server.daemon.ip: - self.server.shutdown_lock.release() - - -class PresenceDaemon(SocketServer.ThreadingMixIn, SocketServer.UDPServer): - def __init__(self, daemon): - self.daemon = daemon - address = (daemon.ip, constants.PRESENCE_PORT) - SocketServer.UDPServer.__init__(self, address, PresenceHandler) - self.shutdown_lock = threading.Lock() - - def shutdown(self): - self.shutdown_lock.acquire() - self.SendToAll(json.dumps([EXIT_REQUEST])) - self.shutdown_lock.acquire() - self.shutdown_lock.release() - SocketServer.UDPServer.shutdown(self) - - def SendTo(self, target, message): - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.sendto(message, (target, constants.PRESENCE_PORT)) - sock.close() - - def SendToAll(self, message): - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - ip = self.daemon.ip.split(".") - for i in range(1, 254): - ip[-1] = str(i) - sock.sendto(message, (".".join(ip), constants.PRESENCE_PORT)) - sock.close() - - def FindPeers(self): - request = [STARTUP_REQUEST, self.daemon.jobs, self.daemon.relative_perf, - self.daemon.pubkey_fingerprint] - request = json.dumps(request) - self.SendToAll(request) diff --git a/deps/v8/tools/testrunner/server/signatures.py b/deps/v8/tools/testrunner/server/signatures.py deleted file mode 100644 index 9957a18a267..00000000000 --- a/deps/v8/tools/testrunner/server/signatures.py +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import base64 -import os -import subprocess - - -def ReadFileAndSignature(filename): - with open(filename, "rb") as f: - file_contents = base64.b64encode(f.read()) - signature_file = filename + ".signature" - if (not os.path.exists(signature_file) or - os.path.getmtime(signature_file) < os.path.getmtime(filename)): - private_key = "~/.ssh/v8_dtest" - code = subprocess.call("openssl dgst -out %s -sign %s %s" % - (signature_file, private_key, filename), - shell=True) - if code != 0: return [None, code] - with open(signature_file) as f: - signature = base64.b64encode(f.read()) - return [file_contents, signature] - - -def VerifySignature(filename, file_contents, signature, pubkeyfile): - with open(filename, "wb") as f: - f.write(base64.b64decode(file_contents)) - signature_file = filename + ".foreign_signature" - with open(signature_file, "wb") as f: - f.write(base64.b64decode(signature)) - code = subprocess.call("openssl dgst -verify %s -signature %s %s" % - (pubkeyfile, signature_file, filename), - shell=True) - matched = (code == 0) - if not matched: - os.remove(signature_file) - os.remove(filename) - return matched diff --git a/deps/v8/tools/testrunner/server/status_handler.py b/deps/v8/tools/testrunner/server/status_handler.py deleted file mode 100644 index 3f2271dc697..00000000000 --- a/deps/v8/tools/testrunner/server/status_handler.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import socket -import SocketServer - -from . import compression -from . import constants - - -def _StatusQuery(peer, query): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - code = sock.connect_ex((peer.address, constants.STATUS_PORT)) - if code != 0: - # TODO(jkummerow): disconnect (after 3 failures?) - return - compression.Send(query, sock) - compression.Send(constants.END_OF_STREAM, sock) - rec = compression.Receiver(sock) - data = None - while not rec.IsDone(): - data = rec.Current() - assert data[0] == query[0] - data = data[1] - rec.Advance() - sock.close() - return data - - -def RequestTrustedPubkeys(peer, server): - pubkey_list = _StatusQuery(peer, [constants.LIST_TRUSTED_PUBKEYS]) - for pubkey in pubkey_list: - if server.IsTrusted(pubkey): continue - result = _StatusQuery(peer, [constants.GET_SIGNED_PUBKEY, pubkey]) - server.AcceptNewTrusted(result) - - -def NotifyNewTrusted(peer, data): - _StatusQuery(peer, [constants.NOTIFY_NEW_TRUSTED] + data) - - -def ITrustYouNow(peer): - _StatusQuery(peer, [constants.TRUST_YOU_NOW]) - - -def TryTransitiveTrust(peer, pubkey, server): - if _StatusQuery(peer, [constants.DO_YOU_TRUST, pubkey]): - result = _StatusQuery(peer, [constants.GET_SIGNED_PUBKEY, pubkey]) - server.AcceptNewTrusted(result) - - -class StatusHandler(SocketServer.BaseRequestHandler): - def handle(self): - rec = compression.Receiver(self.request) - while not rec.IsDone(): - data = rec.Current() - action = data[0] - - if action == constants.LIST_TRUSTED_PUBKEYS: - response = self.server.daemon.ListTrusted() - compression.Send([action, response], self.request) - - elif action == constants.GET_SIGNED_PUBKEY: - response = self.server.daemon.SignTrusted(data[1]) - compression.Send([action, response], self.request) - - elif action == constants.NOTIFY_NEW_TRUSTED: - self.server.daemon.AcceptNewTrusted(data[1:]) - pass # No response. - - elif action == constants.TRUST_YOU_NOW: - self.server.daemon.MarkPeerAsTrusting(self.client_address[0]) - pass # No response. - - elif action == constants.DO_YOU_TRUST: - response = self.server.daemon.IsTrusted(data[1]) - compression.Send([action, response], self.request) - - rec.Advance() - compression.Send(constants.END_OF_STREAM, self.request) - - -class StatusSocketServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): - def __init__(self, daemon): - address = (daemon.ip, constants.STATUS_PORT) - SocketServer.TCPServer.__init__(self, address, StatusHandler) - self.daemon = daemon diff --git a/deps/v8/tools/testrunner/server/work_handler.py b/deps/v8/tools/testrunner/server/work_handler.py deleted file mode 100644 index 6bf7d43cf94..00000000000 --- a/deps/v8/tools/testrunner/server/work_handler.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2012 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import os -import SocketServer -import stat -import subprocess -import threading - -from . import compression -from . import constants -from . import signatures -from ..network import endpoint -from ..objects import workpacket - - -class WorkHandler(SocketServer.BaseRequestHandler): - - def handle(self): - rec = compression.Receiver(self.request) - while not rec.IsDone(): - data = rec.Current() - with self.server.job_lock: - self._WorkOnWorkPacket(data) - rec.Advance() - - def _WorkOnWorkPacket(self, data): - server_root = self.server.daemon.root - v8_root = os.path.join(server_root, "v8") - os.chdir(v8_root) - packet = workpacket.WorkPacket.Unpack(data) - self.ctx = packet.context - self.ctx.shell_dir = os.path.join("out", - "%s.%s" % (self.ctx.arch, self.ctx.mode)) - if not os.path.isdir(self.ctx.shell_dir): - os.makedirs(self.ctx.shell_dir) - for binary in packet.binaries: - if not self._UnpackBinary(binary, packet.pubkey_fingerprint): - return - - if not self._CheckoutRevision(packet.base_revision): - return - - if not self._ApplyPatch(packet.patch): - return - - tests = packet.tests - endpoint.Execute(v8_root, self.ctx, tests, self.request, self.server.daemon) - self._SendResponse() - - def _SendResponse(self, error_message=None): - try: - if error_message: - compression.Send([[-1, error_message]], self.request) - compression.Send(constants.END_OF_STREAM, self.request) - return - except Exception, e: - pass # Peer is gone. There's nothing we can do. - # Clean up. - self._Call("git checkout -f") - self._Call("git clean -f -d") - self._Call("rm -rf %s" % self.ctx.shell_dir) - - def _UnpackBinary(self, binary, pubkey_fingerprint): - binary_name = binary["name"] - if binary_name == "libv8.so": - libdir = os.path.join(self.ctx.shell_dir, "lib.target") - if not os.path.exists(libdir): os.makedirs(libdir) - target = os.path.join(libdir, binary_name) - else: - target = os.path.join(self.ctx.shell_dir, binary_name) - pubkeyfile = "../trusted/%s.pem" % pubkey_fingerprint - if not signatures.VerifySignature(target, binary["blob"], - binary["sign"], pubkeyfile): - self._SendResponse("Signature verification failed") - return False - os.chmod(target, stat.S_IRWXU) - return True - - def _CheckoutRevision(self, base_svn_revision): - get_hash_cmd = ( - "git log -1 --format=%%H --remotes --grep='^git-svn-id:.*@%s'" % - base_svn_revision) - try: - base_revision = subprocess.check_output(get_hash_cmd, shell=True) - if not base_revision: raise ValueError - except: - self._Call("git fetch") - try: - base_revision = subprocess.check_output(get_hash_cmd, shell=True) - if not base_revision: raise ValueError - except: - self._SendResponse("Base revision not found.") - return False - code = self._Call("git checkout -f %s" % base_revision) - if code != 0: - self._SendResponse("Error trying to check out base revision.") - return False - code = self._Call("git clean -f -d") - if code != 0: - self._SendResponse("Failed to reset checkout") - return False - return True - - def _ApplyPatch(self, patch): - if not patch: return True # Just skip if the patch is empty. - patchfilename = "_dtest_incoming_patch.patch" - with open(patchfilename, "w") as f: - f.write(patch) - code = self._Call("git apply %s" % patchfilename) - if code != 0: - self._SendResponse("Error applying patch.") - return False - return True - - def _Call(self, cmd): - return subprocess.call(cmd, shell=True) - - -class WorkSocketServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): - def __init__(self, daemon): - address = (daemon.ip, constants.PEER_PORT) - SocketServer.TCPServer.__init__(self, address, WorkHandler) - self.job_lock = threading.Lock() - self.daemon = daemon diff --git a/deps/v8/tools/testrunner/standard_runner.py b/deps/v8/tools/testrunner/standard_runner.py new file mode 100755 index 00000000000..52077ffc1bf --- /dev/null +++ b/deps/v8/tools/testrunner/standard_runner.py @@ -0,0 +1,558 @@ +#!/usr/bin/env python +# +# Copyright 2017 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +from collections import OrderedDict +from os.path import join +import multiprocessing +import os +import random +import shlex +import subprocess +import sys +import time + +# Adds testrunner to the path hence it has to be imported at the beggining. +import base_runner + +from testrunner.local import execution +from testrunner.local import progress +from testrunner.local import testsuite +from testrunner.local import utils +from testrunner.local import verbose +from testrunner.local.variants import ALL_VARIANTS +from testrunner.objects import context + + +TIMEOUT_DEFAULT = 60 + +# Variants ordered by expected runtime (slowest first). +VARIANTS = ["default"] + +MORE_VARIANTS = [ + "stress", + "stress_incremental_marking", + "nooptimization", + "stress_background_compile", + "wasm_traps", +] + +VARIANT_ALIASES = { + # The default for developer workstations. + "dev": VARIANTS, + # Additional variants, run on all bots. + "more": MORE_VARIANTS, + # Shortcut for the two above ("more" first - it has the longer running tests). + "exhaustive": MORE_VARIANTS + VARIANTS, + # Additional variants, run on a subset of bots. + "extra": ["future", "liftoff"], +} + +GC_STRESS_FLAGS = ["--gc-interval=500", "--stress-compaction", + "--concurrent-recompilation-queue-length=64", + "--concurrent-recompilation-delay=500", + "--concurrent-recompilation"] + +# Double the timeout for these: +SLOW_ARCHS = ["arm", + "mips", + "mipsel", + "mips64", + "mips64el", + "s390", + "s390x", + "arm64"] + +PREDICTABLE_WRAPPER = os.path.join( + base_runner.BASE_DIR, 'tools', 'predictable_wrapper.py') + + +class StandardTestRunner(base_runner.BaseTestRunner): + def __init__(self): + super(StandardTestRunner, self).__init__() + + self.sancov_dir = None + + def _do_execute(self, options, args): + if options.swarming: + # Swarming doesn't print how isolated commands are called. Lets make + # this less cryptic by printing it ourselves. + print ' '.join(sys.argv) + + if utils.GuessOS() == "macos": + # TODO(machenbach): Temporary output for investigating hanging test + # driver on mac. + print "V8 related processes running on this host:" + try: + print subprocess.check_output( + "ps -e | egrep 'd8|cctest|unittests'", shell=True) + except Exception: + pass + + suite_paths = utils.GetSuitePaths(join(base_runner.BASE_DIR, "test")) + + # Use default tests if no test configuration was provided at the cmd line. + if len(args) == 0: + args = ["default"] + + # Expand arguments with grouped tests. The args should reflect the list + # of suites as otherwise filters would break. + def ExpandTestGroups(name): + if name in base_runner.TEST_MAP: + return [suite for suite in base_runner.TEST_MAP[name]] + else: + return [name] + args = reduce(lambda x, y: x + y, + [ExpandTestGroups(arg) for arg in args], + []) + + args_suites = OrderedDict() # Used as set + for arg in args: + args_suites[arg.split('/')[0]] = True + suite_paths = [ s for s in args_suites if s in suite_paths ] + + suites = [] + for root in suite_paths: + if options.verbose: + print '>>> Loading test suite: %s' % root + suite = testsuite.TestSuite.LoadTestSuite( + os.path.join(base_runner.BASE_DIR, "test", root)) + if suite: + suites.append(suite) + + try: + return self._execute(args, options, suites) + except KeyboardInterrupt: + return 2 + + def _add_parser_options(self, parser): + parser.add_option("--sancov-dir", + help="Directory where to collect coverage data") + parser.add_option("--cfi-vptr", + help="Run tests with UBSAN cfi_vptr option.", + default=False, action="store_true") + parser.add_option("--novfp3", + help="Indicates that V8 was compiled without VFP3" + " support", + default=False, action="store_true") + parser.add_option("--cat", help="Print the source of the tests", + default=False, action="store_true") + parser.add_option("--slow-tests", + help="Regard slow tests (run|skip|dontcare)", + default="dontcare") + parser.add_option("--pass-fail-tests", + help="Regard pass|fail tests (run|skip|dontcare)", + default="dontcare") + parser.add_option("--gc-stress", + help="Switch on GC stress mode", + default=False, action="store_true") + parser.add_option("--command-prefix", + help="Prepended to each shell command used to run a" + " test", + default="") + parser.add_option("--extra-flags", + help="Additional flags to pass to each test command", + action="append", default=[]) + parser.add_option("--isolates", help="Whether to test isolates", + default=False, action="store_true") + parser.add_option("-j", help="The number of parallel tasks to run", + default=0, type="int") + parser.add_option("--no-harness", "--noharness", + help="Run without test harness of a given suite", + default=False, action="store_true") + parser.add_option("--no-presubmit", "--nopresubmit", + help='Skip presubmit checks (deprecated)', + default=False, dest="no_presubmit", action="store_true") + parser.add_option("--no-sorting", "--nosorting", + help="Don't sort tests according to duration of last" + " run.", + default=False, dest="no_sorting", action="store_true") + parser.add_option("--no-variants", "--novariants", + help="Deprecated. " + "Equivalent to passing --variants=default", + default=False, dest="no_variants", action="store_true") + parser.add_option("--variants", + help="Comma-separated list of testing variants;" + " default: \"%s\"" % ",".join(VARIANTS)) + parser.add_option("--exhaustive-variants", + default=False, action="store_true", + help="Deprecated. " + "Equivalent to passing --variants=exhaustive") + parser.add_option("-p", "--progress", + help=("The style of progress indicator" + " (verbose, dots, color, mono)"), + choices=progress.PROGRESS_INDICATORS.keys(), + default="mono") + parser.add_option("--quickcheck", default=False, action="store_true", + help=("Quick check mode (skip slow tests)")) + parser.add_option("--report", help="Print a summary of the tests to be" + " run", + default=False, action="store_true") + parser.add_option("--json-test-results", + help="Path to a file for storing json results.") + parser.add_option("--flakiness-results", + help="Path to a file for storing flakiness json.") + parser.add_option("--rerun-failures-count", + help=("Number of times to rerun each failing test case." + " Very slow tests will be rerun only once."), + default=0, type="int") + parser.add_option("--rerun-failures-max", + help="Maximum number of failing test cases to rerun.", + default=100, type="int") + parser.add_option("--shard-count", + help="Split testsuites into this number of shards", + default=1, type="int") + parser.add_option("--shard-run", + help="Run this shard from the split up tests.", + default=1, type="int") + parser.add_option("--dont-skip-slow-simulator-tests", + help="Don't skip more slow tests when using a" + " simulator.", + default=False, action="store_true", + dest="dont_skip_simulator_slow_tests") + parser.add_option("--swarming", + help="Indicates running test driver on swarming.", + default=False, action="store_true") + parser.add_option("--time", help="Print timing information after running", + default=False, action="store_true") + parser.add_option("-t", "--timeout", help="Timeout in seconds", + default=TIMEOUT_DEFAULT, type="int") + parser.add_option("--warn-unused", help="Report unused rules", + default=False, action="store_true") + parser.add_option("--junitout", help="File name of the JUnit output") + parser.add_option("--junittestsuite", + help="The testsuite name in the JUnit output file", + default="v8tests") + parser.add_option("--random-seed", default=0, dest="random_seed", + help="Default seed for initializing random generator", + type=int) + parser.add_option("--random-seed-stress-count", default=1, type="int", + dest="random_seed_stress_count", + help="Number of runs with different random seeds") + + def _process_options(self, options): + global VARIANTS + + if options.sancov_dir: + self.sancov_dir = options.sancov_dir + if not os.path.exists(self.sancov_dir): + print("sancov-dir %s doesn't exist" % self.sancov_dir) + raise base_runner.TestRunnerError() + + options.command_prefix = shlex.split(options.command_prefix) + options.extra_flags = sum(map(shlex.split, options.extra_flags), []) + + if options.gc_stress: + options.extra_flags += GC_STRESS_FLAGS + + if self.build_config.asan: + options.extra_flags.append("--invoke-weak-callbacks") + options.extra_flags.append("--omit-quit") + + if options.novfp3: + options.extra_flags.append("--noenable-vfp3") + + if options.no_variants: + print ("Option --no-variants is deprecated. " + "Pass --variants=default instead.") + assert not options.variants + options.variants = "default" + + if options.exhaustive_variants: + # TODO(machenbach): Switch infra to --variants=exhaustive after M65. + print ("Option --exhaustive-variants is deprecated. " + "Pass --variants=exhaustive instead.") + # This is used on many bots. It includes a larger set of default + # variants. + # Other options for manipulating variants still apply afterwards. + assert not options.variants + options.variants = "exhaustive" + + if options.quickcheck: + assert not options.variants + options.variants = "stress,default" + options.slow_tests = "skip" + options.pass_fail_tests = "skip" + + if self.build_config.predictable: + options.variants = "default" + options.extra_flags.append("--predictable") + options.extra_flags.append("--verify_predictable") + options.extra_flags.append("--no-inline-new") + # Add predictable wrapper to command prefix. + options.command_prefix.append(sys.executable) + options.command_prefix.append(PREDICTABLE_WRAPPER) + + # TODO(machenbach): Figure out how to test a bigger subset of variants on + # msan. + if self.build_config.msan: + options.variants = "default" + + if options.j == 0: + options.j = multiprocessing.cpu_count() + + if options.random_seed_stress_count <= 1 and options.random_seed == 0: + options.random_seed = self._random_seed() + + # Use developer defaults if no variant was specified. + options.variants = options.variants or "dev" + + # Resolve variant aliases and dedupe. + # TODO(machenbach): Don't mutate global variable. Rather pass mutated + # version as local variable. + VARIANTS = list(set(reduce( + list.__add__, + (VARIANT_ALIASES.get(v, [v]) for v in options.variants.split(",")), + [], + ))) + + if not set(VARIANTS).issubset(ALL_VARIANTS): + print "All variants must be in %s" % str(ALL_VARIANTS) + raise base_runner.TestRunnerError() + + def CheckTestMode(name, option): + if not option in ["run", "skip", "dontcare"]: + print "Unknown %s mode %s" % (name, option) + raise base_runner.TestRunnerError() + CheckTestMode("slow test", options.slow_tests) + CheckTestMode("pass|fail test", options.pass_fail_tests) + if self.build_config.no_i18n: + base_runner.TEST_MAP["bot_default"].remove("intl") + base_runner.TEST_MAP["default"].remove("intl") + + def _setup_env(self): + super(StandardTestRunner, self)._setup_env() + + symbolizer_option = self._get_external_symbolizer_option() + + if self.sancov_dir: + os.environ['ASAN_OPTIONS'] = ":".join([ + 'coverage=1', + 'coverage_dir=%s' % self.sancov_dir, + symbolizer_option, + "allow_user_segv_handler=1", + ]) + + def _random_seed(self): + seed = 0 + while not seed: + seed = random.SystemRandom().randint(-2147483648, 2147483647) + return seed + + def _execute(self, args, options, suites): + print(">>> Running tests for %s.%s" % (self.build_config.arch, + self.mode_name)) + # Populate context object. + + # Simulators are slow, therefore allow a longer timeout. + if self.build_config.arch in SLOW_ARCHS: + options.timeout *= 2 + + options.timeout *= self.mode_options.timeout_scalefactor + + if self.build_config.predictable: + # Predictable mode is slower. + options.timeout *= 2 + + ctx = context.Context(self.build_config.arch, + self.mode_options.execution_mode, + self.outdir, + self.mode_options.flags, + options.verbose, + options.timeout, + options.isolates, + options.command_prefix, + options.extra_flags, + self.build_config.no_i18n, + options.random_seed, + options.no_sorting, + options.rerun_failures_count, + options.rerun_failures_max, + self.build_config.predictable, + options.no_harness, + use_perf_data=not options.swarming, + sancov_dir=self.sancov_dir) + + # TODO(all): Combine "simulator" and "simulator_run". + # TODO(machenbach): In GN we can derive simulator run from + # target_arch != v8_target_arch in the dumped build config. + simulator_run = ( + not options.dont_skip_simulator_slow_tests and + self.build_config.arch in [ + 'arm64', 'arm', 'mipsel', 'mips', 'mips64', 'mips64el', 'ppc', + 'ppc64', 's390', 's390x'] and + bool(base_runner.ARCH_GUESS) and + self.build_config.arch != base_runner.ARCH_GUESS) + # Find available test suites and read test cases from them. + variables = { + "arch": self.build_config.arch, + "asan": self.build_config.asan, + "byteorder": sys.byteorder, + "dcheck_always_on": self.build_config.dcheck_always_on, + "deopt_fuzzer": False, + "gc_fuzzer": False, + "gc_stress": options.gc_stress, + "gcov_coverage": self.build_config.gcov_coverage, + "isolates": options.isolates, + "mode": self.mode_options.status_mode, + "msan": self.build_config.msan, + "no_harness": options.no_harness, + "no_i18n": self.build_config.no_i18n, + "no_snap": self.build_config.no_snap, + "novfp3": options.novfp3, + "predictable": self.build_config.predictable, + "simulator": utils.UseSimulator(self.build_config.arch), + "simulator_run": simulator_run, + "system": utils.GuessOS(), + "tsan": self.build_config.tsan, + "ubsan_vptr": self.build_config.ubsan_vptr, + } + all_tests = [] + num_tests = 0 + for s in suites: + s.ReadStatusFile(variables) + s.ReadTestCases(ctx) + if len(args) > 0: + s.FilterTestCasesByArgs(args) + all_tests += s.tests + + # First filtering by status applying the generic rules (tests without + # variants) + if options.warn_unused: + s.WarnUnusedRules(check_variant_rules=False) + s.FilterTestCasesByStatus(options.slow_tests, options.pass_fail_tests) + + if options.cat: + verbose.PrintTestSource(s.tests) + continue + variant_gen = s.CreateVariantGenerator(VARIANTS) + variant_tests = [ t.create_variant(v, flags) + for t in s.tests + for v in variant_gen.FilterVariantsByTest(t) + for flags in variant_gen.GetFlagSets(t, v) ] + + if options.random_seed_stress_count > 1: + # Duplicate test for random seed stress mode. + def iter_seed_flags(): + for _ in range(0, options.random_seed_stress_count): + # Use given random seed for all runs (set by default in + # execution.py) or a new random seed if none is specified. + if options.random_seed: + yield [] + else: + yield ["--random-seed=%d" % self._random_seed()] + s.tests = [ + t.create_variant(t.variant, flags) + for t in variant_tests + for flags in iter_seed_flags() + ] + else: + s.tests = variant_tests + + # Second filtering by status applying also the variant-dependent rules. + if options.warn_unused: + s.WarnUnusedRules(check_variant_rules=True) + s.FilterTestCasesByStatus(options.slow_tests, options.pass_fail_tests) + s.tests = self._shard_tests(s.tests, options) + + for t in s.tests: + t.cmd = t.get_command(ctx) + + num_tests += len(s.tests) + + if options.cat: + return 0 # We're done here. + + if options.report: + verbose.PrintReport(all_tests) + + # Run the tests. + start_time = time.time() + progress_indicator = progress.IndicatorNotifier() + progress_indicator.Register( + progress.PROGRESS_INDICATORS[options.progress]()) + if options.junitout: + progress_indicator.Register(progress.JUnitTestProgressIndicator( + options.junitout, options.junittestsuite)) + if options.json_test_results: + progress_indicator.Register(progress.JsonTestProgressIndicator( + options.json_test_results, + self.build_config.arch, + self.mode_options.execution_mode, + ctx.random_seed)) + if options.flakiness_results: + progress_indicator.Register(progress.FlakinessTestProgressIndicator( + options.flakiness_results)) + + runner = execution.Runner(suites, progress_indicator, ctx) + exit_code = runner.Run(options.j) + overall_duration = time.time() - start_time + + if options.time: + verbose.PrintTestDurations(suites, runner.outputs, overall_duration) + + if num_tests == 0: + print("Warning: no tests were run!") + + if exit_code == 1 and options.json_test_results: + print("Force exit code 0 after failures. Json test results file " + "generated with failure information.") + exit_code = 0 + + if self.sancov_dir: + # If tests ran with sanitizer coverage, merge coverage files in the end. + try: + print "Merging sancov files." + subprocess.check_call([ + sys.executable, + join( + base_runner.BASE_DIR, "tools", "sanitizers", "sancov_merger.py"), + "--coverage-dir=%s" % self.sancov_dir]) + except: + print >> sys.stderr, "Error: Merging sancov files failed." + exit_code = 1 + + return exit_code + + def _shard_tests(self, tests, options): + # Read gtest shard configuration from environment (e.g. set by swarming). + # If none is present, use values passed on the command line. + shard_count = int( + os.environ.get('GTEST_TOTAL_SHARDS', options.shard_count)) + shard_run = os.environ.get('GTEST_SHARD_INDEX') + if shard_run is not None: + # The v8 shard_run starts at 1, while GTEST_SHARD_INDEX starts at 0. + shard_run = int(shard_run) + 1 + else: + shard_run = options.shard_run + + if options.shard_count > 1: + # Log if a value was passed on the cmd line and it differs from the + # environment variables. + if options.shard_count != shard_count: + print("shard_count from cmd line differs from environment variable " + "GTEST_TOTAL_SHARDS") + if options.shard_run > 1 and options.shard_run != shard_run: + print("shard_run from cmd line differs from environment variable " + "GTEST_SHARD_INDEX") + + if shard_count < 2: + return tests + if shard_run < 1 or shard_run > shard_count: + print "shard-run not a valid number, should be in [1:shard-count]" + print "defaulting back to running all tests" + return tests + count = 0 + shard = [] + for test in tests: + if count % shard_count == shard_run - 1: + shard.append(test) + count += 1 + return shard + + +if __name__ == '__main__': + sys.exit(StandardTestRunner().execute()) diff --git a/deps/v8/tools/tick-processor.html b/deps/v8/tools/tick-processor.html index 3cb4a0b2c36..b841cc0bd32 100644 --- a/deps/v8/tools/tick-processor.html +++ b/deps/v8/tools/tick-processor.html @@ -50,6 +50,7 @@ +