Merge pull request #63 from vtil-project/gh-actions

Switch to GitHub Actions
This commit is contained in:
Duncan Ogilvie 2022-01-10 22:10:23 +01:00 committed by GitHub
commit 36ae17d153
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 85 additions and 78 deletions

42
.github/workflows/build.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: CMake
on: [push, pull_request]
jobs:
build:
# Skip building pull requests from the same repository
if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-2019, ubuntu-20.04, macos-11]
env:
BUILD_TYPE: Release
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install ninja-build tool
uses: seanmiddleditch/gha-setup-ninja@v3
- name: Enable Developer Command Prompt
if: ${{ runner.os == 'Windows' }}
uses: ilammy/msvc-dev-cmd@v1.7.0
- name: Set up GCC
if: ${{ runner.os == 'Linux' }}
uses: egor-tensin/setup-gcc@v1
with:
version: 11
- name: Build
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DVTIL_BUILD_TESTS=ON
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
- name: Test
run: |
ctest --version
cd build
ctest . -C ${{ env.BUILD_TYPE }} --verbose

2
.gitignore vendored
View file

@ -379,3 +379,5 @@ build/
## Intel VTune
VTune Results/
cmake-build-*/
.idea/

View file

@ -1,33 +0,0 @@
language: cpp
os: linux
dist: bionic
addons:
apt:
sources:
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
- sourceline: 'deb https://apt.kitware.com/ubuntu/ xenial main'
key_url: 'https://apt.kitware.com/keys/kitware-archive-latest.asc'
update: true
packages:
- clang++-10
- clang-10
- libc++-10-dev
- libc++abi-10-dev
- cmake
- cmake-data
- ninja-build
script:
# Fix issue caused by previous cmake version.
- alias cmake='/usr/bin/cmake'
- /usr/bin/cmake --version
# Build and run tests.
- mkdir build
- cd build
- /usr/bin/cmake -G Ninja -DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DVTIL_BUILD_TESTS=ON ..
- ninja -j8
- ./VTIL-Tests/VTIL-Tests

View file

@ -30,4 +30,6 @@ add_subdirectory(VTIL)
# Tests
if(VTIL_BUILD_TESTS)
add_subdirectory(VTIL-Tests)
enable_testing()
add_test(NAME VTIL-Tests COMMAND "$<TARGET_FILE:VTIL-Tests>")
endif()

View file

@ -7,14 +7,11 @@
<h1 align="center">VTIL</h1>
<p align="center">
<a href="https://travis-ci.com/vtil-project/VTIL-Core">
<img src="https://img.shields.io/travis/com/vtil-project/vtil-core/master.svg?logo=travis&style=flat-square" alt="travis-ci"/>
</a>
<a href="https://ci.appveyor.com/project/can1357/vtil-core">
<img src="https://img.shields.io/appveyor/build/can1357/VTIL-Core?logo=appveyor&style=flat-square" alt="appveyor-ci"/>
<a href="https://github.com/vtil-project/VTIL-Core/actions/workflows/build.yml">
<img alt="github-actions" src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fvtil-project%2FVTIL-Core%2Fbadge&style=flat-square"/>
</a>
<a href="https://github.com/vtil-project/vtil-core/blob/master/LICENSE.md">
<img src="https://img.shields.io/github/license/vtil-project/vtil-core.svg?style=flat-square" alt="license"/>
<img alt="license" src="https://img.shields.io/github/license/vtil-project/vtil-core.svg?style=flat-square"/>
</a>
<a href="https://discord.gg/VdMdkze">
<img alt="discord" src="https://img.shields.io/discord/724300992023232533?label=chat&logo=Discord&style=flat-square">

View file

