Clean up debug string functions in OS_HLE.

 * Use GetString instead of GetPointer.
 * Use C++ strings instead of char* pointer math.
Add Linux perf JIT support (/tmp/perf-$pid.map)

'perf' is the standard builtin tool for performance analysis on recent
Linux kernel. Its source code is shipped within the kernel repository.

'perf' has basic support for JIT. For each process, it can read a file
named /tmp/perf-$PID.map. This file contains mapping from address
range to function name in the format:

  41187e2a 1a EmuCode_804a33fc

with the following entries:

 1. beginning of the range (hexadecimal);
 2. size of the range (hexadecimal);
 3. name of the function.

We supply the PowerPC address of the basic block as function name.

Usage:

    DOLPHIN_PERF_DIR=/tmp dolphin-emu &
    perf record -F99 -p $(pgrep dolphin-emu) --call-graph dwarf
    perf script | stackcollapse-perf.pl | grep EmuCode__ | flamegraph.pl > profile.svg

Issue: perf does not have support for region invalidation. It reads
the file in postprocessing. It probably does not work very well if a
JIT region is reused for another basic block: wrong results should be
expected in this case. Currently, nothing is done to prevent this.
Move the JIT registration logic in its own file

Move the JITed function/basic-block registration logic out of the CPU
subsystem in order to add JIT registration to JITed DSP and
Video/VertexLoader code.

This necessary in order to add /tmp/perf-$pid.map support to other
JITed code as they need to write to the same file.
Use CLI argument for Linux perf JIT support
ControllerConfigDiag: Potentially fix scaling problems on high DPI

Fixes issue 7940 hopefully.
GLX: try to get an OpenGL 3.3 core context
VideoCommon: merge debug info generators
VideoCommon: merge debug test generators
OGL: draw shadows within rasterfont itself
Updates the gradle build file to the latest needed for Android Studio.

This may require the buildbot to be updated.
Merge pull request #1725 from Sonicadvance1/update_gradle

Updates the gradle build file to the latest needed for Android Studio.
[AArch64] Improvements to the AArch64 emitter.

Fixes issues with negative offsets in loadstore instructions.
Adds ADRP/ADR instructions.
Optimizes MOVI2R function to take advantage of ADRP on pointers, can change a 3 instruction operation down to one.
Adds GPR push/pop operations for ABI related things.
[AArch64] Removes ARMv8 as a generic target.

Generic flag disables the ability to have backpatching supporting.
Also compiles Dolphin with CRC instructions enabled.
[AArch64] Register cache improvements.
Adds the ability to flush the cache and maintain state.
Adds the BindToRegister ability.
Sorts register usage as callee saved used first, reduces dumping pressure when jumping to external routines/interpreter.
Adds a function to store a register, for use when flushing a register that won't be used during the rest of a block.
[ARM] Adds a ArmCommon folder.

Moves the backpatch flags and struct to a common location for ARM.
I'm sure there will be more things that use this common ARM location in the future.
[AArch64] Removes CODE_SIZE variable.

This is in a global location now which conflicts with this one.
[AArch64] Add an exception exit function with the exit location already in PC.
This will be used with idle skipping later.
[AArch64] Optimization in the dispatcher.

Align our dispatcher to a page so we can jump to it with a ADRP+BR pair instead of ADRP+ADD+BR.
Also make sure to save /all/ of our callee saved registers that we are supposed to save.
Requires PR #1705 prior to merging.
[AArch64] Flush registers from register cache if they won't be used again.

This requires PR #1705 and #1723 prior to merging.
[AArch64] Adds support for BindToRegister to the integer instructions.

This requires PR #1723 prior to merging.