1. 20 Jan, 2021 1 commit
    • Pedro Eugenio Rocha Pedreira's avatar
      Add lzo manifest · 266ecae7
      Pedro Eugenio Rocha Pedreira authored
      Summary: Adding lzo manifest, which will be used by f4d/velox
      
      Reviewed By: amitkdutta
      
      Differential Revision: D25926434
      
      fbshipit-source-id: 4d7efe5eba7cdca1f682fbd4cfd6ff0337ce7c19
      266ecae7
  2. 19 Jan, 2021 1 commit
    • Stepan Palamarchuk's avatar
      Fix bug with calling addTaskEager from another FiberManager · bc4e31a8
      Stepan Palamarchuk authored
      Summary:
      The current code is calling `runInMainContext` on the FiberManager that we're scheduling to, which will do nothing if we're calling it from another fiber manager. This will assume fiber stack as a main stack which is incorrect.
      
      This diff fixes it to call `folly::fibers::runInMainContext` that would properly call `runInMainContext` on the active FiberManager.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D25116215
      
      fbshipit-source-id: 1d13f436a0599c077e7531dc1fe75f3a143e3478
      bc4e31a8
  3. 16 Jan, 2021 1 commit
    • Giuseppe Ottaviano's avatar
      Simplify ThreadedExecutor · 194b7732
      Giuseppe Ottaviano authored
      Summary: The implementation doesn't need explicit locking or condition variables, everything can be done with a single concurrent queue.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25919429
      
      fbshipit-source-id: a2b1e6332305174ba41d02fd79d9525a12b82218
      194b7732
  4. 15 Jan, 2021 3 commits
    • Giuseppe Ottaviano's avatar
      Handle task exceptions in ThreadedExecutor · 6a6ea7ca
      Giuseppe Ottaviano authored
      Summary: Make it consistent with the other executors.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25926045
      
      fbshipit-source-id: ad2f101fbba918fe2a421e394870bf67c0a044b9
      6a6ea7ca
    • Xiao Shi's avatar
      move folly gdb pretty printers to OSS repo · 118e9141
      Xiao Shi authored
      Summary: As title, move gdb pretty printers from internal repo to OSS repo
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25684325
      
      fbshipit-source-id: b7999dee1379801ee68553de64f16ac4db78b174
      118e9141
    • Niles Rogoff's avatar
      Migrate bistro to getdeps · 63154657
      Niles Rogoff authored
      Summary:
      This took a lot of cmake fuckery. I am guessing it will break the current travis-ci.org based build, since it no longer downloads gflags.
      
      As I put this diff up, mvfst (a dependency of quic (a dependency of proxygen)) is not building right now due to another diff - a fix is in progress but isn't landed yet. I applied the fix locally for the test plan, but didn't include it in the diff.
      
      Reviewed By: snarkmaster
      
      Differential Revision: D25651851
      
      fbshipit-source-id: b4f15ac7fa5293123710fe367c20d355c0970c42
      63154657
  5. 14 Jan, 2021 1 commit
    • Pranjal Raihan's avatar
      Allow using unused MicroLock slots as data · 3d7f331c
      Pranjal Raihan authored
      Summary: `folly::MicroLock` is actually 4 locks, each using 2 bits. In cases we don't need all the slots, we can use the other bits to store some data which is loaded/stored atomically with locking and unlocking. There is no change in existing `MicroLock` usage behavior.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D25842148
      
      fbshipit-source-id: 5f6ff705c35529d279629ccc256a9c210907ea5c
      3d7f331c
  6. 13 Jan, 2021 3 commits
    • Pranjal Raihan's avatar
      Fix wrong method name in DelayedInit documentation · 9d8cc918
      Pranjal Raihan authored
      Summary: This was forgotten in a refactor.
      
      Reviewed By: Mizuchi
      
      Differential Revision: D25903164
      
      fbshipit-source-id: 419131987a886f0d8d057b5b04b012d1162e564d
      9d8cc918
    • Pedro Eugenio Rocha Pedreira's avatar
      Add support for `extra_cmake_defines` · 25ce99fc
      Pedro Eugenio Rocha Pedreira authored
      Summary:
      `extra_cmake_defines` are extra flags that are passed to cmake when
      compiling each one of the dependencies. For instance:
      ```
      $ ./opensource/fbcode_builder/getdeps.py  build f4d --extra-cmake-define='{"CMAKE_CXX_FLAGS": "-mavx2 -mfma -mavx -mf16c -march=native"}'
      ```
      It takes a json map as input, which can take a list of defines (key value
      pairs).
      
      Reviewed By: wez
      
      Differential Revision: D25855781
      
      fbshipit-source-id: 7f4fef2c66f4d12f23c8d7086d6a4f24fcc01ff7
      25ce99fc
    • Michael Park's avatar
      Fix eagerness bug in FOLLY_CREATE_STATIC_MEMBER_INVOKER · 6bc74fbd
      Michael Park authored
      Summary:
      This patch performs SFINAE-friendly invocation in `FOLLY_CREATE_STATIC_MEMBER_INVOKER` in order for invocability tests to return `false` in the situation where the member is not even available. For example, given:
      ```
      FOLLY_CREATE_STATIC_MEMBER_INVOKER(foo_invoker, foo);
      ```
      With this diff, something like `std::is_invocable_v<foo_invoker, HasNoFoo>` yields `false` rather than a compilation error.
      This brings `FOLLY_CREATE_STATIC_MEMBER_INVOKER` in line with `FOLLY_CREATE_FREE_INVOKER` and `FOLLY_CREATE_MEMBER_INVOKER`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25878262
      
      fbshipit-source-id: 150ae6b2c71941317bc02de20720fed014639bf5
      6bc74fbd
  7. 12 Jan, 2021 6 commits
    • Pranjal Raihan's avatar
      Use DelayedInit for SimpleObservable · 69ab6ff9
      Pranjal Raihan authored
      Summary: The lazy initialization logic can now be simplified.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D25675031
      
      fbshipit-source-id: 048328220a2b02c13a672bebe47b79521d5f5e7a
      69ab6ff9
    • Pranjal Raihan's avatar
      DelayedInit · 56d1379c
      Pranjal Raihan authored
      Summary: `folly::DelayedInit` serves a similar use case to `folly::Lazy` but is suitable for data members and is thread-safe. The summary in `DelayedInit.h` provides a good overview.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D25671587
      
      fbshipit-source-id: 1933b15fdc7207a52067658188ca4d5724d9c40b
      56d1379c
    • Victor Zverovich's avatar
      Migrate from Folly Format to fmt · 5295ccef
      Victor Zverovich authored
      Summary: Migrate a couple of uses of Folly Format to fmt.
      
      Reviewed By: simpkins
      
      Differential Revision: D20152350
      
      fbshipit-source-id: fb9798f5ff458ee03e1c01f839dc1c55796d0eaa
      5295ccef
    • Yinan Zhang's avatar
      Add a caching utility for mallctl · 99728475
      Yinan Zhang authored
      Summary:
      This utility is meant for usage cases where
      - the same `mallctl` command is called many times, and
      - performance is important.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23638723
      
      fbshipit-source-id: 6cab9acb1121ef4f46bf7acbe29d3877005b66b1
      99728475
    • Alfred Fuller's avatar
      Fix include order and grouping in folly - 12/13 · 325e3951
      Alfred Fuller authored
      Summary: All changes were automated
      
      Reviewed By: Orvid
      
      Differential Revision: D25507587
      
      fbshipit-source-id: fe757e6919793e9b8b28d6c1ce6f064d7e2623fb
      325e3951
    • Pranav Thulasiram Bhat's avatar
      Fix race condition in loop destruction · 8df00ddc
      Pranav Thulasiram Bhat authored
      Summary:
      See docblock in new test. If the FiberManager weakref is created after the AsyncioExecutor weakref, then the native FiberManager object may be destroyed without being drained.
      
      Unfortunately, there's no way to enforce an ordering between the destructors here (since weakrefs are cleaned up in inverse order of creation).
      
      This diff adds a `__dealloc__` method to AsyncioExecutor to drain the native FiberManager
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25797920
      
      fbshipit-source-id: d1a548ebd67e7d9153eb43b169bf009a6a986e68
      8df00ddc
  8. 11 Jan, 2021 3 commits
    • Shai Szulanski's avatar
      Rename Try::throwIfFailed -> throwUnlessValue · a74807f5
      Shai Szulanski authored
      Summary: Update name to match usage of Try as tri-state, since this method also throws if the Try is empty
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25737810
      
      fbshipit-source-id: a4166153362f07353d212216fbaf7105867eef2a
      a74807f5
    • Yedidya Feldblum's avatar
      tweak is_coroutine_handle detail trait · 8d485aeb
      Yedidya Feldblum authored
      Summary: Tweak `is_coroutine_handle` detail trait. No need for leading `_` and let it be a trait variable.
      
      Reviewed By: iahs
      
      Differential Revision: D25864424
      
      fbshipit-source-id: 2f0723fcb3c97c6a0972056999f1d9574695c30b
      8d485aeb
    • Andrii Grynenko's avatar
      Fix Timekeeper.executor test · f07bb93a
      Andrii Grynenko authored
      Summary:
      1. Patch the test to remove racy behavior
      2. Added another test for a case where the timeout is hit.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25854609
      
      fbshipit-source-id: c1694e5b46b9645dc3e71a12ddc8ed12e8cf270c
      f07bb93a
  9. 10 Jan, 2021 2 commits
    • Dan Melnic's avatar
      Fix typo · 12bcb6a9
      Dan Melnic authored
      Summary: Fix typo
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25861463
      
      fbshipit-source-id: c24a521572229cbc5892a4da10999dcff94741c7
      12bcb6a9
    • Andres Suarez's avatar
      Apply clang-format update fixes · 4dab0948
      Andres Suarez authored
      Reviewed By: igorsugak
      
      Differential Revision: D25849195
      
      fbshipit-source-id: 611df723a38b5c2a7ba5184c63fdeeed1ed27025
      4dab0948
  10. 09 Jan, 2021 5 commits
    • Chang Kyu Lee's avatar
      ConcurrentHashMap: Add reserve test · d22ff006
      Chang Kyu Lee authored
      Summary: Adds a test for ConcurrentHashMap::reserve().
      
      Reviewed By: magedm
      
      Differential Revision: D25853643
      
      fbshipit-source-id: 39404105c88d6dc38cdd0b399c646affad1b26e0
      d22ff006
    • Maged Michael's avatar
      ConcurrentHashMap: Rehash only when expanding · ed6fa93c
      Maged Michael authored
      Summary:
      Fixes a bug when a call to reserve leads to calling rehash with a buck_count value that is not a power of two and/or less than the current count.
      The rehash algorithm depends on the bucket_count being a power of two and that the count does not decrease.
      
      The fix: Ensure that reserve calls rehash with a power of two argument and that rehash is skipped if the new count is not greater than the old one.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D25852794
      
      fbshipit-source-id: ae1ae6cfbcbd0659becc14c703920e9505181109
      ed6fa93c
    • Alfred Fuller's avatar
      Fix include order and grouping in folly - 8/13 · 3c135dba
      Alfred Fuller authored
      Summary: All changes were automated
      
      Reviewed By: Orvid
      
      Differential Revision: D25507562
      
      fbshipit-source-id: ffed8f0e41d3581242b4e8e00bfd1fa6ee3e299b
      3c135dba
    • Alex Guzman's avatar
      Add support for io_uring · a3de19be
      Alex Guzman authored
      Summary: Sets out the foundation of io_uring support into fizz and enables support in the fizz tool
      
      Reviewed By: mingtaoy
      
      Differential Revision: D23592810
      
      fbshipit-source-id: 6f995c99541bc2aeca3cdfb7d84ebd2d25eb1f5e
      a3de19be
    • Andrii Vasylevskyi's avatar
      Tiny fix for folly::Random::secureOneIn(0) case · 06f9ac30
      Andrii Vasylevskyi authored
      Summary: Same code as in oneIn() explicit check for arg 0, 1.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25838957
      
      fbshipit-source-id: 36ead588e435f116d0870ba45a181979c591c3f2
      06f9ac30
  11. 08 Jan, 2021 5 commits
    • Andrii Grynenko's avatar
      Enable DFATAL on use-after-fork by default · f3daf133
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D25689803
      
      fbshipit-source-id: 0d5f6093d814c58e2d90f9042b7bad65ff8d8ade
      f3daf133
    • Yedidya Feldblum's avatar
      let FunctionRef detect empty-callable · 8cf67ca0
      Yedidya Feldblum authored
      Summary: Let `folly::FunctionRef` detect empty-callable ctor arguments like `folly::Function` does. Handles pointers which may be nullptr.
      
      Reviewed By: luciang
      
      Differential Revision: D25840538
      
      fbshipit-source-id: 8cfccd57aa545ffc95807876d486ecf94aba8d62
      8cf67ca0
    • Giuseppe Ottaviano's avatar
      Mitigate lock contention in BlockingWaitExecutor · d973a73e
      Giuseppe Ottaviano authored
      Summary: `BlockingWaitExecutor::add` (and similarly `WaitExecutor`) posts the baton while holding the queue lock. If these happen in two different threads, the `drive()` thread wakes up while the lock is still held; the `add()` thread may be descheduled before the lock is released, causing the other thread to have to wait (and possibly sleep) for a while.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D25814620
      
      fbshipit-source-id: 07d3e9afdc4647e68f996e3f0a1c007fd1596611
      d973a73e
    • Greg Hogan's avatar
      Fix header filename in Overview (#1459) · 1be254ba
      Greg Hogan authored
      Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1459
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25730366
      
      Pulled By: Orvid
      
      fbshipit-source-id: d0fe94b1db6d81c0dabaa65de1483ea319669776
      1be254ba
    • Adam Simpkins's avatar
      fix a crash in AsyncSignalHandler destruction · 0ba2ee1f
      Adam Simpkins authored
      Summary:
      Update AsyncSignalHandler to check if the events are still registered before
      trying to unregister them during destruction.
      
      Without this check the code crashes if an AsyncSignalHandler is registered,
      and then the EventBase is destroyed before the AsyncSignalHandler is
      destroyed.  When the EventBase is destroyed the AsyncSignalHandler's event
      will be automatically unregistered, so `eb_event_del()` should not be called
      again here, and calling it triggers a crash by attempting to dereference the
      now-destroyed EventBase.
      
      This change makes AsyncSignalHandler behave more like the AsyncTimeout and
      EventHandler objects, which both support destroying the EventBase before these
      objects.
      
      Differential Revision: D25837541
      
      fbshipit-source-id: a1c44ab442b9078bf84a51be2cced432d247f6cd
      0ba2ee1f
  12. 07 Jan, 2021 8 commits
    • Yedidya Feldblum's avatar
      restrict FOLLY_HAVE_WEAK_SYMBOLS · 99330de1
      Yedidya Feldblum authored
      Summary: Restrict `FOLLY_HAVE_WEAK_SYMBOLS` by requiring not just that use of gnu weak symbols will compile but also that it will link and run when no definition is available for a weak declaration.
      
      Reviewed By: luciang
      
      Differential Revision: D25788660
      
      fbshipit-source-id: 52447601257242cd713ac5cd70e900e3738a9770
      99330de1
    • Misha Shneerson's avatar
      Only observe lag on tasks with Thrift's folly::RequestContext attached to it. · 9e3e7456
      Misha Shneerson authored
      Reviewed By: andriigrynenko
      
      Differential Revision: D25814958
      
      fbshipit-source-id: abc2448bf93c5016411629936a8c7f06bb0033e6
      9e3e7456
    • Yedidya Feldblum's avatar
      add kHasWeakSymbols · add97bf4
      Yedidya Feldblum authored
      Summary: Add `kHasWeakSymbols` to `folly/Portability.h` so that downstream call-sites may detect availability of weak symbols at compile time in normal C++.
      
      Reviewed By: luciang
      
      Differential Revision: D25788659
      
      fbshipit-source-id: 66768486317986396440099adecfc8dc8e553c7c
      add97bf4
    • Mingtao Yang's avatar
      Remove bad CertificateIdentityVerifier test. · ea46f07e
      Mingtao Yang authored
      Summary:
      The certificate identity verifier is meant to verify the end entity certificate
      in a certificate chain. It assumes that OpenSSL has already validated that
      the end entity has a valid signature by an issuer.
      
      The test that I am removing is asserting buggy behavior in OpenSSL prior to
      version OpenSSL 1.1.1i. The test scenario sets up a client *without a certificate
      store* connecting to a server. When the client attempts to validate this
      certificate chain, it will receive two errors:
      
      1. Unable to find issuer locally. Because the test server's certificate is signed
         by an issuer that is not present in the client's (empty) certificate store,
         while trying to determine the issuer during chain building, OpenSSL fails as
         expected. Because the test scenario *intentionally* overrides this error by
         returning `true` in `handshakeVer`, OpenSSL continues its certificate
         validation procedure.
      
      2. Unable to verify leaf signature. In order to validate the signature for a
         certificate, one needs to know the public key of the issuer. However, the
         client does not know about the issuer. Control flow would normally not reach
         here, but the client chose to continue the validation process without knowing
         the issuer in step 1. The test scenario forcefully returns "true" here, telling
         OpenSSL to continue.
      
      Prior to OpenSSL 1.1.1i (specifically commit [2e06150e](https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58)),
      OpenSSL would stop the verification procedure here. It would never signal the
      completion of the verification procedure (by sending `preverify_ok=1`).
      
      The test was asserting that this was expected. This meant that the test was
      asserting behavior on an incorrect implementation. With OpenSSL 1.1.1i, if
      all previous `handshakeVer` callbacks say that the certificate is fine, then
      OpenSSL will perform the final call with `preverify_ok=1`, which will cause the
      CertificateIdentityVerifier to be invoked.
      
      Differential Revision: D25775428
      
      fbshipit-source-id: 8a5f388ce2eb9a8d5667fd4e840b6b223e618d43
      ea46f07e
    • Mingtao Yang's avatar
      Fix SSL tests due to verifier behavior changes in OpenSSL 1.1.1i · 0ab97552
      Mingtao Yang authored
      Summary:
      Some tests were relying on internal OpenSSL behavior that changed in OpenSSL
      1.1.1i.
      
      OpenSSL commit [2e06150e](https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58)
      causes additional `handshakeVer` callback invocations. If an UNABLE_TO_VERIFY_LEAF_SIGNATURE handshakeVer
      callback overrides the result to *true*, OpenSSL will now continue to perform certificate
      verifications **as if the overriden cert was the properly found root**. This means:
      
      * It is subject to certificate expiration checks, and,
      * A final `handshakeVer` callback is invoked with `preverifyOk=1` when it passes the expiration checks.
      
      Several of our tests that relied on `handshakeVer` only being called *once* broke. Since the tests
      are testing a different, higher level aspect of verification (i.e. it is not actually trying to
      test how many times `handshakeVer` is being called), I've relaxed some of the expectations to allow
      for multiple invocations.
      
      CertificateVerifier semantics were also affected. Because there is a final
      successful `handshakeVer` callback that is issued, it is not just sufficient
      to check for depth and preverifyOk before invoking the CertificateVerifier.
      
      Reviewed By: pixelb
      
      Differential Revision: D25775429
      
      fbshipit-source-id: 98d35249a623307fb1de366c498b1dbae4fabf82
      0ab97552
    • Mingtao Yang's avatar
      Fix build failure in SSLContextRegressionTest · 6aa911b4
      Mingtao Yang authored
      Differential Revision: D25759768
      
      fbshipit-source-id: c0d38b25ab74bfce82c3d5e1339bd4ceef98af14
      6aa911b4
    • Lucian Grijincu's avatar
      folly: symbolizer: check if findSubProgramDieForAddress found the... · bc7d7abf
      Lucian Grijincu authored
      folly: symbolizer: check if findSubProgramDieForAddress found the DW_TAG_subprogram for address & terminate DFS early
      
      Summary:
      It's legal that a CU has `DW_AT_ranges` listing all addresses, but not have a `DW_TAG_subprogram` child DIE for some of those addresses.
      
      Check for `findSubProgramDieForAddress` success before reading potentially empty `subprogram` attributes in `eachParameterName`.
      
      This is a bugfix. If `DW_TAG_subprogram` is missing, we read attributes for using offsets in the uninitialized DIE `subprogram`.
      
      Initialize all struct members to avoid wasting time debugging uninitialized memory access (had fun with uninitialized `subprogram.abbr.tag` magically picking up `DW_TAG_subprogram` or garbage on the stack from previous calls).
      
       ---
      
      Terminate `findSubProgramDieForAddress` DFS on match.
      
      Before:
      - when the DW_TAG_subprogram DIE was found we stopped scanning its direct siblings (the above "return false" when `pcMatch` or `rangeMatch` are true).
      - but when we returned from recursion in the parent DIE we discarded the fact that we found the DW_TAG_subprogram and continued the DFS scan through all remaining DIEs.
      
      After:
      - after finding the DW_TAG_subprogram that owns that address the scan stops.
      
      As reference when using `-fno-debug-types-section` type info is part of `.debug_info`.
      
      ```
      namespace folly::symbolizer::test {
      void function_A();
      class SomeClass { void some_member_function() {} };
      void function_B();
      } // folly::symbolizer::test
      ```
      
      ```
      0x0000004c:   DW_TAG_namespace [2] *
                      DW_AT_name [DW_FORM_strp]       ( "folly")
      
      0x00000051:     DW_TAG_namespace [2] *
                        DW_AT_name [DW_FORM_strp]     ( "symbolizer")
      
      0x00000056:       DW_TAG_namespace [2] *
                          DW_AT_name [DW_FORM_strp]   ( "test")
      
      0x0000012e:         DW_TAG_subprogram [7] *
                            DW_AT_name [DW_FORM_strp] ( "function_A")
      
      0x0000022d:         DW_TAG_class_type [14] *
                            DW_AT_name [DW_FORM_strp] ( "SomeClass")
      
      0x00000243:           DW_TAG_subprogram [16] *
                              DW_AT_name [DW_FORM_strp]       ( "some_member_function")
      
      0x000002ed:         DW_TAG_subprogram [9] *
                            DW_AT_name [DW_FORM_strp] ( "function_B")
      ```
      
      Before:
      - if `address` corresponds to code inside `SomeClass::some_member_function` we stopped iterating over `SomeClass::some_member_function`'s sibling DIEs, and returned.
      - but we still continued scanning over `SomeClass`'s sibling DIEs and all their children recursively (DFS), and then `SomeClass`'s parents siblings etc until reaching the end of the CU
      
      After:
      - we stop DFS on match
      
      FWIW: trees are somewhat flatter when using `-fdebug-types-section`: member functions are extracted from their classes, but they're still part of namespace subtrees so the code unnecessarily explored siblings of the innermost namespace.
      
      Differential Revision: D25799618
      
      fbshipit-source-id: 9a0267e12a7d496ad00263bf30a12dc548764288
      bc7d7abf
    • Nathan Lanza's avatar
      Convert implicit cast from `long` to `double` to a `static_cast` · 5a9b1bb0
      Nathan Lanza authored
      Summary:
      This code implicitly casts a `long` to `double` but a `double`
      can not accurately represent an integer above `2^53` as
      the mantissa only stores that many digits. At `2^53 + 1`
      `double`s increment by `2`. Thus this cast is lossy. Though,
      casting a single value `LONG_MAX` to a `double` is and
      being off by one doesn't cause any harm here.
      
      Reviewed By: ispeters
      
      Differential Revision: D25654006
      
      fbshipit-source-id: 3d84092f1786d7879dd48d73af8edbbc80bb3585
      5a9b1bb0
  13. 06 Jan, 2021 1 commit
    • Lucian Grijincu's avatar
      folly::symbolizer: drop templated FrameArray from test functions and move test... · 8f2210a5
      Lucian Grijincu authored
      folly::symbolizer: drop templated FrameArray from test functions and move test functions to separate compilation unit with minimal dependencies
      
      Summary:
      Eliminate `#include` dependencies of `SymbolizerTestUtils.cpp` so that the `.o` file with interesting debug info is tiny and easily inspectable.
      - Instead of calling test functions that need to be inlined from the `SymbolizerTest.o` use `call_` trampolines so that the inlined debug info is generated in the minimal/tiny `SymbolizerTestUtils.o`.
      
       ---
      
      Remove the frames template argument so that:
      - removed dependencies from the SymbolizerTestUtils to minimize generated debug info (no longer need to include headers about FrameArray).
      - all functions used in tests can be made regular functions
      - all functions who's debug info is interesting to debug can be easily emitted in a single object file `SymbolizerTestUtils.o`
      
      Reduce some of the copy-pasta that made test noisy by grouping together function name, file and lineno.
      
       ---
      
      Test for either fullName/shortName (`DW_AT_linkage_name`/`DW_AT_name`)
      - fullName: demangled function name with namespace, qualifiers, argument types, etc. and
      - shortName: simple function name to support both cases when either both `DW_AT_linkage_name` and `DW_AT_name` or a single one of them is emitted.
      - When `DW_AT_linkage_name` (full mangled name) and `DW_AT_name` (just the function name) match, DWARF emitters omit `DW_AT_linkage_name` (to save space). With `-fsplit-dwarf-inlining` only `DW_AT_name` is emitted in `.debug_info` and the `DW_AT_linkage_name` is emitted in the `.debug_info.dwo` sections.
      
      Differential Revision: D25712808
      
      fbshipit-source-id: 88d2ac22564e3d607fb3864d37e49892a5eaf002
      8f2210a5