Skip to content
Snippets Groups Projects
  1. Jan 28, 2018
  2. Jan 18, 2018
    • Pietro Fezzardi's avatar
      Remove useless type `GenericFunctor` · 5d9aa31c
      Pietro Fezzardi authored
      `GenericFunctor` is substituted with the `std::integral_constant`
      template. This also allows us to remove code that requires C++14.
      
      It also removes the now useless cmake tests on the compiler flag
      `-Wno-error=noexcept-type` that was introduced to disable fatal warnings
      on the type `GenericFunctor`.
      Now that this type has been removed the check is not necessary anymore,
      because the `std::integral_constant` template used now does not cause
      the warning.
      So we can go back to enabling the fatal warnings.
      5d9aa31c
  3. Jan 17, 2018
    • Andrea Gussoni's avatar
      Remove leading dot from segment variable names · 97ed77d2
      Andrea Gussoni authored
      Changed the names of the global variables (removed the leading `.`)
      representing the segments of the binary, in order to prevent errors with
      duplicated names when recompiling a binary with `llc` in debug mode.
      97ed77d2
    • Alessandro Di Federico's avatar
      Fix `li-csv-to-ld-options` warning message · 3aed484a
      Alessandro Di Federico authored
      We used to check if the value of `/proc/sys/vm/mmap_min_addr` is at
      least as high as the minimum segment of the input binary. If this is not
      the case the linked program will segfault at run-time without much
      explanation.
      
      However, in truth, we need to be able to map also the page before the
      lowest page the original binary mapped. The main reason for this is to
      have space for the (outer) ELF header.
      
      It turns out that on many distros the default minimum value is
      `0x10000`, which happens to be exactly the same address at which ARM
      binaries mmap their lowest page. This lead to no warning, but a segfault
      at run-time.
      
      The AWK script now checks for the correct value, and also suggests the
      correct value.
      
      In the future, we might want to create a new segment for the outer ELF
      header and position it elsewhere in the address space.
      3aed484a
    • Andrea Gussoni's avatar
      Refactored initialization of compilation flags · 4e871c6f
      Andrea Gussoni authored
      We now take advantage of a macro to add a series of compilation flags,
      macro that also takes care of checking that the flags are supported by
      the compiler.
      
      This patch has been developed by Alessandro Di Federico.
      4e871c6f
    • Andrea Gussoni's avatar
      Add checks for `no-pie` flag for cross-compilers · 0735acd2
      Andrea Gussoni authored
      The check to see if a compiler supports the `no-pie` flag was done only
      for the main C compiler, and not for the cross-compilers used for
      creating the executables for the different supported architectures.
      
      This commit introduces the aforementioned missing checks.
      
      In addition instead of hard-coding the flags to check in the CMakeLists
      file we have a list that we pass each time we instantiate a project for
      the cross-compilers, and we check for the availability of all the flags.
      
      In order to do this we need to apply a sort of serialization and
      deserialization to avoid the "unpack" of the list passed as argument to
      the external project (that is implemented as a `;` separated string).
      
      Also implemented a fix suggested in the merge request for a line that
      mistakenly added the `TEST_CFLAGS` variable to the `NO_PIE` variable.
      0735acd2
  4. Oct 29, 2017
    • Alessandro Di Federico's avatar
      Warn the user if `mmap_min_addr` is too high · abd3154c
      Alessandro Di Federico authored
      Many Linux distributions prevent programs from mapping memory pages at
      low addresses. This can lead the translated program to segfault without
      any additional explanation. This happens in particular with ARM
      binaries, which tend to have the first segment allocated at very low
      addresses.
      
      This behavior can be configured through
      `/proc/sys/vm/mmap_min_addr`. This commit introduces a warning to the
      user in the `li-csv-to-ld-options` script in case a segment with an
      address lower than `mmap_min_addr` is requested.
      abd3154c
  5. Oct 28, 2017
  6. Aug 28, 2017
    • Pietro Fezzardi's avatar
      Add `-no-pie` to compiler flags · 55eb769a
      Pietro Fezzardi authored
      Add this flag to the flags used for Runtime tests and to the flags used
      in the translate script.
      
      Recent GCC versions (`gcc-7` and later) enable PIE by default, and
      `-fno-pie` apparently is not enough to disable it.
      55eb769a
    • Pietro Fezzardi's avatar
      Make `-Wnoexcept-type` non-fatal, if present · 9824a1b6
      Pietro Fezzardi authored
      This warning was introduced with gcc-7 to (quoting the documentation)
      "Warn if the C++1z feature making noexcept part of a function type
      changes the mangled name of a symbol relative to C++14. Enabled by -Wabi
      and -Wc++1z-compat.".
      
      It is triggered from the `GenericFunctor` class template. It can be
      safely made not fatal, because this class template is not exposed
      outside and the whole project is currently compiled with the same C++
      standard compiler flags.
      
      This commit adds machinery to `CMakeLists.txt` to make the warning not
      fatal, but only if present. Disabling it when not present would trigger
      build errors.
      9824a1b6
  7. Aug 13, 2017
    • Alessandro Di Federico's avatar
      Fix handling of devirtualized calls · 069ae70d
      Alessandro Di Federico authored
      When we have an indirect call (or jump) we are sometimes able to
      identify one or more possible targets, therefore, as an optimization,
      before performing the indirect jump we check if the target is one of the
      expected ones.
      
      This optimization however was creating two issues with the handling of
      indirect function calls: 1) the call to the `function_call` marker was
      no longer positioned right before the terminator and 2) the function
      call was no longer identified as an indirect function call but as call
      to `anyPC`. This commit fixes these two issues.
      
      These issues have been identified thanks to a report from Andrea
      Gussoni.
      069ae70d
  8. Aug 12, 2017
  9. Aug 01, 2017
  10. Jul 07, 2017
    • Alessandro Di Federico's avatar
      Handle `.bss`-only data segment · 9db62b28
      Alessandro Di Federico authored
      This commit fixes an assertion triggered by the fact that a segment
      includes exclusively zero-initialized data (i.e., size on file is 0,
      memory size is not). In this case LLVM detects the fact that the global
      variable associated to the segment is composed exclusively composed by
      0s and uses a `ConstantAggregateZero` as an initializer instead of a
      `ConstantDataArray`.
      
      Currently the solution is ignore that data, however, in the future it
      might be beneficial to be able to read data from `.bss`, even if we just
      have zeros there.
      
      Thanks to Thorbjoern Schulz for reporting this bug.
      9db62b28
  11. Apr 27, 2017
  12. Apr 21, 2017
    • Alessandro Di Federico's avatar
      Fix GCC 6.3.0 warnings · 24c1df35
      Alessandro Di Federico authored
      This commit fixes some warnings given by GCC 6.3.0.
      
      * Some `assert(false)` are not recognized as `noreturn`ing. They have
        been replaced with `llvm_unreachable`.
      * Added `-Wno-ignored-attributes`: attributes are not part the function
        name mangling, and therefore they might create some problems when they
        are involved in template arguments. We don't care.
      * Specializations of `readPointer` functions in `binaryfile.h` are now
        `inline`, so they don't appear as "unused" functions.
      24c1df35
Loading