@ -148,21 +148,20 @@ namespace vtil
// Default constructor / move / copy.
//
register_desc() = default;
register_desc( register_desc&& ) = default;
register_desc( const register_desc& ) = default;
register_desc& operator=( register_desc&& ) = default;
register_desc& operator=( const register_desc& ) = default;
constexpr register_desc() = default;
constexpr register_desc( register_desc&& ) = default;
constexpr register_desc( const register_desc& ) = default;
constexpr register_desc& operator=( register_desc&& ) = default;
constexpr register_desc& operator=( const register_desc& ) = default;
// Construct a fully formed register.
//
register_desc( weak_id id, bitcnt_t bit_count, bitcnt_t bit_offset = 0 )
constexpr register_desc( weak_id id, bitcnt_t bit_count, bitcnt_t bit_offset = 0 )
: flags( ( register_flag ) id.flags ), combined_id( id.cid ), bit_count( bit_count ), bit_offset( bit_offset )
{
is_valid( true );
}
register_desc( uint32_t flags, uint64_t id, bitcnt_t bit_count, bitcnt_t bit_offset = 0, uint64_t architecture = architecture_default )
constexpr register_desc( uint32_t flags, uint64_t id, bitcnt_t bit_count, bitcnt_t bit_offset = 0, uint64_t architecture = 0 )
: flags( ( register_flag ) flags ), local_id( id ), bit_count( bit_count ), bit_offset( bit_offset ), architecture( architecture )
{
is_valid( true );
@ -173,7 +172,7 @@ namespace vtil
// Returns whether the descriptor is valid or not.
//
bool is_valid( bool force = false ) const
constexpr bool is_valid( bool force = false ) const
{
// Validate bit count and offset.
//
@ -246,26 +245,26 @@ namespace vtil
// Simple helpers to determine some properties.
//
bool is_flags() const { return flags & register_flags; }
bool is_undefined() const { return flags & register_undefined; }
bool is_local() const { return flags & register_local; }
bool is_global() const { return ( ~flags ) & register_local; }
bool is_virtual() const { return ( ~flags ) & register_physical; }
bool is_physical() const { return flags & register_physical; }
bool is_volatile() const { return flags & register_volatile; }
bool is_read_only() const { return flags & register_readonly; }
bool is_stack_pointer() const { return flags & register_stack_pointer; }
bool is_image_base() const { return flags & register_image_base; }
bool is_special() const { return flags & register_special; }
bool is_internal() const { return ( flags & register_internal ) == register_internal; }
constexpr bool is_flags() const { return flags & register_flags; }
constexpr bool is_undefined() const { return flags & register_undefined; }
constexpr bool is_local() const { return flags & register_local; }
constexpr bool is_global() const { return ( ~flags ) & register_local; }
constexpr bool is_virtual() const { return ( ~flags ) & register_physical; }
constexpr bool is_physical() const { return flags & register_physical; }
constexpr bool is_volatile() const { return flags & register_volatile; }
constexpr bool is_read_only() const { return flags & register_readonly; }
constexpr bool is_stack_pointer() const { return flags & register_stack_pointer; }
constexpr bool is_image_base() const { return flags & register_image_base; }
constexpr bool is_special() const { return flags & register_special; }
constexpr bool is_internal() const { return ( flags & register_internal ) == register_internal; }
// Returns the mask for the bits that this register's value would occupy in a 64-bit register.
//
uint64_t get_mask() const { return math::fill( bit_count, bit_offset ); }
constexpr uint64_t get_mask() const { return math::fill( bit_count, bit_offset ); }
// Checks whether bits from this register and the other register overlap.
//
bool overlaps( const register_desc& o ) const
constexpr bool overlaps( const register_desc& o ) const
{
if ( local_id != o.local_id || architecture != o.architecture || flags != o.flags )
return false;
@ -274,15 +273,15 @@ namespace vtil
// Simple wrappers to resize/rebase a register.
//
register_desc select( bitcnt_t new_bit_count, bitcnt_t new_bit_offset ) const
constexpr register_desc select( bitcnt_t new_bit_count, bitcnt_t new_bit_offset ) const
{
return { flags, local_id, new_bit_count, new_bit_offset, architecture };
}
register_desc rebase( bitcnt_t new_bit_offset ) const
constexpr register_desc rebase( bitcnt_t new_bit_offset ) const
{
return select( bit_count, new_bit_offset );
}
register_desc resize( bitcnt_t new_bit_count ) const
constexpr register_desc resize( bitcnt_t new_bit_count ) const
{
return select( new_bit_count, bit_offset );
}
@ -395,12 +394,12 @@ namespace vtil
// VTIL special registers.
//
static register_desc UNDEFINED = { register_volatile | register_undefined, 0, arch::bit_count };
static register_desc REG_IMGBASE = { register_readonly | register_image_base, 0, arch::bit_count };
static register_desc REG_FLAGS = { register_physical | register_flags, 0, arch::bit_count };
static register_desc REG_SP = { register_physical | register_stack_pointer, 0, arch::bit_count };
static constexpr register_desc UNDEFINED = { register_volatile | register_undefined, 0, arch::bit_count };
static constexpr register_desc REG_IMGBASE = { register_readonly | register_image_base, 0, arch::bit_count };
static constexpr register_desc REG_FLAGS = { register_physical | register_flags, 0, arch::bit_count };
static constexpr register_desc REG_SP = { register_physical | register_stack_pointer, 0, arch::bit_count };
// Helper to make undefined of N bits.
//
static register_desc make_undefined( bitcnt_t sz ) { return UNDEFINED.select( sz, 0 ); }
static constexpr register_desc make_undefined( bitcnt_t sz ) { return UNDEFINED.select( sz, 0 ); }
};

View file

@ -66,7 +66,11 @@ namespace vtil
{
static constexpr size_t max_entry_count = ( size_t ) limit;
static constexpr size_t max_xref_count = 8;
#ifdef __GNUC__ // There is a very weird bug in gcc-11 that breaks this
static constexpr size_t invalid_xref = 0;
#else
static constexpr size_t invalid_xref = ( size_t ) ~0ull;
#endif // __GNUC__
// Type of entries provided in the constructor.
//
@ -90,6 +94,8 @@ namespace vtil
{
for ( auto&& [id, entry] : entries )
{
fassert( id != invalid_xref );
// Must be the only reference to it.
//
auto& entry_n = linear_entries[ ( size_t ) id ];

View file

@ -1,8 +0,0 @@
version: 1.0.{build}
image: Visual Studio 2019
build_script:
- cmd: mkdir build && cd build
- cmd: cmake -DVTIL_BUILD_TESTS=ON ..
- cmd: cmake --build . --config Release
test_script:
- cmd: VTIL-Tests\Release\VTIL-Tests.exe