forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request rust-lang#444 from GuillaumeGomez/improve-docs
Improve docs
- Loading branch information
Showing
6 changed files
with
257 additions
and
223 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# How to debug GCC LTO | ||
|
||
Run do the command with `-v -save-temps` and then extract the `lto1` line from the output and run that under the debugger. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
# Debugging libgccjit | ||
|
||
Sometimes, libgccjit will crash and output an error like this: | ||
|
||
``` | ||
during RTL pass: expand | ||
libgccjit.so: error: in expmed_mode_index, at expmed.h:249 | ||
0x7f0da2e61a35 expmed_mode_index | ||
../../../gcc/gcc/expmed.h:249 | ||
0x7f0da2e61aa4 expmed_op_cost_ptr | ||
../../../gcc/gcc/expmed.h:271 | ||
0x7f0da2e620dc sdiv_cost_ptr | ||
../../../gcc/gcc/expmed.h:540 | ||
0x7f0da2e62129 sdiv_cost | ||
../../../gcc/gcc/expmed.h:558 | ||
0x7f0da2e73c12 expand_divmod(int, tree_code, machine_mode, rtx_def*, rtx_def*, rtx_def*, int) | ||
../../../gcc/gcc/expmed.c:4335 | ||
0x7f0da2ea1423 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, expand_modifier) | ||
../../../gcc/gcc/expr.c:9240 | ||
0x7f0da2cd1a1e expand_gimple_stmt_1 | ||
../../../gcc/gcc/cfgexpand.c:3796 | ||
0x7f0da2cd1c30 expand_gimple_stmt | ||
../../../gcc/gcc/cfgexpand.c:3857 | ||
0x7f0da2cd90a9 expand_gimple_basic_block | ||
../../../gcc/gcc/cfgexpand.c:5898 | ||
0x7f0da2cdade8 execute | ||
../../../gcc/gcc/cfgexpand.c:6582 | ||
``` | ||
|
||
To see the code which causes this error, call the following function: | ||
|
||
```c | ||
gcc_jit_context_dump_to_file(ctxt, "/tmp/output.c", 1 /* update_locations */) | ||
``` | ||
This will create a C-like file and add the locations into the IR pointing to this C file. | ||
Then, rerun the program and it will output the location in the second line: | ||
``` | ||
libgccjit.so: /tmp/something.c:61322:0: error: in expmed_mode_index, at expmed.h:249 | ||
``` | ||
Or add a breakpoint to `add_error` in gdb and print the line number using: | ||
``` | ||
p loc->m_line | ||
p loc->m_filename->m_buffer | ||
``` | ||
To print a debug representation of a tree: | ||
```c | ||
debug_tree(expr); | ||
``` | ||
|
||
(defined in print-tree.h) | ||
|
||
To print a debug representation of a gimple struct: | ||
|
||
```c | ||
debug_gimple_stmt(gimple_struct) | ||
``` | ||
To get the `rustc` command to run in `gdb`, add the `--verbose` flag to `cargo build`. | ||
To have the correct file paths in `gdb` instead of `/usr/src/debug/gcc/libstdc++-v3/libsupc++/eh_personality.cc`: | ||
Maybe by calling the following at the beginning of gdb: | ||
``` | ||
set substitute-path /usr/src/debug/gcc /path/to/gcc-repo/gcc | ||
``` | ||
TODO(antoyo): but that's not what I remember I was doing. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Common errors | ||
|
||
This file lists errors that were encountered and how to fix them. | ||
|
||
### `failed to build archive` error | ||
|
||
When you get this error: | ||
|
||
``` | ||
error: failed to build archive: failed to open object file: No such file or directory (os error 2) | ||
``` | ||
|
||
That can be caused by the fact that you try to compile with `lto = "fat"`, but you didn't compile the sysroot with LTO. | ||
(Not sure if that's the reason since I cannot reproduce anymore. Maybe it happened when forgetting setting `FAT_LTO`.) | ||
|
||
### ld: cannot find crtbegin.o | ||
|
||
When compiling an executable with libgccijt, if setting the `*LIBRARY_PATH` variables to the install directory, you will get the following errors: | ||
|
||
``` | ||
ld: cannot find crtbegin.o: No such file or directory | ||
ld: cannot find -lgcc: No such file or directory | ||
ld: cannot find -lgcc: No such file or directory | ||
libgccjit.so: error: error invoking gcc driver | ||
``` | ||
|
||
To fix this, set the variables to `gcc-build/build/gcc`. |
Oops, something went wrong.